OSDN Git Service

s390/pci: adaptation of iommu to multifunction
authorPierre Morel <pmorel@linux.ibm.com>
Fri, 21 Feb 2020 16:20:46 +0000 (17:20 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 28 Apr 2020 11:49:46 +0000 (13:49 +0200)
In the future the bus sysdata may not directly point to the
zpci_dev.

In preparation of upcoming patches let us abstract the
access to the zpci_dev from the device inside the pci device.

Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/pci.h
drivers/iommu/s390-iommu.c

index 11560bf..0e51919 100644 (file)
@@ -231,6 +231,11 @@ static inline struct zpci_dev *to_zpci(struct pci_dev *pdev)
        return pdev->sysdata;
 }
 
+static inline struct zpci_dev *to_zpci_dev(struct device *dev)
+{
+       return to_zpci(to_pci_dev(dev));
+}
+
 struct zpci_dev *get_zdev_by_fid(u32);
 
 /* DMA */
index 1137f3d..c60d5c7 100644 (file)
@@ -87,7 +87,7 @@ static int s390_iommu_attach_device(struct iommu_domain *domain,
                                    struct device *dev)
 {
        struct s390_domain *s390_domain = to_s390_domain(domain);
-       struct zpci_dev *zdev = to_pci_dev(dev)->sysdata;
+       struct zpci_dev *zdev = to_zpci_dev(dev);
        struct s390_domain_device *domain_device;
        unsigned long flags;
        int rc;
@@ -139,7 +139,7 @@ static void s390_iommu_detach_device(struct iommu_domain *domain,
                                     struct device *dev)
 {
        struct s390_domain *s390_domain = to_s390_domain(domain);
-       struct zpci_dev *zdev = to_pci_dev(dev)->sysdata;
+       struct zpci_dev *zdev = to_zpci_dev(dev);
        struct s390_domain_device *domain_device, *tmp;
        unsigned long flags;
        int found = 0;
@@ -169,7 +169,7 @@ static void s390_iommu_detach_device(struct iommu_domain *domain,
 static int s390_iommu_add_device(struct device *dev)
 {
        struct iommu_group *group = iommu_group_get_for_dev(dev);
-       struct zpci_dev *zdev = to_pci_dev(dev)->sysdata;
+       struct zpci_dev *zdev = to_zpci_dev(dev);
 
        if (IS_ERR(group))
                return PTR_ERR(group);
@@ -182,7 +182,7 @@ static int s390_iommu_add_device(struct device *dev)
 
 static void s390_iommu_remove_device(struct device *dev)
 {
-       struct zpci_dev *zdev = to_pci_dev(dev)->sysdata;
+       struct zpci_dev *zdev = to_zpci_dev(dev);
        struct iommu_domain *domain;
 
        /*