[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [v2][PATCH 1/1] xen:vtd: missing RMRR mapping while share EPT



On 24/07/14 09:50, Tiejun Chen wrote:
> intel_iommu_map_page() does nothing if VT-d shares EPT page table.
> So rmrr_identity_mapping() never create RMRR mapping but in some
> cases like some GFX drivers it still need to access RMRR.
>
> Here we will create those RMRR mappings even in shared EPT case.
>
> Signed-off-by: Tiejun Chen <tiejun.chen@xxxxxxxxx>
> ---
>  xen/drivers/passthrough/vtd/iommu.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
>
> v2:
>
> * Fix coding style.
> * Still need to abide intel_iommu_map_page(), so we should do nothing
>   if dom0 and iommu supports pass thru.
>
> diff --git a/xen/drivers/passthrough/vtd/iommu.c 
> b/xen/drivers/passthrough/vtd/iommu.c
> index 042b882..aca79db 100644
> --- a/xen/drivers/passthrough/vtd/iommu.c
> +++ b/xen/drivers/passthrough/vtd/iommu.c
> @@ -41,6 +41,7 @@
>  #include "extern.h"
>  #include "vtd.h"
>  #include "../ats.h"
> +#include "../../../arch/x86/mm/mm-locks.h"

<asm/mm/mm-locks.h>

~Andrew

>  
>  struct mapped_rmrr {
>      struct list_head list;
> @@ -1842,6 +1843,7 @@ static int rmrr_identity_mapping(struct domain *d,
>      unsigned long base_pfn, end_pfn;
>      struct mapped_rmrr *mrmrr;
>      struct hvm_iommu *hd = domain_hvm_iommu(d);
> +    struct p2m_domain *p2m = p2m_get_hostp2m(d);
>  
>      ASSERT(spin_is_locked(&pcidevs_lock));
>      ASSERT(rmrr->base_address < rmrr->end_address);
> @@ -1867,8 +1869,20 @@ static int rmrr_identity_mapping(struct domain *d,
>  
>      while ( base_pfn < end_pfn )
>      {
> -        if ( intel_iommu_map_page(d, base_pfn, base_pfn,
> -                                  IOMMUF_readable|IOMMUF_writable) )
> +        if ( iommu_use_hap_pt(d) && (!iommu_passthrough ||
> +                                     !is_hardware_domain(d)) )
> +        {
> +            p2m_lock(p2m);
> +            if ( p2m_set_entry(p2m, base_pfn, _mfn(base_pfn), PAGE_ORDER_4K,
> +                               p2m_mmio_direct, p2m_access_rw) )
> +            {
> +                p2m_unlock(p2m);
> +                return -1;
> +            }
> +            p2m_unlock(p2m);
> +        }
> +        else if ( intel_iommu_map_page(d, base_pfn, base_pfn,
> +                                       IOMMUF_readable|IOMMUF_writable) )
>              return -1;
>          base_pfn++;
>      }


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.