> This reverts commit 43bb40c5b926 ("virtio_pci: Support surprise removal of > virtio pci device"). > > Virtio drivers and PCI devices have never fully supported true surprise (aka > hot > unplug) removal. Drivers historically continued processing and waiting for > pending I/O and even continued synchronous device reset during surprise > removal. Devices have also continued completing I/Os, doing DMA and allowing > device reset after surprise removal to support such drivers. > > Supporting it correctly would require a new device capability and driver > negotiation in the virtio specification to safely stop I/O and free queue > memory. > Failure to do so either breaks all the existing drivers with call trace > listed in the > commit or crashes the host on continuing the DMA. Hence, until such > specification and devices are invented, restore the previous behavior of > treating > surprise removal as graceful removal to avoid regressions and maintain system > stability same as before the commit 43bb40c5b926 ("virtio_pci: Support > surprise > removal of virtio pci device"). > > As explained above, previous analysis of solving this only in driver was > incomplete and non-reliable at [1] and at [2]; Hence reverting commit > 43bb40c5b926 ("virtio_pci: Support surprise removal of virtio pci device") is > still > the best stand to restore failures of virtio net and block devices. > > [1] > https://lore.kernel.org/virtualization/CY8PR12MB719506CC5613EB100BC6C638 > dc...@cy8pr12mb7195.namprd12.prod.outlook.com/#t > [2] > https://lore.kernel.org/virtualization/20250602024358.57114-1-parav@nvidia.c > om/ > > Fixes: 43bb40c5b926 ("virtio_pci: Support surprise removal of virtio pci > device") > Cc: sta...@vger.kernel.org > Reported-by: lirongq...@baidu.com > Closes: > https://lore.kernel.org/virtualization/c45dd68698cd47238c55fb73ca9b4741@b > aidu.com/ > Signed-off-by: Parav Pandit <pa...@nvidia.com>
Tested-by: Li RongQing <lirongq...@baidu.com> Thanks -Li > --- > drivers/virtio/virtio_pci_common.c | 7 ------- > 1 file changed, 7 deletions(-) > > diff --git a/drivers/virtio/virtio_pci_common.c > b/drivers/virtio/virtio_pci_common.c > index d6d79af44569..dba5eb2eaff9 100644 > --- a/drivers/virtio/virtio_pci_common.c > +++ b/drivers/virtio/virtio_pci_common.c > @@ -747,13 +747,6 @@ static void virtio_pci_remove(struct pci_dev *pci_dev) > struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); > struct device *dev = get_device(&vp_dev->vdev.dev); > > - /* > - * Device is marked broken on surprise removal so that virtio upper > - * layers can abort any ongoing operation. > - */ > - if (!pci_device_is_present(pci_dev)) > - virtio_break_device(&vp_dev->vdev); > - > pci_disable_sriov(pci_dev); > > unregister_virtio_device(&vp_dev->vdev); > -- > 2.26.2