• M
    gianfar: stop send queue before resetting gianfar · cbea2707
    Markus Brunner 提交于
    After a transmit timed out, the reset task will be called, which will free the
    allocated resources(stop_gfar). If gfar_poll will be called before the
    resources get allocated again gfar_clean_tx_ring will call
    dev_kfree_skb_any(NULL).
    
    Example crash:
    
    ops: Kernel access of bad area, sig: 11 [#1]
    PREEMPT RSBBA100
    Modules linked in:
    NIP: c01a10c4 LR: c013b254 CTR: c013c038
    REGS: c02e7d20 TRAP: 0300   Not tainted  (2.6.27.20)
    MSR: 00001032 <ME,IR,DR>  CR: 24000082  XER: 20000000
    DAR: 000000a0, DSISR: 20000000
    TASK = c02ce578[0] 'swapper' THREAD: c02e6000
    GPR00: 000000a0 c02e7dd0 c02ce578 00000000 00000040 00000001 c02ec1c0 
    00001032
    GPR08: c080d1e0 df9ea800 00000000 00000000 24000082 ffffffff 0404f000 
    00000000
    GPR16: ffffffbf ffffffff ffffffff ffdff7ff ffffffff c02d0fd4 00100100 
    00200200
    GPR24: c031220c 00000001 00000001 00000000 00000000 df849800 ff109000 
    df849b80
    NIP [c01a10c4] dev_kfree_skb_irq+0x18/0x70
    LR [c013b254] gfar_clean_tx_ring+0x70/0x11c
    Call Trace:
    [c02e7dd0] [c003e978] update_wall_time+0x730/0x744 (unreliable)
    [c02e7df0] [c013b254] gfar_clean_tx_ring+0x70/0x11c
    [c02e7e10] [c013c07c] gfar_poll+0x44/0x150
    [c02e7e30] [c01a064c] net_rx_action+0xa8/0x19c
    [c02e7e70] [c00251d4] __do_softirq+0x64/0xc0
    [c02e7e90] [c0006384] do_softirq+0x40/0x58
    [c02e7ea0] [c00250a8] irq_exit+0x40/0x9c
    [c02e7eb0] [c000642c] do_IRQ+0x90/0xac
    [c02e7ec0] [c0010ab4] ret_from_except+0x0/0x14
    --- Exception: 501 at cpu_idle+0x9c/0xf8
        LR = cpu_idle+0x9c/0xf8
    [c02e7f80] [c0009820] cpu_idle+0x58/0xf8 (unreliable)
    [c02e7fa0] [c01fb8c8] __got2_end+0x7c/0x90
    [c02e7fc0] [c026c794] start_kernel+0x2c0/0x2d4
    [c02e7ff0] [00003438] 0x3438
    Instruction dump:
    7fa00124 80010024 bba10014 38210020 7c0803a6 4e800020 9421ffe0 7c0802a6
    7c6b1b78 90010024 380300a0 bfa10014 <7d200028> 3129ffff 7d20012d 40a2fff4
    Kernel panic - not syncing: Fatal exception in interrupt
    
    This Patch calls netif_stop_queue before calling stop_gfar.
    Signed-off-by: NMarkus Brunner <super.firetwister@gmail.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    cbea2707
gianfar.c 61.9 KB