mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
xen/x86: convert pv_guest_cr4_to_real_cr4() to a function
pv_guest_cr4_to_real_cr4() is becoming more and more complex. Convert it from a macro to an ordinary function. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
fb781023a4
commit
b3a7f2f2fe
2 files changed
+16
-9
No files matched your search
@@ -506,6 +506,20 @@ void make_cr3(struct vcpu *v, mfn_t mfn)
|
||||
v->arch.cr3 = mfn_x(mfn) << PAGE_SHIFT;
|
||||
}
|
||||
|
||||
unsigned long pv_guest_cr4_to_real_cr4(const struct vcpu *v)
|
||||
{
|
||||
const struct domain *d = v->domain;
|
||||
unsigned long cr4;
|
||||
|
||||
cr4 = v->arch.pv_vcpu.ctrlreg[4] & ~X86_CR4_DE;
|
||||
cr4 |= mmu_cr4_features & (X86_CR4_PSE | X86_CR4_SMEP | X86_CR4_SMAP |
|
||||
X86_CR4_OSXSAVE | X86_CR4_FSGSBASE);
|
||||
cr4 |= d->arch.pv_domain.xpti ? 0 : X86_CR4_PGE;
|
||||
cr4 |= d->arch.vtsc ? X86_CR4_TSD : 0;
|
||||
|
||||
return cr4;
|
||||
}
|
||||
|
||||
void write_ptbase(struct vcpu *v)
|
||||
{
|
||||
struct cpu_info *cpu_info = get_cpu_info();
|
||||
|
||||
@@ -615,15 +615,8 @@ void vcpu_show_registers(const struct vcpu *);
|
||||
unsigned long pv_guest_cr4_fixup(const struct vcpu *, unsigned long guest_cr4);
|
||||
|
||||
/* Convert between guest-visible and real CR4 values. */
|
||||
#define pv_guest_cr4_to_real_cr4(v) \
|
||||
(((v)->arch.pv_vcpu.ctrlreg[4] \
|
||||
| (mmu_cr4_features \
|
||||
& (X86_CR4_PSE | X86_CR4_SMEP | \
|
||||
X86_CR4_SMAP | X86_CR4_OSXSAVE | \
|
||||
X86_CR4_FSGSBASE)) \
|
||||
| ((v)->domain->arch.pv_domain.xpti ? 0 : X86_CR4_PGE) \
|
||||
| ((v)->domain->arch.vtsc ? X86_CR4_TSD : 0)) \
|
||||
& ~X86_CR4_DE)
|
||||
unsigned long pv_guest_cr4_to_real_cr4(const struct vcpu *v);
|
||||
|
||||
#define real_cr4_to_pv_guest_cr4(c) \
|
||||
((c) & ~(X86_CR4_PGE | X86_CR4_PSE | X86_CR4_TSD | \
|
||||
X86_CR4_OSXSAVE | X86_CR4_SMEP | \
|
||||
|
||||