Skip to content

Commit

Permalink
Staging: hv: vmbus: Don't wait indefinitely for IRQ resouces
Browse files Browse the repository at this point in the history
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@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
K. Y. Srinivasan authored and Greg Kroah-Hartman committed Aug 23, 2011
1 parent ab8ac09 commit 2dda95f
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions drivers/staging/hv/vmbus_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,7 @@ MODULE_DEVICE_TABLE(pci, microsoft_hv_pci_table);

static int __init hv_acpi_init(void)
{
int ret;
int ret, t;

init_completion(&probe_event);

Expand All @@ -781,16 +781,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;
}

Expand Down

0 comments on commit 2dda95f

Please sign in to comment.