Re: [PATCH 4/4] kvm tools: Fix virtio console hangs by removing IRQ injection for tx path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Asias He <asias.hejun@xxxxxxxxx> wrote:

> As virtio spec says:
> 
> """
>  Because this is high importance and low bandwidth, the current Linux
>  implementation polls for the buffer to be used, rather than waiting
>  for an interrupt, simplifying the implementation signicantly.
> """
> 
> drivers/char/virtio_console.c
>  send_buf() {
>  ...
> 	/* Tell Host to go! */
> 	virtqueue_kick(out_vq);
>  ...
>         while (!virtqueue_get_buf(out_vq, &len))
>                 cpu_relax();
>  ...
>  }
> 
> The console hangs can simply be reproduced by yes command which
> gives tremendous console IOs and IRQs.
> 
> [   16.786440] irq 4: nobody cared (try booting with the "irqpoll" option)
> [   16.786440] Pid: 1437, comm: yes Tainted: G        W 2.6.39-rc6+ #56
> [   16.786440] Call Trace:
> [   16.786440]  [<c16578eb>] __report_bad_irq+0x30/0x89
> [   16.786440]  [<c10980e6>] note_interrupt+0x118/0x17a
> [   16.786440]  [<c1096e7d>] handle_irq_event_percpu+0x168/0x179
> [   16.786440]  [<c1096eba>] handle_irq_event+0x2c/0x46
> [   16.786440]  [<c1098516>] ? unmask_irq+0x1e/0x1e
> [   16.786440]  [<c1098566>] handle_level_irq+0x50/0x6e
> [   16.786440]  <IRQ>  [<c102fa69>] ? do_IRQ+0x35/0x7f
> [   16.786440]  [<c1665ea9>] ? common_interrupt+0x29/0x30
> [   16.786440]  [<c16610d6>] ? _raw_spin_unlock_irqrestore+0x7/0x28
> [   16.786440]  [<c1364f65>] ? hvc_write+0x88/0x9e
> [   16.786440]  [<c1355500>] ? do_output_char+0x88/0x18a
> [   16.786440]  [<c1355631>] ? process_output+0x2f/0x42
> [   16.786440]  [<c1355af6>] ? n_tty_write+0x211/0x2dc
> [   16.786440]  [<c1059d77>] ? try_to_wake_up+0x226/0x226
> [   16.786440]  [<c13534a4>] ? tty_write+0x15e/0x1d1
> [   16.786440]  [<c12c1644>] ? security_file_permission+0x22/0x26
> [   16.786440]  [<c13558e5>] ? process_echoes+0x241/0x241
> [   16.786440]  [<c10dd9d2>] ? vfs_write+0x84/0xd7
> [   16.786440]  [<c1353346>] ? tty_write_lock+0x3d/0x3d
> [   16.786440]  [<c10ddb92>] ? sys_write+0x3b/0x5d
> [   16.786440]  [<c166594c>] ? sysenter_do_call+0x12/0x22
> [   16.786440] handlers:
> [   16.786440] [<c1351397>] (vp_interrupt+0x0/0x3a)
> [   16.786440] Disabling IRQ #4

Hm, why is irq #4 active if the guest-side virtio console driver does not 
handle it?

> Signed-off-by: Asias He <asias.hejun@xxxxxxxxx>
> ---
>  tools/kvm/virtio/console.c |    2 --
>  1 files changed, 0 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/kvm/virtio/console.c b/tools/kvm/virtio/console.c
> index f5449ba..1fecf37 100644
> --- a/tools/kvm/virtio/console.c
> +++ b/tools/kvm/virtio/console.c
> @@ -171,8 +171,6 @@ static void virtio_console_handle_callback(struct kvm *self, void *param)
>  		len = term_putc_iov(CONSOLE_VIRTIO, iov, out);
>  		virt_queue__set_used_elem(vq, head, len);
>  	}
> -
> -	virt_queue__trigger_irq(vq, virtio_console_pci_device.irq_line, &cdev.isr, self);
>  }

I think this at least requires a comment at that place, that we intentionally 
skip notifying the guest, because Linux guests do not use the console IRQ.

Does the guest-side virtio driver *ever* use the irq?

Thanks,

	Ingo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux