diff options
Diffstat (limited to 'drivers/virtio/virtio_pci_common.c')
-rw-r--r-- | drivers/virtio/virtio_pci_common.c | 14 |
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 | ||
520 | err_register: | 522 | err_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); | ||
522 | err_probe: | 527 | err_probe: |
523 | pci_release_regions(pci_dev); | 528 | pci_release_regions(pci_dev); |
524 | err_request_regions: | 529 | err_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); |