On Thu, Jul 10, 2008 at 02:39:09PM +0200, Wolfram Sang wrote: > Hello, > > today, I was debugging a kernel crash on a board with a MPC5200B using > 2.6.26-rc9. I found the following code in drivers/net/fec_mpc52xx.c: > > static irqreturn_t mpc52xx_fec_interrupt(int irq, void *dev_id) > { > [...] > /* on fifo error, soft-reset fec */ > if (ievent & (FEC_IEVENT_RFIFO_ERROR | FEC_IEVENT_XFIFO_ERROR)) { > > if (net_ratelimit() && (ievent & FEC_IEVENT_RFIFO_ERROR)) > dev_warn(&dev->dev, "FEC_IEVENT_RFIFO_ERROR\n"); > if (net_ratelimit() && (ievent & FEC_IEVENT_XFIFO_ERROR)) > dev_warn(&dev->dev, "FEC_IEVENT_XFIFO_ERROR\n"); > > mpc52xx_fec_reset(dev); > > netif_wake_queue(dev); > return IRQ_HANDLED; > } > [...] > } > > Calling mpc52xx_fec_reset() from interrupt context is bad, at least > because > > a) it calls phy_write, which contains BUG_ON(in_interrupt()) > b) it calls mpc52xx_fec_hw_init, which has a delay-loop to check > if the reset was successful (1..50 us) > > I assume the proper thing to do is to set a flag in the ISR and handle > the soft reset later in some other context. Having never dealt with the > network core and its drivers so far, I am not sure which place would be > the right one to perform the soft reset. To not make things worse, I > hope people with more insight to network stuff can deliver a suitable > solution to this problem. > > All the best, > > Wolfram
Hi Wolfram, I'm not an expert on the FEC driver, but I'll take a look when I get back home to Calgary. There has also been other churn in this area and I need to get myself up to speed. g. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev