Skip to content

Commit

Permalink
tg3: Enable NAPI instances for other int vectors
Browse files Browse the repository at this point in the history
This patch adds code to enable and disable the rest of the NAPI
instances.

Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Reviewed-by: Benjamin Li <benli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Matt Carlson authored and David S. Miller committed Sep 2, 2009
1 parent fe5f578 commit fed9781
Showing 1 changed file with 23 additions and 9 deletions.
32 changes: 23 additions & 9 deletions drivers/net/tg3.c
Original file line number Diff line number Diff line change
Expand Up @@ -694,25 +694,39 @@ static void tg3_int_reenable(struct tg3_napi *tnapi)
HOSTCC_MODE_ENABLE | tnapi->coal_now);
}

static void tg3_napi_disable(struct tg3 *tp)
{
int i;

for (i = tp->irq_cnt - 1; i >= 0; i--)
napi_disable(&tp->napi[i].napi);
}

static void tg3_napi_enable(struct tg3 *tp)
{
int i;

for (i = 0; i < tp->irq_cnt; i++)
napi_enable(&tp->napi[i].napi);
}

static inline void tg3_netif_stop(struct tg3 *tp)
{
tp->dev->trans_start = jiffies; /* prevent tx timeout */
napi_disable(&tp->napi[0].napi);
tg3_napi_disable(tp);
netif_tx_disable(tp->dev);
}

static inline void tg3_netif_start(struct tg3 *tp)
{
struct tg3_napi *tnapi = &tp->napi[0];

/* NOTE: unconditional netif_tx_wake_all_queues is only
* appropriate so long as all callers are assured to
* have free tx slots (such as after tg3_init_hw)
*/
netif_tx_wake_all_queues(tp->dev);

napi_enable(&tnapi->napi);
tnapi->hw_status->status |= SD_STATUS_UPDATED;
tg3_napi_enable(tp);
tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
tg3_enable_ints(tp);
}

Expand Down Expand Up @@ -4958,7 +4972,7 @@ static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
tg3_full_unlock(tp);
del_timer_sync(&tp->timer);
tp->irq_sync = 0;
napi_enable(&tp->napi[0].napi);
tg3_napi_enable(tp);
dev_close(tp->dev);
tg3_full_lock(tp, 0);
}
Expand Down Expand Up @@ -8153,7 +8167,7 @@ static int tg3_open(struct net_device *dev)
if (err)
goto err_out1;

napi_enable(&tp->napi[0].napi);
tg3_napi_enable(tp);

for (i = 0; i < tp->irq_cnt; i++) {
struct tg3_napi *tnapi = &tp->napi[i];
Expand Down Expand Up @@ -8240,7 +8254,7 @@ static int tg3_open(struct net_device *dev)
}

err_out2:
napi_disable(&tp->napi[0].napi);
tg3_napi_disable(tp);
tg3_free_consistent(tp);

err_out1:
Expand Down Expand Up @@ -8486,7 +8500,7 @@ static int tg3_close(struct net_device *dev)
int i;
struct tg3 *tp = netdev_priv(dev);

napi_disable(&tp->napi[0].napi);
tg3_napi_disable(tp);
cancel_work_sync(&tp->reset_task);

netif_tx_stop_all_queues(dev);
Expand Down

0 comments on commit fed9781

Please sign in to comment.