From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH V5 4/6] x86/hvm: pkeys, add pkeys support for guest_walk_tables Date: Tue, 22 Dec 2015 11:17:16 +0000 Message-ID: <5679313C.7070906@citrix.com> References: <1450780234-17236-1-git-send-email-huaitong.han@intel.com> <1450780234-17236-5-git-send-email-huaitong.han@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1450780234-17236-5-git-send-email-huaitong.han@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Huaitong Han , jbeulich@suse.com, jun.nakajima@intel.com, eddie.dong@intel.com, kevin.tian@intel.com, george.dunlap@eu.citrix.com, ian.jackson@eu.citrix.com, stefano.stabellini@eu.citrix.com, ian.campbell@citrix.com, wei.liu2@citrix.com, keir@xen.org Cc: xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On 22/12/15 10:30, Huaitong Han wrote: > --- a/xen/include/asm-x86/processor.h > +++ b/xen/include/asm-x86/processor.h > @@ -373,6 +373,45 @@ static always_inline void clear_in_cr4 (unsigned long mask) > write_cr4(read_cr4() & ~mask); > } > > +static inline unsigned int read_pkru(void) > +{ > + unsigned int pkru; > + > + /* > + * _PAGE_PKEY_BITS have a conflict with _PAGE_GNTTAB used by PV guests, > + * so that X86_CR4_PKE is disable on hypervisor, RDPKRU instruction can > + * be used with temporarily setting CR4.PKE. > + */ > + set_in_cr4(X86_CR4_PKE); > + asm volatile (".byte 0x0f,0x01,0xee" > + : "=a" (pkru) : "c" (0) : "dx"); > + clear_in_cr4(X86_CR4_PKE); You can't use set/clear_in_cr4 here, as it modifies the global mmu_cr4_features variable. I would recommend unsigned long cr4 = read_cr4(); write_cr4(cr4 | X86_CR4_PKE); ... write_cr4(cr4); instead.