Pass-through devices to VM guest can get updated IRQ affinity
information via irq_set_affinity() when not running in guest mode.
Currently, AMD IOMMU driver in GA mode ignores the updated information
if the pass-through device is setup to use vAPIC regardless of guest_mode.
This could cause invalid interrupt remapping.
Also, the guest_mode bit should be set and cleared only when
SVM updates posted-interrupt interrupt remapping information.
Signed-off-by: Suravee Suthikulpanit <[email protected]>
Cc: Joerg Roedel <[email protected]>
---
Changes in v2:
* Fix compiler warning of unused variable 'dev_data' in
irte_ga_prepare().
drivers/iommu/amd_iommu.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index b17536d6..3f25d88 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -3879,11 +3879,9 @@ static void irte_ga_prepare(void *entry,
u8 vector, u32 dest_apicid, int devid)
{
struct irte_ga *irte = (struct irte_ga *) entry;
- struct iommu_dev_data *dev_data = search_dev_data(devid);
irte->lo.val = 0;
irte->hi.val = 0;
- irte->lo.fields_remap.guest_mode = dev_data ? dev_data->use_vapic : 0;
irte->lo.fields_remap.int_type = delivery_mode;
irte->lo.fields_remap.dm = dest_mode;
irte->hi.fields.vector = vector;
@@ -3939,10 +3937,10 @@ static void irte_ga_set_affinity(void *entry, u16 devid, u16 index,
struct irte_ga *irte = (struct irte_ga *) entry;
struct iommu_dev_data *dev_data = search_dev_data(devid);
- if (!dev_data || !dev_data->use_vapic) {
+ if (!dev_data || !dev_data->use_vapic ||
+ !irte->lo.fields_remap.guest_mode) {
irte->hi.fields.vector = vector;
irte->lo.fields_remap.destination = dest_apicid;
- irte->lo.fields_remap.guest_mode = 0;
modify_irte_ga(devid, index, irte, NULL);
}
}
--
1.8.3.1
Hi Suravee,
On Mon, Jun 26, 2017 at 04:28:04AM -0500, Suravee Suthikulpanit wrote:
> Pass-through devices to VM guest can get updated IRQ affinity
> information via irq_set_affinity() when not running in guest mode.
> Currently, AMD IOMMU driver in GA mode ignores the updated information
> if the pass-through device is setup to use vAPIC regardless of guest_mode.
> This could cause invalid interrupt remapping.
>
> Also, the guest_mode bit should be set and cleared only when
> SVM updates posted-interrupt interrupt remapping information.
>
> Signed-off-by: Suravee Suthikulpanit <[email protected]>
> Cc: Joerg Roedel <[email protected]>
Can you please provide a 'Fixes:' tag too? No need to resend the whole
patch, just reply with the tag and I'll add it when applying this patch.
Thanks,
Joerg
On Mon, Jun 26, 2017 at 04:28:04AM -0500, Suravee Suthikulpanit wrote:
> Pass-through devices to VM guest can get updated IRQ affinity
> information via irq_set_affinity() when not running in guest mode.
> Currently, AMD IOMMU driver in GA mode ignores the updated information
> if the pass-through device is setup to use vAPIC regardless of guest_mode.
> This could cause invalid interrupt remapping.
>
> Also, the guest_mode bit should be set and cleared only when
> SVM updates posted-interrupt interrupt remapping information.
>
> Signed-off-by: Suravee Suthikulpanit <[email protected]>
> Cc: Joerg Roedel <[email protected]>
Nervermind, I added this fixes line and applied the patch:
Fixes: d98de49a53e48 ('iommu/amd: Enable vAPIC interrupt remapping mode by default'
On 6/28/17 19:44, Joerg Roedel wrote:
> On Mon, Jun 26, 2017 at 04:28:04AM -0500, Suravee Suthikulpanit wrote:
>> Pass-through devices to VM guest can get updated IRQ affinity
>> information via irq_set_affinity() when not running in guest mode.
>> Currently, AMD IOMMU driver in GA mode ignores the updated information
>> if the pass-through device is setup to use vAPIC regardless of guest_mode.
>> This could cause invalid interrupt remapping.
>>
>> Also, the guest_mode bit should be set and cleared only when
>> SVM updates posted-interrupt interrupt remapping information.
>>
>> Signed-off-by: Suravee Suthikulpanit <[email protected]>
>> Cc: Joerg Roedel <[email protected]>
>
> Nervermind, I added this fixes line and applied the patch:
>
> Fixes: d98de49a53e48 ('iommu/amd: Enable vAPIC interrupt remapping mode by default'
>
Thanks,
Suravee