From: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>

Pass amd_iommu structure as one of the parameter to amd_irte_ops functions
since its needed to activate/deactivate the iommu.

Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
Signed-off-by: Vasant Hegde <vasant.he...@amd.com>
---
 drivers/iommu/amd/amd_iommu_types.h |  6 ++--
 drivers/iommu/amd/iommu.c           | 51 ++++++++++++-----------------
 2 files changed, 24 insertions(+), 33 deletions(-)

diff --git a/drivers/iommu/amd/amd_iommu_types.h 
b/drivers/iommu/amd/amd_iommu_types.h
index 0ef9ecb8d3fc..990272a470aa 100644
--- a/drivers/iommu/amd/amd_iommu_types.h
+++ b/drivers/iommu/amd/amd_iommu_types.h
@@ -999,9 +999,9 @@ struct amd_ir_data {
 
 struct amd_irte_ops {
        void (*prepare)(void *, u32, bool, u8, u32, int);
-       void (*activate)(void *, u16, u16);
-       void (*deactivate)(void *, u16, u16);
-       void (*set_affinity)(void *, u16, u16, u8, u32);
+       void (*activate)(struct amd_iommu *iommu, void *, u16, u16);
+       void (*deactivate)(struct amd_iommu *iommu, void *, u16, u16);
+       void (*set_affinity)(struct amd_iommu *iommu, void *, u16, u16, u8, 
u32);
        void *(*get)(struct irq_remap_table *, int);
        void (*set_allocated)(struct irq_remap_table *, int);
        bool (*is_allocated)(struct irq_remap_table *, int);
diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index 0800d69ef7b4..33b69843b860 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -2929,19 +2929,14 @@ static int alloc_irq_index(u16 devid, int count, bool 
align,
        return index;
 }
 
-static int modify_irte_ga(u16 devid, int index, struct irte_ga *irte,
-                         struct amd_ir_data *data)
+static int modify_irte_ga(struct amd_iommu *iommu, u16 devid, int index,
+                         struct irte_ga *irte, struct amd_ir_data *data)
 {
        bool ret;
        struct irq_remap_table *table;
-       struct amd_iommu *iommu;
        unsigned long flags;
        struct irte_ga *entry;
 
-       iommu = amd_iommu_rlookup_table[devid];
-       if (iommu == NULL)
-               return -EINVAL;
-
        table = get_irq_table(iommu, devid);
        if (!table)
                return -ENOMEM;
@@ -2973,16 +2968,12 @@ static int modify_irte_ga(u16 devid, int index, struct 
irte_ga *irte,
        return 0;
 }
 
-static int modify_irte(u16 devid, int index, union irte *irte)
+static int modify_irte(struct amd_iommu *iommu,
+                      u16 devid, int index, union irte *irte)
 {
        struct irq_remap_table *table;
-       struct amd_iommu *iommu;
        unsigned long flags;
 
-       iommu = amd_iommu_rlookup_table[devid];
-       if (iommu == NULL)
-               return -EINVAL;
-
        table = get_irq_table(iommu, devid);
        if (!table)
                return -ENOMEM;
@@ -3044,49 +3035,49 @@ static void irte_ga_prepare(void *entry,
        irte->lo.fields_remap.valid       = 1;
 }
 
-static void irte_activate(void *entry, u16 devid, u16 index)
+static void irte_activate(struct amd_iommu *iommu, void *entry, u16 devid, u16 
index)
 {
        union irte *irte = (union irte *) entry;
 
        irte->fields.valid = 1;
-       modify_irte(devid, index, irte);
+       modify_irte(iommu, devid, index, irte);
 }
 
-static void irte_ga_activate(void *entry, u16 devid, u16 index)
+static void irte_ga_activate(struct amd_iommu *iommu, void *entry, u16 devid, 
u16 index)
 {
        struct irte_ga *irte = (struct irte_ga *) entry;
 
        irte->lo.fields_remap.valid = 1;
-       modify_irte_ga(devid, index, irte, NULL);
+       modify_irte_ga(iommu, devid, index, irte, NULL);
 }
 
-static void irte_deactivate(void *entry, u16 devid, u16 index)
+static void irte_deactivate(struct amd_iommu *iommu, void *entry, u16 devid, 
u16 index)
 {
        union irte *irte = (union irte *) entry;
 
        irte->fields.valid = 0;
-       modify_irte(devid, index, irte);
+       modify_irte(iommu, devid, index, irte);
 }
 
-static void irte_ga_deactivate(void *entry, u16 devid, u16 index)
+static void irte_ga_deactivate(struct amd_iommu *iommu, void *entry, u16 
devid, u16 index)
 {
        struct irte_ga *irte = (struct irte_ga *) entry;
 
        irte->lo.fields_remap.valid = 0;
-       modify_irte_ga(devid, index, irte, NULL);
+       modify_irte_ga(iommu, devid, index, irte, NULL);
 }
 
-static void irte_set_affinity(void *entry, u16 devid, u16 index,
+static void irte_set_affinity(struct amd_iommu *iommu, void *entry, u16 devid, 
u16 index,
                              u8 vector, u32 dest_apicid)
 {
        union irte *irte = (union irte *) entry;
 
        irte->fields.vector = vector;
        irte->fields.destination = dest_apicid;
-       modify_irte(devid, index, irte);
+       modify_irte(iommu, devid, index, irte);
 }
 
-static void irte_ga_set_affinity(void *entry, u16 devid, u16 index,
+static void irte_ga_set_affinity(struct amd_iommu *iommu, void *entry, u16 
devid, u16 index,
                                 u8 vector, u32 dest_apicid)
 {
        struct irte_ga *irte = (struct irte_ga *) entry;
@@ -3097,7 +3088,7 @@ static void irte_ga_set_affinity(void *entry, u16 devid, 
u16 index,
                                        APICID_TO_IRTE_DEST_LO(dest_apicid);
                irte->hi.fields.destination =
                                        APICID_TO_IRTE_DEST_HI(dest_apicid);
-               modify_irte_ga(devid, index, irte, NULL);
+               modify_irte_ga(iommu, devid, index, irte, NULL);
        }
 }
 
@@ -3386,7 +3377,7 @@ static int irq_remapping_activate(struct irq_domain 
*domain,
        if (!iommu)
                return 0;
 
-       iommu->irte_ops->activate(data->entry, irte_info->devid,
+       iommu->irte_ops->activate(iommu, data->entry, irte_info->devid,
                                  irte_info->index);
        amd_ir_update_irte(irq_data, iommu, data, irte_info, cfg);
        return 0;
@@ -3400,7 +3391,7 @@ static void irq_remapping_deactivate(struct irq_domain 
*domain,
        struct amd_iommu *iommu = data->iommu;
 
        if (iommu)
-               iommu->irte_ops->deactivate(data->entry, irte_info->devid,
+               iommu->irte_ops->deactivate(iommu, data->entry, 
irte_info->devid,
                                            irte_info->index);
 }
 
@@ -3455,7 +3446,7 @@ int amd_iommu_activate_guest_mode(void *data)
        entry->hi.fields.vector            = ir_data->ga_vector;
        entry->lo.fields_vapic.ga_tag      = ir_data->ga_tag;
 
-       return modify_irte_ga(ir_data->irq_2_irte.devid,
+       return modify_irte_ga(ir_data->iommu, ir_data->irq_2_irte.devid,
                              ir_data->irq_2_irte.index, entry, ir_data);
 }
 EXPORT_SYMBOL(amd_iommu_activate_guest_mode);
@@ -3485,7 +3476,7 @@ int amd_iommu_deactivate_guest_mode(void *data)
        entry->hi.fields.destination =
                                APICID_TO_IRTE_DEST_HI(cfg->dest_apicid);
 
-       return modify_irte_ga(ir_data->irq_2_irte.devid,
+       return modify_irte_ga(ir_data->iommu, ir_data->irq_2_irte.devid,
                              ir_data->irq_2_irte.index, entry, ir_data);
 }
 EXPORT_SYMBOL(amd_iommu_deactivate_guest_mode);
@@ -3557,7 +3548,7 @@ static void amd_ir_update_irte(struct irq_data *irqd, 
struct amd_iommu *iommu,
         * Atomically updates the IRTE with the new destination, vector
         * and flushes the interrupt entry cache.
         */
-       iommu->irte_ops->set_affinity(ir_data->entry, irte_info->devid,
+       iommu->irte_ops->set_affinity(iommu, ir_data->entry, irte_info->devid,
                                      irte_info->index, cfg->vector,
                                      cfg->dest_apicid);
 }
-- 
2.27.0

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to