diff options
Diffstat (limited to 'arch/powerpc/include')
| -rw-r--r-- | arch/powerpc/include/asm/hvcall.h | 3 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/kvm_book3s.h | 5 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/kvm_book3s_64.h | 13 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/kvm_book3s_asm.h | 8 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 40 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/kvm_ppc.h | 107 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/reg.h | 1 | ||||
| -rw-r--r-- | arch/powerpc/include/uapi/asm/kvm.h | 73 | 
8 files changed, 245 insertions, 5 deletions
diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h index 4bc2c3dad6a..cf4df8e2139 100644 --- a/arch/powerpc/include/asm/hvcall.h +++ b/arch/powerpc/include/asm/hvcall.h @@ -270,6 +270,9 @@  #define H_SET_MODE		0x31C  #define MAX_HCALL_OPCODE	H_SET_MODE +/* Platform specific hcalls, used by KVM */ +#define H_RTAS			0xf000 +  #ifndef __ASSEMBLY__  /** diff --git a/arch/powerpc/include/asm/kvm_book3s.h b/arch/powerpc/include/asm/kvm_book3s.h index bc81842ea25..349ed85c7d6 100644 --- a/arch/powerpc/include/asm/kvm_book3s.h +++ b/arch/powerpc/include/asm/kvm_book3s.h @@ -142,6 +142,8 @@ extern int kvmppc_mmu_hv_init(void);  extern int kvmppc_ld(struct kvm_vcpu *vcpu, ulong *eaddr, int size, void *ptr, bool data);  extern int kvmppc_st(struct kvm_vcpu *vcpu, ulong *eaddr, int size, void *ptr, bool data);  extern void kvmppc_book3s_queue_irqprio(struct kvm_vcpu *vcpu, unsigned int vec); +extern void kvmppc_book3s_dequeue_irqprio(struct kvm_vcpu *vcpu, +					  unsigned int vec);  extern void kvmppc_inject_interrupt(struct kvm_vcpu *vcpu, int vec, u64 flags);  extern void kvmppc_set_bat(struct kvm_vcpu *vcpu, struct kvmppc_bat *bat,  			   bool upper, u32 val); @@ -156,7 +158,8 @@ void kvmppc_clear_ref_hpte(struct kvm *kvm, unsigned long *hptep,  			unsigned long pte_index);  extern void *kvmppc_pin_guest_page(struct kvm *kvm, unsigned long addr,  			unsigned long *nb_ret); -extern void kvmppc_unpin_guest_page(struct kvm *kvm, void *addr); +extern void kvmppc_unpin_guest_page(struct kvm *kvm, void *addr, +			unsigned long gpa, bool dirty);  extern long kvmppc_virtmode_h_enter(struct kvm_vcpu *vcpu, unsigned long flags,  			long pte_index, unsigned long pteh, unsigned long ptel);  extern long kvmppc_do_h_enter(struct kvm *kvm, unsigned long flags, diff --git a/arch/powerpc/include/asm/kvm_book3s_64.h b/arch/powerpc/include/asm/kvm_book3s_64.h index 38bec1dc992..9c1ff330c80 100644 --- a/arch/powerpc/include/asm/kvm_book3s_64.h +++ b/arch/powerpc/include/asm/kvm_book3s_64.h @@ -268,4 +268,17 @@ static inline int is_vrma_hpte(unsigned long hpte_v)  		(HPTE_V_1TB_SEG | (VRMA_VSID << (40 - 16)));  } +#ifdef CONFIG_KVM_BOOK3S_64_HV +/* + * Note modification of an HPTE; set the HPTE modified bit + * if anyone is interested. + */ +static inline void note_hpte_modification(struct kvm *kvm, +					  struct revmap_entry *rev) +{ +	if (atomic_read(&kvm->arch.hpte_mod_interest)) +		rev->guest_rpte |= HPTE_GR_MODIFIED; +} +#endif /* CONFIG_KVM_BOOK3S_64_HV */ +  #endif /* __ASM_KVM_BOOK3S_64_H__ */ diff --git a/arch/powerpc/include/asm/kvm_book3s_asm.h b/arch/powerpc/include/asm/kvm_book3s_asm.h index cdc3d2717cc..9039d3c97ee 100644 --- a/arch/powerpc/include/asm/kvm_book3s_asm.h +++ b/arch/powerpc/include/asm/kvm_book3s_asm.h @@ -20,6 +20,11 @@  #ifndef __ASM_KVM_BOOK3S_ASM_H__  #define __ASM_KVM_BOOK3S_ASM_H__ +/* XICS ICP register offsets */ +#define XICS_XIRR		4 +#define XICS_MFRR		0xc +#define XICS_IPI		2	/* interrupt source # for IPIs */ +  #ifdef __ASSEMBLY__  #ifdef CONFIG_KVM_BOOK3S_HANDLER @@ -81,10 +86,11 @@ struct kvmppc_host_state {  #ifdef CONFIG_KVM_BOOK3S_64_HV  	u8 hwthread_req;  	u8 hwthread_state; - +	u8 host_ipi;  	struct kvm_vcpu *kvm_vcpu;  	struct kvmppc_vcore *kvm_vcore;  	unsigned long xics_phys; +	u32 saved_xirr;  	u64 dabr;  	u64 host_mmcr[3];  	u32 host_pmc[8]; diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index e34f8fee908..af326cde7cb 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h @@ -44,6 +44,10 @@  #define KVM_COALESCED_MMIO_PAGE_OFFSET 1  #endif +/* These values are internal and can be increased later */ +#define KVM_NR_IRQCHIPS          1 +#define KVM_IRQCHIP_NUM_PINS     256 +  #if !defined(CONFIG_KVM_440)  #include <linux/mmu_notifier.h> @@ -188,6 +192,10 @@ struct kvmppc_linear_info {  	int		 type;  }; +/* XICS components, defined in book3s_xics.c */ +struct kvmppc_xics; +struct kvmppc_icp; +  /*   * The reverse mapping array has one entry for each HPTE,   * which stores the guest's view of the second word of the HPTE @@ -255,6 +263,13 @@ struct kvm_arch {  #endif /* CONFIG_KVM_BOOK3S_64_HV */  #ifdef CONFIG_PPC_BOOK3S_64  	struct list_head spapr_tce_tables; +	struct list_head rtas_tokens; +#endif +#ifdef CONFIG_KVM_MPIC +	struct openpic *mpic; +#endif +#ifdef CONFIG_KVM_XICS +	struct kvmppc_xics *xics;  #endif  }; @@ -301,11 +316,13 @@ struct kvmppc_vcore {   * that a guest can register.   */  struct kvmppc_vpa { +	unsigned long gpa;	/* Current guest phys addr */  	void *pinned_addr;	/* Address in kernel linear mapping */  	void *pinned_end;	/* End of region */  	unsigned long next_gpa;	/* Guest phys addr for update */  	unsigned long len;	/* Number of bytes required */  	u8 update_pending;	/* 1 => update pinned_addr from next_gpa */ +	bool dirty;		/* true => area has been modified by kernel */  };  struct kvmppc_pte { @@ -359,6 +376,11 @@ struct kvmppc_slb {  #define KVMPPC_BOOKE_MAX_IAC	4  #define KVMPPC_BOOKE_MAX_DAC	2 +/* KVMPPC_EPR_USER takes precedence over KVMPPC_EPR_KERNEL */ +#define KVMPPC_EPR_NONE		0 /* EPR not supported */ +#define KVMPPC_EPR_USER		1 /* exit to userspace to fill EPR */ +#define KVMPPC_EPR_KERNEL	2 /* in-kernel irqchip */ +  struct kvmppc_booke_debug_reg {  	u32 dbcr0;  	u32 dbcr1; @@ -370,6 +392,12 @@ struct kvmppc_booke_debug_reg {  	u64 dac[KVMPPC_BOOKE_MAX_DAC];  }; +#define KVMPPC_IRQ_DEFAULT	0 +#define KVMPPC_IRQ_MPIC		1 +#define KVMPPC_IRQ_XICS		2 + +struct openpic; +  struct kvm_vcpu_arch {  	ulong host_stack;  	u32 host_pid; @@ -502,7 +530,9 @@ struct kvm_vcpu_arch {  	spinlock_t wdt_lock;  	struct timer_list wdt_timer;  	u32 tlbcfg[4]; +	u32 tlbps[4];  	u32 mmucfg; +	u32 eptcfg;  	u32 epr;  	u32 crit_save;  	struct kvmppc_booke_debug_reg dbg_reg; @@ -522,7 +552,7 @@ struct kvm_vcpu_arch {  	u8 sane;  	u8 cpu_type;  	u8 hcall_needed; -	u8 epr_enabled; +	u8 epr_flags; /* KVMPPC_EPR_xxx */  	u8 epr_needed;  	u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */ @@ -549,6 +579,13 @@ struct kvm_vcpu_arch {  	unsigned long magic_page_pa; /* phys addr to map the magic page to */  	unsigned long magic_page_ea; /* effect. addr to map the magic page to */ +	int irq_type;		/* one of KVM_IRQ_* */ +	int irq_cpu_id; +	struct openpic *mpic;	/* KVM_IRQ_MPIC */ +#ifdef CONFIG_KVM_XICS +	struct kvmppc_icp *icp; /* XICS presentation controller */ +#endif +  #ifdef CONFIG_KVM_BOOK3S_64_HV  	struct kvm_vcpu_arch_shared shregs; @@ -589,5 +626,6 @@ struct kvm_vcpu_arch {  #define KVM_MMIO_REG_FQPR	0x0060  #define __KVM_HAVE_ARCH_WQP +#define __KVM_HAVE_CREATE_DEVICE  #endif /* __POWERPC_KVM_HOST_H__ */ diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h index f58930779ae..d7339df1925 100644 --- a/arch/powerpc/include/asm/kvm_ppc.h +++ b/arch/powerpc/include/asm/kvm_ppc.h @@ -44,7 +44,7 @@ enum emulation_result {  	EMULATE_DO_DCR,       /* kvm_run filled with DCR request */  	EMULATE_FAIL,         /* can't emulate this instruction */  	EMULATE_AGAIN,        /* something went wrong. go again */ -	EMULATE_DO_PAPR,      /* kvm_run filled with PAPR request */ +	EMULATE_EXIT_USER,    /* emulation requires exit to user-space */  };  extern int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu); @@ -130,6 +130,7 @@ extern long kvmppc_prepare_vrma(struct kvm *kvm,  extern void kvmppc_map_vrma(struct kvm_vcpu *vcpu,  			struct kvm_memory_slot *memslot, unsigned long porder);  extern int kvmppc_pseries_do_hcall(struct kvm_vcpu *vcpu); +  extern long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm,  				struct kvm_create_spapr_tce *args);  extern long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn, @@ -164,6 +165,18 @@ extern int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu);  extern int kvm_vm_ioctl_get_htab_fd(struct kvm *kvm, struct kvm_get_htab_fd *); +int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, struct kvm_interrupt *irq); + +extern int kvm_vm_ioctl_rtas_define_token(struct kvm *kvm, void __user *argp); +extern int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu); +extern void kvmppc_rtas_tokens_free(struct kvm *kvm); +extern int kvmppc_xics_set_xive(struct kvm *kvm, u32 irq, u32 server, +				u32 priority); +extern int kvmppc_xics_get_xive(struct kvm *kvm, u32 irq, u32 *server, +				u32 *priority); +extern int kvmppc_xics_int_on(struct kvm *kvm, u32 irq); +extern int kvmppc_xics_int_off(struct kvm *kvm, u32 irq); +  /*   * Cuts out inst bits with ordering according to spec.   * That means the leftmost bit is zero. All given bits are included. @@ -245,12 +258,29 @@ int kvmppc_set_one_reg(struct kvm_vcpu *vcpu, u64 id, union kvmppc_one_reg *);  void kvmppc_set_pid(struct kvm_vcpu *vcpu, u32 pid); +struct openpic; +  #ifdef CONFIG_KVM_BOOK3S_64_HV  static inline void kvmppc_set_xics_phys(int cpu, unsigned long addr)  {  	paca[cpu].kvm_hstate.xics_phys = addr;  } +static inline u32 kvmppc_get_xics_latch(void) +{ +	u32 xirr = get_paca()->kvm_hstate.saved_xirr; + +	get_paca()->kvm_hstate.saved_xirr = 0; + +	return xirr; +} + +static inline void kvmppc_set_host_ipi(int cpu, u8 host_ipi) +{ +	paca[cpu].kvm_hstate.host_ipi = host_ipi; +} + +extern void kvmppc_fast_vcpu_kick(struct kvm_vcpu *vcpu);  extern void kvm_linear_init(void);  #else @@ -259,6 +289,44 @@ static inline void kvmppc_set_xics_phys(int cpu, unsigned long addr)  static inline void kvm_linear_init(void)  {} + +static inline u32 kvmppc_get_xics_latch(void) +{ +	return 0; +} + +static inline void kvmppc_set_host_ipi(int cpu, u8 host_ipi) +{} + +static inline void kvmppc_fast_vcpu_kick(struct kvm_vcpu *vcpu) +{ +	kvm_vcpu_kick(vcpu); +} +#endif + +#ifdef CONFIG_KVM_XICS +static inline int kvmppc_xics_enabled(struct kvm_vcpu *vcpu) +{ +	return vcpu->arch.irq_type == KVMPPC_IRQ_XICS; +} +extern void kvmppc_xics_free_icp(struct kvm_vcpu *vcpu); +extern int kvmppc_xics_create_icp(struct kvm_vcpu *vcpu, unsigned long server); +extern int kvm_vm_ioctl_xics_irq(struct kvm *kvm, struct kvm_irq_level *args); +extern int kvmppc_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd); +extern u64 kvmppc_xics_get_icp(struct kvm_vcpu *vcpu); +extern int kvmppc_xics_set_icp(struct kvm_vcpu *vcpu, u64 icpval); +#else +static inline int kvmppc_xics_enabled(struct kvm_vcpu *vcpu) +	{ return 0; } +static inline void kvmppc_xics_free_icp(struct kvm_vcpu *vcpu) { } +static inline int kvmppc_xics_create_icp(struct kvm_vcpu *vcpu, +					 unsigned long server) +	{ return -EINVAL; } +static inline int kvm_vm_ioctl_xics_irq(struct kvm *kvm, +					struct kvm_irq_level *args) +	{ return -ENOTTY; } +static inline int kvmppc_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd) +	{ return 0; }  #endif  static inline void kvmppc_set_epr(struct kvm_vcpu *vcpu, u32 epr) @@ -270,6 +338,32 @@ static inline void kvmppc_set_epr(struct kvm_vcpu *vcpu, u32 epr)  #endif  } +#ifdef CONFIG_KVM_MPIC + +void kvmppc_mpic_set_epr(struct kvm_vcpu *vcpu); +int kvmppc_mpic_connect_vcpu(struct kvm_device *dev, struct kvm_vcpu *vcpu, +			     u32 cpu); +void kvmppc_mpic_disconnect_vcpu(struct openpic *opp, struct kvm_vcpu *vcpu); + +#else + +static inline void kvmppc_mpic_set_epr(struct kvm_vcpu *vcpu) +{ +} + +static inline int kvmppc_mpic_connect_vcpu(struct kvm_device *dev, +		struct kvm_vcpu *vcpu, u32 cpu) +{ +	return -EINVAL; +} + +static inline void kvmppc_mpic_disconnect_vcpu(struct openpic *opp, +		struct kvm_vcpu *vcpu) +{ +} + +#endif /* CONFIG_KVM_MPIC */ +  int kvm_vcpu_ioctl_config_tlb(struct kvm_vcpu *vcpu,  			      struct kvm_config_tlb *cfg);  int kvm_vcpu_ioctl_dirty_tlb(struct kvm_vcpu *vcpu, @@ -282,8 +376,15 @@ void kvmppc_init_lpid(unsigned long nr_lpids);  static inline void kvmppc_mmu_flush_icache(pfn_t pfn)  { -	/* Clear i-cache for new pages */  	struct page *page; +	/* +	 * We can only access pages that the kernel maps +	 * as memory. Bail out for unmapped ones. +	 */ +	if (!pfn_valid(pfn)) +		return; + +	/* Clear i-cache for new pages */  	page = pfn_to_page(pfn);  	if (!test_bit(PG_arch_1, &page->flags)) {  		flush_dcache_icache_page(page); @@ -323,4 +424,6 @@ static inline ulong kvmppc_get_ea_indexed(struct kvm_vcpu *vcpu, int ra, int rb)  	return ea;  } +extern void xics_wake_cpu(int cpu); +  #endif /* __POWERPC_KVM_PPC_H__ */ diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h index c9c67fc888c..79932243362 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h @@ -290,6 +290,7 @@  #define     LPCR_PECE1	0x00002000	/* decrementer can cause exit */  #define     LPCR_PECE2	0x00001000	/* machine check etc can cause exit */  #define   LPCR_MER	0x00000800	/* Mediated External Exception */ +#define   LPCR_MER_SH	11  #define   LPCR_LPES    0x0000000c  #define   LPCR_LPES0   0x00000008      /* LPAR Env selector 0 */  #define   LPCR_LPES1   0x00000004      /* LPAR Env selector 1 */ diff --git a/arch/powerpc/include/uapi/asm/kvm.h b/arch/powerpc/include/uapi/asm/kvm.h index c2ff99c0156..427b9aca2a0 100644 --- a/arch/powerpc/include/uapi/asm/kvm.h +++ b/arch/powerpc/include/uapi/asm/kvm.h @@ -25,6 +25,8 @@  /* Select powerpc specific features in <linux/kvm.h> */  #define __KVM_HAVE_SPAPR_TCE  #define __KVM_HAVE_PPC_SMT +#define __KVM_HAVE_IRQCHIP +#define __KVM_HAVE_IRQ_LINE  struct kvm_regs {  	__u64 pc; @@ -272,8 +274,31 @@ struct kvm_debug_exit_arch {  /* for KVM_SET_GUEST_DEBUG */  struct kvm_guest_debug_arch { +	struct { +		/* H/W breakpoint/watchpoint address */ +		__u64 addr; +		/* +		 * Type denotes h/w breakpoint, read watchpoint, write +		 * watchpoint or watchpoint (both read and write). +		 */ +#define KVMPPC_DEBUG_NONE		0x0 +#define KVMPPC_DEBUG_BREAKPOINT		(1UL << 1) +#define KVMPPC_DEBUG_WATCH_WRITE	(1UL << 2) +#define KVMPPC_DEBUG_WATCH_READ		(1UL << 3) +		__u32 type; +		__u32 reserved; +	} bp[16];  }; +/* Debug related defines */ +/* + * kvm_guest_debug->control is a 32 bit field. The lower 16 bits are generic + * and upper 16 bits are architecture specific. Architecture specific defines + * that ioctl is for setting hardware breakpoint or software breakpoint. + */ +#define KVM_GUESTDBG_USE_SW_BP		0x00010000 +#define KVM_GUESTDBG_USE_HW_BP		0x00020000 +  /* definition of registers in kvm_run */  struct kvm_sync_regs {  }; @@ -299,6 +324,12 @@ struct kvm_allocate_rma {  	__u64 rma_size;  }; +/* for KVM_CAP_PPC_RTAS */ +struct kvm_rtas_token_args { +	char name[120]; +	__u64 token;	/* Use a token of 0 to undefine a mapping */ +}; +  struct kvm_book3e_206_tlb_entry {  	__u32 mas8;  	__u32 mas1; @@ -359,6 +390,26 @@ struct kvm_get_htab_header {  	__u16	n_invalid;  }; +/* Per-vcpu XICS interrupt controller state */ +#define KVM_REG_PPC_ICP_STATE	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c) + +#define  KVM_REG_PPC_ICP_CPPR_SHIFT	56	/* current proc priority */ +#define  KVM_REG_PPC_ICP_CPPR_MASK	0xff +#define  KVM_REG_PPC_ICP_XISR_SHIFT	32	/* interrupt status field */ +#define  KVM_REG_PPC_ICP_XISR_MASK	0xffffff +#define  KVM_REG_PPC_ICP_MFRR_SHIFT	24	/* pending IPI priority */ +#define  KVM_REG_PPC_ICP_MFRR_MASK	0xff +#define  KVM_REG_PPC_ICP_PPRI_SHIFT	16	/* pending irq priority */ +#define  KVM_REG_PPC_ICP_PPRI_MASK	0xff + +/* Device control API: PPC-specific devices */ +#define KVM_DEV_MPIC_GRP_MISC		1 +#define   KVM_DEV_MPIC_BASE_ADDR	0	/* 64-bit */ + +#define KVM_DEV_MPIC_GRP_REGISTER	2	/* 32-bit */ +#define KVM_DEV_MPIC_GRP_IRQ_ACTIVE	3	/* 32-bit */ + +/* One-Reg API: PPC-specific registers */  #define KVM_REG_PPC_HIOR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1)  #define KVM_REG_PPC_IAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2)  #define KVM_REG_PPC_IAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3) @@ -426,4 +477,26 @@ struct kvm_get_htab_header {  /* Debugging: Special instruction for software breakpoint */  #define KVM_REG_PPC_DEBUG_INST	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b) +/* MMU registers */ +#define KVM_REG_PPC_MAS0	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8c) +#define KVM_REG_PPC_MAS1	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8d) +#define KVM_REG_PPC_MAS2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8e) +#define KVM_REG_PPC_MAS7_3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8f) +#define KVM_REG_PPC_MAS4	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x90) +#define KVM_REG_PPC_MAS6	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x91) +#define KVM_REG_PPC_MMUCFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x92) +/* + * TLBnCFG fields TLBnCFG_N_ENTRY and TLBnCFG_ASSOC can be changed only using + * KVM_CAP_SW_TLB ioctl + */ +#define KVM_REG_PPC_TLB0CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x93) +#define KVM_REG_PPC_TLB1CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x94) +#define KVM_REG_PPC_TLB2CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x95) +#define KVM_REG_PPC_TLB3CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x96) +#define KVM_REG_PPC_TLB0PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x97) +#define KVM_REG_PPC_TLB1PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x98) +#define KVM_REG_PPC_TLB2PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x99) +#define KVM_REG_PPC_TLB3PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9a) +#define KVM_REG_PPC_EPTCFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9b) +  #endif /* __LINUX_KVM_POWERPC_H */  |