From: Tom Rini Replace save_flags()/resore_flags() with spin_lock_irqsave()/spin_unlock_irqrestore() and document reasons for locking. Signed-off-by: James Nelson Signed-off-by: Tom Rini Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc/8xx_io/fec.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff -puN arch/ppc/8xx_io/fec.c~ppc32-remove-cli-sti-in-arch-ppc-8xx_io-fecc arch/ppc/8xx_io/fec.c --- 25/arch/ppc/8xx_io/fec.c~ppc32-remove-cli-sti-in-arch-ppc-8xx_io-fecc Wed Jan 19 15:40:56 2005 +++ 25-akpm/arch/ppc/8xx_io/fec.c Wed Jan 19 15:40:56 2005 @@ -389,6 +389,7 @@ fec_enet_start_xmit(struct sk_buff *skb, flush_dcache_range((unsigned long)skb->data, (unsigned long)skb->data + skb->len); + /* disable interrupts while triggering transmit */ spin_lock_irq(&fep->lock); /* Send it on its way. Tell FEC its ready, interrupt when done, @@ -539,6 +540,7 @@ fec_enet_tx(struct net_device *dev) struct sk_buff *skb; fep = dev->priv; + /* lock while transmitting */ spin_lock(&fep->lock); bdp = fep->dirty_tx; @@ -799,6 +801,7 @@ fec_enet_mii(struct net_device *dev) if ((mip = mii_head) != NULL) { ep->fec_mii_data = mip->mii_regval; + } } @@ -817,8 +820,8 @@ mii_queue(struct net_device *dev, int re retval = 0; - save_flags(flags); - cli(); + /* lock while modifying mii_list */ + spin_lock_irqsave(&fep->lock, flags); if ((mip = mii_free) != NULL) { mii_free = mip->mii_next; @@ -836,7 +839,7 @@ mii_queue(struct net_device *dev, int re retval = 1; } - restore_flags(flags); + spin_unlock_irqrestore(&fep->lock, flags); return(retval); } _