]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
virtio: console: make get_inbuf() return port->inbuf if present
authorAmit Shah <amit.shah@redhat.com>
Wed, 14 Sep 2011 07:36:43 +0000 (13:06 +0530)
committerStephen Rothwell <sfr@canb.auug.org.au>
Mon, 24 Oct 2011 20:12:24 +0000 (07:12 +1100)
Instead of pulling in a buffer from the vq each time it's called,
get_inbuf() now checks if the current active buffer, in port->inbuf is
valid.  If it is, just returns a pointer to it.  This ends up
simplifying a lot of code calling get_inbuf() since the check for
port->inbuf being valid was done by all the callers.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/char/virtio_console.c

index 3516aeb7f06cf8b901fb68a9e3552c1d2d69acbf..cb5edf33bebfb24a3f2574216bd0ac088411485b 100644 (file)
@@ -351,11 +351,12 @@ fail:
 static struct port_buffer *get_inbuf(struct port *port)
 {
        struct port_buffer *buf;
-       struct virtqueue *vq;
        unsigned int len;
 
-       vq = port->in_vq;
-       buf = virtqueue_get_buf(vq, &len);
+       if (port->inbuf)
+               return port->inbuf;
+
+       buf = virtqueue_get_buf(port->in_vq, &len);
        if (buf) {
                buf->len = len;
                buf->offset = 0;
@@ -418,18 +419,12 @@ static bool port_has_data(struct port *port)
        unsigned long flags;
        bool ret;
 
+       ret = false;
        spin_lock_irqsave(&port->inbuf_lock, flags);
-       if (port->inbuf) {
-               ret = true;
-               goto out;
-       }
        port->inbuf = get_inbuf(port);
-       if (port->inbuf) {
+       if (port->inbuf)
                ret = true;
-               goto out;
-       }
-       ret = false;
-out:
+
        spin_unlock_irqrestore(&port->inbuf_lock, flags);
        return ret;
 }
@@ -1489,8 +1484,7 @@ static void in_intr(struct virtqueue *vq)
                return;
 
        spin_lock_irqsave(&port->inbuf_lock, flags);
-       if (!port->inbuf)
-               port->inbuf = get_inbuf(port);
+       port->inbuf = get_inbuf(port);
 
        /*
         * Don't queue up data when port is closed.  This condition