You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'akpm' (Andrew's patch-bomb)
Merge first batch of patches from Andrew Morton: "A few misc things and all the MM queue" * emailed from Andrew Morton <akpm@linux-foundation.org>: (92 commits) memcg: avoid THP split in task migration thp: add HPAGE_PMD_* definitions for !CONFIG_TRANSPARENT_HUGEPAGE memcg: clean up existing move charge code mm/memcontrol.c: remove unnecessary 'break' in mem_cgroup_read() mm/memcontrol.c: remove redundant BUG_ON() in mem_cgroup_usage_unregister_event() mm/memcontrol.c: s/stealed/stolen/ memcg: fix performance of mem_cgroup_begin_update_page_stat() memcg: remove PCG_FILE_MAPPED memcg: use new logic for page stat accounting memcg: remove PCG_MOVE_LOCK flag from page_cgroup memcg: simplify move_account() check memcg: remove EXPORT_SYMBOL(mem_cgroup_update_page_stat) memcg: kill dead prev_priority stubs memcg: remove PCG_CACHE page_cgroup flag memcg: let css_get_next() rely upon rcu_read_lock() cgroup: revert ss_id_lock to spinlock idr: make idr_get_next() good for rcu_read_lock() memcg: remove unnecessary thp check in page stat accounting memcg: remove redundant returns memcg: enum lru_list lru ...
This commit is contained in:
+6
-6
@@ -2989,9 +2989,9 @@ static const struct pid_entry tgid_base_stuff[] = {
|
||||
INF("cmdline", S_IRUGO, proc_pid_cmdline),
|
||||
ONE("stat", S_IRUGO, proc_tgid_stat),
|
||||
ONE("statm", S_IRUGO, proc_pid_statm),
|
||||
REG("maps", S_IRUGO, proc_maps_operations),
|
||||
REG("maps", S_IRUGO, proc_pid_maps_operations),
|
||||
#ifdef CONFIG_NUMA
|
||||
REG("numa_maps", S_IRUGO, proc_numa_maps_operations),
|
||||
REG("numa_maps", S_IRUGO, proc_pid_numa_maps_operations),
|
||||
#endif
|
||||
REG("mem", S_IRUSR|S_IWUSR, proc_mem_operations),
|
||||
LNK("cwd", proc_cwd_link),
|
||||
@@ -3002,7 +3002,7 @@ static const struct pid_entry tgid_base_stuff[] = {
|
||||
REG("mountstats", S_IRUSR, proc_mountstats_operations),
|
||||
#ifdef CONFIG_PROC_PAGE_MONITOR
|
||||
REG("clear_refs", S_IWUSR, proc_clear_refs_operations),
|
||||
REG("smaps", S_IRUGO, proc_smaps_operations),
|
||||
REG("smaps", S_IRUGO, proc_pid_smaps_operations),
|
||||
REG("pagemap", S_IRUGO, proc_pagemap_operations),
|
||||
#endif
|
||||
#ifdef CONFIG_SECURITY
|
||||
@@ -3348,9 +3348,9 @@ static const struct pid_entry tid_base_stuff[] = {
|
||||
INF("cmdline", S_IRUGO, proc_pid_cmdline),
|
||||
ONE("stat", S_IRUGO, proc_tid_stat),
|
||||
ONE("statm", S_IRUGO, proc_pid_statm),
|
||||
REG("maps", S_IRUGO, proc_maps_operations),
|
||||
REG("maps", S_IRUGO, proc_tid_maps_operations),
|
||||
#ifdef CONFIG_NUMA
|
||||
REG("numa_maps", S_IRUGO, proc_numa_maps_operations),
|
||||
REG("numa_maps", S_IRUGO, proc_tid_numa_maps_operations),
|
||||
#endif
|
||||
REG("mem", S_IRUSR|S_IWUSR, proc_mem_operations),
|
||||
LNK("cwd", proc_cwd_link),
|
||||
@@ -3360,7 +3360,7 @@ static const struct pid_entry tid_base_stuff[] = {
|
||||
REG("mountinfo", S_IRUGO, proc_mountinfo_operations),
|
||||
#ifdef CONFIG_PROC_PAGE_MONITOR
|
||||
REG("clear_refs", S_IWUSR, proc_clear_refs_operations),
|
||||
REG("smaps", S_IRUGO, proc_smaps_operations),
|
||||
REG("smaps", S_IRUGO, proc_tid_smaps_operations),
|
||||
REG("pagemap", S_IRUGO, proc_pagemap_operations),
|
||||
#endif
|
||||
#ifdef CONFIG_SECURITY
|
||||
|
||||
+6
-3
@@ -53,9 +53,12 @@ extern int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
|
||||
struct pid *pid, struct task_struct *task);
|
||||
extern loff_t mem_lseek(struct file *file, loff_t offset, int orig);
|
||||
|
||||
extern const struct file_operations proc_maps_operations;
|
||||
extern const struct file_operations proc_numa_maps_operations;
|
||||
extern const struct file_operations proc_smaps_operations;
|
||||
extern const struct file_operations proc_pid_maps_operations;
|
||||
extern const struct file_operations proc_tid_maps_operations;
|
||||
extern const struct file_operations proc_pid_numa_maps_operations;
|
||||
extern const struct file_operations proc_tid_numa_maps_operations;
|
||||
extern const struct file_operations proc_pid_smaps_operations;
|
||||
extern const struct file_operations proc_tid_smaps_operations;
|
||||
extern const struct file_operations proc_clear_refs_operations;
|
||||
extern const struct file_operations proc_pagemap_operations;
|
||||
extern const struct file_operations proc_net_operations;
|
||||
|
||||
@@ -115,6 +115,8 @@ u64 stable_page_flags(struct page *page)
|
||||
u |= 1 << KPF_COMPOUND_TAIL;
|
||||
if (PageHuge(page))
|
||||
u |= 1 << KPF_HUGE;
|
||||
else if (PageTransCompound(page))
|
||||
u |= 1 << KPF_THP;
|
||||
|
||||
/*
|
||||
* Caveats on high order pages: page->_count will only be set
|
||||
|
||||
+260
-95
File diff suppressed because it is too large
Load Diff
+58
-11
@@ -134,9 +134,11 @@ static void pad_len_spaces(struct seq_file *m, int len)
|
||||
/*
|
||||
* display a single VMA to a sequenced file
|
||||
*/
|
||||
static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
|
||||
static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
|
||||
int is_pid)
|
||||
{
|
||||
struct mm_struct *mm = vma->vm_mm;
|
||||
struct proc_maps_private *priv = m->private;
|
||||
unsigned long ino = 0;
|
||||
struct file *file;
|
||||
dev_t dev = 0;
|
||||
@@ -168,10 +170,19 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
|
||||
pad_len_spaces(m, len);
|
||||
seq_path(m, &file->f_path, "");
|
||||
} else if (mm) {
|
||||
if (vma->vm_start <= mm->start_stack &&
|
||||
vma->vm_end >= mm->start_stack) {
|
||||
pid_t tid = vm_is_stack(priv->task, vma, is_pid);
|
||||
|
||||
if (tid != 0) {
|
||||
pad_len_spaces(m, len);
|
||||
seq_puts(m, "[stack]");
|
||||
/*
|
||||
* Thread stack in /proc/PID/task/TID/maps or
|
||||
* the main process stack.
|
||||
*/
|
||||
if (!is_pid || (vma->vm_start <= mm->start_stack &&
|
||||
vma->vm_end >= mm->start_stack))
|
||||
seq_printf(m, "[stack]");
|
||||
else
|
||||
seq_printf(m, "[stack:%d]", tid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,11 +193,22 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
|
||||
/*
|
||||
* display mapping lines for a particular process's /proc/pid/maps
|
||||
*/
|
||||
static int show_map(struct seq_file *m, void *_p)
|
||||
static int show_map(struct seq_file *m, void *_p, int is_pid)
|
||||
{
|
||||
struct rb_node *p = _p;
|
||||
|
||||
return nommu_vma_show(m, rb_entry(p, struct vm_area_struct, vm_rb));
|
||||
return nommu_vma_show(m, rb_entry(p, struct vm_area_struct, vm_rb),
|
||||
is_pid);
|
||||
}
|
||||
|
||||
static int show_pid_map(struct seq_file *m, void *_p)
|
||||
{
|
||||
return show_map(m, _p, 1);
|
||||
}
|
||||
|
||||
static int show_tid_map(struct seq_file *m, void *_p)
|
||||
{
|
||||
return show_map(m, _p, 0);
|
||||
}
|
||||
|
||||
static void *m_start(struct seq_file *m, loff_t *pos)
|
||||
@@ -240,10 +262,18 @@ static const struct seq_operations proc_pid_maps_ops = {
|
||||
.start = m_start,
|
||||
.next = m_next,
|
||||
.stop = m_stop,
|
||||
.show = show_map
|
||||
.show = show_pid_map
|
||||
};
|
||||
|
||||
static int maps_open(struct inode *inode, struct file *file)
|
||||
static const struct seq_operations proc_tid_maps_ops = {
|
||||
.start = m_start,
|
||||
.next = m_next,
|
||||
.stop = m_stop,
|
||||
.show = show_tid_map
|
||||
};
|
||||
|
||||
static int maps_open(struct inode *inode, struct file *file,
|
||||
const struct seq_operations *ops)
|
||||
{
|
||||
struct proc_maps_private *priv;
|
||||
int ret = -ENOMEM;
|
||||
@@ -251,7 +281,7 @@ static int maps_open(struct inode *inode, struct file *file)
|
||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||
if (priv) {
|
||||
priv->pid = proc_pid(inode);
|
||||
ret = seq_open(file, &proc_pid_maps_ops);
|
||||
ret = seq_open(file, ops);
|
||||
if (!ret) {
|
||||
struct seq_file *m = file->private_data;
|
||||
m->private = priv;
|
||||
@@ -262,8 +292,25 @@ static int maps_open(struct inode *inode, struct file *file)
|
||||
return ret;
|
||||
}
|
||||
|
||||
const struct file_operations proc_maps_operations = {
|
||||
.open = maps_open,
|
||||
static int pid_maps_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return maps_open(inode, file, &proc_pid_maps_ops);
|
||||
}
|
||||
|
||||
static int tid_maps_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return maps_open(inode, file, &proc_tid_maps_ops);
|
||||
}
|
||||
|
||||
const struct file_operations proc_pid_maps_operations = {
|
||||
.open = pid_maps_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_private,
|
||||
};
|
||||
|
||||
const struct file_operations proc_tid_maps_operations = {
|
||||
.open = tid_maps_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_private,
|
||||
|
||||
Reference in New Issue
Block a user