Merge branch 'akpm' (patches from Andrew)
Merge first patch-bomb from Andrew Morton: - some misc things - ofs2 updates - about half of MM - checkpatch updates - autofs4 update * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (120 commits) autofs4: fix string.h include in auto_dev-ioctl.h autofs4: use pr_xxx() macros directly for logging autofs4: change log print macros to not insert newline autofs4: make autofs log prints consistent autofs4: fix some white space errors autofs4: fix invalid ioctl return in autofs4_root_ioctl_unlocked() autofs4: fix coding style line length in autofs4_wait() autofs4: fix coding style problem in autofs4_get_set_timeout() autofs4: coding style fixes autofs: show pipe inode in mount options kallsyms: add support for relative offsets in kallsyms address table kallsyms: don't overload absolute symbol type for percpu symbols x86: kallsyms: disable absolute percpu symbols on !SMP checkpatch: fix another left brace warning checkpatch: improve UNSPECIFIED_INT test for bare signed/unsigned uses checkpatch: warn on bare unsigned or signed declarations without int checkpatch: exclude asm volatile from complex macro check mm: memcontrol: drop unnecessary lru locking from mem_cgroup_migrate() mm: migrate: consolidate mem_cgroup_migrate() calls mm/compaction: speed up pageblock_pfn_to_page() when zone is contiguous ...
This commit is contained in:
@@ -17,6 +17,9 @@
|
||||
#include <linux/socket.h>
|
||||
#include <linux/in.h>
|
||||
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#define BUF_SIZE 256
|
||||
#define PAD_SIZE 16
|
||||
#define FILL_CHAR '$'
|
||||
@@ -410,6 +413,55 @@ netdev_features(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void __init
|
||||
flags(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
gfp_t gfp;
|
||||
char *cmp_buffer;
|
||||
|
||||
flags = 0;
|
||||
test("", "%pGp", &flags);
|
||||
|
||||
/* Page flags should filter the zone id */
|
||||
flags = 1UL << NR_PAGEFLAGS;
|
||||
test("", "%pGp", &flags);
|
||||
|
||||
flags |= 1UL << PG_uptodate | 1UL << PG_dirty | 1UL << PG_lru
|
||||
| 1UL << PG_active | 1UL << PG_swapbacked;
|
||||
test("uptodate|dirty|lru|active|swapbacked", "%pGp", &flags);
|
||||
|
||||
|
||||
flags = VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC
|
||||
| VM_DENYWRITE;
|
||||
test("read|exec|mayread|maywrite|mayexec|denywrite", "%pGv", &flags);
|
||||
|
||||
gfp = GFP_TRANSHUGE;
|
||||
test("GFP_TRANSHUGE", "%pGg", &gfp);
|
||||
|
||||
gfp = GFP_ATOMIC|__GFP_DMA;
|
||||
test("GFP_ATOMIC|GFP_DMA", "%pGg", &gfp);
|
||||
|
||||
gfp = __GFP_ATOMIC;
|
||||
test("__GFP_ATOMIC", "%pGg", &gfp);
|
||||
|
||||
cmp_buffer = kmalloc(BUF_SIZE, GFP_KERNEL);
|
||||
if (!cmp_buffer)
|
||||
return;
|
||||
|
||||
/* Any flags not translated by the table should remain numeric */
|
||||
gfp = ~__GFP_BITS_MASK;
|
||||
snprintf(cmp_buffer, BUF_SIZE, "%#lx", (unsigned long) gfp);
|
||||
test(cmp_buffer, "%pGg", &gfp);
|
||||
|
||||
snprintf(cmp_buffer, BUF_SIZE, "__GFP_ATOMIC|%#lx",
|
||||
(unsigned long) gfp);
|
||||
gfp |= __GFP_ATOMIC;
|
||||
test(cmp_buffer, "%pGg", &gfp);
|
||||
|
||||
kfree(cmp_buffer);
|
||||
}
|
||||
|
||||
static void __init
|
||||
test_pointer(void)
|
||||
{
|
||||
@@ -428,6 +480,7 @@ test_pointer(void)
|
||||
struct_clk();
|
||||
bitmap();
|
||||
netdev_features();
|
||||
flags();
|
||||
}
|
||||
|
||||
static int __init
|
||||
|
@@ -35,6 +35,8 @@
|
||||
#include <linux/blkdev.h>
|
||||
#endif
|
||||
|
||||
#include "../mm/internal.h" /* For the trace_print_flags arrays */
|
||||
|
||||
#include <asm/page.h> /* for PAGE_SIZE */
|
||||
#include <asm/sections.h> /* for dereference_function_descriptor() */
|
||||
#include <asm/byteorder.h> /* cpu_to_le16 */
|
||||
@@ -1407,6 +1409,72 @@ char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
char *format_flags(char *buf, char *end, unsigned long flags,
|
||||
const struct trace_print_flags *names)
|
||||
{
|
||||
unsigned long mask;
|
||||
const struct printf_spec strspec = {
|
||||
.field_width = -1,
|
||||
.precision = -1,
|
||||
};
|
||||
const struct printf_spec numspec = {
|
||||
.flags = SPECIAL|SMALL,
|
||||
.field_width = -1,
|
||||
.precision = -1,
|
||||
.base = 16,
|
||||
};
|
||||
|
||||
for ( ; flags && names->name; names++) {
|
||||
mask = names->mask;
|
||||
if ((flags & mask) != mask)
|
||||
continue;
|
||||
|
||||
buf = string(buf, end, names->name, strspec);
|
||||
|
||||
flags &= ~mask;
|
||||
if (flags) {
|
||||
if (buf < end)
|
||||
*buf = '|';
|
||||
buf++;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags)
|
||||
buf = number(buf, end, flags, numspec);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
static noinline_for_stack
|
||||
char *flags_string(char *buf, char *end, void *flags_ptr, const char *fmt)
|
||||
{
|
||||
unsigned long flags;
|
||||
const struct trace_print_flags *names;
|
||||
|
||||
switch (fmt[1]) {
|
||||
case 'p':
|
||||
flags = *(unsigned long *)flags_ptr;
|
||||
/* Remove zone id */
|
||||
flags &= (1UL << NR_PAGEFLAGS) - 1;
|
||||
names = pageflag_names;
|
||||
break;
|
||||
case 'v':
|
||||
flags = *(unsigned long *)flags_ptr;
|
||||
names = vmaflag_names;
|
||||
break;
|
||||
case 'g':
|
||||
flags = *(gfp_t *)flags_ptr;
|
||||
names = gfpflag_names;
|
||||
break;
|
||||
default:
|
||||
WARN_ONCE(1, "Unsupported flags modifier: %c\n", fmt[1]);
|
||||
return buf;
|
||||
}
|
||||
|
||||
return format_flags(buf, end, flags, names);
|
||||
}
|
||||
|
||||
int kptr_restrict __read_mostly;
|
||||
|
||||
/*
|
||||
@@ -1495,6 +1563,11 @@ int kptr_restrict __read_mostly;
|
||||
* - 'Cn' For a clock, it prints the name (Common Clock Framework) or address
|
||||
* (legacy clock framework) of the clock
|
||||
* - 'Cr' For a clock, it prints the current rate of the clock
|
||||
* - 'G' For flags to be printed as a collection of symbolic strings that would
|
||||
* construct the specific value. Supported flags given by option:
|
||||
* p page flags (see struct page) given as pointer to unsigned long
|
||||
* g gfp flags (GFP_* and __GFP_*) given as pointer to gfp_t
|
||||
* v vma flags (VM_*) given as pointer to unsigned long
|
||||
*
|
||||
* ** Please update also Documentation/printk-formats.txt when making changes **
|
||||
*
|
||||
@@ -1648,6 +1721,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||
return bdev_name(buf, end, ptr, spec, fmt);
|
||||
#endif
|
||||
|
||||
case 'G':
|
||||
return flags_string(buf, end, ptr, fmt);
|
||||
}
|
||||
spec.flags |= SMALL;
|
||||
if (spec.field_width == -1) {
|
||||
|
Reference in New Issue
Block a user