lkml.org 
[lkml]   [2020]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 149/151] iommu/amd: Fix IOMMU AVIC not properly update the is_run bit in IRTE
    Date
    From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>

    commit 730ad0ede130015a773229573559e97ba0943065 upstream.

    Commit b9c6ff94e43a ("iommu/amd: Re-factor guest virtual APIC
    (de-)activation code") accidentally left out the ir_data pointer when
    calling modity_irte_ga(), which causes the function amd_iommu_update_ga()
    to return prematurely due to struct amd_ir_data.ref is NULL and
    the "is_run" bit of IRTE does not get updated properly.

    This results in bad I/O performance since IOMMU AVIC always generate GA Log
    entry and notify IOMMU driver and KVM when it receives interrupt from the
    PCI pass-through device instead of directly inject interrupt to the vCPU.

    Fixes by passing ir_data when calling modify_irte_ga() as done previously.

    Fixes: b9c6ff94e43a ("iommu/amd: Re-factor guest virtual APIC (de-)activation code")
    Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/iommu/amd_iommu.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/drivers/iommu/amd_iommu.c
    +++ b/drivers/iommu/amd_iommu.c
    @@ -3836,7 +3836,7 @@ int amd_iommu_activate_guest_mode(void *
    entry->lo.fields_vapic.ga_tag = ir_data->ga_tag;

    return modify_irte_ga(ir_data->irq_2_irte.devid,
    - ir_data->irq_2_irte.index, entry, NULL);
    + ir_data->irq_2_irte.index, entry, ir_data);
    }
    EXPORT_SYMBOL(amd_iommu_activate_guest_mode);

    @@ -3862,7 +3862,7 @@ int amd_iommu_deactivate_guest_mode(void
    APICID_TO_IRTE_DEST_HI(cfg->dest_apicid);

    return modify_irte_ga(ir_data->irq_2_irte.devid,
    - ir_data->irq_2_irte.index, entry, NULL);
    + ir_data->irq_2_irte.index, entry, ir_data);
    }
    EXPORT_SYMBOL(amd_iommu_deactivate_guest_mode);


    \
     
     \ /
      Last update: 2020-03-17 12:15    [W:3.399 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site