Message ID | b43c88e3-662a-2982-fe4d-0df8f0b467d1@suse.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | XSA-292 follow-up | expand |
On Wed, Sep 11, 2019 at 05:21:55PM +0200, Jan Beulich wrote: > There's no need for it to be 64 bits wide - only the low twelve bits > of CR3 hold the PCID. > > Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com> Thanks, Roger.
--- a/xen/arch/x86/flushtlb.c +++ b/xen/arch/x86/flushtlb.c @@ -103,7 +103,8 @@ static void do_tlb_flush(void) void switch_cr3_cr4(unsigned long cr3, unsigned long cr4) { - unsigned long flags, old_cr4, old_pcid; + unsigned long flags, old_cr4; + unsigned int old_pcid; u32 t; /* This non-reentrant function is sometimes called in interrupt context. */ --- a/xen/include/asm-x86/processor.h +++ b/xen/include/asm-x86/processor.h @@ -287,7 +287,7 @@ static inline unsigned long cr3_pa(unsig return cr3 & X86_CR3_ADDR_MASK; } -static inline unsigned long cr3_pcid(unsigned long cr3) +static inline unsigned int cr3_pcid(unsigned long cr3) { return cr3 & X86_CR3_PCID_MASK; }
There's no need for it to be 64 bits wide - only the low twelve bits of CR3 hold the PCID. Signed-off-by: Jan Beulich <jbeulich@suse.com>