mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
91f59d2041
commit
4fda891f99
4 files changed
+47
-47
No files matched your search
@@ -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
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||