aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/virtio/virtio_pci_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/virtio/virtio_pci_common.c')
-rw-r--r--drivers/virtio/virtio_pci_common.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index 457cbe29c8c4..8ae34a34f3af 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -505,7 +505,9 @@ static int virtio_pci_probe(struct pci_dev *pci_dev,
505 if (rc) 505 if (rc)
506 goto err_request_regions; 506 goto err_request_regions;
507 507
508 rc = virtio_pci_legacy_probe(vp_dev); 508 rc = virtio_pci_modern_probe(vp_dev);
509 if (rc == -ENODEV)
510 rc = virtio_pci_legacy_probe(vp_dev);
509 if (rc) 511 if (rc)
510 goto err_probe; 512 goto err_probe;
511 513
@@ -518,7 +520,10 @@ static int virtio_pci_probe(struct pci_dev *pci_dev,
518 return 0; 520 return 0;
519 521
520err_register: 522err_register:
521 virtio_pci_legacy_remove(vp_dev); 523 if (vp_dev->ioaddr)
524 virtio_pci_legacy_remove(vp_dev);
525 else
526 virtio_pci_modern_remove(vp_dev);
522err_probe: 527err_probe:
523 pci_release_regions(pci_dev); 528 pci_release_regions(pci_dev);
524err_request_regions: 529err_request_regions:
@@ -534,7 +539,10 @@ static void virtio_pci_remove(struct pci_dev *pci_dev)
534 539
535 unregister_virtio_device(&vp_dev->vdev); 540 unregister_virtio_device(&vp_dev->vdev);
536 541
537 virtio_pci_legacy_remove(pci_dev); 542 if (vp_dev->ioaddr)
543 virtio_pci_legacy_remove(vp_dev);
544 else
545 virtio_pci_modern_remove(vp_dev);
538 546
539 pci_release_regions(pci_dev); 547 pci_release_regions(pci_dev);
540 pci_disable_device(pci_dev); 548 pci_disable_device(pci_dev);