Message ID | 20220727161445.21428-1-mst@redhat.com |
---|---|
State | New |
Headers | show |
Series | virtio-pci: don't touch pci on virtio reset | expand |
testing it now... Thanks! C On 7/27/22 18:14, Michael S. Tsirkin wrote: > virtio level reset should not affect pci express > registers such as PM, error or link. > > Fixes: 27ce0f3afc ("hw/virtio: fix Power Management Control Register for PCI Express virtio devices") > Fixes: d584f1b9ca ("hw/virtio: fix Link Control Register for PCI Express virtio devices") > Fixes: c2cabb3422 ("hw/virtio: fix error enabling flags in Device Control register") > Cc: "Marcel Apfelbaum" <marcel@redhat.com> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com> > --- > hw/virtio/virtio-pci.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index 45327f0b31..3189ec014d 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -1955,6 +1955,13 @@ static void virtio_pci_reset(DeviceState *qdev) > proxy->vqs[i].avail[0] = proxy->vqs[i].avail[1] = 0; > proxy->vqs[i].used[0] = proxy->vqs[i].used[1] = 0; > } > +} > + > +static void virtio_pci_bus_reset(DeviceState *qdev) > +{ > + PCIDevice *dev = PCI_DEVICE(qdev); > + > + virtio_pci_reset(qdev); > > if (pci_is_express(dev)) { > pcie_cap_deverr_reset(dev); > @@ -2022,7 +2029,7 @@ static void virtio_pci_class_init(ObjectClass *klass, void *data) > k->class_id = PCI_CLASS_OTHERS; > device_class_set_parent_realize(dc, virtio_pci_dc_realize, > &vpciklass->parent_dc_realize); > - dc->reset = virtio_pci_reset; > + dc->reset = virtio_pci_bus_reset; > } > > static const TypeInfo virtio_pci_info = {
Hmm, no that's not it, still segfault in ovs, but I'll try to see if I can merge that and the workaround I am currently using... On 7/27/22 19:14, Claudio Fontana wrote: > testing it now... > > Thanks! > > C > > > On 7/27/22 18:14, Michael S. Tsirkin wrote: >> virtio level reset should not affect pci express >> registers such as PM, error or link. >> >> Fixes: 27ce0f3afc ("hw/virtio: fix Power Management Control Register for PCI Express virtio devices") >> Fixes: d584f1b9ca ("hw/virtio: fix Link Control Register for PCI Express virtio devices") >> Fixes: c2cabb3422 ("hw/virtio: fix error enabling flags in Device Control register") >> Cc: "Marcel Apfelbaum" <marcel@redhat.com> >> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> >> --- >> hw/virtio/virtio-pci.c | 9 ++++++++- >> 1 file changed, 8 insertions(+), 1 deletion(-) >> >> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c >> index 45327f0b31..3189ec014d 100644 >> --- a/hw/virtio/virtio-pci.c >> +++ b/hw/virtio/virtio-pci.c >> @@ -1955,6 +1955,13 @@ static void virtio_pci_reset(DeviceState *qdev) >> proxy->vqs[i].avail[0] = proxy->vqs[i].avail[1] = 0; >> proxy->vqs[i].used[0] = proxy->vqs[i].used[1] = 0; >> } >> +} >> + >> +static void virtio_pci_bus_reset(DeviceState *qdev) >> +{ >> + PCIDevice *dev = PCI_DEVICE(qdev); >> + >> + virtio_pci_reset(qdev); >> >> if (pci_is_express(dev)) { >> pcie_cap_deverr_reset(dev); >> @@ -2022,7 +2029,7 @@ static void virtio_pci_class_init(ObjectClass *klass, void *data) >> k->class_id = PCI_CLASS_OTHERS; >> device_class_set_parent_realize(dc, virtio_pci_dc_realize, >> &vpciklass->parent_dc_realize); >> - dc->reset = virtio_pci_reset; >> + dc->reset = virtio_pci_bus_reset; >> } >> >> static const TypeInfo virtio_pci_info = { > >
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 45327f0b31..3189ec014d 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1955,6 +1955,13 @@ static void virtio_pci_reset(DeviceState *qdev) proxy->vqs[i].avail[0] = proxy->vqs[i].avail[1] = 0; proxy->vqs[i].used[0] = proxy->vqs[i].used[1] = 0; } +} + +static void virtio_pci_bus_reset(DeviceState *qdev) +{ + PCIDevice *dev = PCI_DEVICE(qdev); + + virtio_pci_reset(qdev); if (pci_is_express(dev)) { pcie_cap_deverr_reset(dev); @@ -2022,7 +2029,7 @@ static void virtio_pci_class_init(ObjectClass *klass, void *data) k->class_id = PCI_CLASS_OTHERS; device_class_set_parent_realize(dc, virtio_pci_dc_realize, &vpciklass->parent_dc_realize); - dc->reset = virtio_pci_reset; + dc->reset = virtio_pci_bus_reset; } static const TypeInfo virtio_pci_info = {
virtio level reset should not affect pci express registers such as PM, error or link. Fixes: 27ce0f3afc ("hw/virtio: fix Power Management Control Register for PCI Express virtio devices") Fixes: d584f1b9ca ("hw/virtio: fix Link Control Register for PCI Express virtio devices") Fixes: c2cabb3422 ("hw/virtio: fix error enabling flags in Device Control register") Cc: "Marcel Apfelbaum" <marcel@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> --- hw/virtio/virtio-pci.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)