Moving ept code to ept specific files.

Renamed p2m_init_altp2m_helper() to p2m_init_altp2m_ept().

Signed-off-by: Paul Lai <paul.c.lai@intel.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Acked-by: George Dunlap <george.dunlap@citrix.com>
This commit is contained in:
Paul Lai authored and George Dunlap committed 2017-01-26 16:13:18 +00:00
1 parent 91f59d2041
commit 4fda891f99
4 files changed
+47 -47

No files matched your search

+39
View File
@@ -1329,6 +1329,45 @@ void setup_ept_dump(void)
register_keyhandler('D', ept_dump_p2m_table, "dump VT-x EPT tables", 0);
}
void p2m_init_altp2m_ept(struct domain *d, unsigned int i)
{
struct p2m_domain *p2m = d->arch.altp2m_p2m[i];
struct ept_data *ept;
p2m->min_remapped_gfn = gfn_x(INVALID_GFN);
p2m->max_remapped_gfn = 0;
ept = &p2m->ept;
ept->asr = pagetable_get_pfn(p2m_get_pagetable(p2m));
d->arch.altp2m_eptp[i] = ept_get_eptp(ept);
}
unsigned int p2m_find_altp2m_by_eptp(struct domain *d, uint64_t eptp)
{
struct p2m_domain *p2m;
struct ept_data *ept;
unsigned int i;
altp2m_list_lock(d);
for ( i = 0; i < MAX_ALTP2M; i++ )
{
if ( d->arch.altp2m_eptp[i] == mfn_x(INVALID_MFN) )
continue;
p2m = d->arch.altp2m_p2m[i];
ept = &p2m->ept;
if ( eptp == ept_get_eptp(ept) )
goto out;
}
i = INVALID_ALTP2M;
out:
altp2m_list_unlock(d);
return i;
}
/*
* Local variables:
* mode: C
+2 -41
View File
@@ -2342,33 +2342,6 @@ int unmap_mmio_regions(struct domain *d,
return i == nr ? 0 : i ?: ret;
}
unsigned int p2m_find_altp2m_by_eptp(struct domain *d, uint64_t eptp)
{
struct p2m_domain *p2m;
struct ept_data *ept;
unsigned int i;
altp2m_list_lock(d);
for ( i = 0; i < MAX_ALTP2M; i++ )
{
if ( d->arch.altp2m_eptp[i] == mfn_x(INVALID_MFN) )
continue;
p2m = d->arch.altp2m_p2m[i];
ept = &p2m->ept;
if ( eptp == ept_get_eptp(ept) )
goto out;
}
i = INVALID_ALTP2M;
out:
altp2m_list_unlock(d);
return i;
}
bool_t p2m_switch_vcpu_altp2m_by_id(struct vcpu *v, unsigned int idx)
{
struct domain *d = v->domain;
@@ -2474,18 +2447,6 @@ void p2m_flush_altp2m(struct domain *d)
altp2m_list_unlock(d);
}
static void p2m_init_altp2m_helper(struct domain *d, unsigned int i)
{
struct p2m_domain *p2m = d->arch.altp2m_p2m[i];
struct ept_data *ept;
p2m->min_remapped_gfn = gfn_x(INVALID_GFN);
p2m->max_remapped_gfn = 0;
ept = &p2m->ept;
ept->asr = pagetable_get_pfn(p2m_get_pagetable(p2m));
d->arch.altp2m_eptp[i] = ept_get_eptp(ept);
}
int p2m_init_altp2m_by_id(struct domain *d, unsigned int idx)
{
int rc = -EINVAL;
@@ -2497,7 +2458,7 @@ int p2m_init_altp2m_by_id(struct domain *d, unsigned int idx)
if ( d->arch.altp2m_eptp[idx] == mfn_x(INVALID_MFN) )
{
p2m_init_altp2m_helper(d, idx);
p2m_init_altp2m_ept(d, idx);
rc = 0;
}
@@ -2517,7 +2478,7 @@ int p2m_init_next_altp2m(struct domain *d, uint16_t *idx)
if ( d->arch.altp2m_eptp[i] != mfn_x(INVALID_MFN) )
continue;
p2m_init_altp2m_helper(d, i);
p2m_init_altp2m_ept(d, i);
*idx = i;
rc = 0;
+3
View File
@@ -562,6 +562,9 @@ void ept_p2m_uninit(struct p2m_domain *p2m);
void ept_walk_table(struct domain *d, unsigned long gfn);
bool_t ept_handle_misconfig(uint64_t gpa);
void setup_ept_dump(void);
void p2m_init_altp2m_ept(struct domain *d, unsigned int i);
/* Locate an alternate p2m by its EPTP */
unsigned int p2m_find_altp2m_by_eptp(struct domain *d, uint64_t eptp);
void update_guest_eip(void);
+3 -6
View File
@@ -23,8 +23,8 @@
* along with this program; If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _XEN_P2M_H
#define _XEN_P2M_H
#ifndef _XEN_ASM_X86_P2M_H
#define _XEN_ASM_X86_P2M_H
#include <xen/config.h>
#include <xen/paging.h>
@@ -784,9 +784,6 @@ static inline struct p2m_domain *p2m_get_altp2m(struct vcpu *v)
return v->domain->arch.altp2m_p2m[index];
}
/* Locate an alternate p2m by its EPTP */
unsigned int p2m_find_altp2m_by_eptp(struct domain *d, uint64_t eptp);
/* Switch alternate p2m for a single vcpu */
bool_t p2m_switch_vcpu_altp2m_by_id(struct vcpu *v, unsigned int idx);
@@ -848,7 +845,7 @@ static inline unsigned int p2m_get_iommu_flags(p2m_type_t p2mt)
return flags;
}
#endif /* _XEN_P2M_H */
#endif /* _XEN_ASM_X86_P2M_H */
/*
* Local variables:
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.