Explorar o código

s390/qdio: lock device while installing IRQ handler

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>
Julian Wiedmann %!s(int64=7) %!d(string=hai) anos
pai
achega
7eee12b44e
Modificáronse 1 ficheiros con 2 adicións e 0 borrados
  1. 2 0
      drivers/s390/cio/qdio_setup.c

+ 2 - 0
drivers/s390/cio/qdio_setup.c

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