linux/drivers/s390/net
Julian Wiedmann 9d6a569a4c s390/qeth: strictly order bridge address events
The current code for bridge address events has two shortcomings in its
control sequence:

1. after disabling address events via PNSO, we don't flush the remaining
   events from the event_wq. So if the feature is re-enabled fast
   enough, stale events could leak over.
2. PNSO and the events' arrival via the READ ccw device are unordered.
   So even if we flushed the workqueue, it's difficult to say whether
   the READ device might produce more events onto the workqueue
   afterwards.

Fix this by
1. explicitly fencing off the events when we no longer care, in the
   READ device's event handler. This ensures that once we flush the
   workqueue, it doesn't get additional address events.
2. Flush the workqueue after disabling the events & fencing them off.
   As the code that triggers the flush will typically hold the sbp_lock,
   we need to rework the worker code to avoid a deadlock here in case
   of a 'notifications-stopped' event. In case of lock contention,
   requeue such an event with a delay. We'll eventually aquire the lock,
   or spot that the feature has been disabled and the event can thus be
   discarded.

This leaves the theoretical race that a stale event could arrive
_after_ we re-enabled ourselves to receive events again. Such an event
would be impossible to distinguish from a 'good' event, nothing we can
do about it.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-08-27 07:42:04 -07:00
..
ctcm_dbug.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_dbug.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_fsms.c s390/ctcm: don't use intparm for channel IO 2019-08-20 13:51:46 -07:00
ctcm_fsms.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_main.c s390/net: remove pm ops from ccwgroup drivers 2020-05-19 12:48:39 -07:00
ctcm_main.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_mpc.c s390/ctcm: don't use intparm for channel IO 2019-08-20 13:51:46 -07:00
ctcm_mpc.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_sysfs.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fsm.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-11-30 08:13:36 -08:00
fsm.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ism_drv.c s390/ism: indicate correct error reason in ism_alloc_dmb() 2020-07-27 10:30:01 -07:00
ism.h net/smc: immediate termination for SMCD link groups 2019-11-15 12:28:28 -08:00
Kconfig s390/qeth: clean up Kconfig help text 2020-05-06 14:11:26 -07:00
lcs.c s390/net: remove pm ops from ccwgroup drivers 2020-05-19 12:48:39 -07:00
lcs.h net: convert lcs_reply.refcnt from atomic_t to refcount_t 2017-12-20 15:23:44 -05:00
Makefile s390/qeth: move ethtool code into its own file 2019-02-15 20:35:29 -08:00
netiucv.c s390/net: remove pm support from iucv drivers 2020-05-19 12:48:39 -07:00
qeth_core_main.c s390/qeth: make queue lock a proper spinlock 2020-08-27 07:42:03 -07:00
qeth_core_mpc.c s390/qeth: constify the MPC initialization data 2020-07-14 14:53:45 -07:00
qeth_core_mpc.h s390/qeth: unify structs for bridge port state 2020-08-27 07:42:03 -07:00
qeth_core_sys.c s390/qeth: clean up error handling for isolation mode cmds 2020-07-14 14:53:45 -07:00
qeth_core.h s390/qeth: strictly order bridge address events 2020-08-27 07:42:04 -07:00
qeth_ethtool.c s390/qeth: add TX IRQ coalescing support for IQD devices 2020-03-25 12:07:15 -07:00
qeth_l2_main.c s390/qeth: strictly order bridge address events 2020-08-27 07:42:04 -07:00
qeth_l2_sys.c s390/qeth: strictly order bridge address events 2020-08-27 07:42:04 -07:00
qeth_l2.h s390/qeth: shift some bridgeport code around 2020-01-26 15:20:32 +01:00
qeth_l3_main.c s390/qeth: clean up qeth_l3_send_setdelmc()'s declaration 2020-08-27 07:42:03 -07:00
qeth_l3_sys.c s390/qeth: remove fake_broadcast attribute 2020-03-27 15:36:56 -07:00
qeth_l3.h s390/qeth: stop yielding the ip_lock during IPv4 registration 2019-12-18 12:34:56 -08:00
smsgiucv_app.c s390: net: add SPDX identifiers to the remaining files 2017-11-24 14:28:43 +01:00
smsgiucv.c s390/net: remove pm support from iucv drivers 2020-05-19 12:48:39 -07:00
smsgiucv.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00