mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge branch 'akpm' (Andrew's patch-bomb)
Merge misc patches from Andrew Morton: "Incoming: - lots of misc stuff - backlight tree updates - lib/ updates - Oleg's percpu-rwsem changes - checkpatch - rtc - aoe - more checkpoint/restart support I still have a pile of MM stuff pending - Pekka should be merging later today after which that is good to go. A number of other things are twiddling thumbs awaiting maintainer merges." * emailed patches from Andrew Morton <[email protected]>: (180 commits) scatterlist: don't BUG when we can trivially return a proper error. docs: update documentation about /proc/<pid>/fdinfo/<fd> fanotify output fs, fanotify: add @mflags field to fanotify output docs: add documentation about /proc/<pid>/fdinfo/<fd> output fs, notify: add procfs fdinfo helper fs, exportfs: add exportfs_encode_inode_fh() helper fs, exportfs: escape nil dereference if no s_export_op present fs, epoll: add procfs fdinfo helper fs, eventfd: add procfs fdinfo helper procfs: add ability to plug in auxiliary fdinfo providers tools/testing/selftests/kcmp/kcmp_test.c: print reason for failure in kcmp_test breakpoint selftests: print failure status instead of cause make error kcmp selftests: print fail status instead of cause make error kcmp selftests: make run_tests fix mem-hotplug selftests: print failure status instead of cause make error cpu-hotplug selftests: print failure status instead of cause make error mqueue selftests: print failure status instead of cause make error vm selftests: print failure status instead of cause make error ubifs: use prandom_bytes mtd: nandsim: use prandom_bytes ...
This commit is contained in:
commit
848b81415c
185 changed files with 3447 additions and 1339 deletions
|
|
@ -212,7 +212,7 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
|
|||
group_info = cred->group_info;
|
||||
task_unlock(p);
|
||||
|
||||
for (g = 0; g < min(group_info->ngroups, NGROUPS_SMALL); g++)
|
||||
for (g = 0; g < group_info->ngroups; g++)
|
||||
seq_printf(m, "%d ",
|
||||
from_kgid_munged(user_ns, GROUP_AT(group_info, g)));
|
||||
put_cred(cred);
|
||||
|
|
@ -220,7 +220,7 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
|
|||
seq_putc(m, '\n');
|
||||
}
|
||||
|
||||
static void render_sigset_t(struct seq_file *m, const char *header,
|
||||
void render_sigset_t(struct seq_file *m, const char *header,
|
||||
sigset_t *set)
|
||||
{
|
||||
int i;
|
||||
|
|
@ -308,6 +308,10 @@ static void render_cap_t(struct seq_file *m, const char *header,
|
|||
seq_putc(m, '\n');
|
||||
}
|
||||
|
||||
/* Remove non-existent capabilities */
|
||||
#define NORM_CAPS(v) (v.cap[CAP_TO_INDEX(CAP_LAST_CAP)] &= \
|
||||
CAP_TO_MASK(CAP_LAST_CAP + 1) - 1)
|
||||
|
||||
static inline void task_cap(struct seq_file *m, struct task_struct *p)
|
||||
{
|
||||
const struct cred *cred;
|
||||
|
|
@ -321,12 +325,24 @@ static inline void task_cap(struct seq_file *m, struct task_struct *p)
|
|||
cap_bset = cred->cap_bset;
|
||||
rcu_read_unlock();
|
||||
|
||||
NORM_CAPS(cap_inheritable);
|
||||
NORM_CAPS(cap_permitted);
|
||||
NORM_CAPS(cap_effective);
|
||||
NORM_CAPS(cap_bset);
|
||||
|
||||
render_cap_t(m, "CapInh:\t", &cap_inheritable);
|
||||
render_cap_t(m, "CapPrm:\t", &cap_permitted);
|
||||
render_cap_t(m, "CapEff:\t", &cap_effective);
|
||||
render_cap_t(m, "CapBnd:\t", &cap_bset);
|
||||
}
|
||||
|
||||
static inline void task_seccomp(struct seq_file *m, struct task_struct *p)
|
||||
{
|
||||
#ifdef CONFIG_SECCOMP
|
||||
seq_printf(m, "Seccomp:\t%d\n", p->seccomp.mode);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void task_context_switch_counts(struct seq_file *m,
|
||||
struct task_struct *p)
|
||||
{
|
||||
|
|
@ -360,6 +376,7 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
|
|||
}
|
||||
task_sig(m, task);
|
||||
task_cap(m, task);
|
||||
task_seccomp(m, task);
|
||||
task_cpus_allowed(m, task);
|
||||
cpuset_task_status_allowed(m, task);
|
||||
task_context_switch_counts(m, task);
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@ static int seq_show(struct seq_file *m, void *v)
|
|||
if (!ret) {
|
||||
seq_printf(m, "pos:\t%lli\nflags:\t0%o\n",
|
||||
(long long)file->f_pos, f_flags);
|
||||
if (file->f_op->show_fdinfo)
|
||||
ret = file->f_op->show_fdinfo(m, file);
|
||||
fput(file);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -195,11 +195,7 @@ void proc_device_tree_add_node(struct device_node *np,
|
|||
set_node_proc_entry(np, de);
|
||||
for (child = NULL; (child = of_get_next_child(np, child));) {
|
||||
/* Use everything after the last slash, or the full name */
|
||||
p = strrchr(child->full_name, '/');
|
||||
if (!p)
|
||||
p = child->full_name;
|
||||
else
|
||||
++p;
|
||||
p = kbasename(child->full_name);
|
||||
|
||||
if (duplicate_name(de, p))
|
||||
p = fixup_name(np, de, p);
|
||||
|
|
|
|||
|
|
@ -526,6 +526,57 @@ static int smaps_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma)
|
||||
{
|
||||
/*
|
||||
* Don't forget to update Documentation/ on changes.
|
||||
*/
|
||||
static const char mnemonics[BITS_PER_LONG][2] = {
|
||||
/*
|
||||
* In case if we meet a flag we don't know about.
|
||||
*/
|
||||
[0 ... (BITS_PER_LONG-1)] = "??",
|
||||
|
||||
[ilog2(VM_READ)] = "rd",
|
||||
[ilog2(VM_WRITE)] = "wr",
|
||||
[ilog2(VM_EXEC)] = "ex",
|
||||
[ilog2(VM_SHARED)] = "sh",
|
||||
[ilog2(VM_MAYREAD)] = "mr",
|
||||
[ilog2(VM_MAYWRITE)] = "mw",
|
||||
[ilog2(VM_MAYEXEC)] = "me",
|
||||
[ilog2(VM_MAYSHARE)] = "ms",
|
||||
[ilog2(VM_GROWSDOWN)] = "gd",
|
||||
[ilog2(VM_PFNMAP)] = "pf",
|
||||
[ilog2(VM_DENYWRITE)] = "dw",
|
||||
[ilog2(VM_LOCKED)] = "lo",
|
||||
[ilog2(VM_IO)] = "io",
|
||||
[ilog2(VM_SEQ_READ)] = "sr",
|
||||
[ilog2(VM_RAND_READ)] = "rr",
|
||||
[ilog2(VM_DONTCOPY)] = "dc",
|
||||
[ilog2(VM_DONTEXPAND)] = "de",
|
||||
[ilog2(VM_ACCOUNT)] = "ac",
|
||||
[ilog2(VM_NORESERVE)] = "nr",
|
||||
[ilog2(VM_HUGETLB)] = "ht",
|
||||
[ilog2(VM_NONLINEAR)] = "nl",
|
||||
[ilog2(VM_ARCH_1)] = "ar",
|
||||
[ilog2(VM_DONTDUMP)] = "dd",
|
||||
[ilog2(VM_MIXEDMAP)] = "mm",
|
||||
[ilog2(VM_HUGEPAGE)] = "hg",
|
||||
[ilog2(VM_NOHUGEPAGE)] = "nh",
|
||||
[ilog2(VM_MERGEABLE)] = "mg",
|
||||
};
|
||||
size_t i;
|
||||
|
||||
seq_puts(m, "VmFlags: ");
|
||||
for (i = 0; i < BITS_PER_LONG; i++) {
|
||||
if (vma->vm_flags & (1UL << i)) {
|
||||
seq_printf(m, "%c%c ",
|
||||
mnemonics[i][0], mnemonics[i][1]);
|
||||
}
|
||||
}
|
||||
seq_putc(m, '\n');
|
||||
}
|
||||
|
||||
static int show_smap(struct seq_file *m, void *v, int is_pid)
|
||||
{
|
||||
struct proc_maps_private *priv = m->private;
|
||||
|
|
@ -581,6 +632,8 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
|
|||
seq_printf(m, "Nonlinear: %8lu kB\n",
|
||||
mss.nonlinear >> 10);
|
||||
|
||||
show_smap_vma_flags(m, vma);
|
||||
|
||||
if (m->count < m->size) /* vma is copied successfully */
|
||||
m->version = (vma != get_gate_vma(task->mm))
|
||||
? vma->vm_start : 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue