mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-15 07:04:44 +00:00
tg3: Enable NAPI instances for other int vectors
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>
This commit is contained in:
parent
fe5f5787f0
commit
fed9781081
1 changed files with 23 additions and 9 deletions
|
@ -694,25 +694,39 @@ static void tg3_int_reenable(struct tg3_napi *tnapi)
|
||||||
HOSTCC_MODE_ENABLE | tnapi->coal_now);
|
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)
|
static inline void tg3_netif_stop(struct tg3 *tp)
|
||||||
{
|
{
|
||||||
tp->dev->trans_start = jiffies; /* prevent tx timeout */
|
tp->dev->trans_start = jiffies; /* prevent tx timeout */
|
||||||
napi_disable(&tp->napi[0].napi);
|
tg3_napi_disable(tp);
|
||||||
netif_tx_disable(tp->dev);
|
netif_tx_disable(tp->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void tg3_netif_start(struct tg3 *tp)
|
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
|
/* NOTE: unconditional netif_tx_wake_all_queues is only
|
||||||
* appropriate so long as all callers are assured to
|
* appropriate so long as all callers are assured to
|
||||||
* have free tx slots (such as after tg3_init_hw)
|
* have free tx slots (such as after tg3_init_hw)
|
||||||
*/
|
*/
|
||||||
netif_tx_wake_all_queues(tp->dev);
|
netif_tx_wake_all_queues(tp->dev);
|
||||||
|
|
||||||
napi_enable(&tnapi->napi);
|
tg3_napi_enable(tp);
|
||||||
tnapi->hw_status->status |= SD_STATUS_UPDATED;
|
tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
|
||||||
tg3_enable_ints(tp);
|
tg3_enable_ints(tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4958,7 +4972,7 @@ static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
|
||||||
tg3_full_unlock(tp);
|
tg3_full_unlock(tp);
|
||||||
del_timer_sync(&tp->timer);
|
del_timer_sync(&tp->timer);
|
||||||
tp->irq_sync = 0;
|
tp->irq_sync = 0;
|
||||||
napi_enable(&tp->napi[0].napi);
|
tg3_napi_enable(tp);
|
||||||
dev_close(tp->dev);
|
dev_close(tp->dev);
|
||||||
tg3_full_lock(tp, 0);
|
tg3_full_lock(tp, 0);
|
||||||
}
|
}
|
||||||
|
@ -8153,7 +8167,7 @@ static int tg3_open(struct net_device *dev)
|
||||||
if (err)
|
if (err)
|
||||||
goto err_out1;
|
goto err_out1;
|
||||||
|
|
||||||
napi_enable(&tp->napi[0].napi);
|
tg3_napi_enable(tp);
|
||||||
|
|
||||||
for (i = 0; i < tp->irq_cnt; i++) {
|
for (i = 0; i < tp->irq_cnt; i++) {
|
||||||
struct tg3_napi *tnapi = &tp->napi[i];
|
struct tg3_napi *tnapi = &tp->napi[i];
|
||||||
|
@ -8240,7 +8254,7 @@ static int tg3_open(struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
err_out2:
|
err_out2:
|
||||||
napi_disable(&tp->napi[0].napi);
|
tg3_napi_disable(tp);
|
||||||
tg3_free_consistent(tp);
|
tg3_free_consistent(tp);
|
||||||
|
|
||||||
err_out1:
|
err_out1:
|
||||||
|
@ -8486,7 +8500,7 @@ static int tg3_close(struct net_device *dev)
|
||||||
int i;
|
int i;
|
||||||
struct tg3 *tp = netdev_priv(dev);
|
struct tg3 *tp = netdev_priv(dev);
|
||||||
|
|
||||||
napi_disable(&tp->napi[0].napi);
|
tg3_napi_disable(tp);
|
||||||
cancel_work_sync(&tp->reset_task);
|
cancel_work_sync(&tp->reset_task);
|
||||||
|
|
||||||
netif_tx_stop_all_queues(dev);
|
netif_tx_stop_all_queues(dev);
|
||||||
|
|
Loading…
Reference in a new issue