From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heinz Graalfs Subject: [PATCH RFC 3/7] virtio_net: avoid cpu_relax() call loop in case virtqueue is broken Date: Tue, 22 Oct 2013 14:45:07 +0200 Message-ID: <1382445911-55657-4-git-send-email-graalfs@linux.vnet.ibm.com> References: <1382445911-55657-1-git-send-email-graalfs@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1382445911-55657-1-git-send-email-graalfs@linux.vnet.ibm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: rusty@rustcorp.com.au, mst@redhat.com, virtualization@lists.linux-foundation.org Cc: borntraeger@de.ibm.com List-Id: virtualization@lists.linuxfoundation.org A virtqueue_kick() call to notify a host might fail in case the network device was hot-unplugged. Spinning for a response for a VIRTIO_NET_CTRL_VLAN_DEL command response will end up in a never ending loop waiting for a response. This patch avoids the cpu_relax() loop in case the virtqueue is flagged as broken. Signed-off-by: Heinz Graalfs --- drivers/net/virtio_net.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index ab2e5d0..57f5f13 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -800,8 +800,10 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd, /* Spin for a response, the kick causes an ioport write, trapping * into the hypervisor, so the request should be handled immediately. + * Do not wait for a response in case the virtqueue is 'broken'. */ - while (!virtqueue_get_buf(vi->cvq, &tmp)) + while (!virtqueue_get_buf(vi->cvq, &tmp) + && !virtqueue_is_broken(vi->cvq)) cpu_relax(); return status == VIRTIO_NET_OK; -- 1.8.3.1