forcedeth: napi schedule lock fix
Subsystems (2)
PATCH 3/4 forcedeth: napi schedule lock fix
This patch fixes a potential race condition between scheduling napi and completing napi poll. The call to netif_rx_schedule should be under protection of the lock (as is the completion), otherwise, interrupts could be masked off.
drivers/net/forcedeth.c +2 -2
@@ -3407,10 +3407,10 @@#ifdef CONFIG_FORCEDETH_NAPI if (events &NVREG_IRQ_RX_ALL ) { +spin_lock (&np->lock);netif_rx_schedule (dev, &np->napi);/* Disable furthur receive irq's */ -spin_lock (&np->lock); np->irqmask &= ~NVREG_IRQ_RX_ALL ;if (np->msi_flags &NV_MSI_X_ENABLED )
@@ -3524,10 +3524,10 @@#ifdef CONFIG_FORCEDETH_NAPI if (events &NVREG_IRQ_RX_ALL ) { +spin_lock (&np->lock);netif_rx_schedule (dev, &np->napi);/* Disable furthur receive irq's */ -spin_lock (&np->lock); np->irqmask &= ~NVREG_IRQ_RX_ALL ;if (np->msi_flags &NV_MSI_X_ENABLED )
David Miller
maintainerFrom: Ayaz Abdulla <[email protected]>
Date: Fri, 09 Jan 2009 16:03:49 -0500
Quoted 3 lines
This patch fixes a potential race condition between scheduling napi and completing napi poll. The call to
netif_rx_scheduleshould be under protection of the lock (as is the completion), otherwise, interrupts could be masked off.Signed-off-by Ayaz Abdulla <[email protected]>
Another patch I had to apply by hand.
The 'dev' argument was removed from the netif_*() NAPI interfaces and then were converted to napi_*() in the net-2.6 tree.
Quoted 4 lines · On 10 January 2009 00:03:49 Ayaz Abdulla wrote:
This patch fixes a potential race condition between scheduling napi and completing napi poll. The call to
netif_rx_scheduleshould be under protection of the lock (as is the completion), otherwise, interrupts could be masked off.
Can you explain how this issue or race can occur (interrupts can be masked off) ?
netif_rx_schedule() merely mark soft irq as waked on current CPU. So dev->poll will not be called until irq_exit() or local_bh_enable. As nv_nic_irq() is run under interrupt context, so napi poll will be called only during irq_exit.
Quoted 4 lines
Signed-off-by Ayaz Abdulla <[email protected]>
Signature · 2 lines
Thank, Vitaliy Gusev