• Eric Auger's avatar
    iommu/vt-d: Duplicate iommu_resv_region objects per device list · 5f64ce54
    Eric Auger authored
    intel_iommu_get_resv_regions() aims to return the list of
    reserved regions accessible by a given @device. However several
    devices can access the same reserved memory region and when
    building the list it is not safe to use a single iommu_resv_region
    object, whose container is the RMRR. This iommu_resv_region must
    be duplicated per device reserved region list.
    
    Let's remove the struct iommu_resv_region from the RMRR unit
    and allocate the iommu_resv_region directly in
    intel_iommu_get_resv_regions(). We hold the dmar_global_lock instead
    of the rcu-lock to allow sleeping.
    
    Fixes: 0659b8dc ("iommu/vt-d: Implement reserved region get/put callbacks")
    Signed-off-by: default avatarEric Auger <eric.auger@redhat.com>
    Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    5f64ce54
intel-iommu.c 144 KB