mm / iommu: include need_iommu() test in iommu_use_hap_pt()

The name 'iommu_use_hap_pt' suggests that that P2M table is in use as the
domain's IOMMU pagetable which, prior to this patch, is not strictly true
since the macro did not test whether the domain actually has IOMMU
mappings.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Acked-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: George Dunlap <george.dunlap@citrix.com>
This commit is contained in:
Paul Durrant authored and Jan Beulich committed 2018-10-05 16:36:56 +02:00
1 parent dd93d54fef
commit 2916951c1b
6 files changed
+12 -11

No files matched your search

+3 -3
View File
@@ -874,12 +874,12 @@ out:
ept_sync_domain(p2m);
/* For host p2m, may need to change VT-d page table.*/
if ( rc == 0 && p2m_is_hostp2m(p2m) && need_iommu(d) &&
if ( rc == 0 && p2m_is_hostp2m(p2m) &&
need_modify_vtd_table )
{
if ( iommu_hap_pt_share )
if ( iommu_use_hap_pt(d) )
rc = iommu_pte_flush(d, gfn, &ept_entry->epte, order, vtd_pte_present);
else
else if ( need_iommu(d) )
{
dfn_t dfn = _dfn(gfn);
+3 -3
View File
@@ -678,8 +678,8 @@ p2m_pt_set_entry(struct p2m_domain *p2m, gfn_t gfn_, mfn_t mfn,
&& (gfn + (1UL << page_order) - 1 > p2m->max_mapped_pfn) )
p2m->max_mapped_pfn = gfn + (1UL << page_order) - 1;
if ( iommu_enabled && need_iommu(p2m->domain) &&
(iommu_old_flags != iommu_pte_flags || old_mfn != mfn_x(mfn)) )
if ( iommu_enabled && (iommu_old_flags != iommu_pte_flags ||
old_mfn != mfn_x(mfn)) )
{
ASSERT(rc == 0);
@@ -688,7 +688,7 @@ p2m_pt_set_entry(struct p2m_domain *p2m, gfn_t gfn_, mfn_t mfn,
if ( iommu_old_flags )
amd_iommu_flush_pages(p2m->domain, gfn, page_order);
}
else
else if ( need_iommu(p2m->domain) )
{
dfn_t dfn = _dfn(gfn);
+1 -1
View File
@@ -2087,7 +2087,7 @@ static unsigned int mmio_order(const struct domain *d,
* - exclude PV guests, should execution reach this code for such.
* So be careful when altering this.
*/
if ( !need_iommu(d) || !iommu_use_hap_pt(d) ||
if ( !iommu_use_hap_pt(d) ||
(start_fn & ((1UL << PAGE_ORDER_2M) - 1)) || !(nr >> PAGE_ORDER_2M) )
return PAGE_ORDER_4K;
+1 -1
View File
@@ -487,7 +487,7 @@ int iommu_do_domctl(
void iommu_share_p2m_table(struct domain* d)
{
if ( iommu_enabled && iommu_use_hap_pt(d) )
if ( iommu_use_hap_pt(d) )
iommu_get_ops()->share_p2m(d);
}
+1 -1
View File
@@ -21,7 +21,7 @@ struct arch_iommu
};
/* Always share P2M Table between the CPU and the IOMMU */
#define iommu_use_hap_pt(d) (1)
#define iommu_use_hap_pt(d) (need_iommu(d))
const struct iommu_ops *iommu_get_ops(void);
void __init iommu_set_ops(const struct iommu_ops *ops);
+3 -2
View File
@@ -89,8 +89,9 @@ static inline int iommu_hardware_setup(void)
return -ENODEV;
}
/* Does this domain have a P2M table we can use as its IOMMU pagetable? */
#define iommu_use_hap_pt(d) (hap_enabled(d) && iommu_hap_pt_share)
/* Are we using the domain P2M table as its IOMMU pagetable? */
#define iommu_use_hap_pt(d) \
(hap_enabled(d) && need_iommu(d) && iommu_hap_pt_share)
void iommu_update_ire_from_apic(unsigned int apic, unsigned int reg, unsigned int value);
unsigned int iommu_read_apic_from_ire(unsigned int apic, unsigned int reg);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.