Message ID | 1453903798-28857-1-git-send-email-kraxel@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Jan 27, 2016 at 03:09:58PM +0100, Gerd Hoffmann wrote: > Actually fixes linux not finding virtio 1.0 device virtqueues after > reboot. Which is new I think, any chance linux kernel virtio code > became more strict in 4.3? > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > hw/virtio/virtio-pci.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index 94667e6..8213d94 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -47,6 +47,7 @@ > > static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size, > VirtIOPCIProxy *dev); > +static void virtio_pci_reset(DeviceState *qdev); > > /* virtio device */ > /* DeviceState to VirtIOPCIProxy. For use off data-path. TODO: use QOM. */ > @@ -432,8 +433,7 @@ static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val) > } > > if (vdev->status == 0) { > - virtio_reset(vdev); > - msix_unuse_all_vectors(&proxy->pci_dev); > + virtio_pci_reset(DEVICE(proxy)); > } > > /* Linux before 2.6.34 drives the device without enabling Aren't there two call sites in virtio_ioport_write? > @@ -1351,8 +1351,7 @@ static void virtio_pci_common_write(void *opaque, hwaddr addr, > } > > if (vdev->status == 0) { > - virtio_reset(vdev); > - msix_unuse_all_vectors(&proxy->pci_dev); > + virtio_pci_reset(DEVICE(proxy)); > } > > break; > -- > 1.8.3.1
> > if (vdev->status == 0) { > > - virtio_reset(vdev); > > - msix_unuse_all_vectors(&proxy->pci_dev); > > + virtio_pci_reset(DEVICE(proxy)); > > } > > > > /* Linux before 2.6.34 drives the device without enabling > > Aren't there two call sites in virtio_ioport_write? /me was specifically fixing clear-status code paths mentioned in the commit message. Yes, there is another one, not fully sure what is supposed to happen there. cheers, Gerd
On Thu, Jan 28, 2016 at 10:33:25AM +0100, Gerd Hoffmann wrote: > > > if (vdev->status == 0) { > > > - virtio_reset(vdev); > > > - msix_unuse_all_vectors(&proxy->pci_dev); > > > + virtio_pci_reset(DEVICE(proxy)); > > > } > > > > > > /* Linux before 2.6.34 drives the device without enabling > > > > Aren't there two call sites in virtio_ioport_write? > > /me was specifically fixing clear-status code paths mentioned in the > commit message. > > Yes, there is another one, not fully sure what is supposed to happen > there. > > cheers, > Gerd Same thing really - virtio 0 has two equivalent ways to reset a device: write 0 into status or write 0 into PFN register.
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 94667e6..8213d94 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -47,6 +47,7 @@ static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size, VirtIOPCIProxy *dev); +static void virtio_pci_reset(DeviceState *qdev); /* virtio device */ /* DeviceState to VirtIOPCIProxy. For use off data-path. TODO: use QOM. */ @@ -432,8 +433,7 @@ static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val) } if (vdev->status == 0) { - virtio_reset(vdev); - msix_unuse_all_vectors(&proxy->pci_dev); + virtio_pci_reset(DEVICE(proxy)); } /* Linux before 2.6.34 drives the device without enabling @@ -1351,8 +1351,7 @@ static void virtio_pci_common_write(void *opaque, hwaddr addr, } if (vdev->status == 0) { - virtio_reset(vdev); - msix_unuse_all_vectors(&proxy->pci_dev); + virtio_pci_reset(DEVICE(proxy)); } break;
Actually fixes linux not finding virtio 1.0 device virtqueues after reboot. Which is new I think, any chance linux kernel virtio code became more strict in 4.3? Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/virtio/virtio-pci.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)