X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=drivers%2Fchar%2Fvirtio_console.c;h=601962b1708b8367c244cc7728651bcf788590ed;hb=c6017e793b93;hp=1b456fe9b87a12f98e8a6d691487c252271cb3e6;hpb=bd2931b5cff6a3bf39bfe15fae051fb8229c0029;p=cascardo%2Flinux.git diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c index 1b456fe9b87a..601962b1708b 100644 --- a/drivers/char/virtio_console.c +++ b/drivers/char/virtio_console.c @@ -1513,18 +1513,22 @@ static void remove_port_data(struct port *port) { struct port_buffer *buf; + spin_lock_irq(&port->inbuf_lock); /* Remove unused data this port might have received. */ discard_port_data(port); - reclaim_consumed_buffers(port); - /* Remove buffers we queued up for the Host to send us data in. */ while ((buf = virtqueue_detach_unused_buf(port->in_vq))) free_buf(buf, true); + spin_unlock_irq(&port->inbuf_lock); + + spin_lock_irq(&port->outvq_lock); + reclaim_consumed_buffers(port); /* Free pending buffers from the out-queue. */ while ((buf = virtqueue_detach_unused_buf(port->out_vq))) free_buf(buf, true); + spin_unlock_irq(&port->outvq_lock); } /*