Loading drivers/char/virtio_console.c +16 −13 Original line number Diff line number Diff line Loading @@ -379,7 +379,7 @@ static ssize_t send_control_msg(struct port *port, unsigned int event, struct scatterlist sg[1]; struct virtio_console_control cpkt; struct virtqueue *vq; int len; unsigned int len; if (!use_multiport(port->portdev)) return 0; Loading Loading @@ -1071,27 +1071,27 @@ static void config_intr(struct virtio_device *vdev) static unsigned int fill_queue(struct virtqueue *vq, spinlock_t *lock) { struct port_buffer *buf; unsigned int ret; int err; unsigned int nr_added_bufs; int ret; ret = 0; nr_added_bufs = 0; do { buf = alloc_buf(PAGE_SIZE); if (!buf) break; spin_lock_irq(lock); err = add_inbuf(vq, buf); if (err < 0) { ret = add_inbuf(vq, buf); if (ret < 0) { spin_unlock_irq(lock); free_buf(buf); break; } ret++; nr_added_bufs++; spin_unlock_irq(lock); } while (err > 0); } while (ret > 0); return ret; return nr_added_bufs; } static int add_port(struct ports_device *portdev, u32 id) Loading @@ -1100,6 +1100,7 @@ static int add_port(struct ports_device *portdev, u32 id) struct port *port; struct port_buffer *buf; dev_t devt; unsigned int nr_added_bufs; int err; port = kmalloc(sizeof(*port), GFP_KERNEL); Loading Loading @@ -1144,8 +1145,8 @@ static int add_port(struct ports_device *portdev, u32 id) init_waitqueue_head(&port->waitqueue); /* Fill the in_vq with buffers so the host can send us data. */ err = fill_queue(port->in_vq, &port->inbuf_lock); if (!err) { nr_added_bufs = fill_queue(port->in_vq, &port->inbuf_lock); if (!nr_added_bufs) { dev_err(port->dev, "Error allocating inbufs\n"); err = -ENOMEM; goto free_device; Loading Loading @@ -1442,12 +1443,14 @@ static int __devinit virtcons_probe(struct virtio_device *vdev) INIT_LIST_HEAD(&portdev->ports); if (multiport) { unsigned int nr_added_bufs; spin_lock_init(&portdev->cvq_lock); INIT_WORK(&portdev->control_work, &control_work_handler); INIT_WORK(&portdev->config_work, &config_work_handler); err = fill_queue(portdev->c_ivq, &portdev->cvq_lock); if (!err) { nr_added_bufs = fill_queue(portdev->c_ivq, &portdev->cvq_lock); if (!nr_added_bufs) { dev_err(&vdev->dev, "Error allocating buffers for control queue\n"); err = -ENOMEM; Loading Loading
drivers/char/virtio_console.c +16 −13 Original line number Diff line number Diff line Loading @@ -379,7 +379,7 @@ static ssize_t send_control_msg(struct port *port, unsigned int event, struct scatterlist sg[1]; struct virtio_console_control cpkt; struct virtqueue *vq; int len; unsigned int len; if (!use_multiport(port->portdev)) return 0; Loading Loading @@ -1071,27 +1071,27 @@ static void config_intr(struct virtio_device *vdev) static unsigned int fill_queue(struct virtqueue *vq, spinlock_t *lock) { struct port_buffer *buf; unsigned int ret; int err; unsigned int nr_added_bufs; int ret; ret = 0; nr_added_bufs = 0; do { buf = alloc_buf(PAGE_SIZE); if (!buf) break; spin_lock_irq(lock); err = add_inbuf(vq, buf); if (err < 0) { ret = add_inbuf(vq, buf); if (ret < 0) { spin_unlock_irq(lock); free_buf(buf); break; } ret++; nr_added_bufs++; spin_unlock_irq(lock); } while (err > 0); } while (ret > 0); return ret; return nr_added_bufs; } static int add_port(struct ports_device *portdev, u32 id) Loading @@ -1100,6 +1100,7 @@ static int add_port(struct ports_device *portdev, u32 id) struct port *port; struct port_buffer *buf; dev_t devt; unsigned int nr_added_bufs; int err; port = kmalloc(sizeof(*port), GFP_KERNEL); Loading Loading @@ -1144,8 +1145,8 @@ static int add_port(struct ports_device *portdev, u32 id) init_waitqueue_head(&port->waitqueue); /* Fill the in_vq with buffers so the host can send us data. */ err = fill_queue(port->in_vq, &port->inbuf_lock); if (!err) { nr_added_bufs = fill_queue(port->in_vq, &port->inbuf_lock); if (!nr_added_bufs) { dev_err(port->dev, "Error allocating inbufs\n"); err = -ENOMEM; goto free_device; Loading Loading @@ -1442,12 +1443,14 @@ static int __devinit virtcons_probe(struct virtio_device *vdev) INIT_LIST_HEAD(&portdev->ports); if (multiport) { unsigned int nr_added_bufs; spin_lock_init(&portdev->cvq_lock); INIT_WORK(&portdev->control_work, &control_work_handler); INIT_WORK(&portdev->config_work, &config_work_handler); err = fill_queue(portdev->c_ivq, &portdev->cvq_lock); if (!err) { nr_added_bufs = fill_queue(portdev->c_ivq, &portdev->cvq_lock); if (!nr_added_bufs) { dev_err(&vdev->dev, "Error allocating buffers for control queue\n"); err = -ENOMEM; Loading