s390/qeth: invoke softirqs after napi_schedule()
Calling napi_schedule() from process context does not ensure that the NET_RX softirq is run in a timely fashion. So trigger it manually. This is no big issue with current code. A call to ndo_open() is usually followed by a ndo_set_rx_mode() call, and for qeth this contains a spin_unlock_bh(). Except for OSN, where qeth_l2_set_rx_mode() bails out early. Nevertheless it's best to not depend on this behaviour, and just fix the issue at its source like all other drivers do. For instance see commit83a0c6e589
("i40e: Invoke softirqs after napi_reschedule"). Fixes:a1c3ed4c9c
("qeth: NAPI support for l2 and l3 discipline") Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
121ca39aa5
commit
4d19db777a
|
@ -755,7 +755,10 @@ static int __qeth_l2_open(struct net_device *dev)
|
|||
|
||||
if (qdio_stop_irq(card->data.ccwdev, 0) >= 0) {
|
||||
napi_enable(&card->napi);
|
||||
local_bh_disable();
|
||||
napi_schedule(&card->napi);
|
||||
/* kick-start the NAPI softirq: */
|
||||
local_bh_enable();
|
||||
} else
|
||||
rc = -EIO;
|
||||
return rc;
|
||||
|
|
|
@ -2293,7 +2293,10 @@ static int __qeth_l3_open(struct net_device *dev)
|
|||
|
||||
if (qdio_stop_irq(card->data.ccwdev, 0) >= 0) {
|
||||
napi_enable(&card->napi);
|
||||
local_bh_disable();
|
||||
napi_schedule(&card->napi);
|
||||
/* kick-start the NAPI softirq: */
|
||||
local_bh_enable();
|
||||
} else
|
||||
rc = -EIO;
|
||||
return rc;
|
||||
|
|
Loading…
Reference in New Issue