Messages in this thread | | | Date | Tue, 25 Mar 2008 22:23:24 -0400 | From | Jeff Garzik <> | Subject | Re: [PATCH] Improvev netconsole support for RTL8139 NIC driver |
| |
yshi wrote: > In current RTL8139 NIC driver, spin_lock()/spin_unlock() is used > for irq handler. But for netconsole/netpoll, it prefers > spin_lock_irqsave()/spin_unlcok_irqrestore(). So this patch fixed > this problem to improve netconsole/netpoll support. > > Signed-off-by: Yang Shi <yang.shi@windriver.com> > --- > b/drivers/net/8139too.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > --- > > --- a/drivers/net/8139too.c > +++ b/drivers/net/8139too.c > @@ -2136,8 +2136,13 @@ static irqreturn_t rtl8139_interrupt (in > u16 status, ackstat; > int link_changed = 0; /* avoid bogus "uninit" warning */ > int handled = 0; > +#ifdef CONFIG_NET_POLL_CONTROLLER > + unsigned long flags; > > + spin_lock_irqsave (&tp->lock, flags); > +#else > spin_lock (&tp->lock); > +#endif > status = RTL_R16 (IntrStatus); > > /* shared irq? */ > @@ -2185,7 +2190,11 @@ static irqreturn_t rtl8139_interrupt (in > RTL_W16 (IntrStatus, TxErr); > } > out: > +#ifdef CONFIG_NET_POLL_CONTROLLER > + spin_unlock_irqrestore (&tp->lock, flags); > +#else > spin_unlock (&tp->lock); > +#endif
This is bogus -- you should never need to slow down the hot path in such a way.
Add a local_irq_save()/restore() to rtl8139_poll_controller() or a similar solution, putting the burden on the netpoll/netconsole layer.
Jeff
| |