1
0
Fork 0

cxgb4: avoid stall while shutting down the adapter

do not wait for completion while deleting the filters
when the adapter is shutting down because we may not get
the response as interrupts will be disabled.

Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
hifive-unleashed-5.1
Ganesh Goudar 2017-09-21 12:50:47 +05:30 committed by David S. Miller
parent 51957bc53a
commit e1f6198e22
3 changed files with 11 additions and 1 deletions

View File

@ -549,6 +549,7 @@ enum { /* adapter flags */
MASTER_PF = (1 << 7),
FW_OFLD_CONN = (1 << 9),
ROOT_NO_RELAXED_ORDERING = (1 << 10),
SHUTTING_DOWN = (1 << 11),
};
enum {

View File

@ -191,7 +191,8 @@ static int del_filter_wr(struct adapter *adapter, int fidx)
return -ENOMEM;
fwr = __skb_put(skb, len);
t4_mk_filtdelwr(f->tid, fwr, adapter->sge.fw_evtq.abs_id);
t4_mk_filtdelwr(f->tid, fwr, (adapter->flags & SHUTTING_DOWN) ? -1
: adapter->sge.fw_evtq.abs_id);
/* Mark the filter as "pending" and ship off the Filter Work Request.
* When we get the Work Request Reply we'll clear the pending status.
@ -636,6 +637,10 @@ int cxgb4_del_filter(struct net_device *dev, int filter_id)
struct filter_ctx ctx;
int ret;
/* If we are shutting down the adapter do not wait for completion */
if (netdev2adap(dev)->flags & SHUTTING_DOWN)
return __cxgb4_del_filter(dev, filter_id, NULL);
init_completion(&ctx.completion);
ret = __cxgb4_del_filter(dev, filter_id, &ctx);

View File

@ -5254,6 +5254,8 @@ static void remove_one(struct pci_dev *pdev)
return;
}
adapter->flags |= SHUTTING_DOWN;
if (adapter->pf == 4) {
int i;
@ -5339,6 +5341,8 @@ static void shutdown_one(struct pci_dev *pdev)
return;
}
adapter->flags |= SHUTTING_DOWN;
if (adapter->pf == 4) {
int i;