aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2009-03-31 18:07:21 -0400
committerDavid S. Miller <davem@davemloft.net>2009-03-31 18:07:21 -0400
commit7e765cb4a07356e4f01cc57959c3c798a586f749 (patch)
treeca926b73d5c2f0bb5e82d01d4e2a9cc18ece310d /drivers/net
parentc9caceca25854eff4328c89045793a91bf8f9ee3 (diff)
sfc: Call netif_napi_add() before registering our interrupt handler
If we use a shared legacy IRQ then our interrupt handler may be called as soon as it is registered even though IRQs are disabled on the NIC. Now that the legacy interrupt handler also checks for event delivery, it may decide to schedule polling in this case. Ensure that the NAPI context is valid but disabled at this point. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/sfc/efx.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c
index 00c23b1babca..dee23b159df2 100644
--- a/drivers/net/sfc/efx.c
+++ b/drivers/net/sfc/efx.c
@@ -448,6 +448,9 @@ static void efx_init_channels(struct efx_nic *efx)
448 448
449 WARN_ON(channel->rx_pkt != NULL); 449 WARN_ON(channel->rx_pkt != NULL);
450 efx_rx_strategy(channel); 450 efx_rx_strategy(channel);
451
452 netif_napi_add(channel->napi_dev, &channel->napi_str,
453 efx_poll, napi_weight);
451 } 454 }
452} 455}
453 456
@@ -462,10 +465,6 @@ static void efx_start_channel(struct efx_channel *channel)
462 465
463 EFX_LOG(channel->efx, "starting chan %d\n", channel->channel); 466 EFX_LOG(channel->efx, "starting chan %d\n", channel->channel);
464 467
465 if (!(channel->efx->net_dev->flags & IFF_UP))
466 netif_napi_add(channel->napi_dev, &channel->napi_str,
467 efx_poll, napi_weight);
468
469 /* The interrupt handler for this channel may set work_pending 468 /* The interrupt handler for this channel may set work_pending
470 * as soon as we enable it. Make sure it's cleared before 469 * as soon as we enable it. Make sure it's cleared before
471 * then. Similarly, make sure it sees the enabled flag set. */ 470 * then. Similarly, make sure it sees the enabled flag set. */