On Thu, Apr 20, 2023 at 03:52:49PM +0100, Andre Przywara wrote: > > struct net_dev { > > @@ -647,11 +644,7 @@ static void exit_vq(struct kvm *kvm, void *dev, u32 vq) > > struct net_dev *ndev = dev; > > struct net_dev_queue *queue = &ndev->queues[vq]; > > > > - if (!is_ctrl_vq(ndev, vq) && queue->gsi) { > > So this first condition here seems to be lost in the transformation. Is > or was that never needed? Hm, good question. The theory is that it was never needed, because the control virtqueue is owned by kvmtool and not vhost, so we never set queue->gsi for the control queue, in which case virtio_vhost_reset_vring() is a nop. However in net, notify_vq_gsi() doesn't actually check which vq this is, and does set queue->gsi for the control queue. It's a bug but hasn't caused trouble so far because the Linux guest doesn't setup MSIs for the control queue (it polls the queue until the command completes). I'll add a check to notify_vq_gsi(). > Apart from that the changes look fine. > Thanks for reviewing this! Jean