|
From: | Jason Wang |
Subject: | Re: [PATCH 1/2] virtio: add a way to disable a queue |
Date: | Mon, 9 Aug 2021 11:01:27 +0800 |
User-agent: | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 |
在 2021/8/6 下午3:27, Laurent Vivier 写道:
On 06/08/2021 08:25, Jason Wang wrote:在 2021/8/2 下午4:42, Laurent Vivier 写道:On 02/08/2021 06:50, Jason Wang wrote:在 2021/7/30 上午3:19, Laurent Vivier 写道:Add virtio_queue_disable()/virtio_queue_enable() to disable/enable a queue by setting vring.num to 0 (or num_default). This is needed to be able to disable a guest driver from the host sideI suspect this won't work correclty for vhost.With my test it seems to work with vhost too.So setting 0 will lead -EINVAL to be returned during VHOST_SET_VRING_NUM. I think qemu will warn the failure in this case.I didn't see any error when I tried. I will check the code.What's more important, it's not guaranteed to work for the case of vhost-user or vhost-vDPA.Perhaps we can target only the vhost host case, as this is used for failover and usually the virtio-net device is backed by a bridge on same network as the VFIO device?
Probably not, it should be a general feature that can work for all types of virtio/vhost backends.
And I believe we should only do this after the per queue enabling/disabling is supported by the spec. (only MMIO support that AFAIK)I don't want to modify the spec. I need something that works without modifying existing (old) drivers. The idea is to be able to disable the virtio-net kernel driver from QEMU if the driver is too old (i.e. it doesn't support STANDBY feature). Setting vring.num to 0 forces the kernel driver to exit on error in the probe function. It's what I want: the device is present but disabled (the driver is not loaded). Any other suggestion?I think we should probably disable the device instead of doing it per virtqueue.I tried to use virtio_set_disabled() but it doesn't work. Perhaps it's too late when I call the function (I need to do that in virtio_net_set_features()). What I want is to prevent the load of the driver in the guest kernel to hide the virtio-net device. Setting vring.num to 0 triggers an error in the driver probe function and prevents the load of the driver.
How about fail the validate_features() in this case? Thanks
Thanks, Laurent
[Prev in Thread] | Current Thread | [Next in Thread] |