aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAyaz Abdulla <aabdulla@nvidia.com>2009-01-11 03:09:04 -0500
committerDavid S. Miller <davem@davemloft.net>2009-01-11 03:11:28 -0500
commiteb10a781824ca63c4e484c4642a19b3370980792 (patch)
treecfd46aea9788547edeb5537eeeec9f2b153f32f8
parent1b6725dea766b7437d885661140b6e0340d47613 (diff)
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. Signed-off-by: Ayaz Abdulla <aabdulla@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/forcedeth.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
index e06782a60bd5..5b910cf63740 100644
--- a/drivers/net/forcedeth.c
+++ b/drivers/net/forcedeth.c
@@ -3405,10 +3405,10 @@ static irqreturn_t nv_nic_irq(int foo, void *data)
3405 3405
3406#ifdef CONFIG_FORCEDETH_NAPI 3406#ifdef CONFIG_FORCEDETH_NAPI
3407 if (events & NVREG_IRQ_RX_ALL) { 3407 if (events & NVREG_IRQ_RX_ALL) {
3408 spin_lock(&np->lock);
3408 netif_rx_schedule(&np->napi); 3409 netif_rx_schedule(&np->napi);
3409 3410
3410 /* Disable furthur receive irq's */ 3411 /* Disable furthur receive irq's */
3411 spin_lock(&np->lock);
3412 np->irqmask &= ~NVREG_IRQ_RX_ALL; 3412 np->irqmask &= ~NVREG_IRQ_RX_ALL;
3413 3413
3414 if (np->msi_flags & NV_MSI_X_ENABLED) 3414 if (np->msi_flags & NV_MSI_X_ENABLED)
@@ -3522,10 +3522,10 @@ static irqreturn_t nv_nic_irq_optimized(int foo, void *data)
3522 3522
3523#ifdef CONFIG_FORCEDETH_NAPI 3523#ifdef CONFIG_FORCEDETH_NAPI
3524 if (events & NVREG_IRQ_RX_ALL) { 3524 if (events & NVREG_IRQ_RX_ALL) {
3525 spin_lock(&np->lock);
3525 netif_rx_schedule(&np->napi); 3526 netif_rx_schedule(&np->napi);
3526 3527
3527 /* Disable furthur receive irq's */ 3528 /* Disable furthur receive irq's */
3528 spin_lock(&np->lock);
3529 np->irqmask &= ~NVREG_IRQ_RX_ALL; 3529 np->irqmask &= ~NVREG_IRQ_RX_ALL;
3530 3530
3531 if (np->msi_flags & NV_MSI_X_ENABLED) 3531 if (np->msi_flags & NV_MSI_X_ENABLED)