diff options
author | Iliyan Malchev <malchev@google.com> | 2011-08-08 14:08:34 -0700 |
---|---|---|
committer | Iliyan Malchev <malchev@google.com> | 2011-08-08 16:32:16 -0700 |
commit | 3e4d74437c8f5de7b2e196e7a76218399c2e8fef (patch) | |
tree | f2a231bab945db5825ad33bdc794bcb01531d93d /drivers | |
parent | 7cff5c54bafd0b237b213b8c3be9757185747197 (diff) | |
download | kernel_samsung_tuna-3e4d74437c8f5de7b2e196e7a76218399c2e8fef.zip kernel_samsung_tuna-3e4d74437c8f5de7b2e196e7a76218399c2e8fef.tar.gz kernel_samsung_tuna-3e4d74437c8f5de7b2e196e7a76218399c2e8fef.tar.bz2 |
rpmsg: fix result check on wait_event_interruptible_timeout
Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/rpmsg/virtio_rpmsg_bus.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c index 1fb8759..33d3a49 100644 --- a/drivers/rpmsg/virtio_rpmsg_bus.c +++ b/drivers/rpmsg/virtio_rpmsg_bus.c @@ -463,22 +463,30 @@ int rpmsg_send_offchannel_raw(struct rpmsg_channel *rpdev, u32 src, u32 dst, return -ENOMEM; /* no free buffer ? wait for one (but bail after 15 seconds) */ - while (!msg) { + if (!msg) { /* enable "tx-complete" interrupts before dozing off */ virtqueue_enable_cb(vrp->svq); + /* * sleep until a free buffer is available or 15 secs elapse. * the timeout period is not configurable because frankly * i don't see why drivers need to deal with that. * if later this happens to be required, it'd be easy to add. */ - if (wait_event_interruptible_timeout(vrp->sendq, + err = wait_event_interruptible_timeout(vrp->sendq, (msg = get_a_buf(vrp)), - msecs_to_jiffies(15000))) - return -ERESTARTSYS; + msecs_to_jiffies(15000)); + /* on success, suppress "tx-complete" interrupts again */ - if (msg) - virtqueue_disable_cb(vrp->svq); + virtqueue_disable_cb(vrp->svq); + + if (err < 0) + return -ERESTARTSYS; + + if (!msg) { + dev_err(dev, "timeout waiting for buffer\n"); + return -ETIMEDOUT; + } } msg->len = len; |