Commit 3c7a3773 authored by Holger Dengler's avatar Holger Dengler Committed by Alexander Gordeev

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: default avatarHolger Dengler <dengler@linux.ibm.com>
Reviewed-by: default avatarHarald Freudenberger <freude@linux.ibm.com>
Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
parent 170660cc
......@@ -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;
/* 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_device;
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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment