[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] xen/x86: add some cr3 helpers
commit 1a32c9868711b4ee883ebb6f8807e08d70a920be Author: Juergen Gross <jgross@xxxxxxxx> AuthorDate: Thu Apr 26 13:33:17 2018 +0200 Commit: Wei Liu <wei.liu2@xxxxxxxxxx> CommitDate: Fri May 4 15:55:07 2018 +0100 xen/x86: add some cr3 helpers Add some helper macros to access the address and pcid parts of cr3. Use those helpers where appropriate. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/debug.c | 2 +- xen/arch/x86/domain_page.c | 2 +- xen/include/asm-x86/processor.h | 10 ++++++++++ xen/include/asm-x86/x86-defns.h | 4 +++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/debug.c b/xen/arch/x86/debug.c index 9159f32db4..a500df01ac 100644 --- a/xen/arch/x86/debug.c +++ b/xen/arch/x86/debug.c @@ -98,7 +98,7 @@ dbg_pv_va2mfn(dbgva_t vaddr, struct domain *dp, uint64_t pgd3val) l2_pgentry_t l2e, *l2t; l1_pgentry_t l1e, *l1t; unsigned long cr3 = (pgd3val ? pgd3val : dp->vcpu[0]->arch.cr3); - mfn_t mfn = maddr_to_mfn(cr3); + mfn_t mfn = maddr_to_mfn(cr3_pa(cr3)); DBGP2("vaddr:%lx domid:%d cr3:%lx pgd3:%lx\n", vaddr, dp->domain_id, cr3, pgd3val); diff --git a/xen/arch/x86/domain_page.c b/xen/arch/x86/domain_page.c index 11b6a5421a..0c24530ed9 100644 --- a/xen/arch/x86/domain_page.c +++ b/xen/arch/x86/domain_page.c @@ -51,7 +51,7 @@ static inline struct vcpu *mapcache_current_vcpu(void) if ( (v = idle_vcpu[smp_processor_id()]) == current ) sync_local_execstate(); /* We must now be running on the idle page table. */ - ASSERT(read_cr3() == __pa(idle_pg_table)); + ASSERT(cr3_pa(read_cr3()) == __pa(idle_pg_table)); } return v; diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processor.h index 2798db635a..7dfdb07b85 100644 --- a/xen/include/asm-x86/processor.h +++ b/xen/include/asm-x86/processor.h @@ -288,6 +288,16 @@ static inline void write_cr3(unsigned long val) asm volatile ( "mov %0, %%cr3" : : "r" (val) : "memory" ); } +static inline unsigned long cr3_pa(unsigned long cr3) +{ + return cr3 & X86_CR3_ADDR_MASK; +} + +static inline unsigned long cr3_pcid(unsigned long cr3) +{ + return cr3 & X86_CR3_PCID_MASK; +} + static inline unsigned long read_cr4(void) { return get_cpu_info()->cr4; diff --git a/xen/include/asm-x86/x86-defns.h b/xen/include/asm-x86/x86-defns.h index ff8d66be3c..904041e1ab 100644 --- a/xen/include/asm-x86/x86-defns.h +++ b/xen/include/asm-x86/x86-defns.h @@ -45,7 +45,9 @@ /* * Intel CPU flags in CR3 */ -#define X86_CR3_NOFLUSH (_AC(1, ULL) << 63) +#define X86_CR3_NOFLUSH (_AC(1, ULL) << 63) +#define X86_CR3_ADDR_MASK (PAGE_MASK & PADDR_MASK) +#define X86_CR3_PCID_MASK _AC(0x0fff, ULL) /* Mask for PCID */ /* * Intel CPU features in CR4 -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |