mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
virtio-bus: Plug devices after features are negotiated
Currently, devices are plugged before features are negotiated. If the backend doesn't support VIRTIO_F_VERSION_1, the transport needs to rewind some settings. This is the case for CCW, for which a post_plugged callback had been introduced, where max_rev field is just updated if VIRTIO_F_VERSION_1 is not supported by the backend. For PCI, implementing post_plugged would be much more complicated, so it needs to know whether the backend supports VIRTIO_F_VERSION_1 at plug time. Currently, nothing is done for PCI. Modern capabilities get exposed to the guest even if VIRTIO_F_VERSION_1 is not supported by the backend, which confuses the guest. This patch replaces existing post_plugged solution with an approach that fits with both transports. Features negotiation is performed before ->device_plugged() call. A pre_plugged callback is introduced so that the transports can set their supported features. Cc: Michael S. Tsirkin <mst@redhat.com> Cc: qemu-stable@nongnu.org Tested-by: Cornelia Huck <cornelia.huck@de.ibm.com> [ccw] Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Reviewed-by: Marcel Apfelbaum <marcel@redhat.com> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
parent
d1eb8f2acb
commit
d1b4259f1a
5 changed files with 62 additions and 28 deletions
|
@ -181,6 +181,11 @@ static inline void virtio_pci_force_virtio_1(VirtIOPCIProxy *proxy)
|
|||
proxy->disable_legacy = ON_OFF_AUTO_ON;
|
||||
}
|
||||
|
||||
static inline void virtio_pci_disable_modern(VirtIOPCIProxy *proxy)
|
||||
{
|
||||
proxy->disable_modern = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* virtio-scsi-pci: This extends VirtioPCIProxy.
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue