lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 15 Apr 2008 17:44:39 +0200 From: Robert Schwebel <r.schwebel@...gutronix.de> To: netdev@...r.kernel.org Cc: linuxppc-dev@...abs.org, Domen Puncer <domen@...erock.org> Subject: fec_mpc5200: reset FEC on error From: Sascha Hauer <s.hauer@...gutronix.de> The error handling for the mpc5200 fec interrupt is broken. The intended behaviour is like this: * If one of FEC_IEVENT_RFIFO_ERROR and FEC_IEVENT_XFIFO_ERROR happens, the datasheet says (MPC5200B User's Guide R1.2, p. 14-13): "When this occurs, software must ensure both the FIFO Controller and BestComm are soft-reset". * On any other error (non-TFINT) interrupt, just issue a debug message. v2 changed to -p1 and posted on linuxppc list (2008-04-15). v1 posted on linuxppc list (2008-04-15). Signed-off-by: Sascha Hauer <s.hauer@...gutronix.de> --- drivers/net/fec_mpc52xx.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) Index: drivers/net/fec_mpc52xx.c =================================================================== --- a/drivers/net/fec_mpc52xx.c.orig +++ b/drivers/net/fec_mpc52xx.c @@ -491,20 +491,23 @@ out_be32(&fec->ievent, ievent); /* clear pending events */ - if (ievent & ~(FEC_IEVENT_RFIFO_ERROR | FEC_IEVENT_XFIFO_ERROR)) { - if (ievent & ~FEC_IEVENT_TFINT) - dev_dbg(&dev->dev, "ievent: %08x\n", ievent); + /* 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; } - 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); + if (ievent & ~FEC_IEVENT_TFINT) + dev_dbg(&dev->dev, "ievent: %08x\n", ievent); - netif_wake_queue(dev); return IRQ_HANDLED; } -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists