diff options
author | Shaun Ruffell <sruffell@digium.com> | 2010-02-08 22:49:32 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2010-02-08 22:49:32 +0000 |
commit | 42e275be0f7ce08a9fe2adf4815f7fd926a341bb (patch) | |
tree | 7aa554e74ca4bf83805d382073efc91967f27f6c /drivers/dahdi/vpmadt032_loader | |
parent | 791a3df5afe66a8cbe15ebe030c2956fd2e00818 (diff) |
vpmadt032,wcte12xp: Use a timeout on the read/write commands and during load.
It is possible for poorly behaving hardware (and driver bugs) to lockup the
modprobe process by having it wait indefinitely for a command to complete that
never will. DAHDI-451.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@8003 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/vpmadt032_loader')
-rw-r--r-- | drivers/dahdi/vpmadt032_loader/dahdi_vpmadt032_loader.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/dahdi/vpmadt032_loader/dahdi_vpmadt032_loader.c b/drivers/dahdi/vpmadt032_loader/dahdi_vpmadt032_loader.c index d64931f..2aa15e9 100644 --- a/drivers/dahdi/vpmadt032_loader/dahdi_vpmadt032_loader.c +++ b/drivers/dahdi/vpmadt032_loader/dahdi_vpmadt032_loader.c @@ -116,13 +116,17 @@ static int vpmadt032_load_firmware(struct voicebus *vb) pci_set_drvdata(vb->pdev, ctx); old = vb->ops; vb->ops = &loader_operations; - wait_for_completion(&ctx->done); + if (wait_for_completion_timeout(&ctx->done, HZ*2)) { + dev_err(&vb->pdev->dev, + "Timeout waiting for load in %s.\n", __func__); + ret = -EIO; + } vb->ops = old; pci_set_drvdata(vb->pdev, old_drvdata); __vpmadt032_cleanup(ctx->pvt); error_exit: kfree(ctx); - return 0; + return ret; } static struct vpmadt_loader loader = { |