s390/qdio: lock device while installing IRQ handler
authorJulian Wiedmann <jwi@linux.vnet.ibm.com>
Wed, 21 Mar 2018 16:17:14 +0000 (17:17 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 10 Apr 2018 05:38:58 +0000 (07:38 +0200)
During setup, qdio takes control of the presented ccw device and replaces
the device's IRQ handler with its own. To avoid any interference with
conccurent activity on the device, this should be done while holding the
device's lock.

Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/qdio_setup.c

index 98f3cfdc0d027dd0c0e7bcd8d05be86c0fc3a09d..439991d71b146698c90540c5633cfdd0fbe1bc16 100644 (file)
@@ -507,8 +507,10 @@ int qdio_setup_irq(struct qdio_initialize *init_data)
        irq_ptr->aqueue = *ciw;
 
        /* set new interrupt handler */
+       spin_lock_irq(get_ccwdev_lock(irq_ptr->cdev));
        irq_ptr->orig_handler = init_data->cdev->handler;
        init_data->cdev->handler = qdio_int_handler;
+       spin_unlock_irq(get_ccwdev_lock(irq_ptr->cdev));
        return 0;
 out_err:
        qdio_release_memory(irq_ptr);