Subject: Re: Query: Is it possible to lose interrupts between vhost and virtio_net during migration?

From: "Zhangjie (HZ)" <[email-masked]>
Date: Thu, 7 Aug 2014 20:47:29 +0800

On 2014/8/5 20:14, Zhangjie (HZ) wrote:
> On 2014/8/5 17:49, Michael S. Tsirkin wrote:
>> On Tue, Aug 05, 2014 at 02:29:28PM +0800, Zhangjie (HZ) wrote:
>>> Jason is right, the new order is not the cause of network unreachable.
>>> Changing order seems not work. After about 40 times, the problem occurs again.
>>> Maybe there is other hidden reasons for that.
> I modified the code to change the order myself yesterday.
> This result is about my code.
>>
>> To make sure, you tested the patch that I posted to list:
>> "vhost_net: stop guest notifiers after backend"?
>>
>> Please confirm.
>>
> OK, I will test with your patch "vhost_net: stop guest notifiers after backend".
> 
Unfortunately, after using the patch "vhost_net: stop guest notifiers after backend",
Linux VMs stopt themselves a few minutes after they were started.
>@@ -308,6 +308,12 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs,
>         goto err;
>     }
>
>+    r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true);
>+    if (r < 0) {
>+        error_report("Error binding guest notifier: %d", -r);
>+        goto err;
>+    }
>+
>     for (i = 0; i < total_queues; i++) {
>         r = vhost_net_start_one(get_vhost_net(ncs[i].peer), dev, i * 2);
>
>@@ -316,12 +322,6 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs,
>         }
>     }
>
>-    r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true);
>-    if (r < 0) {
>-        error_report("Error binding guest notifier: %d", -r);
>-        goto err;
>-    }
>-
>     return 0;
I wonder if k->set_guest_notifiers should be called after "hdev->started = true;" in vhost_dev_start.
-- 
Best Wishes!
Zhang Jie