On 11 April 2016 at 11:35, Arend van Spriel <arend@xxxxxxxxxxxx> wrote: > Move event handling out of brcmf_netif_rx() avoiding the need > to pass a flag. This flag is only ever true for USB hosts as > other interface use separate brcmf_rx_event() function. > > Reviewed-by: Hante Meuleman <hante.meuleman@xxxxxxxxxxxx> > Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@xxxxxxxxxxxx> > Reviewed-by: Franky Lin <franky.lin@xxxxxxxxxxxx> > Signed-off-by: Arend van Spriel <arend@xxxxxxxxxxxx> With this patch applied I'm getting: Unable to handle kernel NULL pointer dereference at virtual address 000001fc on the first brcmf_netif_rx call. I'm using D-Link DIR-885L with 14e4:4365 (BCM4366).
[ 44.086579] Unable to handle kernel NULL pointer dereference at virtual address 000001fc [ 44.094706] pgd = c0004000 [ 44.097415] [000001fc] *pgd=00000000 [ 44.101019] Internal error: Oops: 17 [#1] SMP ARM [ 44.105726] Modules linked in: pppoe ppp_async iptable_nat brcmfmac b43 pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 mac80211 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntn [ 44.168765] CPU: 0 PID: 632 Comm: irq/32-brcmf_pc Not tainted 4.4.7 #6 [ 44.175305] Hardware name: BCM5301X [ 44.178799] task: c7a16400 ti: c73de000 task.ti: c73de000 [ 44.184215] PC is at get_rps_cpu+0x24/0x330 [ 44.188410] LR is at netif_rx_internal+0x8c/0xbc [ 44.193038] pc : [<c0251284>] lr : [<c0253ff8>] psr: 60000013 [ 44.193038] sp : c73dfdc8 ip : c73dfe18 fp : c73dfe14 [ 44.204543] r10: 00000000 r9 : c8ce5000 r8 : c8ce5000 [ 44.209774] r7 : c7a08e80 r6 : 00000000 r5 : c047c848 r4 : c797a3c0 [ 44.216311] r3 : 00000000 r2 : c73dfe24 r1 : c797a3c0 r0 : 00000000 [ 44.222849] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none [ 44.229995] Control: 10c5387d Table: 073d004a DAC: 00000051 [ 44.235748] Process irq/32-brcmf_pc (pid: 632, stack limit = 0xc73de190) [ 44.242459] Stack: (0xc73dfdc8 to 0xc73e0000) [ 44.246821] fdc0: c6ec8320 00000000 c73dfe14 c73dfe24 c0019c3c c009c93c [ 44.255012] fde0: c047ecc4 c04bd550 c7a08e00 c797a3c0 c047c848 c797a3c0 c7a08e80 c8ce5000 [ 44.263211] fe00: c8ce5000 00000000 c73dfe44 c73dfe18 c0253ff8 c025126c c000acf4 c73dfe3c [ 44.271401] fe20: c001a760 c73dfe28 c71d8410 c71d8000 c797a3c0 00000000 c73dfe5c c73dfe48 [ 44.279592] fe40: c0254074 c0253f78 c797a3c0 00000000 c73dfe74 c73dfe60 bf21f40c c0254070 [ 44.287791] fe60: c712a9c0 00000000 c73dfebc c73dfe78 bf224ea4 bf21f36c c7a16400 c6dd1840 [ 44.295981] fe80: 00000000 00000014 c0477840 00019e7c c73dfebc c712a9c0 00010000 c787e3c0 [ 44.304172] fea0: c0057bb0 c719c1e4 c047f842 00000000 c73dfedc c73dfec0 bf224f8c bf224a38 [ 44.312372] fec0: c7ad7000 00010000 c787e3c0 c0057bb0 c73dff04 c73dfee0 bf229608 bf224f6c [ 44.320570] fee0: c719c1c0 c719c1c0 c787e3c0 c0057bb0 c719c1e4 c047f842 c73dff24 c73dff08 [ 44.328761] ff00: c0057bd4 bf229450 c787e3c0 c719c1c0 c73de000 c0057bb0 c73dff5c c73dff28 [ 44.336951] ff20: c0057eb8 c0057bbc 00000000 c0057d0c 00000000 c7244d80 00000000 c719c1c0 [ 44.345141] ff40: c0057dc0 00000000 00000000 00000000 c73dffac c73dff60 c00393a4 c0057dcc [ 44.353332] ff60: c73dff8c 00000000 c00228cc c719c1c0 00000000 00000000 c73dff78 c73dff78 [ 44.361522] ff80: 00000000 00000000 c73dff88 c73dff88 c7244d80 c00392c4 00000000 00000000 [ 44.369712] ffa0: 00000000 c73dffb0 c00097b8 c00392d0 00000000 00000000 00000000 00000000 [ 44.377903] ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 44.386094] ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 c73dfff4 00000000 [ 44.394281] Backtrace: [ 44.396743] [<c0251260>] (get_rps_cpu) from [<c0253ff8>] (netif_rx_internal+0x8c/0xbc) [ 44.404674] r10:00000000 r9:c8ce5000 r8:c8ce5000 r7:c7a08e80 r6:c797a3c0 r5:c047c848 [ 44.412559] r4:c797a3c0 [ 44.415106] [<c0253f6c>] (netif_rx_internal) from [<c0254074>] (netif_rx_ni+0x10/0x44) [ 44.423039] r5:00000000 r4:c797a3c0 [ 44.426665] [<c0254064>] (netif_rx_ni) from [<bf21f40c>] (brcmf_netif_rx+0xac/0xbc [brcmfmac]) [ 44.435294] r5:00000000 r4:c797a3c0 [ 44.438909] [<bf21f360>] (brcmf_netif_rx [brcmfmac]) from [<bf224ea4>] (brcmf_msgbuf_txdata+0x5c0/0x67c [brcmfmac]) [ 44.449360] r5:00000000 r4:c712a9c0 [ 44.452973] [<bf224a2c>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf224f8c>] (brcmf_proto_msgbuf_rx_trigger+0x2c/0xd0 [brcmfmac]) [ 44.464557] r10:00000000 r9:c047f842 r8:c719c1e4 r7:c0057bb0 r6:c787e3c0 r5:00010000 [ 44.472443] r4:c712a9c0 [ 44.475002] [<bf224f60>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf229608>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac]) [ 44.486935] r7:c0057bb0 r6:c787e3c0 r5:00010000 r4:c7ad7000 [ 44.492648] [<bf229444>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057bd4>] (irq_thread_fn+0x24/0x3c) [ 44.502054] r9:c047f842 r8:c719c1e4 r7:c0057bb0 r6:c787e3c0 r5:c719c1c0 r4:c719c1c0 [ 44.509857] [<c0057bb0>] (irq_thread_fn) from [<c0057eb8>] (irq_thread+0xf8/0x1e4) [ 44.517442] r7:c0057bb0 r6:c73de000 r5:c719c1c0 r4:c787e3c0 [ 44.523150] [<c0057dc0>] (irq_thread) from [<c00393a4>] (kthread+0xe0/0xf4) [ 44.530124] r10:00000000 r9:00000000 r8:00000000 r7:c0057dc0 r6:c719c1c0 r5:00000000 [ 44.538010] r4:c7244d80 [ 44.540557] [<c00392c4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c) [ 44.547793] r7:00000000 r6:00000000 r5:c00392c4 r4:c7244d80 [ 44.553498] Code: e50b2040 e1a06000 e3530000 e1a04001 (e59021fc) [ 44.559625] ---[ end trace fbc5940e895b0890 ]--- [ 44.564276] Unable to handle kernel paging request at virtual address ffffffec [ 44.571526] pgd = c0004000 [ 44.574237] [ffffffec] *pgd=07fff841, *pte=00000000, *ppte=00000000 [ 44.580550] Internal error: Oops: 27 [#2] SMP ARM [ 44.585264] Modules linked in: pppoe ppp_async iptable_nat brcmfmac b43 pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 mac80211 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntn [ 44.648302] CPU: 0 PID: 632 Comm: irq/32-brcmf_pc Tainted: G D 4.4.7 #6 [ 44.656062] Hardware name: BCM5301X [ 44.659554] task: c7a16400 ti: c73de000 task.ti: c73de000 [ 44.664962] PC is at kthread_data+0x10/0x18 [ 44.669155] LR is at irq_thread_dtor+0x58/0xb4 [ 44.673603] pc : [<c0039844>] lr : [<c0057d64>] psr: 20000113 [ 44.673603] sp : c73dfbd0 ip : c73dfbe0 fp : c73dfbdc [ 44.685109] r10: 00000000 r9 : c0480878 r8 : c73dfc18 [ 44.690340] r7 : c7a16400 r6 : 00000000 r5 : c7a16400 r4 : c7a16400 [ 44.696876] r3 : 00000000 r2 : 0000007c r1 : 00000000 r0 : c7a16400 [ 44.703414] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none [ 44.710559] Control: 10c5387d Table: 073d004a DAC: 00000051 [ 44.716313] Process irq/32-brcmf_pc (pid: 632, stack limit = 0xc73de190) [ 44.723023] Stack: (0xc73dfbd0 to 0xc73e0000) [ 44.727386] fbc0: c73dfbf4 c73dfbe0 c0057d64 c0039840 [ 44.735586] fbe0: c7a16400 c04940dc c73dfc14 c73dfbf8 c0037ca8 c0057d18 c7a16400 00000000 [ 44.743785] fc00: c04935ec c7a16400 c73dfc34 c73dfc18 c002248c c0037c14 c73dfc34 c73dfc28 [ 44.751985] fc20: c0021538 c7a16400 c73dfc74 c73dfc38 c00174a8 c002213c c73de190 0000000b [ 44.760183] fc40: c001ab84 60000113 c040ca10 000001fc c73dfd78 00000017 00000000 c7a16400 [ 44.768383] fc60: 00000000 00000017 c73dfc8c c73dfc78 c001ad04 c001725c 00000017 000001fc [ 44.776582] fc80: c73dfccc c73dfc90 c001afa0 c001acb4 00000001 00000000 c73dfc94 00000003 [ 44.784772] fca0: c73dfcd4 00000017 000001fc c0480d58 c73dfd78 c8ce5000 c8ce5000 00000000 [ 44.792972] fcc0: c73dfd74 c73dfcd0 c00092ec c001ad30 c0088290 c0086198 00000141 c6dd1840 [ 44.801170] fce0: c73dfd14 00000104 c047f780 c047ee04 fffffff8 00000000 00000008 ffffffff [ 44.809361] fd00: 40000093 00000001 c6edf580 00000000 00000000 00000000 c047f788 020b5220 [ 44.817551] fd20: c73dfdac c047f780 00000003 02095220 c6acc000 c6acc000 00000001 a0000013 [ 44.825751] fd40: c73dfdcc c73dfd50 00000740 80100008 c7a049c0 c7a049c0 c0251284 60000013 [ 44.833949] fd60: ffffffff c73dfdac c73dfe14 c73dfd78 c000a000 c00092bc 00000000 c797a3c0 [ 44.842140] fd80: c73dfe24 00000000 c797a3c0 c047c848 00000000 c7a08e80 c8ce5000 c8ce5000 [ 44.850330] fda0: 00000000 c73dfe14 c73dfe18 c73dfdc8 c0253ff8 c0251284 60000013 ffffffff [ 44.858521] fdc0: 00000051 00000800 c6ec8320 00000000 c73dfe14 c73dfe24 c0019c3c c009c93c [ 44.866711] fde0: c047ecc4 c04bd550 c7a08e00 c797a3c0 c047c848 c797a3c0 c7a08e80 c8ce5000 [ 44.874902] fe00: c8ce5000 00000000 c73dfe44 c73dfe18 c0253ff8 c025126c c000acf4 c73dfe3c [ 44.883102] fe20: c001a760 c73dfe28 c71d8410 c71d8000 c797a3c0 00000000 c73dfe5c c73dfe48 [ 44.891300] fe40: c0254074 c0253f78 c797a3c0 00000000 c73dfe74 c73dfe60 bf21f40c c0254070 [ 44.899491] fe60: c712a9c0 00000000 c73dfebc c73dfe78 bf224ea4 bf21f36c c7a16400 c6dd1840 [ 44.907681] fe80: 00000000 00000014 c0477840 00019e7c c73dfebc c712a9c0 00010000 c787e3c0 [ 44.915881] fea0: c0057bb0 c719c1e4 c047f842 00000000 c73dfedc c73dfec0 bf224f8c bf224a38 [ 44.924079] fec0: c7ad7000 00010000 c787e3c0 c0057bb0 c73dff04 c73dfee0 bf229608 bf224f6c [ 44.932270] fee0: c719c1c0 c719c1c0 c787e3c0 c0057bb0 c719c1e4 c047f842 c73dff24 c73dff08 [ 44.940470] ff00: c0057bd4 bf229450 c787e3c0 c719c1c0 c73de000 c0057bb0 c73dff5c c73dff28 [ 44.948668] ff20: c0057eb8 c0057bbc 00000000 c0057d0c 00000000 c7244d80 00000000 c719c1c0 [ 44.956858] ff40: c0057dc0 00000000 00000000 00000000 c73dffac c73dff60 c00393a4 c0057dcc [ 44.965049] ff60: c73dff8c 00000000 c00228cc c719c1c0 00000000 00000000 c73dff78 c73dff78 [ 44.973240] ff80: 00000001 00010001 c73dff88 c73dff88 c7244d80 c00392c4 00000000 00000000 [ 44.981438] ffa0: 00000000 c73dffb0 c00097b8 c00392d0 00000000 00000000 00000000 00000000 [ 44.989629] ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 44.997828] ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 c73dfff4 00000000 [ 45.006024] Backtrace: [ 45.008483] [<c0039834>] (kthread_data) from [<c0057d64>] (irq_thread_dtor+0x58/0xb4) [ 45.016344] [<c0057d0c>] (irq_thread_dtor) from [<c0037ca8>] (task_work_run+0xa0/0xb4) [ 45.024277] r5:c04940dc r4:c7a16400 [ 45.027877] [<c0037c08>] (task_work_run) from [<c002248c>] (do_exit+0x35c/0x7cc) [ 45.035287] r7:c7a16400 r6:c04935ec r5:00000000 r4:c7a16400 [ 45.041003] [<c0022130>] (do_exit) from [<c00174a8>] (die+0x258/0x2dc) [ 45.047542] r7:c7a16400 [ 45.050093] [<c0017250>] (die) from [<c001ad04>] (__do_kernel_fault.part.0+0x5c/0x7c) [ 45.057935] r10:00000017 r9:00000000 r8:c7a16400 r7:00000000 r6:00000017 r5:c73dfd78 [ 45.065820] r4:000001fc [ 45.068366] [<c001aca8>] (__do_kernel_fault.part.0) from [<c001afa0>] (do_page_fault+0x27c/0x294) [ 45.077257] r7:000001fc r4:00000017 [ 45.080856] [<c001ad24>] (do_page_fault) from [<c00092ec>] (do_DataAbort+0x3c/0xbc) [ 45.088529] r10:00000000 r9:c8ce5000 r8:c8ce5000 r7:c73dfd78 r6:c0480d58 r5:000001fc [ 45.096415] r4:00000017 [ 45.098961] [<c00092b0>] (do_DataAbort) from [<c000a000>] (__dabt_svc+0x40/0x60) [ 45.106373] Exception stack(0xc73dfd78 to 0xc73dfdc0) [ 45.111431] fd60: 00000000 c797a3c0 [ 45.119624] fd80: c73dfe24 00000000 c797a3c0 c047c848 00000000 c7a08e80 c8ce5000 c8ce5000 [ 45.127822] fda0: 00000000 c73dfe14 c73dfe18 c73dfdc8 c0253ff8 c0251284 60000013 ffffffff [ 45.136009] r7:c73dfdac r6:ffffffff r5:60000013 r4:c0251284 [ 45.141724] [<c0251260>] (get_rps_cpu) from [<c0253ff8>] (netif_rx_internal+0x8c/0xbc) [ 45.149658] r10:00000000 r9:c8ce5000 r8:c8ce5000 r7:c7a08e80 r6:c797a3c0 r5:c047c848 [ 45.157543] r4:c797a3c0 [ 45.160089] [<c0253f6c>] (netif_rx_internal) from [<c0254074>] (netif_rx_ni+0x10/0x44) [ 45.168023] r5:00000000 r4:c797a3c0 [ 45.171645] [<c0254064>] (netif_rx_ni) from [<bf21f40c>] (brcmf_netif_rx+0xac/0xbc [brcmfmac]) [ 45.180270] r5:00000000 r4:c797a3c0 [ 45.183884] [<bf21f360>] (brcmf_netif_rx [brcmfmac]) from [<bf224ea4>] (brcmf_msgbuf_txdata+0x5c0/0x67c [brcmfmac]) [ 45.194334] r5:00000000 r4:c712a9c0 [ 45.197947] [<bf224a2c>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf224f8c>] (brcmf_proto_msgbuf_rx_trigger+0x2c/0xd0 [brcmfmac]) [ 45.209532] r10:00000000 r9:c047f842 r8:c719c1e4 r7:c0057bb0 r6:c787e3c0 r5:00010000 [ 45.217418] r4:c712a9c0 [ 45.219977] [<bf224f60>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf229608>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac]) [ 45.231910] r7:c0057bb0 r6:c787e3c0 r5:00010000 r4:c7ad7000 [ 45.237622] [<bf229444>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057bd4>] (irq_thread_fn+0x24/0x3c) [ 45.247028] r9:c047f842 r8:c719c1e4 r7:c0057bb0 r6:c787e3c0 r5:c719c1c0 r4:c719c1c0 [ 45.254831] [<c0057bb0>] (irq_thread_fn) from [<c0057eb8>] (irq_thread+0xf8/0x1e4) [ 45.262408] r7:c0057bb0 r6:c73de000 r5:c719c1c0 r4:c787e3c0 [ 45.268115] [<c0057dc0>] (irq_thread) from [<c00393a4>] (kthread+0xe0/0xf4) [ 45.275091] r10:00000000 r9:00000000 r8:00000000 r7:c0057dc0 r6:c719c1c0 r5:00000000 [ 45.282976] r4:c7244d80 [ 45.285522] [<c00392c4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c) [ 45.292760] r7:00000000 r6:00000000 r5:c00392c4 r4:c7244d80 [ 45.298464] Code: e1a0c00d e92dd800 e24cb004 e590325c (e5130014) [ 45.304595] ---[ end trace fbc5940e895b0891 ]--- [ 45.309242] Fixing recursive fault but reboot is needed!