lkml.org 
[lkml]   [2020]   [Jul]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 08/22] rpmsg: virtio_rpmsg_bus: Disable receive virtqueue callback when reading messages
    Date
    Since rpmsg_recv_done() reads messages in a while loop, disable
    callbacks until the while loop exits. This helps to get rid of the
    annoying "uhm, incoming signal, but no used buffer ?" message.

    Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
    ---
    drivers/rpmsg/virtio_rpmsg_bus.c | 14 ++++++++++++++
    1 file changed, 14 insertions(+)

    diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c
    index 376ebbf880d6..2d0d42084ac0 100644
    --- a/drivers/rpmsg/virtio_rpmsg_bus.c
    +++ b/drivers/rpmsg/virtio_rpmsg_bus.c
    @@ -777,6 +777,7 @@ static void rpmsg_recv_done(struct virtqueue *rvq)
    return;
    }

    + virtqueue_disable_cb(rvq);
    while (msg) {
    err = rpmsg_recv_single(vrp, dev, msg, len);
    if (err)
    @@ -786,6 +787,19 @@ static void rpmsg_recv_done(struct virtqueue *rvq)

    msg = virtqueue_get_buf(rvq, &len);
    }
    + virtqueue_enable_cb(rvq);
    +
    + /*
    + * Try to read message one more time in case a new message is submitted
    + * after virtqueue_get_buf() inside the while loop but before enabling
    + * callbacks
    + */
    + msg = virtqueue_get_buf(rvq, &len);
    + if (msg) {
    + err = rpmsg_recv_single(vrp, dev, msg, len);
    + if (!err)
    + msgs_received++;
    + }

    dev_dbg(dev, "Received %u messages\n", msgs_received);

    --
    2.17.1
    \
     
     \ /
      Last update: 2020-07-02 10:26    [W:2.490 / U:0.340 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site