diff options
author | Roland Dreier <rolandd@cisco.com> | 2006-06-17 23:37:30 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2006-06-17 23:37:30 -0400 |
commit | e9cd59418f049966a690372c4919e98c88bb119b (patch) | |
tree | 7624e7d85f4f927692771483a763dafa9f8bb8d5 /drivers/infiniband/hw | |
parent | f5358a172f79e3f995919224401b25637f4324f6 (diff) |
IB/mthca: Convert FW commands to use wait_for_completion_timeout()
The kernel has had wait_for_completion_timeout() for a long time now.
mthca should use it to handle FW commands timing out, instead of
implementing the same thing in a much more complicated way by using
wait_for_completion() along with a timer that does complete().
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_cmd.c | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c index 798e13e14faf..d0f7731802c9 100644 --- a/drivers/infiniband/hw/mthca/mthca_cmd.c +++ b/drivers/infiniband/hw/mthca/mthca_cmd.c | |||
@@ -174,7 +174,6 @@ enum { | |||
174 | 174 | ||
175 | struct mthca_cmd_context { | 175 | struct mthca_cmd_context { |
176 | struct completion done; | 176 | struct completion done; |
177 | struct timer_list timer; | ||
178 | int result; | 177 | int result; |
179 | int next; | 178 | int next; |
180 | u64 out_param; | 179 | u64 out_param; |
@@ -362,15 +361,6 @@ void mthca_cmd_event(struct mthca_dev *dev, | |||
362 | complete(&context->done); | 361 | complete(&context->done); |
363 | } | 362 | } |
364 | 363 | ||
365 | static void event_timeout(unsigned long context_ptr) | ||
366 | { | ||
367 | struct mthca_cmd_context *context = | ||
368 | (struct mthca_cmd_context *) context_ptr; | ||
369 | |||
370 | context->result = -EBUSY; | ||
371 | complete(&context->done); | ||
372 | } | ||
373 | |||
374 | static int mthca_cmd_wait(struct mthca_dev *dev, | 364 | static int mthca_cmd_wait(struct mthca_dev *dev, |
375 | u64 in_param, | 365 | u64 in_param, |
376 | u64 *out_param, | 366 | u64 *out_param, |
@@ -401,11 +391,10 @@ static int mthca_cmd_wait(struct mthca_dev *dev, | |||
401 | if (err) | 391 | if (err) |
402 | goto out; | 392 | goto out; |
403 | 393 | ||
404 | context->timer.expires = jiffies + timeout; | 394 | if (!wait_for_completion_timeout(&context->done, timeout)) { |
405 | add_timer(&context->timer); | 395 | err = -EBUSY; |
406 | 396 | goto out; | |
407 | wait_for_completion(&context->done); | 397 | } |
408 | del_timer_sync(&context->timer); | ||
409 | 398 | ||
410 | err = context->result; | 399 | err = context->result; |
411 | if (err) | 400 | if (err) |
@@ -535,10 +524,6 @@ int mthca_cmd_use_events(struct mthca_dev *dev) | |||
535 | for (i = 0; i < dev->cmd.max_cmds; ++i) { | 524 | for (i = 0; i < dev->cmd.max_cmds; ++i) { |
536 | dev->cmd.context[i].token = i; | 525 | dev->cmd.context[i].token = i; |
537 | dev->cmd.context[i].next = i + 1; | 526 | dev->cmd.context[i].next = i + 1; |
538 | init_timer(&dev->cmd.context[i].timer); | ||
539 | dev->cmd.context[i].timer.data = | ||
540 | (unsigned long) &dev->cmd.context[i]; | ||
541 | dev->cmd.context[i].timer.function = event_timeout; | ||
542 | } | 527 | } |
543 | 528 | ||
544 | dev->cmd.context[dev->cmd.max_cmds - 1].next = -1; | 529 | dev->cmd.context[dev->cmd.max_cmds - 1].next = -1; |