All of lore.kernel.org
 help / color / mirror / Atom feed
* kernel BUG in munlock_vma_pages_range
@ 2013-12-08  1:52 ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-08  1:52 UTC (permalink / raw)
  To: Andrew Morton
  Cc: vbabka, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

Hi all,

While fuzzing with trinity inside a KVM tools guest running latest -next kernel,
I've stumbled on the following spew.

The code seems to be in munlock_vma_pages_range():

         page = follow_page_mask(vma, start, FOLL_GET | FOLL_DUMP,
                         &page_mask);

         if (page && !IS_ERR(page)) {
                 if (PageTransHuge(page)) {		<<==== HERE
                         lock_page(page);


This is new code added in "mm: munlock: batch non-THP page isolation and munlock+putback
using pagevec". I've Cc'ed involved parties.

[  356.390309] kernel BUG at include/linux/page-flags.h:415!
[  356.390309] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[  356.395160] Dumping ftrace buffer:
[  356.395160]    (ftrace buffer empty)
[  356.395160] Modules linked in:
[  356.395160] CPU: 36 PID: 10919 Comm: trinity-child74 Not tainted 
3.13.0-rc2-next-20131206-sasha-00005-g8be2375-dirty #4045
[  356.395160] task: ffff880f731e0000 ti: ffff880f731e8000 task.ti: ffff880f731e8000
[  356.395160] RIP: 0010:[<ffffffff812636c9>]  [<ffffffff812636c9>] munlock_vma_pages_range+0x89/0x1b0
[  356.395160] RSP: 0018:ffff880f731e9b58  EFLAGS: 00010286
[  356.395160] RAX: 002fffff80008000 RBX: 00007f91cd801000 RCX: 0000000000000000
[  356.395160] RDX: ffffea003ded0040 RSI: 00000000000013f1 RDI: 00000000ffffffff
[  356.395160] RBP: ffff880f731e9c18 R08: 00000000e26e4584 R09: 0000000000000001
[  356.395160] R10: 0000000000000001 R11: 0000000000000000 R12: ffffea003ded0040
[  356.395160] R13: ffff880f733a8400 R14: 00007f91cdeea000 R15: ffff880f731e9be4
[  356.395160] FS:  0000000000000000(0000) GS:ffff880fdba00000(0000) knlGS:0000000000000000
[  356.395160] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  356.395160] CR2: 0000000000000000 CR3: 0000000f7314a000 CR4: 00000000000006e0
[  356.395160] Stack:
[  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  356.395160] Call Trace:
[  356.395160]  [<ffffffff81264c89>] exit_mmap+0x59/0x170
[  356.395160]  [<ffffffff8129a4a0>] ? __khugepaged_exit+0xe0/0x150
[  356.395160]  [<ffffffff81292d2b>] ? kmem_cache_free+0x24b/0x310
[  356.395160]  [<ffffffff8129a4a0>] ? __khugepaged_exit+0xe0/0x150
[  356.395160]  [<ffffffff81127eec>] mmput+0x7c/0xf0
[  356.395160]  [<ffffffff8112c18d>] exit_mm+0x18d/0x1a0
[  356.395160]  [<ffffffff811c8d85>] ? acct_collect+0x175/0x1b0
[  356.395160]  [<ffffffff8112ceef>] do_exit+0x26f/0x4e0
[  356.395160]  [<ffffffff8112d209>] do_group_exit+0xa9/0xe0
[  356.395160]  [<ffffffff81311ff0>] get_signal_to_deliver+0x460/0x4b0
[  356.395160]  [<ffffffff81067c3b>] do_signal+0x4b/0x120
[  356.395160]  [<ffffffff842a4405>] ? _raw_spin_unlock+0x35/0x60
[  356.395160]  [<ffffffff81168d36>] ? vtime_account_user+0x96/0xb0
[  356.395160]  [<ffffffff8122ccbf>] ? context_tracking_user_exit+0xaf/0x160
[  356.395160]  [<ffffffff81067f9a>] do_notify_resume+0x5a/0xe0
[  356.395160]  [<ffffffff842ad0f0>] int_signal+0x12/0x17
[  356.395160] Code: 48 89 de 4c 89 ef e8 17 7f ff ff 49 89 c4 48 85 c0 0f 84 eb 00 00 00 48 3d 00 
f0 ff ff 0f 87 df 00 00 00 48 8b 00 66 85 c0 79 0f <0f> 0b 0f 1f 44 00 00 eb fe 66 0f 1f 44 00 00 49 
8b 04 24 f6 c4
[  356.395160] RIP  [<ffffffff812636c9>] munlock_vma_pages_range+0x89/0x1b0
[  356.395160]  RSP <ffff880f731e9b58>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* kernel BUG in munlock_vma_pages_range
@ 2013-12-08  1:52 ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-08  1:52 UTC (permalink / raw)
  To: Andrew Morton
  Cc: vbabka, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

Hi all,

While fuzzing with trinity inside a KVM tools guest running latest -next kernel,
I've stumbled on the following spew.

The code seems to be in munlock_vma_pages_range():

         page = follow_page_mask(vma, start, FOLL_GET | FOLL_DUMP,
                         &page_mask);

         if (page && !IS_ERR(page)) {
                 if (PageTransHuge(page)) {		<<==== HERE
                         lock_page(page);


This is new code added in "mm: munlock: batch non-THP page isolation and munlock+putback
using pagevec". I've Cc'ed involved parties.

[  356.390309] kernel BUG at include/linux/page-flags.h:415!
[  356.390309] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[  356.395160] Dumping ftrace buffer:
[  356.395160]    (ftrace buffer empty)
[  356.395160] Modules linked in:
[  356.395160] CPU: 36 PID: 10919 Comm: trinity-child74 Not tainted 
3.13.0-rc2-next-20131206-sasha-00005-g8be2375-dirty #4045
[  356.395160] task: ffff880f731e0000 ti: ffff880f731e8000 task.ti: ffff880f731e8000
[  356.395160] RIP: 0010:[<ffffffff812636c9>]  [<ffffffff812636c9>] munlock_vma_pages_range+0x89/0x1b0
[  356.395160] RSP: 0018:ffff880f731e9b58  EFLAGS: 00010286
[  356.395160] RAX: 002fffff80008000 RBX: 00007f91cd801000 RCX: 0000000000000000
[  356.395160] RDX: ffffea003ded0040 RSI: 00000000000013f1 RDI: 00000000ffffffff
[  356.395160] RBP: ffff880f731e9c18 R08: 00000000e26e4584 R09: 0000000000000001
[  356.395160] R10: 0000000000000001 R11: 0000000000000000 R12: ffffea003ded0040
[  356.395160] R13: ffff880f733a8400 R14: 00007f91cdeea000 R15: ffff880f731e9be4
[  356.395160] FS:  0000000000000000(0000) GS:ffff880fdba00000(0000) knlGS:0000000000000000
[  356.395160] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  356.395160] CR2: 0000000000000000 CR3: 0000000f7314a000 CR4: 00000000000006e0
[  356.395160] Stack:
[  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  356.395160] Call Trace:
[  356.395160]  [<ffffffff81264c89>] exit_mmap+0x59/0x170
[  356.395160]  [<ffffffff8129a4a0>] ? __khugepaged_exit+0xe0/0x150
[  356.395160]  [<ffffffff81292d2b>] ? kmem_cache_free+0x24b/0x310
[  356.395160]  [<ffffffff8129a4a0>] ? __khugepaged_exit+0xe0/0x150
[  356.395160]  [<ffffffff81127eec>] mmput+0x7c/0xf0
[  356.395160]  [<ffffffff8112c18d>] exit_mm+0x18d/0x1a0
[  356.395160]  [<ffffffff811c8d85>] ? acct_collect+0x175/0x1b0
[  356.395160]  [<ffffffff8112ceef>] do_exit+0x26f/0x4e0
[  356.395160]  [<ffffffff8112d209>] do_group_exit+0xa9/0xe0
[  356.395160]  [<ffffffff81311ff0>] get_signal_to_deliver+0x460/0x4b0
[  356.395160]  [<ffffffff81067c3b>] do_signal+0x4b/0x120
[  356.395160]  [<ffffffff842a4405>] ? _raw_spin_unlock+0x35/0x60
[  356.395160]  [<ffffffff81168d36>] ? vtime_account_user+0x96/0xb0
[  356.395160]  [<ffffffff8122ccbf>] ? context_tracking_user_exit+0xaf/0x160
[  356.395160]  [<ffffffff81067f9a>] do_notify_resume+0x5a/0xe0
[  356.395160]  [<ffffffff842ad0f0>] int_signal+0x12/0x17
[  356.395160] Code: 48 89 de 4c 89 ef e8 17 7f ff ff 49 89 c4 48 85 c0 0f 84 eb 00 00 00 48 3d 00 
f0 ff ff 0f 87 df 00 00 00 48 8b 00 66 85 c0 79 0f <0f> 0b 0f 1f 44 00 00 eb fe 66 0f 1f 44 00 00 49 
8b 04 24 f6 c4
[  356.395160] RIP  [<ffffffff812636c9>] munlock_vma_pages_range+0x89/0x1b0
[  356.395160]  RSP <ffff880f731e9b58>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-08  1:52 ` Sasha Levin
@ 2013-12-09  9:34   ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-09  9:34 UTC (permalink / raw)
  To: Sasha Levin, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/08/2013 02:52 AM, Sasha Levin wrote:
> Hi all,
>
> While fuzzing with trinity inside a KVM tools guest running latest -next kernel,
> I've stumbled on the following spew.
>
> The code seems to be in munlock_vma_pages_range():
>
>           page = follow_page_mask(vma, start, FOLL_GET | FOLL_DUMP,
>                           &page_mask);
>
>           if (page && !IS_ERR(page)) {
>                   if (PageTransHuge(page)) {		<<==== HERE
>                           lock_page(page);
>
>
> This is new code added in "mm: munlock: batch non-THP page isolation and munlock+putback
> using pagevec". I've Cc'ed involved parties.

Hello, I will look at it, thanks.
Do you have specific reproduction instructions?

Vlastimil

> [  356.390309] kernel BUG at include/linux/page-flags.h:415!
> [  356.390309] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [  356.395160] Dumping ftrace buffer:
> [  356.395160]    (ftrace buffer empty)
> [  356.395160] Modules linked in:
> [  356.395160] CPU: 36 PID: 10919 Comm: trinity-child74 Not tainted
> 3.13.0-rc2-next-20131206-sasha-00005-g8be2375-dirty #4045
> [  356.395160] task: ffff880f731e0000 ti: ffff880f731e8000 task.ti: ffff880f731e8000
> [  356.395160] RIP: 0010:[<ffffffff812636c9>]  [<ffffffff812636c9>] munlock_vma_pages_range+0x89/0x1b0
> [  356.395160] RSP: 0018:ffff880f731e9b58  EFLAGS: 00010286
> [  356.395160] RAX: 002fffff80008000 RBX: 00007f91cd801000 RCX: 0000000000000000
> [  356.395160] RDX: ffffea003ded0040 RSI: 00000000000013f1 RDI: 00000000ffffffff
> [  356.395160] RBP: ffff880f731e9c18 R08: 00000000e26e4584 R09: 0000000000000001
> [  356.395160] R10: 0000000000000001 R11: 0000000000000000 R12: ffffea003ded0040
> [  356.395160] R13: ffff880f733a8400 R14: 00007f91cdeea000 R15: ffff880f731e9be4
> [  356.395160] FS:  0000000000000000(0000) GS:ffff880fdba00000(0000) knlGS:0000000000000000
> [  356.395160] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [  356.395160] CR2: 0000000000000000 CR3: 0000000f7314a000 CR4: 00000000000006e0
> [  356.395160] Stack:
> [  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
> [  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
> [  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
> [  356.395160] Call Trace:
> [  356.395160]  [<ffffffff81264c89>] exit_mmap+0x59/0x170
> [  356.395160]  [<ffffffff8129a4a0>] ? __khugepaged_exit+0xe0/0x150
> [  356.395160]  [<ffffffff81292d2b>] ? kmem_cache_free+0x24b/0x310
> [  356.395160]  [<ffffffff8129a4a0>] ? __khugepaged_exit+0xe0/0x150
> [  356.395160]  [<ffffffff81127eec>] mmput+0x7c/0xf0
> [  356.395160]  [<ffffffff8112c18d>] exit_mm+0x18d/0x1a0
> [  356.395160]  [<ffffffff811c8d85>] ? acct_collect+0x175/0x1b0
> [  356.395160]  [<ffffffff8112ceef>] do_exit+0x26f/0x4e0
> [  356.395160]  [<ffffffff8112d209>] do_group_exit+0xa9/0xe0
> [  356.395160]  [<ffffffff81311ff0>] get_signal_to_deliver+0x460/0x4b0
> [  356.395160]  [<ffffffff81067c3b>] do_signal+0x4b/0x120
> [  356.395160]  [<ffffffff842a4405>] ? _raw_spin_unlock+0x35/0x60
> [  356.395160]  [<ffffffff81168d36>] ? vtime_account_user+0x96/0xb0
> [  356.395160]  [<ffffffff8122ccbf>] ? context_tracking_user_exit+0xaf/0x160
> [  356.395160]  [<ffffffff81067f9a>] do_notify_resume+0x5a/0xe0
> [  356.395160]  [<ffffffff842ad0f0>] int_signal+0x12/0x17
> [  356.395160] Code: 48 89 de 4c 89 ef e8 17 7f ff ff 49 89 c4 48 85 c0 0f 84 eb 00 00 00 48 3d 00
> f0 ff ff 0f 87 df 00 00 00 48 8b 00 66 85 c0 79 0f <0f> 0b 0f 1f 44 00 00 eb fe 66 0f 1f 44 00 00 49
> 8b 04 24 f6 c4
> [  356.395160] RIP  [<ffffffff812636c9>] munlock_vma_pages_range+0x89/0x1b0
> [  356.395160]  RSP <ffff880f731e9b58>
>


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-09  9:34   ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-09  9:34 UTC (permalink / raw)
  To: Sasha Levin, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/08/2013 02:52 AM, Sasha Levin wrote:
> Hi all,
>
> While fuzzing with trinity inside a KVM tools guest running latest -next kernel,
> I've stumbled on the following spew.
>
> The code seems to be in munlock_vma_pages_range():
>
>           page = follow_page_mask(vma, start, FOLL_GET | FOLL_DUMP,
>                           &page_mask);
>
>           if (page && !IS_ERR(page)) {
>                   if (PageTransHuge(page)) {		<<==== HERE
>                           lock_page(page);
>
>
> This is new code added in "mm: munlock: batch non-THP page isolation and munlock+putback
> using pagevec". I've Cc'ed involved parties.

Hello, I will look at it, thanks.
Do you have specific reproduction instructions?

Vlastimil

> [  356.390309] kernel BUG at include/linux/page-flags.h:415!
> [  356.390309] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [  356.395160] Dumping ftrace buffer:
> [  356.395160]    (ftrace buffer empty)
> [  356.395160] Modules linked in:
> [  356.395160] CPU: 36 PID: 10919 Comm: trinity-child74 Not tainted
> 3.13.0-rc2-next-20131206-sasha-00005-g8be2375-dirty #4045
> [  356.395160] task: ffff880f731e0000 ti: ffff880f731e8000 task.ti: ffff880f731e8000
> [  356.395160] RIP: 0010:[<ffffffff812636c9>]  [<ffffffff812636c9>] munlock_vma_pages_range+0x89/0x1b0
> [  356.395160] RSP: 0018:ffff880f731e9b58  EFLAGS: 00010286
> [  356.395160] RAX: 002fffff80008000 RBX: 00007f91cd801000 RCX: 0000000000000000
> [  356.395160] RDX: ffffea003ded0040 RSI: 00000000000013f1 RDI: 00000000ffffffff
> [  356.395160] RBP: ffff880f731e9c18 R08: 00000000e26e4584 R09: 0000000000000001
> [  356.395160] R10: 0000000000000001 R11: 0000000000000000 R12: ffffea003ded0040
> [  356.395160] R13: ffff880f733a8400 R14: 00007f91cdeea000 R15: ffff880f731e9be4
> [  356.395160] FS:  0000000000000000(0000) GS:ffff880fdba00000(0000) knlGS:0000000000000000
> [  356.395160] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [  356.395160] CR2: 0000000000000000 CR3: 0000000f7314a000 CR4: 00000000000006e0
> [  356.395160] Stack:
> [  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
> [  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
> [  356.395160]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
> [  356.395160] Call Trace:
> [  356.395160]  [<ffffffff81264c89>] exit_mmap+0x59/0x170
> [  356.395160]  [<ffffffff8129a4a0>] ? __khugepaged_exit+0xe0/0x150
> [  356.395160]  [<ffffffff81292d2b>] ? kmem_cache_free+0x24b/0x310
> [  356.395160]  [<ffffffff8129a4a0>] ? __khugepaged_exit+0xe0/0x150
> [  356.395160]  [<ffffffff81127eec>] mmput+0x7c/0xf0
> [  356.395160]  [<ffffffff8112c18d>] exit_mm+0x18d/0x1a0
> [  356.395160]  [<ffffffff811c8d85>] ? acct_collect+0x175/0x1b0
> [  356.395160]  [<ffffffff8112ceef>] do_exit+0x26f/0x4e0
> [  356.395160]  [<ffffffff8112d209>] do_group_exit+0xa9/0xe0
> [  356.395160]  [<ffffffff81311ff0>] get_signal_to_deliver+0x460/0x4b0
> [  356.395160]  [<ffffffff81067c3b>] do_signal+0x4b/0x120
> [  356.395160]  [<ffffffff842a4405>] ? _raw_spin_unlock+0x35/0x60
> [  356.395160]  [<ffffffff81168d36>] ? vtime_account_user+0x96/0xb0
> [  356.395160]  [<ffffffff8122ccbf>] ? context_tracking_user_exit+0xaf/0x160
> [  356.395160]  [<ffffffff81067f9a>] do_notify_resume+0x5a/0xe0
> [  356.395160]  [<ffffffff842ad0f0>] int_signal+0x12/0x17
> [  356.395160] Code: 48 89 de 4c 89 ef e8 17 7f ff ff 49 89 c4 48 85 c0 0f 84 eb 00 00 00 48 3d 00
> f0 ff ff 0f 87 df 00 00 00 48 8b 00 66 85 c0 79 0f <0f> 0b 0f 1f 44 00 00 eb fe 66 0f 1f 44 00 00 49
> 8b 04 24 f6 c4
> [  356.395160] RIP  [<ffffffff812636c9>] munlock_vma_pages_range+0x89/0x1b0
> [  356.395160]  RSP <ffff880f731e9b58>
>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-09  9:34   ` Vlastimil Babka
@ 2013-12-09 17:05     ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-09 17:05 UTC (permalink / raw)
  To: Vlastimil Babka, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
> Hello, I will look at it, thanks.
> Do you have specific reproduction instructions?

Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
up testing on that part.


Thanks,
Sasha

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-09 17:05     ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-09 17:05 UTC (permalink / raw)
  To: Vlastimil Babka, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
> Hello, I will look at it, thanks.
> Do you have specific reproduction instructions?

Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
up testing on that part.


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-09 17:05     ` Sasha Levin
@ 2013-12-09 17:12       ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-09 17:12 UTC (permalink / raw)
  To: Sasha Levin, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 06:05 PM, Sasha Levin wrote:
> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>> Hello, I will look at it, thanks.
>> Do you have specific reproduction instructions?
>
> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
> up testing on that part.

Thanks. Do you have trinity log and the .config file? I'm currently 
unable to even boot linux-next with my config/setup due to a GPF.
Looking at code I wouldn't expect that it could encounter a tail page, 
without first encountering a head page and skipping the whole huge page. 
At least in THP case, as TLB pages should be split when a vma is split. 
As for hugetlbfs, it should be skipped for mlock/munlock operations 
completely. One of these assumptions is probably failing here...

Vlastimil

>
> Thanks,
> Sasha
>


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-09 17:12       ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-09 17:12 UTC (permalink / raw)
  To: Sasha Levin, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 06:05 PM, Sasha Levin wrote:
> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>> Hello, I will look at it, thanks.
>> Do you have specific reproduction instructions?
>
> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
> up testing on that part.

Thanks. Do you have trinity log and the .config file? I'm currently 
unable to even boot linux-next with my config/setup due to a GPF.
Looking at code I wouldn't expect that it could encounter a tail page, 
without first encountering a head page and skipping the whole huge page. 
At least in THP case, as TLB pages should be split when a vma is split. 
As for hugetlbfs, it should be skipped for mlock/munlock operations 
completely. One of these assumptions is probably failing here...

Vlastimil

>
> Thanks,
> Sasha
>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-09 17:12       ` Vlastimil Babka
  (?)
@ 2013-12-09 17:15       ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-09 17:15 UTC (permalink / raw)
  To: Vlastimil Babka, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

[-- Attachment #1: Type: text/plain, Size: 1118 bytes --]

On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>> Hello, I will look at it, thanks.
>>> Do you have specific reproduction instructions?
>>
>> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
>> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
>> up testing on that part.
>
> Thanks. Do you have trinity log and the .config file? I'm currently unable to even boot linux-next
> with my config/setup due to a GPF.
> Looking at code I wouldn't expect that it could encounter a tail page, without first encountering a
> head page and skipping the whole huge page. At least in THP case, as TLB pages should be split when
> a vma is split. As for hugetlbfs, it should be skipped for mlock/munlock operations completely. One
> of these assumptions is probably failing here...

I've attached my .config, I don't keep trinity logs because they bloat/slow down the testing too 
much (I'm usually testing in vms with 64 or over vcpus).

Thanks,
Sasha



[-- Attachment #2: config-sasha --]
[-- Type: text/plain, Size: 156164 bytes --]

#
# Automatically generated file; DO NOT EDIT.
# Linux/x86 3.13.0-rc2 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_MMU=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_ARCH_HAS_CPU_AUTOPROBE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_ZONE_DMA32=y
CONFIG_AUDIT_ARCH=y
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_HAVE_INTEL_TXT=y
CONFIG_X86_64_SMP=y
CONFIG_X86_HT=y
CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11"
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_EXTABLE_SORT=y

#
# General setup
#
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
# CONFIG_COMPILE_TEST is not set
CONFIG_LOCALVERSION="-sasha"
CONFIG_LOCALVERSION_AUTO=y
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_HAVE_KERNEL_LZ4=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_FHANDLE=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_WATCH=y
CONFIG_AUDIT_TREE=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_PENDING_IRQ=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_DEBUG=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_DATA=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_GENERIC_CMOS_UPDATE=y

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
# CONFIG_NO_HZ_IDLE is not set
CONFIG_NO_HZ_FULL=y
CONFIG_NO_HZ_FULL_ALL=y
CONFIG_NO_HZ_FULL_SYSIDLE=y
CONFIG_NO_HZ_FULL_SYSIDLE_SMALL=8
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y

#
# CPU/Task time and stats accounting
#
CONFIG_VIRT_CPU_ACCOUNTING=y
CONFIG_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y

#
# RCU Subsystem
#
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_RCU_STALL_COMMON=y
CONFIG_CONTEXT_TRACKING=y
CONFIG_RCU_USER_QS=y
CONFIG_CONTEXT_TRACKING_FORCE=y
CONFIG_RCU_FANOUT=64
CONFIG_RCU_FANOUT_LEAF=16
CONFIG_RCU_FANOUT_EXACT=y
CONFIG_RCU_FAST_NO_HZ=y
CONFIG_TREE_RCU_TRACE=y
CONFIG_RCU_BOOST=y
CONFIG_RCU_BOOST_PRIO=10
CONFIG_RCU_BOOST_DELAY=500
CONFIG_RCU_NOCB_CPU=y
CONFIG_RCU_NOCB_CPU_ALL=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=18
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y
CONFIG_ARCH_USES_NUMA_PROT_NONE=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
CONFIG_NUMA_BALANCING=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_DEBUG=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CPUSETS=y
CONFIG_PROC_PID_CPUSET=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_RESOURCE_COUNTERS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y
CONFIG_MEMCG_KMEM=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_BLK_CGROUP=y
CONFIG_DEBUG_BLK_CGROUP=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_UIDGID_STRICT_TYPE_CHECKS=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_MM_OWNER=y
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
CONFIG_RELAY=y
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_HAVE_UID16=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_HAVE_PCSPKR_PLATFORM=y
CONFIG_EXPERT=y
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_PCI_QUIRKS=y
CONFIG_EMBEDDED=y
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y

#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
CONFIG_DEBUG_PERF_USE_VMALLOC=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y
CONFIG_COMPAT_BRK=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_SLUB_CPU_PARTIAL=y
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
CONFIG_OPROFILE=y
CONFIG_OPROFILE_EVENT_MULTIPLEX=y
CONFIG_HAVE_OPROFILE=y
CONFIG_OPROFILE_NMI_TIMER=y
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
CONFIG_KPROBES_ON_FTRACE=y
CONFIG_UPROBES=y
# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
CONFIG_KRETPROBES=y
CONFIG_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
CONFIG_HAVE_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_PERF_EVENTS_NMI=y
CONFIG_HAVE_PERF_REGS=y
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y
CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_HAVE_CONTEXT_TRACKING=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
CONFIG_OLD_SIGSUSPEND3=y
CONFIG_COMPAT_OLD_SIGACTION=y

#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not set
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_MODULE_SIG=y
# CONFIG_MODULE_SIG_FORCE is not set
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA1=y
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha1"
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_BLK_DEV_BSG=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_CMDLINE_PARSER=y

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_CUMANA=y
CONFIG_ACORN_PARTITION_EESOX=y
CONFIG_ACORN_PARTITION_ICS=y
CONFIG_ACORN_PARTITION_ADFS=y
CONFIG_ACORN_PARTITION_POWERTEC=y
CONFIG_ACORN_PARTITION_RISCIX=y
CONFIG_AIX_PARTITION=y
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_ATARI_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
CONFIG_LDM_DEBUG=y
CONFIG_SGI_PARTITION=y
CONFIG_ULTRIX_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
CONFIG_EFI_PARTITION=y
CONFIG_SYSV68_PARTITION=y
CONFIG_CMDLINE_PARTITION=y
CONFIG_BLOCK_COMPAT=y

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CFQ_GROUP_IOSCHED=y
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
CONFIG_PREEMPT_NOTIFIERS=y
CONFIG_PADATA=y
CONFIG_ASN1=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_FREEZER=y

#
# Processor type and features
#
CONFIG_ZONE_DMA=y
CONFIG_SMP=y
CONFIG_X86_X2APIC=y
CONFIG_X86_MPPARSE=y
CONFIG_X86_EXTENDED_PLATFORM=y
CONFIG_X86_NUMACHIP=y
CONFIG_X86_VSMP=y
CONFIG_X86_UV=y
CONFIG_X86_INTEL_LPSS=y
CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_HYPERVISOR_GUEST=y
CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_DEBUG=y
CONFIG_PARAVIRT_SPINLOCKS=y
CONFIG_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_PVHVM=y
CONFIG_XEN_MAX_DOMAIN_MEMORY=500
CONFIG_XEN_SAVE_RESTORE=y
CONFIG_XEN_DEBUG_FS=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_DEBUG_FS=y
CONFIG_PARAVIRT_TIME_ACCOUNTING=y
CONFIG_PARAVIRT_CLOCK=y
CONFIG_NO_BOOTMEM=y
CONFIG_MEMTEST=y
# CONFIG_MK8 is not set
# CONFIG_MPSC is not set
CONFIG_MCORE2=y
# CONFIG_MATOM is not set
# CONFIG_GENERIC_CPU is not set
CONFIG_X86_INTERNODE_CACHE_SHIFT=12
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_INTEL_USERCOPY=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_X86_P6_NOP=y
CONFIG_X86_TSC=y
CONFIG_X86_CMPXCHG64=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=64
CONFIG_X86_DEBUGCTLMSR=y
CONFIG_PROCESSOR_SELECT=y
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_CENTAUR=y
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
CONFIG_GART_IOMMU=y
CONFIG_CALGARY_IOMMU=y
CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
CONFIG_SWIOTLB=y
CONFIG_IOMMU_HELPER=y
CONFIG_MAXSMP=y
CONFIG_NR_CPUS=8192
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
CONFIG_X86_MCE_AMD=y
CONFIG_X86_MCE_THRESHOLD=y
CONFIG_X86_MCE_INJECT=y
CONFIG_X86_THERMAL_VECTOR=y
CONFIG_I8K=y
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_AMD=y
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_MICROCODE_INTEL_LIB=y
# CONFIG_MICROCODE_INTEL_EARLY is not set
# CONFIG_MICROCODE_AMD_EARLY is not set
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_DIRECT_GBPAGES=y
CONFIG_NUMA=y
CONFIG_AMD_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_NODES_SPAN_OTHER_NODES=y
CONFIG_NUMA_EMU=y
CONFIG_NODES_SHIFT=10
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ARCH_MEMORY_PROBE=y
CONFIG_ARCH_PROC_KCORE_TEXT=y
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y
CONFIG_NEED_MULTIPLE_NODES=y
CONFIG_HAVE_MEMORY_PRESENT=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
CONFIG_ARCH_DISCARD_MEMBLOCK=y
CONFIG_MEMORY_ISOLATION=y
CONFIG_MOVABLE_NODE=y
CONFIG_HAVE_BOOTMEM_INFO_NODE=y
CONFIG_MEMORY_HOTPLUG=y
CONFIG_MEMORY_HOTPLUG_SPARSE=y
CONFIG_MEMORY_HOTREMOVE=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
CONFIG_MIGRATION=y
CONFIG_PHYS_ADDR_T_64BIT=y
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_NEED_BOUNCE_POOL=y
CONFIG_VIRT_TO_BUS=y
CONFIG_MMU_NOTIFIER=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
CONFIG_MEMORY_FAILURE=y
CONFIG_HWPOISON_INJECT=y
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
CONFIG_CMA=y
CONFIG_CMA_DEBUG=y
CONFIG_ZBUD=y
CONFIG_ZSWAP=y
CONFIG_MEM_SOFT_DIRTY=y
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_RESERVE_LOW=64
CONFIG_MTRR=y
CONFIG_MTRR_SANITIZER=y
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
CONFIG_ARCH_RANDOM=y
CONFIG_X86_SMAP=y
CONFIG_EFI=y
CONFIG_EFI_STUB=y
CONFIG_SECCOMP=y
CONFIG_CC_STACKPROTECTOR=y
CONFIG_HZ_100=y
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=100
CONFIG_SCHED_HRTICK=y
CONFIG_KEXEC=y
CONFIG_CRASH_DUMP=y
CONFIG_KEXEC_JUMP=y
CONFIG_PHYSICAL_START=0x1000000
CONFIG_RELOCATABLE=y
CONFIG_PHYSICAL_ALIGN=0x1000000
CONFIG_HOTPLUG_CPU=y
CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
CONFIG_DEBUG_HOTPLUG_CPU0=y
CONFIG_COMPAT_VDSO=y
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE=""
# CONFIG_CMDLINE_OVERRIDE is not set
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
CONFIG_USE_PERCPU_NUMA_NODE_ID=y

#
# Power management and ACPI options
#
CONFIG_ARCH_HIBERNATION_HEADER=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
CONFIG_HIBERNATE_CALLBACKS=y
CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION=""
CONFIG_PM_SLEEP=y
CONFIG_PM_SLEEP_SMP=y
CONFIG_PM_AUTOSLEEP=y
CONFIG_PM_WAKELOCKS=y
CONFIG_PM_WAKELOCKS_LIMIT=0
CONFIG_PM_WAKELOCKS_GC=y
CONFIG_PM_RUNTIME=y
CONFIG_PM=y
CONFIG_PM_DEBUG=y
CONFIG_PM_ADVANCED_DEBUG=y
CONFIG_PM_TEST_SUSPEND=y
CONFIG_PM_SLEEP_DEBUG=y
CONFIG_DPM_WATCHDOG=y
CONFIG_DPM_WATCHDOG_TIMEOUT=12
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
CONFIG_PM_CLK=y
CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_PROCFS=y
CONFIG_ACPI_EC_DEBUGFS=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_VIDEO=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_DOCK=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_NUMA=y
# CONFIG_ACPI_CUSTOM_DSDT is not set
CONFIG_ACPI_DEBUG=y
CONFIG_ACPI_PCI_SLOT=y
CONFIG_X86_PM_TIMER=y
CONFIG_ACPI_CONTAINER=y
CONFIG_ACPI_HOTPLUG_MEMORY=y
CONFIG_ACPI_SBS=y
CONFIG_ACPI_HED=y
CONFIG_ACPI_CUSTOM_METHOD=y
CONFIG_ACPI_BGRT=y
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=y
CONFIG_ACPI_APEI_PCIEAER=y
CONFIG_ACPI_APEI_MEMORY_FAILURE=y
CONFIG_ACPI_APEI_EINJ=y
CONFIG_ACPI_APEI_ERST_DEBUG=y
CONFIG_ACPI_EXTLOG=y
CONFIG_SFI=y

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_COMMON=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y

#
# x86 CPU frequency scaling drivers
#
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_PCC_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ_CPB=y
CONFIG_X86_POWERNOW_K8=y
CONFIG_X86_AMD_FREQ_SENSITIVITY=y
CONFIG_X86_SPEEDSTEP_CENTRINO=y
CONFIG_X86_P4_CLOCKMOD=y

#
# shared options
#
CONFIG_X86_SPEEDSTEP_LIB=y

#
# CPU Idle
#
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
CONFIG_INTEL_IDLE=y

#
# Memory power savings
#
CONFIG_I7300_IDLE_IOAT_CHANNEL=y
CONFIG_I7300_IDLE=y

#
# Bus options (PCI etc.)
#
CONFIG_PCI=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_XEN=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCI_CNB20LE_QUIRK=y
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI_PCIE=y
CONFIG_PCIEAER=y
CONFIG_PCIE_ECRC=y
CONFIG_PCIEAER_INJECT=y
CONFIG_PCIEASPM=y
CONFIG_PCIEASPM_DEBUG=y
CONFIG_PCIEASPM_DEFAULT=y
# CONFIG_PCIEASPM_POWERSAVE is not set
# CONFIG_PCIEASPM_PERFORMANCE is not set
CONFIG_PCIE_PME=y
CONFIG_PCI_MSI=y
CONFIG_PCI_DEBUG=y
CONFIG_PCI_REALLOC_ENABLE_AUTO=y
CONFIG_PCI_STUB=y
CONFIG_XEN_PCIDEV_FRONTEND=y
CONFIG_HT_IRQ=y
CONFIG_PCI_ATS=y
CONFIG_PCI_IOV=y
CONFIG_PCI_PRI=y
CONFIG_PCI_PASID=y
CONFIG_PCI_IOAPIC=y
CONFIG_PCI_LABEL=y

#
# PCI host controller drivers
#
CONFIG_ISA_DMA_API=y
CONFIG_AMD_NB=y
CONFIG_PCCARD=y
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_CARDBUS=y

#
# PC-card bridges
#
CONFIG_YENTA=y
CONFIG_YENTA_O2=y
CONFIG_YENTA_RICOH=y
CONFIG_YENTA_TI=y
CONFIG_YENTA_ENE_TUNE=y
CONFIG_YENTA_TOSHIBA=y
CONFIG_PD6729=y
CONFIG_I82092=y
CONFIG_PCCARD_NONSTATIC=y
CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_ACPI=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=y
CONFIG_HOTPLUG_PCI_CPCI=y
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=y
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=y
CONFIG_HOTPLUG_PCI_SHPC=y
CONFIG_RAPIDIO=y
CONFIG_RAPIDIO_TSI721=y
CONFIG_RAPIDIO_DISC_TIMEOUT=30
CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS=y
CONFIG_RAPIDIO_DMA_ENGINE=y
CONFIG_RAPIDIO_DEBUG=y
CONFIG_RAPIDIO_ENUM_BASIC=y

#
# RapidIO Switch drivers
#
CONFIG_RAPIDIO_TSI57X=y
CONFIG_RAPIDIO_CPS_XX=y
CONFIG_RAPIDIO_TSI568=y
CONFIG_RAPIDIO_CPS_GEN2=y
CONFIG_X86_SYSFB=y

#
# Executable file formats / Emulations
#
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_BINFMT_SCRIPT=y
# CONFIG_HAVE_AOUT is not set
CONFIG_BINFMT_MISC=y
CONFIG_COREDUMP=y
CONFIG_IA32_EMULATION=y
CONFIG_IA32_AOUT=y
CONFIG_X86_X32=y
CONFIG_COMPAT=y
CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_KEYS_COMPAT=y
CONFIG_X86_DEV_DMA_OPS=y
CONFIG_NET=y
CONFIG_COMPAT_NETLINK_MESSAGES=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_DIAG=y
CONFIG_UNIX=y
CONFIG_UNIX_DIAG=y
CONFIG_XFRM=y
CONFIG_XFRM_ALGO=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_IPCOMP=y
CONFIG_NET_KEY=y
CONFIG_NET_KEY_MIGRATE=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_FIB_TRIE_STATS=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_ROUTE_CLASSID=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_NET_IPIP=y
CONFIG_NET_IPGRE_DEMUX=y
CONFIG_NET_IP_TUNNEL=y
CONFIG_NET_IPGRE=y
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_IPCOMP=y
CONFIG_INET_XFRM_TUNNEL=y
CONFIG_INET_TUNNEL=y
CONFIG_INET_XFRM_MODE_TRANSPORT=y
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_LRO=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
CONFIG_INET_UDP_DIAG=y
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=y
CONFIG_TCP_CONG_HTCP=y
CONFIG_TCP_CONG_HSTCP=y
CONFIG_TCP_CONG_HYBLA=y
CONFIG_TCP_CONG_VEGAS=y
CONFIG_TCP_CONG_SCALABLE=y
CONFIG_TCP_CONG_LP=y
CONFIG_TCP_CONG_VENO=y
CONFIG_TCP_CONG_YEAH=y
CONFIG_TCP_CONG_ILLINOIS=y
# CONFIG_DEFAULT_BIC is not set
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_HYBLA is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_VENO is not set
# CONFIG_DEFAULT_WESTWOOD is not set
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_INET6_IPCOMP=y
CONFIG_IPV6_MIP6=y
CONFIG_INET6_XFRM_TUNNEL=y
CONFIG_INET6_TUNNEL=y
CONFIG_INET6_XFRM_MODE_TRANSPORT=y
CONFIG_INET6_XFRM_MODE_TUNNEL=y
CONFIG_INET6_XFRM_MODE_BEET=y
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=y
CONFIG_IPV6_VTI=y
CONFIG_IPV6_SIT=y
CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=y
CONFIG_IPV6_GRE=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_IPV6_MROUTE=y
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
CONFIG_IPV6_PIMSM_V2=y
CONFIG_NETLABEL=y
CONFIG_NETWORK_SECMARK=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_NETFILTER_DEBUG=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_NETLINK_ACCT=y
CONFIG_NETFILTER_NETLINK_QUEUE=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
CONFIG_NF_CONNTRACK_PROCFS=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_TIMEOUT=y
CONFIG_NF_CONNTRACK_TIMESTAMP=y
CONFIG_NF_CONNTRACK_LABELS=y
CONFIG_NF_CT_PROTO_DCCP=y
CONFIG_NF_CT_PROTO_GRE=y
CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_H323=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_BROADCAST=y
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
CONFIG_NF_CONNTRACK_SNMP=y
CONFIG_NF_CONNTRACK_PPTP=y
CONFIG_NF_CONNTRACK_SANE=y
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NF_CT_NETLINK_TIMEOUT=y
CONFIG_NF_CT_NETLINK_HELPER=y
CONFIG_NETFILTER_NETLINK_QUEUE_CT=y
CONFIG_NF_NAT=y
CONFIG_NF_NAT_NEEDED=y
CONFIG_NF_NAT_PROTO_DCCP=y
CONFIG_NF_NAT_PROTO_UDPLITE=y
CONFIG_NF_NAT_PROTO_SCTP=y
CONFIG_NF_NAT_AMANDA=y
CONFIG_NF_NAT_FTP=y
CONFIG_NF_NAT_IRC=y
CONFIG_NF_NAT_SIP=y
CONFIG_NF_NAT_TFTP=y
CONFIG_NETFILTER_SYNPROXY=y
CONFIG_NF_TABLES=y
CONFIG_NFT_EXTHDR=y
CONFIG_NFT_META=y
CONFIG_NFT_CT=y
CONFIG_NFT_RBTREE=y
CONFIG_NFT_HASH=y
CONFIG_NFT_COUNTER=y
CONFIG_NFT_LOG=y
CONFIG_NFT_LIMIT=y
CONFIG_NFT_NAT=y
CONFIG_NFT_COMPAT=y
CONFIG_NETFILTER_XTABLES=y

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=y
CONFIG_NETFILTER_XT_CONNMARK=y
CONFIG_NETFILTER_XT_SET=y

#
# Xtables targets
#
CONFIG_NETFILTER_XT_TARGET_AUDIT=y
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_CT=y
CONFIG_NETFILTER_XT_TARGET_DSCP=y
CONFIG_NETFILTER_XT_TARGET_HL=y
CONFIG_NETFILTER_XT_TARGET_HMARK=y
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
CONFIG_NETFILTER_XT_TARGET_LED=y
CONFIG_NETFILTER_XT_TARGET_LOG=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_TARGET_NETMAP=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
CONFIG_NETFILTER_XT_TARGET_RATEEST=y
CONFIG_NETFILTER_XT_TARGET_REDIRECT=y
CONFIG_NETFILTER_XT_TARGET_TEE=y
CONFIG_NETFILTER_XT_TARGET_TPROXY=y
CONFIG_NETFILTER_XT_TARGET_TRACE=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=y

#
# Xtables matches
#
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_MATCH_BPF=y
CONFIG_NETFILTER_XT_MATCH_CLUSTER=y
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_CPU=y
CONFIG_NETFILTER_XT_MATCH_DCCP=y
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=y
CONFIG_NETFILTER_XT_MATCH_DSCP=y
CONFIG_NETFILTER_XT_MATCH_ECN=y
CONFIG_NETFILTER_XT_MATCH_ESP=y
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
CONFIG_NETFILTER_XT_MATCH_HELPER=y
CONFIG_NETFILTER_XT_MATCH_HL=y
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
CONFIG_NETFILTER_XT_MATCH_IPVS=y
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
CONFIG_NETFILTER_XT_MATCH_MAC=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
CONFIG_NETFILTER_XT_MATCH_NFACCT=y
CONFIG_NETFILTER_XT_MATCH_OSF=y
CONFIG_NETFILTER_XT_MATCH_OWNER=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
CONFIG_NETFILTER_XT_MATCH_QUOTA=y
CONFIG_NETFILTER_XT_MATCH_RATEEST=y
CONFIG_NETFILTER_XT_MATCH_REALM=y
CONFIG_NETFILTER_XT_MATCH_RECENT=y
CONFIG_NETFILTER_XT_MATCH_SCTP=y
CONFIG_NETFILTER_XT_MATCH_SOCKET=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y
CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=256
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP_VS=y
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_DEBUG=y
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=y
CONFIG_IP_VS_WRR=y
CONFIG_IP_VS_LC=y
CONFIG_IP_VS_WLC=y
CONFIG_IP_VS_LBLC=y
CONFIG_IP_VS_LBLCR=y
CONFIG_IP_VS_DH=y
CONFIG_IP_VS_SH=y
CONFIG_IP_VS_SED=y
CONFIG_IP_VS_NQ=y

#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=y
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=y

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_NF_CONNTRACK_PROC_COMPAT=y
CONFIG_NF_TABLES_IPV4=y
CONFIG_NFT_REJECT_IPV4=y
CONFIG_NFT_CHAIN_ROUTE_IPV4=y
CONFIG_NFT_CHAIN_NAT_IPV4=y
CONFIG_NF_TABLES_ARP=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_AH=y
CONFIG_IP_NF_MATCH_ECN=y
CONFIG_IP_NF_MATCH_RPFILTER=y
CONFIG_IP_NF_MATCH_TTL=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_SYNPROXY=y
CONFIG_IP_NF_TARGET_ULOG=y
CONFIG_NF_NAT_IPV4=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_NF_NAT_SNMP_BASIC=y
CONFIG_NF_NAT_PROTO_GRE=y
CONFIG_NF_NAT_PPTP=y
CONFIG_NF_NAT_H323=y
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_TARGET_CLUSTERIP=y
CONFIG_IP_NF_TARGET_ECN=y
CONFIG_IP_NF_TARGET_TTL=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_SECURITY=y
CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV6=y
CONFIG_NF_CONNTRACK_IPV6=y
CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_CHAIN_ROUTE_IPV6=y
CONFIG_NFT_CHAIN_NAT_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_AH=y
CONFIG_IP6_NF_MATCH_EUI64=y
CONFIG_IP6_NF_MATCH_FRAG=y
CONFIG_IP6_NF_MATCH_OPTS=y
CONFIG_IP6_NF_MATCH_HL=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
CONFIG_IP6_NF_MATCH_MH=y
CONFIG_IP6_NF_MATCH_RPFILTER=y
CONFIG_IP6_NF_MATCH_RT=y
CONFIG_IP6_NF_TARGET_HL=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_TARGET_SYNPROXY=y
CONFIG_IP6_NF_MANGLE=y
CONFIG_IP6_NF_RAW=y
CONFIG_IP6_NF_SECURITY=y
CONFIG_NF_NAT_IPV6=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
CONFIG_IP6_NF_TARGET_NPT=y

#
# DECnet: Netfilter Configuration
#
CONFIG_DECNET_NF_GRABULATOR=y
CONFIG_NF_TABLES_BRIDGE=y
CONFIG_BRIDGE_NF_EBTABLES=y
CONFIG_BRIDGE_EBT_BROUTE=y
CONFIG_BRIDGE_EBT_T_FILTER=y
CONFIG_BRIDGE_EBT_T_NAT=y
CONFIG_BRIDGE_EBT_802_3=y
CONFIG_BRIDGE_EBT_AMONG=y
CONFIG_BRIDGE_EBT_ARP=y
CONFIG_BRIDGE_EBT_IP=y
CONFIG_BRIDGE_EBT_IP6=y
CONFIG_BRIDGE_EBT_LIMIT=y
CONFIG_BRIDGE_EBT_MARK=y
CONFIG_BRIDGE_EBT_PKTTYPE=y
CONFIG_BRIDGE_EBT_STP=y
CONFIG_BRIDGE_EBT_VLAN=y
CONFIG_BRIDGE_EBT_ARPREPLY=y
CONFIG_BRIDGE_EBT_DNAT=y
CONFIG_BRIDGE_EBT_MARK_T=y
CONFIG_BRIDGE_EBT_REDIRECT=y
CONFIG_BRIDGE_EBT_SNAT=y
CONFIG_BRIDGE_EBT_LOG=y
CONFIG_BRIDGE_EBT_ULOG=y
CONFIG_BRIDGE_EBT_NFLOG=y
CONFIG_IP_DCCP=y
CONFIG_INET_DCCP_DIAG=y

#
# DCCP CCIDs Configuration
#
CONFIG_IP_DCCP_CCID2_DEBUG=y
CONFIG_IP_DCCP_CCID3=y
CONFIG_IP_DCCP_CCID3_DEBUG=y
CONFIG_IP_DCCP_TFRC_LIB=y
CONFIG_IP_DCCP_TFRC_DEBUG=y

#
# DCCP Kernel Hacking
#
CONFIG_IP_DCCP_DEBUG=y
# CONFIG_NET_DCCPPROBE is not set
CONFIG_IP_SCTP=y
# CONFIG_NET_SCTPPROBE is not set
CONFIG_SCTP_DBG_OBJCNT=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
CONFIG_SCTP_COOKIE_HMAC_MD5=y
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_RDS=y
CONFIG_RDS_RDMA=y
CONFIG_RDS_TCP=y
CONFIG_RDS_DEBUG=y
CONFIG_TIPC=y
CONFIG_TIPC_PORTS=8191
CONFIG_TIPC_MEDIA_IB=y
CONFIG_ATM=y
CONFIG_ATM_CLIP=y
# CONFIG_ATM_CLIP_NO_ICMP is not set
CONFIG_ATM_LANE=y
CONFIG_ATM_MPOA=y
CONFIG_ATM_BR2684=y
CONFIG_ATM_BR2684_IPFILTER=y
CONFIG_L2TP=y
CONFIG_L2TP_DEBUGFS=y
CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=y
CONFIG_L2TP_ETH=y
CONFIG_STP=y
CONFIG_GARP=y
CONFIG_MRP=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_HAVE_NET_DSA=y
CONFIG_NET_DSA=y
CONFIG_NET_DSA_TAG_DSA=y
CONFIG_NET_DSA_TAG_EDSA=y
CONFIG_NET_DSA_TAG_TRAILER=y
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_DECNET=y
CONFIG_DECNET_ROUTER=y
CONFIG_LLC=y
CONFIG_LLC2=y
CONFIG_IPX=y
CONFIG_IPX_INTERN=y
CONFIG_ATALK=y
CONFIG_DEV_APPLETALK=y
CONFIG_IPDDP=y
CONFIG_IPDDP_ENCAP=y
CONFIG_X25=y
CONFIG_LAPB=y
CONFIG_PHONET=y
CONFIG_IEEE802154=y
CONFIG_IEEE802154_6LOWPAN=y
CONFIG_MAC802154=y
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=y
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_HFSC=y
CONFIG_NET_SCH_ATM=y
CONFIG_NET_SCH_PRIO=y
CONFIG_NET_SCH_MULTIQ=y
CONFIG_NET_SCH_RED=y
CONFIG_NET_SCH_SFB=y
CONFIG_NET_SCH_SFQ=y
CONFIG_NET_SCH_TEQL=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_GRED=y
CONFIG_NET_SCH_DSMARK=y
CONFIG_NET_SCH_NETEM=y
CONFIG_NET_SCH_DRR=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_CHOKE=y
CONFIG_NET_SCH_QFQ=y
CONFIG_NET_SCH_CODEL=y
CONFIG_NET_SCH_FQ_CODEL=y
CONFIG_NET_SCH_FQ=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_SCH_PLUG=y

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=y
CONFIG_NET_CLS_TCINDEX=y
CONFIG_NET_CLS_ROUTE4=y
CONFIG_NET_CLS_FW=y
CONFIG_NET_CLS_U32=y
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=y
CONFIG_NET_CLS_RSVP6=y
CONFIG_NET_CLS_FLOW=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_NET_CLS_BPF=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_NBYTE=y
CONFIG_NET_EMATCH_U32=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_EMATCH_TEXT=y
CONFIG_NET_EMATCH_CANID=y
CONFIG_NET_EMATCH_IPSET=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=y
CONFIG_NET_ACT_GACT=y
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=y
CONFIG_NET_ACT_IPT=y
CONFIG_NET_ACT_NAT=y
CONFIG_NET_ACT_PEDIT=y
CONFIG_NET_ACT_SIMP=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_NET_ACT_CSUM=y
CONFIG_NET_CLS_IND=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=y
# CONFIG_BATMAN_ADV is not set
CONFIG_OPENVSWITCH=y
CONFIG_OPENVSWITCH_GRE=y
CONFIG_OPENVSWITCH_VXLAN=y
CONFIG_VSOCKETS=y
CONFIG_VMWARE_VMCI_VSOCKETS=y
CONFIG_NETLINK_MMAP=y
CONFIG_NETLINK_DIAG=y
CONFIG_NET_MPLS_GSO=y
CONFIG_HSR=y
CONFIG_RPS=y
CONFIG_RFS_ACCEL=y
CONFIG_XPS=y
CONFIG_NETPRIO_CGROUP=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
CONFIG_BPF_JIT=y
CONFIG_NET_FLOW_LIMIT=y

#
# Network testing
#
CONFIG_NET_PKTGEN=y
# CONFIG_NET_TCPPROBE is not set
CONFIG_NET_DROP_MONITOR=y
CONFIG_HAMRADIO=y

#
# Packet Radio protocols
#
# CONFIG_AX25 is not set
CONFIG_CAN=y
CONFIG_CAN_RAW=y
CONFIG_CAN_BCM=y
CONFIG_CAN_GW=y

#
# CAN Device Drivers
#
CONFIG_CAN_VCAN=y
CONFIG_CAN_SLCAN=y
CONFIG_CAN_DEV=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_LEDS=y
CONFIG_CAN_MCP251X=y
CONFIG_CAN_JANZ_ICAN3=y
CONFIG_PCH_CAN=y
CONFIG_CAN_SJA1000=y
CONFIG_CAN_SJA1000_ISA=y
CONFIG_CAN_SJA1000_PLATFORM=y
CONFIG_CAN_EMS_PCMCIA=y
CONFIG_CAN_EMS_PCI=y
CONFIG_CAN_PEAK_PCMCIA=y
CONFIG_CAN_PEAK_PCI=y
CONFIG_CAN_PEAK_PCIEC=y
CONFIG_CAN_KVASER_PCI=y
CONFIG_CAN_PLX_PCI=y
CONFIG_CAN_C_CAN=y
CONFIG_CAN_C_CAN_PLATFORM=y
CONFIG_CAN_C_CAN_PCI=y
CONFIG_CAN_CC770=y
CONFIG_CAN_CC770_ISA=y
CONFIG_CAN_CC770_PLATFORM=y

#
# CAN USB interfaces
#
CONFIG_CAN_EMS_USB=y
CONFIG_CAN_ESD_USB2=y
CONFIG_CAN_KVASER_USB=y
CONFIG_CAN_PEAK_USB=y
CONFIG_CAN_8DEV_USB=y
CONFIG_CAN_SOFTING=y
CONFIG_CAN_SOFTING_CS=y
CONFIG_CAN_DEBUG_DEVICES=y
# CONFIG_IRDA is not set
CONFIG_BT=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=y
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_CMTP=y
CONFIG_BT_HIDP=y

#
# Bluetooth device drivers
#
CONFIG_BT_HCIBTUSB=y
CONFIG_BT_HCIBTSDIO=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIUART_3WIRE=y
CONFIG_BT_HCIBCM203X=y
CONFIG_BT_HCIBPA10X=y
CONFIG_BT_HCIBFUSB=y
CONFIG_BT_HCIDTL1=y
CONFIG_BT_HCIBT3C=y
CONFIG_BT_HCIBLUECARD=y
CONFIG_BT_HCIBTUART=y
CONFIG_BT_HCIVHCI=y
CONFIG_BT_MRVL=y
CONFIG_BT_MRVL_SDIO=y
CONFIG_BT_ATH3K=y
CONFIG_BT_WILINK=y
CONFIG_AF_RXRPC=y
CONFIG_AF_RXRPC_DEBUG=y
CONFIG_RXKAD=y
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=y
CONFIG_NL80211_TESTMODE=y
CONFIG_CFG80211_DEVELOPER_WARNINGS=y
CONFIG_CFG80211_REG_DEBUG=y
CONFIG_CFG80211_CERTIFICATION_ONUS=y
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEBUGFS=y
CONFIG_CFG80211_INTERNAL_REGDB=y
CONFIG_CFG80211_WEXT=y
CONFIG_LIB80211=y
CONFIG_LIB80211_CRYPT_WEP=y
CONFIG_LIB80211_CRYPT_CCMP=y
CONFIG_LIB80211_CRYPT_TKIP=y
CONFIG_LIB80211_DEBUG=y
CONFIG_MAC80211=y
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_PID=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_MINSTREL_HT=y
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_LEDS=y
CONFIG_MAC80211_DEBUGFS=y
CONFIG_MAC80211_MESSAGE_TRACING=y
CONFIG_MAC80211_DEBUG_MENU=y
CONFIG_MAC80211_NOINLINE=y
CONFIG_MAC80211_VERBOSE_DEBUG=y
CONFIG_MAC80211_MLME_DEBUG=y
CONFIG_MAC80211_STA_DEBUG=y
CONFIG_MAC80211_HT_DEBUG=y
CONFIG_MAC80211_IBSS_DEBUG=y
CONFIG_MAC80211_PS_DEBUG=y
CONFIG_MAC80211_MPL_DEBUG=y
CONFIG_MAC80211_MPATH_DEBUG=y
CONFIG_MAC80211_MHWMP_DEBUG=y
CONFIG_MAC80211_MESH_SYNC_DEBUG=y
CONFIG_MAC80211_MESH_CSA_DEBUG=y
CONFIG_MAC80211_MESH_PS_DEBUG=y
CONFIG_MAC80211_TDLS_DEBUG=y
CONFIG_MAC80211_DEBUG_COUNTERS=y
CONFIG_WIMAX=y
CONFIG_WIMAX_DEBUG_LEVEL=8
CONFIG_RFKILL=y
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_REGULATOR=y
CONFIG_RFKILL_GPIO=y
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_RDMA=y
CONFIG_NET_9P_DEBUG=y
CONFIG_CAIF=y
CONFIG_CAIF_DEBUG=y
CONFIG_CAIF_NETDEV=y
CONFIG_CAIF_USB=y
CONFIG_CEPH_LIB=y
CONFIG_CEPH_LIB_PRETTYDEBUG=y
CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y
CONFIG_NFC=y
CONFIG_NFC_DIGITAL=y
CONFIG_NFC_NCI=y
CONFIG_NFC_NCI_SPI=y
CONFIG_NFC_HCI=y
CONFIG_NFC_SHDLC=y

#
# Near Field Communication (NFC) devices
#
CONFIG_NFC_PN533=y
CONFIG_NFC_WILINK=y
CONFIG_NFC_MEI_PHY=y
CONFIG_NFC_SIM=y
CONFIG_NFC_PORT100=y
CONFIG_NFC_PN544=y
CONFIG_NFC_PN544_I2C=y
CONFIG_NFC_PN544_MEI=y
CONFIG_NFC_MICROREAD=y
CONFIG_NFC_MICROREAD_I2C=y
CONFIG_NFC_MICROREAD_MEI=y
CONFIG_HAVE_BPF_JIT=y

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_DEBUG_DRIVER=y
CONFIG_DEBUG_DEVRES=y
CONFIG_SYS_HYPERVISOR=y
# CONFIG_GENERIC_CPU_DEVICES is not set
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP_SPI=y
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_DMA_SHARED_BUFFER=y

#
# Bus devices
#
CONFIG_CONNECTOR=y
CONFIG_PROC_EVENTS=y
CONFIG_MTD=y
# CONFIG_MTD_TESTS is not set
CONFIG_MTD_REDBOOT_PARTS=y
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
CONFIG_MTD_REDBOOT_PARTS_READONLY=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_AR7_PARTS=y

#
# User Modules And Translation Layers
#
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
CONFIG_FTL=y
CONFIG_NFTL=y
CONFIG_NFTL_RW=y
CONFIG_INFTL=y
CONFIG_RFD_FTL=y
CONFIG_SSFDC=y
CONFIG_SM_FTL=y
CONFIG_MTD_OOPS=y
CONFIG_MTD_SWAP=y

#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=y
CONFIG_MTD_JEDECPROBE=y
CONFIG_MTD_GEN_PROBE=y
CONFIG_MTD_CFI_ADV_OPTIONS=y
CONFIG_MTD_CFI_NOSWAP=y
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
CONFIG_MTD_CFI_GEOMETRY=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_MAP_BANK_WIDTH_8=y
CONFIG_MTD_MAP_BANK_WIDTH_16=y
CONFIG_MTD_MAP_BANK_WIDTH_32=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
CONFIG_MTD_CFI_I4=y
CONFIG_MTD_CFI_I8=y
CONFIG_MTD_OTP=y
CONFIG_MTD_CFI_INTELEXT=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_CFI_STAA=y
CONFIG_MTD_CFI_UTIL=y
CONFIG_MTD_RAM=y
CONFIG_MTD_ROM=y
CONFIG_MTD_ABSENT=y

#
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_COMPAT=y
CONFIG_MTD_PHYSMAP_START=0x8000000
CONFIG_MTD_PHYSMAP_LEN=0
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
CONFIG_MTD_SC520CDP=y
CONFIG_MTD_NETSC520=y
CONFIG_MTD_TS5500=y
CONFIG_MTD_SBC_GXX=y
CONFIG_MTD_AMD76XROM=y
CONFIG_MTD_ICHXROM=y
CONFIG_MTD_ESB2ROM=y
CONFIG_MTD_CK804XROM=y
CONFIG_MTD_SCB2_FLASH=y
CONFIG_MTD_NETtel=y
CONFIG_MTD_L440GX=y
CONFIG_MTD_PCI=y
CONFIG_MTD_PCMCIA=y
CONFIG_MTD_PCMCIA_ANONYMOUS=y
CONFIG_MTD_GPIO_ADDR=y
CONFIG_MTD_INTEL_VR_NOR=y
CONFIG_MTD_PLATRAM=y
CONFIG_MTD_LATCH_ADDR=y

#
# Self-contained MTD device drivers
#
CONFIG_MTD_PMC551=y
CONFIG_MTD_PMC551_BUGFIX=y
CONFIG_MTD_PMC551_DEBUG=y
CONFIG_MTD_DATAFLASH=y
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
CONFIG_MTD_DATAFLASH_OTP=y
CONFIG_MTD_M25P80=y
CONFIG_MTD_SST25L=y
CONFIG_MTD_SLRAM=y
CONFIG_MTD_PHRAM=y
CONFIG_MTD_MTDRAM=y
CONFIG_MTDRAM_TOTAL_SIZE=4096
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTDRAM_ABS_POS=0
CONFIG_MTD_BLOCK2MTD=y

#
# Disk-On-Chip Device Drivers
#
CONFIG_MTD_DOCG3=y
CONFIG_BCH_CONST_M=14
CONFIG_BCH_CONST_T=4
CONFIG_MTD_NAND_ECC=y
CONFIG_MTD_NAND_ECC_SMC=y
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_BCH=y
CONFIG_MTD_NAND_ECC_BCH=y
CONFIG_MTD_SM_COMMON=y
CONFIG_MTD_NAND_DENALI=y
CONFIG_MTD_NAND_DENALI_PCI=y
CONFIG_MTD_NAND_DENALI_DT=y
CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018
CONFIG_MTD_NAND_GPIO=y
CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_RICOH=y
CONFIG_MTD_NAND_DISKONCHIP=y
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH=y
CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
CONFIG_MTD_NAND_DOCG4=y
CONFIG_MTD_NAND_CAFE=y
CONFIG_MTD_NAND_NANDSIM=y
CONFIG_MTD_NAND_PLATFORM=y
CONFIG_MTD_ONENAND=y
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
CONFIG_MTD_ONENAND_GENERIC=y
CONFIG_MTD_ONENAND_OTP=y
CONFIG_MTD_ONENAND_2X_PROGRAM=y

#
# LPDDR flash memory drivers
#
CONFIG_MTD_LPDDR=y
CONFIG_MTD_QINFO_PROBE=y
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_LIMIT=2
CONFIG_MTD_UBI_FASTMAP=y
CONFIG_MTD_UBI_GLUEBI=y
# CONFIG_PARPORT is not set
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_PNP=y
CONFIG_PNP_DEBUG_MESSAGES=y

#
# Protocols
#
CONFIG_PNPACPI=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_NULL_BLK=y
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=y
CONFIG_BLK_CPQ_CISS_DA=y
CONFIG_CISS_SCSI_TAPE=y
CONFIG_BLK_DEV_DAC960=y
CONFIG_BLK_DEV_UMEM=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
CONFIG_BLK_DEV_CRYPTOLOOP=y
CONFIG_BLK_DEV_DRBD=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_BLK_DEV_NBD=y
CONFIG_BLK_DEV_NVME=y
CONFIG_BLK_DEV_SKD=y
CONFIG_BLK_DEV_OSD=y
CONFIG_BLK_DEV_SX8=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=16384
CONFIG_BLK_DEV_XIP=y
CONFIG_CDROM_PKTCDVD=y
CONFIG_CDROM_PKTCDVD_BUFFERS=8
CONFIG_CDROM_PKTCDVD_WCACHE=y
CONFIG_ATA_OVER_ETH=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_VIRTIO_BLK=y
CONFIG_BLK_DEV_HD=y
CONFIG_BLK_DEV_RBD=y
CONFIG_BLK_DEV_RSXX=y

#
# Misc devices
#
CONFIG_SENSORS_LIS3LV02D=y
CONFIG_AD525X_DPOT=y
CONFIG_AD525X_DPOT_I2C=y
CONFIG_AD525X_DPOT_SPI=y
CONFIG_ATMEL_PWM=y
CONFIG_DUMMY_IRQ=y
CONFIG_IBM_ASM=y
CONFIG_PHANTOM=y
CONFIG_SGI_IOC4=y
CONFIG_TIFM_CORE=y
CONFIG_TIFM_7XX1=y
CONFIG_ICS932S401=y
CONFIG_ATMEL_SSC=y
CONFIG_ENCLOSURE_SERVICES=y
CONFIG_SGI_XP=y
CONFIG_CS5535_MFGPT=y
CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
CONFIG_CS5535_CLOCK_EVENT_SRC=y
CONFIG_HP_ILO=y
CONFIG_SGI_GRU=y
CONFIG_SGI_GRU_DEBUG=y
CONFIG_APDS9802ALS=y
CONFIG_ISL29003=y
CONFIG_ISL29020=y
CONFIG_SENSORS_TSL2550=y
CONFIG_SENSORS_BH1780=y
CONFIG_SENSORS_BH1770=y
CONFIG_SENSORS_APDS990X=y
CONFIG_HMC6352=y
CONFIG_DS1682=y
CONFIG_TI_DAC7512=y
CONFIG_VMWARE_BALLOON=y
CONFIG_BMP085=y
CONFIG_BMP085_I2C=y
CONFIG_BMP085_SPI=y
CONFIG_PCH_PHUB=y
CONFIG_USB_SWITCH_FSA9480=y
CONFIG_LATTICE_ECP3_CONFIG=y
CONFIG_SRAM=y
CONFIG_C2PORT=y
CONFIG_C2PORT_DURAMAR_2150=y

#
# EEPROM support
#
CONFIG_EEPROM_AT24=y
CONFIG_EEPROM_AT25=y
CONFIG_EEPROM_LEGACY=y
CONFIG_EEPROM_MAX6875=y
CONFIG_EEPROM_93CX6=y
CONFIG_EEPROM_93XX46=y
CONFIG_CB710_CORE=y
CONFIG_CB710_DEBUG=y
CONFIG_CB710_DEBUG_ASSUMPTIONS=y

#
# Texas Instruments shared transport line discipline
#
CONFIG_TI_ST=y
CONFIG_SENSORS_LIS3_I2C=y

#
# Altera FPGA firmware download module
#
CONFIG_ALTERA_STAPL=y
CONFIG_INTEL_MEI=y
CONFIG_INTEL_MEI_ME=y
CONFIG_VMWARE_VMCI=y

#
# Intel MIC Host Driver
#
CONFIG_INTEL_MIC_HOST=y

#
# Intel MIC Card Driver
#
CONFIG_INTEL_MIC_CARD=y
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
CONFIG_RAID_ATTRS=y
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
CONFIG_SCSI_TGT=y
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=y
CONFIG_CHR_DEV_OSST=y
CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_SCH=y
CONFIG_SCSI_ENCLOSURE=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_FC_ATTRS=y
CONFIG_SCSI_FC_TGT_ATTRS=y
CONFIG_SCSI_ISCSI_ATTRS=y
CONFIG_SCSI_SAS_ATTRS=y
CONFIG_SCSI_SAS_LIBSAS=y
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=y
CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=y
CONFIG_ISCSI_BOOT_SYSFS=y
CONFIG_SCSI_CXGB3_ISCSI=y
CONFIG_SCSI_CXGB4_ISCSI=y
CONFIG_SCSI_BNX2_ISCSI=y
CONFIG_SCSI_BNX2X_FCOE=y
CONFIG_BE2ISCSI=y
CONFIG_BLK_DEV_3W_XXXX_RAID=y
CONFIG_SCSI_HPSA=y
CONFIG_SCSI_3W_9XXX=y
CONFIG_SCSI_3W_SAS=y
CONFIG_SCSI_ACARD=y
CONFIG_SCSI_AACRAID=y
CONFIG_SCSI_AIC7XXX=y
CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
CONFIG_AIC7XXX_RESET_DELAY_MS=5000
CONFIG_AIC7XXX_DEBUG_ENABLE=y
CONFIG_AIC7XXX_DEBUG_MASK=0
CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
CONFIG_SCSI_AIC79XX=y
CONFIG_AIC79XX_CMDS_PER_DEVICE=32
CONFIG_AIC79XX_RESET_DELAY_MS=5000
CONFIG_AIC79XX_DEBUG_ENABLE=y
CONFIG_AIC79XX_DEBUG_MASK=0
CONFIG_AIC79XX_REG_PRETTY_PRINT=y
CONFIG_SCSI_AIC94XX=y
CONFIG_AIC94XX_DEBUG=y
CONFIG_SCSI_MVSAS=y
CONFIG_SCSI_MVSAS_DEBUG=y
CONFIG_SCSI_MVSAS_TASKLET=y
CONFIG_SCSI_MVUMI=y
CONFIG_SCSI_DPT_I2O=y
CONFIG_SCSI_ADVANSYS=y
CONFIG_SCSI_ARCMSR=y
CONFIG_SCSI_ESAS2R=y
CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_MM=y
CONFIG_MEGARAID_MAILBOX=y
CONFIG_MEGARAID_LEGACY=y
CONFIG_MEGARAID_SAS=y
CONFIG_SCSI_MPT2SAS=y
CONFIG_SCSI_MPT2SAS_MAX_SGE=128
CONFIG_SCSI_MPT2SAS_LOGGING=y
CONFIG_SCSI_MPT3SAS=y
CONFIG_SCSI_MPT3SAS_MAX_SGE=128
CONFIG_SCSI_MPT3SAS_LOGGING=y
CONFIG_SCSI_UFSHCD=y
CONFIG_SCSI_UFSHCD_PCI=y
CONFIG_SCSI_UFSHCD_PLATFORM=y
CONFIG_SCSI_HPTIOP=y
CONFIG_SCSI_BUSLOGIC=y
CONFIG_SCSI_FLASHPOINT=y
CONFIG_VMWARE_PVSCSI=y
CONFIG_HYPERV_STORAGE=y
CONFIG_LIBFC=y
CONFIG_LIBFCOE=y
CONFIG_FCOE=y
CONFIG_FCOE_FNIC=y
CONFIG_SCSI_DMX3191D=y
CONFIG_SCSI_EATA=y
CONFIG_SCSI_EATA_TAGGED_QUEUE=y
CONFIG_SCSI_EATA_LINKED_COMMANDS=y
CONFIG_SCSI_EATA_MAX_TAGS=16
CONFIG_SCSI_FUTURE_DOMAIN=y
CONFIG_SCSI_GDTH=y
CONFIG_SCSI_ISCI=y
CONFIG_SCSI_IPS=y
CONFIG_SCSI_INITIO=y
CONFIG_SCSI_INIA100=y
CONFIG_SCSI_STEX=y
CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
CONFIG_SCSI_SYM53C8XX_MMIO=y
CONFIG_SCSI_IPR=y
CONFIG_SCSI_IPR_TRACE=y
CONFIG_SCSI_IPR_DUMP=y
CONFIG_SCSI_QLOGIC_1280=y
CONFIG_SCSI_QLA_FC=y
CONFIG_TCM_QLA2XXX=y
CONFIG_SCSI_QLA_ISCSI=y
# CONFIG_SCSI_LPFC is not set
CONFIG_SCSI_DC395x=y
CONFIG_SCSI_DC390T=y
CONFIG_SCSI_DEBUG=y
CONFIG_SCSI_PMCRAID=y
CONFIG_SCSI_PM8001=y
CONFIG_SCSI_SRP=y
CONFIG_SCSI_BFA_FC=y
CONFIG_SCSI_VIRTIO=y
CONFIG_SCSI_CHELSIO_FCOE=y
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
CONFIG_PCMCIA_AHA152X=m
CONFIG_PCMCIA_FDOMAIN=m
CONFIG_PCMCIA_QLOGIC=m
CONFIG_PCMCIA_SYM53C500=m
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=y
CONFIG_SCSI_DH_HP_SW=y
CONFIG_SCSI_DH_EMC=y
CONFIG_SCSI_DH_ALUA=y
CONFIG_SCSI_OSD_INITIATOR=y
CONFIG_SCSI_OSD_ULD=y
CONFIG_SCSI_OSD_DPRINT_SENSE=1
# CONFIG_SCSI_OSD_DEBUG is not set
CONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not set
CONFIG_ATA_VERBOSE_ERROR=y
CONFIG_ATA_ACPI=y
CONFIG_SATA_ZPODD=y
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
CONFIG_SATA_AHCI=y
CONFIG_SATA_AHCI_PLATFORM=y
CONFIG_AHCI_IMX=y
CONFIG_SATA_INIC162X=y
CONFIG_SATA_ACARD_AHCI=y
CONFIG_SATA_SIL24=y
CONFIG_ATA_SFF=y

#
# SFF controllers with custom DMA interface
#
CONFIG_PDC_ADMA=y
CONFIG_SATA_QSTOR=y
CONFIG_SATA_SX4=y
CONFIG_ATA_BMDMA=y

#
# SATA SFF controllers with BMDMA
#
CONFIG_ATA_PIIX=y
CONFIG_SATA_HIGHBANK=y
CONFIG_SATA_MV=y
CONFIG_SATA_NV=y
CONFIG_SATA_PROMISE=y
CONFIG_SATA_RCAR=y
CONFIG_SATA_SIL=y
CONFIG_SATA_SIS=y
CONFIG_SATA_SVW=y
CONFIG_SATA_ULI=y
CONFIG_SATA_VIA=y
CONFIG_SATA_VITESSE=y

#
# PATA SFF controllers with BMDMA
#
CONFIG_PATA_ALI=y
CONFIG_PATA_AMD=y
CONFIG_PATA_ARASAN_CF=y
CONFIG_PATA_ARTOP=y
CONFIG_PATA_ATIIXP=y
CONFIG_PATA_ATP867X=y
CONFIG_PATA_CMD64X=y
CONFIG_PATA_CS5520=y
CONFIG_PATA_CS5530=y
CONFIG_PATA_CS5536=y
CONFIG_PATA_CYPRESS=y
CONFIG_PATA_EFAR=y
CONFIG_PATA_HPT366=y
CONFIG_PATA_HPT37X=y
CONFIG_PATA_HPT3X2N=y
CONFIG_PATA_HPT3X3=y
CONFIG_PATA_HPT3X3_DMA=y
CONFIG_PATA_IT8213=y
CONFIG_PATA_IT821X=y
CONFIG_PATA_JMICRON=y
CONFIG_PATA_MARVELL=y
CONFIG_PATA_NETCELL=y
CONFIG_PATA_NINJA32=y
CONFIG_PATA_NS87415=y
CONFIG_PATA_OLDPIIX=y
CONFIG_PATA_OPTIDMA=y
CONFIG_PATA_PDC2027X=y
CONFIG_PATA_PDC_OLD=y
CONFIG_PATA_RADISYS=y
CONFIG_PATA_RDC=y
CONFIG_PATA_SC1200=y
CONFIG_PATA_SCH=y
CONFIG_PATA_SERVERWORKS=y
CONFIG_PATA_SIL680=y
CONFIG_PATA_SIS=y
CONFIG_PATA_TOSHIBA=y
CONFIG_PATA_TRIFLEX=y
CONFIG_PATA_VIA=y
CONFIG_PATA_WINBOND=y

#
# PIO-only SFF controllers
#
CONFIG_PATA_CMD640_PCI=y
CONFIG_PATA_MPIIX=y
CONFIG_PATA_NS87410=y
CONFIG_PATA_OPTI=y
CONFIG_PATA_PCMCIA=y
CONFIG_PATA_PLATFORM=y
CONFIG_PATA_RZ1000=y

#
# Generic fallback / legacy drivers
#
CONFIG_PATA_ACPI=y
CONFIG_ATA_GENERIC=y
# CONFIG_PATA_LEGACY is not set
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_AUTODETECT=y
CONFIG_MD_LINEAR=y
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID10=y
CONFIG_MD_RAID456=y
CONFIG_MD_MULTIPATH=y
CONFIG_MD_FAULTY=y
CONFIG_BCACHE=y
CONFIG_BCACHE_DEBUG=y
CONFIG_BCACHE_CLOSURES_DEBUG=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_DEBUG=y
CONFIG_DM_BUFIO=y
CONFIG_DM_BIO_PRISON=y
CONFIG_DM_PERSISTENT_DATA=y
CONFIG_DM_CRYPT=y
CONFIG_DM_SNAPSHOT=y
CONFIG_DM_THIN_PROVISIONING=y
CONFIG_DM_DEBUG_BLOCK_STACK_TRACING=y
CONFIG_DM_CACHE=y
CONFIG_DM_CACHE_MQ=y
CONFIG_DM_CACHE_CLEANER=y
CONFIG_DM_MIRROR=y
CONFIG_DM_LOG_USERSPACE=y
CONFIG_DM_RAID=y
CONFIG_DM_ZERO=y
CONFIG_DM_MULTIPATH=y
CONFIG_DM_MULTIPATH_QL=y
CONFIG_DM_MULTIPATH_ST=y
CONFIG_DM_DELAY=y
CONFIG_DM_UEVENT=y
CONFIG_DM_FLAKEY=y
CONFIG_DM_VERITY=y
CONFIG_DM_SWITCH=y
CONFIG_TARGET_CORE=y
CONFIG_TCM_IBLOCK=y
CONFIG_TCM_FILEIO=y
CONFIG_TCM_PSCSI=y
CONFIG_LOOPBACK_TARGET=y
CONFIG_TCM_FC=y
CONFIG_ISCSI_TARGET=y
CONFIG_SBP_TARGET=y
CONFIG_FUSION=y
CONFIG_FUSION_SPI=y
CONFIG_FUSION_FC=y
CONFIG_FUSION_SAS=y
CONFIG_FUSION_MAX_SGE=128
CONFIG_FUSION_CTL=y
CONFIG_FUSION_LAN=y
CONFIG_FUSION_LOGGING=y

#
# IEEE 1394 (FireWire) support
#
CONFIG_FIREWIRE=y
CONFIG_FIREWIRE_OHCI=y
CONFIG_FIREWIRE_SBP2=y
CONFIG_FIREWIRE_NET=y
CONFIG_FIREWIRE_NOSY=y
CONFIG_I2O=y
CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
CONFIG_I2O_EXT_ADAPTEC=y
CONFIG_I2O_EXT_ADAPTEC_DMA64=y
CONFIG_I2O_CONFIG=y
CONFIG_I2O_CONFIG_OLD_IOCTL=y
CONFIG_I2O_BUS=y
CONFIG_I2O_BLOCK=y
CONFIG_I2O_SCSI=y
CONFIG_I2O_PROC=y
CONFIG_MACINTOSH_DRIVERS=y
CONFIG_MAC_EMUMOUSEBTN=y
CONFIG_NETDEVICES=y
CONFIG_MII=y
CONFIG_NET_CORE=y
CONFIG_BONDING=y
CONFIG_DUMMY=y
CONFIG_EQUALIZER=y
CONFIG_NET_FC=y
CONFIG_IFB=y
CONFIG_NET_TEAM=y
CONFIG_NET_TEAM_MODE_BROADCAST=y
CONFIG_NET_TEAM_MODE_ROUNDROBIN=y
CONFIG_NET_TEAM_MODE_RANDOM=y
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=y
CONFIG_NET_TEAM_MODE_LOADBALANCE=y
CONFIG_MACVLAN=y
CONFIG_MACVTAP=y
CONFIG_VXLAN=y
CONFIG_NETCONSOLE=y
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NETPOLL_TRAP=y
CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NTB_NETDEV=y
CONFIG_RIONET=y
CONFIG_RIONET_TX_SIZE=128
CONFIG_RIONET_RX_SIZE=128
CONFIG_TUN=y
CONFIG_VETH=y
CONFIG_VIRTIO_NET=y
CONFIG_NLMON=y
CONFIG_SUNGEM_PHY=y
CONFIG_ARCNET=y
CONFIG_ARCNET_1201=y
CONFIG_ARCNET_1051=y
CONFIG_ARCNET_RAW=y
CONFIG_ARCNET_CAP=y
CONFIG_ARCNET_COM90xx=y
CONFIG_ARCNET_COM90xxIO=y
CONFIG_ARCNET_RIM_I=y
CONFIG_ARCNET_COM20020=y
CONFIG_ARCNET_COM20020_PCI=y
CONFIG_ARCNET_COM20020_CS=y
CONFIG_ATM_DRIVERS=y
CONFIG_ATM_DUMMY=y
CONFIG_ATM_TCP=y
CONFIG_ATM_LANAI=y
CONFIG_ATM_ENI=y
CONFIG_ATM_ENI_DEBUG=y
CONFIG_ATM_ENI_TUNE_BURST=y
CONFIG_ATM_ENI_BURST_TX_16W=y
CONFIG_ATM_ENI_BURST_TX_8W=y
CONFIG_ATM_ENI_BURST_TX_4W=y
CONFIG_ATM_ENI_BURST_TX_2W=y
CONFIG_ATM_ENI_BURST_RX_16W=y
CONFIG_ATM_ENI_BURST_RX_8W=y
CONFIG_ATM_ENI_BURST_RX_4W=y
CONFIG_ATM_ENI_BURST_RX_2W=y
CONFIG_ATM_FIRESTREAM=y
CONFIG_ATM_ZATM=y
CONFIG_ATM_ZATM_DEBUG=y
CONFIG_ATM_NICSTAR=y
CONFIG_ATM_NICSTAR_USE_SUNI=y
CONFIG_ATM_NICSTAR_USE_IDT77105=y
CONFIG_ATM_IDT77252=y
CONFIG_ATM_IDT77252_DEBUG=y
CONFIG_ATM_IDT77252_RCV_ALL=y
CONFIG_ATM_IDT77252_USE_SUNI=y
CONFIG_ATM_AMBASSADOR=y
CONFIG_ATM_AMBASSADOR_DEBUG=y
CONFIG_ATM_HORIZON=y
CONFIG_ATM_HORIZON_DEBUG=y
CONFIG_ATM_IA=y
CONFIG_ATM_IA_DEBUG=y
CONFIG_ATM_FORE200E=y
CONFIG_ATM_FORE200E_USE_TASKLET=y
CONFIG_ATM_FORE200E_TX_RETRY=16
CONFIG_ATM_FORE200E_DEBUG=0
CONFIG_ATM_HE=y
CONFIG_ATM_HE_USE_SUNI=y
CONFIG_ATM_SOLOS=y

#
# CAIF transport drivers
#
CONFIG_CAIF_TTY=y
CONFIG_CAIF_SPI_SLAVE=y
CONFIG_CAIF_SPI_SYNC=y
CONFIG_CAIF_HSI=y
CONFIG_CAIF_VIRTIO=y
CONFIG_VHOST_NET=y
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_RING=y
CONFIG_VHOST=y

#
# Distributed Switch Architecture drivers
#
CONFIG_NET_DSA_MV88E6XXX=y
CONFIG_NET_DSA_MV88E6060=y
CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y
CONFIG_NET_DSA_MV88E6131=y
CONFIG_NET_DSA_MV88E6123_61_65=y
CONFIG_ETHERNET=y
CONFIG_MDIO=y
CONFIG_NET_VENDOR_3COM=y
CONFIG_PCMCIA_3C574=y
CONFIG_PCMCIA_3C589=y
CONFIG_VORTEX=y
CONFIG_TYPHOON=y
CONFIG_NET_VENDOR_ADAPTEC=y
CONFIG_ADAPTEC_STARFIRE=y
CONFIG_NET_VENDOR_ALTEON=y
CONFIG_ACENIC=y
CONFIG_ACENIC_OMIT_TIGON_I=y
CONFIG_NET_VENDOR_AMD=y
CONFIG_AMD8111_ETH=y
CONFIG_PCNET32=y
CONFIG_PCMCIA_NMCLAN=y
CONFIG_NET_VENDOR_ARC=y
CONFIG_NET_VENDOR_ATHEROS=y
CONFIG_ATL2=y
CONFIG_ATL1=y
CONFIG_ATL1E=y
CONFIG_ATL1C=y
CONFIG_ALX=y
CONFIG_NET_CADENCE=y
CONFIG_ARM_AT91_ETHER=y
CONFIG_MACB=y
CONFIG_NET_VENDOR_BROADCOM=y
CONFIG_B44=y
CONFIG_B44_PCI_AUTOSELECT=y
CONFIG_B44_PCICORE_AUTOSELECT=y
CONFIG_B44_PCI=y
CONFIG_BNX2=y
CONFIG_CNIC=y
CONFIG_TIGON3=y
CONFIG_BNX2X=y
CONFIG_BNX2X_SRIOV=y
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=y
CONFIG_NET_CALXEDA_XGMAC=y
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T3=y
CONFIG_CHELSIO_T4=y
CONFIG_CHELSIO_T4VF=y
CONFIG_NET_VENDOR_CISCO=y
CONFIG_ENIC=y
CONFIG_DNET=y
CONFIG_NET_VENDOR_DEC=y
CONFIG_NET_TULIP=y
CONFIG_DE2104X=y
CONFIG_DE2104X_DSL=0
CONFIG_TULIP=y
CONFIG_TULIP_MWI=y
CONFIG_TULIP_MMIO=y
CONFIG_TULIP_NAPI=y
CONFIG_TULIP_NAPI_HW_MITIGATION=y
CONFIG_DE4X5=y
CONFIG_WINBOND_840=y
CONFIG_DM9102=y
CONFIG_ULI526X=y
CONFIG_PCMCIA_XIRCOM=y
CONFIG_NET_VENDOR_DLINK=y
CONFIG_DL2K=y
CONFIG_SUNDANCE=y
CONFIG_SUNDANCE_MMIO=y
CONFIG_NET_VENDOR_EMULEX=y
CONFIG_BE2NET=y
CONFIG_NET_VENDOR_EXAR=y
CONFIG_S2IO=y
CONFIG_VXGE=y
CONFIG_VXGE_DEBUG_TRACE_ALL=y
CONFIG_NET_VENDOR_FUJITSU=y
CONFIG_PCMCIA_FMVJ18X=y
CONFIG_NET_VENDOR_HP=y
CONFIG_HP100=y
CONFIG_NET_VENDOR_INTEL=y
CONFIG_E100=y
CONFIG_E1000=y
CONFIG_E1000E=y
CONFIG_IGB=y
CONFIG_IGB_HWMON=y
CONFIG_IGB_DCA=y
CONFIG_IGBVF=y
CONFIG_IXGB=y
CONFIG_IXGBE=y
CONFIG_IXGBE_HWMON=y
CONFIG_IXGBE_DCA=y
CONFIG_IXGBE_DCB=y
CONFIG_IXGBEVF=y
CONFIG_I40E=y
CONFIG_NET_VENDOR_I825XX=y
CONFIG_IP1000=y
CONFIG_JME=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_MVMDIO=y
CONFIG_SKGE=y
CONFIG_SKGE_DEBUG=y
CONFIG_SKGE_GENESIS=y
CONFIG_SKY2=y
CONFIG_SKY2_DEBUG=y
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_MLX4_EN=y
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_CORE=y
CONFIG_MLX4_DEBUG=y
CONFIG_MLX5_CORE=y
CONFIG_NET_VENDOR_MICREL=y
CONFIG_KS8842=y
CONFIG_KS8851=y
CONFIG_KS8851_MLL=y
CONFIG_KSZ884X_PCI=y
CONFIG_NET_VENDOR_MICROCHIP=y
CONFIG_ENC28J60=y
CONFIG_ENC28J60_WRITEVERIFY=y
CONFIG_NET_VENDOR_MYRI=y
CONFIG_MYRI10GE=y
CONFIG_MYRI10GE_DCA=y
CONFIG_FEALNX=y
CONFIG_NET_VENDOR_NATSEMI=y
CONFIG_NATSEMI=y
CONFIG_NS83820=y
CONFIG_NET_VENDOR_8390=y
CONFIG_PCMCIA_AXNET=y
CONFIG_NE2K_PCI=y
CONFIG_PCMCIA_PCNET=y
CONFIG_NET_VENDOR_NVIDIA=y
CONFIG_FORCEDETH=y
CONFIG_NET_VENDOR_OKI=y
CONFIG_PCH_GBE=y
CONFIG_ETHOC=y
CONFIG_NET_PACKET_ENGINE=y
CONFIG_HAMACHI=y
CONFIG_YELLOWFIN=y
CONFIG_NET_VENDOR_QLOGIC=y
CONFIG_QLA3XXX=y
CONFIG_QLCNIC=y
CONFIG_QLCNIC_SRIOV=y
CONFIG_QLCNIC_DCB=y
CONFIG_QLGE=y
CONFIG_NETXEN_NIC=y
CONFIG_NET_VENDOR_REALTEK=y
CONFIG_8139CP=y
CONFIG_8139TOO=y
CONFIG_8139TOO_PIO=y
CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
CONFIG_8139_OLD_RX_RESET=y
CONFIG_R8169=y
CONFIG_SH_ETH=y
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=y
CONFIG_NET_VENDOR_SEEQ=y
CONFIG_NET_VENDOR_SILAN=y
CONFIG_SC92031=y
CONFIG_NET_VENDOR_SIS=y
CONFIG_SIS900=y
CONFIG_SIS190=y
CONFIG_SFC=y
CONFIG_SFC_MTD=y
CONFIG_SFC_MCDI_MON=y
CONFIG_SFC_SRIOV=y
CONFIG_NET_VENDOR_SMSC=y
CONFIG_PCMCIA_SMC91C92=y
CONFIG_EPIC100=y
CONFIG_SMSC911X=y
# CONFIG_SMSC911X_ARCH_HOOKS is not set
CONFIG_SMSC9420=y
CONFIG_NET_VENDOR_STMICRO=y
CONFIG_STMMAC_ETH=y
CONFIG_STMMAC_PLATFORM=y
CONFIG_STMMAC_PCI=y
CONFIG_STMMAC_DEBUG_FS=y
CONFIG_STMMAC_DA=y
CONFIG_NET_VENDOR_SUN=y
CONFIG_HAPPYMEAL=y
CONFIG_SUNGEM=y
CONFIG_CASSINI=y
CONFIG_NIU=y
CONFIG_NET_VENDOR_TEHUTI=y
CONFIG_TEHUTI=y
CONFIG_NET_VENDOR_TI=y
CONFIG_TLAN=y
CONFIG_NET_VENDOR_VIA=y
CONFIG_VIA_RHINE=y
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=y
CONFIG_NET_VENDOR_WIZNET=y
CONFIG_WIZNET_W5100=y
CONFIG_WIZNET_W5300=y
# CONFIG_WIZNET_BUS_DIRECT is not set
# CONFIG_WIZNET_BUS_INDIRECT is not set
CONFIG_WIZNET_BUS_ANY=y
CONFIG_NET_VENDOR_XIRCOM=y
CONFIG_PCMCIA_XIRC2PS=y
CONFIG_FDDI=y
CONFIG_DEFXX=y
CONFIG_DEFXX_MMIO=y
CONFIG_SKFP=y
CONFIG_HIPPI=y
CONFIG_ROADRUNNER=y
CONFIG_ROADRUNNER_LARGE_RINGS=y
CONFIG_NET_SB1000=y
CONFIG_PHYLIB=y

#
# MII PHY device drivers
#
CONFIG_AT803X_PHY=y
CONFIG_AMD_PHY=y
CONFIG_MARVELL_PHY=y
CONFIG_DAVICOM_PHY=y
CONFIG_QSEMI_PHY=y
CONFIG_LXT_PHY=y
CONFIG_CICADA_PHY=y
CONFIG_VITESSE_PHY=y
CONFIG_SMSC_PHY=y
CONFIG_BROADCOM_PHY=y
CONFIG_BCM87XX_PHY=y
CONFIG_ICPLUS_PHY=y
CONFIG_REALTEK_PHY=y
CONFIG_NATIONAL_PHY=y
CONFIG_STE10XP=y
CONFIG_LSI_ET1011C_PHY=y
CONFIG_MICREL_PHY=y
CONFIG_FIXED_PHY=y
CONFIG_MDIO_BITBANG=y
CONFIG_MDIO_GPIO=y
CONFIG_MICREL_KS8995MA=y
CONFIG_PPP=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOATM=y
CONFIG_PPPOE=y
CONFIG_PPTP=y
CONFIG_PPPOL2TP=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_SLIP=y
CONFIG_SLHC=y
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y

#
# USB Network Adapters
#
CONFIG_USB_CATC=y
CONFIG_USB_KAWETH=y
CONFIG_USB_PEGASUS=y
CONFIG_USB_RTL8150=y
CONFIG_USB_RTL8152=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_AX88179_178A=y
CONFIG_USB_NET_CDCETHER=y
CONFIG_USB_NET_CDC_EEM=y
CONFIG_USB_NET_CDC_NCM=y
CONFIG_USB_NET_HUAWEI_CDC_NCM=y
CONFIG_USB_NET_CDC_MBIM=y
CONFIG_USB_NET_DM9601=y
CONFIG_USB_NET_SR9700=y
CONFIG_USB_NET_SMSC75XX=y
CONFIG_USB_NET_SMSC95XX=y
CONFIG_USB_NET_GL620A=y
CONFIG_USB_NET_NET1080=y
CONFIG_USB_NET_PLUSB=y
CONFIG_USB_NET_MCS7830=y
CONFIG_USB_NET_RNDIS_HOST=y
CONFIG_USB_NET_CDC_SUBSET=y
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_KC2190=y
CONFIG_USB_NET_ZAURUS=y
CONFIG_USB_NET_CX82310_ETH=y
CONFIG_USB_NET_KALMIA=y
CONFIG_USB_NET_QMI_WWAN=y
CONFIG_USB_HSO=y
CONFIG_USB_NET_INT51X1=y
CONFIG_USB_CDC_PHONET=y
CONFIG_USB_IPHETH=y
CONFIG_USB_SIERRA_NET=y
CONFIG_USB_VL600=y
CONFIG_WLAN=y
CONFIG_PCMCIA_RAYCS=y
CONFIG_LIBERTAS_THINFIRM=y
CONFIG_LIBERTAS_THINFIRM_DEBUG=y
CONFIG_LIBERTAS_THINFIRM_USB=y
CONFIG_AIRO=y
CONFIG_ATMEL=y
CONFIG_PCI_ATMEL=y
CONFIG_PCMCIA_ATMEL=y
CONFIG_AT76C50X_USB=y
CONFIG_AIRO_CS=y
CONFIG_PCMCIA_WL3501=y
CONFIG_PRISM54=y
CONFIG_USB_ZD1201=y
CONFIG_USB_NET_RNDIS_WLAN=y
CONFIG_RTL8180=y
CONFIG_RTL8187=y
CONFIG_RTL8187_LEDS=y
CONFIG_ADM8211=y
CONFIG_MAC80211_HWSIM=y
CONFIG_MWL8K=y
CONFIG_ATH_COMMON=y
CONFIG_ATH_CARDS=y
CONFIG_ATH_DEBUG=y
CONFIG_ATH_REG_DYNAMIC_USER_REG_HINTS=y
CONFIG_ATH_REG_DYNAMIC_USER_CERT_TESTING=y
CONFIG_ATH5K=y
CONFIG_ATH5K_DEBUG=y
CONFIG_ATH5K_TRACER=y
CONFIG_ATH5K_PCI=y
CONFIG_ATH5K_TEST_CHANNELS=y
CONFIG_ATH9K_HW=y
CONFIG_ATH9K_COMMON=y
CONFIG_ATH9K_DFS_DEBUGFS=y
CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=y
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
CONFIG_ATH9K_DEBUGFS=y
CONFIG_ATH9K_DFS_CERTIFIED=y
CONFIG_ATH9K_TX99=y
CONFIG_ATH9K_WOW=y
CONFIG_ATH9K_LEGACY_RATE_CONTROL=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_HTC=y
CONFIG_ATH9K_HTC_DEBUGFS=y
CONFIG_CARL9170=y
CONFIG_CARL9170_LEDS=y
CONFIG_CARL9170_DEBUGFS=y
CONFIG_CARL9170_WPC=y
CONFIG_CARL9170_HWRNG=y
CONFIG_ATH6KL=y
# CONFIG_ATH6KL_SDIO is not set
# CONFIG_ATH6KL_USB is not set
# CONFIG_ATH6KL_DEBUG is not set
CONFIG_ATH6KL_TRACING=y
CONFIG_ATH6KL_REGDOMAIN=y
CONFIG_AR5523=y
CONFIG_WIL6210=y
CONFIG_WIL6210_ISR_COR=y
CONFIG_WIL6210_TRACING=y
CONFIG_ATH10K=y
CONFIG_ATH10K_PCI=y
CONFIG_ATH10K_DEBUG=y
CONFIG_ATH10K_DEBUGFS=y
CONFIG_ATH10K_TRACING=y
CONFIG_WCN36XX=y
CONFIG_WCN36XX_DEBUGFS=y
CONFIG_B43=y
CONFIG_B43_BCMA=y
CONFIG_B43_SSB=y
CONFIG_B43_PCI_AUTOSELECT=y
CONFIG_B43_PCICORE_AUTOSELECT=y
CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
CONFIG_B43_DEBUG=y
CONFIG_B43LEGACY=y
CONFIG_B43LEGACY_PCI_AUTOSELECT=y
CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
CONFIG_B43LEGACY_LEDS=y
CONFIG_B43LEGACY_HWRNG=y
CONFIG_B43LEGACY_DEBUG=y
CONFIG_B43LEGACY_DMA=y
CONFIG_B43LEGACY_PIO=y
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
# CONFIG_B43LEGACY_DMA_MODE is not set
# CONFIG_B43LEGACY_PIO_MODE is not set
CONFIG_BRCMUTIL=y
CONFIG_BRCMSMAC=y
CONFIG_BRCMFMAC=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
CONFIG_BRCM_TRACING=y
CONFIG_BRCMDBG=y
CONFIG_HOSTAP=y
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
CONFIG_HOSTAP_PLX=y
CONFIG_HOSTAP_PCI=y
CONFIG_HOSTAP_CS=y
CONFIG_IPW2100=y
CONFIG_IPW2100_MONITOR=y
CONFIG_IPW2100_DEBUG=y
CONFIG_IPW2200=y
CONFIG_IPW2200_MONITOR=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPW2200_PROMISCUOUS=y
CONFIG_IPW2200_QOS=y
CONFIG_IPW2200_DEBUG=y
CONFIG_LIBIPW=y
CONFIG_LIBIPW_DEBUG=y
CONFIG_IWLWIFI=y
CONFIG_IWLDVM=y
CONFIG_IWLMVM=y

#
# Debugging Options
#
CONFIG_IWLWIFI_DEBUG=y
CONFIG_IWLWIFI_DEBUGFS=y
CONFIG_IWLWIFI_DEBUG_EXPERIMENTAL_UCODE=y
CONFIG_IWLWIFI_DEVICE_TRACING=y
CONFIG_IWLEGACY=y
CONFIG_IWL4965=y
CONFIG_IWL3945=y

#
# iwl3945 / iwl4965 Debugging Options
#
CONFIG_IWLEGACY_DEBUG=y
CONFIG_IWLEGACY_DEBUGFS=y
CONFIG_LIBERTAS=y
CONFIG_LIBERTAS_USB=y
CONFIG_LIBERTAS_CS=y
CONFIG_LIBERTAS_SDIO=y
CONFIG_LIBERTAS_SPI=y
CONFIG_LIBERTAS_DEBUG=y
CONFIG_LIBERTAS_MESH=y
CONFIG_HERMES=y
CONFIG_HERMES_PRISM=y
CONFIG_HERMES_CACHE_FW_ON_INIT=y
CONFIG_PLX_HERMES=y
CONFIG_TMD_HERMES=y
CONFIG_NORTEL_HERMES=y
CONFIG_PCI_HERMES=y
CONFIG_PCMCIA_HERMES=y
CONFIG_PCMCIA_SPECTRUM=y
CONFIG_ORINOCO_USB=y
CONFIG_P54_COMMON=y
CONFIG_P54_USB=y
CONFIG_P54_PCI=y
CONFIG_P54_SPI=y
CONFIG_P54_SPI_DEFAULT_EEPROM=y
CONFIG_P54_LEDS=y
CONFIG_RT2X00=y
CONFIG_RT2400PCI=y
CONFIG_RT2500PCI=y
CONFIG_RT61PCI=y
CONFIG_RT2800PCI=y
CONFIG_RT2800PCI_RT33XX=y
CONFIG_RT2800PCI_RT35XX=y
CONFIG_RT2800PCI_RT53XX=y
CONFIG_RT2800PCI_RT3290=y
CONFIG_RT2500USB=y
CONFIG_RT73USB=y
CONFIG_RT2800USB=y
CONFIG_RT2800USB_RT33XX=y
CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_RT3573=y
CONFIG_RT2800USB_RT53XX=y
CONFIG_RT2800USB_RT55XX=y
CONFIG_RT2800USB_UNKNOWN=y
CONFIG_RT2800_LIB=y
CONFIG_RT2800_LIB_MMIO=y
CONFIG_RT2X00_LIB_MMIO=y
CONFIG_RT2X00_LIB_PCI=y
CONFIG_RT2X00_LIB_USB=y
CONFIG_RT2X00_LIB=y
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
CONFIG_RT2X00_LIB_DEBUGFS=y
CONFIG_RT2X00_DEBUG=y
CONFIG_RTL_CARDS=y
CONFIG_RTL8192CE=y
CONFIG_RTL8192SE=y
CONFIG_RTL8192DE=y
CONFIG_RTL8723AE=y
CONFIG_RTL8188EE=y
CONFIG_RTL8192CU=y
CONFIG_RTLWIFI=y
CONFIG_RTLWIFI_PCI=y
CONFIG_RTLWIFI_USB=y
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTL8192C_COMMON=y
CONFIG_WL_TI=y
CONFIG_WL1251=y
CONFIG_WL1251_SPI=y
CONFIG_WL1251_SDIO=y
CONFIG_WL12XX=y
CONFIG_WL18XX=y
CONFIG_WLCORE=y
CONFIG_WLCORE_SPI=y
CONFIG_WLCORE_SDIO=y
CONFIG_WILINK_PLATFORM_DATA=y
CONFIG_ZD1211RW=y
CONFIG_ZD1211RW_DEBUG=y
CONFIG_MWIFIEX=y
CONFIG_MWIFIEX_SDIO=y
CONFIG_MWIFIEX_PCIE=y
CONFIG_MWIFIEX_USB=y
CONFIG_CW1200=y
CONFIG_CW1200_WLAN_SDIO=y
CONFIG_CW1200_WLAN_SPI=y

#
# WiMAX Wireless Broadband devices
#
CONFIG_WIMAX_I2400M=y
CONFIG_WIMAX_I2400M_USB=y
CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
CONFIG_WAN=y
CONFIG_LANMEDIA=y
CONFIG_HDLC=y
CONFIG_HDLC_RAW=y
CONFIG_HDLC_RAW_ETH=y
CONFIG_HDLC_CISCO=y
CONFIG_HDLC_FR=y
CONFIG_HDLC_PPP=y
CONFIG_HDLC_X25=y
CONFIG_PCI200SYN=y
CONFIG_WANXL=y
CONFIG_PC300TOO=y
CONFIG_FARSYNC=y
# CONFIG_DSCC4 is not set
CONFIG_DLCI=y
CONFIG_DLCI_MAX=8
CONFIG_LAPBETHER=y
CONFIG_X25_ASY=y
CONFIG_SBNI=y
CONFIG_SBNI_MULTILINE=y
CONFIG_IEEE802154_DRIVERS=y
CONFIG_IEEE802154_FAKEHARD=y
CONFIG_IEEE802154_FAKELB=y
CONFIG_IEEE802154_AT86RF230=y
CONFIG_IEEE802154_MRF24J40=y
CONFIG_XEN_NETDEV_FRONTEND=y
CONFIG_XEN_NETDEV_BACKEND=y
CONFIG_VMXNET3=y
CONFIG_HYPERV_NET=y
CONFIG_ISDN=y
CONFIG_ISDN_I4L=y
CONFIG_ISDN_PPP=y
CONFIG_ISDN_PPP_VJ=y
CONFIG_ISDN_MPP=y
CONFIG_IPPP_FILTER=y
CONFIG_ISDN_PPP_BSDCOMP=y
CONFIG_ISDN_AUDIO=y
CONFIG_ISDN_TTY_FAX=y
CONFIG_ISDN_X25=y

#
# ISDN feature submodules
#
CONFIG_ISDN_DIVERSION=y

#
# ISDN4Linux hardware drivers
#

#
# Passive cards
#
CONFIG_ISDN_DRV_HISAX=y

#
# D-channel protocol features
#
CONFIG_HISAX_EURO=y
CONFIG_DE_AOC=y
# CONFIG_HISAX_NO_SENDCOMPLETE is not set
# CONFIG_HISAX_NO_LLC is not set
# CONFIG_HISAX_NO_KEYPAD is not set
CONFIG_HISAX_1TR6=y
CONFIG_HISAX_NI1=y
CONFIG_HISAX_MAX_CARDS=8

#
# HiSax supported cards
#
CONFIG_HISAX_16_3=y
CONFIG_HISAX_TELESPCI=y
CONFIG_HISAX_S0BOX=y
CONFIG_HISAX_FRITZPCI=y
CONFIG_HISAX_AVM_A1_PCMCIA=y
CONFIG_HISAX_ELSA=y
CONFIG_HISAX_DIEHLDIVA=y
CONFIG_HISAX_SEDLBAUER=y
CONFIG_HISAX_NETJET=y
CONFIG_HISAX_NETJET_U=y
CONFIG_HISAX_NICCY=y
CONFIG_HISAX_BKM_A4T=y
CONFIG_HISAX_SCT_QUADRO=y
CONFIG_HISAX_GAZEL=y
CONFIG_HISAX_HFC_PCI=y
CONFIG_HISAX_W6692=y
CONFIG_HISAX_HFC_SX=y
CONFIG_HISAX_ENTERNOW_PCI=y
CONFIG_HISAX_DEBUG=y

#
# HiSax PCMCIA card service modules
#
CONFIG_HISAX_SEDLBAUER_CS=y
CONFIG_HISAX_ELSA_CS=y
CONFIG_HISAX_AVM_A1_CS=y
CONFIG_HISAX_TELES_CS=y

#
# HiSax sub driver modules
#
CONFIG_HISAX_ST5481=y
CONFIG_HISAX_HFCUSB=y
CONFIG_HISAX_HFC4S8S=y
CONFIG_HISAX_FRITZ_PCIPNP=y

#
# Active cards
#
CONFIG_ISDN_CAPI=y
CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
CONFIG_CAPI_TRACE=y
CONFIG_ISDN_CAPI_MIDDLEWARE=y
CONFIG_ISDN_CAPI_CAPI20=y
CONFIG_ISDN_CAPI_CAPIDRV=y

#
# CAPI hardware drivers
#
CONFIG_CAPI_AVM=y
CONFIG_ISDN_DRV_AVMB1_B1PCI=y
CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=y
CONFIG_ISDN_DRV_AVMB1_AVM_CS=y
CONFIG_ISDN_DRV_AVMB1_T1PCI=y
CONFIG_ISDN_DRV_AVMB1_C4=y
CONFIG_CAPI_EICON=y
CONFIG_ISDN_DIVAS=y
CONFIG_ISDN_DIVAS_BRIPCI=y
CONFIG_ISDN_DIVAS_PRIPCI=y
CONFIG_ISDN_DIVAS_DIVACAPI=y
CONFIG_ISDN_DIVAS_USERIDI=y
# CONFIG_ISDN_DIVAS_MAINT is not set
CONFIG_ISDN_DRV_GIGASET=y
CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_I4L is not set
# CONFIG_GIGASET_DUMMYLL is not set
CONFIG_GIGASET_BASE=y
CONFIG_GIGASET_M105=y
CONFIG_GIGASET_M101=y
CONFIG_GIGASET_DEBUG=y
# CONFIG_HYSDN is not set
CONFIG_MISDN=y
CONFIG_MISDN_DSP=y
CONFIG_MISDN_L1OIP=y

#
# mISDN hardware drivers
#
CONFIG_MISDN_HFCPCI=y
CONFIG_MISDN_HFCMULTI=y
CONFIG_MISDN_HFCUSB=y
CONFIG_MISDN_AVMFRITZ=y
CONFIG_MISDN_SPEEDFAX=y
CONFIG_MISDN_INFINEON=y
CONFIG_MISDN_W6692=y
CONFIG_MISDN_NETJET=y
CONFIG_MISDN_IPAC=y
CONFIG_MISDN_ISAR=y
CONFIG_ISDN_HDLC=y

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_POLLDEV=y
CONFIG_INPUT_SPARSEKMAP=y
CONFIG_INPUT_MATRIXKMAP=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=y
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=y

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ADP5520=y
CONFIG_KEYBOARD_ADP5588=y
CONFIG_KEYBOARD_ADP5589=y
CONFIG_KEYBOARD_ATKBD=y
CONFIG_KEYBOARD_QT1070=y
CONFIG_KEYBOARD_QT2160=y
CONFIG_KEYBOARD_LKKBD=y
CONFIG_KEYBOARD_GPIO=y
CONFIG_KEYBOARD_GPIO_POLLED=y
CONFIG_KEYBOARD_TCA6416=y
CONFIG_KEYBOARD_TCA8418=y
CONFIG_KEYBOARD_MATRIX=y
CONFIG_KEYBOARD_LM8323=y
CONFIG_KEYBOARD_LM8333=y
CONFIG_KEYBOARD_MAX7359=y
CONFIG_KEYBOARD_MCS=y
CONFIG_KEYBOARD_MPR121=y
CONFIG_KEYBOARD_NEWTON=y
CONFIG_KEYBOARD_OPENCORES=y
CONFIG_KEYBOARD_SAMSUNG=y
CONFIG_KEYBOARD_STOWAWAY=y
CONFIG_KEYBOARD_SUNKBD=y
CONFIG_KEYBOARD_STMPE=y
CONFIG_KEYBOARD_TC3589X=y
CONFIG_KEYBOARD_TWL4030=y
CONFIG_KEYBOARD_XTKBD=y
CONFIG_KEYBOARD_CROS_EC=y
CONFIG_INPUT_LEDS=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_CYPRESS=y
CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_MOUSE_PS2_SENTELIC=y
CONFIG_MOUSE_PS2_TOUCHKIT=y
CONFIG_MOUSE_SERIAL=y
CONFIG_MOUSE_APPLETOUCH=y
CONFIG_MOUSE_BCM5974=y
CONFIG_MOUSE_CYAPA=y
CONFIG_MOUSE_VSXXXAA=y
CONFIG_MOUSE_GPIO=y
CONFIG_MOUSE_SYNAPTICS_I2C=y
CONFIG_MOUSE_SYNAPTICS_USB=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=y
CONFIG_JOYSTICK_A3D=y
CONFIG_JOYSTICK_ADI=y
CONFIG_JOYSTICK_COBRA=y
CONFIG_JOYSTICK_GF2K=y
CONFIG_JOYSTICK_GRIP=y
CONFIG_JOYSTICK_GRIP_MP=y
CONFIG_JOYSTICK_GUILLEMOT=y
CONFIG_JOYSTICK_INTERACT=y
CONFIG_JOYSTICK_SIDEWINDER=y
CONFIG_JOYSTICK_TMDC=y
CONFIG_JOYSTICK_IFORCE=y
CONFIG_JOYSTICK_IFORCE_USB=y
CONFIG_JOYSTICK_IFORCE_232=y
CONFIG_JOYSTICK_WARRIOR=y
CONFIG_JOYSTICK_MAGELLAN=y
CONFIG_JOYSTICK_SPACEORB=y
CONFIG_JOYSTICK_SPACEBALL=y
CONFIG_JOYSTICK_STINGER=y
CONFIG_JOYSTICK_TWIDJOY=y
CONFIG_JOYSTICK_ZHENHUA=y
CONFIG_JOYSTICK_AS5011=y
CONFIG_JOYSTICK_JOYDUMP=y
CONFIG_JOYSTICK_XPAD=y
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=y
CONFIG_TABLET_USB_AIPTEK=y
CONFIG_TABLET_USB_GTCO=y
CONFIG_TABLET_USB_HANWANG=y
CONFIG_TABLET_USB_KBTAB=y
CONFIG_TABLET_USB_WACOM=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_88PM860X=y
CONFIG_TOUCHSCREEN_ADS7846=y
CONFIG_TOUCHSCREEN_AD7877=y
CONFIG_TOUCHSCREEN_AD7879=y
CONFIG_TOUCHSCREEN_AD7879_I2C=y
CONFIG_TOUCHSCREEN_AD7879_SPI=y
CONFIG_TOUCHSCREEN_ATMEL_MXT=y
CONFIG_TOUCHSCREEN_AUO_PIXCIR=y
CONFIG_TOUCHSCREEN_BU21013=y
CONFIG_TOUCHSCREEN_CY8CTMG110=y
CONFIG_TOUCHSCREEN_CYTTSP_CORE=y
CONFIG_TOUCHSCREEN_CYTTSP_I2C=y
CONFIG_TOUCHSCREEN_CYTTSP_SPI=y
CONFIG_TOUCHSCREEN_CYTTSP4_CORE=y
CONFIG_TOUCHSCREEN_CYTTSP4_I2C=y
CONFIG_TOUCHSCREEN_CYTTSP4_SPI=y
CONFIG_TOUCHSCREEN_DA9034=y
CONFIG_TOUCHSCREEN_DA9052=y
CONFIG_TOUCHSCREEN_DYNAPRO=y
CONFIG_TOUCHSCREEN_HAMPSHIRE=y
CONFIG_TOUCHSCREEN_EETI=y
CONFIG_TOUCHSCREEN_FUJITSU=y
CONFIG_TOUCHSCREEN_ILI210X=y
CONFIG_TOUCHSCREEN_GUNZE=y
CONFIG_TOUCHSCREEN_ELO=y
CONFIG_TOUCHSCREEN_WACOM_W8001=y
CONFIG_TOUCHSCREEN_WACOM_I2C=y
CONFIG_TOUCHSCREEN_MAX11801=y
CONFIG_TOUCHSCREEN_MCS5000=y
CONFIG_TOUCHSCREEN_MMS114=y
CONFIG_TOUCHSCREEN_MTOUCH=y
CONFIG_TOUCHSCREEN_INEXIO=y
CONFIG_TOUCHSCREEN_MK712=y
CONFIG_TOUCHSCREEN_PENMOUNT=y
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
CONFIG_TOUCHSCREEN_TOUCHRIGHT=y
CONFIG_TOUCHSCREEN_TOUCHWIN=y
CONFIG_TOUCHSCREEN_TI_AM335X_TSC=y
CONFIG_TOUCHSCREEN_PIXCIR=y
CONFIG_TOUCHSCREEN_WM831X=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=y
CONFIG_TOUCHSCREEN_MC13783=y
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
CONFIG_TOUCHSCREEN_USB_3M=y
CONFIG_TOUCHSCREEN_USB_ITM=y
CONFIG_TOUCHSCREEN_USB_ETURBO=y
CONFIG_TOUCHSCREEN_USB_GUNZE=y
CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
CONFIG_TOUCHSCREEN_USB_GOTOP=y
CONFIG_TOUCHSCREEN_USB_JASTEC=y
CONFIG_TOUCHSCREEN_USB_ELO=y
CONFIG_TOUCHSCREEN_USB_E2I=y
CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
CONFIG_TOUCHSCREEN_USB_NEXIO=y
CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
CONFIG_TOUCHSCREEN_TOUCHIT213=y
CONFIG_TOUCHSCREEN_TSC_SERIO=y
CONFIG_TOUCHSCREEN_TSC2005=y
CONFIG_TOUCHSCREEN_TSC2007=y
CONFIG_TOUCHSCREEN_W90X900=y
CONFIG_TOUCHSCREEN_PCAP=y
CONFIG_TOUCHSCREEN_ST1232=y
CONFIG_TOUCHSCREEN_STMPE=y
CONFIG_TOUCHSCREEN_SUR40=y
CONFIG_TOUCHSCREEN_TPS6507X=y
CONFIG_TOUCHSCREEN_ZFORCE=y
CONFIG_INPUT_MISC=y
CONFIG_INPUT_88PM860X_ONKEY=y
CONFIG_INPUT_88PM80X_ONKEY=y
CONFIG_INPUT_AD714X=y
CONFIG_INPUT_AD714X_I2C=y
CONFIG_INPUT_AD714X_SPI=y
CONFIG_INPUT_BMA150=y
CONFIG_INPUT_PCSPKR=y
CONFIG_INPUT_MAX8925_ONKEY=y
CONFIG_INPUT_MC13783_PWRBUTTON=y
CONFIG_INPUT_MMA8450=y
CONFIG_INPUT_MPU3050=y
CONFIG_INPUT_APANEL=y
CONFIG_INPUT_GP2A=y
CONFIG_INPUT_GPIO_TILT_POLLED=y
CONFIG_INPUT_ATLAS_BTNS=y
CONFIG_INPUT_ATI_REMOTE2=y
CONFIG_INPUT_KEYSPAN_REMOTE=y
CONFIG_INPUT_KXTJ9=y
CONFIG_INPUT_KXTJ9_POLLED_MODE=y
CONFIG_INPUT_POWERMATE=y
CONFIG_INPUT_YEALINK=y
CONFIG_INPUT_CM109=y
CONFIG_INPUT_RETU_PWRBUTTON=y
CONFIG_INPUT_TWL4030_PWRBUTTON=y
CONFIG_INPUT_TWL4030_VIBRA=y
CONFIG_INPUT_TWL6040_VIBRA=y
CONFIG_INPUT_UINPUT=y
CONFIG_INPUT_PCF50633_PMU=y
CONFIG_INPUT_PCF8574=y
CONFIG_INPUT_GPIO_ROTARY_ENCODER=y
CONFIG_INPUT_DA9052_ONKEY=y
CONFIG_INPUT_DA9055_ONKEY=y
CONFIG_INPUT_WM831X_ON=y
CONFIG_INPUT_PCAP=y
CONFIG_INPUT_ADXL34X=y
CONFIG_INPUT_ADXL34X_I2C=y
CONFIG_INPUT_ADXL34X_SPI=y
CONFIG_INPUT_IMS_PCU=y
CONFIG_INPUT_CMA3000=y
CONFIG_INPUT_CMA3000_I2C=y
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y
CONFIG_INPUT_IDEAPAD_SLIDEBAR=y

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
CONFIG_SERIO_CT82C710=y
CONFIG_SERIO_PCIPS2=y
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_RAW=y
CONFIG_SERIO_ALTERA_PS2=y
CONFIG_SERIO_PS2MULT=y
CONFIG_SERIO_ARC_PS2=y
CONFIG_HYPERV_KEYBOARD=y
CONFIG_GAMEPORT=y
CONFIG_GAMEPORT_NS558=y
CONFIG_GAMEPORT_L4=y
CONFIG_GAMEPORT_EMU10K1=y
CONFIG_GAMEPORT_FM801=y

#
# Character devices
#
CONFIG_TTY=y
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_VT_CONSOLE_SLEEP=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
CONFIG_UNIX98_PTYS=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_ROCKETPORT=y
CONFIG_CYCLADES=y
CONFIG_CYZ_INTR=y
CONFIG_MOXA_INTELLIO=y
CONFIG_MOXA_SMARTIO=y
CONFIG_SYNCLINK=y
CONFIG_SYNCLINKMP=y
CONFIG_SYNCLINK_GT=y
CONFIG_NOZOMI=y
CONFIG_ISI=y
CONFIG_N_HDLC=y
CONFIG_N_GSM=y
CONFIG_TRACE_ROUTER=y
CONFIG_TRACE_SINK=y
CONFIG_DEVKMEM=y

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_CS=y
CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_DW=y

#
# Non-8250 serial port support
#
CONFIG_SERIAL_MAX3100=y
CONFIG_SERIAL_MAX310X=y
CONFIG_SERIAL_MRST_MAX3110=y
CONFIG_SERIAL_MFD_HSU=y
CONFIG_SERIAL_MFD_HSU_CONSOLE=y
CONFIG_SERIAL_UARTLITE=y
CONFIG_SERIAL_UARTLITE_CONSOLE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_JSM=y
CONFIG_SERIAL_SCCNXP=y
CONFIG_SERIAL_SCCNXP_CONSOLE=y
CONFIG_SERIAL_TIMBERDALE=y
CONFIG_SERIAL_ALTERA_JTAGUART=y
CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE=y
CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS=y
CONFIG_SERIAL_ALTERA_UART=y
CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
CONFIG_SERIAL_ALTERA_UART_CONSOLE=y
CONFIG_SERIAL_IFX6X60=y
CONFIG_SERIAL_PCH_UART=y
CONFIG_SERIAL_PCH_UART_CONSOLE=y
CONFIG_SERIAL_ARC=y
CONFIG_SERIAL_ARC_CONSOLE=y
CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_RP2=y
CONFIG_SERIAL_RP2_NR_UARTS=32
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_TTY_PRINTK=y
CONFIG_HVC_DRIVER=y
CONFIG_HVC_IRQ=y
CONFIG_HVC_XEN=y
CONFIG_HVC_XEN_FRONTEND=y
CONFIG_VIRTIO_CONSOLE=y
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_TIMERIOMEM=y
CONFIG_HW_RANDOM_INTEL=y
CONFIG_HW_RANDOM_AMD=y
CONFIG_HW_RANDOM_ATMEL=y
CONFIG_HW_RANDOM_VIA=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_HW_RANDOM_EXYNOS=y
CONFIG_HW_RANDOM_TPM=y
CONFIG_NVRAM=y
CONFIG_R3964=y
CONFIG_APPLICOM=y

#
# PCMCIA character devices
#
CONFIG_SYNCLINK_CS=y
CONFIG_CARDMAN_4000=y
CONFIG_CARDMAN_4040=y
CONFIG_IPWIRELESS=y
CONFIG_MWAVE=y
CONFIG_RAW_DRIVER=y
CONFIG_MAX_RAW_DEVS=256
CONFIG_HPET=y
CONFIG_HPET_MMAP=y
CONFIG_HPET_MMAP_DEFAULT=y
CONFIG_HANGCHECK_TIMER=y
CONFIG_UV_MMTIMER=y
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS=y
CONFIG_TCG_TIS_I2C_ATMEL=y
CONFIG_TCG_TIS_I2C_INFINEON=y
CONFIG_TCG_TIS_I2C_NUVOTON=y
CONFIG_TCG_NSC=y
CONFIG_TCG_ATMEL=y
CONFIG_TCG_INFINEON=y
CONFIG_TCG_ST33_I2C=y
CONFIG_TCG_XEN=y
CONFIG_TELCLOCK=y
CONFIG_DEVPORT=y
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y

#
# Multiplexer I2C Chip support
#
CONFIG_I2C_MUX_GPIO=y
CONFIG_I2C_MUX_PCA9541=y
CONFIG_I2C_MUX_PCA954x=y
CONFIG_I2C_MUX_PINCTRL=y
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=y
CONFIG_I2C_ALGOBIT=y
CONFIG_I2C_ALGOPCA=y

#
# I2C Hardware Bus support
#

#
# PC SMBus host controller drivers
#
CONFIG_I2C_ALI1535=y
CONFIG_I2C_ALI1563=y
CONFIG_I2C_ALI15X3=y
CONFIG_I2C_AMD756=y
CONFIG_I2C_AMD756_S4882=y
CONFIG_I2C_AMD8111=y
CONFIG_I2C_I801=y
CONFIG_I2C_ISCH=y
CONFIG_I2C_ISMT=y
CONFIG_I2C_PIIX4=y
CONFIG_I2C_NFORCE2=y
CONFIG_I2C_NFORCE2_S4985=y
CONFIG_I2C_SIS5595=y
CONFIG_I2C_SIS630=y
CONFIG_I2C_SIS96X=y
CONFIG_I2C_VIA=y
CONFIG_I2C_VIAPRO=y

#
# ACPI drivers
#
CONFIG_I2C_SCMI=y

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
CONFIG_I2C_CBUS_GPIO=y
CONFIG_I2C_DESIGNWARE_CORE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_I2C_DESIGNWARE_PCI=y
CONFIG_I2C_EG20T=y
CONFIG_I2C_GPIO=y
CONFIG_I2C_KEMPLD=y
CONFIG_I2C_OCORES=y
CONFIG_I2C_PCA_PLATFORM=y
# CONFIG_I2C_PXA_PCI is not set
CONFIG_I2C_SIMTEC=y
CONFIG_I2C_XILINX=y

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_DIOLAN_U2C=y
CONFIG_I2C_PARPORT_LIGHT=y
CONFIG_I2C_TAOS_EVM=y
CONFIG_I2C_TINY_USB=y
CONFIG_I2C_VIPERBOARD=y

#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_STUB is not set
CONFIG_I2C_DEBUG_CORE=y
CONFIG_I2C_DEBUG_ALGO=y
CONFIG_I2C_DEBUG_BUS=y
CONFIG_SPI=y
CONFIG_SPI_DEBUG=y
CONFIG_SPI_MASTER=y

#
# SPI Master Controller Drivers
#
CONFIG_SPI_ALTERA=y
CONFIG_SPI_BITBANG=y
CONFIG_SPI_GPIO=y
CONFIG_SPI_OC_TINY=y
CONFIG_SPI_PXA2XX_DMA=y
CONFIG_SPI_PXA2XX=y
CONFIG_SPI_PXA2XX_PCI=y
CONFIG_SPI_SC18IS602=y
CONFIG_SPI_TOPCLIFF_PCH=y
CONFIG_SPI_XCOMM=y
CONFIG_SPI_XILINX=y
CONFIG_SPI_DESIGNWARE=y
CONFIG_SPI_DW_PCI=y
CONFIG_SPI_DW_MID_DMA=y
CONFIG_SPI_DW_MMIO=y

#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=y
CONFIG_SPI_TLE62X0=y
CONFIG_HSI=y
CONFIG_HSI_BOARDINFO=y

#
# HSI clients
#
CONFIG_HSI_CHAR=y

#
# PPS support
#
CONFIG_PPS=y
CONFIG_PPS_DEBUG=y

#
# PPS clients support
#
CONFIG_PPS_CLIENT_KTIMER=y
CONFIG_PPS_CLIENT_LDISC=y
CONFIG_PPS_CLIENT_GPIO=y

#
# PPS generators support
#

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK=y
CONFIG_DP83640_PHY=y
CONFIG_PTP_1588_CLOCK_PCH=y
CONFIG_PINCTRL=y

#
# Pin controllers
#
CONFIG_PINMUX=y
CONFIG_PINCONF=y
CONFIG_DEBUG_PINCTRL=y
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_DEVRES=y
CONFIG_GPIO_ACPI=y
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_DA9052=y
CONFIG_GPIO_DA9055=y
CONFIG_GPIO_MAX730X=y

#
# Memory mapped GPIO drivers:
#
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_GPIO_IT8761E=y
CONFIG_GPIO_F7188X=y
CONFIG_GPIO_TS5500=y
CONFIG_GPIO_SCH=y
CONFIG_GPIO_ICH=y
CONFIG_GPIO_VX855=y
CONFIG_GPIO_LYNXPOINT=y

#
# I2C GPIO expanders:
#
CONFIG_GPIO_ARIZONA=y
CONFIG_GPIO_MAX7300=y
CONFIG_GPIO_MAX732X=y
CONFIG_GPIO_MAX732X_IRQ=y
CONFIG_GPIO_PCA953X=y
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCF857X=y
CONFIG_GPIO_RC5T583=y
CONFIG_GPIO_SX150X=y
CONFIG_GPIO_STMPE=y
CONFIG_GPIO_TC3589X=y
CONFIG_GPIO_TPS65912=y
CONFIG_GPIO_TWL4030=y
CONFIG_GPIO_TWL6040=y
CONFIG_GPIO_WM831X=y
CONFIG_GPIO_WM8350=y
CONFIG_GPIO_WM8994=y
CONFIG_GPIO_ADP5520=y
CONFIG_GPIO_ADP5588=y
CONFIG_GPIO_ADP5588_IRQ=y

#
# PCI GPIO expanders:
#
CONFIG_GPIO_CS5535=y
CONFIG_GPIO_AMD8111=y
CONFIG_GPIO_INTEL_MID=y
CONFIG_GPIO_PCH=y
CONFIG_GPIO_ML_IOH=y
CONFIG_GPIO_TIMBERDALE=y
CONFIG_GPIO_RDC321X=y

#
# SPI GPIO expanders:
#
CONFIG_GPIO_MAX7301=y
CONFIG_GPIO_MCP23S08=y
CONFIG_GPIO_MC33880=y
CONFIG_GPIO_74X164=y

#
# AC97 GPIO expanders:
#

#
# LPC GPIO expanders:
#
CONFIG_GPIO_KEMPLD=y

#
# MODULbus GPIO expanders:
#
CONFIG_GPIO_JANZ_TTL=y
CONFIG_GPIO_PALMAS=y
CONFIG_GPIO_TPS6586X=y
CONFIG_GPIO_TPS65910=y

#
# USB GPIO expanders:
#
CONFIG_GPIO_VIPERBOARD=y
CONFIG_W1=y
CONFIG_W1_CON=y

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_MATROX=y
CONFIG_W1_MASTER_DS2490=y
CONFIG_W1_MASTER_DS2482=y
CONFIG_W1_MASTER_DS1WM=y
CONFIG_W1_MASTER_GPIO=y

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=y
CONFIG_W1_SLAVE_SMEM=y
CONFIG_W1_SLAVE_DS2408=y
CONFIG_W1_SLAVE_DS2408_READBACK=y
CONFIG_W1_SLAVE_DS2413=y
CONFIG_W1_SLAVE_DS2423=y
CONFIG_W1_SLAVE_DS2431=y
CONFIG_W1_SLAVE_DS2433=y
CONFIG_W1_SLAVE_DS2433_CRC=y
CONFIG_W1_SLAVE_DS2760=y
CONFIG_W1_SLAVE_DS2780=y
CONFIG_W1_SLAVE_DS2781=y
CONFIG_W1_SLAVE_DS28E04=y
CONFIG_W1_SLAVE_BQ27000=y
CONFIG_POWER_SUPPLY=y
CONFIG_POWER_SUPPLY_DEBUG=y
CONFIG_PDA_POWER=y
CONFIG_GENERIC_ADC_BATTERY=y
CONFIG_MAX8925_POWER=y
CONFIG_WM831X_BACKUP=y
CONFIG_WM831X_POWER=y
CONFIG_WM8350_POWER=y
CONFIG_TEST_POWER=y
CONFIG_BATTERY_88PM860X=y
CONFIG_BATTERY_DS2760=y
CONFIG_BATTERY_DS2780=y
CONFIG_BATTERY_DS2781=y
CONFIG_BATTERY_DS2782=y
CONFIG_BATTERY_SBS=y
CONFIG_BATTERY_BQ27x00=y
CONFIG_BATTERY_BQ27X00_I2C=y
CONFIG_BATTERY_BQ27X00_PLATFORM=y
CONFIG_BATTERY_DA9030=y
CONFIG_BATTERY_DA9052=y
CONFIG_BATTERY_MAX17040=y
CONFIG_BATTERY_MAX17042=y
CONFIG_BATTERY_TWL4030_MADC=y
CONFIG_CHARGER_88PM860X=y
CONFIG_CHARGER_PCF50633=y
CONFIG_BATTERY_RX51=y
CONFIG_CHARGER_ISP1704=y
CONFIG_CHARGER_MAX8903=y
CONFIG_CHARGER_TWL4030=y
CONFIG_CHARGER_LP8727=y
CONFIG_CHARGER_LP8788=y
CONFIG_CHARGER_GPIO=y
CONFIG_CHARGER_MANAGER=y
# CONFIG_CHARGER_MAX8997 is not set
# CONFIG_CHARGER_MAX8998 is not set
CONFIG_CHARGER_BQ2415X=y
CONFIG_CHARGER_BQ24190=y
CONFIG_CHARGER_BQ24735=y
CONFIG_CHARGER_SMB347=y
CONFIG_CHARGER_TPS65090=y
CONFIG_POWER_RESET=y
CONFIG_POWER_AVS=y
CONFIG_HWMON=y
CONFIG_HWMON_VID=y
CONFIG_HWMON_DEBUG_CHIP=y

#
# Native drivers
#
CONFIG_SENSORS_ABITUGURU=y
CONFIG_SENSORS_ABITUGURU3=y
CONFIG_SENSORS_AD7314=y
CONFIG_SENSORS_AD7414=y
CONFIG_SENSORS_AD7418=y
CONFIG_SENSORS_ADCXX=y
CONFIG_SENSORS_ADM1021=y
CONFIG_SENSORS_ADM1025=y
CONFIG_SENSORS_ADM1026=y
CONFIG_SENSORS_ADM1029=y
CONFIG_SENSORS_ADM1031=y
CONFIG_SENSORS_ADM9240=y
CONFIG_SENSORS_ADT7X10=y
CONFIG_SENSORS_ADT7310=y
CONFIG_SENSORS_ADT7410=y
CONFIG_SENSORS_ADT7411=y
CONFIG_SENSORS_ADT7462=y
CONFIG_SENSORS_ADT7470=y
CONFIG_SENSORS_ADT7475=y
CONFIG_SENSORS_ASC7621=y
CONFIG_SENSORS_K8TEMP=y
CONFIG_SENSORS_K10TEMP=y
CONFIG_SENSORS_FAM15H_POWER=y
CONFIG_SENSORS_ASB100=y
CONFIG_SENSORS_ATXP1=y
CONFIG_SENSORS_DS620=y
CONFIG_SENSORS_DS1621=y
CONFIG_SENSORS_DA9052_ADC=y
CONFIG_SENSORS_DA9055=y
CONFIG_SENSORS_I5K_AMB=y
CONFIG_SENSORS_F71805F=y
CONFIG_SENSORS_F71882FG=y
CONFIG_SENSORS_F75375S=y
CONFIG_SENSORS_FSCHMD=y
CONFIG_SENSORS_G760A=y
# CONFIG_SENSORS_G762 is not set
CONFIG_SENSORS_GL518SM=y
CONFIG_SENSORS_GL520SM=y
CONFIG_SENSORS_GPIO_FAN=y
CONFIG_SENSORS_HIH6130=y
CONFIG_SENSORS_HTU21=y
CONFIG_SENSORS_CORETEMP=y
CONFIG_SENSORS_IIO_HWMON=y
CONFIG_SENSORS_IT87=y
CONFIG_SENSORS_JC42=y
CONFIG_SENSORS_LINEAGE=y
CONFIG_SENSORS_LM63=y
CONFIG_SENSORS_LM70=y
CONFIG_SENSORS_LM73=y
CONFIG_SENSORS_LM75=y
CONFIG_SENSORS_LM77=y
CONFIG_SENSORS_LM78=y
CONFIG_SENSORS_LM80=y
CONFIG_SENSORS_LM83=y
CONFIG_SENSORS_LM85=y
CONFIG_SENSORS_LM87=y
CONFIG_SENSORS_LM90=y
CONFIG_SENSORS_LM92=y
CONFIG_SENSORS_LM93=y
CONFIG_SENSORS_LTC4151=y
CONFIG_SENSORS_LTC4215=y
CONFIG_SENSORS_LTC4245=y
CONFIG_SENSORS_LTC4261=y
CONFIG_SENSORS_LM95234=y
CONFIG_SENSORS_LM95241=y
CONFIG_SENSORS_LM95245=y
CONFIG_SENSORS_MAX1111=y
CONFIG_SENSORS_MAX16065=y
CONFIG_SENSORS_MAX1619=y
CONFIG_SENSORS_MAX1668=y
CONFIG_SENSORS_MAX197=y
CONFIG_SENSORS_MAX6639=y
CONFIG_SENSORS_MAX6642=y
CONFIG_SENSORS_MAX6650=y
CONFIG_SENSORS_MAX6697=y
CONFIG_SENSORS_MCP3021=y
CONFIG_SENSORS_NCT6775=y
CONFIG_SENSORS_PC87360=y
CONFIG_SENSORS_PC87427=y
CONFIG_SENSORS_PCF8591=y
CONFIG_PMBUS=y
CONFIG_SENSORS_PMBUS=y
CONFIG_SENSORS_ADM1275=y
CONFIG_SENSORS_LM25066=y
CONFIG_SENSORS_LTC2978=y
CONFIG_SENSORS_MAX16064=y
CONFIG_SENSORS_MAX34440=y
CONFIG_SENSORS_MAX8688=y
CONFIG_SENSORS_UCD9000=y
CONFIG_SENSORS_UCD9200=y
CONFIG_SENSORS_ZL6100=y
CONFIG_SENSORS_SHT15=y
CONFIG_SENSORS_SHT21=y
CONFIG_SENSORS_SIS5595=y
CONFIG_SENSORS_SMM665=y
CONFIG_SENSORS_DME1737=y
CONFIG_SENSORS_EMC1403=y
CONFIG_SENSORS_EMC2103=y
CONFIG_SENSORS_EMC6W201=y
CONFIG_SENSORS_SMSC47M1=y
CONFIG_SENSORS_SMSC47M192=y
CONFIG_SENSORS_SMSC47B397=y
CONFIG_SENSORS_SCH56XX_COMMON=y
CONFIG_SENSORS_SCH5627=y
CONFIG_SENSORS_SCH5636=y
CONFIG_SENSORS_ADS1015=y
CONFIG_SENSORS_ADS7828=y
CONFIG_SENSORS_ADS7871=y
CONFIG_SENSORS_AMC6821=y
CONFIG_SENSORS_INA209=y
CONFIG_SENSORS_INA2XX=y
CONFIG_SENSORS_THMC50=y
CONFIG_SENSORS_TMP102=y
CONFIG_SENSORS_TMP401=y
CONFIG_SENSORS_TMP421=y
CONFIG_SENSORS_TWL4030_MADC=y
CONFIG_SENSORS_VIA_CPUTEMP=y
CONFIG_SENSORS_VIA686A=y
CONFIG_SENSORS_VT1211=y
CONFIG_SENSORS_VT8231=y
CONFIG_SENSORS_W83781D=y
CONFIG_SENSORS_W83791D=y
CONFIG_SENSORS_W83792D=y
CONFIG_SENSORS_W83793=y
CONFIG_SENSORS_W83795=y
CONFIG_SENSORS_W83795_FANCTRL=y
CONFIG_SENSORS_W83L785TS=y
CONFIG_SENSORS_W83L786NG=y
CONFIG_SENSORS_W83627HF=y
CONFIG_SENSORS_W83627EHF=y
CONFIG_SENSORS_WM831X=y
CONFIG_SENSORS_WM8350=y
CONFIG_SENSORS_APPLESMC=y
CONFIG_SENSORS_MC13783_ADC=y

#
# ACPI drivers
#
CONFIG_SENSORS_ACPI_POWER=y
CONFIG_SENSORS_ATK0110=y
CONFIG_THERMAL=y
CONFIG_THERMAL_HWMON=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
CONFIG_THERMAL_GOV_FAIR_SHARE=y
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_CPU_THERMAL=y
CONFIG_THERMAL_EMULATION=y
CONFIG_INTEL_POWERCLAMP=y
CONFIG_X86_PKG_TEMP_THERMAL=y

#
# Texas Instruments thermal drivers
#
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_WATCHDOG_NOWAYOUT=y

#
# Watchdog Device Drivers
#
# CONFIG_SOFT_WATCHDOG is not set
# CONFIG_DA9052_WATCHDOG is not set
# CONFIG_DA9055_WATCHDOG is not set
# CONFIG_WM831X_WATCHDOG is not set
# CONFIG_WM8350_WATCHDOG is not set
# CONFIG_TWL4030_WATCHDOG is not set
# CONFIG_RETU_WATCHDOG is not set
# CONFIG_ACQUIRE_WDT is not set
# CONFIG_ADVANTECH_WDT is not set
# CONFIG_ALIM1535_WDT is not set
# CONFIG_ALIM7101_WDT is not set
# CONFIG_F71808E_WDT is not set
# CONFIG_SP5100_TCO is not set
# CONFIG_GEODE_WDT is not set
# CONFIG_SC520_WDT is not set
# CONFIG_SBC_FITPC2_WATCHDOG is not set
# CONFIG_EUROTECH_WDT is not set
# CONFIG_IB700_WDT is not set
# CONFIG_IBMASR is not set
# CONFIG_WAFER_WDT is not set
# CONFIG_I6300ESB_WDT is not set
# CONFIG_IE6XX_WDT is not set
# CONFIG_ITCO_WDT is not set
# CONFIG_IT8712F_WDT is not set
# CONFIG_IT87_WDT is not set
# CONFIG_HP_WATCHDOG is not set
CONFIG_KEMPLD_WDT=y
# CONFIG_SC1200_WDT is not set
# CONFIG_PC87413_WDT is not set
# CONFIG_NV_TCO is not set
# CONFIG_60XX_WDT is not set
# CONFIG_SBC8360_WDT is not set
# CONFIG_CPU5_WDT is not set
# CONFIG_SMSC_SCH311X_WDT is not set
# CONFIG_SMSC37B787_WDT is not set
# CONFIG_VIA_WDT is not set
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83697HF_WDT is not set
# CONFIG_W83697UG_WDT is not set
# CONFIG_W83877F_WDT is not set
# CONFIG_W83977F_WDT is not set
# CONFIG_MACHZ_WDT is not set
# CONFIG_SBC_EPX_C3_WATCHDOG is not set
CONFIG_MEN_A21_WDT=y
# CONFIG_XEN_WDT is not set

#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not set

#
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
CONFIG_SSB_POSSIBLE=y

#
# Sonics Silicon Backplane
#
CONFIG_SSB=y
CONFIG_SSB_SPROM=y
CONFIG_SSB_BLOCKIO=y
CONFIG_SSB_PCIHOST_POSSIBLE=y
CONFIG_SSB_PCIHOST=y
CONFIG_SSB_B43_PCI_BRIDGE=y
CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
CONFIG_SSB_PCMCIAHOST=y
CONFIG_SSB_SDIOHOST_POSSIBLE=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSB_SILENT is not set
CONFIG_SSB_DEBUG=y
CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
CONFIG_SSB_DRIVER_PCICORE=y
CONFIG_SSB_DRIVER_GPIO=y
CONFIG_BCMA_POSSIBLE=y

#
# Broadcom specific AMBA
#
CONFIG_BCMA=y
CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
CONFIG_BCMA_HOST_PCI=y
CONFIG_BCMA_HOST_SOC=y
CONFIG_BCMA_DRIVER_GMAC_CMN=y
CONFIG_BCMA_DRIVER_GPIO=y
CONFIG_BCMA_DEBUG=y

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
CONFIG_MFD_CS5535=y
CONFIG_MFD_AS3711=y
CONFIG_PMIC_ADP5520=y
CONFIG_MFD_AAT2870_CORE=y
CONFIG_MFD_CROS_EC=y
CONFIG_MFD_CROS_EC_I2C=y
CONFIG_MFD_CROS_EC_SPI=y
CONFIG_PMIC_DA903X=y
CONFIG_PMIC_DA9052=y
CONFIG_MFD_DA9052_SPI=y
CONFIG_MFD_DA9052_I2C=y
CONFIG_MFD_DA9055=y
CONFIG_MFD_DA9063=y
CONFIG_MFD_MC13783=y
CONFIG_MFD_MC13XXX=y
CONFIG_MFD_MC13XXX_SPI=y
CONFIG_MFD_MC13XXX_I2C=y
CONFIG_HTC_PASIC3=y
CONFIG_HTC_I2CPLD=y
CONFIG_LPC_ICH=y
CONFIG_LPC_SCH=y
CONFIG_MFD_JANZ_CMODIO=y
CONFIG_MFD_KEMPLD=y
CONFIG_MFD_88PM800=y
CONFIG_MFD_88PM805=y
CONFIG_MFD_88PM860X=y
CONFIG_MFD_MAX14577=y
CONFIG_MFD_MAX77686=y
CONFIG_MFD_MAX77693=y
CONFIG_MFD_MAX8907=y
CONFIG_MFD_MAX8925=y
CONFIG_MFD_MAX8997=y
CONFIG_MFD_MAX8998=y
CONFIG_EZX_PCAP=y
CONFIG_MFD_VIPERBOARD=y
CONFIG_MFD_RETU=y
CONFIG_MFD_PCF50633=y
CONFIG_PCF50633_ADC=y
CONFIG_PCF50633_GPIO=y
CONFIG_MFD_RDC321X=y
CONFIG_MFD_RTSX_PCI=y
CONFIG_MFD_RC5T583=y
CONFIG_MFD_SEC_CORE=y
CONFIG_MFD_SI476X_CORE=y
CONFIG_MFD_SM501=y
CONFIG_MFD_SM501_GPIO=y
CONFIG_MFD_SMSC=y
CONFIG_ABX500_CORE=y
CONFIG_AB3100_CORE=y
CONFIG_AB3100_OTP=y
CONFIG_MFD_STMPE=y

#
# STMicroelectronics STMPE Interface Drivers
#
CONFIG_STMPE_I2C=y
CONFIG_STMPE_SPI=y
CONFIG_MFD_SYSCON=y
CONFIG_MFD_TI_AM335X_TSCADC=y
CONFIG_MFD_LP8788=y
CONFIG_MFD_PALMAS=y
CONFIG_TPS6105X=y
# CONFIG_TPS65010 is not set
CONFIG_TPS6507X=y
CONFIG_MFD_TPS65090=y
CONFIG_MFD_TPS65217=y
CONFIG_MFD_TPS6586X=y
CONFIG_MFD_TPS65910=y
CONFIG_MFD_TPS65912=y
CONFIG_MFD_TPS65912_I2C=y
CONFIG_MFD_TPS65912_SPI=y
CONFIG_MFD_TPS80031=y
CONFIG_TWL4030_CORE=y
CONFIG_TWL4030_MADC=y
CONFIG_MFD_TWL4030_AUDIO=y
CONFIG_TWL6040_CORE=y
CONFIG_MFD_WL1273_CORE=y
CONFIG_MFD_LM3533=y
CONFIG_MFD_TIMBERDALE=y
CONFIG_MFD_TC3589X=y
# CONFIG_MFD_TMIO is not set
CONFIG_MFD_VX855=y
CONFIG_MFD_ARIZONA=y
CONFIG_MFD_ARIZONA_I2C=y
CONFIG_MFD_ARIZONA_SPI=y
CONFIG_MFD_WM5102=y
CONFIG_MFD_WM5110=y
CONFIG_MFD_WM8997=y
CONFIG_MFD_WM8400=y
CONFIG_MFD_WM831X=y
CONFIG_MFD_WM831X_I2C=y
CONFIG_MFD_WM831X_SPI=y
CONFIG_MFD_WM8350=y
CONFIG_MFD_WM8350_I2C=y
CONFIG_MFD_WM8994=y
CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
CONFIG_REGULATOR_USERSPACE_CONSUMER=y
CONFIG_REGULATOR_88PM800=y
CONFIG_REGULATOR_88PM8607=y
CONFIG_REGULATOR_AD5398=y
CONFIG_REGULATOR_ANATOP=y
CONFIG_REGULATOR_AAT2870=y
CONFIG_REGULATOR_AB3100=y
CONFIG_REGULATOR_AS3711=y
CONFIG_REGULATOR_DA903X=y
CONFIG_REGULATOR_DA9052=y
CONFIG_REGULATOR_DA9055=y
CONFIG_REGULATOR_DA9063=y
CONFIG_REGULATOR_DA9210=y
CONFIG_REGULATOR_FAN53555=y
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_ISL6271A=y
CONFIG_REGULATOR_LP3971=y
CONFIG_REGULATOR_LP3972=y
CONFIG_REGULATOR_LP872X=y
CONFIG_REGULATOR_LP8755=y
CONFIG_REGULATOR_LP8788=y
CONFIG_REGULATOR_MAX1586=y
CONFIG_REGULATOR_MAX8649=y
CONFIG_REGULATOR_MAX8660=y
CONFIG_REGULATOR_MAX8907=y
CONFIG_REGULATOR_MAX8925=y
CONFIG_REGULATOR_MAX8952=y
CONFIG_REGULATOR_MAX8973=y
CONFIG_REGULATOR_MAX8997=y
CONFIG_REGULATOR_MAX8998=y
CONFIG_REGULATOR_MAX77686=y
CONFIG_REGULATOR_MAX77693=y
CONFIG_REGULATOR_MC13XXX_CORE=y
CONFIG_REGULATOR_MC13783=y
CONFIG_REGULATOR_MC13892=y
CONFIG_REGULATOR_PALMAS=y
CONFIG_REGULATOR_PCAP=y
# CONFIG_REGULATOR_PCF50633 is not set
CONFIG_REGULATOR_PFUZE100=y
CONFIG_REGULATOR_RC5T583=y
CONFIG_REGULATOR_S2MPS11=y
CONFIG_REGULATOR_S5M8767=y
CONFIG_REGULATOR_TPS51632=y
CONFIG_REGULATOR_TPS6105X=y
CONFIG_REGULATOR_TPS62360=y
CONFIG_REGULATOR_TPS65023=y
CONFIG_REGULATOR_TPS6507X=y
CONFIG_REGULATOR_TPS65090=y
CONFIG_REGULATOR_TPS65217=y
CONFIG_REGULATOR_TPS6524X=y
CONFIG_REGULATOR_TPS6586X=y
CONFIG_REGULATOR_TPS65910=y
CONFIG_REGULATOR_TPS65912=y
CONFIG_REGULATOR_TPS80031=y
CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_WM831X=y
CONFIG_REGULATOR_WM8350=y
CONFIG_REGULATOR_WM8400=y
CONFIG_REGULATOR_WM8994=y
CONFIG_MEDIA_SUPPORT=y

#
# Multimedia core support
#
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEO_ADV_DEBUG=y
CONFIG_VIDEO_FIXED_MINOR_RANGES=y
CONFIG_VIDEO_TUNER=y
CONFIG_V4L2_MEM2MEM_DEV=y
CONFIG_VIDEOBUF_GEN=y
CONFIG_VIDEOBUF_DMA_SG=y
CONFIG_VIDEOBUF_VMALLOC=y
CONFIG_VIDEOBUF_DMA_CONTIG=y
CONFIG_VIDEOBUF_DVB=y
CONFIG_VIDEOBUF2_CORE=y
CONFIG_VIDEOBUF2_MEMOPS=y
CONFIG_VIDEOBUF2_DMA_CONTIG=y
CONFIG_VIDEOBUF2_VMALLOC=y
CONFIG_VIDEO_V4L2_INT_DEVICE=y
CONFIG_DVB_CORE=y
CONFIG_DVB_NET=y
CONFIG_TTPCI_EEPROM=y
CONFIG_DVB_MAX_ADAPTERS=8
CONFIG_DVB_DYNAMIC_MINORS=y

#
# Media drivers
#
CONFIG_RC_CORE=y
CONFIG_RC_MAP=y
CONFIG_RC_DECODERS=y
# CONFIG_LIRC is not set
CONFIG_IR_NEC_DECODER=y
CONFIG_IR_RC5_DECODER=y
CONFIG_IR_RC6_DECODER=y
CONFIG_IR_JVC_DECODER=y
CONFIG_IR_SONY_DECODER=y
CONFIG_IR_RC5_SZ_DECODER=y
CONFIG_IR_SANYO_DECODER=y
CONFIG_IR_MCE_KBD_DECODER=y
CONFIG_RC_DEVICES=y
CONFIG_RC_ATI_REMOTE=y
CONFIG_IR_ENE=y
CONFIG_IR_IMON=y
CONFIG_IR_MCEUSB=y
CONFIG_IR_ITE_CIR=y
CONFIG_IR_FINTEK=y
CONFIG_IR_NUVOTON=y
CONFIG_IR_REDRAT3=y
CONFIG_IR_STREAMZAP=y
CONFIG_IR_WINBOND_CIR=y
CONFIG_IR_IGUANA=y
CONFIG_IR_TTUSBIR=y
CONFIG_RC_LOOPBACK=y
CONFIG_IR_GPIO_CIR=y
CONFIG_MEDIA_USB_SUPPORT=y

#
# Webcam devices
#
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=y
CONFIG_USB_M5602=y
CONFIG_USB_STV06XX=y
CONFIG_USB_GL860=y
CONFIG_USB_GSPCA_BENQ=y
CONFIG_USB_GSPCA_CONEX=y
CONFIG_USB_GSPCA_CPIA1=y
CONFIG_USB_GSPCA_ETOMS=y
CONFIG_USB_GSPCA_FINEPIX=y
CONFIG_USB_GSPCA_JEILINJ=y
CONFIG_USB_GSPCA_JL2005BCD=y
CONFIG_USB_GSPCA_KINECT=y
CONFIG_USB_GSPCA_KONICA=y
CONFIG_USB_GSPCA_MARS=y
CONFIG_USB_GSPCA_MR97310A=y
CONFIG_USB_GSPCA_NW80X=y
CONFIG_USB_GSPCA_OV519=y
CONFIG_USB_GSPCA_OV534=y
CONFIG_USB_GSPCA_OV534_9=y
CONFIG_USB_GSPCA_PAC207=y
CONFIG_USB_GSPCA_PAC7302=y
CONFIG_USB_GSPCA_PAC7311=y
CONFIG_USB_GSPCA_SE401=y
CONFIG_USB_GSPCA_SN9C2028=y
CONFIG_USB_GSPCA_SN9C20X=y
CONFIG_USB_GSPCA_SONIXB=y
CONFIG_USB_GSPCA_SONIXJ=y
CONFIG_USB_GSPCA_SPCA500=y
CONFIG_USB_GSPCA_SPCA501=y
CONFIG_USB_GSPCA_SPCA505=y
CONFIG_USB_GSPCA_SPCA506=y
CONFIG_USB_GSPCA_SPCA508=y
CONFIG_USB_GSPCA_SPCA561=y
CONFIG_USB_GSPCA_SPCA1528=y
CONFIG_USB_GSPCA_SQ905=y
CONFIG_USB_GSPCA_SQ905C=y
CONFIG_USB_GSPCA_SQ930X=y
CONFIG_USB_GSPCA_STK014=y
CONFIG_USB_GSPCA_STK1135=y
CONFIG_USB_GSPCA_STV0680=y
CONFIG_USB_GSPCA_SUNPLUS=y
CONFIG_USB_GSPCA_T613=y
CONFIG_USB_GSPCA_TOPRO=y
CONFIG_USB_GSPCA_TV8532=y
CONFIG_USB_GSPCA_VC032X=y
CONFIG_USB_GSPCA_VICAM=y
CONFIG_USB_GSPCA_XIRLINK_CIT=y
CONFIG_USB_GSPCA_ZC3XX=y
CONFIG_USB_PWC=y
CONFIG_USB_PWC_DEBUG=y
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_VIDEO_CPIA2=y
CONFIG_USB_ZR364XX=y
CONFIG_USB_STKWEBCAM=y
CONFIG_USB_S2255=y
CONFIG_USB_SN9C102=y
CONFIG_VIDEO_USBTV=y

#
# Analog TV USB devices
#
CONFIG_VIDEO_PVRUSB2=y
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_PVRUSB2_DEBUGIFC=y
CONFIG_VIDEO_HDPVR=y
CONFIG_VIDEO_USBVISION=y
CONFIG_VIDEO_STK1160_COMMON=y
CONFIG_VIDEO_STK1160=y

#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=y
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_CX231XX=y
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_DVB=y
CONFIG_VIDEO_TM6000=y
CONFIG_VIDEO_TM6000_DVB=y

#
# Digital TV USB devices
#
CONFIG_DVB_USB=y
CONFIG_DVB_USB_DEBUG=y
CONFIG_DVB_USB_A800=y
CONFIG_DVB_USB_DIBUSB_MB=y
CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
CONFIG_DVB_USB_DIBUSB_MC=y
CONFIG_DVB_USB_DIB0700=y
CONFIG_DVB_USB_UMT_010=y
CONFIG_DVB_USB_CXUSB=y
CONFIG_DVB_USB_M920X=y
CONFIG_DVB_USB_DIGITV=y
CONFIG_DVB_USB_VP7045=y
CONFIG_DVB_USB_VP702X=y
CONFIG_DVB_USB_GP8PSK=y
CONFIG_DVB_USB_NOVA_T_USB2=y
CONFIG_DVB_USB_TTUSB2=y
CONFIG_DVB_USB_DTT200U=y
CONFIG_DVB_USB_OPERA1=y
CONFIG_DVB_USB_AF9005=y
CONFIG_DVB_USB_AF9005_REMOTE=y
CONFIG_DVB_USB_PCTV452E=y
CONFIG_DVB_USB_DW2102=y
CONFIG_DVB_USB_CINERGY_T2=y
CONFIG_DVB_USB_DTV5100=y
CONFIG_DVB_USB_FRIIO=y
CONFIG_DVB_USB_AZ6027=y
CONFIG_DVB_USB_TECHNISAT_USB2=y
CONFIG_DVB_USB_V2=y
CONFIG_DVB_USB_AF9015=y
CONFIG_DVB_USB_AF9035=y
CONFIG_DVB_USB_ANYSEE=y
CONFIG_DVB_USB_AU6610=y
CONFIG_DVB_USB_AZ6007=y
CONFIG_DVB_USB_CE6230=y
CONFIG_DVB_USB_EC168=y
CONFIG_DVB_USB_GL861=y
CONFIG_DVB_USB_IT913X=y
CONFIG_DVB_USB_LME2510=y
CONFIG_DVB_USB_MXL111SF=y
CONFIG_DVB_USB_RTL28XXU=y
CONFIG_DVB_TTUSB_BUDGET=y
CONFIG_DVB_TTUSB_DEC=y
CONFIG_SMS_USB_DRV=y
CONFIG_DVB_B2C2_FLEXCOP_USB=y
CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG=y

#
# Webcam, TV (analog/digital) USB devices
#
CONFIG_VIDEO_EM28XX=y
CONFIG_VIDEO_EM28XX_DVB=y
CONFIG_VIDEO_EM28XX_RC=y
CONFIG_MEDIA_PCI_SUPPORT=y

#
# Media capture support
#
CONFIG_VIDEO_MEYE=y

#
# Media capture/analog TV support
#
CONFIG_VIDEO_IVTV=y
CONFIG_VIDEO_FB_IVTV=y
CONFIG_VIDEO_ZORAN=y
CONFIG_VIDEO_ZORAN_DC30=y
CONFIG_VIDEO_ZORAN_ZR36060=y
CONFIG_VIDEO_ZORAN_BUZ=y
CONFIG_VIDEO_ZORAN_DC10=y
CONFIG_VIDEO_ZORAN_LML33=y
CONFIG_VIDEO_ZORAN_LML33R10=y
CONFIG_VIDEO_ZORAN_AVS6EYES=y
CONFIG_VIDEO_HEXIUM_GEMINI=y
CONFIG_VIDEO_HEXIUM_ORION=y
CONFIG_VIDEO_MXB=y

#
# Media capture/analog/hybrid TV support
#
CONFIG_VIDEO_CX18=y
CONFIG_VIDEO_CX25821=y
CONFIG_VIDEO_CX88=y
CONFIG_VIDEO_CX88_BLACKBIRD=y
CONFIG_VIDEO_CX88_DVB=y
CONFIG_VIDEO_CX88_ENABLE_VP3054=y
CONFIG_VIDEO_CX88_VP3054=y
CONFIG_VIDEO_CX88_MPEG=y
CONFIG_VIDEO_BT848=y
CONFIG_DVB_BT8XX=y
CONFIG_VIDEO_SAA7134=y
CONFIG_VIDEO_SAA7134_RC=y
CONFIG_VIDEO_SAA7134_DVB=y
CONFIG_VIDEO_SAA7164=y

#
# Media digital TV PCI Adapters
#
CONFIG_DVB_AV7110=y
CONFIG_DVB_AV7110_OSD=y
CONFIG_DVB_BUDGET_CORE=y
CONFIG_DVB_BUDGET=y
CONFIG_DVB_BUDGET_CI=y
CONFIG_DVB_BUDGET_AV=y
CONFIG_DVB_BUDGET_PATCH=y
CONFIG_DVB_B2C2_FLEXCOP_PCI=y
CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG=y
CONFIG_DVB_PLUTO2=y
CONFIG_DVB_DM1105=y
CONFIG_DVB_PT1=y
CONFIG_MANTIS_CORE=y
CONFIG_DVB_MANTIS=y
CONFIG_DVB_HOPPER=y
CONFIG_DVB_NGENE=y
CONFIG_DVB_DDBRIDGE=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_VIDEO_CAFE_CCIC=y
CONFIG_VIDEO_VIA_CAMERA=y
CONFIG_VIDEO_TIMBERDALE=y
CONFIG_SOC_CAMERA=y
CONFIG_SOC_CAMERA_SCALE_CROP=y
CONFIG_SOC_CAMERA_PLATFORM=y
CONFIG_VIDEO_RCAR_VIN=y
CONFIG_VIDEO_SH_MOBILE_CSI2=y
CONFIG_VIDEO_SH_MOBILE_CEU=y
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MEM2MEM_DEINTERLACE=y
CONFIG_VIDEO_SH_VEU=y
CONFIG_VIDEO_RENESAS_VSP1=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_VIVI=y
CONFIG_VIDEO_MEM2MEM_TESTDEV=y

#
# Supported MMC/SDIO adapters
#
CONFIG_SMS_SDIO_DRV=y
CONFIG_RADIO_ADAPTERS=y
CONFIG_RADIO_TEA575X=y
CONFIG_RADIO_SI470X=y
CONFIG_USB_SI470X=y
CONFIG_USB_MR800=y
CONFIG_USB_DSBR=y
CONFIG_RADIO_MAXIRADIO=y
CONFIG_RADIO_SHARK=y
CONFIG_RADIO_SHARK2=y
CONFIG_I2C_SI4713=y
CONFIG_RADIO_SI4713=y
CONFIG_USB_KEENE=y
CONFIG_USB_MA901=y
CONFIG_RADIO_TEA5764=y
CONFIG_RADIO_TEA5764_XTAL=y
CONFIG_RADIO_SAA7706H=y
CONFIG_RADIO_TEF6862=y
CONFIG_RADIO_TIMBERDALE=y
CONFIG_RADIO_WL1273=y

#
# Texas Instruments WL128x FM driver (ST based)
#
CONFIG_RADIO_WL128X=y

#
# Supported FireWire (IEEE 1394) Adapters
#
CONFIG_DVB_FIREDTV=y
CONFIG_DVB_FIREDTV_INPUT=y
CONFIG_MEDIA_COMMON_OPTIONS=y

#
# common driver options
#
CONFIG_VIDEO_CX2341X=y
CONFIG_VIDEO_BTCX=y
CONFIG_VIDEO_TVEEPROM=y
CONFIG_CYPRESS_FIRMWARE=y
CONFIG_DVB_B2C2_FLEXCOP=y
CONFIG_DVB_B2C2_FLEXCOP_DEBUG=y
CONFIG_VIDEO_SAA7146=y
CONFIG_VIDEO_SAA7146_VV=y
CONFIG_SMS_SIANO_MDTV=y
CONFIG_SMS_SIANO_RC=y

#
# Media ancillary drivers (tuners, sensors, i2c, frontends)
#
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
CONFIG_MEDIA_ATTACH=y
CONFIG_VIDEO_IR_I2C=y

#
# Audio decoders, processors and mixers
#
CONFIG_VIDEO_TVAUDIO=y
CONFIG_VIDEO_TDA7432=y
CONFIG_VIDEO_TDA9840=y
CONFIG_VIDEO_TEA6415C=y
CONFIG_VIDEO_TEA6420=y
CONFIG_VIDEO_MSP3400=y
CONFIG_VIDEO_CS5345=y
CONFIG_VIDEO_CS53L32A=y
CONFIG_VIDEO_WM8775=y
CONFIG_VIDEO_WM8739=y
CONFIG_VIDEO_VP27SMPX=y

#
# RDS decoders
#
CONFIG_VIDEO_SAA6588=y

#
# Video decoders
#
CONFIG_VIDEO_ADV7180=y
CONFIG_VIDEO_BT819=y
CONFIG_VIDEO_BT856=y
CONFIG_VIDEO_BT866=y
CONFIG_VIDEO_KS0127=y
CONFIG_VIDEO_SAA7110=y
CONFIG_VIDEO_SAA711X=y
CONFIG_VIDEO_TVP5150=y
CONFIG_VIDEO_VPX3220=y

#
# Video and audio decoders
#
CONFIG_VIDEO_SAA717X=y
CONFIG_VIDEO_CX25840=y

#
# Video encoders
#
CONFIG_VIDEO_SAA7127=y
CONFIG_VIDEO_SAA7185=y
CONFIG_VIDEO_ADV7170=y
CONFIG_VIDEO_ADV7175=y

#
# Camera sensor devices
#
CONFIG_VIDEO_OV7670=y
CONFIG_VIDEO_MT9V011=y

#
# Flash devices
#

#
# Video improvement chips
#
CONFIG_VIDEO_UPD64031A=y
CONFIG_VIDEO_UPD64083=y

#
# Miscellaneous helper chips
#
CONFIG_VIDEO_M52790=y

#
# Sensors used on soc_camera driver
#

#
# soc_camera sensor drivers
#
CONFIG_SOC_CAMERA_IMX074=y
CONFIG_SOC_CAMERA_MT9M001=y
CONFIG_SOC_CAMERA_MT9M111=y
CONFIG_SOC_CAMERA_MT9T031=y
CONFIG_SOC_CAMERA_MT9T112=y
CONFIG_SOC_CAMERA_MT9V022=y
CONFIG_SOC_CAMERA_OV2640=y
CONFIG_SOC_CAMERA_OV5642=y
CONFIG_SOC_CAMERA_OV6650=y
CONFIG_SOC_CAMERA_OV772X=y
CONFIG_SOC_CAMERA_OV9640=y
CONFIG_SOC_CAMERA_OV9740=y
CONFIG_SOC_CAMERA_RJ54N1=y
CONFIG_SOC_CAMERA_TW9910=y
CONFIG_MEDIA_TUNER=y
CONFIG_MEDIA_TUNER_SIMPLE=y
CONFIG_MEDIA_TUNER_TDA8290=y
CONFIG_MEDIA_TUNER_TDA827X=y
CONFIG_MEDIA_TUNER_TDA18271=y
CONFIG_MEDIA_TUNER_TDA9887=y
CONFIG_MEDIA_TUNER_TEA5761=y
CONFIG_MEDIA_TUNER_TEA5767=y
CONFIG_MEDIA_TUNER_MT20XX=y
CONFIG_MEDIA_TUNER_MT2060=y
CONFIG_MEDIA_TUNER_MT2063=y
CONFIG_MEDIA_TUNER_MT2266=y
CONFIG_MEDIA_TUNER_MT2131=y
CONFIG_MEDIA_TUNER_QT1010=y
CONFIG_MEDIA_TUNER_XC2028=y
CONFIG_MEDIA_TUNER_XC5000=y
CONFIG_MEDIA_TUNER_XC4000=y
CONFIG_MEDIA_TUNER_MXL5005S=y
CONFIG_MEDIA_TUNER_MXL5007T=y
CONFIG_MEDIA_TUNER_MC44S803=y
CONFIG_MEDIA_TUNER_MAX2165=y
CONFIG_MEDIA_TUNER_TDA18218=y
CONFIG_MEDIA_TUNER_FC0011=y
CONFIG_MEDIA_TUNER_FC0012=y
CONFIG_MEDIA_TUNER_FC0013=y
CONFIG_MEDIA_TUNER_TDA18212=y
CONFIG_MEDIA_TUNER_E4000=y
CONFIG_MEDIA_TUNER_FC2580=y
CONFIG_MEDIA_TUNER_TUA9001=y
CONFIG_MEDIA_TUNER_IT913X=y
CONFIG_MEDIA_TUNER_R820T=y

#
# Multistandard (satellite) frontends
#
CONFIG_DVB_STB0899=y
CONFIG_DVB_STB6100=y
CONFIG_DVB_STV090x=y
CONFIG_DVB_STV6110x=y

#
# Multistandard (cable + terrestrial) frontends
#
CONFIG_DVB_DRXK=y
CONFIG_DVB_TDA18271C2DD=y

#
# DVB-S (satellite) frontends
#
CONFIG_DVB_CX24110=y
CONFIG_DVB_CX24123=y
CONFIG_DVB_MT312=y
CONFIG_DVB_ZL10036=y
CONFIG_DVB_ZL10039=y
CONFIG_DVB_S5H1420=y
CONFIG_DVB_STV0288=y
CONFIG_DVB_STB6000=y
CONFIG_DVB_STV0299=y
CONFIG_DVB_STV6110=y
CONFIG_DVB_STV0900=y
CONFIG_DVB_TDA8083=y
CONFIG_DVB_TDA10086=y
CONFIG_DVB_TDA8261=y
CONFIG_DVB_VES1X93=y
CONFIG_DVB_TUNER_ITD1000=y
CONFIG_DVB_TUNER_CX24113=y
CONFIG_DVB_TDA826X=y
CONFIG_DVB_TUA6100=y
CONFIG_DVB_CX24116=y
CONFIG_DVB_SI21XX=y
CONFIG_DVB_TS2020=y
CONFIG_DVB_DS3000=y
CONFIG_DVB_MB86A16=y
CONFIG_DVB_TDA10071=y

#
# DVB-T (terrestrial) frontends
#
CONFIG_DVB_SP8870=y
CONFIG_DVB_SP887X=y
CONFIG_DVB_CX22700=y
CONFIG_DVB_CX22702=y
CONFIG_DVB_DRXD=y
CONFIG_DVB_L64781=y
CONFIG_DVB_TDA1004X=y
CONFIG_DVB_NXT6000=y
CONFIG_DVB_MT352=y
CONFIG_DVB_ZL10353=y
CONFIG_DVB_DIB3000MB=y
CONFIG_DVB_DIB3000MC=y
CONFIG_DVB_DIB7000M=y
CONFIG_DVB_DIB7000P=y
CONFIG_DVB_TDA10048=y
CONFIG_DVB_AF9013=y
CONFIG_DVB_EC100=y
CONFIG_DVB_CXD2820R=y
CONFIG_DVB_RTL2830=y
CONFIG_DVB_RTL2832=y

#
# DVB-C (cable) frontends
#
CONFIG_DVB_VES1820=y
CONFIG_DVB_TDA10021=y
CONFIG_DVB_TDA10023=y
CONFIG_DVB_STV0297=y

#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
#
CONFIG_DVB_NXT200X=y
CONFIG_DVB_OR51211=y
CONFIG_DVB_OR51132=y
CONFIG_DVB_BCM3510=y
CONFIG_DVB_LGDT330X=y
CONFIG_DVB_LGDT3305=y
CONFIG_DVB_LG2160=y
CONFIG_DVB_S5H1409=y
CONFIG_DVB_AU8522=y
CONFIG_DVB_AU8522_DTV=y
CONFIG_DVB_AU8522_V4L=y
CONFIG_DVB_S5H1411=y

#
# ISDB-T (terrestrial) frontends
#
CONFIG_DVB_S921=y
CONFIG_DVB_DIB8000=y
CONFIG_DVB_MB86A20S=y

#
# Digital terrestrial only tuners/PLL
#
CONFIG_DVB_PLL=y
CONFIG_DVB_TUNER_DIB0070=y
CONFIG_DVB_TUNER_DIB0090=y

#
# SEC control devices for DVB-S
#
CONFIG_DVB_LNBP21=y
CONFIG_DVB_LNBP22=y
CONFIG_DVB_ISL6405=y
CONFIG_DVB_ISL6421=y
CONFIG_DVB_ISL6423=y
CONFIG_DVB_A8293=y
CONFIG_DVB_LGS8GXX=y
CONFIG_DVB_ATBM8830=y
CONFIG_DVB_TDA665x=y
CONFIG_DVB_IX2505V=y
CONFIG_DVB_IT913X_FE=y
CONFIG_DVB_M88RS2000=y
CONFIG_DVB_AF9033=y

#
# Tools to develop new frontends
#
# CONFIG_DVB_DUMMY_FE is not set

#
# Graphics support
#
CONFIG_AGP=y
CONFIG_AGP_AMD64=y
CONFIG_AGP_INTEL=y
CONFIG_AGP_SIS=y
CONFIG_AGP_VIA=y
CONFIG_INTEL_GTT=y
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
CONFIG_VGA_SWITCHEROO=y
CONFIG_DRM=y
CONFIG_DRM_USB=y
CONFIG_DRM_KMS_HELPER=y
CONFIG_DRM_KMS_FB_HELPER=y
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_TTM=y

#
# I2C encoder or helper chips
#
CONFIG_DRM_I2C_CH7006=y
CONFIG_DRM_I2C_SIL164=y
CONFIG_DRM_I2C_NXP_TDA998X=y
CONFIG_DRM_TDFX=y
CONFIG_DRM_R128=y
CONFIG_DRM_RADEON=y
CONFIG_DRM_RADEON_UMS=y
CONFIG_DRM_NOUVEAU=y
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_I915=y
CONFIG_DRM_I915_KMS=y
CONFIG_DRM_I915_FBDEV=y
CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y
CONFIG_DRM_I915_UMS=y
CONFIG_DRM_MGA=y
CONFIG_DRM_SIS=y
CONFIG_DRM_VIA=y
CONFIG_DRM_SAVAGE=y
CONFIG_DRM_VMWGFX=y
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_GMA500=y
CONFIG_DRM_GMA600=y
CONFIG_DRM_GMA3600=y
CONFIG_DRM_UDL=y
CONFIG_DRM_AST=y
CONFIG_DRM_MGAG200=y
CONFIG_DRM_CIRRUS_QEMU=y
CONFIG_DRM_QXL=y
CONFIG_VGASTATE=y
CONFIG_VIDEO_OUTPUT_CONTROL=y
CONFIG_HDMI=y
CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_DDC=y
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
CONFIG_FB_SYS_FILLRECT=y
CONFIG_FB_SYS_COPYAREA=y
CONFIG_FB_SYS_IMAGEBLIT=y
CONFIG_FB_FOREIGN_ENDIAN=y
CONFIG_FB_BOTH_ENDIAN=y
# CONFIG_FB_BIG_ENDIAN is not set
# CONFIG_FB_LITTLE_ENDIAN is not set
CONFIG_FB_SYS_FOPS=y
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_HECUBA=y
CONFIG_FB_SVGALIB=y
# CONFIG_FB_MACMODES is not set
CONFIG_FB_BACKLIGHT=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
CONFIG_FB_CIRRUS=y
CONFIG_FB_PM2=y
CONFIG_FB_PM2_FIFO_DISCONNECT=y
CONFIG_FB_CYBER2000=y
CONFIG_FB_CYBER2000_DDC=y
CONFIG_FB_ARC=y
CONFIG_FB_ASILIANT=y
CONFIG_FB_IMSTT=y
CONFIG_FB_VGA16=y
CONFIG_FB_UVESA=y
CONFIG_FB_VESA=y
CONFIG_FB_EFI=y
CONFIG_FB_N411=y
CONFIG_FB_HGA=y
CONFIG_FB_S1D13XXX=y
CONFIG_FB_NVIDIA=y
CONFIG_FB_NVIDIA_I2C=y
CONFIG_FB_NVIDIA_DEBUG=y
CONFIG_FB_NVIDIA_BACKLIGHT=y
CONFIG_FB_RIVA=y
CONFIG_FB_RIVA_I2C=y
CONFIG_FB_RIVA_DEBUG=y
CONFIG_FB_RIVA_BACKLIGHT=y
CONFIG_FB_I740=y
CONFIG_FB_LE80578=y
CONFIG_FB_CARILLO_RANCH=y
CONFIG_FB_MATROX=y
CONFIG_FB_MATROX_MILLENIUM=y
CONFIG_FB_MATROX_MYSTIQUE=y
CONFIG_FB_MATROX_G=y
CONFIG_FB_MATROX_I2C=y
CONFIG_FB_MATROX_MAVEN=y
CONFIG_FB_RADEON=y
CONFIG_FB_RADEON_I2C=y
CONFIG_FB_RADEON_BACKLIGHT=y
CONFIG_FB_RADEON_DEBUG=y
CONFIG_FB_ATY128=y
CONFIG_FB_ATY128_BACKLIGHT=y
CONFIG_FB_ATY=y
CONFIG_FB_ATY_CT=y
CONFIG_FB_ATY_GENERIC_LCD=y
CONFIG_FB_ATY_GX=y
CONFIG_FB_ATY_BACKLIGHT=y
CONFIG_FB_S3=y
CONFIG_FB_S3_DDC=y
CONFIG_FB_SAVAGE=y
CONFIG_FB_SAVAGE_I2C=y
CONFIG_FB_SAVAGE_ACCEL=y
CONFIG_FB_SIS=y
CONFIG_FB_SIS_300=y
CONFIG_FB_SIS_315=y
CONFIG_FB_VIA=y
CONFIG_FB_VIA_DIRECT_PROCFS=y
CONFIG_FB_VIA_X_COMPATIBILITY=y
CONFIG_FB_NEOMAGIC=y
CONFIG_FB_KYRO=y
CONFIG_FB_3DFX=y
CONFIG_FB_3DFX_ACCEL=y
CONFIG_FB_3DFX_I2C=y
CONFIG_FB_VOODOO1=y
CONFIG_FB_VT8623=y
CONFIG_FB_TRIDENT=y
CONFIG_FB_ARK=y
CONFIG_FB_PM3=y
CONFIG_FB_CARMINE=y
CONFIG_FB_CARMINE_DRAM_EVAL=y
# CONFIG_CARMINE_DRAM_CUSTOM is not set
CONFIG_FB_TMIO=y
CONFIG_FB_TMIO_ACCELL=y
CONFIG_FB_SM501=y
CONFIG_FB_SMSCUFX=y
CONFIG_FB_UDL=y
CONFIG_FB_GOLDFISH=y
CONFIG_FB_VIRTUAL=y
CONFIG_XEN_FBDEV_FRONTEND=y
CONFIG_FB_METRONOME=y
CONFIG_FB_MB862XX=y
CONFIG_FB_MB862XX_PCI_GDC=y
CONFIG_FB_MB862XX_I2C=y
CONFIG_FB_BROADSHEET=y
CONFIG_FB_AUO_K190X=y
CONFIG_FB_AUO_K1900=y
CONFIG_FB_AUO_K1901=y
CONFIG_FB_HYPERV=y
CONFIG_FB_SIMPLE=y
CONFIG_EXYNOS_VIDEO=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_L4F00242T03=y
CONFIG_LCD_LMS283GF05=y
CONFIG_LCD_LTV350QV=y
CONFIG_LCD_ILI922X=y
CONFIG_LCD_ILI9320=y
CONFIG_LCD_TDO24M=y
CONFIG_LCD_VGG2432A4=y
CONFIG_LCD_PLATFORM=y
CONFIG_LCD_S6E63M0=y
CONFIG_LCD_LD9040=y
CONFIG_LCD_AMS369FG06=y
CONFIG_LCD_LMS501KF03=y
CONFIG_LCD_HX8357=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_ATMEL_PWM=y
CONFIG_BACKLIGHT_GENERIC=y
CONFIG_BACKLIGHT_LM3533=y
CONFIG_BACKLIGHT_CARILLO_RANCH=y
CONFIG_BACKLIGHT_PWM=y
CONFIG_BACKLIGHT_DA903X=y
CONFIG_BACKLIGHT_DA9052=y
CONFIG_BACKLIGHT_MAX8925=y
CONFIG_BACKLIGHT_APPLE=y
CONFIG_BACKLIGHT_SAHARA=y
CONFIG_BACKLIGHT_WM831X=y
CONFIG_BACKLIGHT_ADP5520=y
CONFIG_BACKLIGHT_ADP8860=y
CONFIG_BACKLIGHT_ADP8870=y
CONFIG_BACKLIGHT_88PM860X=y
CONFIG_BACKLIGHT_PCF50633=y
CONFIG_BACKLIGHT_AAT2870=y
CONFIG_BACKLIGHT_LM3630A=y
CONFIG_BACKLIGHT_LM3639=y
CONFIG_BACKLIGHT_LP855X=y
CONFIG_BACKLIGHT_LP8788=y
CONFIG_BACKLIGHT_OT200=y
CONFIG_BACKLIGHT_PANDORA=y
CONFIG_BACKLIGHT_TPS65217=y
CONFIG_BACKLIGHT_AS3711=y
CONFIG_BACKLIGHT_GPIO=y
CONFIG_BACKLIGHT_LV5207LP=y
CONFIG_BACKLIGHT_BD6107=y

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_SOUND is not set

#
# HID support
#
CONFIG_HID=y
CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=y
CONFIG_HID_GENERIC=y

#
# Special HID drivers
#
CONFIG_HID_A4TECH=y
CONFIG_HID_ACRUX=y
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=y
CONFIG_HID_APPLEIR=y
CONFIG_HID_AUREAL=y
CONFIG_HID_BELKIN=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CYPRESS=y
CONFIG_HID_DRAGONRISE=y
CONFIG_DRAGONRISE_FF=y
CONFIG_HID_EMS_FF=y
CONFIG_HID_ELECOM=y
CONFIG_HID_ELO=y
CONFIG_HID_EZKEY=y
CONFIG_HID_HOLTEK=y
CONFIG_HOLTEK_FF=y
CONFIG_HID_HUION=y
CONFIG_HID_KEYTOUCH=y
CONFIG_HID_KYE=y
CONFIG_HID_UCLOGIC=y
CONFIG_HID_WALTOP=y
CONFIG_HID_GYRATION=y
CONFIG_HID_ICADE=y
CONFIG_HID_TWINHAN=y
CONFIG_HID_KENSINGTON=y
CONFIG_HID_LCPOWER=y
CONFIG_HID_LENOVO_TPKBD=y
CONFIG_HID_LOGITECH=y
CONFIG_HID_LOGITECH_DJ=y
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_LOGIG940_FF=y
CONFIG_LOGIWHEELS_FF=y
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_MULTITOUCH=y
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=y
CONFIG_HID_PANTHERLORD=y
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PETALYNX=y
CONFIG_HID_PICOLCD=y
CONFIG_HID_PICOLCD_FB=y
CONFIG_HID_PICOLCD_BACKLIGHT=y
CONFIG_HID_PICOLCD_LCD=y
CONFIG_HID_PICOLCD_LEDS=y
CONFIG_HID_PICOLCD_CIR=y
CONFIG_HID_PRIMAX=y
CONFIG_HID_ROCCAT=y
CONFIG_HID_SAITEK=y
CONFIG_HID_SAMSUNG=y
CONFIG_HID_SONY=y
CONFIG_SONY_FF=y
CONFIG_HID_SPEEDLINK=y
CONFIG_HID_STEELSERIES=y
CONFIG_HID_SUNPLUS=y
CONFIG_HID_GREENASIA=y
CONFIG_GREENASIA_FF=y
CONFIG_HID_HYPERV_MOUSE=y
CONFIG_HID_SMARTJOYPLUS=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_HID_TIVO=y
CONFIG_HID_TOPSEED=y
CONFIG_HID_THINGM=y
CONFIG_HID_THRUSTMASTER=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_WACOM=y
CONFIG_HID_WIIMOTE=y
CONFIG_HID_XINMO=y
CONFIG_HID_ZEROPLUS=y
CONFIG_ZEROPLUS_FF=y
CONFIG_HID_ZYDACRON=y
CONFIG_HID_SENSOR_HUB=y

#
# USB HID support
#
CONFIG_USB_HID=y
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y

#
# I2C HID support
#
CONFIG_I2C_HID=y
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=y
CONFIG_USB_DEBUG=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEFAULT_PERSIST=y
CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_OTG=y
CONFIG_USB_OTG_WHITELIST=y
CONFIG_USB_OTG_BLACKLIST_HUB=y
CONFIG_USB_MON=y
CONFIG_USB_WUSB=y
CONFIG_USB_WUSB_CBAF=y
CONFIG_USB_WUSB_CBAF_DEBUG=y

#
# USB Host Controller Drivers
#
CONFIG_USB_C67X00_HCD=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PLATFORM=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
CONFIG_USB_EHCI_PCI=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_OXU210HP_HCD=y
CONFIG_USB_ISP116X_HCD=y
CONFIG_USB_ISP1760_HCD=y
CONFIG_USB_ISP1362_HCD=y
CONFIG_USB_FUSBH200_HCD=y
CONFIG_USB_FOTG210_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PCI=y
CONFIG_USB_OHCI_HCD_SSB=y
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_UHCI_HCD=y
CONFIG_USB_U132_HCD=y
CONFIG_USB_SL811_HCD=y
CONFIG_USB_SL811_HCD_ISO=y
CONFIG_USB_SL811_CS=y
CONFIG_USB_R8A66597_HCD=y
CONFIG_USB_RENESAS_USBHS_HCD=y
CONFIG_USB_WHCI_HCD=y
CONFIG_USB_HWA_HCD=y
CONFIG_USB_HCD_BCMA=y
CONFIG_USB_HCD_SSB=y
CONFIG_USB_HCD_TEST_MODE=y
CONFIG_USB_MUSB_HDRC=y
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
CONFIG_USB_MUSB_DUAL_ROLE=y
CONFIG_USB_MUSB_TUSB6010=y
# CONFIG_USB_MUSB_UX500 is not set
CONFIG_MUSB_PIO_ONLY=y
CONFIG_USB_RENESAS_USBHS=y

#
# USB Device Class drivers
#
CONFIG_USB_ACM=y
CONFIG_USB_PRINTER=y
CONFIG_USB_WDM=y
CONFIG_USB_TMC=y

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=y
CONFIG_USB_STORAGE_DEBUG=y
CONFIG_USB_STORAGE_REALTEK=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_USBAT=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
CONFIG_USB_STORAGE_ALAUDA=y
CONFIG_USB_STORAGE_ONETOUCH=y
CONFIG_USB_STORAGE_KARMA=y
CONFIG_USB_STORAGE_CYPRESS_ATACB=y
CONFIG_USB_STORAGE_ENE_UB6250=y

#
# USB Imaging devices
#
CONFIG_USB_MDC800=y
CONFIG_USB_MICROTEK=y
CONFIG_USB_DWC3=y
# CONFIG_USB_DWC3_HOST is not set
# CONFIG_USB_DWC3_GADGET is not set
CONFIG_USB_DWC3_DUAL_ROLE=y

#
# Platform Glue Driver Support
#
CONFIG_USB_DWC3_OMAP=y
CONFIG_USB_DWC3_EXYNOS=y
CONFIG_USB_DWC3_PCI=y

#
# Debugging features
#
CONFIG_USB_DWC3_DEBUG=y
CONFIG_USB_DWC3_VERBOSE=y
CONFIG_USB_CHIPIDEA=y
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_CHIPIDEA_DEBUG=y

#
# USB port drivers
#
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_CONSOLE=y
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_SIMPLE=y
CONFIG_USB_SERIAL_AIRCABLE=y
CONFIG_USB_SERIAL_ARK3116=y
CONFIG_USB_SERIAL_BELKIN=y
CONFIG_USB_SERIAL_CH341=y
CONFIG_USB_SERIAL_WHITEHEAT=y
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=y
CONFIG_USB_SERIAL_CP210X=y
CONFIG_USB_SERIAL_CYPRESS_M8=y
CONFIG_USB_SERIAL_EMPEG=y
CONFIG_USB_SERIAL_FTDI_SIO=y
CONFIG_USB_SERIAL_VISOR=y
CONFIG_USB_SERIAL_IPAQ=y
CONFIG_USB_SERIAL_IR=y
CONFIG_USB_SERIAL_EDGEPORT=y
CONFIG_USB_SERIAL_EDGEPORT_TI=y
CONFIG_USB_SERIAL_F81232=y
CONFIG_USB_SERIAL_GARMIN=y
CONFIG_USB_SERIAL_IPW=y
CONFIG_USB_SERIAL_IUU=y
CONFIG_USB_SERIAL_KEYSPAN_PDA=y
CONFIG_USB_SERIAL_KEYSPAN=y
CONFIG_USB_SERIAL_KEYSPAN_MPR=y
CONFIG_USB_SERIAL_KEYSPAN_USA28=y
CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
CONFIG_USB_SERIAL_KEYSPAN_USA19=y
CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
CONFIG_USB_SERIAL_KLSI=y
CONFIG_USB_SERIAL_KOBIL_SCT=y
CONFIG_USB_SERIAL_MCT_U232=y
CONFIG_USB_SERIAL_METRO=y
CONFIG_USB_SERIAL_MOS7720=y
CONFIG_USB_SERIAL_MOS7840=y
CONFIG_USB_SERIAL_NAVMAN=y
CONFIG_USB_SERIAL_PL2303=y
CONFIG_USB_SERIAL_OTI6858=y
CONFIG_USB_SERIAL_QCAUX=y
CONFIG_USB_SERIAL_QUALCOMM=y
CONFIG_USB_SERIAL_SPCP8X5=y
CONFIG_USB_SERIAL_SAFE=y
CONFIG_USB_SERIAL_SAFE_PADDED=y
CONFIG_USB_SERIAL_SIERRAWIRELESS=y
CONFIG_USB_SERIAL_SYMBOL=y
CONFIG_USB_SERIAL_TI=y
CONFIG_USB_SERIAL_CYBERJACK=y
CONFIG_USB_SERIAL_XIRCOM=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_SERIAL_OMNINET=y
CONFIG_USB_SERIAL_OPTICON=y
CONFIG_USB_SERIAL_XSENS_MT=y
CONFIG_USB_SERIAL_WISHBONE=y
CONFIG_USB_SERIAL_ZTE=y
CONFIG_USB_SERIAL_SSU100=y
CONFIG_USB_SERIAL_QT2=y
CONFIG_USB_SERIAL_DEBUG=y

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=y
CONFIG_USB_EMI26=y
CONFIG_USB_ADUTUX=y
CONFIG_USB_SEVSEG=y
CONFIG_USB_RIO500=y
CONFIG_USB_LEGOTOWER=y
CONFIG_USB_LCD=y
CONFIG_USB_LED=y
CONFIG_USB_CYPRESS_CY7C63=y
CONFIG_USB_CYTHERM=y
CONFIG_USB_IDMOUSE=y
CONFIG_USB_FTDI_ELAN=y
CONFIG_USB_APPLEDISPLAY=y
CONFIG_USB_SISUSBVGA=y
CONFIG_USB_SISUSBVGA_CON=y
CONFIG_USB_LD=y
CONFIG_USB_TRANCEVIBRATOR=y
CONFIG_USB_IOWARRIOR=y
CONFIG_USB_TEST=y
CONFIG_USB_EHSET_TEST_FIXTURE=y
CONFIG_USB_ISIGHTFW=y
CONFIG_USB_YUREX=y
CONFIG_USB_EZUSB_FX2=y
CONFIG_USB_HSIC_USB3503=y
CONFIG_USB_ATM=y
CONFIG_USB_SPEEDTOUCH=y
CONFIG_USB_CXACRU=y
CONFIG_USB_UEAGLEATM=y
CONFIG_USB_XUSBATM=y

#
# USB Physical Layer drivers
#
CONFIG_USB_PHY=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_SAMSUNG_USBPHY=y
CONFIG_SAMSUNG_USB2PHY=y
CONFIG_SAMSUNG_USB3PHY=y
CONFIG_USB_GPIO_VBUS=y
CONFIG_USB_ISP1301=y
CONFIG_USB_RCAR_PHY=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DEBUG=y
CONFIG_USB_GADGET_VERBOSE=y
CONFIG_USB_GADGET_DEBUG_FILES=y
CONFIG_USB_GADGET_DEBUG_FS=y
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2

#
# USB Peripheral Controller
#
CONFIG_USB_FOTG210_UDC=y
CONFIG_USB_R8A66597=y
CONFIG_USB_RENESAS_USBHS_UDC=y
CONFIG_USB_PXA27X=y
CONFIG_USB_MV_UDC=y
CONFIG_USB_MV_U3D=y
CONFIG_USB_M66592=y
CONFIG_USB_AMD5536UDC=y
CONFIG_USB_NET2272=y
CONFIG_USB_NET2272_DMA=y
CONFIG_USB_NET2280=y
CONFIG_USB_GOKU=y
CONFIG_USB_EG20T=y
CONFIG_USB_DUMMY_HCD=y
CONFIG_USB_LIBCOMPOSITE=y
CONFIG_USB_U_ETHER=y
CONFIG_USB_U_RNDIS=y
CONFIG_USB_F_ECM=y
CONFIG_USB_F_EEM=y
CONFIG_USB_F_SUBSET=y
CONFIG_USB_F_RNDIS=y
# CONFIG_USB_CONFIGFS is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ETH=y
CONFIG_USB_ETH_RNDIS=y
CONFIG_USB_ETH_EEM=y
# CONFIG_USB_G_NCM is not set
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_FUNCTIONFS is not set
# CONFIG_USB_MASS_STORAGE is not set
# CONFIG_USB_GADGET_TARGET is not set
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_G_PRINTER is not set
# CONFIG_USB_CDC_COMPOSITE is not set
# CONFIG_USB_G_NOKIA is not set
# CONFIG_USB_G_ACM_MS is not set
# CONFIG_USB_G_MULTI is not set
# CONFIG_USB_G_HID is not set
# CONFIG_USB_G_DBGP is not set
# CONFIG_USB_G_WEBCAM is not set
CONFIG_UWB=y
CONFIG_UWB_HWA=y
CONFIG_UWB_WHCI=y
CONFIG_UWB_I1480U=y
CONFIG_MMC=y
CONFIG_MMC_DEBUG=y
# CONFIG_MMC_UNSAFE_RESUME is not set
CONFIG_MMC_CLKGATE=y

#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_SDIO_UART=y
CONFIG_MMC_TEST=y

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PCI=y
CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_SDHCI_ACPI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_PXAV3=y
CONFIG_MMC_SDHCI_PXAV2=y
CONFIG_MMC_WBSD=y
CONFIG_MMC_TIFM_SD=y
CONFIG_MMC_SPI=y
CONFIG_MMC_SDRICOH_CS=y
CONFIG_MMC_CB710=y
CONFIG_MMC_VIA_SDMMC=y
CONFIG_MMC_VUB300=y
CONFIG_MMC_USHC=y
CONFIG_MMC_REALTEK_PCI=y
CONFIG_MEMSTICK=y
CONFIG_MEMSTICK_DEBUG=y

#
# MemoryStick drivers
#
CONFIG_MEMSTICK_UNSAFE_RESUME=y
CONFIG_MSPRO_BLOCK=y
CONFIG_MS_BLOCK=y

#
# MemoryStick Host Controller Drivers
#
CONFIG_MEMSTICK_TIFM_MS=y
CONFIG_MEMSTICK_JMICRON_38X=y
CONFIG_MEMSTICK_R592=y
CONFIG_MEMSTICK_REALTEK_PCI=y
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y

#
# LED drivers
#
CONFIG_LEDS_88PM860X=y
CONFIG_LEDS_ATMEL_PWM=y
CONFIG_LEDS_LM3530=y
CONFIG_LEDS_LM3533=y
CONFIG_LEDS_LM3642=y
CONFIG_LEDS_PCA9532=y
CONFIG_LEDS_PCA9532_GPIO=y
CONFIG_LEDS_GPIO=y
CONFIG_LEDS_LP3944=y
CONFIG_LEDS_LP55XX_COMMON=y
CONFIG_LEDS_LP5521=y
CONFIG_LEDS_LP5523=y
CONFIG_LEDS_LP5562=y
CONFIG_LEDS_LP8501=y
CONFIG_LEDS_LP8788=y
CONFIG_LEDS_CLEVO_MAIL=y
CONFIG_LEDS_PCA955X=y
CONFIG_LEDS_PCA963X=y
CONFIG_LEDS_PCA9685=y
# CONFIG_LEDS_WM831X_STATUS is not set
# CONFIG_LEDS_WM8350 is not set
# CONFIG_LEDS_DA903X is not set
# CONFIG_LEDS_DA9052 is not set
CONFIG_LEDS_DAC124S085=y
CONFIG_LEDS_PWM=y
CONFIG_LEDS_REGULATOR=y
CONFIG_LEDS_BD2802=y
CONFIG_LEDS_INTEL_SS4200=y
CONFIG_LEDS_LT3593=y
# CONFIG_LEDS_ADP5520 is not set
CONFIG_LEDS_DELL_NETBOOKS=y
CONFIG_LEDS_MC13783=y
CONFIG_LEDS_TCA6507=y
# CONFIG_LEDS_MAX8997 is not set
# CONFIG_LEDS_LM355x is not set
CONFIG_LEDS_OT200=y
CONFIG_LEDS_BLINKM=y

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_ONESHOT=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_LEDS_TRIGGER_BACKLIGHT=y
CONFIG_LEDS_TRIGGER_CPU=y
CONFIG_LEDS_TRIGGER_GPIO=y
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y

#
# iptables trigger is under Netfilter config (LED target)
#
CONFIG_LEDS_TRIGGER_TRANSIENT=y
CONFIG_LEDS_TRIGGER_CAMERA=y
CONFIG_ACCESSIBILITY=y
# CONFIG_A11Y_BRAILLE_CONSOLE is not set
CONFIG_INFINIBAND=y
CONFIG_INFINIBAND_USER_MAD=y
CONFIG_INFINIBAND_USER_ACCESS=y
CONFIG_INFINIBAND_USER_MEM=y
CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_MTHCA=y
CONFIG_INFINIBAND_MTHCA_DEBUG=y
CONFIG_INFINIBAND_IPATH=y
CONFIG_INFINIBAND_QIB=y
CONFIG_INFINIBAND_QIB_DCA=y
CONFIG_INFINIBAND_AMSO1100=y
CONFIG_INFINIBAND_AMSO1100_DEBUG=y
CONFIG_INFINIBAND_CXGB3=y
CONFIG_INFINIBAND_CXGB3_DEBUG=y
CONFIG_INFINIBAND_CXGB4=y
CONFIG_MLX4_INFINIBAND=y
CONFIG_MLX5_INFINIBAND=y
CONFIG_INFINIBAND_NES=y
CONFIG_INFINIBAND_NES_DEBUG=y
CONFIG_INFINIBAND_OCRDMA=y
CONFIG_INFINIBAND_IPOIB=y
CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_IPOIB_DEBUG=y
CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
CONFIG_INFINIBAND_SRP=y
CONFIG_INFINIBAND_SRPT=y
CONFIG_INFINIBAND_ISER=y
CONFIG_INFINIBAND_ISERT=y
CONFIG_EDAC=y
CONFIG_EDAC_LEGACY_SYSFS=y
CONFIG_EDAC_DEBUG=y
CONFIG_EDAC_DECODE_MCE=y
CONFIG_EDAC_MCE_INJ=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_EDAC_GHES=y
CONFIG_EDAC_AMD64=y
CONFIG_EDAC_AMD64_ERROR_INJECTION=y
CONFIG_EDAC_E752X=y
CONFIG_EDAC_I82975X=y
CONFIG_EDAC_I3000=y
CONFIG_EDAC_I3200=y
CONFIG_EDAC_X38=y
CONFIG_EDAC_I5400=y
CONFIG_EDAC_I7CORE=y
CONFIG_EDAC_I5000=y
CONFIG_EDAC_I5100=y
CONFIG_EDAC_I7300=y
CONFIG_EDAC_SBRIDGE=y
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_HCTOSYS_DEVICE="y"
CONFIG_RTC_DEBUG=y

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
CONFIG_RTC_DRV_TEST=y

#
# I2C RTC drivers
#
CONFIG_RTC_DRV_88PM860X=y
CONFIG_RTC_DRV_88PM80X=y
CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_DS1374=y
CONFIG_RTC_DRV_DS1672=y
CONFIG_RTC_DRV_DS3232=y
CONFIG_RTC_DRV_LP8788=y
CONFIG_RTC_DRV_MAX6900=y
CONFIG_RTC_DRV_MAX8907=y
# CONFIG_RTC_DRV_MAX8925 is not set
# CONFIG_RTC_DRV_MAX8998 is not set
CONFIG_RTC_DRV_MAX8997=y
CONFIG_RTC_DRV_MAX77686=y
CONFIG_RTC_DRV_RS5C372=y
CONFIG_RTC_DRV_ISL1208=y
CONFIG_RTC_DRV_ISL12022=y
CONFIG_RTC_DRV_X1205=y
CONFIG_RTC_DRV_PALMAS=y
CONFIG_RTC_DRV_PCF2127=y
CONFIG_RTC_DRV_PCF8523=y
CONFIG_RTC_DRV_PCF8563=y
CONFIG_RTC_DRV_PCF8583=y
CONFIG_RTC_DRV_M41T80=y
CONFIG_RTC_DRV_M41T80_WDT=y
CONFIG_RTC_DRV_BQ32K=y
CONFIG_RTC_DRV_TWL4030=y
CONFIG_RTC_DRV_TPS6586X=y
# CONFIG_RTC_DRV_TPS65910 is not set
CONFIG_RTC_DRV_TPS80031=y
# CONFIG_RTC_DRV_RC5T583 is not set
CONFIG_RTC_DRV_S35390A=y
CONFIG_RTC_DRV_FM3130=y
CONFIG_RTC_DRV_RX8581=y
CONFIG_RTC_DRV_RX8025=y
CONFIG_RTC_DRV_EM3027=y
CONFIG_RTC_DRV_RV3029C2=y
CONFIG_RTC_DRV_S5M=y

#
# SPI RTC drivers
#
CONFIG_RTC_DRV_M41T93=y
CONFIG_RTC_DRV_M41T94=y
CONFIG_RTC_DRV_DS1305=y
CONFIG_RTC_DRV_DS1390=y
CONFIG_RTC_DRV_MAX6902=y
CONFIG_RTC_DRV_R9701=y
CONFIG_RTC_DRV_RS5C348=y
CONFIG_RTC_DRV_DS3234=y
CONFIG_RTC_DRV_PCF2123=y
CONFIG_RTC_DRV_RX4581=y

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_CMOS=y
CONFIG_RTC_DRV_DS1286=y
CONFIG_RTC_DRV_DS1511=y
CONFIG_RTC_DRV_DS1553=y
CONFIG_RTC_DRV_DS1742=y
# CONFIG_RTC_DRV_DA9052 is not set
CONFIG_RTC_DRV_DA9055=y
CONFIG_RTC_DRV_STK17TA8=y
CONFIG_RTC_DRV_M48T86=y
CONFIG_RTC_DRV_M48T35=y
CONFIG_RTC_DRV_M48T59=y
CONFIG_RTC_DRV_MSM6242=y
CONFIG_RTC_DRV_BQ4802=y
CONFIG_RTC_DRV_RP5C01=y
CONFIG_RTC_DRV_V3020=y
# CONFIG_RTC_DRV_DS2404 is not set
# CONFIG_RTC_DRV_WM831X is not set
# CONFIG_RTC_DRV_WM8350 is not set
# CONFIG_RTC_DRV_PCF50633 is not set
CONFIG_RTC_DRV_AB3100=y

#
# on-CPU RTC drivers
#
# CONFIG_RTC_DRV_PCAP is not set
CONFIG_RTC_DRV_MC13XXX=y
CONFIG_RTC_DRV_MOXART=y

#
# HID Sensor RTC drivers
#
CONFIG_RTC_DRV_HID_SENSOR_TIME=y
CONFIG_DMADEVICES=y
CONFIG_DMADEVICES_DEBUG=y
CONFIG_DMADEVICES_VDEBUG=y

#
# DMA Devices
#
CONFIG_INTEL_MID_DMAC=y
CONFIG_INTEL_IOATDMA=y
CONFIG_DW_DMAC_CORE=y
CONFIG_DW_DMAC=y
CONFIG_DW_DMAC_PCI=y
CONFIG_TIMB_DMA=y
CONFIG_PCH_DMA=y
CONFIG_DMA_ENGINE=y
CONFIG_DMA_ACPI=y

#
# DMA Clients
#
CONFIG_NET_DMA=y
CONFIG_ASYNC_TX_DMA=y
CONFIG_DMATEST=y
CONFIG_DCA=y
CONFIG_AUXDISPLAY=y
CONFIG_UIO=y
CONFIG_UIO_CIF=y
CONFIG_UIO_PDRV_GENIRQ=y
CONFIG_UIO_DMEM_GENIRQ=y
CONFIG_UIO_AEC=y
CONFIG_UIO_SERCOS3=y
CONFIG_UIO_PCI_GENERIC=y
CONFIG_UIO_NETX=y
CONFIG_UIO_MF624=y
CONFIG_VFIO_IOMMU_TYPE1=y
CONFIG_VFIO=y
CONFIG_VFIO_PCI=y
CONFIG_VFIO_PCI_VGA=y
CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO=y

#
# Virtio drivers
#
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y

#
# Microsoft Hyper-V guest support
#
CONFIG_HYPERV=y
CONFIG_HYPERV_UTILS=y
CONFIG_HYPERV_BALLOON=y

#
# Xen driver support
#
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SELFBALLOONING=y
CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XEN_BACKEND=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_XENBUS_FRONTEND=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_GRANT_DEV_ALLOC=y
CONFIG_SWIOTLB_XEN=y
CONFIG_XEN_TMEM=m
CONFIG_XEN_PCIDEV_BACKEND=y
CONFIG_XEN_PRIVCMD=y
CONFIG_XEN_ACPI_PROCESSOR=y
CONFIG_XEN_MCE_LOG=y
CONFIG_XEN_HAVE_PVMMU=y
CONFIG_STAGING=y
CONFIG_ET131X=y
CONFIG_SLICOSS=y
CONFIG_USBIP_CORE=y
# CONFIG_USBIP_VHCI_HCD is not set
CONFIG_USBIP_HOST=y
CONFIG_USBIP_DEBUG=y
CONFIG_W35UND=y
CONFIG_PRISM2_USB=y
CONFIG_ECHO=y
CONFIG_COMEDI=m
CONFIG_COMEDI_DEBUG=y
CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=y
CONFIG_COMEDI_KCOMEDILIB=m
CONFIG_COMEDI_BOND=m
CONFIG_COMEDI_TEST=m
CONFIG_COMEDI_PARPORT=m
CONFIG_COMEDI_SERIAL2002=m
CONFIG_COMEDI_SKEL=m
CONFIG_COMEDI_ISA_DRIVERS=y
CONFIG_COMEDI_PCL711=m
CONFIG_COMEDI_PCL724=m
CONFIG_COMEDI_PCL726=m
CONFIG_COMEDI_PCL730=m
CONFIG_COMEDI_PCL812=m
CONFIG_COMEDI_PCL816=m
CONFIG_COMEDI_PCL818=m
CONFIG_COMEDI_PCM3724=m
CONFIG_COMEDI_AMPLC_DIO200_ISA=m
CONFIG_COMEDI_AMPLC_PC236_ISA=m
CONFIG_COMEDI_AMPLC_PC263_ISA=m
CONFIG_COMEDI_RTI800=m
CONFIG_COMEDI_RTI802=m
CONFIG_COMEDI_DAS16M1=m
CONFIG_COMEDI_DAS08_ISA=m
CONFIG_COMEDI_DAS16=m
CONFIG_COMEDI_DAS800=m
CONFIG_COMEDI_DAS1800=m
CONFIG_COMEDI_DAS6402=m
CONFIG_COMEDI_DT2801=m
CONFIG_COMEDI_DT2811=m
CONFIG_COMEDI_DT2814=m
CONFIG_COMEDI_DT2815=m
CONFIG_COMEDI_DT2817=m
CONFIG_COMEDI_DT282X=m
CONFIG_COMEDI_DMM32AT=m
CONFIG_COMEDI_UNIOXX5=m
CONFIG_COMEDI_FL512=m
CONFIG_COMEDI_AIO_AIO12_8=m
CONFIG_COMEDI_AIO_IIRO_16=m
CONFIG_COMEDI_II_PCI20KC=m
CONFIG_COMEDI_C6XDIGIO=m
CONFIG_COMEDI_MPC624=m
CONFIG_COMEDI_ADQ12B=m
CONFIG_COMEDI_NI_AT_A2150=m
CONFIG_COMEDI_NI_AT_AO=m
CONFIG_COMEDI_NI_ATMIO=m
CONFIG_COMEDI_NI_ATMIO16D=m
CONFIG_COMEDI_NI_LABPC_ISA=m
CONFIG_COMEDI_PCMAD=m
CONFIG_COMEDI_PCMDA12=m
CONFIG_COMEDI_PCMMIO=m
CONFIG_COMEDI_PCMUIO=m
CONFIG_COMEDI_MULTIQ3=m
CONFIG_COMEDI_POC=m
CONFIG_COMEDI_S526=m
CONFIG_COMEDI_PCI_DRIVERS=y
CONFIG_COMEDI_8255_PCI=m
CONFIG_COMEDI_ADDI_WATCHDOG=m
CONFIG_COMEDI_ADDI_APCI_035=m
CONFIG_COMEDI_ADDI_APCI_1032=m
CONFIG_COMEDI_ADDI_APCI_1500=m
CONFIG_COMEDI_ADDI_APCI_1516=m
CONFIG_COMEDI_ADDI_APCI_1564=m
CONFIG_COMEDI_ADDI_APCI_16XX=m
CONFIG_COMEDI_ADDI_APCI_2032=m
CONFIG_COMEDI_ADDI_APCI_2200=m
CONFIG_COMEDI_ADDI_APCI_3120=m
CONFIG_COMEDI_ADDI_APCI_3501=m
CONFIG_COMEDI_ADDI_APCI_3XXX=m
CONFIG_COMEDI_ADL_PCI6208=m
CONFIG_COMEDI_ADL_PCI7X3X=m
CONFIG_COMEDI_ADL_PCI8164=m
CONFIG_COMEDI_ADL_PCI9111=m
CONFIG_COMEDI_ADL_PCI9118=m
CONFIG_COMEDI_ADV_PCI1710=m
CONFIG_COMEDI_ADV_PCI1723=m
CONFIG_COMEDI_ADV_PCI1724=m
CONFIG_COMEDI_ADV_PCI_DIO=m
CONFIG_COMEDI_AMPLC_DIO200_PCI=m
CONFIG_COMEDI_AMPLC_PC236_PCI=m
CONFIG_COMEDI_AMPLC_PC263_PCI=m
CONFIG_COMEDI_AMPLC_PCI224=m
CONFIG_COMEDI_AMPLC_PCI230=m
CONFIG_COMEDI_CONTEC_PCI_DIO=m
CONFIG_COMEDI_DAS08_PCI=m
CONFIG_COMEDI_DT3000=m
CONFIG_COMEDI_DYNA_PCI10XX=m
CONFIG_COMEDI_GSC_HPDI=m
CONFIG_COMEDI_ICP_MULTI=m
CONFIG_COMEDI_DAQBOARD2000=m
CONFIG_COMEDI_JR3_PCI=m
CONFIG_COMEDI_KE_COUNTER=m
CONFIG_COMEDI_CB_PCIDAS64=m
CONFIG_COMEDI_CB_PCIDAS=m
CONFIG_COMEDI_CB_PCIDDA=m
CONFIG_COMEDI_CB_PCIMDAS=m
CONFIG_COMEDI_CB_PCIMDDA=m
CONFIG_COMEDI_ME4000=m
CONFIG_COMEDI_ME_DAQ=m
CONFIG_COMEDI_NI_6527=m
CONFIG_COMEDI_NI_65XX=m
CONFIG_COMEDI_NI_660X=m
CONFIG_COMEDI_NI_670X=m
CONFIG_COMEDI_NI_LABPC_PCI=m
CONFIG_COMEDI_NI_PCIDIO=m
CONFIG_COMEDI_NI_PCIMIO=m
CONFIG_COMEDI_RTD520=m
CONFIG_COMEDI_S626=m
CONFIG_COMEDI_MITE=m
CONFIG_COMEDI_NI_TIOCMD=m
CONFIG_COMEDI_PCMCIA_DRIVERS=y
CONFIG_COMEDI_CB_DAS16_CS=m
CONFIG_COMEDI_DAS08_CS=m
CONFIG_COMEDI_NI_DAQ_700_CS=m
CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
CONFIG_COMEDI_NI_LABPC_CS=m
CONFIG_COMEDI_NI_MIO_CS=m
CONFIG_COMEDI_QUATECH_DAQP_CS=m
CONFIG_COMEDI_USB_DRIVERS=y
CONFIG_COMEDI_DT9812=m
CONFIG_COMEDI_USBDUX=m
CONFIG_COMEDI_USBDUXFAST=m
CONFIG_COMEDI_USBDUXSIGMA=m
CONFIG_COMEDI_VMK80XX=m
CONFIG_COMEDI_8255=m
CONFIG_COMEDI_FC=m
CONFIG_COMEDI_AMPLC_DIO200=m
CONFIG_COMEDI_AMPLC_PC236=m
CONFIG_COMEDI_DAS08=m
CONFIG_COMEDI_NI_LABPC=m
CONFIG_COMEDI_NI_LABPC_ISADMA=m
CONFIG_COMEDI_NI_TIO=m
CONFIG_R8187SE=m
CONFIG_RTL8192U=m
CONFIG_RTLLIB=m
CONFIG_RTLLIB_CRYPTO_CCMP=m
CONFIG_RTLLIB_CRYPTO_TKIP=m
CONFIG_RTLLIB_CRYPTO_WEP=m
CONFIG_RTL8192E=m
CONFIG_R8712U=y
CONFIG_R8188EU=y
CONFIG_88EU_AP_MODE=y
CONFIG_88EU_P2P=y
CONFIG_RTS5139=y
CONFIG_RTS5139_DEBUG=y
CONFIG_RTS5208=y
CONFIG_RTS5208_DEBUG=y
CONFIG_TRANZPORT=y
CONFIG_IDE_PHISON=y
CONFIG_USB_SERIAL_QUATECH2=y
CONFIG_VT6655=m
CONFIG_VT6656=m
CONFIG_DX_SEP=y

#
# IIO staging drivers
#

#
# Accelerometers
#
CONFIG_ADIS16201=y
CONFIG_ADIS16203=y
CONFIG_ADIS16204=y
CONFIG_ADIS16209=y
CONFIG_ADIS16220=y
CONFIG_ADIS16240=y
CONFIG_LIS3L02DQ=y
CONFIG_SCA3000=y

#
# Analog to digital converters
#
CONFIG_AD7291=y
CONFIG_AD7606=y
CONFIG_AD7606_IFACE_PARALLEL=y
CONFIG_AD7606_IFACE_SPI=y
CONFIG_AD799X=y
CONFIG_AD799X_RING_BUFFER=y
CONFIG_AD7780=y
CONFIG_AD7816=y
CONFIG_AD7192=y
CONFIG_AD7280=y

#
# Analog digital bi-direction converters
#
CONFIG_ADT7316=y
CONFIG_ADT7316_SPI=y
CONFIG_ADT7316_I2C=y

#
# Capacitance to digital converters
#
CONFIG_AD7150=y
CONFIG_AD7152=y
CONFIG_AD7746=y

#
# Direct Digital Synthesis
#
CONFIG_AD5930=y
CONFIG_AD9832=y
CONFIG_AD9834=y
CONFIG_AD9850=y
CONFIG_AD9852=y
CONFIG_AD9910=y
CONFIG_AD9951=y

#
# Digital gyroscope sensors
#
CONFIG_ADIS16060=y

#
# Network Analyzer, Impedance Converters
#
CONFIG_AD5933=y

#
# Light sensors
#
CONFIG_SENSORS_ISL29018=y
CONFIG_SENSORS_ISL29028=y
CONFIG_TSL2583=y
CONFIG_TSL2x7x=y

#
# Magnetometer sensors
#
CONFIG_SENSORS_HMC5843=y

#
# Active energy metering IC
#
CONFIG_ADE7753=y
CONFIG_ADE7754=y
CONFIG_ADE7758=y
CONFIG_ADE7759=y
CONFIG_ADE7854=y
CONFIG_ADE7854_I2C=y
CONFIG_ADE7854_SPI=y

#
# Resolver to digital converters
#
CONFIG_AD2S90=y
CONFIG_AD2S1200=y
CONFIG_AD2S1210=y

#
# Triggers - standalone
#
CONFIG_IIO_PERIODIC_RTC_TRIGGER=y
CONFIG_IIO_DUMMY_EVGEN=y
CONFIG_IIO_SIMPLE_DUMMY=y
CONFIG_IIO_SIMPLE_DUMMY_EVENTS=y
CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y
CONFIG_ZSMALLOC=y
CONFIG_ZRAM=y
CONFIG_ZRAM_DEBUG=y
CONFIG_WLAGS49_H2=y
CONFIG_WLAGS49_H25=y
CONFIG_FB_SM7XX=y
CONFIG_CRYSTALHD=y
CONFIG_CXT1E1=y
CONFIG_SBE_PMCC4_NCOMM=y
CONFIG_FB_XGI=y
CONFIG_ACPI_QUICKSTART=y
CONFIG_SBE_2T3E3=y
CONFIG_USB_ENESTORAGE=m
CONFIG_BCM_WIMAX=y
CONFIG_FT1000=y
CONFIG_FT1000_USB=y
CONFIG_FT1000_PCMCIA=y

#
# Speakup console speech
#
CONFIG_SPEAKUP=y
CONFIG_SPEAKUP_SYNTH_ACNTSA=y
CONFIG_SPEAKUP_SYNTH_APOLLO=y
CONFIG_SPEAKUP_SYNTH_AUDPTR=y
CONFIG_SPEAKUP_SYNTH_BNS=y
CONFIG_SPEAKUP_SYNTH_DECTLK=y
CONFIG_SPEAKUP_SYNTH_DECEXT=y
CONFIG_SPEAKUP_SYNTH_LTLK=y
CONFIG_SPEAKUP_SYNTH_SOFT=y
CONFIG_SPEAKUP_SYNTH_SPKOUT=y
CONFIG_SPEAKUP_SYNTH_TXPRT=y
CONFIG_SPEAKUP_SYNTH_DUMMY=y
CONFIG_TOUCHSCREEN_CLEARPAD_TM1217=y
CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=y
CONFIG_STAGING_MEDIA=y
CONFIG_DVB_AS102=y
CONFIG_DVB_CXD2099=y
CONFIG_VIDEO_DT3155=y
CONFIG_DT3155_CCIR=y
CONFIG_DT3155_STREAMING=y
CONFIG_USB_MSI3101=y

#
# Android
#
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ASHMEM=y
CONFIG_ANDROID_LOGGER=y
CONFIG_ANDROID_TIMED_OUTPUT=y
CONFIG_ANDROID_TIMED_GPIO=y
# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
CONFIG_ANDROID_INTF_ALARM_DEV=y
CONFIG_SYNC=y
CONFIG_SW_SYNC=y
CONFIG_SW_SYNC_USER=y
CONFIG_USB_WPAN_HCD=y
CONFIG_WIMAX_GDM72XX=y
CONFIG_WIMAX_GDM72XX_QOS=y
CONFIG_WIMAX_GDM72XX_K_MODE=y
CONFIG_WIMAX_GDM72XX_WIMAX2=y
CONFIG_WIMAX_GDM72XX_USB=y
# CONFIG_WIMAX_GDM72XX_SDIO is not set
CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_LTE_GDM724X=m
CONFIG_NET_VENDOR_SILICOM=y
CONFIG_SBYPASS=m
CONFIG_BPCTL=m
CONFIG_CED1401=y
CONFIG_DGRP=y
CONFIG_FIREWIRE_SERIAL=y
# CONFIG_MTD_SPINAND_MT29F is not set
CONFIG_USB_DWC2=y
CONFIG_USB_DWC2_DEBUG=y
CONFIG_USB_DWC2_VERBOSE=y
CONFIG_USB_DWC2_TRACK_MISSED_SOFS=y
CONFIG_USB_DWC2_DEBUG_PERIODIC=y
CONFIG_LUSTRE_FS=m
CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER=8192
CONFIG_LUSTRE_DEBUG_EXPENSIVE_CHECK=y
CONFIG_LUSTRE_LLITE_LLOOP=y
CONFIG_LNET=m
CONFIG_LNET_MAX_PAYLOAD=1048576
CONFIG_LNET_SELFTEST=m
CONFIG_LNET_XPRT_IB=m
CONFIG_USB_BTMTK=m
CONFIG_XILLYBUS=y
CONFIG_XILLYBUS_PCIE=y
CONFIG_DGNC=y
CONFIG_DGAP=y
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACER_WMI=y
CONFIG_ACERHDF=y
CONFIG_ASUS_LAPTOP=y
CONFIG_DELL_LAPTOP=y
CONFIG_DELL_WMI=y
CONFIG_DELL_WMI_AIO=y
CONFIG_FUJITSU_LAPTOP=y
CONFIG_FUJITSU_LAPTOP_DEBUG=y
CONFIG_FUJITSU_TABLET=y
CONFIG_AMILO_RFKILL=y
CONFIG_HP_ACCEL=y
CONFIG_HP_WMI=y
CONFIG_MSI_LAPTOP=y
CONFIG_PANASONIC_LAPTOP=y
CONFIG_COMPAL_LAPTOP=y
CONFIG_SONY_LAPTOP=y
CONFIG_SONYPI_COMPAT=y
CONFIG_IDEAPAD_LAPTOP=y
CONFIG_THINKPAD_ACPI=y
CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y
CONFIG_THINKPAD_ACPI_DEBUG=y
CONFIG_THINKPAD_ACPI_UNSAFE_LEDS=y
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
CONFIG_SENSORS_HDAPS=y
CONFIG_INTEL_MENLOW=y
CONFIG_EEEPC_LAPTOP=y
CONFIG_ASUS_WMI=y
CONFIG_ASUS_NB_WMI=y
CONFIG_EEEPC_WMI=y
CONFIG_ACPI_WMI=y
CONFIG_MSI_WMI=y
CONFIG_TOPSTAR_LAPTOP=y
CONFIG_ACPI_TOSHIBA=y
CONFIG_TOSHIBA_BT_RFKILL=y
CONFIG_ACPI_CMPC=y
CONFIG_INTEL_IPS=y
CONFIG_IBM_RTL=y
CONFIG_XO15_EBOOK=y
CONFIG_SAMSUNG_LAPTOP=y
CONFIG_MXM_WMI=y
CONFIG_INTEL_OAKTRAIL=y
CONFIG_SAMSUNG_Q10=y
CONFIG_APPLE_GMUX=y
CONFIG_INTEL_RST=y
CONFIG_INTEL_SMARTCONNECT=y
CONFIG_PVPANIC=y
CONFIG_CHROME_PLATFORMS=y
CONFIG_CHROMEOS_LAPTOP=y
CONFIG_CHROMEOS_PSTORE=y
CONFIG_CLKDEV_LOOKUP=y
CONFIG_HAVE_CLK_PREPARE=y
CONFIG_COMMON_CLK=y

#
# Common Clock Framework
#
CONFIG_COMMON_CLK_DEBUG=y
CONFIG_COMMON_CLK_WM831X=y
CONFIG_COMMON_CLK_MAX77686=y
CONFIG_COMMON_CLK_SI5351=y
CONFIG_COMMON_CLK_S2MPS11=y
CONFIG_CLK_TWL6040=y

#
# Hardware Spinlock drivers
#
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
CONFIG_CLKBLD_I8253=y
CONFIG_MAILBOX=y
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y
CONFIG_AMD_IOMMU=y
CONFIG_AMD_IOMMU_STATS=y
CONFIG_AMD_IOMMU_V2=y
CONFIG_DMAR_TABLE=y
CONFIG_INTEL_IOMMU=y
CONFIG_INTEL_IOMMU_DEFAULT_ON=y
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
CONFIG_IRQ_REMAP=y

#
# Remoteproc drivers
#
CONFIG_REMOTEPROC=y
CONFIG_STE_MODEM_RPROC=y

#
# Rpmsg drivers
#
CONFIG_PM_DEVFREQ=y

#
# DEVFREQ Governors
#
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
CONFIG_DEVFREQ_GOV_POWERSAVE=y
CONFIG_DEVFREQ_GOV_USERSPACE=y

#
# DEVFREQ Drivers
#
CONFIG_EXTCON=y

#
# Extcon Device Drivers
#
CONFIG_EXTCON_GPIO=y
CONFIG_EXTCON_ADC_JACK=y
CONFIG_EXTCON_MAX77693=y
CONFIG_EXTCON_MAX8997=y
CONFIG_EXTCON_PALMAS=y
CONFIG_MEMORY=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_BUFFER_CB=y
CONFIG_IIO_KFIFO_BUF=y
CONFIG_IIO_TRIGGERED_BUFFER=y
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2

#
# Accelerometers
#
CONFIG_BMA180=y
CONFIG_HID_SENSOR_ACCEL_3D=y
CONFIG_IIO_ST_ACCEL_3AXIS=y
CONFIG_IIO_ST_ACCEL_I2C_3AXIS=y
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=y
CONFIG_KXSD9=y

#
# Analog to digital converters
#
CONFIG_AD_SIGMA_DELTA=y
CONFIG_AD7266=y
CONFIG_AD7298=y
CONFIG_AD7476=y
CONFIG_AD7791=y
CONFIG_AD7793=y
CONFIG_AD7887=y
CONFIG_AD7923=y
CONFIG_LP8788_ADC=y
CONFIG_MAX1363=y
CONFIG_MCP320X=y
CONFIG_MCP3422=y
CONFIG_NAU7802=y
CONFIG_TI_ADC081C=y
CONFIG_TI_AM335X_ADC=y
CONFIG_TWL6030_GPADC=y
CONFIG_VIPERBOARD_ADC=y

#
# Amplifiers
#
CONFIG_AD8366=y

#
# Hid Sensor IIO Common
#
CONFIG_HID_SENSOR_IIO_COMMON=y
CONFIG_HID_SENSOR_IIO_TRIGGER=y
CONFIG_IIO_ST_SENSORS_I2C=y
CONFIG_IIO_ST_SENSORS_SPI=y
CONFIG_IIO_ST_SENSORS_CORE=y

#
# Digital to analog converters
#
CONFIG_AD5064=y
CONFIG_AD5360=y
CONFIG_AD5380=y
CONFIG_AD5421=y
CONFIG_AD5446=y
CONFIG_AD5449=y
CONFIG_AD5504=y
CONFIG_AD5624R_SPI=y
CONFIG_AD5686=y
CONFIG_AD5755=y
CONFIG_AD5764=y
CONFIG_AD5791=y
CONFIG_AD7303=y
CONFIG_MAX517=y
CONFIG_MCP4725=y

#
# Frequency Synthesizers DDS/PLL
#

#
# Clock Generator/Distribution
#
CONFIG_AD9523=y

#
# Phase-Locked Loop (PLL) frequency synthesizers
#
CONFIG_ADF4350=y

#
# Digital gyroscope sensors
#
CONFIG_ADIS16080=y
CONFIG_ADIS16130=y
CONFIG_ADIS16136=y
CONFIG_ADIS16260=y
CONFIG_ADXRS450=y
CONFIG_HID_SENSOR_GYRO_3D=y
CONFIG_IIO_ST_GYRO_3AXIS=y
CONFIG_IIO_ST_GYRO_I2C_3AXIS=y
CONFIG_IIO_ST_GYRO_SPI_3AXIS=y
CONFIG_ITG3200=y

#
# Inertial measurement units
#
CONFIG_ADIS16400=y
CONFIG_ADIS16480=y
CONFIG_IIO_ADIS_LIB=y
CONFIG_IIO_ADIS_LIB_BUFFER=y
CONFIG_INV_MPU6050_IIO=y

#
# Light sensors
#
CONFIG_ADJD_S311=y
CONFIG_APDS9300=y
CONFIG_CM36651=y
CONFIG_GP2AP020A00F=y
CONFIG_HID_SENSOR_ALS=y
CONFIG_SENSORS_LM3533=y
CONFIG_TCS3472=y
CONFIG_SENSORS_TSL2563=y
CONFIG_TSL4531=y
CONFIG_VCNL4000=y

#
# Magnetometer sensors
#
CONFIG_AK8975=y
CONFIG_MAG3110=y
CONFIG_HID_SENSOR_MAGNETOMETER_3D=y
CONFIG_IIO_ST_MAGN_3AXIS=y
CONFIG_IIO_ST_MAGN_I2C_3AXIS=y
CONFIG_IIO_ST_MAGN_SPI_3AXIS=y

#
# Triggers - standalone
#
CONFIG_IIO_INTERRUPT_TRIGGER=y
CONFIG_IIO_SYSFS_TRIGGER=y

#
# Pressure sensors
#
CONFIG_MPL3115=y
CONFIG_IIO_ST_PRESS=y
CONFIG_IIO_ST_PRESS_I2C=y
CONFIG_IIO_ST_PRESS_SPI=y

#
# Temperature sensors
#
CONFIG_TMP006=y
CONFIG_NTB=y
CONFIG_VME_BUS=y

#
# VME Bridge Drivers
#
CONFIG_VME_CA91CX42=y
CONFIG_VME_TSI148=y

#
# VME Board Drivers
#
CONFIG_VMIVME_7805=y

#
# VME Device Drivers
#
CONFIG_VME_USER=y
CONFIG_VME_PIO2=y
CONFIG_PWM=y
CONFIG_PWM_SYSFS=y
CONFIG_PWM_TWL=y
CONFIG_PWM_TWL_LED=y
CONFIG_IPACK_BUS=y
CONFIG_BOARD_TPCI200=y
CONFIG_SERIAL_IPOCTAL=y
CONFIG_RESET_CONTROLLER=y
CONFIG_FMC=y
CONFIG_FMC_FAKEDEV=y
CONFIG_FMC_TRIVIAL=y
CONFIG_FMC_WRITE_EEPROM=y
CONFIG_FMC_CHARDEV=y

#
# PHY Subsystem
#
CONFIG_GENERIC_PHY=y
CONFIG_PHY_EXYNOS_MIPI_VIDEO=y
CONFIG_POWERCAP=y
CONFIG_INTEL_RAPL=y

#
# Firmware Drivers
#
CONFIG_EDD=y
# CONFIG_EDD_OFF is not set
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_DELL_RBU=y
CONFIG_DCDBAS=y
CONFIG_DMIID=y
CONFIG_DMI_SYSFS=y
CONFIG_ISCSI_IBFT_FIND=y
CONFIG_ISCSI_IBFT=y
CONFIG_GOOGLE_FIRMWARE=y

#
# Google Firmware Drivers
#
CONFIG_GOOGLE_SMI=y
CONFIG_GOOGLE_MEMCONSOLE=y

#
# EFI (Extensible Firmware Interface) Support
#
CONFIG_EFI_VARS=y
CONFIG_EFI_VARS_PSTORE=y
CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y
CONFIG_UEFI_CPER=y

#
# File systems
#
CONFIG_DCACHE_WORD_ACCESS=y
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT2_FS_XIP=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_DEBUG=y
CONFIG_FS_XIP=y
CONFIG_JBD=y
CONFIG_JBD_DEBUG=y
CONFIG_JBD2=y
CONFIG_JBD2_DEBUG=y
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
CONFIG_REISERFS_CHECK=y
CONFIG_REISERFS_PROC_INFO=y
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
CONFIG_JFS_FS=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_JFS_SECURITY=y
CONFIG_JFS_DEBUG=y
CONFIG_JFS_STATISTICS=y
CONFIG_XFS_FS=y
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
CONFIG_XFS_DEBUG=y
CONFIG_GFS2_FS=y
CONFIG_GFS2_FS_LOCKING_DLM=y
CONFIG_OCFS2_FS=y
CONFIG_OCFS2_FS_O2CB=y
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=y
CONFIG_OCFS2_FS_STATS=y
CONFIG_OCFS2_DEBUG_MASKLOG=y
CONFIG_OCFS2_DEBUG_FS=y
CONFIG_BTRFS_FS=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_BTRFS_FS_CHECK_INTEGRITY=y
CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y
CONFIG_BTRFS_DEBUG=y
CONFIG_BTRFS_ASSERT=y
CONFIG_NILFS2_FS=y
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_PRINT_QUOTA_WARNING is not set
CONFIG_QUOTA_DEBUG=y
CONFIG_QUOTA_TREE=y
CONFIG_QFMT_V1=y
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_QUOTACTL_COMPAT=y
CONFIG_AUTOFS4_FS=y
CONFIG_FUSE_FS=y
CONFIG_CUSE=y
CONFIG_GENERIC_ACL=y

#
# Caches
#
CONFIG_FSCACHE=y
CONFIG_FSCACHE_STATS=y
CONFIG_FSCACHE_HISTOGRAM=y
CONFIG_FSCACHE_DEBUG=y
CONFIG_FSCACHE_OBJECT_LIST=y
CONFIG_CACHEFILES=y
CONFIG_CACHEFILES_DEBUG=y
CONFIG_CACHEFILES_HISTOGRAM=y

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=y
CONFIG_UDF_NLS=y

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=y
CONFIG_NTFS_DEBUG=y
CONFIG_NTFS_RW=y

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_VMCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_CONFIGFS_FS=y
CONFIG_MISC_FILESYSTEMS=y
CONFIG_ADFS_FS=y
CONFIG_ADFS_FS_RW=y
CONFIG_AFFS_FS=y
CONFIG_ECRYPT_FS=y
CONFIG_ECRYPT_FS_MESSAGING=y
CONFIG_HFS_FS=y
CONFIG_HFSPLUS_FS=y
CONFIG_HFSPLUS_FS_POSIX_ACL=y
CONFIG_BEFS_FS=y
CONFIG_BEFS_DEBUG=y
CONFIG_BFS_FS=y
CONFIG_EFS_FS=y
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_FS_WBUF_VERIFY=y
CONFIG_JFFS2_SUMMARY=y
CONFIG_JFFS2_FS_XATTR=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_SECURITY=y
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_UBIFS_FS=y
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_LOGFS=y
CONFIG_CRAMFS=y
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_FILE_CACHE=y
# CONFIG_SQUASHFS_FILE_DIRECT is not set
# CONFIG_SQUASHFS_DECOMP_SINGLE is not set
# CONFIG_SQUASHFS_DECOMP_MULTI is not set
CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_ZLIB=y
CONFIG_SQUASHFS_LZO=y
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
CONFIG_VXFS_FS=y
CONFIG_MINIX_FS=y
CONFIG_OMFS_FS=y
CONFIG_HPFS_FS=y
CONFIG_QNX4FS_FS=y
CONFIG_QNX6FS_FS=y
CONFIG_QNX6FS_DEBUG=y
CONFIG_ROMFS_FS=y
# CONFIG_ROMFS_BACKED_BY_BLOCK is not set
# CONFIG_ROMFS_BACKED_BY_MTD is not set
CONFIG_ROMFS_BACKED_BY_BOTH=y
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_ROMFS_ON_MTD=y
CONFIG_PSTORE=y
CONFIG_PSTORE_CONSOLE=y
# CONFIG_PSTORE_FTRACE is not set
CONFIG_PSTORE_RAM=y
CONFIG_SYSV_FS=y
CONFIG_UFS_FS=y
CONFIG_UFS_FS_WRITE=y
CONFIG_UFS_DEBUG=y
CONFIG_EXOFS_FS=y
CONFIG_EXOFS_DEBUG=y
CONFIG_F2FS_FS=y
CONFIG_F2FS_STAT_FS=y
CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_CHECK_FS=y
CONFIG_EFIVAR_FS=y
CONFIG_ORE=y
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V2=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_NFS_SWAP=y
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_PNFS_FILE_LAYOUT=y
CONFIG_PNFS_BLOCK=y
CONFIG_PNFS_OBJLAYOUT=y
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="y"
CONFIG_NFS_V4_1_MIGRATION=y
CONFIG_NFS_V4_SECURITY_LABEL=y
CONFIG_ROOT_NFS=y
CONFIG_NFS_FSCACHE=y
CONFIG_NFS_USE_LEGACY_DNS=y
CONFIG_NFS_DEBUG=y
CONFIG_NFSD=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
CONFIG_NFSD_V4_SECURITY_LABEL=y
CONFIG_NFSD_FAULT_INJECTION=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_SUNRPC_BACKCHANNEL=y
CONFIG_SUNRPC_XPRT_RDMA=y
CONFIG_SUNRPC_SWAP=y
CONFIG_RPCSEC_GSS_KRB5=y
CONFIG_SUNRPC_DEBUG=y
CONFIG_CEPH_FS=y
CONFIG_CEPH_FSCACHE=y
CONFIG_CIFS=y
CONFIG_CIFS_STATS=y
CONFIG_CIFS_STATS2=y
CONFIG_CIFS_WEAK_PW_HASH=y
CONFIG_CIFS_UPCALL=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
CONFIG_CIFS_ACL=y
CONFIG_CIFS_DEBUG=y
CONFIG_CIFS_DEBUG2=y
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_SMB2=y
CONFIG_CIFS_FSCACHE=y
CONFIG_NCP_FS=y
CONFIG_NCPFS_PACKET_SIGNING=y
CONFIG_NCPFS_IOCTL_LOCKING=y
CONFIG_NCPFS_STRONG=y
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_OS2_NS=y
CONFIG_NCPFS_SMALLDOS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_EXTRAS=y
CONFIG_CODA_FS=y
CONFIG_AFS_FS=y
CONFIG_AFS_DEBUG=y
CONFIG_AFS_FSCACHE=y
CONFIG_9P_FS=y
CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_9P_FS_SECURITY=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_737=y
CONFIG_NLS_CODEPAGE_775=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_CODEPAGE_852=y
CONFIG_NLS_CODEPAGE_855=y
CONFIG_NLS_CODEPAGE_857=y
CONFIG_NLS_CODEPAGE_860=y
CONFIG_NLS_CODEPAGE_861=y
CONFIG_NLS_CODEPAGE_862=y
CONFIG_NLS_CODEPAGE_863=y
CONFIG_NLS_CODEPAGE_864=y
CONFIG_NLS_CODEPAGE_865=y
CONFIG_NLS_CODEPAGE_866=y
CONFIG_NLS_CODEPAGE_869=y
CONFIG_NLS_CODEPAGE_936=y
CONFIG_NLS_CODEPAGE_950=y
CONFIG_NLS_CODEPAGE_932=y
CONFIG_NLS_CODEPAGE_949=y
CONFIG_NLS_CODEPAGE_874=y
CONFIG_NLS_ISO8859_8=y
CONFIG_NLS_CODEPAGE_1250=y
CONFIG_NLS_CODEPAGE_1251=y
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_ISO8859_2=y
CONFIG_NLS_ISO8859_3=y
CONFIG_NLS_ISO8859_4=y
CONFIG_NLS_ISO8859_5=y
CONFIG_NLS_ISO8859_6=y
CONFIG_NLS_ISO8859_7=y
CONFIG_NLS_ISO8859_9=y
CONFIG_NLS_ISO8859_13=y
CONFIG_NLS_ISO8859_14=y
CONFIG_NLS_ISO8859_15=y
CONFIG_NLS_KOI8_R=y
CONFIG_NLS_KOI8_U=y
CONFIG_NLS_MAC_ROMAN=y
CONFIG_NLS_MAC_CELTIC=y
CONFIG_NLS_MAC_CENTEURO=y
CONFIG_NLS_MAC_CROATIAN=y
CONFIG_NLS_MAC_CYRILLIC=y
CONFIG_NLS_MAC_GAELIC=y
CONFIG_NLS_MAC_GREEK=y
CONFIG_NLS_MAC_ICELAND=y
CONFIG_NLS_MAC_INUIT=y
CONFIG_NLS_MAC_ROMANIAN=y
CONFIG_NLS_MAC_TURKISH=y
CONFIG_NLS_UTF8=y
CONFIG_DLM=y
CONFIG_DLM_DEBUG=y

#
# Kernel hacking
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
# CONFIG_BOOT_PRINTK_DELAY is not set
CONFIG_DYNAMIC_DEBUG=y

#
# Compile-time checks and compiler options
#
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_INFO_REDUCED is not set
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=2048
CONFIG_STRIP_ASM_SYMS=y
CONFIG_READABLE_ASM=y
CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_SECTION_MISMATCH=y
CONFIG_ARCH_WANT_FRAME_POINTERS=y
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_DEBUG_KERNEL=y

#
# Memory Debugging
#
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_WANT_PAGE_DEBUG_FLAGS=y
CONFIG_PAGE_GUARD=y
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_SELFTEST=y
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_SLUB_STATS=y
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
# CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF is not set
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_RB=y
CONFIG_DEBUG_VIRTUAL=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=y
CONFIG_DEBUG_PER_CPU_MAPS=y
CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_HAVE_ARCH_KMEMCHECK=y
CONFIG_DEBUG_SHIRQ=y

#
# Debug Lockups and Hangs
#
CONFIG_LOCKUP_DETECTOR=y
CONFIG_HARDLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=1
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1
# CONFIG_PANIC_ON_OOPS is not set
CONFIG_PANIC_ON_OOPS_VALUE=0
CONFIG_PANIC_TIMEOUT=0
CONFIG_SCHED_DEBUG=y
CONFIG_SCHEDSTATS=y
CONFIG_TIMER_STATS=y
CONFIG_DEBUG_PREEMPT=y

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_PI_LIST=y
CONFIG_RT_MUTEX_TESTER=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=y
CONFIG_LOCKDEP=y
CONFIG_LOCK_STAT=y
CONFIG_DEBUG_LOCKDEP=y
CONFIG_DEBUG_ATOMIC_SLEEP=y
CONFIG_DEBUG_LOCKING_API_SELFTESTS=y
CONFIG_TRACE_IRQFLAGS=y
CONFIG_STACKTRACE=y
CONFIG_DEBUG_KOBJECT=y
CONFIG_DEBUG_KOBJECT_RELEASE=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_WRITECOUNT=y
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_DEBUG_CREDENTIALS=y

#
# RCU Debugging
#
CONFIG_PROVE_RCU=y
CONFIG_PROVE_RCU_REPEATEDLY=y
CONFIG_PROVE_RCU_DELAY=y
CONFIG_SPARSE_RCU_POINTER=y
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=60
CONFIG_RCU_CPU_STALL_VERBOSE=y
CONFIG_RCU_CPU_STALL_INFO=y
CONFIG_RCU_TRACE=y
CONFIG_DEBUG_BLOCK_EXT_DEVT=y
CONFIG_NOTIFIER_ERROR_INJECTION=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=y
CONFIG_PM_NOTIFIER_ERROR_INJECT=y
CONFIG_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
CONFIG_FAIL_PAGE_ALLOC=y
CONFIG_FAIL_MAKE_REQUEST=y
CONFIG_FAIL_IO_TIMEOUT=y
CONFIG_FAIL_MMC_REQUEST=y
CONFIG_FAULT_INJECTION_DEBUG_FS=y
CONFIG_LATENCYTOP=y
CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y
CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_FENTRY=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_TRACER_MAX_TRACE=y
CONFIG_TRACE_CLOCK=y
CONFIG_RING_BUFFER=y
CONFIG_EVENT_TRACING=y
CONFIG_CONTEXT_SWITCH_TRACER=y
CONFIG_RING_BUFFER_ALLOW_SWAP=y
CONFIG_TRACING=y
CONFIG_GENERIC_TRACER=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_PREEMPT_TRACER is not set
# CONFIG_SCHED_TRACER is not set
# CONFIG_FTRACE_SYSCALLS is not set
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
# CONFIG_PROFILE_ALL_BRANCHES is not set
CONFIG_STACK_TRACER=y
CONFIG_BLK_DEV_IO_TRACE=y
CONFIG_KPROBE_EVENT=y
CONFIG_UPROBE_EVENT=y
CONFIG_PROBE_EVENTS=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_STARTUP_TEST is not set
# CONFIG_MMIOTRACE is not set
# CONFIG_RING_BUFFER_BENCHMARK is not set
# CONFIG_RING_BUFFER_STARTUP_TEST is not set

#
# Runtime Testing
#
CONFIG_LKDTM=y
CONFIG_TEST_LIST_SORT=y
# CONFIG_KPROBES_SANITY_TEST is not set
CONFIG_BACKTRACE_SELF_TEST=y
# CONFIG_RBTREE_TEST is not set
# CONFIG_INTERVAL_TREE_TEST is not set
CONFIG_PERCPU_TEST=m
CONFIG_ATOMIC64_SELFTEST=y
CONFIG_ASYNC_RAID6_TEST=y
CONFIG_TEST_STRING_HELPERS=y
CONFIG_TEST_KSTRTOX=y
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
CONFIG_FIREWIRE_OHCI_REMOTE_DMA=y
CONFIG_DMA_API_DEBUG=y
CONFIG_SAMPLES=y
CONFIG_SAMPLE_TRACE_EVENTS=m
CONFIG_SAMPLE_KOBJECT=m
CONFIG_SAMPLE_KPROBES=m
CONFIG_SAMPLE_KRETPROBES=m
CONFIG_SAMPLE_HW_BREAKPOINT=m
CONFIG_SAMPLE_KFIFO=m
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
# CONFIG_STRICT_DEVMEM is not set
CONFIG_X86_VERBOSE_BOOTUP=y
CONFIG_EARLY_PRINTK=y
CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_EFI=y
CONFIG_X86_PTDUMP=y
CONFIG_DEBUG_RODATA=y
CONFIG_DEBUG_RODATA_TEST=y
CONFIG_DEBUG_SET_MODULE_RONX=y
CONFIG_DEBUG_NX_TEST=m
CONFIG_DOUBLEFAULT=y
CONFIG_DEBUG_TLBFLUSH=y
CONFIG_IOMMU_DEBUG=y
CONFIG_IOMMU_STRESS=y
CONFIG_IOMMU_LEAK=y
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
# CONFIG_X86_DECODER_SELFTEST is not set
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
CONFIG_IO_DELAY_TYPE_NONE=3
CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not set
CONFIG_DEFAULT_IO_DELAY_TYPE=0
CONFIG_DEBUG_BOOT_PARAMS=y
CONFIG_CPA_DEBUG=y
CONFIG_OPTIMIZE_INLINING=y
CONFIG_DEBUG_NMI_SELFTEST=y
CONFIG_X86_DEBUG_STATIC_CPU_HAS=y

#
# Security options
#
CONFIG_KEYS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_BIG_KEYS=y
CONFIG_TRUSTED_KEYS=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_NETWORK_XFRM=y
CONFIG_SECURITY_PATH=y
CONFIG_INTEL_TXT=y
CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX=y
CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE=19
CONFIG_SECURITY_SMACK=y
CONFIG_SECURITY_TOMOYO=y
CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048
CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024
CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER=y
CONFIG_SECURITY_APPARMOR=y
CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
CONFIG_SECURITY_APPARMOR_HASH=y
CONFIG_SECURITY_YAMA=y
CONFIG_SECURITY_YAMA_STACKED=y
CONFIG_INTEGRITY=y
CONFIG_INTEGRITY_SIGNATURE=y
CONFIG_INTEGRITY_AUDIT=y
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_LSM_RULES=y
# CONFIG_IMA_TEMPLATE is not set
# CONFIG_IMA_NG_TEMPLATE is not set
CONFIG_IMA_SIG_TEMPLATE=y
CONFIG_IMA_DEFAULT_TEMPLATE="ima-sig"
# CONFIG_IMA_DEFAULT_HASH_SHA1 is not set
# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
CONFIG_IMA_DEFAULT_HASH_WP512=y
CONFIG_IMA_DEFAULT_HASH="wp512"
CONFIG_IMA_APPRAISE=y
CONFIG_EVM=y
CONFIG_EVM_HMAC_VERSION=2
# CONFIG_DEFAULT_SECURITY_SELINUX is not set
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
# CONFIG_DEFAULT_SECURITY_APPARMOR is not set
# CONFIG_DEFAULT_SECURITY_YAMA is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_DEFAULT_SECURITY=""
CONFIG_XOR_BLOCKS=y
CONFIG_ASYNC_CORE=y
CONFIG_ASYNC_MEMCPY=y
CONFIG_ASYNC_XOR=y
CONFIG_ASYNC_PQ=y
CONFIG_ASYNC_RAID6_RECOV=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_PCOMP=y
CONFIG_CRYPTO_PCOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_USER=y
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=y
CONFIG_CRYPTO_NULL=y
CONFIG_CRYPTO_PCRYPT=y
CONFIG_CRYPTO_WORKQUEUE=y
CONFIG_CRYPTO_CRYPTD=y
CONFIG_CRYPTO_AUTHENC=y
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_ABLK_HELPER=y
CONFIG_CRYPTO_GLUE_HELPER_X86=y

#
# Authenticated Encryption with Associated Data
#
CONFIG_CRYPTO_CCM=y
CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_SEQIV=y

#
# Block modes
#
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_LRW=y
CONFIG_CRYPTO_PCBC=y
CONFIG_CRYPTO_XTS=y

#
# Hash modes
#
CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_XCBC=y
CONFIG_CRYPTO_VMAC=y

#
# Digest
#
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32C_INTEL=y
CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32_PCLMUL=y
CONFIG_CRYPTO_CRCT10DIF=y
CONFIG_CRYPTO_CRCT10DIF_PCLMUL=y
CONFIG_CRYPTO_GHASH=y
CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=y
CONFIG_CRYPTO_RMD128=y
CONFIG_CRYPTO_RMD160=y
CONFIG_CRYPTO_RMD256=y
CONFIG_CRYPTO_RMD320=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA1_SSSE3=y
CONFIG_CRYPTO_SHA256_SSSE3=y
CONFIG_CRYPTO_SHA512_SSSE3=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_TGR192=y
CONFIG_CRYPTO_WP512=y
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=y

#
# Ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_X86_64=y
CONFIG_CRYPTO_AES_NI_INTEL=y
CONFIG_CRYPTO_ANUBIS=y
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_BLOWFISH=y
CONFIG_CRYPTO_BLOWFISH_COMMON=y
CONFIG_CRYPTO_BLOWFISH_X86_64=y
CONFIG_CRYPTO_CAMELLIA=y
CONFIG_CRYPTO_CAMELLIA_X86_64=y
CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=y
CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=y
CONFIG_CRYPTO_CAST_COMMON=y
CONFIG_CRYPTO_CAST5=y
CONFIG_CRYPTO_CAST5_AVX_X86_64=y
CONFIG_CRYPTO_CAST6=y
CONFIG_CRYPTO_CAST6_AVX_X86_64=y
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_FCRYPT=y
CONFIG_CRYPTO_KHAZAD=y
CONFIG_CRYPTO_SALSA20=y
CONFIG_CRYPTO_SALSA20_X86_64=y
CONFIG_CRYPTO_SEED=y
CONFIG_CRYPTO_SERPENT=y
CONFIG_CRYPTO_SERPENT_SSE2_X86_64=y
CONFIG_CRYPTO_SERPENT_AVX_X86_64=y
CONFIG_CRYPTO_SERPENT_AVX2_X86_64=y
CONFIG_CRYPTO_TEA=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_TWOFISH_COMMON=y
CONFIG_CRYPTO_TWOFISH_X86_64=y
CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=y
CONFIG_CRYPTO_TWOFISH_AVX_X86_64=y

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_ZLIB=y
CONFIG_CRYPTO_LZO=y
CONFIG_CRYPTO_LZ4=y
CONFIG_CRYPTO_LZ4HC=y

#
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=y
CONFIG_CRYPTO_USER_API=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_HASH_INFO=y
CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_DEV_PADLOCK=y
CONFIG_CRYPTO_DEV_PADLOCK_AES=y
CONFIG_CRYPTO_DEV_PADLOCK_SHA=y
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_PUBLIC_KEY_ALGO_RSA=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_HAVE_KVM_MSI=y
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_KVM_VFIO=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=y
CONFIG_KVM_INTEL=y
CONFIG_KVM_AMD=y
CONFIG_KVM_MMU_AUDIT=y
CONFIG_KVM_DEVICE_ASSIGNMENT=y
CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_RAID6_PQ=y
CONFIG_BITREVERSE=y
CONFIG_RATIONAL=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_NET_UTILS=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_IO=y
CONFIG_PERCPU_RWSEM=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
CONFIG_CRC_CCITT=y
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
CONFIG_CRC32_SELFTEST=y
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_CRC7=y
CONFIG_LIBCRC32C=y
CONFIG_CRC8=y
CONFIG_CRC64_ECMA=y
CONFIG_RANDOM32_SELFTEST=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4_COMPRESS=y
CONFIG_LZ4HC_COMPRESS=y
CONFIG_LZ4_DECOMPRESS=y
CONFIG_XZ_DEC=y
CONFIG_XZ_DEC_X86=y
CONFIG_XZ_DEC_POWERPC=y
CONFIG_XZ_DEC_IA64=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_ARMTHUMB=y
CONFIG_XZ_DEC_SPARC=y
CONFIG_XZ_DEC_BCJ=y
CONFIG_XZ_DEC_TEST=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_REED_SOLOMON=y
CONFIG_REED_SOLOMON_ENC8=y
CONFIG_REED_SOLOMON_DEC8=y
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_BCH=y
CONFIG_BCH_CONST_PARAMS=y
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=y
CONFIG_TEXTSEARCH_BM=y
CONFIG_TEXTSEARCH_FSM=y
CONFIG_BTREE=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
CONFIG_NLATTR=y
CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
CONFIG_LRU_CACHE=y
CONFIG_AVERAGE=y
CONFIG_CLZ_TAB=y
CONFIG_CORDIC=y
CONFIG_DDR=y
CONFIG_MPILIB=y
CONFIG_SIGNATURE=y
CONFIG_OID_REGISTRY=y
CONFIG_UCS2_STRING=y
CONFIG_FONT_SUPPORT=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_FONT_6x11=y
CONFIG_FONT_7x14=y
CONFIG_FONT_PEARL_8x8=y
CONFIG_FONT_ACORN_8x8=y
CONFIG_FONT_MINI_4x6=y
CONFIG_FONT_SUN8x16=y
CONFIG_FONT_SUN12x22=y
CONFIG_FONT_10x18=y

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-09 17:12       ` Vlastimil Babka
@ 2013-12-09 20:26         ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-09 20:26 UTC (permalink / raw)
  To: Vlastimil Babka, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>> Hello, I will look at it, thanks.
>>> Do you have specific reproduction instructions?
>>
>> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
>> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
>> up testing on that part.
>
> Thanks. Do you have trinity log and the .config file? I'm currently unable to even boot linux-next
> with my config/setup due to a GPF.
> Looking at code I wouldn't expect that it could encounter a tail page, without first encountering a
> head page and skipping the whole huge page. At least in THP case, as TLB pages should be split when
> a vma is split. As for hugetlbfs, it should be skipped for mlock/munlock operations completely. One
> of these assumptions is probably failing here...

If it helps, I've added a dump_page() in case we hit a tail page there and got:

[  980.172299] page:ffffea003e5e8040 count:0 mapcount:1 mapping:          (null) index:0
x0
[  980.173412] page flags: 0x2fffff80008000(tail)

I can also add anything else in there to get other debug output if you think of something else useful.


Thanks,
Sasha


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-09 20:26         ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-09 20:26 UTC (permalink / raw)
  To: Vlastimil Babka, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>> Hello, I will look at it, thanks.
>>> Do you have specific reproduction instructions?
>>
>> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
>> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
>> up testing on that part.
>
> Thanks. Do you have trinity log and the .config file? I'm currently unable to even boot linux-next
> with my config/setup due to a GPF.
> Looking at code I wouldn't expect that it could encounter a tail page, without first encountering a
> head page and skipping the whole huge page. At least in THP case, as TLB pages should be split when
> a vma is split. As for hugetlbfs, it should be skipped for mlock/munlock operations completely. One
> of these assumptions is probably failing here...

If it helps, I've added a dump_page() in case we hit a tail page there and got:

[  980.172299] page:ffffea003e5e8040 count:0 mapcount:1 mapping:          (null) index:0
x0
[  980.173412] page flags: 0x2fffff80008000(tail)

I can also add anything else in there to get other debug output if you think of something else useful.


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-09 17:05     ` Sasha Levin
@ 2013-12-09 21:16       ` Jiri Kosina
  -1 siblings, 0 replies; 69+ messages in thread
From: Jiri Kosina @ 2013-12-09 21:16 UTC (permalink / raw)
  To: Sasha Levin
  Cc: Vlastimil Babka, Andrew Morton, joern, mgorman,
	Michel Lespinasse, riel, LKML, linux-mm

On Mon, 9 Dec 2013, Sasha Levin wrote:

> Not really, the fuzzer hit it once and I've been unable to trigger it 
> again. 

If you are ever able to trigger it again, I think having crashdump 
available would be very helpful here, to see how exactly does the VMA/THP 
layout look like at the time of crash.

Any chance you run your fuzzing with crashkernel configured for a while?

-- 
Jiri Kosina
SUSE Labs


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-09 21:16       ` Jiri Kosina
  0 siblings, 0 replies; 69+ messages in thread
From: Jiri Kosina @ 2013-12-09 21:16 UTC (permalink / raw)
  To: Sasha Levin
  Cc: Vlastimil Babka, Andrew Morton, joern, mgorman,
	Michel Lespinasse, riel, LKML, linux-mm

On Mon, 9 Dec 2013, Sasha Levin wrote:

> Not really, the fuzzer hit it once and I've been unable to trigger it 
> again. 

If you are ever able to trigger it again, I think having crashdump 
available would be very helpful here, to see how exactly does the VMA/THP 
layout look like at the time of crash.

Any chance you run your fuzzing with crashkernel configured for a while?

-- 
Jiri Kosina
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-09 21:16       ` Jiri Kosina
@ 2013-12-11 15:55         ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-11 15:55 UTC (permalink / raw)
  To: Jiri Kosina
  Cc: Vlastimil Babka, Andrew Morton, joern, mgorman,
	Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 04:16 PM, Jiri Kosina wrote:
> On Mon, 9 Dec 2013, Sasha Levin wrote:
>
>> Not really, the fuzzer hit it once and I've been unable to trigger it
>> again.
>
> If you are ever able to trigger it again, I think having crashdump
> available would be very helpful here, to see how exactly does the VMA/THP
> layout look like at the time of crash.
>
> Any chance you run your fuzzing with crashkernel configured for a while?
>

Been trying to, can't get crashkernel to interact nicely with my KVM tools guest.

Will keep trying.


Thanks,
Sasha

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-11 15:55         ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-11 15:55 UTC (permalink / raw)
  To: Jiri Kosina
  Cc: Vlastimil Babka, Andrew Morton, joern, mgorman,
	Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 04:16 PM, Jiri Kosina wrote:
> On Mon, 9 Dec 2013, Sasha Levin wrote:
>
>> Not really, the fuzzer hit it once and I've been unable to trigger it
>> again.
>
> If you are ever able to trigger it again, I think having crashdump
> available would be very helpful here, to see how exactly does the VMA/THP
> layout look like at the time of crash.
>
> Any chance you run your fuzzing with crashkernel configured for a while?
>

Been trying to, can't get crashkernel to interact nicely with my KVM tools guest.

Will keep trying.


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-09 20:26         ` Sasha Levin
@ 2013-12-11 22:59           ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-11 22:59 UTC (permalink / raw)
  To: Sasha Levin, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 09:26 PM, Sasha Levin wrote:
> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>> Hello, I will look at it, thanks.
>>>> Do you have specific reproduction instructions?
>>>
>>> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
>>> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
>>> up testing on that part.
>>
>> Thanks. Do you have trinity log and the .config file? I'm currently unable to even boot linux-next
>> with my config/setup due to a GPF.
>> Looking at code I wouldn't expect that it could encounter a tail page, without first encountering a
>> head page and skipping the whole huge page. At least in THP case, as TLB pages should be split when
>> a vma is split. As for hugetlbfs, it should be skipped for mlock/munlock operations completely. One
>> of these assumptions is probably failing here...
> 
> If it helps, I've added a dump_page() in case we hit a tail page there and got:
> 
> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1 mapping:          (null) index:0
> x0
> [  980.173412] page flags: 0x2fffff80008000(tail)
> 
> I can also add anything else in there to get other debug output if you think of something else useful.

Please try the following. Thanks in advance.

------8<------
diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..c81b7c3 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -436,11 +436,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
 void munlock_vma_pages_range(struct vm_area_struct *vma,
 			     unsigned long start, unsigned long end)
 {
+	unsigned long orig_start = start;
+	unsigned int page_increm = 0;
+
 	vma->vm_flags &= ~VM_LOCKED;

 	while (start < end) {
 		struct page *page = NULL;
-		unsigned int page_mask, page_increm;
+		unsigned int page_mask;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -457,6 +460,22 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				&page_mask);

 		if (page && !IS_ERR(page)) {
+			if (PageTail(page)) {
+				struct page *first_page;
+				dump_page(page);
+				printk("start=%lu pfn=%lu orig_start=%lu "
+				       "page_increm=%d "
+				       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
+					start, page_to_pfn(page), orig_start,
+					page_increm,
+					vma->vm_start, vma->vm_end,
+					vma->vm_flags);
+				first_page = page->first_page;
+				printk("first_page pfn=%lu\n",
+						page_to_pfn(first_page));
+				dump_page(first_page);
+				VM_BUG_ON(true);
+			}
 			if (PageTransHuge(page)) {
 				lock_page(page);
 				/*



^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-11 22:59           ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-11 22:59 UTC (permalink / raw)
  To: Sasha Levin, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/09/2013 09:26 PM, Sasha Levin wrote:
> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>> Hello, I will look at it, thanks.
>>>> Do you have specific reproduction instructions?
>>>
>>> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
>>> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
>>> up testing on that part.
>>
>> Thanks. Do you have trinity log and the .config file? I'm currently unable to even boot linux-next
>> with my config/setup due to a GPF.
>> Looking at code I wouldn't expect that it could encounter a tail page, without first encountering a
>> head page and skipping the whole huge page. At least in THP case, as TLB pages should be split when
>> a vma is split. As for hugetlbfs, it should be skipped for mlock/munlock operations completely. One
>> of these assumptions is probably failing here...
> 
> If it helps, I've added a dump_page() in case we hit a tail page there and got:
> 
> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1 mapping:          (null) index:0
> x0
> [  980.173412] page flags: 0x2fffff80008000(tail)
> 
> I can also add anything else in there to get other debug output if you think of something else useful.

Please try the following. Thanks in advance.

------8<------
diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..c81b7c3 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -436,11 +436,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
 void munlock_vma_pages_range(struct vm_area_struct *vma,
 			     unsigned long start, unsigned long end)
 {
+	unsigned long orig_start = start;
+	unsigned int page_increm = 0;
+
 	vma->vm_flags &= ~VM_LOCKED;

 	while (start < end) {
 		struct page *page = NULL;
-		unsigned int page_mask, page_increm;
+		unsigned int page_mask;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -457,6 +460,22 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				&page_mask);

 		if (page && !IS_ERR(page)) {
+			if (PageTail(page)) {
+				struct page *first_page;
+				dump_page(page);
+				printk("start=%lu pfn=%lu orig_start=%lu "
+				       "page_increm=%d "
+				       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
+					start, page_to_pfn(page), orig_start,
+					page_increm,
+					vma->vm_start, vma->vm_end,
+					vma->vm_flags);
+				first_page = page->first_page;
+				printk("first_page pfn=%lu\n",
+						page_to_pfn(first_page));
+				dump_page(first_page);
+				VM_BUG_ON(true);
+			}
 			if (PageTransHuge(page)) {
 				lock_page(page);
 				/*


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-11 22:59           ` Vlastimil Babka
@ 2013-12-12  3:16             ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-12  3:16 UTC (permalink / raw)
  To: Vlastimil Babka, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>> Hello, I will look at it, thanks.
>>>>> Do you have specific reproduction instructions?
>>>>
>>>> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
>>>> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
>>>> up testing on that part.
>>>
>>> Thanks. Do you have trinity log and the .config file? I'm currently unable to even boot linux-next
>>> with my config/setup due to a GPF.
>>> Looking at code I wouldn't expect that it could encounter a tail page, without first encountering a
>>> head page and skipping the whole huge page. At least in THP case, as TLB pages should be split when
>>> a vma is split. As for hugetlbfs, it should be skipped for mlock/munlock operations completely. One
>>> of these assumptions is probably failing here...
>>
>> If it helps, I've added a dump_page() in case we hit a tail page there and got:
>>
>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1 mapping:          (null) index:0
>> x0
>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>
>> I can also add anything else in there to get other debug output if you think of something else useful.
>
> Please try the following. Thanks in advance.

[  428.499889] page:ffffea003e5c0040 count:0 mapcount:4 mapping:          (null) index:0x0
[  428.499889] page flags: 0x2fffff80008000(tail)
[  428.499889] start=140117131923456 pfn=16347137 orig_start=140117130543104 page_increm
=1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
[  428.499889] first_page pfn=16347136
[  428.499889] page:ffffea003e5c0000 count:204 mapcount:44 mapping:ffff880fb5c466c1 inde
x:0x7f6f8fe00
[  428.499889] page flags: 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
[  428.499889] pc:ffff880fcfb70000 pc->flags:2 pc->mem_cgroup:ffffc90006034000
[  428.374171]  0000000000000000
[  428.374171]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  428.374171] Call Trace:
[  428.374171]  [<ffffffff81283df9>] exit_mmap+0x59/0x170
[  428.374171]  [<ffffffff812b72d0>] ? __khugepaged_exit+0xe0/0x150
[  428.374171]  [<ffffffff812af89b>] ? kmem_cache_free+0x26b/0x370
[  428.374171]  [<ffffffff812b72d0>] ? __khugepaged_exit+0xe0/0x150
[  428.374171]  [<ffffffff8112e440>] mmput+0x70/0xe0
[  428.374171]  [<ffffffff8113246d>] exit_mm+0x18d/0x1a0
[  428.374171]  [<ffffffff811df625>] ? acct_collect+0x175/0x1b0
[  428.374171]  [<ffffffff811348df>] do_exit+0x26f/0x520
[  428.374171]  [<ffffffff81134c39>] do_group_exit+0xa9/0xe0
[  428.374171]  [<ffffffff81149d72>] get_signal_to_deliver+0x4e2/0x570
[  428.374171]  [<ffffffff8106cc3b>] do_signal+0x4b/0x120
[  428.374171]  [<ffffffff81176346>] ? vtime_account_user+0x96/0xb0
[  428.374171]  [<ffffffff843b0475>] ? _raw_spin_unlock+0x35/0x60
[  428.374171]  [<ffffffff81176346>] ? vtime_account_user+0x96/0xb0
[  428.374171]  [<ffffffff81249a58>] ? context_tracking_user_exit+0xb8/0x1d0
[  428.374171]  [<ffffffff8119376d>] ? trace_hardirqs_on+0xd/0x10
[  428.374171]  [<ffffffff8106cf9a>] do_notify_resume+0x5a/0xe0
[  428.374171]  [<ffffffff843b9d22>] int_signal+0x12/0x17
[  428.374171] Code: 46 85 31 c0 e8 f9 60 12 03 48 8b 5b 30 48 c7 c7 b0 92 46 85 4a 8d 34 33 31 c0 
48 c1 fe 06 e8 df 60 12 03 48 89 df e8 97 e1 fc ff <0f> 0b 0f 1f 44 00 00 eb fe 66 0f 1f 44 00 00 48 
8b 03 66 85 c0
[  428.374171] RIP  [<ffffffff81282829>] munlock_vma_pages_range+0x109/0x240
[  428.374171]  RSP <ffff880f928edb38>

Thanks,
Sasha

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-12  3:16             ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-12  3:16 UTC (permalink / raw)
  To: Vlastimil Babka, Andrew Morton
  Cc: joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>> Hello, I will look at it, thanks.
>>>>> Do you have specific reproduction instructions?
>>>>
>>>> Not really, the fuzzer hit it once and I've been unable to trigger it again. Looking at
>>>> the piece of code involved it might have had something to do with hugetlbfs, so I'll crank
>>>> up testing on that part.
>>>
>>> Thanks. Do you have trinity log and the .config file? I'm currently unable to even boot linux-next
>>> with my config/setup due to a GPF.
>>> Looking at code I wouldn't expect that it could encounter a tail page, without first encountering a
>>> head page and skipping the whole huge page. At least in THP case, as TLB pages should be split when
>>> a vma is split. As for hugetlbfs, it should be skipped for mlock/munlock operations completely. One
>>> of these assumptions is probably failing here...
>>
>> If it helps, I've added a dump_page() in case we hit a tail page there and got:
>>
>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1 mapping:          (null) index:0
>> x0
>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>
>> I can also add anything else in there to get other debug output if you think of something else useful.
>
> Please try the following. Thanks in advance.

[  428.499889] page:ffffea003e5c0040 count:0 mapcount:4 mapping:          (null) index:0x0
[  428.499889] page flags: 0x2fffff80008000(tail)
[  428.499889] start=140117131923456 pfn=16347137 orig_start=140117130543104 page_increm
=1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
[  428.499889] first_page pfn=16347136
[  428.499889] page:ffffea003e5c0000 count:204 mapcount:44 mapping:ffff880fb5c466c1 inde
x:0x7f6f8fe00
[  428.499889] page flags: 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
[  428.499889] pc:ffff880fcfb70000 pc->flags:2 pc->mem_cgroup:ffffc90006034000
[  428.374171]  0000000000000000
[  428.374171]  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  428.374171] Call Trace:
[  428.374171]  [<ffffffff81283df9>] exit_mmap+0x59/0x170
[  428.374171]  [<ffffffff812b72d0>] ? __khugepaged_exit+0xe0/0x150
[  428.374171]  [<ffffffff812af89b>] ? kmem_cache_free+0x26b/0x370
[  428.374171]  [<ffffffff812b72d0>] ? __khugepaged_exit+0xe0/0x150
[  428.374171]  [<ffffffff8112e440>] mmput+0x70/0xe0
[  428.374171]  [<ffffffff8113246d>] exit_mm+0x18d/0x1a0
[  428.374171]  [<ffffffff811df625>] ? acct_collect+0x175/0x1b0
[  428.374171]  [<ffffffff811348df>] do_exit+0x26f/0x520
[  428.374171]  [<ffffffff81134c39>] do_group_exit+0xa9/0xe0
[  428.374171]  [<ffffffff81149d72>] get_signal_to_deliver+0x4e2/0x570
[  428.374171]  [<ffffffff8106cc3b>] do_signal+0x4b/0x120
[  428.374171]  [<ffffffff81176346>] ? vtime_account_user+0x96/0xb0
[  428.374171]  [<ffffffff843b0475>] ? _raw_spin_unlock+0x35/0x60
[  428.374171]  [<ffffffff81176346>] ? vtime_account_user+0x96/0xb0
[  428.374171]  [<ffffffff81249a58>] ? context_tracking_user_exit+0xb8/0x1d0
[  428.374171]  [<ffffffff8119376d>] ? trace_hardirqs_on+0xd/0x10
[  428.374171]  [<ffffffff8106cf9a>] do_notify_resume+0x5a/0xe0
[  428.374171]  [<ffffffff843b9d22>] int_signal+0x12/0x17
[  428.374171] Code: 46 85 31 c0 e8 f9 60 12 03 48 8b 5b 30 48 c7 c7 b0 92 46 85 4a 8d 34 33 31 c0 
48 c1 fe 06 e8 df 60 12 03 48 89 df e8 97 e1 fc ff <0f> 0b 0f 1f 44 00 00 eb fe 66 0f 1f 44 00 00 48 
8b 03 66 85 c0
[  428.374171] RIP  [<ffffffff81282829>] munlock_vma_pages_range+0x109/0x240
[  428.374171]  RSP <ffff880f928edb38>

Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-12  3:16             ` Sasha Levin
@ 2013-12-12  5:03               ` Bob Liu
  -1 siblings, 0 replies; 69+ messages in thread
From: Bob Liu @ 2013-12-12  5:03 UTC (permalink / raw)
  To: Sasha Levin
  Cc: Vlastimil Babka, Andrew Morton, joern, mgorman,
	Michel Lespinasse, riel, LKML, linux-mm


On 12/12/2013 11:16 AM, Sasha Levin wrote:
> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>> Hello, I will look at it, thanks.
>>>>>> Do you have specific reproduction instructions?
>>>>>
>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>> it again. Looking at
>>>>> the piece of code involved it might have had something to do with
>>>>> hugetlbfs, so I'll crank
>>>>> up testing on that part.
>>>>
>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>> unable to even boot linux-next
>>>> with my config/setup due to a GPF.
>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>> page, without first encountering a
>>>> head page and skipping the whole huge page. At least in THP case, as
>>>> TLB pages should be split when
>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>> mlock/munlock operations completely. One
>>>> of these assumptions is probably failing here...
>>>
>>> If it helps, I've added a dump_page() in case we hit a tail page
>>> there and got:
>>>
>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>> mapping:          (null) index:0
>>> x0
>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>
>>> I can also add anything else in there to get other debug output if
>>> you think of something else useful.
>>
>> Please try the following. Thanks in advance.
> 
> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
> mapping:          (null) index:0x0
> [  428.499889] page flags: 0x2fffff80008000(tail)
> [  428.499889] start=140117131923456 pfn=16347137
> orig_start=140117130543104 page_increm
> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
> [  428.499889] first_page pfn=16347136
> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
> mapping:ffff880fb5c466c1 inde
> x:0x7f6f8fe00
> [  428.499889] page flags:
> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)

>From this print, it looks like the page is still a huge page.
One situation I guess is a huge page which isn't PageMlocked and passed
to munlock_vma_page(). I'm not sure whether this will happen.
Please take a try this patch.

Thanks,
-Bob

diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..f7066d2 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -466,6 +466,22 @@ void munlock_vma_pages_range(struct vm_area_struct
*vma,
 				 * the page_mask here.
 				 */
 				page_mask = munlock_vma_page(page);
+
+				/*
+				 * There are two possibilities when munlock_vma_page() return 0.
+				 * 1. The THP page was split.
+				 * 2. The THP page was not PageMlocked before and
+				 *    it didn't get split.
+				 *
+				 * In case 2 we have to reset page_mask to
+				 * 'HPAGE_PMD_NR - 1' becuase this page is still
+				 * huge page, else PageTransHuge may receive a
+				 * tail page and trigger VM_BUG_ON on next loop.
+				 */
+				if (!page_mask)
+					if (PageTransHuge(page))
+						page_mask = HPAGE_PMD_NR - 1;
+
 				unlock_page(page);
 				put_page(page); /* follow_page_mask() */
 			} else {


^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-12  5:03               ` Bob Liu
  0 siblings, 0 replies; 69+ messages in thread
From: Bob Liu @ 2013-12-12  5:03 UTC (permalink / raw)
  To: Sasha Levin
  Cc: Vlastimil Babka, Andrew Morton, joern, mgorman,
	Michel Lespinasse, riel, LKML, linux-mm


On 12/12/2013 11:16 AM, Sasha Levin wrote:
> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>> Hello, I will look at it, thanks.
>>>>>> Do you have specific reproduction instructions?
>>>>>
>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>> it again. Looking at
>>>>> the piece of code involved it might have had something to do with
>>>>> hugetlbfs, so I'll crank
>>>>> up testing on that part.
>>>>
>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>> unable to even boot linux-next
>>>> with my config/setup due to a GPF.
>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>> page, without first encountering a
>>>> head page and skipping the whole huge page. At least in THP case, as
>>>> TLB pages should be split when
>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>> mlock/munlock operations completely. One
>>>> of these assumptions is probably failing here...
>>>
>>> If it helps, I've added a dump_page() in case we hit a tail page
>>> there and got:
>>>
>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>> mapping:          (null) index:0
>>> x0
>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>
>>> I can also add anything else in there to get other debug output if
>>> you think of something else useful.
>>
>> Please try the following. Thanks in advance.
> 
> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
> mapping:          (null) index:0x0
> [  428.499889] page flags: 0x2fffff80008000(tail)
> [  428.499889] start=140117131923456 pfn=16347137
> orig_start=140117130543104 page_increm
> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
> [  428.499889] first_page pfn=16347136
> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
> mapping:ffff880fb5c466c1 inde
> x:0x7f6f8fe00
> [  428.499889] page flags:
> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)

>From this print, it looks like the page is still a huge page.
One situation I guess is a huge page which isn't PageMlocked and passed
to munlock_vma_page(). I'm not sure whether this will happen.
Please take a try this patch.

Thanks,
-Bob

diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..f7066d2 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -466,6 +466,22 @@ void munlock_vma_pages_range(struct vm_area_struct
*vma,
 				 * the page_mask here.
 				 */
 				page_mask = munlock_vma_page(page);
+
+				/*
+				 * There are two possibilities when munlock_vma_page() return 0.
+				 * 1. The THP page was split.
+				 * 2. The THP page was not PageMlocked before and
+				 *    it didn't get split.
+				 *
+				 * In case 2 we have to reset page_mask to
+				 * 'HPAGE_PMD_NR - 1' becuase this page is still
+				 * huge page, else PageTransHuge may receive a
+				 * tail page and trigger VM_BUG_ON on next loop.
+				 */
+				if (!page_mask)
+					if (PageTransHuge(page))
+						page_mask = HPAGE_PMD_NR - 1;
+
 				unlock_page(page);
 				put_page(page); /* follow_page_mask() */
 			} else {

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-12  5:03               ` Bob Liu
@ 2013-12-12 12:41                 ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-12 12:41 UTC (permalink / raw)
  To: Bob Liu, Sasha Levin
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/12/2013 06:03 AM, Bob Liu wrote:
> 
> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>> Hello, I will look at it, thanks.
>>>>>>> Do you have specific reproduction instructions?
>>>>>>
>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>> it again. Looking at
>>>>>> the piece of code involved it might have had something to do with
>>>>>> hugetlbfs, so I'll crank
>>>>>> up testing on that part.
>>>>>
>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>> unable to even boot linux-next
>>>>> with my config/setup due to a GPF.
>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>> page, without first encountering a
>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>> TLB pages should be split when
>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>> mlock/munlock operations completely. One
>>>>> of these assumptions is probably failing here...
>>>>
>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>> there and got:
>>>>
>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>> mapping:          (null) index:0
>>>> x0
>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>
>>>> I can also add anything else in there to get other debug output if
>>>> you think of something else useful.
>>>
>>> Please try the following. Thanks in advance.
>>
>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>> mapping:          (null) index:0x0
>> [  428.499889] page flags: 0x2fffff80008000(tail)
>> [  428.499889] start=140117131923456 pfn=16347137
>> orig_start=140117130543104 page_increm
>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>> [  428.499889] first_page pfn=16347136
>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>> mapping:ffff880fb5c466c1 inde
>> x:0x7f6f8fe00
>> [  428.499889] page flags:
>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
> 
>  From this print, it looks like the page is still a huge page.
> One situation I guess is a huge page which isn't PageMlocked and passed
> to munlock_vma_page(). I'm not sure whether this will happen.

Yes that's quite likely the case. It's not illegal to happen I would say.

> Please take a try this patch.

I've made a simpler version that does away with the ugly page_mask thing completely.
Please try that as well. Thanks.

Also when working on this I think I found another potential but much rare problem
when munlock_vma_page races with a THP split. That would however manifest such that
part of the former tail pages would stay PageMlocked. But that still needs more thought.
The bug at hand should however be fixed by this patch.

--------8<----------
From: Vlastimil Babka <vbabka@suse.cz>
Date: Thu, 12 Dec 2013 13:06:39 +0100
Subject: [PATCH] munlock_vma_pages_range() candidate fix

---
 mm/internal.h |  2 +-
 mm/mlock.c    | 22 ++++++++--------------
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/mm/internal.h b/mm/internal.h
index 684f7aa..ffacdec 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -192,7 +192,7 @@ static inline int mlocked_vma_newpage(struct vm_area_struct *vma,
  * must be called with vma's mmap_sem held for read or write, and page locked.
  */
 extern void mlock_vma_page(struct page *page);
-extern unsigned int munlock_vma_page(struct page *page);
+extern void munlock_vma_page(struct page *page);
 
 /*
  * Clear the page's PageMlocked().  This can be useful in a situation where
diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..a34dfdc 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -146,23 +146,18 @@ static void __munlock_isolation_failed(struct page *page)
  * can't isolate the page, we leave it for putback_lru_page() and vmscan
  * [page_referenced()/try_to_unmap()] to deal with.
  */
-unsigned int munlock_vma_page(struct page *page)
+void munlock_vma_page(struct page *page)
 {
-	unsigned int page_mask = 0;
-
 	BUG_ON(!PageLocked(page));
 
 	if (TestClearPageMlocked(page)) {
 		unsigned int nr_pages = hpage_nr_pages(page);
 		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
-		page_mask = nr_pages - 1;
 		if (!isolate_lru_page(page))
 			__munlock_isolated_page(page);
 		else
 			__munlock_isolation_failed(page);
 	}
-
-	return page_mask;
 }
 
 /**
@@ -440,7 +435,7 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 
 	while (start < end) {
 		struct page *page = NULL;
-		unsigned int page_mask, page_increm;
+		unsigned int page_increm = 1;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -453,21 +448,21 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 		 * suits munlock very well (and if somehow an abnormal page
 		 * has sneaked into the range, we won't oops here: great).
 		 */
-		page = follow_page_mask(vma, start, FOLL_GET | FOLL_DUMP,
-				&page_mask);
+		page = follow_page(vma, start, FOLL_GET | FOLL_DUMP);
 
 		if (page && !IS_ERR(page)) {
 			if (PageTransHuge(page)) {
 				lock_page(page);
+				munlock_vma_page(page);
 				/*
 				 * Any THP page found by follow_page_mask() may
 				 * have gotten split before reaching
-				 * munlock_vma_page(), so we need to recompute
-				 * the page_mask here.
+				 * munlock_vma_page(), so we need to recheck
+				 * how many pages to skip.
 				 */
-				page_mask = munlock_vma_page(page);
+				page_increm = hpage_nr_pages(page);
 				unlock_page(page);
-				put_page(page); /* follow_page_mask() */
+				put_page(page); /* follow_page() */
 			} else {
 				/*
 				 * Non-huge pages are handled in batches via
@@ -490,7 +485,6 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				goto next;
 			}
 		}
-		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
 		start += page_increm * PAGE_SIZE;
 next:
 		cond_resched();
-- 
1.8.4



^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-12 12:41                 ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-12 12:41 UTC (permalink / raw)
  To: Bob Liu, Sasha Levin
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/12/2013 06:03 AM, Bob Liu wrote:
> 
> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>> Hello, I will look at it, thanks.
>>>>>>> Do you have specific reproduction instructions?
>>>>>>
>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>> it again. Looking at
>>>>>> the piece of code involved it might have had something to do with
>>>>>> hugetlbfs, so I'll crank
>>>>>> up testing on that part.
>>>>>
>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>> unable to even boot linux-next
>>>>> with my config/setup due to a GPF.
>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>> page, without first encountering a
>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>> TLB pages should be split when
>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>> mlock/munlock operations completely. One
>>>>> of these assumptions is probably failing here...
>>>>
>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>> there and got:
>>>>
>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>> mapping:          (null) index:0
>>>> x0
>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>
>>>> I can also add anything else in there to get other debug output if
>>>> you think of something else useful.
>>>
>>> Please try the following. Thanks in advance.
>>
>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>> mapping:          (null) index:0x0
>> [  428.499889] page flags: 0x2fffff80008000(tail)
>> [  428.499889] start=140117131923456 pfn=16347137
>> orig_start=140117130543104 page_increm
>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>> [  428.499889] first_page pfn=16347136
>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>> mapping:ffff880fb5c466c1 inde
>> x:0x7f6f8fe00
>> [  428.499889] page flags:
>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
> 
>  From this print, it looks like the page is still a huge page.
> One situation I guess is a huge page which isn't PageMlocked and passed
> to munlock_vma_page(). I'm not sure whether this will happen.

Yes that's quite likely the case. It's not illegal to happen I would say.

> Please take a try this patch.

I've made a simpler version that does away with the ugly page_mask thing completely.
Please try that as well. Thanks.

Also when working on this I think I found another potential but much rare problem
when munlock_vma_page races with a THP split. That would however manifest such that
part of the former tail pages would stay PageMlocked. But that still needs more thought.
The bug at hand should however be fixed by this patch.

--------8<----------
From: Vlastimil Babka <vbabka@suse.cz>
Date: Thu, 12 Dec 2013 13:06:39 +0100
Subject: [PATCH] munlock_vma_pages_range() candidate fix

---
 mm/internal.h |  2 +-
 mm/mlock.c    | 22 ++++++++--------------
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/mm/internal.h b/mm/internal.h
index 684f7aa..ffacdec 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -192,7 +192,7 @@ static inline int mlocked_vma_newpage(struct vm_area_struct *vma,
  * must be called with vma's mmap_sem held for read or write, and page locked.
  */
 extern void mlock_vma_page(struct page *page);
-extern unsigned int munlock_vma_page(struct page *page);
+extern void munlock_vma_page(struct page *page);
 
 /*
  * Clear the page's PageMlocked().  This can be useful in a situation where
diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..a34dfdc 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -146,23 +146,18 @@ static void __munlock_isolation_failed(struct page *page)
  * can't isolate the page, we leave it for putback_lru_page() and vmscan
  * [page_referenced()/try_to_unmap()] to deal with.
  */
-unsigned int munlock_vma_page(struct page *page)
+void munlock_vma_page(struct page *page)
 {
-	unsigned int page_mask = 0;
-
 	BUG_ON(!PageLocked(page));
 
 	if (TestClearPageMlocked(page)) {
 		unsigned int nr_pages = hpage_nr_pages(page);
 		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
-		page_mask = nr_pages - 1;
 		if (!isolate_lru_page(page))
 			__munlock_isolated_page(page);
 		else
 			__munlock_isolation_failed(page);
 	}
-
-	return page_mask;
 }
 
 /**
@@ -440,7 +435,7 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 
 	while (start < end) {
 		struct page *page = NULL;
-		unsigned int page_mask, page_increm;
+		unsigned int page_increm = 1;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -453,21 +448,21 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 		 * suits munlock very well (and if somehow an abnormal page
 		 * has sneaked into the range, we won't oops here: great).
 		 */
-		page = follow_page_mask(vma, start, FOLL_GET | FOLL_DUMP,
-				&page_mask);
+		page = follow_page(vma, start, FOLL_GET | FOLL_DUMP);
 
 		if (page && !IS_ERR(page)) {
 			if (PageTransHuge(page)) {
 				lock_page(page);
+				munlock_vma_page(page);
 				/*
 				 * Any THP page found by follow_page_mask() may
 				 * have gotten split before reaching
-				 * munlock_vma_page(), so we need to recompute
-				 * the page_mask here.
+				 * munlock_vma_page(), so we need to recheck
+				 * how many pages to skip.
 				 */
-				page_mask = munlock_vma_page(page);
+				page_increm = hpage_nr_pages(page);
 				unlock_page(page);
-				put_page(page); /* follow_page_mask() */
+				put_page(page); /* follow_page() */
 			} else {
 				/*
 				 * Non-huge pages are handled in batches via
@@ -490,7 +485,6 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				goto next;
 			}
 		}
-		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
 		start += page_increm * PAGE_SIZE;
 next:
 		cond_resched();
-- 
1.8.4


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-12 12:41                 ` Vlastimil Babka
@ 2013-12-12 21:05                   ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-12 21:05 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>
>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>
>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>> it again. Looking at
>>>>>>> the piece of code involved it might have had something to do with
>>>>>>> hugetlbfs, so I'll crank
>>>>>>> up testing on that part.
>>>>>>
>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>> unable to even boot linux-next
>>>>>> with my config/setup due to a GPF.
>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>> page, without first encountering a
>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>> TLB pages should be split when
>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>> mlock/munlock operations completely. One
>>>>>> of these assumptions is probably failing here...
>>>>>
>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>> there and got:
>>>>>
>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>> mapping:          (null) index:0
>>>>> x0
>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>
>>>>> I can also add anything else in there to get other debug output if
>>>>> you think of something else useful.
>>>>
>>>> Please try the following. Thanks in advance.
>>>
>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>> mapping:          (null) index:0x0
>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>> [  428.499889] start=140117131923456 pfn=16347137
>>> orig_start=140117130543104 page_increm
>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>> [  428.499889] first_page pfn=16347136
>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>> mapping:ffff880fb5c466c1 inde
>>> x:0x7f6f8fe00
>>> [  428.499889] page flags:
>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>
>>   From this print, it looks like the page is still a huge page.
>> One situation I guess is a huge page which isn't PageMlocked and passed
>> to munlock_vma_page(). I'm not sure whether this will happen.
>
> Yes that's quite likely the case. It's not illegal to happen I would say.
>
>> Please take a try this patch.
>
> I've made a simpler version that does away with the ugly page_mask thing completely.
> Please try that as well. Thanks.
>
> Also when working on this I think I found another potential but much rare problem
> when munlock_vma_page races with a THP split. That would however manifest such that
> part of the former tail pages would stay PageMlocked. But that still needs more thought.
> The bug at hand should however be fixed by this patch.

Yup, this patch seems to fix the issue previously reported.

However, I'll piggyback another thing that popped up now that the vm could run for a while which
also seems to be caused by the original patch. It looks like a pretty straightforward deadlock, but
I'm not clear enough of the locking rules in mm to actually fix that correctly myself.

The vm did actually deadlock after that spew.

[ 2873.680623] =============================================
[ 2873.682127] [ INFO: possible recursive locking detected ]
[ 2873.683111] 3.13.0-rc3-next-20131212-sasha-00007-g97a2f20 #4064 Tainted: G        W
[ 2873.684600] ---------------------------------------------
[ 2873.685551] trinity-child88/6156 is trying to acquire lock:

[ 2873.686348]  (&(&zone->lru_lock)->rlock){......}, at: [<ffffffff8125ccff>] 
__page_cache_release+0x5f/0x150
[ 2873.688106]
[ 2873.688106] but task is already holding lock:
[ 2873.689006]  (&(&zone->lru_lock)->rlock){......}, at: [<ffffffff81282289>] 
__munlock_pagevec+0x49/0x360
[ 2873.690176]
[ 2873.690176] other info that might help us debug this:
[ 2873.690176]  Possible unsafe locking scenario:
[ 2873.690176]
[ 2873.690176]        CPU0
[ 2873.690176]        ----
[ 2873.690176]   lock(&(&zone->lru_lock)->rlock);
[ 2873.690176]   lock(&(&zone->lru_lock)->rlock);
[ 2873.690176]
[ 2873.690176]  *** DEADLOCK ***
[ 2873.690176]
[ 2873.690176]  May be due to missing lock nesting notation
[ 2873.690176]
[ 2873.690176] 2 locks held by trinity-child88/6156:
[ 2873.690176]  #0:  (&mm->mmap_sem){++++++}, at: [<ffffffff8127816e>] SyS_remap_file_pages+0x17e/0x3f0
[ 2873.690176]  #1:  (&(&zone->lru_lock)->rlock){......}, at: [<ffffffff81282289>] 
__munlock_pagevec+0x49/0x360
[ 2873.690176]
[ 2873.690176] stack backtrace:
[ 2873.690176] CPU: 25 PID: 6156 Comm: trinity-child88 Tainted: G        W 
3.13.0-rc3-next-20131212-sasha-00007-g97a2f20 #4064
[ 2873.690176]  ffff880eb3a3bc10 ffff880e17351ae8 ffffffff843a9db7 0000000000000000
[ 2873.690176]  ffff880eb3a3b000 ffff880e17351b28 ffffffff8119263a ffff880e17351b08
[ 2873.690176]  ffffffff8107599d ffff880e17351b38 ffff880eb3a3bc48 ffff880eb3a3b000
[ 2873.690176] Call Trace:
[ 2873.690176]  [<ffffffff843a9db7>] dump_stack+0x52/0x7f
[ 2873.690176]  [<ffffffff8119263a>] print_deadlock_bug+0x11a/0x140
[ 2873.690176]  [<ffffffff8107599d>] ? sched_clock+0x1d/0x30
[ 2873.690176]  [<ffffffff8119474b>] validate_chain+0x60b/0x7b0
[ 2873.690176]  [<ffffffff81175588>] ? sched_clock_cpu+0x108/0x120
[ 2873.690176]  [<ffffffff81194d9d>] __lock_acquire+0x4ad/0x580
[ 2873.690176]  [<ffffffff81194ff2>] lock_acquire+0x182/0x1d0
[ 2873.690176]  [<ffffffff8125ccff>] ? __page_cache_release+0x5f/0x150
[ 2873.690176]  [<ffffffff81194dba>] ? __lock_acquire+0x4ca/0x580
[ 2873.690176]  [<ffffffff843b0931>] _raw_spin_lock_irqsave+0x91/0xd0
[ 2873.690176]  [<ffffffff8125ccff>] ? __page_cache_release+0x5f/0x150
[ 2873.690176]  [<ffffffff8125ccff>] __page_cache_release+0x5f/0x150
[ 2873.690176]  [<ffffffff81282289>] ? __munlock_pagevec+0x49/0x360
[ 2873.690176]  [<ffffffff8125ce36>] __put_single_page+0x16/0x30
[ 2873.690176]  [<ffffffff81282289>] ? __munlock_pagevec+0x49/0x360
[ 2873.690176]  [<ffffffff8125d7d8>] put_page+0x48/0x50
[ 2873.690176]  [<ffffffff812823b1>] __munlock_pagevec+0x171/0x360
[ 2873.690176]  [<ffffffff843b1756>] ? _raw_spin_unlock+0x46/0x60
[ 2873.690176]  [<ffffffff81282701>] ? __munlock_pagevec_fill+0x161/0x180
[ 2873.690176]  [<ffffffff812828b8>] munlock_vma_pages_range+0x198/0x1e0
[ 2873.690176]  [<ffffffff812782a7>] SyS_remap_file_pages+0x2b7/0x3f0
[ 2873.690176]  [<ffffffff843baed0>] tracesys+0xdd/0xe2


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-12 21:05                   ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-12 21:05 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>
>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>
>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>> it again. Looking at
>>>>>>> the piece of code involved it might have had something to do with
>>>>>>> hugetlbfs, so I'll crank
>>>>>>> up testing on that part.
>>>>>>
>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>> unable to even boot linux-next
>>>>>> with my config/setup due to a GPF.
>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>> page, without first encountering a
>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>> TLB pages should be split when
>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>> mlock/munlock operations completely. One
>>>>>> of these assumptions is probably failing here...
>>>>>
>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>> there and got:
>>>>>
>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>> mapping:          (null) index:0
>>>>> x0
>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>
>>>>> I can also add anything else in there to get other debug output if
>>>>> you think of something else useful.
>>>>
>>>> Please try the following. Thanks in advance.
>>>
>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>> mapping:          (null) index:0x0
>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>> [  428.499889] start=140117131923456 pfn=16347137
>>> orig_start=140117130543104 page_increm
>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>> [  428.499889] first_page pfn=16347136
>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>> mapping:ffff880fb5c466c1 inde
>>> x:0x7f6f8fe00
>>> [  428.499889] page flags:
>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>
>>   From this print, it looks like the page is still a huge page.
>> One situation I guess is a huge page which isn't PageMlocked and passed
>> to munlock_vma_page(). I'm not sure whether this will happen.
>
> Yes that's quite likely the case. It's not illegal to happen I would say.
>
>> Please take a try this patch.
>
> I've made a simpler version that does away with the ugly page_mask thing completely.
> Please try that as well. Thanks.
>
> Also when working on this I think I found another potential but much rare problem
> when munlock_vma_page races with a THP split. That would however manifest such that
> part of the former tail pages would stay PageMlocked. But that still needs more thought.
> The bug at hand should however be fixed by this patch.

Yup, this patch seems to fix the issue previously reported.

However, I'll piggyback another thing that popped up now that the vm could run for a while which
also seems to be caused by the original patch. It looks like a pretty straightforward deadlock, but
I'm not clear enough of the locking rules in mm to actually fix that correctly myself.

The vm did actually deadlock after that spew.

[ 2873.680623] =============================================
[ 2873.682127] [ INFO: possible recursive locking detected ]
[ 2873.683111] 3.13.0-rc3-next-20131212-sasha-00007-g97a2f20 #4064 Tainted: G        W
[ 2873.684600] ---------------------------------------------
[ 2873.685551] trinity-child88/6156 is trying to acquire lock:

[ 2873.686348]  (&(&zone->lru_lock)->rlock){......}, at: [<ffffffff8125ccff>] 
__page_cache_release+0x5f/0x150
[ 2873.688106]
[ 2873.688106] but task is already holding lock:
[ 2873.689006]  (&(&zone->lru_lock)->rlock){......}, at: [<ffffffff81282289>] 
__munlock_pagevec+0x49/0x360
[ 2873.690176]
[ 2873.690176] other info that might help us debug this:
[ 2873.690176]  Possible unsafe locking scenario:
[ 2873.690176]
[ 2873.690176]        CPU0
[ 2873.690176]        ----
[ 2873.690176]   lock(&(&zone->lru_lock)->rlock);
[ 2873.690176]   lock(&(&zone->lru_lock)->rlock);
[ 2873.690176]
[ 2873.690176]  *** DEADLOCK ***
[ 2873.690176]
[ 2873.690176]  May be due to missing lock nesting notation
[ 2873.690176]
[ 2873.690176] 2 locks held by trinity-child88/6156:
[ 2873.690176]  #0:  (&mm->mmap_sem){++++++}, at: [<ffffffff8127816e>] SyS_remap_file_pages+0x17e/0x3f0
[ 2873.690176]  #1:  (&(&zone->lru_lock)->rlock){......}, at: [<ffffffff81282289>] 
__munlock_pagevec+0x49/0x360
[ 2873.690176]
[ 2873.690176] stack backtrace:
[ 2873.690176] CPU: 25 PID: 6156 Comm: trinity-child88 Tainted: G        W 
3.13.0-rc3-next-20131212-sasha-00007-g97a2f20 #4064
[ 2873.690176]  ffff880eb3a3bc10 ffff880e17351ae8 ffffffff843a9db7 0000000000000000
[ 2873.690176]  ffff880eb3a3b000 ffff880e17351b28 ffffffff8119263a ffff880e17351b08
[ 2873.690176]  ffffffff8107599d ffff880e17351b38 ffff880eb3a3bc48 ffff880eb3a3b000
[ 2873.690176] Call Trace:
[ 2873.690176]  [<ffffffff843a9db7>] dump_stack+0x52/0x7f
[ 2873.690176]  [<ffffffff8119263a>] print_deadlock_bug+0x11a/0x140
[ 2873.690176]  [<ffffffff8107599d>] ? sched_clock+0x1d/0x30
[ 2873.690176]  [<ffffffff8119474b>] validate_chain+0x60b/0x7b0
[ 2873.690176]  [<ffffffff81175588>] ? sched_clock_cpu+0x108/0x120
[ 2873.690176]  [<ffffffff81194d9d>] __lock_acquire+0x4ad/0x580
[ 2873.690176]  [<ffffffff81194ff2>] lock_acquire+0x182/0x1d0
[ 2873.690176]  [<ffffffff8125ccff>] ? __page_cache_release+0x5f/0x150
[ 2873.690176]  [<ffffffff81194dba>] ? __lock_acquire+0x4ca/0x580
[ 2873.690176]  [<ffffffff843b0931>] _raw_spin_lock_irqsave+0x91/0xd0
[ 2873.690176]  [<ffffffff8125ccff>] ? __page_cache_release+0x5f/0x150
[ 2873.690176]  [<ffffffff8125ccff>] __page_cache_release+0x5f/0x150
[ 2873.690176]  [<ffffffff81282289>] ? __munlock_pagevec+0x49/0x360
[ 2873.690176]  [<ffffffff8125ce36>] __put_single_page+0x16/0x30
[ 2873.690176]  [<ffffffff81282289>] ? __munlock_pagevec+0x49/0x360
[ 2873.690176]  [<ffffffff8125d7d8>] put_page+0x48/0x50
[ 2873.690176]  [<ffffffff812823b1>] __munlock_pagevec+0x171/0x360
[ 2873.690176]  [<ffffffff843b1756>] ? _raw_spin_unlock+0x46/0x60
[ 2873.690176]  [<ffffffff81282701>] ? __munlock_pagevec_fill+0x161/0x180
[ 2873.690176]  [<ffffffff812828b8>] munlock_vma_pages_range+0x198/0x1e0
[ 2873.690176]  [<ffffffff812782a7>] SyS_remap_file_pages+0x2b7/0x3f0
[ 2873.690176]  [<ffffffff843baed0>] tracesys+0xdd/0xe2

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-12 21:05                   ` Sasha Levin
@ 2013-12-13  8:49                     ` Bob Liu
  -1 siblings, 0 replies; 69+ messages in thread
From: Bob Liu @ 2013-12-13  8:49 UTC (permalink / raw)
  To: Sasha Levin, Vlastimil Babka
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/13/2013 05:05 AM, Sasha Levin wrote:
> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>
>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>
>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>> it again. Looking at
>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>> up testing on that part.
>>>>>>>
>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>> unable to even boot linux-next
>>>>>>> with my config/setup due to a GPF.
>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>> page, without first encountering a
>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>> TLB pages should be split when
>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>> mlock/munlock operations completely. One
>>>>>>> of these assumptions is probably failing here...
>>>>>>
>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>> there and got:
>>>>>>
>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>> mapping:          (null) index:0
>>>>>> x0
>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>
>>>>>> I can also add anything else in there to get other debug output if
>>>>>> you think of something else useful.
>>>>>
>>>>> Please try the following. Thanks in advance.
>>>>
>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>> mapping:          (null) index:0x0
>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>> orig_start=140117130543104 page_increm
>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>> [  428.499889] first_page pfn=16347136
>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>> mapping:ffff880fb5c466c1 inde
>>>> x:0x7f6f8fe00
>>>> [  428.499889] page flags:
>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>
>>>   From this print, it looks like the page is still a huge page.
>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>
>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>
>>> Please take a try this patch.
>>
>> I've made a simpler version that does away with the ugly page_mask
>> thing completely.
>> Please try that as well. Thanks.
>>
>> Also when working on this I think I found another potential but much
>> rare problem
>> when munlock_vma_page races with a THP split. That would however
>> manifest such that
>> part of the former tail pages would stay PageMlocked. But that still
>> needs more thought.
>> The bug at hand should however be fixed by this patch.
> 
> Yup, this patch seems to fix the issue previously reported.
> 
> However, I'll piggyback another thing that popped up now that the vm
> could run for a while which
> also seems to be caused by the original patch. It looks like a pretty
> straightforward deadlock, but

Looks like put_page() in __munlock_pagevec() need to get the
zone->lru_lock which is already held when entering __munlock_pagevec().

How about fix like this?

Thanks,
-Bob

diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..5880d63 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -291,7 +291,6 @@ static void __munlock_pagevec(struct pagevec *pvec,
struct zone *zone)
 	int pgrescued = 0;

 	/* Phase 1: page isolation */
-	spin_lock_irq(&zone->lru_lock);
 	for (i = 0; i < nr; i++) {
 		struct page *page = pvec->pages[i];

@@ -300,6 +299,7 @@ static void __munlock_pagevec(struct pagevec *pvec,
struct zone *zone)
 			int lru;

 			if (PageLRU(page)) {
+				spin_lock_irq(&zone->lru_lock);
 				lruvec = mem_cgroup_page_lruvec(page, zone);
 				lru = page_lru(page);
 				/*
@@ -308,6 +308,7 @@ static void __munlock_pagevec(struct pagevec *pvec,
struct zone *zone)
 				 */
 				ClearPageLRU(page);
 				del_page_from_lru_list(page, lruvec, lru);
+				spin_unlock_irq(&zone->lru_lock);
 			} else {
 				__munlock_isolation_failed(page);
 				goto skip_munlock;
@@ -325,8 +326,7 @@ skip_munlock:
 			delta_munlocked++;
 		}
 	}
-	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
-	spin_unlock_irq(&zone->lru_lock);
+	mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);

 	/* Phase 2: page munlock */
 	pagevec_init(&pvec_putback, 0);

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-13  8:49                     ` Bob Liu
  0 siblings, 0 replies; 69+ messages in thread
From: Bob Liu @ 2013-12-13  8:49 UTC (permalink / raw)
  To: Sasha Levin, Vlastimil Babka
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/13/2013 05:05 AM, Sasha Levin wrote:
> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>
>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>
>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>> it again. Looking at
>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>> up testing on that part.
>>>>>>>
>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>> unable to even boot linux-next
>>>>>>> with my config/setup due to a GPF.
>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>> page, without first encountering a
>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>> TLB pages should be split when
>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>> mlock/munlock operations completely. One
>>>>>>> of these assumptions is probably failing here...
>>>>>>
>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>> there and got:
>>>>>>
>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>> mapping:          (null) index:0
>>>>>> x0
>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>
>>>>>> I can also add anything else in there to get other debug output if
>>>>>> you think of something else useful.
>>>>>
>>>>> Please try the following. Thanks in advance.
>>>>
>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>> mapping:          (null) index:0x0
>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>> orig_start=140117130543104 page_increm
>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>> [  428.499889] first_page pfn=16347136
>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>> mapping:ffff880fb5c466c1 inde
>>>> x:0x7f6f8fe00
>>>> [  428.499889] page flags:
>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>
>>>   From this print, it looks like the page is still a huge page.
>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>
>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>
>>> Please take a try this patch.
>>
>> I've made a simpler version that does away with the ugly page_mask
>> thing completely.
>> Please try that as well. Thanks.
>>
>> Also when working on this I think I found another potential but much
>> rare problem
>> when munlock_vma_page races with a THP split. That would however
>> manifest such that
>> part of the former tail pages would stay PageMlocked. But that still
>> needs more thought.
>> The bug at hand should however be fixed by this patch.
> 
> Yup, this patch seems to fix the issue previously reported.
> 
> However, I'll piggyback another thing that popped up now that the vm
> could run for a while which
> also seems to be caused by the original patch. It looks like a pretty
> straightforward deadlock, but

Looks like put_page() in __munlock_pagevec() need to get the
zone->lru_lock which is already held when entering __munlock_pagevec().

How about fix like this?

Thanks,
-Bob

diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..5880d63 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -291,7 +291,6 @@ static void __munlock_pagevec(struct pagevec *pvec,
struct zone *zone)
 	int pgrescued = 0;

 	/* Phase 1: page isolation */
-	spin_lock_irq(&zone->lru_lock);
 	for (i = 0; i < nr; i++) {
 		struct page *page = pvec->pages[i];

@@ -300,6 +299,7 @@ static void __munlock_pagevec(struct pagevec *pvec,
struct zone *zone)
 			int lru;

 			if (PageLRU(page)) {
+				spin_lock_irq(&zone->lru_lock);
 				lruvec = mem_cgroup_page_lruvec(page, zone);
 				lru = page_lru(page);
 				/*
@@ -308,6 +308,7 @@ static void __munlock_pagevec(struct pagevec *pvec,
struct zone *zone)
 				 */
 				ClearPageLRU(page);
 				del_page_from_lru_list(page, lruvec, lru);
+				spin_unlock_irq(&zone->lru_lock);
 			} else {
 				__munlock_isolation_failed(page);
 				goto skip_munlock;
@@ -325,8 +326,7 @@ skip_munlock:
 			delta_munlocked++;
 		}
 	}
-	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
-	spin_unlock_irq(&zone->lru_lock);
+	mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);

 	/* Phase 2: page munlock */
 	pagevec_init(&pvec_putback, 0);

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-13  8:49                     ` Bob Liu
@ 2013-12-13  9:08                       ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-13  9:08 UTC (permalink / raw)
  To: Bob Liu, Sasha Levin
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/13/2013 09:49 AM, Bob Liu wrote:
> On 12/13/2013 05:05 AM, Sasha Levin wrote:
>> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>>
>>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>>
>>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>>> it again. Looking at
>>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>>> up testing on that part.
>>>>>>>>
>>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>>> unable to even boot linux-next
>>>>>>>> with my config/setup due to a GPF.
>>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>>> page, without first encountering a
>>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>>> TLB pages should be split when
>>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>>> mlock/munlock operations completely. One
>>>>>>>> of these assumptions is probably failing here...
>>>>>>>
>>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>>> there and got:
>>>>>>>
>>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>>> mapping:          (null) index:0
>>>>>>> x0
>>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>>
>>>>>>> I can also add anything else in there to get other debug output if
>>>>>>> you think of something else useful.
>>>>>>
>>>>>> Please try the following. Thanks in advance.
>>>>>
>>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>>> mapping:          (null) index:0x0
>>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>>> orig_start=140117130543104 page_increm
>>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>>> [  428.499889] first_page pfn=16347136
>>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>>> mapping:ffff880fb5c466c1 inde
>>>>> x:0x7f6f8fe00
>>>>> [  428.499889] page flags:
>>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>>
>>>>    From this print, it looks like the page is still a huge page.
>>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>>
>>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>>
>>>> Please take a try this patch.
>>>
>>> I've made a simpler version that does away with the ugly page_mask
>>> thing completely.
>>> Please try that as well. Thanks.
>>>
>>> Also when working on this I think I found another potential but much
>>> rare problem
>>> when munlock_vma_page races with a THP split. That would however
>>> manifest such that
>>> part of the former tail pages would stay PageMlocked. But that still
>>> needs more thought.
>>> The bug at hand should however be fixed by this patch.
>>
>> Yup, this patch seems to fix the issue previously reported.
>>
>> However, I'll piggyback another thing that popped up now that the vm
>> could run for a while which
>> also seems to be caused by the original patch. It looks like a pretty
>> straightforward deadlock, but

Sigh, put one down, patch it around... :)

> Looks like put_page() in __munlock_pagevec() need to get the
> zone->lru_lock which is already held when entering __munlock_pagevec().

I've come to the same conclusion, however:

> How about fix like this?

That unfortunately removes most of the purpose of this function which was to avoid repeated locking. 

Please try this patch.

-------8<-------
From: Vlastimil Babka <vbabka@suse.cz>
Date: Fri, 13 Dec 2013 10:03:25 +0100
Subject: [PATCH] Deadlock in __munlock_pagevec candidate fix

---
 mm/mlock.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index a34dfdc..c97273e 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -281,10 +281,12 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
 {
 	int i;
 	int nr = pagevec_count(pvec);
-	int delta_munlocked = -nr;
+	int delta_munlocked;
 	struct pagevec pvec_putback;
 	int pgrescued = 0;
 
+	pagevec_init(&pvec_putback, 0);
+
 	/* Phase 1: page isolation */
 	spin_lock_irq(&zone->lru_lock);
 	for (i = 0; i < nr; i++) {
@@ -313,16 +315,22 @@ skip_munlock:
 			/*
 			 * We won't be munlocking this page in the next phase
 			 * but we still need to release the follow_page_mask()
-			 * pin.
+			 * pin. We cannot do it under lru_lock however. If it's
+			 * the last pin, __page_cache_release would deadlock.
 			 */
+			pagevec_add(&pvec_putback, pvec->pages[i]);
 			pvec->pages[i] = NULL;
-			put_page(page);
-			delta_munlocked++;
 		}
 	}
+	delta_munlocked = -nr + pagevec_count(&pvec_putback);
 	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
 	spin_unlock_irq(&zone->lru_lock);
 
+	/* Now we can release pins of pages that we are not munlocking */
+	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
+		put_page(pvec_putback.pages[i]);
+	}
+
 	/* Phase 2: page munlock */
 	pagevec_init(&pvec_putback, 0);
 	for (i = 0; i < nr; i++) {
-- 
1.8.4



^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-13  9:08                       ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-13  9:08 UTC (permalink / raw)
  To: Bob Liu, Sasha Levin
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/13/2013 09:49 AM, Bob Liu wrote:
> On 12/13/2013 05:05 AM, Sasha Levin wrote:
>> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>>
>>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>>
>>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>>> it again. Looking at
>>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>>> up testing on that part.
>>>>>>>>
>>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>>> unable to even boot linux-next
>>>>>>>> with my config/setup due to a GPF.
>>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>>> page, without first encountering a
>>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>>> TLB pages should be split when
>>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>>> mlock/munlock operations completely. One
>>>>>>>> of these assumptions is probably failing here...
>>>>>>>
>>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>>> there and got:
>>>>>>>
>>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>>> mapping:          (null) index:0
>>>>>>> x0
>>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>>
>>>>>>> I can also add anything else in there to get other debug output if
>>>>>>> you think of something else useful.
>>>>>>
>>>>>> Please try the following. Thanks in advance.
>>>>>
>>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>>> mapping:          (null) index:0x0
>>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>>> orig_start=140117130543104 page_increm
>>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>>> [  428.499889] first_page pfn=16347136
>>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>>> mapping:ffff880fb5c466c1 inde
>>>>> x:0x7f6f8fe00
>>>>> [  428.499889] page flags:
>>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>>
>>>>    From this print, it looks like the page is still a huge page.
>>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>>
>>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>>
>>>> Please take a try this patch.
>>>
>>> I've made a simpler version that does away with the ugly page_mask
>>> thing completely.
>>> Please try that as well. Thanks.
>>>
>>> Also when working on this I think I found another potential but much
>>> rare problem
>>> when munlock_vma_page races with a THP split. That would however
>>> manifest such that
>>> part of the former tail pages would stay PageMlocked. But that still
>>> needs more thought.
>>> The bug at hand should however be fixed by this patch.
>>
>> Yup, this patch seems to fix the issue previously reported.
>>
>> However, I'll piggyback another thing that popped up now that the vm
>> could run for a while which
>> also seems to be caused by the original patch. It looks like a pretty
>> straightforward deadlock, but

Sigh, put one down, patch it around... :)

> Looks like put_page() in __munlock_pagevec() need to get the
> zone->lru_lock which is already held when entering __munlock_pagevec().

I've come to the same conclusion, however:

> How about fix like this?

That unfortunately removes most of the purpose of this function which was to avoid repeated locking. 

Please try this patch.

-------8<-------
From: Vlastimil Babka <vbabka@suse.cz>
Date: Fri, 13 Dec 2013 10:03:25 +0100
Subject: [PATCH] Deadlock in __munlock_pagevec candidate fix

---
 mm/mlock.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index a34dfdc..c97273e 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -281,10 +281,12 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
 {
 	int i;
 	int nr = pagevec_count(pvec);
-	int delta_munlocked = -nr;
+	int delta_munlocked;
 	struct pagevec pvec_putback;
 	int pgrescued = 0;
 
+	pagevec_init(&pvec_putback, 0);
+
 	/* Phase 1: page isolation */
 	spin_lock_irq(&zone->lru_lock);
 	for (i = 0; i < nr; i++) {
@@ -313,16 +315,22 @@ skip_munlock:
 			/*
 			 * We won't be munlocking this page in the next phase
 			 * but we still need to release the follow_page_mask()
-			 * pin.
+			 * pin. We cannot do it under lru_lock however. If it's
+			 * the last pin, __page_cache_release would deadlock.
 			 */
+			pagevec_add(&pvec_putback, pvec->pages[i]);
 			pvec->pages[i] = NULL;
-			put_page(page);
-			delta_munlocked++;
 		}
 	}
+	delta_munlocked = -nr + pagevec_count(&pvec_putback);
 	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
 	spin_unlock_irq(&zone->lru_lock);
 
+	/* Now we can release pins of pages that we are not munlocking */
+	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
+		put_page(pvec_putback.pages[i]);
+	}
+
 	/* Phase 2: page munlock */
 	pagevec_init(&pvec_putback, 0);
 	for (i = 0; i < nr; i++) {
-- 
1.8.4


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-13  9:08                       ` Vlastimil Babka
@ 2013-12-15 19:49                         ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-15 19:49 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/13/2013 04:08 AM, Vlastimil Babka wrote:
> On 12/13/2013 09:49 AM, Bob Liu wrote:
>> On 12/13/2013 05:05 AM, Sasha Levin wrote:
>>> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>>>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>>>
>>>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>>>
>>>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>>>> it again. Looking at
>>>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>>>> up testing on that part.
>>>>>>>>>
>>>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>>>> unable to even boot linux-next
>>>>>>>>> with my config/setup due to a GPF.
>>>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>>>> page, without first encountering a
>>>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>>>> TLB pages should be split when
>>>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>>>> mlock/munlock operations completely. One
>>>>>>>>> of these assumptions is probably failing here...
>>>>>>>>
>>>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>>>> there and got:
>>>>>>>>
>>>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>>>> mapping:          (null) index:0
>>>>>>>> x0
>>>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>>>
>>>>>>>> I can also add anything else in there to get other debug output if
>>>>>>>> you think of something else useful.
>>>>>>>
>>>>>>> Please try the following. Thanks in advance.
>>>>>>
>>>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>>>> mapping:          (null) index:0x0
>>>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>>>> orig_start=140117130543104 page_increm
>>>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>>>> [  428.499889] first_page pfn=16347136
>>>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>>>> mapping:ffff880fb5c466c1 inde
>>>>>> x:0x7f6f8fe00
>>>>>> [  428.499889] page flags:
>>>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>>>
>>>>>     From this print, it looks like the page is still a huge page.
>>>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>>>
>>>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>>>
>>>>> Please take a try this patch.
>>>>
>>>> I've made a simpler version that does away with the ugly page_mask
>>>> thing completely.
>>>> Please try that as well. Thanks.
>>>>
>>>> Also when working on this I think I found another potential but much
>>>> rare problem
>>>> when munlock_vma_page races with a THP split. That would however
>>>> manifest such that
>>>> part of the former tail pages would stay PageMlocked. But that still
>>>> needs more thought.
>>>> The bug at hand should however be fixed by this patch.
>>>
>>> Yup, this patch seems to fix the issue previously reported.
>>>
>>> However, I'll piggyback another thing that popped up now that the vm
>>> could run for a while which
>>> also seems to be caused by the original patch. It looks like a pretty
>>> straightforward deadlock, but
>
> Sigh, put one down, patch it around... :)
>
>> Looks like put_page() in __munlock_pagevec() need to get the
>> zone->lru_lock which is already held when entering __munlock_pagevec().
>
> I've come to the same conclusion, however:
>
>> How about fix like this?
>
> That unfortunately removes most of the purpose of this function which was to avoid repeated locking.
>
> Please try this patch.

All seems to work, thanks!


Thanks,
Sasha


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2013-12-15 19:49                         ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2013-12-15 19:49 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/13/2013 04:08 AM, Vlastimil Babka wrote:
> On 12/13/2013 09:49 AM, Bob Liu wrote:
>> On 12/13/2013 05:05 AM, Sasha Levin wrote:
>>> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>>>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>>>
>>>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>>>
>>>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>>>> it again. Looking at
>>>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>>>> up testing on that part.
>>>>>>>>>
>>>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>>>> unable to even boot linux-next
>>>>>>>>> with my config/setup due to a GPF.
>>>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>>>> page, without first encountering a
>>>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>>>> TLB pages should be split when
>>>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>>>> mlock/munlock operations completely. One
>>>>>>>>> of these assumptions is probably failing here...
>>>>>>>>
>>>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>>>> there and got:
>>>>>>>>
>>>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>>>> mapping:          (null) index:0
>>>>>>>> x0
>>>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>>>
>>>>>>>> I can also add anything else in there to get other debug output if
>>>>>>>> you think of something else useful.
>>>>>>>
>>>>>>> Please try the following. Thanks in advance.
>>>>>>
>>>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>>>> mapping:          (null) index:0x0
>>>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>>>> orig_start=140117130543104 page_increm
>>>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>>>> [  428.499889] first_page pfn=16347136
>>>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>>>> mapping:ffff880fb5c466c1 inde
>>>>>> x:0x7f6f8fe00
>>>>>> [  428.499889] page flags:
>>>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>>>
>>>>>     From this print, it looks like the page is still a huge page.
>>>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>>>
>>>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>>>
>>>>> Please take a try this patch.
>>>>
>>>> I've made a simpler version that does away with the ugly page_mask
>>>> thing completely.
>>>> Please try that as well. Thanks.
>>>>
>>>> Also when working on this I think I found another potential but much
>>>> rare problem
>>>> when munlock_vma_page races with a THP split. That would however
>>>> manifest such that
>>>> part of the former tail pages would stay PageMlocked. But that still
>>>> needs more thought.
>>>> The bug at hand should however be fixed by this patch.
>>>
>>> Yup, this patch seems to fix the issue previously reported.
>>>
>>> However, I'll piggyback another thing that popped up now that the vm
>>> could run for a while which
>>> also seems to be caused by the original patch. It looks like a pretty
>>> straightforward deadlock, but
>
> Sigh, put one down, patch it around... :)
>
>> Looks like put_page() in __munlock_pagevec() need to get the
>> zone->lru_lock which is already held when entering __munlock_pagevec().
>
> I've come to the same conclusion, however:
>
>> How about fix like this?
>
> That unfortunately removes most of the purpose of this function which was to avoid repeated locking.
>
> Please try this patch.

All seems to work, thanks!


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [PATCH 0/3] Fix bugs in munlock
  2013-12-15 19:49                         ` Sasha Levin
@ 2013-12-16 10:14                           ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-16 10:14 UTC (permalink / raw)
  To: Andrew Morton, Sasha Levin
  Cc: linux-mm, linux-kernel, Mel Gorman, Rik van Riel, joern,
	Michel Lespinasse, Vlastimil Babka

This patch mini-series is a result of Sasha Levin's bug reports via trinity.

First two patches are quite straightforward fixes for bugs introduced in 3.12,
and earlier versions have been tested. Sasha, can you please test the final
versions of the first two (together) again? The first one added an extra
VM_BUG_ON.

The third is based on me noticing there might still be an (older than 3.12)
race with a THP page split with non-fatal but still bad consequences, such as
pages being kept mlocked. Since this is quite rare and was not reported, any
review agreeing that it can really happen would be great. Testing as well, of
course.  So it's kind of RFC at this point.

Vlastimil Babka (3):
  mm: munlock: fix a bug where THP tail page is encountered
  mm: munlock: fix deadlock in __munlock_pagevec()
  mm: munlock: fix potential race with THP page split

 mm/mlock.c | 116 ++++++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 76 insertions(+), 40 deletions(-)

-- 
1.8.4


^ permalink raw reply	[flat|nested] 69+ messages in thread

* [PATCH 0/3] Fix bugs in munlock
@ 2013-12-16 10:14                           ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-16 10:14 UTC (permalink / raw)
  To: Andrew Morton, Sasha Levin
  Cc: linux-mm, linux-kernel, Mel Gorman, Rik van Riel, joern,
	Michel Lespinasse, Vlastimil Babka

This patch mini-series is a result of Sasha Levin's bug reports via trinity.

First two patches are quite straightforward fixes for bugs introduced in 3.12,
and earlier versions have been tested. Sasha, can you please test the final
versions of the first two (together) again? The first one added an extra
VM_BUG_ON.

The third is based on me noticing there might still be an (older than 3.12)
race with a THP page split with non-fatal but still bad consequences, such as
pages being kept mlocked. Since this is quite rare and was not reported, any
review agreeing that it can really happen would be great. Testing as well, of
course.  So it's kind of RFC at this point.

Vlastimil Babka (3):
  mm: munlock: fix a bug where THP tail page is encountered
  mm: munlock: fix deadlock in __munlock_pagevec()
  mm: munlock: fix potential race with THP page split

 mm/mlock.c | 116 ++++++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 76 insertions(+), 40 deletions(-)

-- 
1.8.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2013-12-16 10:14                           ` Vlastimil Babka
@ 2013-12-16 10:14                             ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-16 10:14 UTC (permalink / raw)
  To: Andrew Morton, Sasha Levin
  Cc: linux-mm, linux-kernel, Mel Gorman, Rik van Riel, joern,
	Michel Lespinasse, Vlastimil Babka, stable

Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
munlock skips tail pages of a munlocked THP page. However, when the head page
already has PageMlocked unset, it will not skip the tail pages.

Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
munlock+putback using pagevec") has added a PageTransHuge() check which
contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
trinity, on the first tail page of a THP page without PageMlocked flag.

This patch fixes the issue by skipping tail pages also in the case when
PageMlocked flag is unset. There is still a possibility of race with THP page
split between clearing PageMlocked and determining how many pages to skip.
The race might result in former tail pages not being skipped, which is however
no longer a bug, as during the skip the PageTail flags are cleared.

However this race also affects correctness of NR_MLOCK accounting, which is to
be fixed in a separate patch.

Cc: stable@kernel.org
Reported-by: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
 mm/mlock.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..3847b13 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -148,21 +148,30 @@ static void __munlock_isolation_failed(struct page *page)
  */
 unsigned int munlock_vma_page(struct page *page)
 {
-	unsigned int page_mask = 0;
+	unsigned int nr_pages;
 
 	BUG_ON(!PageLocked(page));
 
 	if (TestClearPageMlocked(page)) {
-		unsigned int nr_pages = hpage_nr_pages(page);
+		nr_pages = hpage_nr_pages(page);
 		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
-		page_mask = nr_pages - 1;
 		if (!isolate_lru_page(page))
 			__munlock_isolated_page(page);
 		else
 			__munlock_isolation_failed(page);
+	} else {
+		nr_pages = hpage_nr_pages(page);
 	}
 
-	return page_mask;
+	/*
+	 * Regardless of the original PageMlocked flag, we determine nr_pages
+	 * after touching the flag. This leaves a possible race with a THP page
+	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
+	 * Returning a smaller mask due to that is OK, the worst that can
+	 * happen is subsequent useless scanning of the former tail pages.
+	 * The NR_MLOCK accounting can however become broken.
+	 */
+	return nr_pages - 1;
 }
 
 /**
@@ -440,7 +449,8 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 
 	while (start < end) {
 		struct page *page = NULL;
-		unsigned int page_mask, page_increm;
+		unsigned int page_mask;
+		unsigned long page_increm;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -490,7 +500,9 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				goto next;
 			}
 		}
-		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
+		/* It's a bug to munlock in the middle of a THP page */
+		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
+		page_increm = 1 + page_mask;
 		start += page_increm * PAGE_SIZE;
 next:
 		cond_resched();
-- 
1.8.4


^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2013-12-16 10:14                             ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-16 10:14 UTC (permalink / raw)
  To: Andrew Morton, Sasha Levin
  Cc: linux-mm, linux-kernel, Mel Gorman, Rik van Riel, joern,
	Michel Lespinasse, Vlastimil Babka, stable

Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
munlock skips tail pages of a munlocked THP page. However, when the head page
already has PageMlocked unset, it will not skip the tail pages.

Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
munlock+putback using pagevec") has added a PageTransHuge() check which
contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
trinity, on the first tail page of a THP page without PageMlocked flag.

This patch fixes the issue by skipping tail pages also in the case when
PageMlocked flag is unset. There is still a possibility of race with THP page
split between clearing PageMlocked and determining how many pages to skip.
The race might result in former tail pages not being skipped, which is however
no longer a bug, as during the skip the PageTail flags are cleared.

However this race also affects correctness of NR_MLOCK accounting, which is to
be fixed in a separate patch.

Cc: stable@kernel.org
Reported-by: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
 mm/mlock.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..3847b13 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -148,21 +148,30 @@ static void __munlock_isolation_failed(struct page *page)
  */
 unsigned int munlock_vma_page(struct page *page)
 {
-	unsigned int page_mask = 0;
+	unsigned int nr_pages;
 
 	BUG_ON(!PageLocked(page));
 
 	if (TestClearPageMlocked(page)) {
-		unsigned int nr_pages = hpage_nr_pages(page);
+		nr_pages = hpage_nr_pages(page);
 		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
-		page_mask = nr_pages - 1;
 		if (!isolate_lru_page(page))
 			__munlock_isolated_page(page);
 		else
 			__munlock_isolation_failed(page);
+	} else {
+		nr_pages = hpage_nr_pages(page);
 	}
 
-	return page_mask;
+	/*
+	 * Regardless of the original PageMlocked flag, we determine nr_pages
+	 * after touching the flag. This leaves a possible race with a THP page
+	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
+	 * Returning a smaller mask due to that is OK, the worst that can
+	 * happen is subsequent useless scanning of the former tail pages.
+	 * The NR_MLOCK accounting can however become broken.
+	 */
+	return nr_pages - 1;
 }
 
 /**
@@ -440,7 +449,8 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 
 	while (start < end) {
 		struct page *page = NULL;
-		unsigned int page_mask, page_increm;
+		unsigned int page_mask;
+		unsigned long page_increm;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -490,7 +500,9 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				goto next;
 			}
 		}
-		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
+		/* It's a bug to munlock in the middle of a THP page */
+		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
+		page_increm = 1 + page_mask;
 		start += page_increm * PAGE_SIZE;
 next:
 		cond_resched();
-- 
1.8.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [PATCH 2/3] mm: munlock: fix deadlock in __munlock_pagevec()
  2013-12-16 10:14                           ` Vlastimil Babka
@ 2013-12-16 10:14                             ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-16 10:14 UTC (permalink / raw)
  To: Andrew Morton, Sasha Levin
  Cc: linux-mm, linux-kernel, Mel Gorman, Rik van Riel, joern,
	Michel Lespinasse, Vlastimil Babka, stable

Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
munlock+putback using pagevec" introduced __munlock_pagevec() to speed up
munlock by holding lru_lock over multiple isolated pages. Pages that fail to
be isolated are put_back() immediately, also within the lock.

This can lead to deadlock when __munlock_pagevec() becomes the holder of the
last page pin and put_back() leads to __page_cache_release() which also locks
lru_lock. The deadlock has been observed by Sasha Levin using trinity.

This patch avoids the deadlock by deferring put_back() operations until
lru_lock is released. Another pagevec (which is also used by later phases
of the function is reused to gather the pages for put_back() operation.

Cc: stable@kernel.org
Reported-by: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
 mm/mlock.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index 3847b13..31383d5 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -295,10 +295,12 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
 {
 	int i;
 	int nr = pagevec_count(pvec);
-	int delta_munlocked = -nr;
+	int delta_munlocked;
 	struct pagevec pvec_putback;
 	int pgrescued = 0;
 
+	pagevec_init(&pvec_putback, 0);
+
 	/* Phase 1: page isolation */
 	spin_lock_irq(&zone->lru_lock);
 	for (i = 0; i < nr; i++) {
@@ -327,16 +329,22 @@ skip_munlock:
 			/*
 			 * We won't be munlocking this page in the next phase
 			 * but we still need to release the follow_page_mask()
-			 * pin.
+			 * pin. We cannot do it under lru_lock however. If it's
+			 * the last pin, __page_cache_release would deadlock.
 			 */
+			pagevec_add(&pvec_putback, pvec->pages[i]);
 			pvec->pages[i] = NULL;
-			put_page(page);
-			delta_munlocked++;
 		}
 	}
+	delta_munlocked = -nr + pagevec_count(&pvec_putback);
 	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
 	spin_unlock_irq(&zone->lru_lock);
 
+	/* Now we can release pins of pages that we are not munlocking */
+	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
+		put_page(pvec_putback.pages[i]);
+	}
+
 	/* Phase 2: page munlock */
 	pagevec_init(&pvec_putback, 0);
 	for (i = 0; i < nr; i++) {
-- 
1.8.4


^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [PATCH 2/3] mm: munlock: fix deadlock in __munlock_pagevec()
@ 2013-12-16 10:14                             ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-16 10:14 UTC (permalink / raw)
  To: Andrew Morton, Sasha Levin
  Cc: linux-mm, linux-kernel, Mel Gorman, Rik van Riel, joern,
	Michel Lespinasse, Vlastimil Babka, stable

Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
munlock+putback using pagevec" introduced __munlock_pagevec() to speed up
munlock by holding lru_lock over multiple isolated pages. Pages that fail to
be isolated are put_back() immediately, also within the lock.

This can lead to deadlock when __munlock_pagevec() becomes the holder of the
last page pin and put_back() leads to __page_cache_release() which also locks
lru_lock. The deadlock has been observed by Sasha Levin using trinity.

This patch avoids the deadlock by deferring put_back() operations until
lru_lock is released. Another pagevec (which is also used by later phases
of the function is reused to gather the pages for put_back() operation.

Cc: stable@kernel.org
Reported-by: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
 mm/mlock.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index 3847b13..31383d5 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -295,10 +295,12 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
 {
 	int i;
 	int nr = pagevec_count(pvec);
-	int delta_munlocked = -nr;
+	int delta_munlocked;
 	struct pagevec pvec_putback;
 	int pgrescued = 0;
 
+	pagevec_init(&pvec_putback, 0);
+
 	/* Phase 1: page isolation */
 	spin_lock_irq(&zone->lru_lock);
 	for (i = 0; i < nr; i++) {
@@ -327,16 +329,22 @@ skip_munlock:
 			/*
 			 * We won't be munlocking this page in the next phase
 			 * but we still need to release the follow_page_mask()
-			 * pin.
+			 * pin. We cannot do it under lru_lock however. If it's
+			 * the last pin, __page_cache_release would deadlock.
 			 */
+			pagevec_add(&pvec_putback, pvec->pages[i]);
 			pvec->pages[i] = NULL;
-			put_page(page);
-			delta_munlocked++;
 		}
 	}
+	delta_munlocked = -nr + pagevec_count(&pvec_putback);
 	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
 	spin_unlock_irq(&zone->lru_lock);
 
+	/* Now we can release pins of pages that we are not munlocking */
+	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
+		put_page(pvec_putback.pages[i]);
+	}
+
 	/* Phase 2: page munlock */
 	pagevec_init(&pvec_putback, 0);
 	for (i = 0; i < nr; i++) {
-- 
1.8.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [RFC PATCH 3/3] mm: munlock: fix potential race with THP page split
  2013-12-16 10:14                           ` Vlastimil Babka
@ 2013-12-16 10:14                             ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-16 10:14 UTC (permalink / raw)
  To: Andrew Morton, Sasha Levin
  Cc: linux-mm, linux-kernel, Mel Gorman, Rik van Riel, joern,
	Michel Lespinasse, Vlastimil Babka, stable

Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
munlock skips tail pages of a munlocked THP page. There is some attempt to
prevent bad consequences of racing with a THP page split, but code inspection
indicates that there are two problems that may lead to a non-fatal, yet wrong
outcome.

First, __split_huge_page_refcount() copies flags including PageMlocked from
the head page to the tail pages. Clearing PageMlocked by munlock_vma_page()
in the middle of this operation might result in part of tail pages left with
PageMlocked flag. As the head page still appears to be a THP page until all
tail pages are processed, munlock_vma_page() might think it munlocked the whole
THP page and skip all the former tail pages. Before ff6a6da60, those pages
would be cleared in further iterations of munlock_vma_pages_range(), but
NR_MLOCK would still become undercounted (related the next point).

Second, NR_MLOCK accounting is based on call to hpage_nr_pages() after the
PageMlocked is cleared. The accounting might also become inconsistent due to
race with __split_huge_page_refcount()
 - undercount when HUGE_PMD_NR is subtracted, but some tail pages are left
   with PageMlocked set and counted again (only possible before ff6a6da60)
 - overcount when hpage_nr_pages() sees a normal page (split has already
   finished), but the parallel split has meanwhile cleared PageMlocked from
   additional tail pages

This patch prevents both problems via extending the scope of lru_lock in
munlock_vma_page(). This is convenient because:
- __split_huge_page_refcount() takes lru_lock for its whole operation
- munlock_vma_page() typically takes lru_lock anyway for page isolation

As this becomes a second function where page isolation is done with lru_lock
already held, factor this out to a new __munlock_isolate_lru_page() function
and clean up the code around.

Cc: stable@kernel.org
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
 mm/mlock.c | 104 +++++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 60 insertions(+), 44 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index 31383d5..ca597f3 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -91,6 +91,26 @@ void mlock_vma_page(struct page *page)
 }
 
 /*
+ * Isolate a page from LRU with optional get_page() pin.
+ * Assumes lru_lock already held and page already pinned.
+ */
+static bool __munlock_isolate_lru_page(struct page *page, bool getpage)
+{
+	if (PageLRU(page)) {
+		struct lruvec *lruvec = mem_cgroup_page_lruvec(page,
+				page_zone(page));
+
+		if (getpage)
+			get_page(page);
+		ClearPageLRU(page);
+		del_page_from_lru_list(page, lruvec, page_lru(page));
+		return true;
+	}
+
+	return false;
+}
+
+/*
  * Finish munlock after successful page isolation
  *
  * Page must be locked. This is a wrapper for try_to_munlock()
@@ -126,9 +146,9 @@ static void __munlock_isolated_page(struct page *page)
 static void __munlock_isolation_failed(struct page *page)
 {
 	if (PageUnevictable(page))
-		count_vm_event(UNEVICTABLE_PGSTRANDED);
+		__count_vm_event(UNEVICTABLE_PGSTRANDED);
 	else
-		count_vm_event(UNEVICTABLE_PGMUNLOCKED);
+		__count_vm_event(UNEVICTABLE_PGMUNLOCKED);
 }
 
 /**
@@ -149,28 +169,34 @@ static void __munlock_isolation_failed(struct page *page)
 unsigned int munlock_vma_page(struct page *page)
 {
 	unsigned int nr_pages;
+	struct zone *zone = page_zone(page);
 
 	BUG_ON(!PageLocked(page));
 
-	if (TestClearPageMlocked(page)) {
-		nr_pages = hpage_nr_pages(page);
-		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
-		if (!isolate_lru_page(page))
-			__munlock_isolated_page(page);
-		else
-			__munlock_isolation_failed(page);
-	} else {
-		nr_pages = hpage_nr_pages(page);
-	}
-
 	/*
-	 * Regardless of the original PageMlocked flag, we determine nr_pages
-	 * after touching the flag. This leaves a possible race with a THP page
-	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
-	 * Returning a smaller mask due to that is OK, the worst that can
-	 * happen is subsequent useless scanning of the former tail pages.
-	 * The NR_MLOCK accounting can however become broken.
+	 * Serialize with any parallel __split_huge_page_refcount() which
+	 * might otherwise copy PageMlocked to part of the tail pages before
+	 * we clear it in the head page. It also stabilizes hpage_nr_pages().
 	 */
+	spin_lock_irq(&zone->lru_lock);
+
+	nr_pages = hpage_nr_pages(page);
+	if (!TestClearPageMlocked(page))
+		goto unlock_out;
+
+	__mod_zone_page_state(zone, NR_MLOCK, -nr_pages);
+
+	if (__munlock_isolate_lru_page(page, true)) {
+		spin_unlock_irq(&zone->lru_lock);
+		__munlock_isolated_page(page);
+		goto out;
+	}
+	__munlock_isolation_failed(page);
+
+unlock_out:
+	spin_unlock_irq(&zone->lru_lock);
+
+out:
 	return nr_pages - 1;
 }
 
@@ -307,34 +333,24 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
 		struct page *page = pvec->pages[i];
 
 		if (TestClearPageMlocked(page)) {
-			struct lruvec *lruvec;
-			int lru;
-
-			if (PageLRU(page)) {
-				lruvec = mem_cgroup_page_lruvec(page, zone);
-				lru = page_lru(page);
-				/*
-				 * We already have pin from follow_page_mask()
-				 * so we can spare the get_page() here.
-				 */
-				ClearPageLRU(page);
-				del_page_from_lru_list(page, lruvec, lru);
-			} else {
-				__munlock_isolation_failed(page);
-				goto skip_munlock;
-			}
-
-		} else {
-skip_munlock:
 			/*
-			 * We won't be munlocking this page in the next phase
-			 * but we still need to release the follow_page_mask()
-			 * pin. We cannot do it under lru_lock however. If it's
-			 * the last pin, __page_cache_release would deadlock.
+			 * We already have pin from follow_page_mask()
+			 * so we can spare the get_page() here.
 			 */
-			pagevec_add(&pvec_putback, pvec->pages[i]);
-			pvec->pages[i] = NULL;
+			if (__munlock_isolate_lru_page(page, false))
+				continue;
+			else
+				__munlock_isolation_failed(page);
 		}
+
+		/*
+		 * We won't be munlocking this page in the next phase
+		 * but we still need to release the follow_page_mask()
+		 * pin. We cannot do it under lru_lock however. If it's
+		 * the last pin, __page_cache_release() would deadlock.
+		 */
+		pagevec_add(&pvec_putback, pvec->pages[i]);
+		pvec->pages[i] = NULL;
 	}
 	delta_munlocked = -nr + pagevec_count(&pvec_putback);
 	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
-- 
1.8.4


^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [RFC PATCH 3/3] mm: munlock: fix potential race with THP page split
@ 2013-12-16 10:14                             ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-16 10:14 UTC (permalink / raw)
  To: Andrew Morton, Sasha Levin
  Cc: linux-mm, linux-kernel, Mel Gorman, Rik van Riel, joern,
	Michel Lespinasse, Vlastimil Babka, stable

Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
munlock skips tail pages of a munlocked THP page. There is some attempt to
prevent bad consequences of racing with a THP page split, but code inspection
indicates that there are two problems that may lead to a non-fatal, yet wrong
outcome.

First, __split_huge_page_refcount() copies flags including PageMlocked from
the head page to the tail pages. Clearing PageMlocked by munlock_vma_page()
in the middle of this operation might result in part of tail pages left with
PageMlocked flag. As the head page still appears to be a THP page until all
tail pages are processed, munlock_vma_page() might think it munlocked the whole
THP page and skip all the former tail pages. Before ff6a6da60, those pages
would be cleared in further iterations of munlock_vma_pages_range(), but
NR_MLOCK would still become undercounted (related the next point).

Second, NR_MLOCK accounting is based on call to hpage_nr_pages() after the
PageMlocked is cleared. The accounting might also become inconsistent due to
race with __split_huge_page_refcount()
 - undercount when HUGE_PMD_NR is subtracted, but some tail pages are left
   with PageMlocked set and counted again (only possible before ff6a6da60)
 - overcount when hpage_nr_pages() sees a normal page (split has already
   finished), but the parallel split has meanwhile cleared PageMlocked from
   additional tail pages

This patch prevents both problems via extending the scope of lru_lock in
munlock_vma_page(). This is convenient because:
- __split_huge_page_refcount() takes lru_lock for its whole operation
- munlock_vma_page() typically takes lru_lock anyway for page isolation

As this becomes a second function where page isolation is done with lru_lock
already held, factor this out to a new __munlock_isolate_lru_page() function
and clean up the code around.

Cc: stable@kernel.org
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
 mm/mlock.c | 104 +++++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 60 insertions(+), 44 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index 31383d5..ca597f3 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -91,6 +91,26 @@ void mlock_vma_page(struct page *page)
 }
 
 /*
+ * Isolate a page from LRU with optional get_page() pin.
+ * Assumes lru_lock already held and page already pinned.
+ */
+static bool __munlock_isolate_lru_page(struct page *page, bool getpage)
+{
+	if (PageLRU(page)) {
+		struct lruvec *lruvec = mem_cgroup_page_lruvec(page,
+				page_zone(page));
+
+		if (getpage)
+			get_page(page);
+		ClearPageLRU(page);
+		del_page_from_lru_list(page, lruvec, page_lru(page));
+		return true;
+	}
+
+	return false;
+}
+
+/*
  * Finish munlock after successful page isolation
  *
  * Page must be locked. This is a wrapper for try_to_munlock()
@@ -126,9 +146,9 @@ static void __munlock_isolated_page(struct page *page)
 static void __munlock_isolation_failed(struct page *page)
 {
 	if (PageUnevictable(page))
-		count_vm_event(UNEVICTABLE_PGSTRANDED);
+		__count_vm_event(UNEVICTABLE_PGSTRANDED);
 	else
-		count_vm_event(UNEVICTABLE_PGMUNLOCKED);
+		__count_vm_event(UNEVICTABLE_PGMUNLOCKED);
 }
 
 /**
@@ -149,28 +169,34 @@ static void __munlock_isolation_failed(struct page *page)
 unsigned int munlock_vma_page(struct page *page)
 {
 	unsigned int nr_pages;
+	struct zone *zone = page_zone(page);
 
 	BUG_ON(!PageLocked(page));
 
-	if (TestClearPageMlocked(page)) {
-		nr_pages = hpage_nr_pages(page);
-		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
-		if (!isolate_lru_page(page))
-			__munlock_isolated_page(page);
-		else
-			__munlock_isolation_failed(page);
-	} else {
-		nr_pages = hpage_nr_pages(page);
-	}
-
 	/*
-	 * Regardless of the original PageMlocked flag, we determine nr_pages
-	 * after touching the flag. This leaves a possible race with a THP page
-	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
-	 * Returning a smaller mask due to that is OK, the worst that can
-	 * happen is subsequent useless scanning of the former tail pages.
-	 * The NR_MLOCK accounting can however become broken.
+	 * Serialize with any parallel __split_huge_page_refcount() which
+	 * might otherwise copy PageMlocked to part of the tail pages before
+	 * we clear it in the head page. It also stabilizes hpage_nr_pages().
 	 */
+	spin_lock_irq(&zone->lru_lock);
+
+	nr_pages = hpage_nr_pages(page);
+	if (!TestClearPageMlocked(page))
+		goto unlock_out;
+
+	__mod_zone_page_state(zone, NR_MLOCK, -nr_pages);
+
+	if (__munlock_isolate_lru_page(page, true)) {
+		spin_unlock_irq(&zone->lru_lock);
+		__munlock_isolated_page(page);
+		goto out;
+	}
+	__munlock_isolation_failed(page);
+
+unlock_out:
+	spin_unlock_irq(&zone->lru_lock);
+
+out:
 	return nr_pages - 1;
 }
 
@@ -307,34 +333,24 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
 		struct page *page = pvec->pages[i];
 
 		if (TestClearPageMlocked(page)) {
-			struct lruvec *lruvec;
-			int lru;
-
-			if (PageLRU(page)) {
-				lruvec = mem_cgroup_page_lruvec(page, zone);
-				lru = page_lru(page);
-				/*
-				 * We already have pin from follow_page_mask()
-				 * so we can spare the get_page() here.
-				 */
-				ClearPageLRU(page);
-				del_page_from_lru_list(page, lruvec, lru);
-			} else {
-				__munlock_isolation_failed(page);
-				goto skip_munlock;
-			}
-
-		} else {
-skip_munlock:
 			/*
-			 * We won't be munlocking this page in the next phase
-			 * but we still need to release the follow_page_mask()
-			 * pin. We cannot do it under lru_lock however. If it's
-			 * the last pin, __page_cache_release would deadlock.
+			 * We already have pin from follow_page_mask()
+			 * so we can spare the get_page() here.
 			 */
-			pagevec_add(&pvec_putback, pvec->pages[i]);
-			pvec->pages[i] = NULL;
+			if (__munlock_isolate_lru_page(page, false))
+				continue;
+			else
+				__munlock_isolation_failed(page);
 		}
+
+		/*
+		 * We won't be munlocking this page in the next phase
+		 * but we still need to release the follow_page_mask()
+		 * pin. We cannot do it under lru_lock however. If it's
+		 * the last pin, __page_cache_release() would deadlock.
+		 */
+		pagevec_add(&pvec_putback, pvec->pages[i]);
+		pvec->pages[i] = NULL;
 	}
 	delta_munlocked = -nr + pagevec_count(&pvec_putback);
 	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
-- 
1.8.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: [PATCH 2/3] mm: munlock: fix deadlock in __munlock_pagevec()
  2013-12-16 10:14                             ` Vlastimil Babka
@ 2013-12-17  0:31                               ` Andrew Morton
  -1 siblings, 0 replies; 69+ messages in thread
From: Andrew Morton @ 2013-12-17  0:31 UTC (permalink / raw)
  To: Vlastimil Babka
  Cc: Sasha Levin, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse, stable

On Mon, 16 Dec 2013 11:14:15 +0100 Vlastimil Babka <vbabka@suse.cz> wrote:

> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
> munlock+putback using pagevec" introduced __munlock_pagevec() to speed up
> munlock by holding lru_lock over multiple isolated pages. Pages that fail to
> be isolated are put_back() immediately, also within the lock.
> 
> This can lead to deadlock when __munlock_pagevec() becomes the holder of the
> last page pin and put_back() leads to __page_cache_release() which also locks
> lru_lock. The deadlock has been observed by Sasha Levin using trinity.
> 
> This patch avoids the deadlock by deferring put_back() operations until
> lru_lock is released. Another pagevec (which is also used by later phases
> of the function is reused to gather the pages for put_back() operation.
> 
> ...
>

Thanks for fixing this one.  I'll cross it off the rather large list of
recent MM regressions :(

> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -295,10 +295,12 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
>  {
>  	int i;
>  	int nr = pagevec_count(pvec);
> -	int delta_munlocked = -nr;
> +	int delta_munlocked;
>  	struct pagevec pvec_putback;
>  	int pgrescued = 0;
>  
> +	pagevec_init(&pvec_putback, 0);
> +
>  	/* Phase 1: page isolation */
>  	spin_lock_irq(&zone->lru_lock);
>  	for (i = 0; i < nr; i++) {
> @@ -327,16 +329,22 @@ skip_munlock:
>  			/*
>  			 * We won't be munlocking this page in the next phase
>  			 * but we still need to release the follow_page_mask()
> -			 * pin.
> +			 * pin. We cannot do it under lru_lock however. If it's
> +			 * the last pin, __page_cache_release would deadlock.
>  			 */
> +			pagevec_add(&pvec_putback, pvec->pages[i]);
>  			pvec->pages[i] = NULL;
> -			put_page(page);
> -			delta_munlocked++;
>  		}
>  	}
> +	delta_munlocked = -nr + pagevec_count(&pvec_putback);
>  	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
>  	spin_unlock_irq(&zone->lru_lock);
>  
> +	/* Now we can release pins of pages that we are not munlocking */
> +	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
> +		put_page(pvec_putback.pages[i]);
> +	}
> +

We could just do

--- a/mm/mlock.c~mm-munlock-fix-deadlock-in-__munlock_pagevec-fix
+++ a/mm/mlock.c
@@ -341,12 +341,9 @@ skip_munlock:
 	spin_unlock_irq(&zone->lru_lock);
 
 	/* Now we can release pins of pages that we are not munlocking */
-	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
-		put_page(pvec_putback.pages[i]);
-	}
+	pagevec_release(&pvec_putback);
 
 	/* Phase 2: page munlock */
-	pagevec_init(&pvec_putback, 0);
 	for (i = 0; i < nr; i++) {
 		struct page *page = pvec->pages[i];
 

The lru_add_drain() is unnecessary overhead here.  What do you think?

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 2/3] mm: munlock: fix deadlock in __munlock_pagevec()
@ 2013-12-17  0:31                               ` Andrew Morton
  0 siblings, 0 replies; 69+ messages in thread
From: Andrew Morton @ 2013-12-17  0:31 UTC (permalink / raw)
  To: Vlastimil Babka
  Cc: Sasha Levin, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse, stable

On Mon, 16 Dec 2013 11:14:15 +0100 Vlastimil Babka <vbabka@suse.cz> wrote:

> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
> munlock+putback using pagevec" introduced __munlock_pagevec() to speed up
> munlock by holding lru_lock over multiple isolated pages. Pages that fail to
> be isolated are put_back() immediately, also within the lock.
> 
> This can lead to deadlock when __munlock_pagevec() becomes the holder of the
> last page pin and put_back() leads to __page_cache_release() which also locks
> lru_lock. The deadlock has been observed by Sasha Levin using trinity.
> 
> This patch avoids the deadlock by deferring put_back() operations until
> lru_lock is released. Another pagevec (which is also used by later phases
> of the function is reused to gather the pages for put_back() operation.
> 
> ...
>

Thanks for fixing this one.  I'll cross it off the rather large list of
recent MM regressions :(

> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -295,10 +295,12 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
>  {
>  	int i;
>  	int nr = pagevec_count(pvec);
> -	int delta_munlocked = -nr;
> +	int delta_munlocked;
>  	struct pagevec pvec_putback;
>  	int pgrescued = 0;
>  
> +	pagevec_init(&pvec_putback, 0);
> +
>  	/* Phase 1: page isolation */
>  	spin_lock_irq(&zone->lru_lock);
>  	for (i = 0; i < nr; i++) {
> @@ -327,16 +329,22 @@ skip_munlock:
>  			/*
>  			 * We won't be munlocking this page in the next phase
>  			 * but we still need to release the follow_page_mask()
> -			 * pin.
> +			 * pin. We cannot do it under lru_lock however. If it's
> +			 * the last pin, __page_cache_release would deadlock.
>  			 */
> +			pagevec_add(&pvec_putback, pvec->pages[i]);
>  			pvec->pages[i] = NULL;
> -			put_page(page);
> -			delta_munlocked++;
>  		}
>  	}
> +	delta_munlocked = -nr + pagevec_count(&pvec_putback);
>  	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
>  	spin_unlock_irq(&zone->lru_lock);
>  
> +	/* Now we can release pins of pages that we are not munlocking */
> +	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
> +		put_page(pvec_putback.pages[i]);
> +	}
> +

We could just do

--- a/mm/mlock.c~mm-munlock-fix-deadlock-in-__munlock_pagevec-fix
+++ a/mm/mlock.c
@@ -341,12 +341,9 @@ skip_munlock:
 	spin_unlock_irq(&zone->lru_lock);
 
 	/* Now we can release pins of pages that we are not munlocking */
-	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
-		put_page(pvec_putback.pages[i]);
-	}
+	pagevec_release(&pvec_putback);
 
 	/* Phase 2: page munlock */
-	pagevec_init(&pvec_putback, 0);
 	for (i = 0; i < nr; i++) {
 		struct page *page = pvec->pages[i];
 

The lru_add_drain() is unnecessary overhead here.  What do you think?

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2013-12-16 10:14                             ` Vlastimil Babka
@ 2013-12-17  1:26                               ` Bob Liu
  -1 siblings, 0 replies; 69+ messages in thread
From: Bob Liu @ 2013-12-17  1:26 UTC (permalink / raw)
  To: Vlastimil Babka
  Cc: Andrew Morton, Sasha Levin, linux-mm, linux-kernel, Mel Gorman,
	Rik van Riel, joern, Michel Lespinasse, stable

On 12/16/2013 06:14 PM, Vlastimil Babka wrote:
> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
> munlock skips tail pages of a munlocked THP page. However, when the head page
> already has PageMlocked unset, it will not skip the tail pages.
> 
> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
> munlock+putback using pagevec") has added a PageTransHuge() check which
> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
> trinity, on the first tail page of a THP page without PageMlocked flag.
> 
> This patch fixes the issue by skipping tail pages also in the case when
> PageMlocked flag is unset. There is still a possibility of race with THP page
> split between clearing PageMlocked and determining how many pages to skip.
> The race might result in former tail pages not being skipped, which is however
> no longer a bug, as during the skip the PageTail flags are cleared.
> 
> However this race also affects correctness of NR_MLOCK accounting, which is to
> be fixed in a separate patch.
> 
> Cc: stable@kernel.org
> Reported-by: Sasha Levin <sasha.levin@oracle.com>
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
> ---
>  mm/mlock.c | 24 ++++++++++++++++++------
>  1 file changed, 18 insertions(+), 6 deletions(-)
> 
> diff --git a/mm/mlock.c b/mm/mlock.c
> index d480cd6..3847b13 100644
> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -148,21 +148,30 @@ static void __munlock_isolation_failed(struct page *page)
>   */
>  unsigned int munlock_vma_page(struct page *page)
>  {
> -	unsigned int page_mask = 0;
> +	unsigned int nr_pages;
>  
>  	BUG_ON(!PageLocked(page));
>  
>  	if (TestClearPageMlocked(page)) {
> -		unsigned int nr_pages = hpage_nr_pages(page);
> +		nr_pages = hpage_nr_pages(page);

This line can be put before the if.

>  		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
> -		page_mask = nr_pages - 1;
>  		if (!isolate_lru_page(page))
>  			__munlock_isolated_page(page);
>  		else
>  			__munlock_isolation_failed(page);
> +	} else {
> +		nr_pages = hpage_nr_pages(page);
>  	}
>  
> -	return page_mask;
> +	/*
> +	 * Regardless of the original PageMlocked flag, we determine nr_pages
> +	 * after touching the flag. This leaves a possible race with a THP page
> +	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
> +	 * Returning a smaller mask due to that is OK, the worst that can
> +	 * happen is subsequent useless scanning of the former tail pages.
> +	 * The NR_MLOCK accounting can however become broken.
> +	 */
> +	return nr_pages - 1;
>  }

Personally, I'd prefer to make munlock_vma_page() return void.
If not please add some comment about the return value in this function's
description also.

>  
>  /**
> @@ -440,7 +449,8 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>  
>  	while (start < end) {
>  		struct page *page = NULL;
> -		unsigned int page_mask, page_increm;
> +		unsigned int page_mask;
> +		unsigned long page_increm;
>  		struct pagevec pvec;
>  		struct zone *zone;
>  		int zoneid;
> @@ -490,7 +500,9 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>  				goto next;
>  			}
>  		}
> -		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
> +		/* It's a bug to munlock in the middle of a THP page */
> +		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
> +		page_increm = 1 + page_mask;
>  		start += page_increm * PAGE_SIZE;
>  next:
>  		cond_resched();
> 

-- 
Regards,
-Bob

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2013-12-17  1:26                               ` Bob Liu
  0 siblings, 0 replies; 69+ messages in thread
From: Bob Liu @ 2013-12-17  1:26 UTC (permalink / raw)
  To: Vlastimil Babka
  Cc: Andrew Morton, Sasha Levin, linux-mm, linux-kernel, Mel Gorman,
	Rik van Riel, joern, Michel Lespinasse, stable

On 12/16/2013 06:14 PM, Vlastimil Babka wrote:
> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
> munlock skips tail pages of a munlocked THP page. However, when the head page
> already has PageMlocked unset, it will not skip the tail pages.
> 
> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
> munlock+putback using pagevec") has added a PageTransHuge() check which
> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
> trinity, on the first tail page of a THP page without PageMlocked flag.
> 
> This patch fixes the issue by skipping tail pages also in the case when
> PageMlocked flag is unset. There is still a possibility of race with THP page
> split between clearing PageMlocked and determining how many pages to skip.
> The race might result in former tail pages not being skipped, which is however
> no longer a bug, as during the skip the PageTail flags are cleared.
> 
> However this race also affects correctness of NR_MLOCK accounting, which is to
> be fixed in a separate patch.
> 
> Cc: stable@kernel.org
> Reported-by: Sasha Levin <sasha.levin@oracle.com>
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
> ---
>  mm/mlock.c | 24 ++++++++++++++++++------
>  1 file changed, 18 insertions(+), 6 deletions(-)
> 
> diff --git a/mm/mlock.c b/mm/mlock.c
> index d480cd6..3847b13 100644
> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -148,21 +148,30 @@ static void __munlock_isolation_failed(struct page *page)
>   */
>  unsigned int munlock_vma_page(struct page *page)
>  {
> -	unsigned int page_mask = 0;
> +	unsigned int nr_pages;
>  
>  	BUG_ON(!PageLocked(page));
>  
>  	if (TestClearPageMlocked(page)) {
> -		unsigned int nr_pages = hpage_nr_pages(page);
> +		nr_pages = hpage_nr_pages(page);

This line can be put before the if.

>  		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
> -		page_mask = nr_pages - 1;
>  		if (!isolate_lru_page(page))
>  			__munlock_isolated_page(page);
>  		else
>  			__munlock_isolation_failed(page);
> +	} else {
> +		nr_pages = hpage_nr_pages(page);
>  	}
>  
> -	return page_mask;
> +	/*
> +	 * Regardless of the original PageMlocked flag, we determine nr_pages
> +	 * after touching the flag. This leaves a possible race with a THP page
> +	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
> +	 * Returning a smaller mask due to that is OK, the worst that can
> +	 * happen is subsequent useless scanning of the former tail pages.
> +	 * The NR_MLOCK accounting can however become broken.
> +	 */
> +	return nr_pages - 1;
>  }

Personally, I'd prefer to make munlock_vma_page() return void.
If not please add some comment about the return value in this function's
description also.

>  
>  /**
> @@ -440,7 +449,8 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>  
>  	while (start < end) {
>  		struct page *page = NULL;
> -		unsigned int page_mask, page_increm;
> +		unsigned int page_mask;
> +		unsigned long page_increm;
>  		struct pagevec pvec;
>  		struct zone *zone;
>  		int zoneid;
> @@ -490,7 +500,9 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>  				goto next;
>  			}
>  		}
> -		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
> +		/* It's a bug to munlock in the middle of a THP page */
> +		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
> +		page_increm = 1 + page_mask;
>  		start += page_increm * PAGE_SIZE;
>  next:
>  		cond_resched();
> 

-- 
Regards,
-Bob

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2013-12-17  1:26                               ` Bob Liu
@ 2013-12-17 13:00                                 ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-17 13:00 UTC (permalink / raw)
  To: Bob Liu
  Cc: Andrew Morton, Sasha Levin, linux-mm, linux-kernel, Mel Gorman,
	Rik van Riel, joern, Michel Lespinasse, stable

On 12/17/2013 02:26 AM, Bob Liu wrote:
> On 12/16/2013 06:14 PM, Vlastimil Babka wrote:
>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>> munlock skips tail pages of a munlocked THP page. However, when the head page
>> already has PageMlocked unset, it will not skip the tail pages.
>>
>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>> munlock+putback using pagevec") has added a PageTransHuge() check which
>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>
>> This patch fixes the issue by skipping tail pages also in the case when
>> PageMlocked flag is unset. There is still a possibility of race with THP page
>> split between clearing PageMlocked and determining how many pages to skip.
>> The race might result in former tail pages not being skipped, which is however
>> no longer a bug, as during the skip the PageTail flags are cleared.
>>
>> However this race also affects correctness of NR_MLOCK accounting, which is to
>> be fixed in a separate patch.
>>
>> Cc: stable@kernel.org
>> Reported-by: Sasha Levin <sasha.levin@oracle.com>
>> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
>> ---
>>   mm/mlock.c | 24 ++++++++++++++++++------
>>   1 file changed, 18 insertions(+), 6 deletions(-)
>>
>> diff --git a/mm/mlock.c b/mm/mlock.c
>> index d480cd6..3847b13 100644
>> --- a/mm/mlock.c
>> +++ b/mm/mlock.c
>> @@ -148,21 +148,30 @@ static void __munlock_isolation_failed(struct page *page)
>>    */
>>   unsigned int munlock_vma_page(struct page *page)
>>   {
>> -	unsigned int page_mask = 0;
>> +	unsigned int nr_pages;
>>   
>>   	BUG_ON(!PageLocked(page));
>>   
>>   	if (TestClearPageMlocked(page)) {
>> -		unsigned int nr_pages = hpage_nr_pages(page);
>> +		nr_pages = hpage_nr_pages(page);
> 
> This line can be put before the if.

But that would just "help" the race so that it thinks it munlocked a whole THP page
which however got split before the flag was cleared. If I'm correct about patch 3,
then this is moot anyway.
 
>>   		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
>> -		page_mask = nr_pages - 1;
>>   		if (!isolate_lru_page(page))
>>   			__munlock_isolated_page(page);
>>   		else
>>   			__munlock_isolation_failed(page);
>> +	} else {
>> +		nr_pages = hpage_nr_pages(page);
>>   	}
>>   
>> -	return page_mask;
>> +	/*
>> +	 * Regardless of the original PageMlocked flag, we determine nr_pages
>> +	 * after touching the flag. This leaves a possible race with a THP page
>> +	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
>> +	 * Returning a smaller mask due to that is OK, the worst that can
>> +	 * happen is subsequent useless scanning of the former tail pages.
>> +	 * The NR_MLOCK accounting can however become broken.
>> +	 */
>> +	return nr_pages - 1;
>>   }
> 
> Personally, I'd prefer to make munlock_vma_page() return void.

I would prefer that too but patch 3 needs it again, so I left it as it is here.
As for comment, here's a revised patch that adds it:

------8<------
From: Vlastimil Babka <vbabka@suse.cz>
Date: Fri, 13 Dec 2013 14:25:21 +0100
Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered

Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
munlock skips tail pages of a munlocked THP page. However, when the head page
already has PageMlocked unset, it will not skip the tail pages.

Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
munlock+putback using pagevec") has added a PageTransHuge() check which
contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
trinity, on the first tail page of a THP page without PageMlocked flag.

This patch fixes the issue by skipping tail pages also in the case when
PageMlocked flag is unset. There is still a possibility of race with THP page
split between clearing PageMlocked and determining how many pages to skip.
The race might result in former tail pages not being skipped, which is however
no longer a bug, as during the skip the PageTail flags are cleared.

However this race also affects correctness of NR_MLOCK accounting, which is to
be fixed in a separate patch.

Cc: stable@kernel.org
Reported-by: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
 mm/mlock.c | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..c59c420 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -133,7 +133,10 @@ static void __munlock_isolation_failed(struct page *page)
 
 /**
  * munlock_vma_page - munlock a vma page
- * @page - page to be unlocked
+ * @page - page to be unlocked, either a normal page or THP page head
+ *
+ * returns the size of the page as a page mask (0 for normal page,
+ *         HPAGE_PMD_NR - 1 for THP head page)
  *
  * called from munlock()/munmap() path with page supposedly on the LRU.
  * When we munlock a page, because the vma where we found the page is being
@@ -148,21 +151,30 @@ static void __munlock_isolation_failed(struct page *page)
  */
 unsigned int munlock_vma_page(struct page *page)
 {
-	unsigned int page_mask = 0;
+	unsigned int nr_pages;
 
 	BUG_ON(!PageLocked(page));
 
 	if (TestClearPageMlocked(page)) {
-		unsigned int nr_pages = hpage_nr_pages(page);
+		nr_pages = hpage_nr_pages(page);
 		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
-		page_mask = nr_pages - 1;
 		if (!isolate_lru_page(page))
 			__munlock_isolated_page(page);
 		else
 			__munlock_isolation_failed(page);
+	} else {
+		nr_pages = hpage_nr_pages(page);
 	}
 
-	return page_mask;
+	/*
+	 * Regardless of the original PageMlocked flag, we determine nr_pages
+	 * after touching the flag. This leaves a possible race with a THP page
+	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
+	 * Returning a smaller mask due to that is OK, the worst that can
+	 * happen is subsequent useless scanning of the former tail pages.
+	 * The NR_MLOCK accounting can however become broken.
+	 */
+	return nr_pages - 1;
 }
 
 /**
@@ -440,7 +452,8 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 
 	while (start < end) {
 		struct page *page = NULL;
-		unsigned int page_mask, page_increm;
+		unsigned int page_mask;
+		unsigned long page_increm;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -490,7 +503,9 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				goto next;
 			}
 		}
-		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
+		/* It's a bug to munlock in the middle of a THP page */
+		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
+		page_increm = 1 + page_mask;
 		start += page_increm * PAGE_SIZE;
 next:
 		cond_resched();
-- 
1.8.4



^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2013-12-17 13:00                                 ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-17 13:00 UTC (permalink / raw)
  To: Bob Liu
  Cc: Andrew Morton, Sasha Levin, linux-mm, linux-kernel, Mel Gorman,
	Rik van Riel, joern, Michel Lespinasse, stable

On 12/17/2013 02:26 AM, Bob Liu wrote:
> On 12/16/2013 06:14 PM, Vlastimil Babka wrote:
>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>> munlock skips tail pages of a munlocked THP page. However, when the head page
>> already has PageMlocked unset, it will not skip the tail pages.
>>
>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>> munlock+putback using pagevec") has added a PageTransHuge() check which
>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>
>> This patch fixes the issue by skipping tail pages also in the case when
>> PageMlocked flag is unset. There is still a possibility of race with THP page
>> split between clearing PageMlocked and determining how many pages to skip.
>> The race might result in former tail pages not being skipped, which is however
>> no longer a bug, as during the skip the PageTail flags are cleared.
>>
>> However this race also affects correctness of NR_MLOCK accounting, which is to
>> be fixed in a separate patch.
>>
>> Cc: stable@kernel.org
>> Reported-by: Sasha Levin <sasha.levin@oracle.com>
>> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
>> ---
>>   mm/mlock.c | 24 ++++++++++++++++++------
>>   1 file changed, 18 insertions(+), 6 deletions(-)
>>
>> diff --git a/mm/mlock.c b/mm/mlock.c
>> index d480cd6..3847b13 100644
>> --- a/mm/mlock.c
>> +++ b/mm/mlock.c
>> @@ -148,21 +148,30 @@ static void __munlock_isolation_failed(struct page *page)
>>    */
>>   unsigned int munlock_vma_page(struct page *page)
>>   {
>> -	unsigned int page_mask = 0;
>> +	unsigned int nr_pages;
>>   
>>   	BUG_ON(!PageLocked(page));
>>   
>>   	if (TestClearPageMlocked(page)) {
>> -		unsigned int nr_pages = hpage_nr_pages(page);
>> +		nr_pages = hpage_nr_pages(page);
> 
> This line can be put before the if.

But that would just "help" the race so that it thinks it munlocked a whole THP page
which however got split before the flag was cleared. If I'm correct about patch 3,
then this is moot anyway.
 
>>   		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
>> -		page_mask = nr_pages - 1;
>>   		if (!isolate_lru_page(page))
>>   			__munlock_isolated_page(page);
>>   		else
>>   			__munlock_isolation_failed(page);
>> +	} else {
>> +		nr_pages = hpage_nr_pages(page);
>>   	}
>>   
>> -	return page_mask;
>> +	/*
>> +	 * Regardless of the original PageMlocked flag, we determine nr_pages
>> +	 * after touching the flag. This leaves a possible race with a THP page
>> +	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
>> +	 * Returning a smaller mask due to that is OK, the worst that can
>> +	 * happen is subsequent useless scanning of the former tail pages.
>> +	 * The NR_MLOCK accounting can however become broken.
>> +	 */
>> +	return nr_pages - 1;
>>   }
> 
> Personally, I'd prefer to make munlock_vma_page() return void.

I would prefer that too but patch 3 needs it again, so I left it as it is here.
As for comment, here's a revised patch that adds it:

------8<------
From: Vlastimil Babka <vbabka@suse.cz>
Date: Fri, 13 Dec 2013 14:25:21 +0100
Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered

Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
munlock skips tail pages of a munlocked THP page. However, when the head page
already has PageMlocked unset, it will not skip the tail pages.

Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
munlock+putback using pagevec") has added a PageTransHuge() check which
contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
trinity, on the first tail page of a THP page without PageMlocked flag.

This patch fixes the issue by skipping tail pages also in the case when
PageMlocked flag is unset. There is still a possibility of race with THP page
split between clearing PageMlocked and determining how many pages to skip.
The race might result in former tail pages not being skipped, which is however
no longer a bug, as during the skip the PageTail flags are cleared.

However this race also affects correctness of NR_MLOCK accounting, which is to
be fixed in a separate patch.

Cc: stable@kernel.org
Reported-by: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
 mm/mlock.c | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index d480cd6..c59c420 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -133,7 +133,10 @@ static void __munlock_isolation_failed(struct page *page)
 
 /**
  * munlock_vma_page - munlock a vma page
- * @page - page to be unlocked
+ * @page - page to be unlocked, either a normal page or THP page head
+ *
+ * returns the size of the page as a page mask (0 for normal page,
+ *         HPAGE_PMD_NR - 1 for THP head page)
  *
  * called from munlock()/munmap() path with page supposedly on the LRU.
  * When we munlock a page, because the vma where we found the page is being
@@ -148,21 +151,30 @@ static void __munlock_isolation_failed(struct page *page)
  */
 unsigned int munlock_vma_page(struct page *page)
 {
-	unsigned int page_mask = 0;
+	unsigned int nr_pages;
 
 	BUG_ON(!PageLocked(page));
 
 	if (TestClearPageMlocked(page)) {
-		unsigned int nr_pages = hpage_nr_pages(page);
+		nr_pages = hpage_nr_pages(page);
 		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
-		page_mask = nr_pages - 1;
 		if (!isolate_lru_page(page))
 			__munlock_isolated_page(page);
 		else
 			__munlock_isolation_failed(page);
+	} else {
+		nr_pages = hpage_nr_pages(page);
 	}
 
-	return page_mask;
+	/*
+	 * Regardless of the original PageMlocked flag, we determine nr_pages
+	 * after touching the flag. This leaves a possible race with a THP page
+	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
+	 * Returning a smaller mask due to that is OK, the worst that can
+	 * happen is subsequent useless scanning of the former tail pages.
+	 * The NR_MLOCK accounting can however become broken.
+	 */
+	return nr_pages - 1;
 }
 
 /**
@@ -440,7 +452,8 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 
 	while (start < end) {
 		struct page *page = NULL;
-		unsigned int page_mask, page_increm;
+		unsigned int page_mask;
+		unsigned long page_increm;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -490,7 +503,9 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				goto next;
 			}
 		}
-		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
+		/* It's a bug to munlock in the middle of a THP page */
+		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
+		page_increm = 1 + page_mask;
 		start += page_increm * PAGE_SIZE;
 next:
 		cond_resched();
-- 
1.8.4


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: [PATCH 2/3] mm: munlock: fix deadlock in __munlock_pagevec()
  2013-12-17  0:31                               ` Andrew Morton
@ 2013-12-17 13:08                                 ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-17 13:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Sasha Levin, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse, stable

On 12/17/2013 01:31 AM, Andrew Morton wrote:
> On Mon, 16 Dec 2013 11:14:15 +0100 Vlastimil Babka <vbabka@suse.cz> wrote:
>
>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>> munlock+putback using pagevec" introduced __munlock_pagevec() to speed up
>> munlock by holding lru_lock over multiple isolated pages. Pages that fail to
>> be isolated are put_back() immediately, also within the lock.
>>
>> This can lead to deadlock when __munlock_pagevec() becomes the holder of the
>> last page pin and put_back() leads to __page_cache_release() which also locks
>> lru_lock. The deadlock has been observed by Sasha Levin using trinity.
>>
>> This patch avoids the deadlock by deferring put_back() operations until
>> lru_lock is released. Another pagevec (which is also used by later phases
>> of the function is reused to gather the pages for put_back() operation.
>>
>> ...
>>
>
> Thanks for fixing this one.  I'll cross it off the rather large list of
> recent MM regressions :(

Well I made this one in the first place :/

>> --- a/mm/mlock.c
>> +++ b/mm/mlock.c
>> @@ -295,10 +295,12 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
>>   {
>>   	int i;
>>   	int nr = pagevec_count(pvec);
>> -	int delta_munlocked = -nr;
>> +	int delta_munlocked;
>>   	struct pagevec pvec_putback;
>>   	int pgrescued = 0;
>>
>> +	pagevec_init(&pvec_putback, 0);
>> +
>>   	/* Phase 1: page isolation */
>>   	spin_lock_irq(&zone->lru_lock);
>>   	for (i = 0; i < nr; i++) {
>> @@ -327,16 +329,22 @@ skip_munlock:
>>   			/*
>>   			 * We won't be munlocking this page in the next phase
>>   			 * but we still need to release the follow_page_mask()
>> -			 * pin.
>> +			 * pin. We cannot do it under lru_lock however. If it's
>> +			 * the last pin, __page_cache_release would deadlock.
>>   			 */
>> +			pagevec_add(&pvec_putback, pvec->pages[i]);
>>   			pvec->pages[i] = NULL;
>> -			put_page(page);
>> -			delta_munlocked++;
>>   		}
>>   	}
>> +	delta_munlocked = -nr + pagevec_count(&pvec_putback);
>>   	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
>>   	spin_unlock_irq(&zone->lru_lock);
>>
>> +	/* Now we can release pins of pages that we are not munlocking */
>> +	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
>> +		put_page(pvec_putback.pages[i]);
>> +	}
>> +
>
> We could just do
>
> --- a/mm/mlock.c~mm-munlock-fix-deadlock-in-__munlock_pagevec-fix
> +++ a/mm/mlock.c
> @@ -341,12 +341,9 @@ skip_munlock:
>   	spin_unlock_irq(&zone->lru_lock);
>
>   	/* Now we can release pins of pages that we are not munlocking */
> -	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
> -		put_page(pvec_putback.pages[i]);
> -	}
> +	pagevec_release(&pvec_putback);
>
>   	/* Phase 2: page munlock */
> -	pagevec_init(&pvec_putback, 0);
>   	for (i = 0; i < nr; i++) {
>   		struct page *page = pvec->pages[i];
>

Yeah that looks nicer.

> The lru_add_drain() is unnecessary overhead here.  What do you think?

I would expect these isolation failures to be sufficiently rare so that 
it doesn't matter. Especially in process exit path which was the 
original target of my munlock work. But I don't have any numbers and my 
mmtests benchmark for munlock is most likely too simple to trigger this. 
But even once per pagevec the drain shouldn't hurt I guess...


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 2/3] mm: munlock: fix deadlock in __munlock_pagevec()
@ 2013-12-17 13:08                                 ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2013-12-17 13:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Sasha Levin, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse, stable

On 12/17/2013 01:31 AM, Andrew Morton wrote:
> On Mon, 16 Dec 2013 11:14:15 +0100 Vlastimil Babka <vbabka@suse.cz> wrote:
>
>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>> munlock+putback using pagevec" introduced __munlock_pagevec() to speed up
>> munlock by holding lru_lock over multiple isolated pages. Pages that fail to
>> be isolated are put_back() immediately, also within the lock.
>>
>> This can lead to deadlock when __munlock_pagevec() becomes the holder of the
>> last page pin and put_back() leads to __page_cache_release() which also locks
>> lru_lock. The deadlock has been observed by Sasha Levin using trinity.
>>
>> This patch avoids the deadlock by deferring put_back() operations until
>> lru_lock is released. Another pagevec (which is also used by later phases
>> of the function is reused to gather the pages for put_back() operation.
>>
>> ...
>>
>
> Thanks for fixing this one.  I'll cross it off the rather large list of
> recent MM regressions :(

Well I made this one in the first place :/

>> --- a/mm/mlock.c
>> +++ b/mm/mlock.c
>> @@ -295,10 +295,12 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
>>   {
>>   	int i;
>>   	int nr = pagevec_count(pvec);
>> -	int delta_munlocked = -nr;
>> +	int delta_munlocked;
>>   	struct pagevec pvec_putback;
>>   	int pgrescued = 0;
>>
>> +	pagevec_init(&pvec_putback, 0);
>> +
>>   	/* Phase 1: page isolation */
>>   	spin_lock_irq(&zone->lru_lock);
>>   	for (i = 0; i < nr; i++) {
>> @@ -327,16 +329,22 @@ skip_munlock:
>>   			/*
>>   			 * We won't be munlocking this page in the next phase
>>   			 * but we still need to release the follow_page_mask()
>> -			 * pin.
>> +			 * pin. We cannot do it under lru_lock however. If it's
>> +			 * the last pin, __page_cache_release would deadlock.
>>   			 */
>> +			pagevec_add(&pvec_putback, pvec->pages[i]);
>>   			pvec->pages[i] = NULL;
>> -			put_page(page);
>> -			delta_munlocked++;
>>   		}
>>   	}
>> +	delta_munlocked = -nr + pagevec_count(&pvec_putback);
>>   	__mod_zone_page_state(zone, NR_MLOCK, delta_munlocked);
>>   	spin_unlock_irq(&zone->lru_lock);
>>
>> +	/* Now we can release pins of pages that we are not munlocking */
>> +	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
>> +		put_page(pvec_putback.pages[i]);
>> +	}
>> +
>
> We could just do
>
> --- a/mm/mlock.c~mm-munlock-fix-deadlock-in-__munlock_pagevec-fix
> +++ a/mm/mlock.c
> @@ -341,12 +341,9 @@ skip_munlock:
>   	spin_unlock_irq(&zone->lru_lock);
>
>   	/* Now we can release pins of pages that we are not munlocking */
> -	for (i = 0; i < pagevec_count(&pvec_putback); i++) {
> -		put_page(pvec_putback.pages[i]);
> -	}
> +	pagevec_release(&pvec_putback);
>
>   	/* Phase 2: page munlock */
> -	pagevec_init(&pvec_putback, 0);
>   	for (i = 0; i < nr; i++) {
>   		struct page *page = pvec->pages[i];
>

Yeah that looks nicer.

> The lru_add_drain() is unnecessary overhead here.  What do you think?

I would expect these isolation failures to be sufficiently rare so that 
it doesn't matter. Especially in process exit path which was the 
original target of my munlock work. But I don't have any numbers and my 
mmtests benchmark for munlock is most likely too simple to trigger this. 
But even once per pagevec the drain shouldn't hurt I guess...

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2013-12-17 13:00                                 ` Vlastimil Babka
@ 2013-12-18  0:48                                   ` Bob Liu
  -1 siblings, 0 replies; 69+ messages in thread
From: Bob Liu @ 2013-12-18  0:48 UTC (permalink / raw)
  To: Vlastimil Babka
  Cc: Andrew Morton, Sasha Levin, linux-mm, linux-kernel, Mel Gorman,
	Rik van Riel, joern, Michel Lespinasse, stable



On 12/17/2013 09:00 PM, Vlastimil Babka wrote:
> 
> I would prefer that too but patch 3 needs it again, so I left it as it is here.
> As for comment, here's a revised patch that adds it:
> 

Thanks.

> ------8<------
> From: Vlastimil Babka <vbabka@suse.cz>
> Date: Fri, 13 Dec 2013 14:25:21 +0100
> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
> 
> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
> munlock skips tail pages of a munlocked THP page. However, when the head page
> already has PageMlocked unset, it will not skip the tail pages.
> 
> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
> munlock+putback using pagevec") has added a PageTransHuge() check which
> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
> trinity, on the first tail page of a THP page without PageMlocked flag.
> 
> This patch fixes the issue by skipping tail pages also in the case when
> PageMlocked flag is unset. There is still a possibility of race with THP page
> split between clearing PageMlocked and determining how many pages to skip.
> The race might result in former tail pages not being skipped, which is however
> no longer a bug, as during the skip the PageTail flags are cleared.
> 
> However this race also affects correctness of NR_MLOCK accounting, which is to
> be fixed in a separate patch.
> 
> Cc: stable@kernel.org
> Reported-by: Sasha Levin <sasha.levin@oracle.com>
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>

Reviewed-by: Bob Liu <bob.liu@oracle.com>

> ---
>  mm/mlock.c | 29 ++++++++++++++++++++++-------
>  1 file changed, 22 insertions(+), 7 deletions(-)
> 
> diff --git a/mm/mlock.c b/mm/mlock.c
> index d480cd6..c59c420 100644
> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -133,7 +133,10 @@ static void __munlock_isolation_failed(struct page *page)
>  
>  /**
>   * munlock_vma_page - munlock a vma page
> - * @page - page to be unlocked
> + * @page - page to be unlocked, either a normal page or THP page head
> + *
> + * returns the size of the page as a page mask (0 for normal page,
> + *         HPAGE_PMD_NR - 1 for THP head page)
>   *
>   * called from munlock()/munmap() path with page supposedly on the LRU.
>   * When we munlock a page, because the vma where we found the page is being
> @@ -148,21 +151,30 @@ static void __munlock_isolation_failed(struct page *page)
>   */
>  unsigned int munlock_vma_page(struct page *page)
>  {
> -	unsigned int page_mask = 0;
> +	unsigned int nr_pages;
>  
>  	BUG_ON(!PageLocked(page));
>  
>  	if (TestClearPageMlocked(page)) {
> -		unsigned int nr_pages = hpage_nr_pages(page);
> +		nr_pages = hpage_nr_pages(page);
>  		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
> -		page_mask = nr_pages - 1;
>  		if (!isolate_lru_page(page))
>  			__munlock_isolated_page(page);
>  		else
>  			__munlock_isolation_failed(page);
> +	} else {
> +		nr_pages = hpage_nr_pages(page);
>  	}
>  
> -	return page_mask;
> +	/*
> +	 * Regardless of the original PageMlocked flag, we determine nr_pages
> +	 * after touching the flag. This leaves a possible race with a THP page
> +	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
> +	 * Returning a smaller mask due to that is OK, the worst that can
> +	 * happen is subsequent useless scanning of the former tail pages.
> +	 * The NR_MLOCK accounting can however become broken.
> +	 */
> +	return nr_pages - 1;
>  }
>  
>  /**
> @@ -440,7 +452,8 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>  
>  	while (start < end) {
>  		struct page *page = NULL;
> -		unsigned int page_mask, page_increm;
> +		unsigned int page_mask;
> +		unsigned long page_increm;
>  		struct pagevec pvec;
>  		struct zone *zone;
>  		int zoneid;
> @@ -490,7 +503,9 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>  				goto next;
>  			}
>  		}
> -		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
> +		/* It's a bug to munlock in the middle of a THP page */
> +		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
> +		page_increm = 1 + page_mask;
>  		start += page_increm * PAGE_SIZE;
>  next:
>  		cond_resched();
> 

-- 
Regards,
-Bob

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2013-12-18  0:48                                   ` Bob Liu
  0 siblings, 0 replies; 69+ messages in thread
From: Bob Liu @ 2013-12-18  0:48 UTC (permalink / raw)
  To: Vlastimil Babka
  Cc: Andrew Morton, Sasha Levin, linux-mm, linux-kernel, Mel Gorman,
	Rik van Riel, joern, Michel Lespinasse, stable



On 12/17/2013 09:00 PM, Vlastimil Babka wrote:
> 
> I would prefer that too but patch 3 needs it again, so I left it as it is here.
> As for comment, here's a revised patch that adds it:
> 

Thanks.

> ------8<------
> From: Vlastimil Babka <vbabka@suse.cz>
> Date: Fri, 13 Dec 2013 14:25:21 +0100
> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
> 
> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
> munlock skips tail pages of a munlocked THP page. However, when the head page
> already has PageMlocked unset, it will not skip the tail pages.
> 
> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
> munlock+putback using pagevec") has added a PageTransHuge() check which
> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
> trinity, on the first tail page of a THP page without PageMlocked flag.
> 
> This patch fixes the issue by skipping tail pages also in the case when
> PageMlocked flag is unset. There is still a possibility of race with THP page
> split between clearing PageMlocked and determining how many pages to skip.
> The race might result in former tail pages not being skipped, which is however
> no longer a bug, as during the skip the PageTail flags are cleared.
> 
> However this race also affects correctness of NR_MLOCK accounting, which is to
> be fixed in a separate patch.
> 
> Cc: stable@kernel.org
> Reported-by: Sasha Levin <sasha.levin@oracle.com>
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>

Reviewed-by: Bob Liu <bob.liu@oracle.com>

> ---
>  mm/mlock.c | 29 ++++++++++++++++++++++-------
>  1 file changed, 22 insertions(+), 7 deletions(-)
> 
> diff --git a/mm/mlock.c b/mm/mlock.c
> index d480cd6..c59c420 100644
> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -133,7 +133,10 @@ static void __munlock_isolation_failed(struct page *page)
>  
>  /**
>   * munlock_vma_page - munlock a vma page
> - * @page - page to be unlocked
> + * @page - page to be unlocked, either a normal page or THP page head
> + *
> + * returns the size of the page as a page mask (0 for normal page,
> + *         HPAGE_PMD_NR - 1 for THP head page)
>   *
>   * called from munlock()/munmap() path with page supposedly on the LRU.
>   * When we munlock a page, because the vma where we found the page is being
> @@ -148,21 +151,30 @@ static void __munlock_isolation_failed(struct page *page)
>   */
>  unsigned int munlock_vma_page(struct page *page)
>  {
> -	unsigned int page_mask = 0;
> +	unsigned int nr_pages;
>  
>  	BUG_ON(!PageLocked(page));
>  
>  	if (TestClearPageMlocked(page)) {
> -		unsigned int nr_pages = hpage_nr_pages(page);
> +		nr_pages = hpage_nr_pages(page);
>  		mod_zone_page_state(page_zone(page), NR_MLOCK, -nr_pages);
> -		page_mask = nr_pages - 1;
>  		if (!isolate_lru_page(page))
>  			__munlock_isolated_page(page);
>  		else
>  			__munlock_isolation_failed(page);
> +	} else {
> +		nr_pages = hpage_nr_pages(page);
>  	}
>  
> -	return page_mask;
> +	/*
> +	 * Regardless of the original PageMlocked flag, we determine nr_pages
> +	 * after touching the flag. This leaves a possible race with a THP page
> +	 * split, such that a whole THP page was munlocked, but nr_pages == 1.
> +	 * Returning a smaller mask due to that is OK, the worst that can
> +	 * happen is subsequent useless scanning of the former tail pages.
> +	 * The NR_MLOCK accounting can however become broken.
> +	 */
> +	return nr_pages - 1;
>  }
>  
>  /**
> @@ -440,7 +452,8 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>  
>  	while (start < end) {
>  		struct page *page = NULL;
> -		unsigned int page_mask, page_increm;
> +		unsigned int page_mask;
> +		unsigned long page_increm;
>  		struct pagevec pvec;
>  		struct zone *zone;
>  		int zoneid;
> @@ -490,7 +503,9 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>  				goto next;
>  			}
>  		}
> -		page_increm = 1 + (~(start >> PAGE_SHIFT) & page_mask);
> +		/* It's a bug to munlock in the middle of a THP page */
> +		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
> +		page_increm = 1 + page_mask;
>  		start += page_increm * PAGE_SIZE;
>  next:
>  		cond_resched();
> 

-- 
Regards,
-Bob

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2013-12-17 13:00                                 ` Vlastimil Babka
@ 2014-03-14 23:55                                   ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-14 23:55 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse, stable

On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
> From: Vlastimil Babka<vbabka@suse.cz>
> Date: Fri, 13 Dec 2013 14:25:21 +0100
> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>
> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
> munlock skips tail pages of a munlocked THP page. However, when the head page
> already has PageMlocked unset, it will not skip the tail pages.
>
> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
> munlock+putback using pagevec") has added a PageTransHuge() check which
> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
> trinity, on the first tail page of a THP page without PageMlocked flag.
>
> This patch fixes the issue by skipping tail pages also in the case when
> PageMlocked flag is unset. There is still a possibility of race with THP page
> split between clearing PageMlocked and determining how many pages to skip.
> The race might result in former tail pages not being skipped, which is however
> no longer a bug, as during the skip the PageTail flags are cleared.
>
> However this race also affects correctness of NR_MLOCK accounting, which is to
> be fixed in a separate patch.

I've hit the same thing again, on the latest -next, this time with a different trace:

[  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
[  539.200429] page flags: 0x12fffff80008000(tail)
[  539.201167] ------------[ cut here ]------------
[  539.201889] kernel BUG at include/linux/page-flags.h:415!
[  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[  539.204588] Dumping ftrace buffer:
[  539.206415]    (ftrace buffer empty)
[  539.207022] Modules linked in:
[  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W     3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
[  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
[  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
[  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
[  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
[  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
[  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
[  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
[  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
[  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
[  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
[  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
[  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
[  539.210263] Stack:
[  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
[  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
[  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
[  539.210263] Call Trace:
[  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
[  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
[  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
[  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
[  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
[  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
[  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
[  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
[  539.210263]  RSP <ffff8805a44c3e08>
[  539.236666] ---[ end trace 4e90dc9141579181 ]---


Thanks,
Sasha

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2014-03-14 23:55                                   ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-14 23:55 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse, stable

On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
> From: Vlastimil Babka<vbabka@suse.cz>
> Date: Fri, 13 Dec 2013 14:25:21 +0100
> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>
> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
> munlock skips tail pages of a munlocked THP page. However, when the head page
> already has PageMlocked unset, it will not skip the tail pages.
>
> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
> munlock+putback using pagevec") has added a PageTransHuge() check which
> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
> trinity, on the first tail page of a THP page without PageMlocked flag.
>
> This patch fixes the issue by skipping tail pages also in the case when
> PageMlocked flag is unset. There is still a possibility of race with THP page
> split between clearing PageMlocked and determining how many pages to skip.
> The race might result in former tail pages not being skipped, which is however
> no longer a bug, as during the skip the PageTail flags are cleared.
>
> However this race also affects correctness of NR_MLOCK accounting, which is to
> be fixed in a separate patch.

I've hit the same thing again, on the latest -next, this time with a different trace:

[  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
[  539.200429] page flags: 0x12fffff80008000(tail)
[  539.201167] ------------[ cut here ]------------
[  539.201889] kernel BUG at include/linux/page-flags.h:415!
[  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[  539.204588] Dumping ftrace buffer:
[  539.206415]    (ftrace buffer empty)
[  539.207022] Modules linked in:
[  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W     3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
[  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
[  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
[  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
[  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
[  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
[  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
[  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
[  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
[  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
[  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
[  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
[  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
[  539.210263] Stack:
[  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
[  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
[  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
[  539.210263] Call Trace:
[  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
[  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
[  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
[  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
[  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
[  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
[  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
[  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
[  539.210263]  RSP <ffff8805a44c3e08>
[  539.236666] ---[ end trace 4e90dc9141579181 ]---


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2014-03-14 23:55                                   ` Sasha Levin
@ 2014-03-15  3:06                                     ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-15  3:06 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/14/2014 07:55 PM, Sasha Levin wrote:
> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>> From: Vlastimil Babka<vbabka@suse.cz>
>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>
>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>> munlock skips tail pages of a munlocked THP page. However, when the head page
>> already has PageMlocked unset, it will not skip the tail pages.
>>
>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>> munlock+putback using pagevec") has added a PageTransHuge() check which
>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>
>> This patch fixes the issue by skipping tail pages also in the case when
>> PageMlocked flag is unset. There is still a possibility of race with THP page
>> split between clearing PageMlocked and determining how many pages to skip.
>> The race might result in former tail pages not being skipped, which is however
>> no longer a bug, as during the skip the PageTail flags are cleared.
>>
>> However this race also affects correctness of NR_MLOCK accounting, which is to
>> be fixed in a separate patch.
>
> I've hit the same thing again, on the latest -next, this time with a different trace:
>
> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
> [  539.200429] page flags: 0x12fffff80008000(tail)
> [  539.201167] ------------[ cut here ]------------
> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [  539.204588] Dumping ftrace buffer:
> [  539.206415]    (ftrace buffer empty)
> [  539.207022] Modules linked in:
> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W     3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
> [  539.210263] Stack:
> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
> [  539.210263] Call Trace:
> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
> [  539.210263]  RSP <ffff8805a44c3e08>
> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>
>
> Thanks,
> Sasha

And another related trace:

[  741.192502] kernel BUG at mm/mlock.c:528!
[  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[  741.194177] Dumping ftrace buffer:
[  741.194645]    (ftrace buffer empty)
[  741.195109] Modules linked in:
[  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
[  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
[  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
[  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
[  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
[  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
[  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
[  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
[  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
[  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
[  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
[  741.200085] Stack:
[  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
[  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
[  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
[  741.200085] Call Trace:
[  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
[  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
[  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
[  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
[  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
[  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
[  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
[  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
[  741.200085]  RSP <ffff8805decb9e08>


Thanks,
Sasha

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2014-03-15  3:06                                     ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-15  3:06 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/14/2014 07:55 PM, Sasha Levin wrote:
> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>> From: Vlastimil Babka<vbabka@suse.cz>
>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>
>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>> munlock skips tail pages of a munlocked THP page. However, when the head page
>> already has PageMlocked unset, it will not skip the tail pages.
>>
>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>> munlock+putback using pagevec") has added a PageTransHuge() check which
>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>
>> This patch fixes the issue by skipping tail pages also in the case when
>> PageMlocked flag is unset. There is still a possibility of race with THP page
>> split between clearing PageMlocked and determining how many pages to skip.
>> The race might result in former tail pages not being skipped, which is however
>> no longer a bug, as during the skip the PageTail flags are cleared.
>>
>> However this race also affects correctness of NR_MLOCK accounting, which is to
>> be fixed in a separate patch.
>
> I've hit the same thing again, on the latest -next, this time with a different trace:
>
> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
> [  539.200429] page flags: 0x12fffff80008000(tail)
> [  539.201167] ------------[ cut here ]------------
> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [  539.204588] Dumping ftrace buffer:
> [  539.206415]    (ftrace buffer empty)
> [  539.207022] Modules linked in:
> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W     3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
> [  539.210263] Stack:
> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
> [  539.210263] Call Trace:
> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
> [  539.210263]  RSP <ffff8805a44c3e08>
> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>
>
> Thanks,
> Sasha

And another related trace:

[  741.192502] kernel BUG at mm/mlock.c:528!
[  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[  741.194177] Dumping ftrace buffer:
[  741.194645]    (ftrace buffer empty)
[  741.195109] Modules linked in:
[  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
[  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
[  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
[  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
[  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
[  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
[  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
[  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
[  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
[  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
[  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
[  741.200085] Stack:
[  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
[  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
[  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
[  741.200085] Call Trace:
[  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
[  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
[  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
[  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
[  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
[  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
[  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
[  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
[  741.200085]  RSP <ffff8805decb9e08>


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2014-03-15  3:06                                     ` Sasha Levin
@ 2014-03-17 12:38                                       ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-17 12:38 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/15/2014 04:06 AM, Sasha Levin wrote:
> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>> From: Vlastimil Babka<vbabka@suse.cz>
>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>>
>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>>> munlock skips tail pages of a munlocked THP page. However, when the head page
>>> already has PageMlocked unset, it will not skip the tail pages.
>>>
>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>> munlock+putback using pagevec") has added a PageTransHuge() check which
>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>>
>>> This patch fixes the issue by skipping tail pages also in the case when
>>> PageMlocked flag is unset. There is still a possibility of race with THP page
>>> split between clearing PageMlocked and determining how many pages to skip.
>>> The race might result in former tail pages not being skipped, which is however
>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>
>>> However this race also affects correctness of NR_MLOCK accounting, which is to
>>> be fixed in a separate patch.
>>
>> I've hit the same thing again, on the latest -next, this time with a different trace:
>>
>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
>> [  539.200429] page flags: 0x12fffff80008000(tail)
>> [  539.201167] ------------[ cut here ]------------
>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>> [  539.204588] Dumping ftrace buffer:
>> [  539.206415]    (ftrace buffer empty)
>> [  539.207022] Modules linked in:
>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W     3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
>> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
>> [  539.210263] Stack:
>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
>> [  539.210263] Call Trace:
>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>> [  539.210263]  RSP <ffff8805a44c3e08>
>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>
>>
>> Thanks,
>> Sasha
> 
> And another related trace:
> 
> [  741.192502] kernel BUG at mm/mlock.c:528!
> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [  741.194177] Dumping ftrace buffer:
> [  741.194645]    (ftrace buffer empty)
> [  741.195109] Modules linked in:
> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
> [  741.200085] Stack:
> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
> [  741.200085] Call Trace:
> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
> [  741.200085]  RSP <ffff8805decb9e08>

Sigh, again? I really wonder what is it this time :)
Please try this debug patch, hopefully we learn something:

diff --git a/mm/mlock.c b/mm/mlock.c
index 4e1a6816..7094bac 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -469,12 +469,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
 void munlock_vma_pages_range(struct vm_area_struct *vma,
 			     unsigned long start, unsigned long end)
 {
+	unsigned long orig_start = start;
+	unsigned long page_increm = 0;
+
 	vma->vm_flags &= ~VM_LOCKED;
 
 	while (start < end) {
 		struct page *page = NULL;
 		unsigned int page_mask;
-		unsigned long page_increm;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				&page_mask);
 
 		if (page && !IS_ERR(page)) {
+			if (PageTail(page)) {
+				struct page *first_page;
+				dump_page(page, "Unexpected PageTail");
+				printk("start=%lu pfn=%lu orig_start=%lu "
+				       "page_increm=%lu "
+				       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
+					start, page_to_pfn(page), orig_start,
+					page_increm,
+					vma->vm_start, vma->vm_end,
+					vma->vm_flags);
+				first_page = page->first_page;
+				printk("first_page pfn=%lu\n",
+						page_to_pfn(first_page));
+				dump_page(first_page, "first_page of unexpected PageTail page");
+				if (PageCompound(first_page))
+					printk("first_page is compound with order=%d\n", compound_order(first_page));
+				VM_BUG_ON(true);
+			}
 			if (PageTransHuge(page)) {
 				lock_page(page);
 				/*
@@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 			}
 		}
 		/* It's a bug to munlock in the middle of a THP page */
-		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
+		if ((start >> PAGE_SHIFT) & page_mask) {
+			dump_page(page, "unexpected middle of THP page");
+			printk("start=%lu pfn=%lu orig_start=%lu "
+			       "prev_page_increm=%lu page_mask=%u "
+			       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
+				start, page_to_pfn(page), orig_start,
+				page_increm, page_mask,
+				vma->vm_start, vma->vm_end,
+				vma->vm_flags);
+			if (PageTail(page)) {
+				struct page *first_page = page->first_page;
+				printk("first_page pfn=%lu\n",
+						page_to_pfn(first_page));
+				dump_page(first_page, "first_page of unexpected middle of THP page");
+				if (PageCompound(first_page))
+					printk("first_page is compound with order=%d\n", compound_order(first_page));
+			}
+			VM_BUG_ON(true);
+		}
 		page_increm = 1 + page_mask;
 		start += page_increm * PAGE_SIZE;
 next:



^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2014-03-17 12:38                                       ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-17 12:38 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/15/2014 04:06 AM, Sasha Levin wrote:
> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>> From: Vlastimil Babka<vbabka@suse.cz>
>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>>
>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>>> munlock skips tail pages of a munlocked THP page. However, when the head page
>>> already has PageMlocked unset, it will not skip the tail pages.
>>>
>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>> munlock+putback using pagevec") has added a PageTransHuge() check which
>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>>
>>> This patch fixes the issue by skipping tail pages also in the case when
>>> PageMlocked flag is unset. There is still a possibility of race with THP page
>>> split between clearing PageMlocked and determining how many pages to skip.
>>> The race might result in former tail pages not being skipped, which is however
>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>
>>> However this race also affects correctness of NR_MLOCK accounting, which is to
>>> be fixed in a separate patch.
>>
>> I've hit the same thing again, on the latest -next, this time with a different trace:
>>
>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
>> [  539.200429] page flags: 0x12fffff80008000(tail)
>> [  539.201167] ------------[ cut here ]------------
>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>> [  539.204588] Dumping ftrace buffer:
>> [  539.206415]    (ftrace buffer empty)
>> [  539.207022] Modules linked in:
>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W     3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
>> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
>> [  539.210263] Stack:
>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
>> [  539.210263] Call Trace:
>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>> [  539.210263]  RSP <ffff8805a44c3e08>
>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>
>>
>> Thanks,
>> Sasha
> 
> And another related trace:
> 
> [  741.192502] kernel BUG at mm/mlock.c:528!
> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [  741.194177] Dumping ftrace buffer:
> [  741.194645]    (ftrace buffer empty)
> [  741.195109] Modules linked in:
> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
> [  741.200085] Stack:
> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
> [  741.200085] Call Trace:
> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
> [  741.200085]  RSP <ffff8805decb9e08>

Sigh, again? I really wonder what is it this time :)
Please try this debug patch, hopefully we learn something:

diff --git a/mm/mlock.c b/mm/mlock.c
index 4e1a6816..7094bac 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -469,12 +469,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
 void munlock_vma_pages_range(struct vm_area_struct *vma,
 			     unsigned long start, unsigned long end)
 {
+	unsigned long orig_start = start;
+	unsigned long page_increm = 0;
+
 	vma->vm_flags &= ~VM_LOCKED;
 
 	while (start < end) {
 		struct page *page = NULL;
 		unsigned int page_mask;
-		unsigned long page_increm;
 		struct pagevec pvec;
 		struct zone *zone;
 		int zoneid;
@@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 				&page_mask);
 
 		if (page && !IS_ERR(page)) {
+			if (PageTail(page)) {
+				struct page *first_page;
+				dump_page(page, "Unexpected PageTail");
+				printk("start=%lu pfn=%lu orig_start=%lu "
+				       "page_increm=%lu "
+				       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
+					start, page_to_pfn(page), orig_start,
+					page_increm,
+					vma->vm_start, vma->vm_end,
+					vma->vm_flags);
+				first_page = page->first_page;
+				printk("first_page pfn=%lu\n",
+						page_to_pfn(first_page));
+				dump_page(first_page, "first_page of unexpected PageTail page");
+				if (PageCompound(first_page))
+					printk("first_page is compound with order=%d\n", compound_order(first_page));
+				VM_BUG_ON(true);
+			}
 			if (PageTransHuge(page)) {
 				lock_page(page);
 				/*
@@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
 			}
 		}
 		/* It's a bug to munlock in the middle of a THP page */
-		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
+		if ((start >> PAGE_SHIFT) & page_mask) {
+			dump_page(page, "unexpected middle of THP page");
+			printk("start=%lu pfn=%lu orig_start=%lu "
+			       "prev_page_increm=%lu page_mask=%u "
+			       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
+				start, page_to_pfn(page), orig_start,
+				page_increm, page_mask,
+				vma->vm_start, vma->vm_end,
+				vma->vm_flags);
+			if (PageTail(page)) {
+				struct page *first_page = page->first_page;
+				printk("first_page pfn=%lu\n",
+						page_to_pfn(first_page));
+				dump_page(first_page, "first_page of unexpected middle of THP page");
+				if (PageCompound(first_page))
+					printk("first_page is compound with order=%d\n", compound_order(first_page));
+			}
+			VM_BUG_ON(true);
+		}
 		page_increm = 1 + page_mask;
 		start += page_increm * PAGE_SIZE;
 next:


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2014-03-17 12:38                                       ` Vlastimil Babka
@ 2014-03-17 21:08                                         ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-17 21:08 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>>>
>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>>>> munlock skips tail pages of a munlocked THP page. However, when the head page
>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>
>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>> munlock+putback using pagevec") has added a PageTransHuge() check which
>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>>>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>>>
>>>> This patch fixes the issue by skipping tail pages also in the case when
>>>> PageMlocked flag is unset. There is still a possibility of race with THP page
>>>> split between clearing PageMlocked and determining how many pages to skip.
>>>> The race might result in former tail pages not being skipped, which is however
>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>
>>>> However this race also affects correctness of NR_MLOCK accounting, which is to
>>>> be fixed in a separate patch.
>>>
>>> I've hit the same thing again, on the latest -next, this time with a different trace:
>>>
>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>> [  539.201167] ------------[ cut here ]------------
>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>> [  539.204588] Dumping ftrace buffer:
>>> [  539.206415]    (ftrace buffer empty)
>>> [  539.207022] Modules linked in:
>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W     3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
>>> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
>>> [  539.210263] Stack:
>>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
>>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
>>> [  539.210263] Call Trace:
>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>
>>>
>>> Thanks,
>>> Sasha
>>
>> And another related trace:
>>
>> [  741.192502] kernel BUG at mm/mlock.c:528!
>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>> [  741.194177] Dumping ftrace buffer:
>> [  741.194645]    (ftrace buffer empty)
>> [  741.195109] Modules linked in:
>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
>> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
>> [  741.200085] Stack:
>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
>> [  741.200085] Call Trace:
>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>> [  741.200085]  RSP <ffff8805decb9e08>
>
> Sigh, again? I really wonder what is it this time :)
> Please try this debug patch, hopefully we learn something:
>
> diff --git a/mm/mlock.c b/mm/mlock.c
> index 4e1a6816..7094bac 100644
> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -469,12 +469,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
>   void munlock_vma_pages_range(struct vm_area_struct *vma,
>   			     unsigned long start, unsigned long end)
>   {
> +	unsigned long orig_start = start;
> +	unsigned long page_increm = 0;
> +
>   	vma->vm_flags &= ~VM_LOCKED;
>
>   	while (start < end) {
>   		struct page *page = NULL;
>   		unsigned int page_mask;
> -		unsigned long page_increm;
>   		struct pagevec pvec;
>   		struct zone *zone;
>   		int zoneid;
> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>   				&page_mask);
>
>   		if (page && !IS_ERR(page)) {
> +			if (PageTail(page)) {
> +				struct page *first_page;
> +				dump_page(page, "Unexpected PageTail");
> +				printk("start=%lu pfn=%lu orig_start=%lu "
> +				       "page_increm=%lu "
> +				       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
> +					start, page_to_pfn(page), orig_start,
> +					page_increm,
> +					vma->vm_start, vma->vm_end,
> +					vma->vm_flags);
> +				first_page = page->first_page;
> +				printk("first_page pfn=%lu\n",
> +						page_to_pfn(first_page));
> +				dump_page(first_page, "first_page of unexpected PageTail page");
> +				if (PageCompound(first_page))
> +					printk("first_page is compound with order=%d\n", compound_order(first_page));
> +				VM_BUG_ON(true);
> +			}
>   			if (PageTransHuge(page)) {
>   				lock_page(page);
>   				/*
> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>   			}
>   		}
>   		/* It's a bug to munlock in the middle of a THP page */
> -		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
> +		if ((start >> PAGE_SHIFT) & page_mask) {
> +			dump_page(page, "unexpected middle of THP page");
> +			printk("start=%lu pfn=%lu orig_start=%lu "

In this scenario page might be error or NULL, no?


Thanks,
Sasha


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2014-03-17 21:08                                         ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-17 21:08 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>>>
>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>>>> munlock skips tail pages of a munlocked THP page. However, when the head page
>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>
>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>> munlock+putback using pagevec") has added a PageTransHuge() check which
>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>>>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>>>
>>>> This patch fixes the issue by skipping tail pages also in the case when
>>>> PageMlocked flag is unset. There is still a possibility of race with THP page
>>>> split between clearing PageMlocked and determining how many pages to skip.
>>>> The race might result in former tail pages not being skipped, which is however
>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>
>>>> However this race also affects correctness of NR_MLOCK accounting, which is to
>>>> be fixed in a separate patch.
>>>
>>> I've hit the same thing again, on the latest -next, this time with a different trace:
>>>
>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>> [  539.201167] ------------[ cut here ]------------
>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>> [  539.204588] Dumping ftrace buffer:
>>> [  539.206415]    (ftrace buffer empty)
>>> [  539.207022] Modules linked in:
>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W     3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
>>> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
>>> [  539.210263] Stack:
>>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
>>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
>>> [  539.210263] Call Trace:
>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>
>>>
>>> Thanks,
>>> Sasha
>>
>> And another related trace:
>>
>> [  741.192502] kernel BUG at mm/mlock.c:528!
>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>> [  741.194177] Dumping ftrace buffer:
>> [  741.194645]    (ftrace buffer empty)
>> [  741.195109] Modules linked in:
>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
>> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
>> [  741.200085] Stack:
>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
>> [  741.200085] Call Trace:
>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>> [  741.200085]  RSP <ffff8805decb9e08>
>
> Sigh, again? I really wonder what is it this time :)
> Please try this debug patch, hopefully we learn something:
>
> diff --git a/mm/mlock.c b/mm/mlock.c
> index 4e1a6816..7094bac 100644
> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -469,12 +469,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
>   void munlock_vma_pages_range(struct vm_area_struct *vma,
>   			     unsigned long start, unsigned long end)
>   {
> +	unsigned long orig_start = start;
> +	unsigned long page_increm = 0;
> +
>   	vma->vm_flags &= ~VM_LOCKED;
>
>   	while (start < end) {
>   		struct page *page = NULL;
>   		unsigned int page_mask;
> -		unsigned long page_increm;
>   		struct pagevec pvec;
>   		struct zone *zone;
>   		int zoneid;
> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>   				&page_mask);
>
>   		if (page && !IS_ERR(page)) {
> +			if (PageTail(page)) {
> +				struct page *first_page;
> +				dump_page(page, "Unexpected PageTail");
> +				printk("start=%lu pfn=%lu orig_start=%lu "
> +				       "page_increm=%lu "
> +				       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
> +					start, page_to_pfn(page), orig_start,
> +					page_increm,
> +					vma->vm_start, vma->vm_end,
> +					vma->vm_flags);
> +				first_page = page->first_page;
> +				printk("first_page pfn=%lu\n",
> +						page_to_pfn(first_page));
> +				dump_page(first_page, "first_page of unexpected PageTail page");
> +				if (PageCompound(first_page))
> +					printk("first_page is compound with order=%d\n", compound_order(first_page));
> +				VM_BUG_ON(true);
> +			}
>   			if (PageTransHuge(page)) {
>   				lock_page(page);
>   				/*
> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>   			}
>   		}
>   		/* It's a bug to munlock in the middle of a THP page */
> -		VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
> +		if ((start >> PAGE_SHIFT) & page_mask) {
> +			dump_page(page, "unexpected middle of THP page");
> +			printk("start=%lu pfn=%lu orig_start=%lu "

In this scenario page might be error or NULL, no?


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2014-03-17 21:08                                         ` Sasha Levin
@ 2014-03-17 22:20                                           ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-17 22:20 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 17.3.2014 22:08, Sasha Levin wrote:
> On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
>> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is 
>>>>> encountered
>>>>>
>>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP 
>>>>> pages")
>>>>> munlock skips tail pages of a munlocked THP page. However, when 
>>>>> the head page
>>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>>
>>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>>> munlock+putback using pagevec") has added a PageTransHuge() check 
>>>>> which
>>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this 
>>>>> triggered using
>>>>> trinity, on the first tail page of a THP page without PageMlocked 
>>>>> flag.
>>>>>
>>>>> This patch fixes the issue by skipping tail pages also in the case 
>>>>> when
>>>>> PageMlocked flag is unset. There is still a possibility of race 
>>>>> with THP page
>>>>> split between clearing PageMlocked and determining how many pages 
>>>>> to skip.
>>>>> The race might result in former tail pages not being skipped, 
>>>>> which is however
>>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>>
>>>>> However this race also affects correctness of NR_MLOCK accounting, 
>>>>> which is to
>>>>> be fixed in a separate patch.
>>>>
>>>> I've hit the same thing again, on the latest -next, this time with 
>>>> a different trace:
>>>>
>>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 
>>>> mapping:          (null) index:0x0
>>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>>> [  539.201167] ------------[ cut here ]------------
>>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>> [  539.204588] Dumping ftrace buffer:
>>>> [  539.206415]    (ftrace buffer empty)
>>>> [  539.207022] Modules linked in:
>>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: 
>>>> G        W 3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: 
>>>> ffff8805a44c2000
>>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 
>>>> (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 
>>>> 0000000000000099
>>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 
>>>> 0000000004c926a0
>>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 
>>>> 0000000000000001
>>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: 
>>>> ffffea0013249a80
>>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: 
>>>> ffff8805a44c3e94
>>>> [  539.210263] FS:  00007fd6ce14a700(0000) 
>>>> GS:ffff88042b800000(0000) knlGS:0000000000000000
>>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 
>>>> 00000000000006a0
>>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 
>>>> 0000000000000000
>>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 
>>>> 0000000000000600
>>>> [  539.210263] Stack:
>>>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 
>>>> 0000000000000000
>>>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 
>>>> 0000000000000000
>>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 
>>>> ffff88039dc95a00
>>>> [  539.210263] Call Trace:
>>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 
>>>> mm/mmap.c:2547)
>>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 
>>>> 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 
>>>> e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 
>>>> 24 f6 c4 40 74
>>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 
>>>> (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>>
>>>>
>>>> Thanks,
>>>> Sasha
>>>
>>> And another related trace:
>>>
>>> [  741.192502] kernel BUG at mm/mlock.c:528!
>>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>> [  741.194177] Dumping ftrace buffer:
>>> [  741.194645]    (ftrace buffer empty)
>>> [  741.195109] Modules linked in:
>>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: 
>>> G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: 
>>> ffff8805decb8000
>>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 
>>> (mm/mlock.c:528)
>>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 
>>> 0000000000000000
>>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: 
>>> ffffffff84490705
>>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 
>>> 0000000000000000
>>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: 
>>> fffffffffffffff2
>>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: 
>>> ffff8805decb9e94
>>> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) 
>>> knlGS:0000000000000000
>>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 
>>> 00000000000006a0
>>> [  741.200085] Stack:
>>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 
>>> 0000000000000000
>>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 
>>> 0000000000000000
>>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 
>>> ffff880221044e00
>>> [  741.200085] Call Trace:
>>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 
>>> mm/mmap.c:2547)
>>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff 
>>> e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 
>>> 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 
>>> ff c0 48
>>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 
>>> (mm/mlock.c:528)
>>> [  741.200085]  RSP <ffff8805decb9e08>
>>
>> Sigh, again? I really wonder what is it this time :)
>> Please try this debug patch, hopefully we learn something:
>>
>> diff --git a/mm/mlock.c b/mm/mlock.c
>> index 4e1a6816..7094bac 100644
>> --- a/mm/mlock.c
>> +++ b/mm/mlock.c
>> @@ -469,12 +469,14 @@ static unsigned long 
>> __munlock_pagevec_fill(struct pagevec *pvec,
>>   void munlock_vma_pages_range(struct vm_area_struct *vma,
>>                    unsigned long start, unsigned long end)
>>   {
>> +    unsigned long orig_start = start;
>> +    unsigned long page_increm = 0;
>> +
>>       vma->vm_flags &= ~VM_LOCKED;
>>
>>       while (start < end) {
>>           struct page *page = NULL;
>>           unsigned int page_mask;
>> -        unsigned long page_increm;
>>           struct pagevec pvec;
>>           struct zone *zone;
>>           int zoneid;
>> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct 
>> vm_area_struct *vma,
>>                   &page_mask);
>>
>>           if (page && !IS_ERR(page)) {
>> +            if (PageTail(page)) {
>> +                struct page *first_page;
>> +                dump_page(page, "Unexpected PageTail");
>> +                printk("start=%lu pfn=%lu orig_start=%lu "
>> +                       "page_increm=%lu "
>> +                       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
>> +                    start, page_to_pfn(page), orig_start,
>> +                    page_increm,
>> +                    vma->vm_start, vma->vm_end,
>> +                    vma->vm_flags);
>> +                first_page = page->first_page;
>> +                printk("first_page pfn=%lu\n",
>> +                        page_to_pfn(first_page));
>> +                dump_page(first_page, "first_page of unexpected 
>> PageTail page");
>> +                if (PageCompound(first_page))
>> +                    printk("first_page is compound with order=%d\n", 
>> compound_order(first_page));
>> +                VM_BUG_ON(true);
>> +            }
>>               if (PageTransHuge(page)) {
>>                   lock_page(page);
>>                   /*
>> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct 
>> vm_area_struct *vma,
>>               }
>>           }
>>           /* It's a bug to munlock in the middle of a THP page */
>> -        VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
>> +        if ((start >> PAGE_SHIFT) & page_mask) {
>> +            dump_page(page, "unexpected middle of THP page");
>> +            printk("start=%lu pfn=%lu orig_start=%lu "
>
> In this scenario page might be error or NULL, no?
>

Hm I doubt page_mask would be nonzero in such case, but who knows what 
weirdness causes this...
Feel free to move the dump_page() below printk() so we still get useful 
info before it crashes on
dump_page() in such situation.

>
> Thanks,
> Sasha
>
> -- 
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2014-03-17 22:20                                           ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-17 22:20 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 17.3.2014 22:08, Sasha Levin wrote:
> On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
>> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is 
>>>>> encountered
>>>>>
>>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP 
>>>>> pages")
>>>>> munlock skips tail pages of a munlocked THP page. However, when 
>>>>> the head page
>>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>>
>>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>>> munlock+putback using pagevec") has added a PageTransHuge() check 
>>>>> which
>>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this 
>>>>> triggered using
>>>>> trinity, on the first tail page of a THP page without PageMlocked 
>>>>> flag.
>>>>>
>>>>> This patch fixes the issue by skipping tail pages also in the case 
>>>>> when
>>>>> PageMlocked flag is unset. There is still a possibility of race 
>>>>> with THP page
>>>>> split between clearing PageMlocked and determining how many pages 
>>>>> to skip.
>>>>> The race might result in former tail pages not being skipped, 
>>>>> which is however
>>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>>
>>>>> However this race also affects correctness of NR_MLOCK accounting, 
>>>>> which is to
>>>>> be fixed in a separate patch.
>>>>
>>>> I've hit the same thing again, on the latest -next, this time with 
>>>> a different trace:
>>>>
>>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 
>>>> mapping:          (null) index:0x0
>>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>>> [  539.201167] ------------[ cut here ]------------
>>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>> [  539.204588] Dumping ftrace buffer:
>>>> [  539.206415]    (ftrace buffer empty)
>>>> [  539.207022] Modules linked in:
>>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: 
>>>> G        W 3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: 
>>>> ffff8805a44c2000
>>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 
>>>> (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 
>>>> 0000000000000099
>>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 
>>>> 0000000004c926a0
>>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 
>>>> 0000000000000001
>>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: 
>>>> ffffea0013249a80
>>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: 
>>>> ffff8805a44c3e94
>>>> [  539.210263] FS:  00007fd6ce14a700(0000) 
>>>> GS:ffff88042b800000(0000) knlGS:0000000000000000
>>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 
>>>> 00000000000006a0
>>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 
>>>> 0000000000000000
>>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 
>>>> 0000000000000600
>>>> [  539.210263] Stack:
>>>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 
>>>> 0000000000000000
>>>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 
>>>> 0000000000000000
>>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 
>>>> ffff88039dc95a00
>>>> [  539.210263] Call Trace:
>>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 
>>>> mm/mmap.c:2547)
>>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 
>>>> 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 
>>>> e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 
>>>> 24 f6 c4 40 74
>>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 
>>>> (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>>
>>>>
>>>> Thanks,
>>>> Sasha
>>>
>>> And another related trace:
>>>
>>> [  741.192502] kernel BUG at mm/mlock.c:528!
>>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>> [  741.194177] Dumping ftrace buffer:
>>> [  741.194645]    (ftrace buffer empty)
>>> [  741.195109] Modules linked in:
>>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: 
>>> G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: 
>>> ffff8805decb8000
>>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 
>>> (mm/mlock.c:528)
>>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 
>>> 0000000000000000
>>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: 
>>> ffffffff84490705
>>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 
>>> 0000000000000000
>>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: 
>>> fffffffffffffff2
>>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: 
>>> ffff8805decb9e94
>>> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) 
>>> knlGS:0000000000000000
>>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 
>>> 00000000000006a0
>>> [  741.200085] Stack:
>>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 
>>> 0000000000000000
>>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 
>>> 0000000000000000
>>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 
>>> ffff880221044e00
>>> [  741.200085] Call Trace:
>>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 
>>> mm/mmap.c:2547)
>>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff 
>>> e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 
>>> 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 
>>> ff c0 48
>>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 
>>> (mm/mlock.c:528)
>>> [  741.200085]  RSP <ffff8805decb9e08>
>>
>> Sigh, again? I really wonder what is it this time :)
>> Please try this debug patch, hopefully we learn something:
>>
>> diff --git a/mm/mlock.c b/mm/mlock.c
>> index 4e1a6816..7094bac 100644
>> --- a/mm/mlock.c
>> +++ b/mm/mlock.c
>> @@ -469,12 +469,14 @@ static unsigned long 
>> __munlock_pagevec_fill(struct pagevec *pvec,
>>   void munlock_vma_pages_range(struct vm_area_struct *vma,
>>                    unsigned long start, unsigned long end)
>>   {
>> +    unsigned long orig_start = start;
>> +    unsigned long page_increm = 0;
>> +
>>       vma->vm_flags &= ~VM_LOCKED;
>>
>>       while (start < end) {
>>           struct page *page = NULL;
>>           unsigned int page_mask;
>> -        unsigned long page_increm;
>>           struct pagevec pvec;
>>           struct zone *zone;
>>           int zoneid;
>> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct 
>> vm_area_struct *vma,
>>                   &page_mask);
>>
>>           if (page && !IS_ERR(page)) {
>> +            if (PageTail(page)) {
>> +                struct page *first_page;
>> +                dump_page(page, "Unexpected PageTail");
>> +                printk("start=%lu pfn=%lu orig_start=%lu "
>> +                       "page_increm=%lu "
>> +                       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
>> +                    start, page_to_pfn(page), orig_start,
>> +                    page_increm,
>> +                    vma->vm_start, vma->vm_end,
>> +                    vma->vm_flags);
>> +                first_page = page->first_page;
>> +                printk("first_page pfn=%lu\n",
>> +                        page_to_pfn(first_page));
>> +                dump_page(first_page, "first_page of unexpected 
>> PageTail page");
>> +                if (PageCompound(first_page))
>> +                    printk("first_page is compound with order=%d\n", 
>> compound_order(first_page));
>> +                VM_BUG_ON(true);
>> +            }
>>               if (PageTransHuge(page)) {
>>                   lock_page(page);
>>                   /*
>> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct 
>> vm_area_struct *vma,
>>               }
>>           }
>>           /* It's a bug to munlock in the middle of a THP page */
>> -        VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
>> +        if ((start >> PAGE_SHIFT) & page_mask) {
>> +            dump_page(page, "unexpected middle of THP page");
>> +            printk("start=%lu pfn=%lu orig_start=%lu "
>
> In this scenario page might be error or NULL, no?
>

Hm I doubt page_mask would be nonzero in such case, but who knows what 
weirdness causes this...
Feel free to move the dump_page() below printk() so we still get useful 
info before it crashes on
dump_page() in such situation.

>
> Thanks,
> Sasha
>
> -- 
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2014-03-17 22:20                                           ` Vlastimil Babka
@ 2014-03-17 22:58                                             ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-17 22:58 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/17/2014 06:20 PM, Vlastimil Babka wrote:
> On 17.3.2014 22:08, Sasha Levin wrote:
>> On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
>>> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>>>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>>>>>
>>>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>>>>>> munlock skips tail pages of a munlocked THP page. However, when the head page
>>>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>>>
>>>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>>>> munlock+putback using pagevec") has added a PageTransHuge() check which
>>>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>>>>>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>>>>>
>>>>>> This patch fixes the issue by skipping tail pages also in the case when
>>>>>> PageMlocked flag is unset. There is still a possibility of race with THP page
>>>>>> split between clearing PageMlocked and determining how many pages to skip.
>>>>>> The race might result in former tail pages not being skipped, which is however
>>>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>>>
>>>>>> However this race also affects correctness of NR_MLOCK accounting, which is to
>>>>>> be fixed in a separate patch.
>>>>>
>>>>> I've hit the same thing again, on the latest -next, this time with a different trace:
>>>>>
>>>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
>>>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>>>> [  539.201167] ------------[ cut here ]------------
>>>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>> [  539.204588] Dumping ftrace buffer:
>>>>> [  539.206415]    (ftrace buffer empty)
>>>>> [  539.207022] Modules linked in:
>>>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W 3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
>>>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
>>>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
>>>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
>>>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
>>>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
>>>>> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
>>>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
>>>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
>>>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
>>>>> [  539.210263] Stack:
>>>>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
>>>>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
>>>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
>>>>> [  539.210263] Call Trace:
>>>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
>>>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>>>
>>>>>
>>>>> Thanks,
>>>>> Sasha
>>>>
>>>> And another related trace:
>>>>
>>>> [  741.192502] kernel BUG at mm/mlock.c:528!
>>>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>> [  741.194177] Dumping ftrace buffer:
>>>> [  741.194645]    (ftrace buffer empty)
>>>> [  741.195109] Modules linked in:
>>>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>>>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
>>>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>>>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>>>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
>>>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
>>>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
>>>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
>>>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
>>>> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
>>>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
>>>> [  741.200085] Stack:
>>>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
>>>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
>>>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
>>>> [  741.200085] Call Trace:
>>>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
>>>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>>>> [  741.200085]  RSP <ffff8805decb9e08>
>>>
>>> Sigh, again? I really wonder what is it this time :)
>>> Please try this debug patch, hopefully we learn something:
>>>
>>> diff --git a/mm/mlock.c b/mm/mlock.c
>>> index 4e1a6816..7094bac 100644
>>> --- a/mm/mlock.c
>>> +++ b/mm/mlock.c
>>> @@ -469,12 +469,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
>>>   void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>                    unsigned long start, unsigned long end)
>>>   {
>>> +    unsigned long orig_start = start;
>>> +    unsigned long page_increm = 0;
>>> +
>>>       vma->vm_flags &= ~VM_LOCKED;
>>>
>>>       while (start < end) {
>>>           struct page *page = NULL;
>>>           unsigned int page_mask;
>>> -        unsigned long page_increm;
>>>           struct pagevec pvec;
>>>           struct zone *zone;
>>>           int zoneid;
>>> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>                   &page_mask);
>>>
>>>           if (page && !IS_ERR(page)) {
>>> +            if (PageTail(page)) {
>>> +                struct page *first_page;
>>> +                dump_page(page, "Unexpected PageTail");
>>> +                printk("start=%lu pfn=%lu orig_start=%lu "
>>> +                       "page_increm=%lu "
>>> +                       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
>>> +                    start, page_to_pfn(page), orig_start,
>>> +                    page_increm,
>>> +                    vma->vm_start, vma->vm_end,
>>> +                    vma->vm_flags);
>>> +                first_page = page->first_page;
>>> +                printk("first_page pfn=%lu\n",
>>> +                        page_to_pfn(first_page));
>>> +                dump_page(first_page, "first_page of unexpected PageTail page");
>>> +                if (PageCompound(first_page))
>>> +                    printk("first_page is compound with order=%d\n", compound_order(first_page));
>>> +                VM_BUG_ON(true);
>>> +            }
>>>               if (PageTransHuge(page)) {
>>>                   lock_page(page);
>>>                   /*
>>> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>               }
>>>           }
>>>           /* It's a bug to munlock in the middle of a THP page */
>>> -        VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
>>> +        if ((start >> PAGE_SHIFT) & page_mask) {
>>> +            dump_page(page, "unexpected middle of THP page");
>>> +            printk("start=%lu pfn=%lu orig_start=%lu "
>>
>> In this scenario page might be error or NULL, no?
>>
>
> Hm I doubt page_mask would be nonzero in such case, but who knows what weirdness causes this...
> Feel free to move the dump_page() below printk() so we still get useful info before it crashes on
> dump_page() in such situation.

It happened once, so I moved it, but in the meanwhile I got something useful:

[ 1753.907376] page:ffffea0017130c40 count:0 mapcount:1 mapping:          (null) index:0x2
[ 1753.908327] page flags: 0x16fffff80008000(tail)
[ 1753.908973] page dumped because: Unexpected PageTail
[ 1753.909595] start=140340826935296 pfn=6048817 orig_start=140340826935296 page_increm=0 vm_start=140340826935296 vm_end=140340826939392 vm_flags=1210057078
[ 1753.911220] first_page pfn=6048768
[ 1753.911692] page:ffffea0017130000 count:2 mapcount:1 mapping:ffff880612b41f01 index:0x7fa3a5200
[ 1753.912733] page flags: 0x16fffff80384028(uptodate|lru|head|swapbacked|unevictable|mlocked)
[ 1753.913464] page dumped because: first_page of unexpected PageTail page
[ 1753.914387] pc:ffff88062adcc000 pc->flags:2 pc->mem_cgroup:ffff88012b474520
[ 1753.914387] first_page is compound with order=9
[ 1753.914387] ------------[ cut here ]------------
[ 1753.914387] kernel BUG at mm/mlock.c:512!
[ 1753.914387] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[ 1753.914387] Dumping ftrace buffer:
[ 1753.914387]    (ftrace buffer empty)
[ 1753.914387] Modules linked in:
[ 1753.914387] CPU: 26 PID: 36822 Comm: trinity-c337 Tainted: G        W     3.14.0-rc6-next-20140317-sasha-00012-ge933921-dirty #226
[ 1753.914387] task: ffff88090cdeb000 ti: ffff88090a868000 task.ti: ffff88090a868000
[ 1753.914387] RIP: 0010:[<ffffffff8129ca7a>]  [<ffffffff8129ca7a>] munlock_vma_pages_range+0x12a/0x340
[ 1753.914387] RSP: 0018:ffff88090a869dd8  EFLAGS: 00010292
[ 1753.914387] RAX: 0000000000000023 RBX: ffffea0017130000 RCX: 0000000000000006
[ 1753.914387] RDX: 0000000000000006 RSI: ffff88090cdebcf0 RDI: 0000000000000282
[ 1753.914387] RBP: ffff88090a869ec8 R08: 0000000000000001 R09: 0000000000000001
[ 1753.914387] R10: 0000000000000001 R11: 0000000000000001 R12: 00007fa3a5231000
[ 1753.914387] R13: ffff880613c69400 R14: 0000160000000000 R15: 0000000000000000
[ 1753.914387] FS:  00007fa3a9081700(0000) GS:ffff880b2ba00000(0000) knlGS:0000000000000000
[ 1753.914387] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 1753.914387] CR2: 0000000002fff0a8 CR3: 00000008fa08d000 CR4: 00000000000006a0
[ 1753.914387] Stack:
[ 1753.914387]  00007fa3a5232000 0000000048200176 00007fa3a552a000 ffff880613c6a800
[ 1753.914387]  00007fa3a552a000 00007fa3a5231000 0000000000000000 0000000000000000
[ 1753.914387]  000188090a869e38 0000000000000000 0000000000000000 ffff880613c69400
[ 1753.914387] Call Trace:
[ 1753.914387]  [<ffffffff812a0302>] do_munmap+0x1d2/0x360
[ 1753.914387]  [<ffffffff844a42e6>] ? down_write+0xa6/0xc0
[ 1753.914387]  [<ffffffff812a04d6>] ? vm_munmap+0x46/0x80
[ 1753.914387]  [<ffffffff812a04e4>] vm_munmap+0x54/0x80
[ 1753.914387]  [<ffffffff812a053c>] SyS_munmap+0x2c/0x40
[ 1753.914387]  [<ffffffff844b04d0>] tracesys+0xdd/0xe2
[ 1753.914387] Code: 85 48 89 df e8 98 d0 fc ff 66 f7 03 00 c0 74 1b 48 8b 03 31 f6 f6 c4 40 74 03 8b 73 68 48 c7 c7 58 7d 6e 85 31 c0 e8 52 1f 20 03 <0f> 0b 0f 1f 40 00 eb fe 66 0f 1f 44 00 00 48 8b 03 66 85 c0 79
[ 1753.914387] RIP  [<ffffffff8129ca7a>] munlock_vma_pages_range+0x12a/0x340
[ 1753.914387]  RSP <ffff88090a869dd8>


Thanks,
Sasha

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2014-03-17 22:58                                             ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-17 22:58 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/17/2014 06:20 PM, Vlastimil Babka wrote:
> On 17.3.2014 22:08, Sasha Levin wrote:
>> On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
>>> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>>>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>>>>>
>>>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>>>>>> munlock skips tail pages of a munlocked THP page. However, when the head page
>>>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>>>
>>>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>>>> munlock+putback using pagevec") has added a PageTransHuge() check which
>>>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>>>>>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>>>>>
>>>>>> This patch fixes the issue by skipping tail pages also in the case when
>>>>>> PageMlocked flag is unset. There is still a possibility of race with THP page
>>>>>> split between clearing PageMlocked and determining how many pages to skip.
>>>>>> The race might result in former tail pages not being skipped, which is however
>>>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>>>
>>>>>> However this race also affects correctness of NR_MLOCK accounting, which is to
>>>>>> be fixed in a separate patch.
>>>>>
>>>>> I've hit the same thing again, on the latest -next, this time with a different trace:
>>>>>
>>>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
>>>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>>>> [  539.201167] ------------[ cut here ]------------
>>>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>> [  539.204588] Dumping ftrace buffer:
>>>>> [  539.206415]    (ftrace buffer empty)
>>>>> [  539.207022] Modules linked in:
>>>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W 3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
>>>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
>>>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
>>>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
>>>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
>>>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
>>>>> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
>>>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
>>>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
>>>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
>>>>> [  539.210263] Stack:
>>>>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
>>>>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
>>>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
>>>>> [  539.210263] Call Trace:
>>>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
>>>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>>>
>>>>>
>>>>> Thanks,
>>>>> Sasha
>>>>
>>>> And another related trace:
>>>>
>>>> [  741.192502] kernel BUG at mm/mlock.c:528!
>>>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>> [  741.194177] Dumping ftrace buffer:
>>>> [  741.194645]    (ftrace buffer empty)
>>>> [  741.195109] Modules linked in:
>>>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>>>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
>>>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>>>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>>>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
>>>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
>>>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
>>>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
>>>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
>>>> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
>>>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
>>>> [  741.200085] Stack:
>>>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
>>>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
>>>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
>>>> [  741.200085] Call Trace:
>>>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
>>>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>>>> [  741.200085]  RSP <ffff8805decb9e08>
>>>
>>> Sigh, again? I really wonder what is it this time :)
>>> Please try this debug patch, hopefully we learn something:
>>>
>>> diff --git a/mm/mlock.c b/mm/mlock.c
>>> index 4e1a6816..7094bac 100644
>>> --- a/mm/mlock.c
>>> +++ b/mm/mlock.c
>>> @@ -469,12 +469,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
>>>   void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>                    unsigned long start, unsigned long end)
>>>   {
>>> +    unsigned long orig_start = start;
>>> +    unsigned long page_increm = 0;
>>> +
>>>       vma->vm_flags &= ~VM_LOCKED;
>>>
>>>       while (start < end) {
>>>           struct page *page = NULL;
>>>           unsigned int page_mask;
>>> -        unsigned long page_increm;
>>>           struct pagevec pvec;
>>>           struct zone *zone;
>>>           int zoneid;
>>> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>                   &page_mask);
>>>
>>>           if (page && !IS_ERR(page)) {
>>> +            if (PageTail(page)) {
>>> +                struct page *first_page;
>>> +                dump_page(page, "Unexpected PageTail");
>>> +                printk("start=%lu pfn=%lu orig_start=%lu "
>>> +                       "page_increm=%lu "
>>> +                       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
>>> +                    start, page_to_pfn(page), orig_start,
>>> +                    page_increm,
>>> +                    vma->vm_start, vma->vm_end,
>>> +                    vma->vm_flags);
>>> +                first_page = page->first_page;
>>> +                printk("first_page pfn=%lu\n",
>>> +                        page_to_pfn(first_page));
>>> +                dump_page(first_page, "first_page of unexpected PageTail page");
>>> +                if (PageCompound(first_page))
>>> +                    printk("first_page is compound with order=%d\n", compound_order(first_page));
>>> +                VM_BUG_ON(true);
>>> +            }
>>>               if (PageTransHuge(page)) {
>>>                   lock_page(page);
>>>                   /*
>>> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>               }
>>>           }
>>>           /* It's a bug to munlock in the middle of a THP page */
>>> -        VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
>>> +        if ((start >> PAGE_SHIFT) & page_mask) {
>>> +            dump_page(page, "unexpected middle of THP page");
>>> +            printk("start=%lu pfn=%lu orig_start=%lu "
>>
>> In this scenario page might be error or NULL, no?
>>
>
> Hm I doubt page_mask would be nonzero in such case, but who knows what weirdness causes this...
> Feel free to move the dump_page() below printk() so we still get useful info before it crashes on
> dump_page() in such situation.

It happened once, so I moved it, but in the meanwhile I got something useful:

[ 1753.907376] page:ffffea0017130c40 count:0 mapcount:1 mapping:          (null) index:0x2
[ 1753.908327] page flags: 0x16fffff80008000(tail)
[ 1753.908973] page dumped because: Unexpected PageTail
[ 1753.909595] start=140340826935296 pfn=6048817 orig_start=140340826935296 page_increm=0 vm_start=140340826935296 vm_end=140340826939392 vm_flags=1210057078
[ 1753.911220] first_page pfn=6048768
[ 1753.911692] page:ffffea0017130000 count:2 mapcount:1 mapping:ffff880612b41f01 index:0x7fa3a5200
[ 1753.912733] page flags: 0x16fffff80384028(uptodate|lru|head|swapbacked|unevictable|mlocked)
[ 1753.913464] page dumped because: first_page of unexpected PageTail page
[ 1753.914387] pc:ffff88062adcc000 pc->flags:2 pc->mem_cgroup:ffff88012b474520
[ 1753.914387] first_page is compound with order=9
[ 1753.914387] ------------[ cut here ]------------
[ 1753.914387] kernel BUG at mm/mlock.c:512!
[ 1753.914387] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[ 1753.914387] Dumping ftrace buffer:
[ 1753.914387]    (ftrace buffer empty)
[ 1753.914387] Modules linked in:
[ 1753.914387] CPU: 26 PID: 36822 Comm: trinity-c337 Tainted: G        W     3.14.0-rc6-next-20140317-sasha-00012-ge933921-dirty #226
[ 1753.914387] task: ffff88090cdeb000 ti: ffff88090a868000 task.ti: ffff88090a868000
[ 1753.914387] RIP: 0010:[<ffffffff8129ca7a>]  [<ffffffff8129ca7a>] munlock_vma_pages_range+0x12a/0x340
[ 1753.914387] RSP: 0018:ffff88090a869dd8  EFLAGS: 00010292
[ 1753.914387] RAX: 0000000000000023 RBX: ffffea0017130000 RCX: 0000000000000006
[ 1753.914387] RDX: 0000000000000006 RSI: ffff88090cdebcf0 RDI: 0000000000000282
[ 1753.914387] RBP: ffff88090a869ec8 R08: 0000000000000001 R09: 0000000000000001
[ 1753.914387] R10: 0000000000000001 R11: 0000000000000001 R12: 00007fa3a5231000
[ 1753.914387] R13: ffff880613c69400 R14: 0000160000000000 R15: 0000000000000000
[ 1753.914387] FS:  00007fa3a9081700(0000) GS:ffff880b2ba00000(0000) knlGS:0000000000000000
[ 1753.914387] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 1753.914387] CR2: 0000000002fff0a8 CR3: 00000008fa08d000 CR4: 00000000000006a0
[ 1753.914387] Stack:
[ 1753.914387]  00007fa3a5232000 0000000048200176 00007fa3a552a000 ffff880613c6a800
[ 1753.914387]  00007fa3a552a000 00007fa3a5231000 0000000000000000 0000000000000000
[ 1753.914387]  000188090a869e38 0000000000000000 0000000000000000 ffff880613c69400
[ 1753.914387] Call Trace:
[ 1753.914387]  [<ffffffff812a0302>] do_munmap+0x1d2/0x360
[ 1753.914387]  [<ffffffff844a42e6>] ? down_write+0xa6/0xc0
[ 1753.914387]  [<ffffffff812a04d6>] ? vm_munmap+0x46/0x80
[ 1753.914387]  [<ffffffff812a04e4>] vm_munmap+0x54/0x80
[ 1753.914387]  [<ffffffff812a053c>] SyS_munmap+0x2c/0x40
[ 1753.914387]  [<ffffffff844b04d0>] tracesys+0xdd/0xe2
[ 1753.914387] Code: 85 48 89 df e8 98 d0 fc ff 66 f7 03 00 c0 74 1b 48 8b 03 31 f6 f6 c4 40 74 03 8b 73 68 48 c7 c7 58 7d 6e 85 31 c0 e8 52 1f 20 03 <0f> 0b 0f 1f 40 00 eb fe 66 0f 1f 44 00 00 48 8b 03 66 85 c0 79
[ 1753.914387] RIP  [<ffffffff8129ca7a>] munlock_vma_pages_range+0x12a/0x340
[ 1753.914387]  RSP <ffff88090a869dd8>


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2014-03-17 22:58                                             ` Sasha Levin
@ 2014-03-17 23:30                                               ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-17 23:30 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 17.3.2014 23:58, Sasha Levin wrote:
> On 03/17/2014 06:20 PM, Vlastimil Babka wrote:
>> On 17.3.2014 22:08, Sasha Levin wrote:
>>> On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
>>>> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>>>>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>>>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page 
>>>>>>> is encountered
>>>>>>>
>>>>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of 
>>>>>>> THP pages")
>>>>>>> munlock skips tail pages of a munlocked THP page. However, when 
>>>>>>> the head page
>>>>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>>>>
>>>>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>>>>> munlock+putback using pagevec") has added a PageTransHuge() 
>>>>>>> check which
>>>>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this 
>>>>>>> triggered using
>>>>>>> trinity, on the first tail page of a THP page without 
>>>>>>> PageMlocked flag.
>>>>>>>
>>>>>>> This patch fixes the issue by skipping tail pages also in the 
>>>>>>> case when
>>>>>>> PageMlocked flag is unset. There is still a possibility of race 
>>>>>>> with THP page
>>>>>>> split between clearing PageMlocked and determining how many 
>>>>>>> pages to skip.
>>>>>>> The race might result in former tail pages not being skipped, 
>>>>>>> which is however
>>>>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>>>>
>>>>>>> However this race also affects correctness of NR_MLOCK 
>>>>>>> accounting, which is to
>>>>>>> be fixed in a separate patch.
>>>>>>
>>>>>> I've hit the same thing again, on the latest -next, this time 
>>>>>> with a different trace:
>>>>>>
>>>>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 
>>>>>> mapping:          (null) index:0x0
>>>>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>>>>> [  539.201167] ------------[ cut here ]------------
>>>>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>>>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>>> [  539.204588] Dumping ftrace buffer:
>>>>>> [  539.206415]    (ftrace buffer empty)
>>>>>> [  539.207022] Modules linked in:
>>>>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: 
>>>>>> G        W 3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>>>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 
>>>>>> task.ti: ffff8805a44c2000
>>>>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 
>>>>>> (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>>>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 
>>>>>> 0000000000000099
>>>>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 
>>>>>> 0000000004c926a0
>>>>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 
>>>>>> 0000000000000001
>>>>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: 
>>>>>> ffffea0013249a80
>>>>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: 
>>>>>> ffff8805a44c3e94
>>>>>> [  539.210263] FS:  00007fd6ce14a700(0000) 
>>>>>> GS:ffff88042b800000(0000) knlGS:0000000000000000
>>>>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 
>>>>>> 00000000000006a0
>>>>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 
>>>>>> 0000000000000000
>>>>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 
>>>>>> 0000000000000600
>>>>>> [  539.210263] Stack:
>>>>>> [  539.210263]  0000000000000000 0000000000000000 
>>>>>> 00018805a44c3e38 0000000000000000
>>>>>> [  539.210263]  0000000000000000 ffff88039dc95a00 
>>>>>> 00000000a44c3e88 0000000000000000
>>>>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 
>>>>>> ffff8805a44c3eb8 ffff88039dc95a00
>>>>>> [  539.210263] Call Trace:
>>>>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 
>>>>>> mm/mmap.c:2547)
>>>>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 
>>>>>> 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 
>>>>>> e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 
>>>>>> 04 24 f6 c4 40 74
>>>>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 
>>>>>> (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>>>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Sasha
>>>>>
>>>>> And another related trace:
>>>>>
>>>>> [  741.192502] kernel BUG at mm/mlock.c:528!
>>>>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>> [  741.194177] Dumping ftrace buffer:
>>>>> [  741.194645]    (ftrace buffer empty)
>>>>> [  741.195109] Modules linked in:
>>>>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: 
>>>>> G        W 3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>>>>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 
>>>>> task.ti: ffff8805decb8000
>>>>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 
>>>>> (mm/mlock.c:528)
>>>>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>>>>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 
>>>>> 0000000000000000
>>>>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: 
>>>>> ffffffff84490705
>>>>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 
>>>>> 0000000000000000
>>>>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: 
>>>>> fffffffffffffff2
>>>>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: 
>>>>> ffff8805decb9e94
>>>>> [  741.200085] FS:  00007f4bec6bc700(0000) 
>>>>> GS:ffff88082ba00000(0000) knlGS:0000000000000000
>>>>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 
>>>>> 00000000000006a0
>>>>> [  741.200085] Stack:
>>>>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 
>>>>> 0000000000000000
>>>>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 
>>>>> 0000000000000000
>>>>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 
>>>>> ffff880221044e00
>>>>> [  741.200085] Call Trace:
>>>>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 
>>>>> mm/mmap.c:2547)
>>>>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff 
>>>>> ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 
>>>>> ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 
>>>>> 44 00 00 ff c0 48
>>>>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 
>>>>> (mm/mlock.c:528)
>>>>> [  741.200085]  RSP <ffff8805decb9e08>
>>>>
>>>> Sigh, again? I really wonder what is it this time :)
>>>> Please try this debug patch, hopefully we learn something:
>>>>
>>>> diff --git a/mm/mlock.c b/mm/mlock.c
>>>> index 4e1a6816..7094bac 100644
>>>> --- a/mm/mlock.c
>>>> +++ b/mm/mlock.c
>>>> @@ -469,12 +469,14 @@ static unsigned long 
>>>> __munlock_pagevec_fill(struct pagevec *pvec,
>>>>   void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>>                    unsigned long start, unsigned long end)
>>>>   {
>>>> +    unsigned long orig_start = start;
>>>> +    unsigned long page_increm = 0;
>>>> +
>>>>       vma->vm_flags &= ~VM_LOCKED;
>>>>
>>>>       while (start < end) {
>>>>           struct page *page = NULL;
>>>>           unsigned int page_mask;
>>>> -        unsigned long page_increm;
>>>>           struct pagevec pvec;
>>>>           struct zone *zone;
>>>>           int zoneid;
>>>> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct 
>>>> vm_area_struct *vma,
>>>>                   &page_mask);
>>>>
>>>>           if (page && !IS_ERR(page)) {
>>>> +            if (PageTail(page)) {
>>>> +                struct page *first_page;
>>>> +                dump_page(page, "Unexpected PageTail");
>>>> +                printk("start=%lu pfn=%lu orig_start=%lu "
>>>> +                       "page_increm=%lu "
>>>> +                       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
>>>> +                    start, page_to_pfn(page), orig_start,
>>>> +                    page_increm,
>>>> +                    vma->vm_start, vma->vm_end,
>>>> +                    vma->vm_flags);
>>>> +                first_page = page->first_page;
>>>> +                printk("first_page pfn=%lu\n",
>>>> +                        page_to_pfn(first_page));
>>>> +                dump_page(first_page, "first_page of unexpected 
>>>> PageTail page");
>>>> +                if (PageCompound(first_page))
>>>> +                    printk("first_page is compound with 
>>>> order=%d\n", compound_order(first_page));
>>>> +                VM_BUG_ON(true);
>>>> +            }
>>>>               if (PageTransHuge(page)) {
>>>>                   lock_page(page);
>>>>                   /*
>>>> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct 
>>>> vm_area_struct *vma,
>>>>               }
>>>>           }
>>>>           /* It's a bug to munlock in the middle of a THP page */
>>>> -        VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
>>>> +        if ((start >> PAGE_SHIFT) & page_mask) {
>>>> +            dump_page(page, "unexpected middle of THP page");
>>>> +            printk("start=%lu pfn=%lu orig_start=%lu "
>>>
>>> In this scenario page might be error or NULL, no?
>>>
>>
>> Hm I doubt page_mask would be nonzero in such case, but who knows 
>> what weirdness causes this...
>> Feel free to move the dump_page() below printk() so we still get 
>> useful info before it crashes on
>> dump_page() in such situation.
>
> It happened once, so I moved it, but in the meanwhile I got something 
> useful:
>
> [ 1753.907376] page:ffffea0017130c40 count:0 mapcount:1 
> mapping:          (null) index:0x2
> [ 1753.908327] page flags: 0x16fffff80008000(tail)
> [ 1753.908973] page dumped because: Unexpected PageTail
> [ 1753.909595] start=140340826935296 pfn=6048817 
> orig_start=140340826935296 page_increm=0 vm_start=140340826935296 
> vm_end=140340826939392 vm_flags=1210057078

Uh so that looks like the vma starts in the middle of a THP page. That 
doesn't look right...
In the first instance of this bug I thought of this but it didn't seem 
possible. Something must have changed.
I can take closer look tomorrow.

> [ 1753.911220] first_page pfn=6048768
> [ 1753.911692] page:ffffea0017130000 count:2 mapcount:1 
> mapping:ffff880612b41f01 index:0x7fa3a5200
> [ 1753.912733] page flags: 
> 0x16fffff80384028(uptodate|lru|head|swapbacked|unevictable|mlocked)
> [ 1753.913464] page dumped because: first_page of unexpected PageTail 
> page
> [ 1753.914387] pc:ffff88062adcc000 pc->flags:2 
> pc->mem_cgroup:ffff88012b474520
> [ 1753.914387] first_page is compound with order=9
> [ 1753.914387] ------------[ cut here ]------------
> [ 1753.914387] kernel BUG at mm/mlock.c:512!
> [ 1753.914387] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [ 1753.914387] Dumping ftrace buffer:
> [ 1753.914387]    (ftrace buffer empty)
> [ 1753.914387] Modules linked in:
> [ 1753.914387] CPU: 26 PID: 36822 Comm: trinity-c337 Tainted: G        
> W     3.14.0-rc6-next-20140317-sasha-00012-ge933921-dirty #226
> [ 1753.914387] task: ffff88090cdeb000 ti: ffff88090a868000 task.ti: 
> ffff88090a868000
> [ 1753.914387] RIP: 0010:[<ffffffff8129ca7a>] [<ffffffff8129ca7a>] 
> munlock_vma_pages_range+0x12a/0x340
> [ 1753.914387] RSP: 0018:ffff88090a869dd8  EFLAGS: 00010292
> [ 1753.914387] RAX: 0000000000000023 RBX: ffffea0017130000 RCX: 
> 0000000000000006
> [ 1753.914387] RDX: 0000000000000006 RSI: ffff88090cdebcf0 RDI: 
> 0000000000000282
> [ 1753.914387] RBP: ffff88090a869ec8 R08: 0000000000000001 R09: 
> 0000000000000001
> [ 1753.914387] R10: 0000000000000001 R11: 0000000000000001 R12: 
> 00007fa3a5231000
> [ 1753.914387] R13: ffff880613c69400 R14: 0000160000000000 R15: 
> 0000000000000000
> [ 1753.914387] FS:  00007fa3a9081700(0000) GS:ffff880b2ba00000(0000) 
> knlGS:0000000000000000
> [ 1753.914387] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [ 1753.914387] CR2: 0000000002fff0a8 CR3: 00000008fa08d000 CR4: 
> 00000000000006a0
> [ 1753.914387] Stack:
> [ 1753.914387]  00007fa3a5232000 0000000048200176 00007fa3a552a000 
> ffff880613c6a800
> [ 1753.914387]  00007fa3a552a000 00007fa3a5231000 0000000000000000 
> 0000000000000000
> [ 1753.914387]  000188090a869e38 0000000000000000 0000000000000000 
> ffff880613c69400
> [ 1753.914387] Call Trace:
> [ 1753.914387]  [<ffffffff812a0302>] do_munmap+0x1d2/0x360
> [ 1753.914387]  [<ffffffff844a42e6>] ? down_write+0xa6/0xc0
> [ 1753.914387]  [<ffffffff812a04d6>] ? vm_munmap+0x46/0x80
> [ 1753.914387]  [<ffffffff812a04e4>] vm_munmap+0x54/0x80
> [ 1753.914387]  [<ffffffff812a053c>] SyS_munmap+0x2c/0x40
> [ 1753.914387]  [<ffffffff844b04d0>] tracesys+0xdd/0xe2
> [ 1753.914387] Code: 85 48 89 df e8 98 d0 fc ff 66 f7 03 00 c0 74 1b 
> 48 8b 03 31 f6 f6 c4 40 74 03 8b 73 68 48 c7 c7 58 7d 6e 85 31 c0 e8 
> 52 1f 20 03 <0f> 0b 0f 1f 40 00 eb fe 66 0f 1f 44 00 00 48 8b 03 66 85 
> c0 79
> [ 1753.914387] RIP  [<ffffffff8129ca7a>] 
> munlock_vma_pages_range+0x12a/0x340
> [ 1753.914387]  RSP <ffff88090a869dd8>
>
>
> Thanks,
> Sasha


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2014-03-17 23:30                                               ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-17 23:30 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 17.3.2014 23:58, Sasha Levin wrote:
> On 03/17/2014 06:20 PM, Vlastimil Babka wrote:
>> On 17.3.2014 22:08, Sasha Levin wrote:
>>> On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
>>>> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>>>>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>>>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page 
>>>>>>> is encountered
>>>>>>>
>>>>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of 
>>>>>>> THP pages")
>>>>>>> munlock skips tail pages of a munlocked THP page. However, when 
>>>>>>> the head page
>>>>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>>>>
>>>>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>>>>> munlock+putback using pagevec") has added a PageTransHuge() 
>>>>>>> check which
>>>>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this 
>>>>>>> triggered using
>>>>>>> trinity, on the first tail page of a THP page without 
>>>>>>> PageMlocked flag.
>>>>>>>
>>>>>>> This patch fixes the issue by skipping tail pages also in the 
>>>>>>> case when
>>>>>>> PageMlocked flag is unset. There is still a possibility of race 
>>>>>>> with THP page
>>>>>>> split between clearing PageMlocked and determining how many 
>>>>>>> pages to skip.
>>>>>>> The race might result in former tail pages not being skipped, 
>>>>>>> which is however
>>>>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>>>>
>>>>>>> However this race also affects correctness of NR_MLOCK 
>>>>>>> accounting, which is to
>>>>>>> be fixed in a separate patch.
>>>>>>
>>>>>> I've hit the same thing again, on the latest -next, this time 
>>>>>> with a different trace:
>>>>>>
>>>>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 
>>>>>> mapping:          (null) index:0x0
>>>>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>>>>> [  539.201167] ------------[ cut here ]------------
>>>>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>>>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>>> [  539.204588] Dumping ftrace buffer:
>>>>>> [  539.206415]    (ftrace buffer empty)
>>>>>> [  539.207022] Modules linked in:
>>>>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: 
>>>>>> G        W 3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>>>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 
>>>>>> task.ti: ffff8805a44c2000
>>>>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 
>>>>>> (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>>>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 
>>>>>> 0000000000000099
>>>>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 
>>>>>> 0000000004c926a0
>>>>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 
>>>>>> 0000000000000001
>>>>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: 
>>>>>> ffffea0013249a80
>>>>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: 
>>>>>> ffff8805a44c3e94
>>>>>> [  539.210263] FS:  00007fd6ce14a700(0000) 
>>>>>> GS:ffff88042b800000(0000) knlGS:0000000000000000
>>>>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 
>>>>>> 00000000000006a0
>>>>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 
>>>>>> 0000000000000000
>>>>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 
>>>>>> 0000000000000600
>>>>>> [  539.210263] Stack:
>>>>>> [  539.210263]  0000000000000000 0000000000000000 
>>>>>> 00018805a44c3e38 0000000000000000
>>>>>> [  539.210263]  0000000000000000 ffff88039dc95a00 
>>>>>> 00000000a44c3e88 0000000000000000
>>>>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 
>>>>>> ffff8805a44c3eb8 ffff88039dc95a00
>>>>>> [  539.210263] Call Trace:
>>>>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 
>>>>>> mm/mmap.c:2547)
>>>>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 
>>>>>> 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 
>>>>>> e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 
>>>>>> 04 24 f6 c4 40 74
>>>>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 
>>>>>> (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>>>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Sasha
>>>>>
>>>>> And another related trace:
>>>>>
>>>>> [  741.192502] kernel BUG at mm/mlock.c:528!
>>>>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>> [  741.194177] Dumping ftrace buffer:
>>>>> [  741.194645]    (ftrace buffer empty)
>>>>> [  741.195109] Modules linked in:
>>>>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: 
>>>>> G        W 3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>>>>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 
>>>>> task.ti: ffff8805decb8000
>>>>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 
>>>>> (mm/mlock.c:528)
>>>>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>>>>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 
>>>>> 0000000000000000
>>>>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: 
>>>>> ffffffff84490705
>>>>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 
>>>>> 0000000000000000
>>>>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: 
>>>>> fffffffffffffff2
>>>>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: 
>>>>> ffff8805decb9e94
>>>>> [  741.200085] FS:  00007f4bec6bc700(0000) 
>>>>> GS:ffff88082ba00000(0000) knlGS:0000000000000000
>>>>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 
>>>>> 00000000000006a0
>>>>> [  741.200085] Stack:
>>>>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 
>>>>> 0000000000000000
>>>>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 
>>>>> 0000000000000000
>>>>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 
>>>>> ffff880221044e00
>>>>> [  741.200085] Call Trace:
>>>>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 
>>>>> mm/mmap.c:2547)
>>>>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff 
>>>>> ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 
>>>>> ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 
>>>>> 44 00 00 ff c0 48
>>>>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 
>>>>> (mm/mlock.c:528)
>>>>> [  741.200085]  RSP <ffff8805decb9e08>
>>>>
>>>> Sigh, again? I really wonder what is it this time :)
>>>> Please try this debug patch, hopefully we learn something:
>>>>
>>>> diff --git a/mm/mlock.c b/mm/mlock.c
>>>> index 4e1a6816..7094bac 100644
>>>> --- a/mm/mlock.c
>>>> +++ b/mm/mlock.c
>>>> @@ -469,12 +469,14 @@ static unsigned long 
>>>> __munlock_pagevec_fill(struct pagevec *pvec,
>>>>   void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>>                    unsigned long start, unsigned long end)
>>>>   {
>>>> +    unsigned long orig_start = start;
>>>> +    unsigned long page_increm = 0;
>>>> +
>>>>       vma->vm_flags &= ~VM_LOCKED;
>>>>
>>>>       while (start < end) {
>>>>           struct page *page = NULL;
>>>>           unsigned int page_mask;
>>>> -        unsigned long page_increm;
>>>>           struct pagevec pvec;
>>>>           struct zone *zone;
>>>>           int zoneid;
>>>> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct 
>>>> vm_area_struct *vma,
>>>>                   &page_mask);
>>>>
>>>>           if (page && !IS_ERR(page)) {
>>>> +            if (PageTail(page)) {
>>>> +                struct page *first_page;
>>>> +                dump_page(page, "Unexpected PageTail");
>>>> +                printk("start=%lu pfn=%lu orig_start=%lu "
>>>> +                       "page_increm=%lu "
>>>> +                       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
>>>> +                    start, page_to_pfn(page), orig_start,
>>>> +                    page_increm,
>>>> +                    vma->vm_start, vma->vm_end,
>>>> +                    vma->vm_flags);
>>>> +                first_page = page->first_page;
>>>> +                printk("first_page pfn=%lu\n",
>>>> +                        page_to_pfn(first_page));
>>>> +                dump_page(first_page, "first_page of unexpected 
>>>> PageTail page");
>>>> +                if (PageCompound(first_page))
>>>> +                    printk("first_page is compound with 
>>>> order=%d\n", compound_order(first_page));
>>>> +                VM_BUG_ON(true);
>>>> +            }
>>>>               if (PageTransHuge(page)) {
>>>>                   lock_page(page);
>>>>                   /*
>>>> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct 
>>>> vm_area_struct *vma,
>>>>               }
>>>>           }
>>>>           /* It's a bug to munlock in the middle of a THP page */
>>>> -        VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
>>>> +        if ((start >> PAGE_SHIFT) & page_mask) {
>>>> +            dump_page(page, "unexpected middle of THP page");
>>>> +            printk("start=%lu pfn=%lu orig_start=%lu "
>>>
>>> In this scenario page might be error or NULL, no?
>>>
>>
>> Hm I doubt page_mask would be nonzero in such case, but who knows 
>> what weirdness causes this...
>> Feel free to move the dump_page() below printk() so we still get 
>> useful info before it crashes on
>> dump_page() in such situation.
>
> It happened once, so I moved it, but in the meanwhile I got something 
> useful:
>
> [ 1753.907376] page:ffffea0017130c40 count:0 mapcount:1 
> mapping:          (null) index:0x2
> [ 1753.908327] page flags: 0x16fffff80008000(tail)
> [ 1753.908973] page dumped because: Unexpected PageTail
> [ 1753.909595] start=140340826935296 pfn=6048817 
> orig_start=140340826935296 page_increm=0 vm_start=140340826935296 
> vm_end=140340826939392 vm_flags=1210057078

Uh so that looks like the vma starts in the middle of a THP page. That 
doesn't look right...
In the first instance of this bug I thought of this but it didn't seem 
possible. Something must have changed.
I can take closer look tomorrow.

> [ 1753.911220] first_page pfn=6048768
> [ 1753.911692] page:ffffea0017130000 count:2 mapcount:1 
> mapping:ffff880612b41f01 index:0x7fa3a5200
> [ 1753.912733] page flags: 
> 0x16fffff80384028(uptodate|lru|head|swapbacked|unevictable|mlocked)
> [ 1753.913464] page dumped because: first_page of unexpected PageTail 
> page
> [ 1753.914387] pc:ffff88062adcc000 pc->flags:2 
> pc->mem_cgroup:ffff88012b474520
> [ 1753.914387] first_page is compound with order=9
> [ 1753.914387] ------------[ cut here ]------------
> [ 1753.914387] kernel BUG at mm/mlock.c:512!
> [ 1753.914387] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [ 1753.914387] Dumping ftrace buffer:
> [ 1753.914387]    (ftrace buffer empty)
> [ 1753.914387] Modules linked in:
> [ 1753.914387] CPU: 26 PID: 36822 Comm: trinity-c337 Tainted: G        
> W     3.14.0-rc6-next-20140317-sasha-00012-ge933921-dirty #226
> [ 1753.914387] task: ffff88090cdeb000 ti: ffff88090a868000 task.ti: 
> ffff88090a868000
> [ 1753.914387] RIP: 0010:[<ffffffff8129ca7a>] [<ffffffff8129ca7a>] 
> munlock_vma_pages_range+0x12a/0x340
> [ 1753.914387] RSP: 0018:ffff88090a869dd8  EFLAGS: 00010292
> [ 1753.914387] RAX: 0000000000000023 RBX: ffffea0017130000 RCX: 
> 0000000000000006
> [ 1753.914387] RDX: 0000000000000006 RSI: ffff88090cdebcf0 RDI: 
> 0000000000000282
> [ 1753.914387] RBP: ffff88090a869ec8 R08: 0000000000000001 R09: 
> 0000000000000001
> [ 1753.914387] R10: 0000000000000001 R11: 0000000000000001 R12: 
> 00007fa3a5231000
> [ 1753.914387] R13: ffff880613c69400 R14: 0000160000000000 R15: 
> 0000000000000000
> [ 1753.914387] FS:  00007fa3a9081700(0000) GS:ffff880b2ba00000(0000) 
> knlGS:0000000000000000
> [ 1753.914387] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [ 1753.914387] CR2: 0000000002fff0a8 CR3: 00000008fa08d000 CR4: 
> 00000000000006a0
> [ 1753.914387] Stack:
> [ 1753.914387]  00007fa3a5232000 0000000048200176 00007fa3a552a000 
> ffff880613c6a800
> [ 1753.914387]  00007fa3a552a000 00007fa3a5231000 0000000000000000 
> 0000000000000000
> [ 1753.914387]  000188090a869e38 0000000000000000 0000000000000000 
> ffff880613c69400
> [ 1753.914387] Call Trace:
> [ 1753.914387]  [<ffffffff812a0302>] do_munmap+0x1d2/0x360
> [ 1753.914387]  [<ffffffff844a42e6>] ? down_write+0xa6/0xc0
> [ 1753.914387]  [<ffffffff812a04d6>] ? vm_munmap+0x46/0x80
> [ 1753.914387]  [<ffffffff812a04e4>] vm_munmap+0x54/0x80
> [ 1753.914387]  [<ffffffff812a053c>] SyS_munmap+0x2c/0x40
> [ 1753.914387]  [<ffffffff844b04d0>] tracesys+0xdd/0xe2
> [ 1753.914387] Code: 85 48 89 df e8 98 d0 fc ff 66 f7 03 00 c0 74 1b 
> 48 8b 03 31 f6 f6 c4 40 74 03 8b 73 68 48 c7 c7 58 7d 6e 85 31 c0 e8 
> 52 1f 20 03 <0f> 0b 0f 1f 40 00 eb fe 66 0f 1f 44 00 00 48 8b 03 66 85 
> c0 79
> [ 1753.914387] RIP  [<ffffffff8129ca7a>] 
> munlock_vma_pages_range+0x12a/0x340
> [ 1753.914387]  RSP <ffff88090a869dd8>
>
>
> Thanks,
> Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
  2014-03-17 22:58                                             ` Sasha Levin
@ 2014-03-18 10:41                                               ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-18 10:41 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/17/2014 11:58 PM, Sasha Levin wrote:
> On 03/17/2014 06:20 PM, Vlastimil Babka wrote:
>> On 17.3.2014 22:08, Sasha Levin wrote:
>>> On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
>>>> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>>>>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>>>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>>>>>>
>>>>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>>>>>>> munlock skips tail pages of a munlocked THP page. However, when the head page
>>>>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>>>>
>>>>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>>>>> munlock+putback using pagevec") has added a PageTransHuge() check which
>>>>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>>>>>>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>>>>>>
>>>>>>> This patch fixes the issue by skipping tail pages also in the case when
>>>>>>> PageMlocked flag is unset. There is still a possibility of race with THP page
>>>>>>> split between clearing PageMlocked and determining how many pages to skip.
>>>>>>> The race might result in former tail pages not being skipped, which is however
>>>>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>>>>
>>>>>>> However this race also affects correctness of NR_MLOCK accounting, which is to
>>>>>>> be fixed in a separate patch.
>>>>>>
>>>>>> I've hit the same thing again, on the latest -next, this time with a different trace:
>>>>>>
>>>>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
>>>>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>>>>> [  539.201167] ------------[ cut here ]------------
>>>>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>>>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>>> [  539.204588] Dumping ftrace buffer:
>>>>>> [  539.206415]    (ftrace buffer empty)
>>>>>> [  539.207022] Modules linked in:
>>>>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W 3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>>>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
>>>>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>>>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
>>>>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
>>>>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
>>>>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
>>>>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
>>>>>> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
>>>>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
>>>>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
>>>>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
>>>>>> [  539.210263] Stack:
>>>>>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
>>>>>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
>>>>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
>>>>>> [  539.210263] Call Trace:
>>>>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>>>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
>>>>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>>>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Sasha
>>>>>
>>>>> And another related trace:
>>>>>
>>>>> [  741.192502] kernel BUG at mm/mlock.c:528!
>>>>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>> [  741.194177] Dumping ftrace buffer:
>>>>> [  741.194645]    (ftrace buffer empty)
>>>>> [  741.195109] Modules linked in:
>>>>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>>>>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
>>>>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>>>>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>>>>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
>>>>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
>>>>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
>>>>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
>>>>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
>>>>> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
>>>>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
>>>>> [  741.200085] Stack:
>>>>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
>>>>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
>>>>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
>>>>> [  741.200085] Call Trace:
>>>>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>>>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
>>>>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>>>>> [  741.200085]  RSP <ffff8805decb9e08>
>>>>
>>>> Sigh, again? I really wonder what is it this time :)
>>>> Please try this debug patch, hopefully we learn something:
>>>>
>>>> diff --git a/mm/mlock.c b/mm/mlock.c
>>>> index 4e1a6816..7094bac 100644
>>>> --- a/mm/mlock.c
>>>> +++ b/mm/mlock.c
>>>> @@ -469,12 +469,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
>>>>    void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>>                     unsigned long start, unsigned long end)
>>>>    {
>>>> +    unsigned long orig_start = start;
>>>> +    unsigned long page_increm = 0;
>>>> +
>>>>        vma->vm_flags &= ~VM_LOCKED;
>>>>
>>>>        while (start < end) {
>>>>            struct page *page = NULL;
>>>>            unsigned int page_mask;
>>>> -        unsigned long page_increm;
>>>>            struct pagevec pvec;
>>>>            struct zone *zone;
>>>>            int zoneid;
>>>> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>>                    &page_mask);
>>>>
>>>>            if (page && !IS_ERR(page)) {
>>>> +            if (PageTail(page)) {
>>>> +                struct page *first_page;
>>>> +                dump_page(page, "Unexpected PageTail");
>>>> +                printk("start=%lu pfn=%lu orig_start=%lu "
>>>> +                       "page_increm=%lu "
>>>> +                       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
>>>> +                    start, page_to_pfn(page), orig_start,
>>>> +                    page_increm,
>>>> +                    vma->vm_start, vma->vm_end,
>>>> +                    vma->vm_flags);
>>>> +                first_page = page->first_page;
>>>> +                printk("first_page pfn=%lu\n",
>>>> +                        page_to_pfn(first_page));
>>>> +                dump_page(first_page, "first_page of unexpected PageTail page");
>>>> +                if (PageCompound(first_page))
>>>> +                    printk("first_page is compound with order=%d\n", compound_order(first_page));
>>>> +                VM_BUG_ON(true);
>>>> +            }
>>>>                if (PageTransHuge(page)) {
>>>>                    lock_page(page);
>>>>                    /*
>>>> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>>                }
>>>>            }
>>>>            /* It's a bug to munlock in the middle of a THP page */
>>>> -        VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
>>>> +        if ((start >> PAGE_SHIFT) & page_mask) {
>>>> +            dump_page(page, "unexpected middle of THP page");
>>>> +            printk("start=%lu pfn=%lu orig_start=%lu "
>>>
>>> In this scenario page might be error or NULL, no?
>>>
>>
>> Hm I doubt page_mask would be nonzero in such case, but who knows what weirdness causes this...
>> Feel free to move the dump_page() below printk() so we still get useful info before it crashes on
>> dump_page() in such situation.
>
> It happened once, so I moved it, but in the meanwhile I got something useful:
>
> [ 1753.907376] page:ffffea0017130c40 count:0 mapcount:1 mapping:          (null) index:0x2
> [ 1753.908327] page flags: 0x16fffff80008000(tail)
> [ 1753.908973] page dumped because: Unexpected PageTail
> [ 1753.909595] start=140340826935296 pfn=6048817 orig_start=140340826935296 page_increm=0 vm_start=140340826935296 vm_end=140340826939392 vm_flags=1210057078

A VMA spanning a single page (4096 bytes), which appears to be part of 
THP page (and also is not aligned to its beginning).
The VMA flags are: VM_WRITE,VM_EXEC,VM_MAYREAD,VM_MAYWRITE,VM_MAYEXEC
- where's VM_READ, while there's VM_EXEC?
more interesting: VM_GROWSDOWN,VM_NORESERVE,VM_SOFTDIRTY,VM_NOHUGEPAGE

Seems to me it's not possible to allocate a vma with such combination of 
flags, especially the VM_GROWSDOWN seems to be stack-only. So it's 
possible that the vma is corrupted. Could it be related to the vma caching?

> [ 1753.911220] first_page pfn=6048768
> [ 1753.911692] page:ffffea0017130000 count:2 mapcount:1 mapping:ffff880612b41f01 index:0x7fa3a5200
> [ 1753.912733] page flags: 0x16fffff80384028(uptodate|lru|head|swapbacked|unevictable|mlocked)
> [ 1753.913464] page dumped because: first_page of unexpected PageTail page
> [ 1753.914387] pc:ffff88062adcc000 pc->flags:2 pc->mem_cgroup:ffff88012b474520
> [ 1753.914387] first_page is compound with order=9
> [ 1753.914387] ------------[ cut here ]------------
> [ 1753.914387] kernel BUG at mm/mlock.c:512!
> [ 1753.914387] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [ 1753.914387] Dumping ftrace buffer:
> [ 1753.914387]    (ftrace buffer empty)
> [ 1753.914387] Modules linked in:
> [ 1753.914387] CPU: 26 PID: 36822 Comm: trinity-c337 Tainted: G        W     3.14.0-rc6-next-20140317-sasha-00012-ge933921-dirty #226
> [ 1753.914387] task: ffff88090cdeb000 ti: ffff88090a868000 task.ti: ffff88090a868000
> [ 1753.914387] RIP: 0010:[<ffffffff8129ca7a>]  [<ffffffff8129ca7a>] munlock_vma_pages_range+0x12a/0x340
> [ 1753.914387] RSP: 0018:ffff88090a869dd8  EFLAGS: 00010292
> [ 1753.914387] RAX: 0000000000000023 RBX: ffffea0017130000 RCX: 0000000000000006
> [ 1753.914387] RDX: 0000000000000006 RSI: ffff88090cdebcf0 RDI: 0000000000000282
> [ 1753.914387] RBP: ffff88090a869ec8 R08: 0000000000000001 R09: 0000000000000001
> [ 1753.914387] R10: 0000000000000001 R11: 0000000000000001 R12: 00007fa3a5231000
> [ 1753.914387] R13: ffff880613c69400 R14: 0000160000000000 R15: 0000000000000000
> [ 1753.914387] FS:  00007fa3a9081700(0000) GS:ffff880b2ba00000(0000) knlGS:0000000000000000
> [ 1753.914387] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [ 1753.914387] CR2: 0000000002fff0a8 CR3: 00000008fa08d000 CR4: 00000000000006a0
> [ 1753.914387] Stack:
> [ 1753.914387]  00007fa3a5232000 0000000048200176 00007fa3a552a000 ffff880613c6a800
> [ 1753.914387]  00007fa3a552a000 00007fa3a5231000 0000000000000000 0000000000000000
> [ 1753.914387]  000188090a869e38 0000000000000000 0000000000000000 ffff880613c69400
> [ 1753.914387] Call Trace:
> [ 1753.914387]  [<ffffffff812a0302>] do_munmap+0x1d2/0x360
> [ 1753.914387]  [<ffffffff844a42e6>] ? down_write+0xa6/0xc0
> [ 1753.914387]  [<ffffffff812a04d6>] ? vm_munmap+0x46/0x80
> [ 1753.914387]  [<ffffffff812a04e4>] vm_munmap+0x54/0x80
> [ 1753.914387]  [<ffffffff812a053c>] SyS_munmap+0x2c/0x40
> [ 1753.914387]  [<ffffffff844b04d0>] tracesys+0xdd/0xe2
> [ 1753.914387] Code: 85 48 89 df e8 98 d0 fc ff 66 f7 03 00 c0 74 1b 48 8b 03 31 f6 f6 c4 40 74 03 8b 73 68 48 c7 c7 58 7d 6e 85 31 c0 e8 52 1f 20 03 <0f> 0b 0f 1f 40 00 eb fe 66 0f 1f 44 00 00 48 8b 03 66 85 c0 79
> [ 1753.914387] RIP  [<ffffffff8129ca7a>] munlock_vma_pages_range+0x12a/0x340
> [ 1753.914387]  RSP <ffff88090a869dd8>
>
>
> Thanks,
> Sasha
>


^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
@ 2014-03-18 10:41                                               ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-18 10:41 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, linux-mm, linux-kernel, Mel Gorman, Rik van Riel,
	joern, Michel Lespinasse

On 03/17/2014 11:58 PM, Sasha Levin wrote:
> On 03/17/2014 06:20 PM, Vlastimil Babka wrote:
>> On 17.3.2014 22:08, Sasha Levin wrote:
>>> On 03/17/2014 08:38 AM, Vlastimil Babka wrote:
>>>> On 03/15/2014 04:06 AM, Sasha Levin wrote:
>>>>> On 03/14/2014 07:55 PM, Sasha Levin wrote:
>>>>>> On 12/17/2013 08:00 AM, Vlastimil Babka wrote:
>>>>>>> From: Vlastimil Babka<vbabka@suse.cz>
>>>>>>> Date: Fri, 13 Dec 2013 14:25:21 +0100
>>>>>>> Subject: [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered
>>>>>>>
>>>>>>> Since commit ff6a6da60 ("mm: accelerate munlock() treatment of THP pages")
>>>>>>> munlock skips tail pages of a munlocked THP page. However, when the head page
>>>>>>> already has PageMlocked unset, it will not skip the tail pages.
>>>>>>>
>>>>>>> Commit 7225522bb ("mm: munlock: batch non-THP page isolation and
>>>>>>> munlock+putback using pagevec") has added a PageTransHuge() check which
>>>>>>> contains VM_BUG_ON(PageTail(page)). Sasha Levin found this triggered using
>>>>>>> trinity, on the first tail page of a THP page without PageMlocked flag.
>>>>>>>
>>>>>>> This patch fixes the issue by skipping tail pages also in the case when
>>>>>>> PageMlocked flag is unset. There is still a possibility of race with THP page
>>>>>>> split between clearing PageMlocked and determining how many pages to skip.
>>>>>>> The race might result in former tail pages not being skipped, which is however
>>>>>>> no longer a bug, as during the skip the PageTail flags are cleared.
>>>>>>>
>>>>>>> However this race also affects correctness of NR_MLOCK accounting, which is to
>>>>>>> be fixed in a separate patch.
>>>>>>
>>>>>> I've hit the same thing again, on the latest -next, this time with a different trace:
>>>>>>
>>>>>> [  539.199120] page:ffffea0013249a80 count:0 mapcount:1 mapping:          (null) index:0x0
>>>>>> [  539.200429] page flags: 0x12fffff80008000(tail)
>>>>>> [  539.201167] ------------[ cut here ]------------
>>>>>> [  539.201889] kernel BUG at include/linux/page-flags.h:415!
>>>>>> [  539.202859] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>>> [  539.204588] Dumping ftrace buffer:
>>>>>> [  539.206415]    (ftrace buffer empty)
>>>>>> [  539.207022] Modules linked in:
>>>>>> [  539.207503] CPU: 3 PID: 18262 Comm: trinity-c228 Tainted: G        W 3.14.0-rc6-next-20140313-sasha-00010-gb8c1db1-dirty #217
>>>>>> [  539.209012] task: ffff880627b10000 ti: ffff8805a44c2000 task.ti: ffff8805a44c2000
>>>>>> [  539.209989] RIP:  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>>> [  539.210263] RSP: 0000:ffff8805a44c3e08  EFLAGS: 00010246
>>>>>> [  539.210263] RAX: ffff88052ae126a0 RBX: 000000000006a000 RCX: 0000000000000099
>>>>>> [  539.210263] RDX: 0000000000000000 RSI: ffff880627b10cf0 RDI: 0000000004c926a0
>>>>>> [  539.210263] RBP: ffff8805a44c3ec8 R08: 0000000000000001 R09: 0000000000000001
>>>>>> [  539.210263] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013249a80
>>>>>> [  539.210263] R13: ffff88039dc95a00 R14: 000000000006b000 R15: ffff8805a44c3e94
>>>>>> [  539.210263] FS:  00007fd6ce14a700(0000) GS:ffff88042b800000(0000) knlGS:0000000000000000
>>>>>> [  539.210263] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>>> [  539.210263] CR2: 00007fd6ce0ef6ac CR3: 00000006025cd000 CR4: 00000000000006a0
>>>>>> [  539.210263] DR0: 0000000000698000 DR1: 0000000000000000 DR2: 0000000000000000
>>>>>> [  539.210263] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
>>>>>> [  539.210263] Stack:
>>>>>> [  539.210263]  0000000000000000 0000000000000000 00018805a44c3e38 0000000000000000
>>>>>> [  539.210263]  0000000000000000 ffff88039dc95a00 00000000a44c3e88 0000000000000000
>>>>>> [  539.210263]  00ff8805a44c3e58 ffff880528f0a0f0 ffff8805a44c3eb8 ffff88039dc95a00
>>>>>> [  539.210263] Call Trace:
>>>>>> [  539.210263]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>>>>> [  539.210263]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>>> [  539.210263]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>>> [  539.210263]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>>> [  539.210263]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>>> [  539.210263]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>>> [  539.210263] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 4d d2 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
>>>>>> [  539.210263] RIP  munlock_vma_pages_range+0x93/0x1d0 (include/linux/page-flags.h:415 mm/mlock.c:494)
>>>>>> [  539.210263]  RSP <ffff8805a44c3e08>
>>>>>> [  539.236666] ---[ end trace 4e90dc9141579181 ]---
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Sasha
>>>>>
>>>>> And another related trace:
>>>>>
>>>>> [  741.192502] kernel BUG at mm/mlock.c:528!
>>>>> [  741.193088] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
>>>>> [  741.194177] Dumping ftrace buffer:
>>>>> [  741.194645]    (ftrace buffer empty)
>>>>> [  741.195109] Modules linked in:
>>>>> [  741.195728] CPU: 23 PID: 19908 Comm: trinity-c264 Tainted: G        W     3.14.0-rc6-next-20140314-sasha-00012-g5590866 #219
>>>>> [  741.197549] task: ffff88061fc2b000 ti: ffff8805decb8000 task.ti: ffff8805decb8000
>>>>> [  741.198548] RIP:  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>>>>> [  741.199754] RSP: 0018:ffff8805decb9e08  EFLAGS: 00010206
>>>>> [  741.200085] RAX: 00000000000001ff RBX: 0000000000111000 RCX: 0000000000000000
>>>>> [  741.200085] RDX: 0000000000000111 RSI: ffffffff81295fdd RDI: ffffffff84490705
>>>>> [  741.200085] RBP: ffff8805decb9ec8 R08: 0000000000000000 R09: 0000000000000000
>>>>> [  741.200085] R10: 0000000000000001 R11: 0000000000000000 R12: fffffffffffffff2
>>>>> [  741.200085] R13: ffff880221044e00 R14: 0000000000112000 R15: ffff8805decb9e94
>>>>> [  741.200085] FS:  00007f4bec6bc700(0000) GS:ffff88082ba00000(0000) knlGS:0000000000000000
>>>>> [  741.200085] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>>>>> [  741.200085] CR2: 0000000003109a98 CR3: 00000005decaf000 CR4: 00000000000006a0
>>>>> [  741.200085] Stack:
>>>>> [  741.200085]  0000000000000000 0000000000000000 00018805decb9e38 0000000000000000
>>>>> [  741.200085]  0000000000000000 ffff880221044e00 00000000decb9e88 0000000000000000
>>>>> [  741.200085]  00ff8805decb9e58 ffff880ff376f450 ffff8805decb9eb8 ffff880221044e00
>>>>> [  741.200085] Call Trace:
>>>>> [  741.200085]  do_munmap+0x1d2/0x360 (mm/internal.h:168 mm/mmap.c:2547)
>>>>> [  741.200085]  ? down_write+0xa6/0xc0 (kernel/locking/rwsem.c:51)
>>>>> [  741.200085]  ? vm_munmap+0x46/0x80 (mm/mmap.c:2571)
>>>>> [  741.200085]  vm_munmap+0x54/0x80 (mm/mmap.c:2572)
>>>>> [  741.200085]  SyS_munmap+0x2c/0x40 (mm/mmap.c:2577)
>>>>> [  741.200085]  tracesys+0xdd/0xe2 (arch/x86/kernel/entry_64.S:749)
>>>>> [  741.200085] Code: fd ff ff 4c 89 e6 48 89 c3 48 8d bd 40 ff ff ff e8 80 fa ff ff eb 2f 66 0f 1f 44 00 00 8b 45 cc 48 89 da 48 c1 ea 0c 85 d0 74 12 <0f> 0b 0f 1f 84 00 00 00 00 00 eb fe 66 0f 1f 44 00 00 ff c0 48
>>>>> [  741.200085] RIP  munlock_vma_pages_range+0x176/0x1d0 (mm/mlock.c:528)
>>>>> [  741.200085]  RSP <ffff8805decb9e08>
>>>>
>>>> Sigh, again? I really wonder what is it this time :)
>>>> Please try this debug patch, hopefully we learn something:
>>>>
>>>> diff --git a/mm/mlock.c b/mm/mlock.c
>>>> index 4e1a6816..7094bac 100644
>>>> --- a/mm/mlock.c
>>>> +++ b/mm/mlock.c
>>>> @@ -469,12 +469,14 @@ static unsigned long __munlock_pagevec_fill(struct pagevec *pvec,
>>>>    void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>>                     unsigned long start, unsigned long end)
>>>>    {
>>>> +    unsigned long orig_start = start;
>>>> +    unsigned long page_increm = 0;
>>>> +
>>>>        vma->vm_flags &= ~VM_LOCKED;
>>>>
>>>>        while (start < end) {
>>>>            struct page *page = NULL;
>>>>            unsigned int page_mask;
>>>> -        unsigned long page_increm;
>>>>            struct pagevec pvec;
>>>>            struct zone *zone;
>>>>            int zoneid;
>>>> @@ -491,6 +493,24 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>>                    &page_mask);
>>>>
>>>>            if (page && !IS_ERR(page)) {
>>>> +            if (PageTail(page)) {
>>>> +                struct page *first_page;
>>>> +                dump_page(page, "Unexpected PageTail");
>>>> +                printk("start=%lu pfn=%lu orig_start=%lu "
>>>> +                       "page_increm=%lu "
>>>> +                       "vm_start=%lu vm_end=%lu vm_flags=%lu\n",
>>>> +                    start, page_to_pfn(page), orig_start,
>>>> +                    page_increm,
>>>> +                    vma->vm_start, vma->vm_end,
>>>> +                    vma->vm_flags);
>>>> +                first_page = page->first_page;
>>>> +                printk("first_page pfn=%lu\n",
>>>> +                        page_to_pfn(first_page));
>>>> +                dump_page(first_page, "first_page of unexpected PageTail page");
>>>> +                if (PageCompound(first_page))
>>>> +                    printk("first_page is compound with order=%d\n", compound_order(first_page));
>>>> +                VM_BUG_ON(true);
>>>> +            }
>>>>                if (PageTransHuge(page)) {
>>>>                    lock_page(page);
>>>>                    /*
>>>> @@ -525,7 +545,25 @@ void munlock_vma_pages_range(struct vm_area_struct *vma,
>>>>                }
>>>>            }
>>>>            /* It's a bug to munlock in the middle of a THP page */
>>>> -        VM_BUG_ON((start >> PAGE_SHIFT) & page_mask);
>>>> +        if ((start >> PAGE_SHIFT) & page_mask) {
>>>> +            dump_page(page, "unexpected middle of THP page");
>>>> +            printk("start=%lu pfn=%lu orig_start=%lu "
>>>
>>> In this scenario page might be error or NULL, no?
>>>
>>
>> Hm I doubt page_mask would be nonzero in such case, but who knows what weirdness causes this...
>> Feel free to move the dump_page() below printk() so we still get useful info before it crashes on
>> dump_page() in such situation.
>
> It happened once, so I moved it, but in the meanwhile I got something useful:
>
> [ 1753.907376] page:ffffea0017130c40 count:0 mapcount:1 mapping:          (null) index:0x2
> [ 1753.908327] page flags: 0x16fffff80008000(tail)
> [ 1753.908973] page dumped because: Unexpected PageTail
> [ 1753.909595] start=140340826935296 pfn=6048817 orig_start=140340826935296 page_increm=0 vm_start=140340826935296 vm_end=140340826939392 vm_flags=1210057078

A VMA spanning a single page (4096 bytes), which appears to be part of 
THP page (and also is not aligned to its beginning).
The VMA flags are: VM_WRITE,VM_EXEC,VM_MAYREAD,VM_MAYWRITE,VM_MAYEXEC
- where's VM_READ, while there's VM_EXEC?
more interesting: VM_GROWSDOWN,VM_NORESERVE,VM_SOFTDIRTY,VM_NOHUGEPAGE

Seems to me it's not possible to allocate a vma with such combination of 
flags, especially the VM_GROWSDOWN seems to be stack-only. So it's 
possible that the vma is corrupted. Could it be related to the vma caching?

> [ 1753.911220] first_page pfn=6048768
> [ 1753.911692] page:ffffea0017130000 count:2 mapcount:1 mapping:ffff880612b41f01 index:0x7fa3a5200
> [ 1753.912733] page flags: 0x16fffff80384028(uptodate|lru|head|swapbacked|unevictable|mlocked)
> [ 1753.913464] page dumped because: first_page of unexpected PageTail page
> [ 1753.914387] pc:ffff88062adcc000 pc->flags:2 pc->mem_cgroup:ffff88012b474520
> [ 1753.914387] first_page is compound with order=9
> [ 1753.914387] ------------[ cut here ]------------
> [ 1753.914387] kernel BUG at mm/mlock.c:512!
> [ 1753.914387] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [ 1753.914387] Dumping ftrace buffer:
> [ 1753.914387]    (ftrace buffer empty)
> [ 1753.914387] Modules linked in:
> [ 1753.914387] CPU: 26 PID: 36822 Comm: trinity-c337 Tainted: G        W     3.14.0-rc6-next-20140317-sasha-00012-ge933921-dirty #226
> [ 1753.914387] task: ffff88090cdeb000 ti: ffff88090a868000 task.ti: ffff88090a868000
> [ 1753.914387] RIP: 0010:[<ffffffff8129ca7a>]  [<ffffffff8129ca7a>] munlock_vma_pages_range+0x12a/0x340
> [ 1753.914387] RSP: 0018:ffff88090a869dd8  EFLAGS: 00010292
> [ 1753.914387] RAX: 0000000000000023 RBX: ffffea0017130000 RCX: 0000000000000006
> [ 1753.914387] RDX: 0000000000000006 RSI: ffff88090cdebcf0 RDI: 0000000000000282
> [ 1753.914387] RBP: ffff88090a869ec8 R08: 0000000000000001 R09: 0000000000000001
> [ 1753.914387] R10: 0000000000000001 R11: 0000000000000001 R12: 00007fa3a5231000
> [ 1753.914387] R13: ffff880613c69400 R14: 0000160000000000 R15: 0000000000000000
> [ 1753.914387] FS:  00007fa3a9081700(0000) GS:ffff880b2ba00000(0000) knlGS:0000000000000000
> [ 1753.914387] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [ 1753.914387] CR2: 0000000002fff0a8 CR3: 00000008fa08d000 CR4: 00000000000006a0
> [ 1753.914387] Stack:
> [ 1753.914387]  00007fa3a5232000 0000000048200176 00007fa3a552a000 ffff880613c6a800
> [ 1753.914387]  00007fa3a552a000 00007fa3a5231000 0000000000000000 0000000000000000
> [ 1753.914387]  000188090a869e38 0000000000000000 0000000000000000 ffff880613c69400
> [ 1753.914387] Call Trace:
> [ 1753.914387]  [<ffffffff812a0302>] do_munmap+0x1d2/0x360
> [ 1753.914387]  [<ffffffff844a42e6>] ? down_write+0xa6/0xc0
> [ 1753.914387]  [<ffffffff812a04d6>] ? vm_munmap+0x46/0x80
> [ 1753.914387]  [<ffffffff812a04e4>] vm_munmap+0x54/0x80
> [ 1753.914387]  [<ffffffff812a053c>] SyS_munmap+0x2c/0x40
> [ 1753.914387]  [<ffffffff844b04d0>] tracesys+0xdd/0xe2
> [ 1753.914387] Code: 85 48 89 df e8 98 d0 fc ff 66 f7 03 00 c0 74 1b 48 8b 03 31 f6 f6 c4 40 74 03 8b 73 68 48 c7 c7 58 7d 6e 85 31 c0 e8 52 1f 20 03 <0f> 0b 0f 1f 40 00 eb fe 66 0f 1f 44 00 00 48 8b 03 66 85 c0 79
> [ 1753.914387] RIP  [<ffffffff8129ca7a>] munlock_vma_pages_range+0x12a/0x340
> [ 1753.914387]  RSP <ffff88090a869dd8>
>
>
> Thanks,
> Sasha
>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2013-12-13  9:08                       ` Vlastimil Babka
@ 2014-03-21  1:53                         ` Sasha Levin
  -1 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-21  1:53 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/13/2013 04:08 AM, Vlastimil Babka wrote:
> On 12/13/2013 09:49 AM, Bob Liu wrote:
>> On 12/13/2013 05:05 AM, Sasha Levin wrote:
>>> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>>>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>>>
>>>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>>>
>>>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>>>> it again. Looking at
>>>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>>>> up testing on that part.
>>>>>>>>>
>>>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>>>> unable to even boot linux-next
>>>>>>>>> with my config/setup due to a GPF.
>>>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>>>> page, without first encountering a
>>>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>>>> TLB pages should be split when
>>>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>>>> mlock/munlock operations completely. One
>>>>>>>>> of these assumptions is probably failing here...
>>>>>>>>
>>>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>>>> there and got:
>>>>>>>>
>>>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>>>> mapping:          (null) index:0
>>>>>>>> x0
>>>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>>>
>>>>>>>> I can also add anything else in there to get other debug output if
>>>>>>>> you think of something else useful.
>>>>>>>
>>>>>>> Please try the following. Thanks in advance.
>>>>>>
>>>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>>>> mapping:          (null) index:0x0
>>>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>>>> orig_start=140117130543104 page_increm
>>>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>>>> [  428.499889] first_page pfn=16347136
>>>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>>>> mapping:ffff880fb5c466c1 inde
>>>>>> x:0x7f6f8fe00
>>>>>> [  428.499889] page flags:
>>>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>>>
>>>>>     From this print, it looks like the page is still a huge page.
>>>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>>>
>>>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>>>
>>>>> Please take a try this patch.
>>>>
>>>> I've made a simpler version that does away with the ugly page_mask
>>>> thing completely.
>>>> Please try that as well. Thanks.
>>>>
>>>> Also when working on this I think I found another potential but much
>>>> rare problem
>>>> when munlock_vma_page races with a THP split. That would however
>>>> manifest such that
>>>> part of the former tail pages would stay PageMlocked. But that still
>>>> needs more thought.
>>>> The bug at hand should however be fixed by this patch.
>>>
>>> Yup, this patch seems to fix the issue previously reported.
>>>
>>> However, I'll piggyback another thing that popped up now that the vm
>>> could run for a while which
>>> also seems to be caused by the original patch. It looks like a pretty
>>> straightforward deadlock, but
>
> Sigh, put one down, patch it around... :)
>
>> Looks like put_page() in __munlock_pagevec() need to get the
>> zone->lru_lock which is already held when entering __munlock_pagevec().
>
> I've come to the same conclusion, however:
>
>> How about fix like this?
>
> That unfortunately removes most of the purpose of this function which was to avoid repeated locking.
>
> Please try this patch.

It seems that this one is back, not exactly sure why yet:

[ 2857.034927] kernel BUG at include/linux/page-flags.h:415!
[ 2857.035576] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[ 2857.036702] Dumping ftrace buffer:
[ 2857.037447]    (ftrace buffer empty)
[ 2857.037937] Modules linked in:
[ 2857.038379] CPU: 25 PID: 21381 Comm: trinity-c61 Tainted: G        W     3.14.0-rc7-next-20140320-sasha-00015-gd752393-dirty #261
[ 2857.039854] task: ffff88080f91b000 ti: ffff8807fd106000 task.ti: ffff8807fd106000
[ 2857.040328] RIP: 0010:[<ffffffff8129dc93>]  [<ffffffff8129dc93>] munlock_vma_pages_range+0x93/0x1d0
[ 2857.040328] RSP: 0000:ffff8807fd107e08  EFLAGS: 00010246
[ 2857.040328] RAX: ffff88052c955360 RBX: 0000000041b36000 RCX: 000000000000009f
[ 2857.040328] RDX: 0000000000000000 RSI: ffff88080f91bcf0 RDI: 0000000004fd5360
[ 2857.040328] RBP: ffff8807fd107ec8 R08: 0000000000000001 R09: 0000000000000000
[ 2857.040328] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013f54d80
[ 2857.040328] R13: ffff88068083c200 R14: 0000000041b37000 R15: ffff8807fd107e94
[ 2857.040328] FS:  00007fcd4bd02700(0000) GS:ffff8806acc00000(0000) knlGS:0000000000000000
[ 2857.040328] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 2857.040328] CR2: 00000000027405a8 CR3: 0000000804ad4000 CR4: 00000000000006a0
[ 2857.040328] DR0: 0000000000698000 DR1: 0000000000698000 DR2: 0000000000000000
[ 2857.040328] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
[ 2857.040328] Stack:
[ 2857.040328]  0000000000000000 0000000000000000 00018807fd107e38 0000000000000000
[ 2857.040328]  0000000000000000 ffff88068083c200 00000000fd107e88 0000000000000000
[ 2857.040328]  00ff8807fd107e58 ffff88052be99b20 ffff8807fd107eb8 ffff88068083c200
[ 2857.040328] Call Trace:
[ 2857.040328]  [<ffffffff812a1462>] do_munmap+0x1d2/0x360
[ 2857.040328]  [<ffffffff844bce16>] ? down_write+0xa6/0xc0
[ 2857.040328]  [<ffffffff812a1636>] ? vm_munmap+0x46/0x80
[ 2857.040328]  [<ffffffff812a1644>] vm_munmap+0x54/0x80
[ 2857.040328]  [<ffffffff812a169c>] SyS_munmap+0x2c/0x40
[ 2857.040328]  [<ffffffff844c9210>] tracesys+0xdd/0xe2
[ 2857.040328] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 fd d0 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
[ 2857.062774] RIP  [<ffffffff8129dc93>] munlock_vma_pages_range+0x93/0x1d0
[ 2857.062774]  RSP <ffff8807fd107e08>


Thanks,
Sasha

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2014-03-21  1:53                         ` Sasha Levin
  0 siblings, 0 replies; 69+ messages in thread
From: Sasha Levin @ 2014-03-21  1:53 UTC (permalink / raw)
  To: Vlastimil Babka, Bob Liu
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 12/13/2013 04:08 AM, Vlastimil Babka wrote:
> On 12/13/2013 09:49 AM, Bob Liu wrote:
>> On 12/13/2013 05:05 AM, Sasha Levin wrote:
>>> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>>>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>>>
>>>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>>>
>>>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>>>> it again. Looking at
>>>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>>>> up testing on that part.
>>>>>>>>>
>>>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>>>> unable to even boot linux-next
>>>>>>>>> with my config/setup due to a GPF.
>>>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>>>> page, without first encountering a
>>>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>>>> TLB pages should be split when
>>>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>>>> mlock/munlock operations completely. One
>>>>>>>>> of these assumptions is probably failing here...
>>>>>>>>
>>>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>>>> there and got:
>>>>>>>>
>>>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>>>> mapping:          (null) index:0
>>>>>>>> x0
>>>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>>>
>>>>>>>> I can also add anything else in there to get other debug output if
>>>>>>>> you think of something else useful.
>>>>>>>
>>>>>>> Please try the following. Thanks in advance.
>>>>>>
>>>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>>>> mapping:          (null) index:0x0
>>>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>>>> orig_start=140117130543104 page_increm
>>>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>>>> [  428.499889] first_page pfn=16347136
>>>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>>>> mapping:ffff880fb5c466c1 inde
>>>>>> x:0x7f6f8fe00
>>>>>> [  428.499889] page flags:
>>>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>>>
>>>>>     From this print, it looks like the page is still a huge page.
>>>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>>>
>>>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>>>
>>>>> Please take a try this patch.
>>>>
>>>> I've made a simpler version that does away with the ugly page_mask
>>>> thing completely.
>>>> Please try that as well. Thanks.
>>>>
>>>> Also when working on this I think I found another potential but much
>>>> rare problem
>>>> when munlock_vma_page races with a THP split. That would however
>>>> manifest such that
>>>> part of the former tail pages would stay PageMlocked. But that still
>>>> needs more thought.
>>>> The bug at hand should however be fixed by this patch.
>>>
>>> Yup, this patch seems to fix the issue previously reported.
>>>
>>> However, I'll piggyback another thing that popped up now that the vm
>>> could run for a while which
>>> also seems to be caused by the original patch. It looks like a pretty
>>> straightforward deadlock, but
>
> Sigh, put one down, patch it around... :)
>
>> Looks like put_page() in __munlock_pagevec() need to get the
>> zone->lru_lock which is already held when entering __munlock_pagevec().
>
> I've come to the same conclusion, however:
>
>> How about fix like this?
>
> That unfortunately removes most of the purpose of this function which was to avoid repeated locking.
>
> Please try this patch.

It seems that this one is back, not exactly sure why yet:

[ 2857.034927] kernel BUG at include/linux/page-flags.h:415!
[ 2857.035576] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[ 2857.036702] Dumping ftrace buffer:
[ 2857.037447]    (ftrace buffer empty)
[ 2857.037937] Modules linked in:
[ 2857.038379] CPU: 25 PID: 21381 Comm: trinity-c61 Tainted: G        W     3.14.0-rc7-next-20140320-sasha-00015-gd752393-dirty #261
[ 2857.039854] task: ffff88080f91b000 ti: ffff8807fd106000 task.ti: ffff8807fd106000
[ 2857.040328] RIP: 0010:[<ffffffff8129dc93>]  [<ffffffff8129dc93>] munlock_vma_pages_range+0x93/0x1d0
[ 2857.040328] RSP: 0000:ffff8807fd107e08  EFLAGS: 00010246
[ 2857.040328] RAX: ffff88052c955360 RBX: 0000000041b36000 RCX: 000000000000009f
[ 2857.040328] RDX: 0000000000000000 RSI: ffff88080f91bcf0 RDI: 0000000004fd5360
[ 2857.040328] RBP: ffff8807fd107ec8 R08: 0000000000000001 R09: 0000000000000000
[ 2857.040328] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013f54d80
[ 2857.040328] R13: ffff88068083c200 R14: 0000000041b37000 R15: ffff8807fd107e94
[ 2857.040328] FS:  00007fcd4bd02700(0000) GS:ffff8806acc00000(0000) knlGS:0000000000000000
[ 2857.040328] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 2857.040328] CR2: 00000000027405a8 CR3: 0000000804ad4000 CR4: 00000000000006a0
[ 2857.040328] DR0: 0000000000698000 DR1: 0000000000698000 DR2: 0000000000000000
[ 2857.040328] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
[ 2857.040328] Stack:
[ 2857.040328]  0000000000000000 0000000000000000 00018807fd107e38 0000000000000000
[ 2857.040328]  0000000000000000 ffff88068083c200 00000000fd107e88 0000000000000000
[ 2857.040328]  00ff8807fd107e58 ffff88052be99b20 ffff8807fd107eb8 ffff88068083c200
[ 2857.040328] Call Trace:
[ 2857.040328]  [<ffffffff812a1462>] do_munmap+0x1d2/0x360
[ 2857.040328]  [<ffffffff844bce16>] ? down_write+0xa6/0xc0
[ 2857.040328]  [<ffffffff812a1636>] ? vm_munmap+0x46/0x80
[ 2857.040328]  [<ffffffff812a1644>] vm_munmap+0x54/0x80
[ 2857.040328]  [<ffffffff812a169c>] SyS_munmap+0x2c/0x40
[ 2857.040328]  [<ffffffff844c9210>] tracesys+0xdd/0xe2
[ 2857.040328] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 fd d0 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
[ 2857.062774] RIP  [<ffffffff8129dc93>] munlock_vma_pages_range+0x93/0x1d0
[ 2857.062774]  RSP <ffff8807fd107e08>


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
  2014-03-21  1:53                         ` Sasha Levin
@ 2014-03-21  9:02                           ` Vlastimil Babka
  -1 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-21  9:02 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 03/21/2014 02:53 AM, Sasha Levin wrote:
> On 12/13/2013 04:08 AM, Vlastimil Babka wrote:
>> On 12/13/2013 09:49 AM, Bob Liu wrote:
>>> On 12/13/2013 05:05 AM, Sasha Levin wrote:
>>>> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>>>>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>>>>
>>>>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>>>>
>>>>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>>>>> it again. Looking at
>>>>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>>>>> up testing on that part.
>>>>>>>>>>
>>>>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>>>>> unable to even boot linux-next
>>>>>>>>>> with my config/setup due to a GPF.
>>>>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>>>>> page, without first encountering a
>>>>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>>>>> TLB pages should be split when
>>>>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>>>>> mlock/munlock operations completely. One
>>>>>>>>>> of these assumptions is probably failing here...
>>>>>>>>>
>>>>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>>>>> there and got:
>>>>>>>>>
>>>>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>>>>> mapping:          (null) index:0
>>>>>>>>> x0
>>>>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>>>>
>>>>>>>>> I can also add anything else in there to get other debug output if
>>>>>>>>> you think of something else useful.
>>>>>>>>
>>>>>>>> Please try the following. Thanks in advance.
>>>>>>>
>>>>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>>>>> mapping:          (null) index:0x0
>>>>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>>>>> orig_start=140117130543104 page_increm
>>>>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>>>>> [  428.499889] first_page pfn=16347136
>>>>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>>>>> mapping:ffff880fb5c466c1 inde
>>>>>>> x:0x7f6f8fe00
>>>>>>> [  428.499889] page flags:
>>>>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>>>>
>>>>>>      From this print, it looks like the page is still a huge page.
>>>>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>>>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>>>>
>>>>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>>>>
>>>>>> Please take a try this patch.
>>>>>
>>>>> I've made a simpler version that does away with the ugly page_mask
>>>>> thing completely.
>>>>> Please try that as well. Thanks.
>>>>>
>>>>> Also when working on this I think I found another potential but much
>>>>> rare problem
>>>>> when munlock_vma_page races with a THP split. That would however
>>>>> manifest such that
>>>>> part of the former tail pages would stay PageMlocked. But that still
>>>>> needs more thought.
>>>>> The bug at hand should however be fixed by this patch.
>>>>
>>>> Yup, this patch seems to fix the issue previously reported.
>>>>
>>>> However, I'll piggyback another thing that popped up now that the vm
>>>> could run for a while which
>>>> also seems to be caused by the original patch. It looks like a pretty
>>>> straightforward deadlock, but
>>
>> Sigh, put one down, patch it around... :)
>>
>>> Looks like put_page() in __munlock_pagevec() need to get the
>>> zone->lru_lock which is already held when entering __munlock_pagevec().
>>
>> I've come to the same conclusion, however:
>>
>>> How about fix like this?
>>
>> That unfortunately removes most of the purpose of this function which was to avoid repeated locking.
>>
>> Please try this patch.
>
> It seems that this one is back, not exactly sure why yet:

Hm? You reported this already 6 days ago in this thread:
http://marc.info/?l=linux-mm&m=139484133311556&w=2

Then I sent a debug patch and from your results concluded something is 
probably wrong with the vma and suspected vma caching:
http://marc.info/?l=linux-mm&m=139513931519048&w=2

However next-20140320 means that the latest fixes to vma caching were 
applied, so I have no idea now. But reapplying the debug patch shouldn't 
hurt, maybe it will yield something else/more useful this time.

Vlastimil

> [ 2857.034927] kernel BUG at include/linux/page-flags.h:415!
> [ 2857.035576] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [ 2857.036702] Dumping ftrace buffer:
> [ 2857.037447]    (ftrace buffer empty)
> [ 2857.037937] Modules linked in:
> [ 2857.038379] CPU: 25 PID: 21381 Comm: trinity-c61 Tainted: G        W     3.14.0-rc7-next-20140320-sasha-00015-gd752393-dirty #261
> [ 2857.039854] task: ffff88080f91b000 ti: ffff8807fd106000 task.ti: ffff8807fd106000
> [ 2857.040328] RIP: 0010:[<ffffffff8129dc93>]  [<ffffffff8129dc93>] munlock_vma_pages_range+0x93/0x1d0
> [ 2857.040328] RSP: 0000:ffff8807fd107e08  EFLAGS: 00010246
> [ 2857.040328] RAX: ffff88052c955360 RBX: 0000000041b36000 RCX: 000000000000009f
> [ 2857.040328] RDX: 0000000000000000 RSI: ffff88080f91bcf0 RDI: 0000000004fd5360
> [ 2857.040328] RBP: ffff8807fd107ec8 R08: 0000000000000001 R09: 0000000000000000
> [ 2857.040328] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013f54d80
> [ 2857.040328] R13: ffff88068083c200 R14: 0000000041b37000 R15: ffff8807fd107e94
> [ 2857.040328] FS:  00007fcd4bd02700(0000) GS:ffff8806acc00000(0000) knlGS:0000000000000000
> [ 2857.040328] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [ 2857.040328] CR2: 00000000027405a8 CR3: 0000000804ad4000 CR4: 00000000000006a0
> [ 2857.040328] DR0: 0000000000698000 DR1: 0000000000698000 DR2: 0000000000000000
> [ 2857.040328] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
> [ 2857.040328] Stack:
> [ 2857.040328]  0000000000000000 0000000000000000 00018807fd107e38 0000000000000000
> [ 2857.040328]  0000000000000000 ffff88068083c200 00000000fd107e88 0000000000000000
> [ 2857.040328]  00ff8807fd107e58 ffff88052be99b20 ffff8807fd107eb8 ffff88068083c200
> [ 2857.040328] Call Trace:
> [ 2857.040328]  [<ffffffff812a1462>] do_munmap+0x1d2/0x360
> [ 2857.040328]  [<ffffffff844bce16>] ? down_write+0xa6/0xc0
> [ 2857.040328]  [<ffffffff812a1636>] ? vm_munmap+0x46/0x80
> [ 2857.040328]  [<ffffffff812a1644>] vm_munmap+0x54/0x80
> [ 2857.040328]  [<ffffffff812a169c>] SyS_munmap+0x2c/0x40
> [ 2857.040328]  [<ffffffff844c9210>] tracesys+0xdd/0xe2
> [ 2857.040328] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 fd d0 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
> [ 2857.062774] RIP  [<ffffffff8129dc93>] munlock_vma_pages_range+0x93/0x1d0
> [ 2857.062774]  RSP <ffff8807fd107e08>
>
>
> Thanks,
> Sasha
>



^ permalink raw reply	[flat|nested] 69+ messages in thread

* Re: kernel BUG in munlock_vma_pages_range
@ 2014-03-21  9:02                           ` Vlastimil Babka
  0 siblings, 0 replies; 69+ messages in thread
From: Vlastimil Babka @ 2014-03-21  9:02 UTC (permalink / raw)
  To: Sasha Levin, Bob Liu
  Cc: Andrew Morton, joern, mgorman, Michel Lespinasse, riel, LKML, linux-mm

On 03/21/2014 02:53 AM, Sasha Levin wrote:
> On 12/13/2013 04:08 AM, Vlastimil Babka wrote:
>> On 12/13/2013 09:49 AM, Bob Liu wrote:
>>> On 12/13/2013 05:05 AM, Sasha Levin wrote:
>>>> On 12/12/2013 07:41 AM, Vlastimil Babka wrote:
>>>>> On 12/12/2013 06:03 AM, Bob Liu wrote:
>>>>>>
>>>>>> On 12/12/2013 11:16 AM, Sasha Levin wrote:
>>>>>>> On 12/11/2013 05:59 PM, Vlastimil Babka wrote:
>>>>>>>> On 12/09/2013 09:26 PM, Sasha Levin wrote:
>>>>>>>>> On 12/09/2013 12:12 PM, Vlastimil Babka wrote:
>>>>>>>>>> On 12/09/2013 06:05 PM, Sasha Levin wrote:
>>>>>>>>>>> On 12/09/2013 04:34 AM, Vlastimil Babka wrote:
>>>>>>>>>>>> Hello, I will look at it, thanks.
>>>>>>>>>>>> Do you have specific reproduction instructions?
>>>>>>>>>>>
>>>>>>>>>>> Not really, the fuzzer hit it once and I've been unable to trigger
>>>>>>>>>>> it again. Looking at
>>>>>>>>>>> the piece of code involved it might have had something to do with
>>>>>>>>>>> hugetlbfs, so I'll crank
>>>>>>>>>>> up testing on that part.
>>>>>>>>>>
>>>>>>>>>> Thanks. Do you have trinity log and the .config file? I'm currently
>>>>>>>>>> unable to even boot linux-next
>>>>>>>>>> with my config/setup due to a GPF.
>>>>>>>>>> Looking at code I wouldn't expect that it could encounter a tail
>>>>>>>>>> page, without first encountering a
>>>>>>>>>> head page and skipping the whole huge page. At least in THP case, as
>>>>>>>>>> TLB pages should be split when
>>>>>>>>>> a vma is split. As for hugetlbfs, it should be skipped for
>>>>>>>>>> mlock/munlock operations completely. One
>>>>>>>>>> of these assumptions is probably failing here...
>>>>>>>>>
>>>>>>>>> If it helps, I've added a dump_page() in case we hit a tail page
>>>>>>>>> there and got:
>>>>>>>>>
>>>>>>>>> [  980.172299] page:ffffea003e5e8040 count:0 mapcount:1
>>>>>>>>> mapping:          (null) index:0
>>>>>>>>> x0
>>>>>>>>> [  980.173412] page flags: 0x2fffff80008000(tail)
>>>>>>>>>
>>>>>>>>> I can also add anything else in there to get other debug output if
>>>>>>>>> you think of something else useful.
>>>>>>>>
>>>>>>>> Please try the following. Thanks in advance.
>>>>>>>
>>>>>>> [  428.499889] page:ffffea003e5c0040 count:0 mapcount:4
>>>>>>> mapping:          (null) index:0x0
>>>>>>> [  428.499889] page flags: 0x2fffff80008000(tail)
>>>>>>> [  428.499889] start=140117131923456 pfn=16347137
>>>>>>> orig_start=140117130543104 page_increm
>>>>>>> =1 vm_start=140117130543104 vm_end=140117134688256 vm_flags=135266419
>>>>>>> [  428.499889] first_page pfn=16347136
>>>>>>> [  428.499889] page:ffffea003e5c0000 count:204 mapcount:44
>>>>>>> mapping:ffff880fb5c466c1 inde
>>>>>>> x:0x7f6f8fe00
>>>>>>> [  428.499889] page flags:
>>>>>>> 0x2fffff80084068(uptodate|lru|active|head|swapbacked)
>>>>>>
>>>>>>      From this print, it looks like the page is still a huge page.
>>>>>> One situation I guess is a huge page which isn't PageMlocked and passed
>>>>>> to munlock_vma_page(). I'm not sure whether this will happen.
>>>>>
>>>>> Yes that's quite likely the case. It's not illegal to happen I would say.
>>>>>
>>>>>> Please take a try this patch.
>>>>>
>>>>> I've made a simpler version that does away with the ugly page_mask
>>>>> thing completely.
>>>>> Please try that as well. Thanks.
>>>>>
>>>>> Also when working on this I think I found another potential but much
>>>>> rare problem
>>>>> when munlock_vma_page races with a THP split. That would however
>>>>> manifest such that
>>>>> part of the former tail pages would stay PageMlocked. But that still
>>>>> needs more thought.
>>>>> The bug at hand should however be fixed by this patch.
>>>>
>>>> Yup, this patch seems to fix the issue previously reported.
>>>>
>>>> However, I'll piggyback another thing that popped up now that the vm
>>>> could run for a while which
>>>> also seems to be caused by the original patch. It looks like a pretty
>>>> straightforward deadlock, but
>>
>> Sigh, put one down, patch it around... :)
>>
>>> Looks like put_page() in __munlock_pagevec() need to get the
>>> zone->lru_lock which is already held when entering __munlock_pagevec().
>>
>> I've come to the same conclusion, however:
>>
>>> How about fix like this?
>>
>> That unfortunately removes most of the purpose of this function which was to avoid repeated locking.
>>
>> Please try this patch.
>
> It seems that this one is back, not exactly sure why yet:

Hm? You reported this already 6 days ago in this thread:
http://marc.info/?l=linux-mm&m=139484133311556&w=2

Then I sent a debug patch and from your results concluded something is 
probably wrong with the vma and suspected vma caching:
http://marc.info/?l=linux-mm&m=139513931519048&w=2

However next-20140320 means that the latest fixes to vma caching were 
applied, so I have no idea now. But reapplying the debug patch shouldn't 
hurt, maybe it will yield something else/more useful this time.

Vlastimil

> [ 2857.034927] kernel BUG at include/linux/page-flags.h:415!
> [ 2857.035576] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [ 2857.036702] Dumping ftrace buffer:
> [ 2857.037447]    (ftrace buffer empty)
> [ 2857.037937] Modules linked in:
> [ 2857.038379] CPU: 25 PID: 21381 Comm: trinity-c61 Tainted: G        W     3.14.0-rc7-next-20140320-sasha-00015-gd752393-dirty #261
> [ 2857.039854] task: ffff88080f91b000 ti: ffff8807fd106000 task.ti: ffff8807fd106000
> [ 2857.040328] RIP: 0010:[<ffffffff8129dc93>]  [<ffffffff8129dc93>] munlock_vma_pages_range+0x93/0x1d0
> [ 2857.040328] RSP: 0000:ffff8807fd107e08  EFLAGS: 00010246
> [ 2857.040328] RAX: ffff88052c955360 RBX: 0000000041b36000 RCX: 000000000000009f
> [ 2857.040328] RDX: 0000000000000000 RSI: ffff88080f91bcf0 RDI: 0000000004fd5360
> [ 2857.040328] RBP: ffff8807fd107ec8 R08: 0000000000000001 R09: 0000000000000000
> [ 2857.040328] R10: 0000000000000001 R11: 0000000000000001 R12: ffffea0013f54d80
> [ 2857.040328] R13: ffff88068083c200 R14: 0000000041b37000 R15: ffff8807fd107e94
> [ 2857.040328] FS:  00007fcd4bd02700(0000) GS:ffff8806acc00000(0000) knlGS:0000000000000000
> [ 2857.040328] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> [ 2857.040328] CR2: 00000000027405a8 CR3: 0000000804ad4000 CR4: 00000000000006a0
> [ 2857.040328] DR0: 0000000000698000 DR1: 0000000000698000 DR2: 0000000000000000
> [ 2857.040328] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
> [ 2857.040328] Stack:
> [ 2857.040328]  0000000000000000 0000000000000000 00018807fd107e38 0000000000000000
> [ 2857.040328]  0000000000000000 ffff88068083c200 00000000fd107e88 0000000000000000
> [ 2857.040328]  00ff8807fd107e58 ffff88052be99b20 ffff8807fd107eb8 ffff88068083c200
> [ 2857.040328] Call Trace:
> [ 2857.040328]  [<ffffffff812a1462>] do_munmap+0x1d2/0x360
> [ 2857.040328]  [<ffffffff844bce16>] ? down_write+0xa6/0xc0
> [ 2857.040328]  [<ffffffff812a1636>] ? vm_munmap+0x46/0x80
> [ 2857.040328]  [<ffffffff812a1644>] vm_munmap+0x54/0x80
> [ 2857.040328]  [<ffffffff812a169c>] SyS_munmap+0x2c/0x40
> [ 2857.040328]  [<ffffffff844c9210>] tracesys+0xdd/0xe2
> [ 2857.040328] Code: ff 49 89 c4 48 85 c0 0f 84 f3 00 00 00 48 3d 00 f0 ff ff 0f 87 e7 00 00 00 48 8b 00 66 85 c0 79 17 31 f6 4c 89 e7 e8 fd d0 fc ff <0f> 0b 0f 1f 00 eb fe 66 0f 1f 44 00 00 49 8b 04 24 f6 c4 40 74
> [ 2857.062774] RIP  [<ffffffff8129dc93>] munlock_vma_pages_range+0x93/0x1d0
> [ 2857.062774]  RSP <ffff8807fd107e08>
>
>
> Thanks,
> Sasha
>


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 69+ messages in thread

end of thread, other threads:[~2014-03-21  9:02 UTC | newest]

Thread overview: 69+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-08  1:52 kernel BUG in munlock_vma_pages_range Sasha Levin
2013-12-08  1:52 ` Sasha Levin
2013-12-09  9:34 ` Vlastimil Babka
2013-12-09  9:34   ` Vlastimil Babka
2013-12-09 17:05   ` Sasha Levin
2013-12-09 17:05     ` Sasha Levin
2013-12-09 17:12     ` Vlastimil Babka
2013-12-09 17:12       ` Vlastimil Babka
2013-12-09 17:15       ` Sasha Levin
2013-12-09 20:26       ` Sasha Levin
2013-12-09 20:26         ` Sasha Levin
2013-12-11 22:59         ` Vlastimil Babka
2013-12-11 22:59           ` Vlastimil Babka
2013-12-12  3:16           ` Sasha Levin
2013-12-12  3:16             ` Sasha Levin
2013-12-12  5:03             ` Bob Liu
2013-12-12  5:03               ` Bob Liu
2013-12-12 12:41               ` Vlastimil Babka
2013-12-12 12:41                 ` Vlastimil Babka
2013-12-12 21:05                 ` Sasha Levin
2013-12-12 21:05                   ` Sasha Levin
2013-12-13  8:49                   ` Bob Liu
2013-12-13  8:49                     ` Bob Liu
2013-12-13  9:08                     ` Vlastimil Babka
2013-12-13  9:08                       ` Vlastimil Babka
2013-12-15 19:49                       ` Sasha Levin
2013-12-15 19:49                         ` Sasha Levin
2013-12-16 10:14                         ` [PATCH 0/3] Fix bugs in munlock Vlastimil Babka
2013-12-16 10:14                           ` Vlastimil Babka
2013-12-16 10:14                           ` [PATCH 1/3] mm: munlock: fix a bug where THP tail page is encountered Vlastimil Babka
2013-12-16 10:14                             ` Vlastimil Babka
2013-12-17  1:26                             ` Bob Liu
2013-12-17  1:26                               ` Bob Liu
2013-12-17 13:00                               ` Vlastimil Babka
2013-12-17 13:00                                 ` Vlastimil Babka
2013-12-18  0:48                                 ` Bob Liu
2013-12-18  0:48                                   ` Bob Liu
2014-03-14 23:55                                 ` Sasha Levin
2014-03-14 23:55                                   ` Sasha Levin
2014-03-15  3:06                                   ` Sasha Levin
2014-03-15  3:06                                     ` Sasha Levin
2014-03-17 12:38                                     ` Vlastimil Babka
2014-03-17 12:38                                       ` Vlastimil Babka
2014-03-17 21:08                                       ` Sasha Levin
2014-03-17 21:08                                         ` Sasha Levin
2014-03-17 22:20                                         ` Vlastimil Babka
2014-03-17 22:20                                           ` Vlastimil Babka
2014-03-17 22:58                                           ` Sasha Levin
2014-03-17 22:58                                             ` Sasha Levin
2014-03-17 23:30                                             ` Vlastimil Babka
2014-03-17 23:30                                               ` Vlastimil Babka
2014-03-18 10:41                                             ` Vlastimil Babka
2014-03-18 10:41                                               ` Vlastimil Babka
2013-12-16 10:14                           ` [PATCH 2/3] mm: munlock: fix deadlock in __munlock_pagevec() Vlastimil Babka
2013-12-16 10:14                             ` Vlastimil Babka
2013-12-17  0:31                             ` Andrew Morton
2013-12-17  0:31                               ` Andrew Morton
2013-12-17 13:08                               ` Vlastimil Babka
2013-12-17 13:08                                 ` Vlastimil Babka
2013-12-16 10:14                           ` [RFC PATCH 3/3] mm: munlock: fix potential race with THP page split Vlastimil Babka
2013-12-16 10:14                             ` Vlastimil Babka
2014-03-21  1:53                       ` kernel BUG in munlock_vma_pages_range Sasha Levin
2014-03-21  1:53                         ` Sasha Levin
2014-03-21  9:02                         ` Vlastimil Babka
2014-03-21  9:02                           ` Vlastimil Babka
2013-12-09 21:16     ` Jiri Kosina
2013-12-09 21:16       ` Jiri Kosina
2013-12-11 15:55       ` Sasha Levin
2013-12-11 15:55         ` Sasha Levin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.