#ifndef _ASM_X86_SPECIAL_INSNS_H
#define _ASM_X86_SPECIAL_INSNS_H
#ifdef __KERNEL__
#include <asm/nops.h>
#include <asm/processor-flags.h>
#include <linux/errno.h>
#include <linux/irqflags.h>
#include <linux/jump_label.h>
#define __FORCE_ORDER …
void native_write_cr0(unsigned long val);
static inline unsigned long native_read_cr0(void)
{ … }
static __always_inline unsigned long native_read_cr2(void)
{ … }
static __always_inline void native_write_cr2(unsigned long val)
{ … }
static inline unsigned long __native_read_cr3(void)
{ … }
static inline void native_write_cr3(unsigned long val)
{ … }
static inline unsigned long native_read_cr4(void)
{ … }
void native_write_cr4(unsigned long val);
#ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
static inline u32 rdpkru(void)
{ … }
static inline void wrpkru(u32 pkru)
{ … }
#else
static inline u32 rdpkru(void)
{
return 0;
}
static inline void wrpkru(u32 pkru)
{
}
#endif
static __always_inline void native_wbinvd(void)
{ … }
static inline unsigned long __read_cr4(void)
{ … }
#ifdef CONFIG_PARAVIRT_XXL
#include <asm/paravirt.h>
#else
static inline unsigned long read_cr0(void)
{
return native_read_cr0();
}
static inline void write_cr0(unsigned long x)
{
native_write_cr0(x);
}
static __always_inline unsigned long read_cr2(void)
{
return native_read_cr2();
}
static __always_inline void write_cr2(unsigned long x)
{
native_write_cr2(x);
}
static inline unsigned long __read_cr3(void)
{
return __native_read_cr3();
}
static inline void write_cr3(unsigned long x)
{
native_write_cr3(x);
}
static inline void __write_cr4(unsigned long x)
{
native_write_cr4(x);
}
static __always_inline void wbinvd(void)
{
native_wbinvd();
}
#endif
static __always_inline void clflush(volatile void *__p)
{ … }
static inline void clflushopt(volatile void *__p)
{ … }
static inline void clwb(volatile void *__p)
{ … }
#ifdef CONFIG_X86_USER_SHADOW_STACK
static inline int write_user_shstk_64(u64 __user *addr, u64 val)
{ … }
#endif
#define nop() …
static inline void serialize(void)
{ … }
static inline void movdir64b(void *dst, const void *src)
{ … }
static inline void movdir64b_io(void __iomem *dst, const void *src)
{ … }
static inline int enqcmds(void __iomem *dst, const void *src)
{ … }
static __always_inline void tile_release(void)
{ … }
#endif
#endif