aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rpmsg
diff options
context:
space:
mode:
authorIliyan Malchev <malchev@google.com>2011-08-08 14:08:34 -0700
committerIliyan Malchev <malchev@google.com>2011-08-08 16:32:16 -0700
commit3e4d74437c8f5de7b2e196e7a76218399c2e8fef (patch)
treef2a231bab945db5825ad33bdc794bcb01531d93d /drivers/rpmsg
parent7cff5c54bafd0b237b213b8c3be9757185747197 (diff)
downloadkernel_samsung_espresso10-3e4d74437c8f5de7b2e196e7a76218399c2e8fef.zip
kernel_samsung_espresso10-3e4d74437c8f5de7b2e196e7a76218399c2e8fef.tar.gz
kernel_samsung_espresso10-3e4d74437c8f5de7b2e196e7a76218399c2e8fef.tar.bz2
rpmsg: fix result check on wait_event_interruptible_timeout
Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'drivers/rpmsg')
-rw-r--r--drivers/rpmsg/virtio_rpmsg_bus.c20
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;