Date: Tue, 19 Feb 2019 19:17:20 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r344296 - in head/sys: amd64/include i386/include Message-ID: <201902191917.x1JJHK4m042577@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kib Date: Tue Feb 19 19:17:20 2019 New Revision: 344296 URL: https://svnweb.freebsd.org/changeset/base/344296 Log: Provide convenience C wrappers for RDPKRU and WRPKRU instructions. Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 3 days Differential revision: https://reviews.freebsd.org/D18893 Modified: head/sys/amd64/include/cpufunc.h head/sys/i386/include/cpufunc.h Modified: head/sys/amd64/include/cpufunc.h ============================================================================== --- head/sys/amd64/include/cpufunc.h Tue Feb 19 19:16:28 2019 (r344295) +++ head/sys/amd64/include/cpufunc.h Tue Feb 19 19:17:20 2019 (r344296) @@ -627,6 +627,22 @@ cpu_mwait(u_long extensions, u_int hints) __asm __volatile("mwait" : : "a" (hints), "c" (extensions)); } +static __inline uint32_t +rdpkru(void) +{ + uint32_t res; + + __asm __volatile("rdpkru" : "=a" (res) : "c" (0) : "edx"); + return (res); +} + +static __inline void +wrpkru(uint32_t mask) +{ + + __asm __volatile("wrpkru" : : "a" (mask), "c" (0), "d" (0)); +} + #ifdef _KERNEL /* This is defined in <machine/specialreg.h> but is too painful to get to */ #ifndef MSR_FSBASE Modified: head/sys/i386/include/cpufunc.h ============================================================================== --- head/sys/i386/include/cpufunc.h Tue Feb 19 19:16:28 2019 (r344295) +++ head/sys/i386/include/cpufunc.h Tue Feb 19 19:17:20 2019 (r344296) @@ -726,6 +726,22 @@ intr_restore(register_t eflags) write_eflags(eflags); } +static __inline uint32_t +rdpkru(void) +{ + uint32_t res; + + __asm __volatile("rdpkru" : "=a" (res) : "c" (0) : "edx"); + return (res); +} + +static __inline void +wrpkru(uint32_t mask) +{ + + __asm __volatile("wrpkru" : : "a" (mask), "c" (0), "d" (0)); +} + #else /* !(__GNUCLIKE_ASM && __CC_SUPPORTS___INLINE) */ int breakpoint(void);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201902191917.x1JJHK4m042577>