Greetings,
0day kernel testing robot got the below dmesg and the first bad commit is
git://git.kernel.org/pub/scm/linux/kernel/git/mel/linux-balancenuma
mm-pagealloc-watermarks-v3r10
commit 4b71218bcdb96fcf93b28ad19d609ad35b52f465
Author: Mel Gorman <mgorman(a)techsingularity.net>
AuthorDate: Mon Aug 3 14:01:46 2015 +0100
Commit: Mel Gorman <mgorman(a)techsingularity.net>
CommitDate: Mon Aug 24 11:28:06 2015 +0100
mm, page_alloc: Distinguish between being unable to sleep, unwilling to sleep and
avoiding waking kswapd
__GFP_WAIT has been used to identify atomic context in callers that hold
spinlocks or are in interrupts. They are expected to be high priority and
have access one of two watermarks lower than "min" which can be referred
to as the "atomic reserve". __GFP_HIGH users get access to the first lower
watermark and can be called the "high priority reserve".
Over time, callers had a requirement to not block when fallback options
were available. Some have abused __GFP_WAIT leading to a situation where
an optimisitic allocation with a fallback option can access atomic reserves.
This patch uses __GFP_ATOMIC to identify callers that are truely atomic,
cannot sleep and have no alternative. High priority users continue to use
__GFP_HIGH. __GFP_DIRECT_RECLAIM identifies callers that can sleep and are
willing to enter direct reclaim. __GFP_KSWAPD_RECLAIM to identify callers
that want to wake kswapd for background reclaim. __GFP_WAIT is redefined
as a caller that is willing to enter direct reclaim and wake kswapd for
background reclaim.
This patch then converts a number of sites
o __GFP_ATOMIC is used by callers that are high priority and have memory
pools for those requests. GFP_ATOMIC uses this flag.
o Callers that have a limited mempool to guarantee forward progress use
__GFP_DIRECT_RECLAIM. bio allocations fall into this category where
kswapd will still be woken but atomic reserves are not used as there
is a one-entry mempool to guarantee progress.
o Callers that are checking if they are non-blocking should use the
helper gfpflags_allow_blocking() where possible. This is because
checking for __GFP_WAIT as was done historically now can trigger false
positives. Some exceptions like dm-crypt.c exist where the code intent
is clearer if __GFP_DIRECT_RECLAIM is used instead of the helper due to
flag manipulations.
o Callers that built their own GFP flags instead of starting with GFP_KERNEL
and friends now also need to specify __GFP_KSWAPD_RECLAIM.
The first key hazard to watch out for is callers that removed __GFP_WAIT
and was depending on access to atomic reserves for inconspicuous reasons.
In some cases it may be appropriate for them to use __GFP_HIGH.
The second key hazard is callers that assembled their own combination of
GFP flags instead of starting with something like GFP_KERNEL. They may
now wish to specify __GFP_KSWAPD_RECLAIM. It's almost certainly harmless
if it's missed in most cases as other activity will wake kswapd.
Signed-off-by: Mel Gorman <mgorman(a)techsingularity.net>
+---------------------------------------------------+------------+------------+------------+
| | c5df6972ff | 4b71218bcd | 138a987380
|
+---------------------------------------------------+------------+------------+------------+
| boot_successes | 63 | 0 | 0
|
| boot_failures | 0 | 12 | 27
|
| WARNING:at_lib/radix-tree.c:#radix_tree_preload() | 0 | 12 | 27
|
| backtrace:radix_tree_preload | 0 | 12 | 27
|
| backtrace:blkcg_init_queue | 0 | 12 | 27
|
| backtrace:brd_alloc | 0 | 12 | 27
|
| backtrace:brd_init | 0 | 12 | 27
|
| backtrace:kernel_init_freeable | 0 | 12 | 27
|
| BUG:kernel_test_hang | 0 | 1 |
|
+---------------------------------------------------+------------+------------+------------+
[ 1.294127] 00:05: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[ 1.296112] Non-volatile memory driver v1.3
[ 1.297144] ------------[ cut here ]------------
[ 1.297982] WARNING: CPU: 1 PID: 1 at lib/radix-tree.c:294
radix_tree_preload+0x2a/0x3c()
[ 1.299607] Modules linked in:
[ 1.300369] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.2.0-rc7-00007-g4b71218 #12
[ 1.301802] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
1.7.5-20140531_083030-gandalf 04/01/2014
[ 1.303482] 0000000000000009 ffff8800149e3d68 ffffffff81a46b8d 0000000000000001
[ 1.305149] 0000000000000000 ffff8800149e3da8 ffffffff810f635b 00000000024000c0
[ 1.306799] ffffffff814d17f1 00000000024000c0 ffff8800161f8178 ffff88000d467b00
[ 1.308474] Call Trace:
[ 1.309096] [<ffffffff81a46b8d>] dump_stack+0x4c/0x65
[ 1.309972] [<ffffffff810f635b>] warn_slowpath_common+0xa1/0xbb
[ 1.310928] [<ffffffff814d17f1>] ? radix_tree_preload+0x2a/0x3c
[ 1.311882] [<ffffffff810f6418>] warn_slowpath_null+0x1a/0x1c
[ 1.312832] [<ffffffff814d17f1>] radix_tree_preload+0x2a/0x3c
[ 1.313766] [<ffffffff814c1709>] blkcg_init_queue+0x42/0x10d
[ 1.314691] [<ffffffff814a99fb>] blk_alloc_queue_node+0x200/0x23e
[ 1.315658] [<ffffffff814a9a4a>] blk_alloc_queue+0x11/0x13
[ 1.316578] [<ffffffff8159d85a>] brd_alloc+0x60/0x175
[ 1.317451] [<ffffffff8241082c>] brd_init+0x47/0x160
[ 1.318315] [<ffffffff824107e5>] ? ramdisk_size+0x1a/0x1a
[ 1.319216] [<ffffffff8100032a>] do_one_initcall+0xfd/0x18f
[ 1.320150] [<ffffffff823c20ff>] kernel_init_freeable+0x1bb/0x243
[ 1.321123] [<ffffffff81a3d475>] ? rest_init+0x8c/0x8c
[ 1.322004] [<ffffffff81a3d483>] kernel_init+0xe/0xdf
[ 1.322880] [<ffffffff81a4e3cf>] ret_from_fork+0x3f/0x70
[ 1.323776] [<ffffffff81a3d475>] ? rest_init+0x8c/0x8c
[ 1.324666] ---[ end trace cfeb44e60599609f ]---
[ 1.327849] brd: module loaded
git bisect start 138a987380729cb812b2d12b6b562c8ba35001b5
2c6625cd545bdd66acff14f3394865d43920a5c7 --
git bisect good 8c7e6aa02f8e689a226b9687bf79eab71e84da9b # 01:55 22+ 0 mm,
page_alloc: Only check cpusets when one exists that can be mem-controlled
git bisect good c5df6972ff42875ecde7df596d0711ad506ff508 # 01:55 63+ 0 mm,
page_alloc: Use masks and shifts when converting GFP flags to migrate types
git bisect bad 4b71218bcdb96fcf93b28ad19d609ad35b52f465 # 01:55 0- 12 mm,
page_alloc: Distinguish between being unable to sleep, unwilling to sleep and avoiding
waking kswapd
# first bad commit: [4b71218bcdb96fcf93b28ad19d609ad35b52f465] mm, page_alloc: Distinguish
between being unable to sleep, unwilling to sleep and avoiding waking kswapd
git bisect good c5df6972ff42875ecde7df596d0711ad506ff508 # 01:55 63+ 0 mm,
page_alloc: Use masks and shifts when converting GFP flags to migrate types
# extra tests on HEAD of linux-devel/devel-catchup-201508241919
git bisect bad 839fdfa781897530a9d867611fa7a3cf854f4908 # 01:55 0- 34 0day
head guard for 'devel-catchup-201508241919'
# extra tests on tree/branch balancenuma/mm-pagealloc-watermarks-v3r10
git bisect bad ab0d9d536abe89508fd522ab9762c6002f508739 # 01:56 0- 3 mm,
page_alloc: Only enforce watermarks for order-0 allocations
# extra tests on tree/branch linus/master
git bisect good c13dcf9f2d6f5f06ef1bf79ec456df614c5e058b # 02:02 66+ 4 Linux
4.2-rc8
# extra tests on tree/branch linux-next/master
git bisect good a074b68fbe33158db1300f1da53292d7ec1d11ef # 02:10 63+ 0 Add
linux-next specific files for 20150824
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/lkp Intel Corporation