K. Y. Srinivasan
2011-Jul-15 20:38 UTC
[PATCH 1/1] Staging: hv: vmbus: Don't wait indefinitely for IRQ resouces
If an attempt is made to load the vmbus driver on a non-Hyper-V platform, the load operation will hang since we currently wait indefinitely to retrieve the IRQ information. This is done in the context of an acpi callback context (which will obviously not happen when this driver is loaded on a non-Hyper-V platform). This patch fixes the problem. Signed-off-by: K. Y. Srinivasan <kys at microsoft.com> Signed-off-by: Haiyang Zhang <haiyangz at microsoft.com> --- drivers/staging/hv/vmbus_drv.c | 19 ++++++++++++++----- 1 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c index 433be51..b382829 100644 --- a/drivers/staging/hv/vmbus_drv.c +++ b/drivers/staging/hv/vmbus_drv.c @@ -702,7 +702,7 @@ static struct acpi_driver vmbus_acpi_driver = { static int __init hv_acpi_init(void) { - int ret; + int ret, t; init_completion(&probe_event); @@ -715,16 +715,25 @@ static int __init hv_acpi_init(void) if (ret) return ret; - wait_for_completion(&probe_event); + t = wait_for_completion_timeout(&probe_event, 5*HZ); + if (t == 0) { + ret = -ETIMEDOUT; + goto cleanup; + } if (irq <= 0) { - acpi_bus_unregister_driver(&vmbus_acpi_driver); - return -ENODEV; + ret = -ENODEV; + goto cleanup; } ret = vmbus_bus_init(irq); if (ret) - acpi_bus_unregister_driver(&vmbus_acpi_driver); + goto cleanup; + + return 0; + +cleanup: + acpi_bus_unregister_driver(&vmbus_acpi_driver); return ret; } -- 1.7.4.1
Seemingly Similar Threads
- [PATCH 1/1] Staging: hv: vmbus: Don't wait indefinitely for IRQ resouces
- [PATCH 4.14 065/159] x86/virt: Add enum for hypervisors to replace x86_hyper
- [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper
- [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper
- [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper