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

Re: [Xen-devel] [PATCH for 4.6] VT-d: Create IOMMU mappings for RMRR regions if shared EPT is not being used



On 27/08/15 03:59, Chen, Tiejun wrote:
> This kind of issue is already gone.
> 
> https://www.mail-archive.com/xen-devel@xxxxxxxxxxxxx/msg32464.html

There is a bug in the code you refer to above which results in no IOMMU page 
table
mappings being created if the guest domain is not sharing it's EPT page tables 
with
the IOMMU.

set_identity_p2m_entry only configures the EPT page tables and does not 
configure
the IOMMU page tables.

We had a real world regression (with xen 4.6-rc1) on a Intel Haswell system with
integrated graphics.

The patch below resolves the regression.

Malcolm

> 
> Thanks
> Tiejun
> 
> On 8/26/2015 11:49 PM, Malcolm Crossley wrote:
>> Add RMRR 1:1 IOMMU mappings to IOMMU page tables if EPT page table are not 
>> being
>> shared with the IOMMU.
>>
>> This is a regression in behaviour versus Xen 4.5.
>>
>> Signed-off-by: Malcolm Crossley <malcolm.crossley@xxxxxxxxxx>
>> ---
>>   xen/drivers/passthrough/vtd/iommu.c | 23 ++++++++++++++++++++---
>>   1 file changed, 20 insertions(+), 3 deletions(-)
>>
>> diff --git a/xen/drivers/passthrough/vtd/iommu.c 
>> b/xen/drivers/passthrough/vtd/iommu.c
>> index 836aed5..89de741 100644
>> --- a/xen/drivers/passthrough/vtd/iommu.c
>> +++ b/xen/drivers/passthrough/vtd/iommu.c
>> @@ -1839,8 +1839,16 @@ static int rmrr_identity_mapping(struct domain *d, 
>> bool_t map,
>>
>>               while ( base_pfn < end_pfn )
>>               {
>> -                if ( clear_identity_p2m_entry(d, base_pfn) )
>> -                    ret = -ENXIO;
>> +                if ( iommu_use_hap_pt(d) )
>> +                {
>> +                    if ( clear_identity_p2m_entry(d, base_pfn) )
>> +                            ret = -ENXIO;
>> +                }
>> +                else
>> +                {
>> +                    if ( intel_iommu_unmap_page(d, base_pfn) )
>> +                        ret = -ENXIO;
>> +                }
>>                   base_pfn++;
>>               }
>>
>> @@ -1855,7 +1863,16 @@ static int rmrr_identity_mapping(struct domain *d, 
>> bool_t map,
>>
>>       while ( base_pfn < end_pfn )
>>       {
>> -        int err = set_identity_p2m_entry(d, base_pfn, p2m_access_rw, flag);
>> +        int err;
>> +        if ( iommu_use_hap_pt(d) )
>> +        {
>> +            err = set_identity_p2m_entry(d, base_pfn, p2m_access_rw, flag);
>> +        }
>> +        else
>> +        {
>> +            err = intel_iommu_map_page(d, base_pfn, base_pfn,
>> +                                       IOMMUF_readable|IOMMUF_writable);
>> +        }
>>
>>           if ( err )
>>               return err;
>>


_______________________________________________
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®.