From mboxrd@z Thu Jan 1 00:00:00 1970 From: Asias He Subject: [PATCH 1/3] kvm tools: Make virtio-net kvm__irq_line thread safe Date: Fri, 29 Apr 2011 14:36:23 +0800 Message-ID: <1304058985-13833-1-git-send-email-asias.hejun@gmail.com> Cc: kvm@vger.kernel.org, Asias He To: Pekka Enberg , Cyrill Gorcunov , Ingo Molnar , Sasha Levin , Prasad Joshi Return-path: Received: from mail-pv0-f174.google.com ([74.125.83.174]:53040 "EHLO mail-pv0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752094Ab1D2Ghy (ORCPT ); Fri, 29 Apr 2011 02:37:54 -0400 Received: by pvg12 with SMTP id 12so2161566pvg.19 for ; Thu, 28 Apr 2011 23:37:54 -0700 (PDT) Sender: kvm-owner@vger.kernel.org List-ID: This patch fixes virtio-net randmom stall host $ scp guest:/root/big.guest . big.guest 42% 440MB 67.7KB/s - stalled - Signed-off-by: Asias He --- tools/kvm/virtio-net.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/kvm/virtio-net.c b/tools/kvm/virtio-net.c index 58b3de4..efe06cb 100644 --- a/tools/kvm/virtio-net.c +++ b/tools/kvm/virtio-net.c @@ -77,9 +77,12 @@ static void virtio_net_rx_callback(struct kvm *self, void *param) head = virt_queue__get_iov(vq, iov, &out, &in, self); len = readv(net_device.tap_fd, iov, in); virt_queue__set_used_elem(vq, head, len); - } - kvm__irq_line(self, VIRTIO_NET_IRQ, 1); + /* We should interrupt guest right now, otherwise latency is huge. */ + mutex_lock(&net_device.mutex); + kvm__irq_line(self, VIRTIO_NET_IRQ, 1); + mutex_unlock(&net_device.mutex); + } } static void virtio_net_tx_callback(struct kvm *self, void *param) @@ -98,7 +101,9 @@ static void virtio_net_tx_callback(struct kvm *self, void *param) virt_queue__set_used_elem(vq, head, len); } + mutex_lock(&net_device.mutex); kvm__irq_line(self, VIRTIO_NET_IRQ, 1); + mutex_unlock(&net_device.mutex); } static bool virtio_net_pci_io_device_specific_in(void *data, unsigned long offset, int size, uint32_t count) -- 1.7.4.4