diff options
author | Julian Wiedmann | 2019-03-28 16:39:19 +0100 |
---|---|---|
committer | David S. Miller | 2019-03-28 20:57:23 +0100 |
commit | d0c748256611f8612728bcbf9933eb103c077763 (patch) | |
tree | b4efed99d6e5be3da405da9393226f3155808958 /drivers/s390/net/qeth_core.h | |
parent | Merge branch 'net-call-for-phys_port_name-into-devlink-directly-if-possible' (diff) | |
download | kernel-qcow2-linux-d0c748256611f8612728bcbf9933eb103c077763.tar.gz kernel-qcow2-linux-d0c748256611f8612728bcbf9933eb103c077763.tar.xz kernel-qcow2-linux-d0c748256611f8612728bcbf9933eb103c077763.zip |
s390/qeth: defer RX modesetting
.ndo_set_rx_mode gets called in process context, but while holding the
addr_list spinlock. Which means we currently can't sleep while
re-programming the HW, and need to poll for IO completion. That's bad,
in particular since receiving the cmd response can fail silently and
we're then polling until the timeout hits.
As a first step towards eliminating the IO completion polling, run the
RX modeset from a work element and only take the addr_list lock while
updating the RX mode address cache.
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/s390/net/qeth_core.h')
-rw-r--r-- | drivers/s390/net/qeth_core.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h index c851cf6e01c4..c3cf992ca985 100644 --- a/drivers/s390/net/qeth_core.h +++ b/drivers/s390/net/qeth_core.h @@ -780,6 +780,7 @@ struct qeth_card { DECLARE_HASHTABLE(mac_htable, 4); DECLARE_HASHTABLE(ip_htable, 4); DECLARE_HASHTABLE(ip_mc_htable, 4); + struct work_struct rx_mode_work; struct work_struct kernel_thread_starter; spinlock_t thread_mask_lock; unsigned long thread_start_mask; |