aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xen/arch/x86/hvm/mtrr.c8
-rw-r--r--xen/arch/x86/mm/hap/p2m-ept.c33
-rw-r--r--xen/include/asm-x86/hvm/vmx/vmx.h7
-rw-r--r--xen/include/asm-x86/mtrr.h2
4 files changed, 23 insertions, 27 deletions
diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c
index 8433092a4f..efdbe0aa8a 100644
--- a/xen/arch/x86/hvm/mtrr.c
+++ b/xen/arch/x86/hvm/mtrr.c
@@ -707,13 +707,13 @@ HVM_REGISTER_SAVE_RESTORE(MTRR, hvm_save_mtrr_msr, hvm_load_mtrr_msr,
1, HVMSR_PER_VCPU);
uint8_t epte_get_entry_emt(struct domain *d, unsigned long gfn, mfn_t mfn,
- uint8_t *igmt, int direct_mmio)
+ uint8_t *ipat, int direct_mmio)
{
uint8_t gmtrr_mtype, hmtrr_mtype;
uint32_t type;
struct vcpu *v = current;
- *igmt = 0;
+ *ipat = 0;
if ( (current->domain != d) &&
((d->vcpu == NULL) || ((v = d->vcpu[0]) == NULL)) )
@@ -733,7 +733,7 @@ uint8_t epte_get_entry_emt(struct domain *d, unsigned long gfn, mfn_t mfn,
if ( !iommu_enabled )
{
- *igmt = 1;
+ *ipat = 1;
return MTRR_TYPE_WRBACK;
}
@@ -742,7 +742,7 @@ uint8_t epte_get_entry_emt(struct domain *d, unsigned long gfn, mfn_t mfn,
if ( iommu_snoop )
{
- *igmt = 1;
+ *ipat = 1;
return MTRR_TYPE_WRBACK;
}
diff --git a/xen/arch/x86/mm/hap/p2m-ept.c b/xen/arch/x86/mm/hap/p2m-ept.c
index ba6e2ee0a9..dacab8c0f0 100644
--- a/xen/arch/x86/mm/hap/p2m-ept.c
+++ b/xen/arch/x86/mm/hap/p2m-ept.c
@@ -105,11 +105,10 @@ static int ept_set_middle_entry(struct domain *d, ept_entry_t *ept_entry)
page_list_add_tail(pg, &d->arch.p2m->pages);
ept_entry->emt = 0;
- ept_entry->igmt = 0;
+ ept_entry->ipat = 0;
ept_entry->sp_avail = 0;
ept_entry->avail1 = 0;
ept_entry->mfn = page_to_mfn(pg);
- ept_entry->rsvd = 0;
ept_entry->avail2 = 0;
ept_entry->r = ept_entry->w = ept_entry->x = 1;
@@ -186,7 +185,7 @@ ept_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
int ret = 0;
int walk_level = order / EPT_TABLE_ORDER;
int direct_mmio = (p2mt == p2m_mmio_direct);
- uint8_t igmt = 0;
+ uint8_t ipat = 0;
int need_modify_vtd_table = 1;
/* We only support 4k and 2m pages now */
@@ -227,9 +226,9 @@ ept_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
if ( mfn_valid(mfn_x(mfn)) || direct_mmio || p2m_is_paged(p2mt) ||
(p2mt == p2m_ram_paging_in_start) )
{
- ept_entry->emt = epte_get_entry_emt(d, gfn, mfn, &igmt,
+ ept_entry->emt = epte_get_entry_emt(d, gfn, mfn, &ipat,
direct_mmio);
- ept_entry->igmt = igmt;
+ ept_entry->ipat = ipat;
ept_entry->sp_avail = order ? 1 : 0;
if ( ret == GUEST_TABLE_SUPER_PAGE )
@@ -253,7 +252,6 @@ ept_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
}
ept_entry->avail1 = p2mt;
- ept_entry->rsvd = 0;
ept_entry->avail2 = 0;
ept_p2m_type_to_flags(ept_entry, p2mt);
@@ -292,8 +290,8 @@ ept_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
split_ept_entry = split_table + i;
split_ept_entry->emt = epte_get_entry_emt(d, gfn - offset + i,
_mfn(super_mfn + i),
- &igmt, direct_mmio);
- split_ept_entry->igmt = igmt;
+ &ipat, direct_mmio);
+ split_ept_entry->ipat = ipat;
split_ept_entry->sp_avail = 0;
/* Don't increment mfn if it's a PoD mfn */
if ( super_p2mt != p2m_populate_on_demand )
@@ -301,7 +299,6 @@ ept_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
else
split_ept_entry->mfn = super_mfn;
split_ept_entry->avail1 = super_p2mt;
- split_ept_entry->rsvd = 0;
split_ept_entry->avail2 = 0;
ept_p2m_type_to_flags(split_ept_entry, super_p2mt);
@@ -309,9 +306,9 @@ ept_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
/* Set the destinated 4k page as normal */
split_ept_entry = split_table + offset;
- split_ept_entry->emt = epte_get_entry_emt(d, gfn, mfn, &igmt,
+ split_ept_entry->emt = epte_get_entry_emt(d, gfn, mfn, &ipat,
direct_mmio);
- split_ept_entry->igmt = igmt;
+ split_ept_entry->ipat = ipat;
if ( split_ept_entry->mfn == mfn_x(mfn) )
need_modify_vtd_table = 0;
@@ -556,16 +553,16 @@ static mfn_t ept_get_entry_current(unsigned long gfn, p2m_type_t *t,
* return 1 to not to reset ept entry.
*/
static int need_modify_ept_entry(struct domain *d, unsigned long gfn,
- mfn_t mfn, uint8_t o_igmt, uint8_t o_emt,
+ mfn_t mfn, uint8_t o_ipat, uint8_t o_emt,
p2m_type_t p2mt)
{
- uint8_t igmt;
+ uint8_t ipat;
uint8_t emt;
int direct_mmio = (p2mt == p2m_mmio_direct);
- emt = epte_get_entry_emt(d, gfn, mfn, &igmt, direct_mmio);
+ emt = epte_get_entry_emt(d, gfn, mfn, &ipat, direct_mmio);
- if ( (emt == o_emt) && (igmt == o_igmt) )
+ if ( (emt == o_emt) && (ipat == o_ipat) )
return 0;
return 1;
@@ -599,21 +596,21 @@ void ept_change_entry_emt_with_range(struct domain *d, unsigned long start_gfn,
* Set emt for super page.
*/
order = EPT_TABLE_ORDER;
- if ( need_modify_ept_entry(d, gfn, mfn, e.igmt, e.emt, e.avail1) )
+ if ( need_modify_ept_entry(d, gfn, mfn, e.ipat, e.emt, e.avail1) )
ept_set_entry(d, gfn, mfn, order, e.avail1);
gfn += 0x1FF;
}
else
{
/* Change emt for partial entries of the 2m area. */
- if ( need_modify_ept_entry(d, gfn, mfn, e.igmt, e.emt, e.avail1) )
+ if ( need_modify_ept_entry(d, gfn, mfn, e.ipat, e.emt, e.avail1) )
ept_set_entry(d, gfn, mfn, order, e.avail1);
gfn = ((gfn >> EPT_TABLE_ORDER) << EPT_TABLE_ORDER) + 0x1FF;
}
}
else /* gfn assigned with 4k */
{
- if ( need_modify_ept_entry(d, gfn, mfn, e.igmt, e.emt, e.avail1) )
+ if ( need_modify_ept_entry(d, gfn, mfn, e.ipat, e.emt, e.avail1) )
ept_set_entry(d, gfn, mfn, order, e.avail1);
}
}
diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/include/asm-x86/hvm/vmx/vmx.h
index bf1154eeb9..7cc1f7ffea 100644
--- a/xen/include/asm-x86/hvm/vmx/vmx.h
+++ b/xen/include/asm-x86/hvm/vmx/vmx.h
@@ -34,12 +34,11 @@ typedef union {
w : 1,
x : 1,
emt : 3, /* EPT Memory type */
- igmt : 1, /* Ignore MTRR memory type */
+ ipat : 1, /* Ignore PAT memory type */
sp_avail : 1, /* Is this a superpage? */
avail1 : 4,
- mfn : 45,
- rsvd : 5,
- avail2 : 2;
+ mfn : 40,
+ avail2 : 12;
};
u64 epte;
} ept_entry_t;
diff --git a/xen/include/asm-x86/mtrr.h b/xen/include/asm-x86/mtrr.h
index 93bfb7ffcd..0e9e47e227 100644
--- a/xen/include/asm-x86/mtrr.h
+++ b/xen/include/asm-x86/mtrr.h
@@ -67,7 +67,7 @@ extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi);
extern u32 get_pat_flags(struct vcpu *v, u32 gl1e_flags, paddr_t gpaddr,
paddr_t spaddr, uint8_t gmtrr_mtype);
extern uint8_t epte_get_entry_emt(struct domain *d, unsigned long gfn,
- mfn_t mfn, uint8_t *igmt, int direct_mmio);
+ mfn_t mfn, uint8_t *ipat, int direct_mmio);
extern void ept_change_entry_emt_with_range(
struct domain *d, unsigned long start_gfn, unsigned long end_gfn);
extern unsigned char pat_type_2_pte_flags(unsigned char pat_type);