[BUG] MVPP2 driver exploding in presence of a tap interface
From: Marc Zyngier <hidden>
Date: 2018-10-29 23:55:02
Hi all, This is a follow-up on the conversation Thomas and I had last week at ELC, with me ranting at the sorry state of the MVPP2 driver. I reported this last time in a conversation on the macchiato list, but it looks like nobody investigated the issue at the time: https://lists.einval.com/pipermail/macchiato/2018-January/000085.html Triggering this is dead simple: - Add a macvtap to one of the MVPP2 interfaces - Bring it online - Watch the kernel exploding and memory being corrupted You don't even need anything listening on the tap interface, just its simple existence triggers it. I use a similar setup on a large variety of machines, and this box is the only one that catches fire. Removing the macvtap interface makes it (more) reliable. Given that I cannot reproduce this issue on any other ARM (32 or 64bit) platform, including other Marvell stuff, I can only conclude that the MVPP2 driver is responsible for this. Example crash and .config below (4.19 vanilla, as linux/master dies in new and wonderful ways on this box). I'm looking forward to testing any idea you may have. M. [ 29.040686] mvpp2 f2000000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx [ 29.234413] BUG: Bad page state in process swapper/0 pfn:e6804 [ 29.240364] page:ffff7e00039a0100 count:0 mapcount:0 mapping:ffff8000e7bf3800 index:0x0 compound_mapcount: 0 [ 29.250238] flags: 0xfffc00000008100(slab|head) [ 29.254793] raw: 0fffc00000008100 dead000000000100 dead000000000200 ffff8000e7bf3800 [ 29.262571] raw: 0000000000000000 0000000000100010 00000000ffffffff 0000000000000000 [ 29.270345] page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set [ 29.276813] bad because of flags: 0x100(slab) [ 29.281190] Modules linked in: [ 29.284264] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.19.0-dirty #272 [ 29.290903] Hardware name: Marvell 8040 MACCHIATOBin (DT) [ 29.296323] Call trace: [ 29.298784] dump_backtrace+0x0/0x148 [ 29.302461] show_stack+0x14/0x20 [ 29.305789] dump_stack+0x90/0xb4 [ 29.309117] bad_page+0x104/0x130 [ 29.312444] free_pages_check_bad+0x9c/0xa8 [ 29.316642] __free_pages_ok+0x1b0/0x450 [ 29.320580] page_frag_free+0x8c/0xa8 [ 29.324257] skb_free_head+0x18/0x30 [ 29.327846] skb_release_data+0x130/0x160 [ 29.331870] skb_release_all+0x24/0x30 [ 29.335633] consume_skb+0x2c/0x58 [ 29.339047] arp_process.constprop.4+0x200/0x6f0 [ 29.343681] arp_rcv+0xf4/0x128 [ 29.346834] __netif_receive_skb_one_core+0x54/0x78 [ 29.351731] __netif_receive_skb+0x14/0x60 [ 29.355843] netif_receive_skb_internal+0x40/0x138 [ 29.360653] napi_gro_receive+0x64/0xc8 [ 29.364504] mvpp2_poll+0x384/0x6b8 [ 29.368005] net_rx_action+0x104/0x2c0 [ 29.371768] __do_softirq+0x10c/0x208 [ 29.375444] irq_exit+0xb8/0xc8 [ 29.378597] __handle_domain_irq+0x64/0xb8 [ 29.382709] gic_handle_irq+0x50/0xa0 [ 29.386383] el1_irq+0xb0/0x128 [ 29.389535] arch_cpu_idle+0x10/0x18 [ 29.393124] do_idle+0x208/0x280 [ 29.396363] cpu_startup_entry+0x24/0x28 [ 29.400302] rest_init+0xd0/0xdc [ 29.403543] start_kernel+0x3d8/0x400 [ 29.407220] Disabling lock debugging due to kernel taint [ 30.578010] BUG: Bad page state in process swapper/0 pfn:e681d [ 30.583963] page:ffff7e00039a0740 count:0 mapcount:0 mapping:ffff8000ef43f080 index:0x0 [ 30.592002] flags: 0xfffc00000000100(slab) [ 30.596120] raw: 0fffc00000000100 dead000000000100 dead000000000200 ffff8000ef43f080 [ 30.603889] raw: 0000000000000000 00000000001e001e 00000000ffffffff 0000000000000000 [ 30.611663] page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set [ 30.618131] bad because of flags: 0x100(slab) [ 30.622508] Modules linked in: [ 30.625580] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G B 4.19.0-dirty #272 [ 30.633615] Hardware name: Marvell 8040 MACCHIATOBin (DT) [ 30.639035] Call trace: [ 30.641495] dump_backtrace+0x0/0x148 [ 30.645172] show_stack+0x14/0x20 [ 30.648499] dump_stack+0x90/0xb4 [ 30.651826] bad_page+0x104/0x130 [ 30.655153] free_pages_check_bad+0x9c/0xa8 [ 30.659352] __free_pages_ok+0x1b0/0x450 [ 30.663288] page_frag_free+0x8c/0xa8 [ 30.666965] skb_free_head+0x18/0x30 [ 30.670554] skb_release_data+0x130/0x160 [ 30.674578] skb_release_all+0x24/0x30 [ 30.678341] kfree_skb+0x2c/0x58 [ 30.681582] __udp4_lib_rcv+0x818/0x910 [ 30.685432] udp_rcv+0x1c/0x28 [ 30.688498] ip_local_deliver_finish+0x100/0x248 [ 30.693133] ip_local_deliver+0x60/0x110 [ 30.697070] ip_rcv_finish+0x38/0x50 [ 30.700658] ip_rcv+0x50/0xd8 [ 30.703636] __netif_receive_skb_one_core+0x54/0x78 [ 30.708532] __netif_receive_skb+0x14/0x60 [ 30.712643] netif_receive_skb_internal+0x40/0x138 [ 30.717452] napi_gro_receive+0x64/0xc8 [ 30.721302] mvpp2_poll+0x384/0x6b8 [ 30.724803] net_rx_action+0x104/0x2c0 [ 30.728566] __do_softirq+0x10c/0x208 [ 30.732242] irq_exit+0xb8/0xc8 [ 30.735395] __handle_domain_irq+0x64/0xb8 [ 30.739506] gic_handle_irq+0x50/0xa0 [ 30.743182] el1_irq+0xb0/0x128 [ 30.746334] arch_cpu_idle+0x10/0x18 [ 30.749922] do_idle+0x208/0x280 [ 30.753161] cpu_startup_entry+0x24/0x28 [ 30.757099] rest_init+0xd0/0xdc [ 30.760339] start_kernel+0x3d8/0x400 -- Jazz is not dead. It just smells funny...