On 2024/3/28 20:36, Michael S. Tsirkin wrote: >>>> +} >>>> + >>>> static void virtio_pci_bus_reset_hold(Object *obj) >>>> { >>>> PCIDevice *dev = PCI_DEVICE(obj); >>>> DeviceState *qdev = DEVICE(obj); >>>> >>>> + if (virtio_pci_no_soft_reset(dev)) { >>>> + return; >>>> + } >>>> + >>>> virtio_pci_reset(qdev); >>>> >>>> if (pci_is_express(dev)) { >>>> @@ -2484,6 +2511,8 @@ static Property virtio_pci_properties[] = { >>>> VIRTIO_PCI_FLAG_INIT_LNKCTL_BIT, true), >>>> DEFINE_PROP_BIT("x-pcie-pm-init", VirtIOPCIProxy, flags, >>>> VIRTIO_PCI_FLAG_INIT_PM_BIT, true), >>>> + DEFINE_PROP_BIT("x-pcie-pm-no-soft-reset", VirtIOPCIProxy, flags, >>>> + VIRTIO_PCI_FLAG_PM_NO_SOFT_RESET_BIT, false), >>>> DEFINE_PROP_BIT("x-pcie-flr-init", VirtIOPCIProxy, flags, >>>> VIRTIO_PCI_FLAG_INIT_FLR_BIT, true), >>>> DEFINE_PROP_BIT("aer", VirtIOPCIProxy, flags, >>> >>> I am a bit confused about this part. >>> Do you want to make this software controllable? >> Yes, because even the real hardware, this bit is not always set. > > So which virtio devices should and which should not set this bit? This depends on the scenario the virtio-device is used, if we want to trigger an internal soft reset for the virtio-device during S3, this bit shouldn't be set. In my use case on my environment, I don't want to reset virtio-gpu during S3, because once the display resources are destroyed, there are not enough information to re-create them, so this bit should be set. Making this bit software controllable is convenient for users to take their own choices.
> >>> Or should this be set to true by default and then >>> changed to false for old machine types? >> How can I do so? >> Do you mean set this to true by default, and if old machine types don't need >> this bit, they can pass false config to qemu when running qemu? > > No, you would use compat machinery. See how is x-pcie-flr-init handled. > > -- Best regards, Jiqian Chen.