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;
        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;
        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;
                                        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);
        }
 }
 
        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;
        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);
 }
 
        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);
        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);
         * 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);
 }