mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
s390/ap: swap IRQ and bus/device registration
The IRQ handler may rely on the bus or the root device. Register the adapter IRQ after setting up the bus and the root device to avoid any race conditions. Signed-off-by: Holger Dengler <dengler@linux.ibm.com> Reviewed-by: Harald Freudenberger <freude@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
parent
170660ccf8
commit
3c7a377324
@ -2400,15 +2400,10 @@ static int __init ap_module_init(void)
|
||||
ap_domain_index = -1;
|
||||
}
|
||||
|
||||
/* enable interrupts if available */
|
||||
rc = ap_irq_init();
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
/* Create /sys/bus/ap. */
|
||||
rc = bus_register(&ap_bus_type);
|
||||
if (rc)
|
||||
goto out_irq;
|
||||
goto out;
|
||||
|
||||
/* Create /sys/devices/ap. */
|
||||
ap_root_device = root_device_register("ap");
|
||||
@ -2417,19 +2412,24 @@ static int __init ap_module_init(void)
|
||||
goto out_bus;
|
||||
ap_root_device->bus = &ap_bus_type;
|
||||
|
||||
/* Setup asynchronous work (timers, workqueue, etc). */
|
||||
rc = ap_async_init();
|
||||
/* enable interrupts if available */
|
||||
rc = ap_irq_init();
|
||||
if (rc)
|
||||
goto out_device;
|
||||
|
||||
/* Setup asynchronous work (timers, workqueue, etc). */
|
||||
rc = ap_async_init();
|
||||
if (rc)
|
||||
goto out_irq;
|
||||
|
||||
return 0;
|
||||
|
||||
out_irq:
|
||||
ap_irq_exit();
|
||||
out_device:
|
||||
root_device_unregister(ap_root_device);
|
||||
out_bus:
|
||||
bus_unregister(&ap_bus_type);
|
||||
out_irq:
|
||||
ap_irq_exit();
|
||||
out:
|
||||
ap_debug_exit();
|
||||
return rc;
|
||||
|
Loading…
Reference in New Issue
Block a user