linux/drivers/s390/cio
Julian Wiedmann 1309982414 s390/qdio: add tighter controls for IRQ polling
Once the call to qdio_establish() has completed, qdio is free to deliver
data IRQs to the device driver's IRQ poll handler.

For qeth (the only qdio driver that currently uses IRQ polling) this is
problematic, since the IRQs can arrive before its NAPI instance is
even registered. Calling napi_schedule() from qeth_qdio_start_poll()
then crashes in various nasty ways.

Until recently qeth checked for IFF_UP to drop such early interrupts,
but that's fragile as well since it doesn't enforce any ordering.

Fix this properly by bringing up the qdio device in IRQS_DISABLED mode,
and have the driver explicitly opt-in to receive data IRQs.
qeth does so from qeth_open(), which kick-starts a NAPI poll and then
calls qdio_start_irq() from qeth_poll().

Also add a matching qdio_stop_irq() in qeth_stop() to switch the qdio
dataplane back into a disabled state.

Fixes: 3d35dbe622 ("s390/qeth: don't check for IFF_UP when scheduling napi")
CC: Qian Cai <cai@lca.pw>
Reported-by: Qian Cai <cai@lca.pw>
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Acked-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-03-09 18:16:06 -07:00
..
airq.c s390/airq: use DMA memory for adapter interrupts 2019-06-15 12:25:05 +02:00
blacklist.c s390/cio: cio_ignore_proc_seq_next should increase position index 2020-02-17 18:01:57 +01:00
blacklist.h s390: add a few more SPDX identifiers 2017-12-05 07:51:09 +01:00
ccwgroup.c s390 updates for the 5.4 merge window #2 2019-09-26 11:30:16 -07:00
ccwreq.c s390/cio: add basic protected virtualization support 2019-06-15 12:25:00 +02:00
chp.c s390/cio: use kobj_to_dev() API 2020-02-17 18:01:57 +01:00
chp.h s390/chsc: query utility strings via fmt3 channel path descriptor 2018-03-26 16:13:16 +02:00
chsc_sch.c driver_find_device: Unify the match function with class_find_device() 2019-06-24 05:22:31 +02:00
chsc_sch.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
chsc.c s390/cio: move struct node_descriptor to cio.h 2019-06-19 17:54:27 +02:00
chsc.h s390/cio: add function chsc_sgib() 2019-02-05 14:29:23 +01:00
cio_debug.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-11-13 11:47:01 -08:00
cio.c s390: show statistics for MSI IRQs 2019-04-29 10:47:01 +02:00
cio.h s390/cio: fix virtio-ccw DMA without PV 2019-10-10 10:49:46 +02:00
cmf.c mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
crw.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
css.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
css.h s390/css: reduce stsch calls 2018-07-17 07:27:55 +02:00
device_fsm.c s390/cio: add basic protected virtualization support 2019-06-15 12:25:00 +02:00
device_id.c s390/cio: add basic protected virtualization support 2019-06-15 12:25:00 +02:00
device_ops.c s390/dasd/cio: Interpret ccw_device_get_mdc return value correctly 2019-12-20 11:52:01 -07:00
device_pgid.c s390/cio: add basic protected virtualization support 2019-06-15 12:25:00 +02:00
device_status.c s390/cio: add basic protected virtualization support 2019-06-15 12:25:00 +02:00
device.c s390/cio: fix virtio-ccw DMA without PV 2019-10-10 10:49:46 +02:00
device.h s390/cio: Convert timers to use timer_setup() 2017-11-14 11:01:36 +01:00
eadm_sch.c s390: cio: add SPDX identifiers to the remaining files 2017-11-24 14:28:41 +01:00
eadm_sch.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fcx.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
idset.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
idset.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
io_sch.h s390/cio: add basic protected virtualization support 2019-06-15 12:25:00 +02:00
ioasm.c s390/cio: export hsch to modules 2019-04-24 14:18:51 +02:00
ioasm.h s390: assume diag308 set always works 2018-04-10 07:38:59 +02:00
isc.c s390: cio: add SPDX identifiers to the remaining files 2017-11-24 14:28:41 +01:00
itcw.c s390/cio: fix kernel-doc usage 2018-02-05 07:34:52 +01:00
Makefile vfio-ccw: Refactor how the traces are built 2019-10-17 11:35:56 +02:00
orb.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
qdio_debug.c s390/qdio: simplify ACK tracking 2020-02-10 12:49:35 +01:00
qdio_debug.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-11-13 11:47:01 -08:00
qdio_main.c s390/qdio: simplify ACK tracking 2020-02-10 12:49:35 +01:00
qdio_setup.c s390/qdio: add tighter controls for IRQ polling 2020-03-09 18:16:06 -07:00
qdio_thinint.c s390/qdio: simplify thinint device registration 2019-10-31 17:20:51 +01:00
qdio.h s390/qdio: simplify ACK tracking 2020-02-10 12:49:35 +01:00
scm.c bus_find_device: Unify the match callback with class_find_device 2019-06-24 05:22:31 +02:00
trace.c s390/cio: Remove tracing for rchp instruction 2019-05-08 15:01:22 +02:00
trace.h s390/cio: Remove tracing for rchp instruction 2019-05-08 15:01:22 +02:00
vfio_ccw_async.c vfio-ccw: make vfio_ccw_async_region_ops static 2019-07-29 18:05:03 +02:00
vfio_ccw_cp.c vfio-ccw: Set pa_nr to 0 if memory allocation fails for pa_iova_pfn 2019-07-15 14:16:37 +02:00
vfio_ccw_cp.h vfio-ccw: Refactor how the traces are built 2019-10-17 11:35:56 +02:00
vfio_ccw_drv.c vfio-ccw: fix error return code in vfio_ccw_sch_init() 2019-09-05 15:18:15 +02:00
vfio_ccw_fsm.c vfio-ccw: Rework the io_fctl trace 2019-10-17 11:37:24 +02:00
vfio_ccw_ops.c vfio-ccw: add some logging 2019-08-23 12:53:32 +02:00
vfio_ccw_private.h vfio-ccw: Trace the FSM jumptable 2019-10-17 11:36:29 +02:00
vfio_ccw_trace.c vfio-ccw: Rework the io_fctl trace 2019-10-17 11:37:24 +02:00
vfio_ccw_trace.h vfio-ccw: Use the correct style for SPDX License Identifier 2020-01-07 10:37:34 +01:00