diff options
Diffstat (limited to 'arch/s390/pci/pci.c')
| -rw-r--r-- | arch/s390/pci/pci.c | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c index ddb9923fb45d..a25d95a6612d 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c @@ -772,6 +772,7 @@ void pcibios_remove_bus(struct pci_bus *bus)  	zpci_exit_slot(zdev);  	zpci_cleanup_bus_resources(zdev); +	zpci_destroy_iommu(zdev);  	zpci_free_domain(zdev);  	spin_lock(&zpci_list_lock); @@ -844,11 +845,15 @@ int zpci_create_device(struct zpci_dev *zdev)  	if (rc)  		goto out; +	rc = zpci_init_iommu(zdev); +	if (rc) +		goto out_free; +  	mutex_init(&zdev->lock);  	if (zdev->state == ZPCI_FN_STATE_CONFIGURED) {  		rc = zpci_enable_device(zdev);  		if (rc) -			goto out_free; +			goto out_destroy_iommu;  	}  	rc = zpci_scan_bus(zdev);  	if (rc) @@ -865,6 +870,8 @@ int zpci_create_device(struct zpci_dev *zdev)  out_disable:  	if (zdev->state == ZPCI_FN_STATE_ONLINE)  		zpci_disable_device(zdev); +out_destroy_iommu: +	zpci_destroy_iommu(zdev);  out_free:  	zpci_free_domain(zdev);  out:  | 
