History

Merge tag 'signed-kvm-ppc-next' of git://github.com/agraf/linux-2.6 into kvm-next

Patch queue for ppc - 2014-05-30 In this round we have a few nice gems. PR KVM gains initial POWER8 support as well as LE host awareness, ihe e500 targets can now properly run u-boot, LE guests now work with PR KVM including KVM hypercalls and HV KVM guests can now use huge pages. On top of this there are some bug fixes.

Paolo Bonzini committed 12 years ago

Commit 53ea2e42 parents ee1a725 d8d164a45 files · +1116 −415Browse files

Unified · Split

45 files
  1. Documentation/virtual/kvm/api.txt +6 −0
  2. Documentation/virtual/kvm/ppc-pv.txt +14 −0
  3. arch/powerpc/include/asm/disassemble.h +34 −0
  4. arch/powerpc/include/asm/kvm_asm.h +10 −8
  5. arch/powerpc/include/asm/kvm_book3s.h +2 −1
  6. arch/powerpc/include/asm/kvm_book3s_64.h +123 −23
  7. arch/powerpc/include/asm/kvm_book3s_asm.h +2 −0
  8. arch/powerpc/include/asm/kvm_booke.h +0 −5
  9. arch/powerpc/include/asm/kvm_host.h +8 −1
  10. arch/powerpc/include/asm/kvm_ppc.h +79 −1
  11. arch/powerpc/include/asm/reg.h +7 −5
  12. arch/powerpc/include/asm/reg_booke.h +1 −0
  13. arch/powerpc/include/uapi/asm/kvm.h +1 −1
  14. arch/powerpc/include/uapi/asm/kvm_para.h +6 −0
  15. arch/powerpc/kernel/align.c +1 −33
  16. arch/powerpc/kernel/asm-offsets.c +10 −1
  17. arch/powerpc/kernel/epapr_paravirt.c +3 −2
  18. arch/powerpc/kernel/kvm.c +1 −1
  19. arch/powerpc/kernel/paca.c +3 −0
  20. arch/powerpc/kvm/Kconfig +1 −1
  21. arch/powerpc/kvm/book3s.c +70 −36
  22. arch/powerpc/kvm/book3s_32_mmu.c +23 −18
  23. arch/powerpc/kvm/book3s_32_mmu_host.c +2 −2
  24. arch/powerpc/kvm/book3s_64_mmu.c +23 −16
  25. arch/powerpc/kvm/book3s_64_mmu_host.c +6 −9
  26. arch/powerpc/kvm/book3s_64_mmu_hv.c +79 −37
  27. arch/powerpc/kvm/book3s_64_slb.S +40 −47
  28. arch/powerpc/kvm/book3s_emulate.c +104 −52
  29. arch/powerpc/kvm/book3s_exports.c +1 −0
  30. arch/powerpc/kvm/book3s_hv.c +18 −30
  31. arch/powerpc/kvm/book3s_hv_rm_mmu.c +2 −1
  32. arch/powerpc/kvm/book3s_hv_rmhandlers.S +58 −2
  33. arch/powerpc/kvm/book3s_interrupts.S +21 −2
  34. arch/powerpc/kvm/book3s_paired_singles.c +9 −7
  35. arch/powerpc/kvm/book3s_pr.c +195 −43
  36. arch/powerpc/kvm/book3s_pr_papr.c +12 −4
  37. arch/powerpc/kvm/book3s_rtas.c +29 −0
  38. arch/powerpc/kvm/book3s_segment.S +25 −0
  39. arch/powerpc/kvm/e500_emulate.c +15 −0
  40. arch/powerpc/kvm/emulate.c +12 −12
  41. arch/powerpc/kvm/mpic.c +4 −1
  42. arch/powerpc/kvm/powerpc.c +53 −11
  43. arch/powerpc/kvm/trace_pr.h +1 −1
  44. arch/powerpc/mm/slb.c +1 −1
  45. include/uapi/linux/kvm.h +1 −0
Documentation/virtual/kvm/api.txt+6−0
@@ -1794,6 +1794,11 @@ registers, find a list below: · 1793 unmodified lines
17941794 PPC | KVM_REG_PPC_MMCR0 | 64
17951795 PPC | KVM_REG_PPC_MMCR1 | 64
17961796 PPC | KVM_REG_PPC_MMCRA | 64
1797+ PPC | KVM_REG_PPC_MMCR2 | 64
1798+ PPC | KVM_REG_PPC_MMCRS | 64
1799+ PPC | KVM_REG_PPC_SIAR | 64
1800+ PPC | KVM_REG_PPC_SDAR | 64
1801+ PPC | KVM_REG_PPC_SIER | 64
17971802 PPC | KVM_REG_PPC_PMC1 | 32
17981803 PPC | KVM_REG_PPC_PMC2 | 32
17991804 PPC | KVM_REG_PPC_PMC3 | 32
@@ -1868,6 +1873,7 @@ registers, find a list below: · 68 unmodified lines
18681873 PPC | KVM_REG_PPC_PPR | 64
18691874 PPC | KVM_REG_PPC_ARCH_COMPAT 32
18701875 PPC | KVM_REG_PPC_DABRX | 32
1876+ PPC | KVM_REG_PPC_WORT | 64
18711877 PPC | KVM_REG_PPC_TM_GPR0 | 64
18721878 ...
18731879 PPC | KVM_REG_PPC_TM_GPR31 | 64
Documentation/virtual/kvm/ppc-pv.txt+14−0
@@ -94,10 +94,24 @@ a bitmap of available features inside the magic page. · 93 unmodified lines
9494 The following enhancements to the magic page are currently available:
9595
9696 KVM_MAGIC_FEAT_SR Maps SR registers r/w in the magic page
97+ KVM_MAGIC_FEAT_MAS0_TO_SPRG7 Maps MASn, ESR, PIR and high SPRGs
9798
9899 For enhanced features in the magic page, please check for the existence of the
99100 feature before using them!
100101
102+Magic page flags
103+================
104+
105+In addition to features that indicate whether a host is capable of a particular
106+feature we also have a channel for a guest to tell the guest whether it's capable
107+of something. This is what we call "flags".
108+
109+Flags are passed to the host in the low 12 bits of the Effective Address.
110+
111+The following flags are currently available for a guest to expose:
112+
113+ MAGIC_PAGE_FLAG_NOT_MAPPED_NX Guest handles NX bits correclty wrt magic page
114+
101115 MSR bits
102116 ========
103117
arch/powerpc/include/asm/disassemble.h+34−0
@@ -81,4 +81,38 @@ static inline unsigned int get_oc(u32 inst) · 80 unmodified lines
8181 {
8282 return (inst >> 11) & 0x7fff;
8383 }
84+
85+#define IS_XFORM(inst) (get_op(inst) == 31)
86+#define IS_DSFORM(inst) (get_op(inst) >= 56)
87+
88+/*
89+ * Create a DSISR value from the instruction
90+ */
91+static inline unsigned make_dsisr(unsigned instr)
92+{
93+ unsigned dsisr;
94+
95+
96+ /* bits 6:15 --> 22:31 */
97+ dsisr = (instr & 0x03ff0000) >> 16;
98+
99+ if (IS_XFORM(instr)) {
100+ /* bits 29:30 --> 15:16 */
101+ dsisr |= (instr & 0x00000006) << 14;
102+ /* bit 25 --> 17 */
103+ dsisr |= (instr & 0x00000040) << 8;
104+ /* bits 21:24 --> 18:21 */
105+ dsisr |= (instr & 0x00000780) << 3;
106+ } else {
107+ /* bit 5 --> 17 */
108+ dsisr |= (instr & 0x04000000) >> 12;
109+ /* bits 1: 4 --> 18:21 */
110+ dsisr |= (instr & 0x78000000) >> 17;
111+ /* bits 30:31 --> 12:13 */
112+ if (IS_DSFORM(instr))
113+ dsisr |= (instr & 0x00000003) << 18;
114+ }
115+
116+ return dsisr;
117+}
84118 #endif /* __ASM_PPC_DISASSEMBLE_H__ */
arch/powerpc/include/asm/kvm_asm.h+10−8
@@ -102,6 +102,7 @@ · 101 unmodified lines
102102 #define BOOK3S_INTERRUPT_PERFMON 0xf00
103103 #define BOOK3S_INTERRUPT_ALTIVEC 0xf20
104104 #define BOOK3S_INTERRUPT_VSX 0xf40
105+#define BOOK3S_INTERRUPT_FAC_UNAVAIL 0xf60
105106 #define BOOK3S_INTERRUPT_H_FAC_UNAVAIL 0xf80
106107
107108 #define BOOK3S_IRQPRIO_SYSTEM_RESET 0
@@ -114,14 +115,15 @@ · 6 unmodified lines
114115 #define BOOK3S_IRQPRIO_FP_UNAVAIL 7
115116 #define BOOK3S_IRQPRIO_ALTIVEC 8
116117 #define BOOK3S_IRQPRIO_VSX 9
117−#define BOOK3S_IRQPRIO_SYSCALL 10
118−#define BOOK3S_IRQPRIO_MACHINE_CHECK 11
119−#define BOOK3S_IRQPRIO_DEBUG 12
120−#define BOOK3S_IRQPRIO_EXTERNAL 13
121−#define BOOK3S_IRQPRIO_DECREMENTER 14
122−#define BOOK3S_IRQPRIO_PERFORMANCE_MONITOR 15
123−#define BOOK3S_IRQPRIO_EXTERNAL_LEVEL 16
124−#define BOOK3S_IRQPRIO_MAX 17
118+#define BOOK3S_IRQPRIO_FAC_UNAVAIL 10
119+#define BOOK3S_IRQPRIO_SYSCALL 11
120+#define BOOK3S_IRQPRIO_MACHINE_CHECK 12
121+#define BOOK3S_IRQPRIO_DEBUG 13
122+#define BOOK3S_IRQPRIO_EXTERNAL 14
123+#define BOOK3S_IRQPRIO_DECREMENTER 15
124+#define BOOK3S_IRQPRIO_PERFORMANCE_MONITOR 16
125+#define BOOK3S_IRQPRIO_EXTERNAL_LEVEL 17
126+#define BOOK3S_IRQPRIO_MAX 18
125127
126128 #define BOOK3S_HFLAG_DCBZ32 0x1
127129 #define BOOK3S_HFLAG_SLB 0x2
arch/powerpc/include/asm/kvm_book3s.h+2−1
@@ -268,9 +268,10 @@ static inline ulong kvmppc_get_pc(struct kvm_vcpu *vcpu) · 267 unmodified lines
268268 return vcpu->arch.pc;
269269 }
270270
271+static inline u64 kvmppc_get_msr(struct kvm_vcpu *vcpu);
271272 static inline bool kvmppc_need_byteswap(struct kvm_vcpu *vcpu)
272273 {
273− return (vcpu->arch.shared->msr & MSR_LE) != (MSR_KERNEL & MSR_LE);
274+ return (kvmppc_get_msr(vcpu) & MSR_LE) != (MSR_KERNEL & MSR_LE);
274275 }
275276
276277 static inline u32 kvmppc_get_last_inst_internal(struct kvm_vcpu *vcpu, ulong pc)
arch/powerpc/include/asm/kvm_book3s_64.h+123−23
@@ -77,34 +77,122 @@ static inline long try_lock_hpte(unsigned long *hpte, unsigned long bits) · 76 unmodified lines
7777 return old == 0;
7878 }
7979
80+static inline int __hpte_actual_psize(unsigned int lp, int psize)
81+{
82+ int i, shift;
83+ unsigned int mask;
84+
85+ /* start from 1 ignoring MMU_PAGE_4K */
86+ for (i = 1; i < MMU_PAGE_COUNT; i++) {
87+
88+ /* invalid penc */
89+ if (mmu_psize_defs[psize].penc[i] == -1)
90+ continue;
91+ /*
92+ * encoding bits per actual page size
93+ * PTE LP actual page size
94+ * rrrr rrrz >=8KB
95+ * rrrr rrzz >=16KB
96+ * rrrr rzzz >=32KB
97+ * rrrr zzzz >=64KB
98+ * .......
99+ */
100+ shift = mmu_psize_defs[i].shift - LP_SHIFT;
101+ if (shift > LP_BITS)
102+ shift = LP_BITS;
103+ mask = (1 << shift) - 1;
104+ if ((lp & mask) == mmu_psize_defs[psize].penc[i])
105+ return i;
106+ }
107+ return -1;
108+}
109+
80110 static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r,
81111 unsigned long pte_index)
82112 {
83− unsigned long rb, va_low;
113+ int b_psize, a_psize;
114+ unsigned int penc;
115+ unsigned long rb = 0, va_low, sllp;
116+ unsigned int lp = (r >> LP_SHIFT) & ((1 << LP_BITS) - 1);
117+
118+ if (!(v & HPTE_V_LARGE)) {
119+ /* both base and actual psize is 4k */
120+ b_psize = MMU_PAGE_4K;
121+ a_psize = MMU_PAGE_4K;
122+ } else {
123+ for (b_psize = 0; b_psize < MMU_PAGE_COUNT; b_psize++) {
124+
125+ /* valid entries have a shift value */
126+ if (!mmu_psize_defs[b_psize].shift)
127+ continue;
84128
129+ a_psize = __hpte_actual_psize(lp, b_psize);
130+ if (a_psize != -1)
131+ break;
132+ }
133+ }
134+ /*
135+ * Ignore the top 14 bits of va
136+ * v have top two bits covering segment size, hence move
137+ * by 16 bits, Also clear the lower HPTE_V_AVPN_SHIFT (7) bits.
138+ * AVA field in v also have the lower 23 bits ignored.
139+ * For base page size 4K we need 14 .. 65 bits (so need to
140+ * collect extra 11 bits)
141+ * For others we need 14..14+i
142+ */
143+ /* This covers 14..54 bits of va*/
85144 rb = (v & ~0x7fUL) << 16; /* AVA field */
145+ /*
146+ * AVA in v had cleared lower 23 bits. We need to derive
147+ * that from pteg index
148+ */
86149 va_low = pte_index >> 3;
87150 if (v & HPTE_V_SECONDARY)
88151 va_low = ~va_low;
89− /* xor vsid from AVA */
152+ /*
153+ * get the vpn bits from va_low using reverse of hashing.
154+ * In v we have va with 23 bits dropped and then left shifted
155+ * HPTE_V_AVPN_SHIFT (7) bits. Now to find vsid we need
156+ * right shift it with (SID_SHIFT - (23 - 7))
157+ */
90158 if (!(v & HPTE_V_1TB_SEG))
91− va_low ^= v >> 12;
159+ va_low ^= v >> (SID_SHIFT - 16);
92160 else
93− va_low ^= v >> 24;
161+ va_low ^= v >> (SID_SHIFT_1T - 16);
94162 va_low &= 0x7ff;
95− if (v & HPTE_V_LARGE) {
96− rb |= 1; /* L field */
97− if (cpu_has_feature(CPU_FTR_ARCH_206) &&
98− (r & 0xff000)) {
99− /* non-16MB large page, must be 64k */
100− /* (masks depend on page size) */
101− rb |= 0x1000; /* page encoding in LP field */
102− rb |= (va_low & 0x7f) << 16; /* 7b of VA in AVA/LP field */
103− rb |= ((va_low << 4) & 0xf0); /* AVAL field (P7 doesn't seem to care) */
104− }
105− } else {
106− /* 4kB page */
107− rb |= (va_low & 0x7ff) << 12; /* remaining 11b of VA */
163+
164+ switch (b_psize) {
165+ case MMU_PAGE_4K:
166+ sllp = ((mmu_psize_defs[a_psize].sllp & SLB_VSID_L) >> 6) |
167+ ((mmu_psize_defs[a_psize].sllp & SLB_VSID_LP) >> 4);
168+ rb |= sllp << 5; /* AP field */
169+ rb |= (va_low & 0x7ff) << 12; /* remaining 11 bits of AVA */
170+ break;
171+ default:
172+ {
173+ int aval_shift;
174+ /*
175+ * remaining 7bits of AVA/LP fields
176+ * Also contain the rr bits of LP
177+ */
178+ rb |= (va_low & 0x7f) << 16;
179+ /*
180+ * Now clear not needed LP bits based on actual psize
181+ */
182+ rb &= ~((1ul << mmu_psize_defs[a_psize].shift) - 1);
183+ /*
184+ * AVAL field 58..77 - base_page_shift bits of va
185+ * we have space for 58..64 bits, Missing bits should
186+ * be zero filled. +1 is to take care of L bit shift
187+ */
188+ aval_shift = 64 - (77 - mmu_psize_defs[b_psize].shift) + 1;
189+ rb |= ((va_low << aval_shift) & 0xfe);
190+
191+ rb |= 1; /* L field */
192+ penc = mmu_psize_defs[b_psize].penc[a_psize];
193+ rb |= penc << 12; /* LP field */
194+ break;
195+ }
108196 }
109197 rb |= (v >> 54) & 0x300; /* B field */
110198 return rb;
@@ -112,14 +200,26 @@ static inline unsigned long compute_tlbie_rb(unsigned long v, unsigned long r, · 1 unmodified line
112200
113201 static inline unsigned long hpte_page_size(unsigned long h, unsigned long l)
114202 {
203+ int size, a_psize;
204+ /* Look at the 8 bit LP value */
205+ unsigned int lp = (l >> LP_SHIFT) & ((1 << LP_BITS) - 1);
206+
115207 /* only handle 4k, 64k and 16M pages for now */
116208 if (!(h & HPTE_V_LARGE))
117− return 1ul << 12; /* 4k page */
118− if ((l & 0xf000) == 0x1000 && cpu_has_feature(CPU_FTR_ARCH_206))
119− return 1ul << 16; /* 64k page */
120− if ((l & 0xff000) == 0)
121− return 1ul << 24; /* 16M page */
122− return 0; /* error */
209+ return 1ul << 12;
210+ else {
211+ for (size = 0; size < MMU_PAGE_COUNT; size++) {
212+ /* valid entries have a shift value */
213+ if (!mmu_psize_defs[size].shift)
214+ continue;
215+
216+ a_psize = __hpte_actual_psize(lp, size);
217+ if (a_psize != -1)
218+ return 1ul << mmu_psize_defs[a_psize].shift;
219+ }
220+
221+ }
222+ return 0;
123223 }
124224
125225 static inline unsigned long hpte_rpn(unsigned long ptel, unsigned long psize)
arch/powerpc/include/asm/kvm_book3s_asm.h+2−0
@@ -104,6 +104,7 @@ struct kvmppc_host_state { · 103 unmodified lines
104104 #ifdef CONFIG_PPC_BOOK3S_64
105105 u64 cfar;
106106 u64 ppr;
107+ u64 host_fscr;
107108 #endif
108109 };
109110
@@ -133,6 +134,7 @@ struct kvmppc_book3s_shadow_vcpu { · 23 unmodified lines
133134 u64 esid;
134135 u64 vsid;
135136 } slb[64]; /* guest SLB */
137+ u64 shadow_fscr;
136138 #endif
137139 };
138140
arch/powerpc/include/asm/kvm_booke.h+0−5
@@ -108,9 +108,4 @@ static inline ulong kvmppc_get_fault_dar(struct kvm_vcpu *vcpu) · 107 unmodified lines
108108 {
109109 return vcpu->arch.fault_dear;
110110 }
111−
112−static inline ulong kvmppc_get_msr(struct kvm_vcpu *vcpu)
113−{
114− return vcpu->arch.shared->msr;
115−}
116111 #endif /* __ASM_KVM_BOOKE_H__ */
arch/powerpc/include/asm/kvm_host.h+8−1
@@ -449,7 +449,9 @@ struct kvm_vcpu_arch { · 448 unmodified lines
449449 ulong pc;
450450 ulong ctr;
451451 ulong lr;
452+#ifdef CONFIG_PPC_BOOK3S
452453 ulong tar;
454+#endif
453455
454456 ulong xer;
455457 u32 cr;
@@ -475,6 +477,7 @@ struct kvm_vcpu_arch { · 19 unmodified lines
475477 ulong ppr;
476478 ulong pspb;
477479 ulong fscr;
480+ ulong shadow_fscr;
478481 ulong ebbhr;
479482 ulong ebbrr;
480483 ulong bescr;
@@ -562,6 +565,7 @@ struct kvm_vcpu_arch { · 81 unmodified lines
562565 #ifdef CONFIG_PPC_BOOK3S
563566 ulong fault_dar;
564567 u32 fault_dsisr;
568+ unsigned long intr_msr;
565569 #endif
566570
567571 #ifdef CONFIG_BOOKE
@@ -622,8 +626,12 @@ struct kvm_vcpu_arch { · 54 unmodified lines
622626 wait_queue_head_t cpu_run;
623627
624628 struct kvm_vcpu_arch_shared *shared;
629+#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE)
630+ bool shared_big_endian;
631+#endif
625632 unsigned long magic_page_pa; /* phys addr to map the magic page to */
626633 unsigned long magic_page_ea; /* effect. addr to map the magic page to */
634+ bool disable_kernel_nx;
627635
628636 int irq_type; /* one of KVM_IRQ_* */
629637 int irq_cpu_id;
@@ -654,7 +662,6 @@ struct kvm_vcpu_arch { · 24 unmodified lines
654662 spinlock_t tbacct_lock;
655663 u64 busy_stolen;
656664 u64 busy_preempt;
657− unsigned long intr_msr;
658665 #endif
659666 };
660667
arch/powerpc/include/asm/kvm_ppc.h+79−1
@@ -448,6 +448,84 @@ static inline void kvmppc_mmu_flush_icache(pfn_t pfn) · 447 unmodified lines
448448 }
449449 }
450450
451+/*
452+ * Shared struct helpers. The shared struct can be little or big endian,
453+ * depending on the guest endianness. So expose helpers to all of them.
454+ */
455+static inline bool kvmppc_shared_big_endian(struct kvm_vcpu *vcpu)
456+{
457+#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE)
458+ /* Only Book3S_64 PR supports bi-endian for now */
459+ return vcpu->arch.shared_big_endian;
460+#elif defined(CONFIG_PPC_BOOK3S_64) && defined(__LITTLE_ENDIAN__)
461+ /* Book3s_64 HV on little endian is always little endian */
462+ return false;
463+#else
464+ return true;
465+#endif
466+}
467+
468+#define SHARED_WRAPPER_GET(reg, size) \
469+static inline u##size kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
470+{ \
471+ if (kvmppc_shared_big_endian(vcpu)) \
472+ return be##size##_to_cpu(vcpu->arch.shared->reg); \
473+ else \
474+ return le##size##_to_cpu(vcpu->arch.shared->reg); \
475+} \
476+
477+#define SHARED_WRAPPER_SET(reg, size) \
478+static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, u##size val) \
479+{ \
480+ if (kvmppc_shared_big_endian(vcpu)) \
481+ vcpu->arch.shared->reg = cpu_to_be##size(val); \
482+ else \
483+ vcpu->arch.shared->reg = cpu_to_le##size(val); \
484+} \
485+
486+#define SHARED_WRAPPER(reg, size) \
487+ SHARED_WRAPPER_GET(reg, size) \
488+ SHARED_WRAPPER_SET(reg, size) \
489+
490+SHARED_WRAPPER(critical, 64)
491+SHARED_WRAPPER(sprg0, 64)
492+SHARED_WRAPPER(sprg1, 64)
493+SHARED_WRAPPER(sprg2, 64)
494+SHARED_WRAPPER(sprg3, 64)
495+SHARED_WRAPPER(srr0, 64)
496+SHARED_WRAPPER(srr1, 64)
497+SHARED_WRAPPER(dar, 64)
498+SHARED_WRAPPER_GET(msr, 64)
499+static inline void kvmppc_set_msr_fast(struct kvm_vcpu *vcpu, u64 val)
500+{
501+ if (kvmppc_shared_big_endian(vcpu))
502+ vcpu->arch.shared->msr = cpu_to_be64(val);
503+ else
504+ vcpu->arch.shared->msr = cpu_to_le64(val);
505+}
506+SHARED_WRAPPER(dsisr, 32)
507+SHARED_WRAPPER(int_pending, 32)
508+SHARED_WRAPPER(sprg4, 64)
509+SHARED_WRAPPER(sprg5, 64)
510+SHARED_WRAPPER(sprg6, 64)
511+SHARED_WRAPPER(sprg7, 64)
512+
513+static inline u32 kvmppc_get_sr(struct kvm_vcpu *vcpu, int nr)
514+{
515+ if (kvmppc_shared_big_endian(vcpu))
516+ return be32_to_cpu(vcpu->arch.shared->sr[nr]);
517+ else
518+ return le32_to_cpu(vcpu->arch.shared->sr[nr]);
519+}
520+
521+static inline void kvmppc_set_sr(struct kvm_vcpu *vcpu, int nr, u32 val)
522+{
523+ if (kvmppc_shared_big_endian(vcpu))
524+ vcpu->arch.shared->sr[nr] = cpu_to_be32(val);
525+ else
526+ vcpu->arch.shared->sr[nr] = cpu_to_le32(val);
527+}
528+
451529 /*
452530 * Please call after prepare_to_enter. This function puts the lazy ee and irq
453531 * disabled tracking state back to normal mode, without actually enabling
@@ -485,7 +563,7 @@ static inline ulong kvmppc_get_ea_indexed(struct kvm_vcpu *vcpu, int ra, int rb) · 31 unmodified lines
485563 msr_64bit = MSR_SF;
486564 #endif
487565
488− if (!(vcpu->arch.shared->msr & msr_64bit))
566+ if (!(kvmppc_get_msr(vcpu) & msr_64bit))
489567 ea = (uint32_t)ea;
490568
491569 return ea;
arch/powerpc/include/asm/reg.h+7−5
@@ -670,18 +670,20 @@ · 669 unmodified lines
670670 #define MMCR0_PROBLEM_DISABLE MMCR0_FCP
671671 #define MMCR0_FCM1 0x10000000UL /* freeze counters while MSR mark = 1 */
672672 #define MMCR0_FCM0 0x08000000UL /* freeze counters while MSR mark = 0 */
673−#define MMCR0_PMXE 0x04000000UL /* performance monitor exception enable */
674−#define MMCR0_FCECE 0x02000000UL /* freeze ctrs on enabled cond or event */
673+#define MMCR0_PMXE ASM_CONST(0x04000000) /* perf mon exception enable */
674+#define MMCR0_FCECE ASM_CONST(0x02000000) /* freeze ctrs on enabled cond or event */
675675 #define MMCR0_TBEE 0x00400000UL /* time base exception enable */
676676 #define MMCR0_BHRBA 0x00200000UL /* BHRB Access allowed in userspace */
677677 #define MMCR0_EBE 0x00100000UL /* Event based branch enable */
678678 #define MMCR0_PMCC 0x000c0000UL /* PMC control */
679679 #define MMCR0_PMCC_U6 0x00080000UL /* PMC1-6 are R/W by user (PR) */
680680 #define MMCR0_PMC1CE 0x00008000UL /* PMC1 count enable*/
681−#define MMCR0_PMCjCE 0x00004000UL /* PMCj count enable*/
681+#define MMCR0_PMCjCE ASM_CONST(0x00004000) /* PMCj count enable*/
682682 #define MMCR0_TRIGGER 0x00002000UL /* TRIGGER enable */
683−#define MMCR0_PMAO_SYNC 0x00000800UL /* PMU interrupt is synchronous */
684−#define MMCR0_PMAO 0x00000080UL /* performance monitor alert has occurred, set to 0 after handling exception */
683+#define MMCR0_PMAO_SYNC ASM_CONST(0x00000800) /* PMU intr is synchronous */
684+#define MMCR0_C56RUN ASM_CONST(0x00000100) /* PMC5/6 count when RUN=0 */
685+/* performance monitor alert has occurred, set to 0 after handling exception */
686+#define MMCR0_PMAO ASM_CONST(0x00000080)
685687 #define MMCR0_SHRFC 0x00000040UL /* SHRre freeze conditions between threads */
686688 #define MMCR0_FC56 0x00000010UL /* freeze counters 5 and 6 */
687689 #define MMCR0_FCTI 0x00000008UL /* freeze counters in tags inactive mode */
arch/powerpc/include/asm/reg_booke.h+1−0
@@ -583,6 +583,7 @@ · 582 unmodified lines
583583
584584 /* Bit definitions for L1CSR0. */
585585 #define L1CSR0_CPE 0x00010000 /* Data Cache Parity Enable */
586+#define L1CSR0_CUL 0x00000400 /* Data Cache Unable to Lock */
586587 #define L1CSR0_CLFC 0x00000100 /* Cache Lock Bits Flash Clear */
587588 #define L1CSR0_DCFI 0x00000002 /* Data Cache Flash Invalidate */
588589 #define L1CSR0_CFI 0x00000002 /* Cache Flash Invalidate */
arch/powerpc/include/uapi/asm/kvm.h+1−1
@@ -545,7 +545,6 @@ struct kvm_get_htab_header { · 544 unmodified lines
545545 #define KVM_REG_PPC_TCSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb1)
546546 #define KVM_REG_PPC_PID (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb2)
547547 #define KVM_REG_PPC_ACOP (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb3)
548−#define KVM_REG_PPC_WORT (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb4)
549548
550549 #define KVM_REG_PPC_VRSAVE (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb4)
551550 #define KVM_REG_PPC_LPCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb5)
@@ -555,6 +554,7 @@ struct kvm_get_htab_header { · 3 unmodified lines
555554 #define KVM_REG_PPC_ARCH_COMPAT (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb7)
556555
557556 #define KVM_REG_PPC_DABRX (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb8)
557+#define KVM_REG_PPC_WORT (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb9)
558558
559559 /* Transactional Memory checkpointed state:
560560 * This is all GPRs, all VSX regs and a subset of SPRs
arch/powerpc/include/uapi/asm/kvm_para.h+6−0
@@ -82,10 +82,16 @@ struct kvm_vcpu_arch_shared { · 81 unmodified lines
8282
8383 #define KVM_FEATURE_MAGIC_PAGE 1
8484
85+/* Magic page flags from host to guest */
86+
8587 #define KVM_MAGIC_FEAT_SR (1 << 0)
8688
8789 /* MASn, ESR, PIR, and high SPRGs */
8890 #define KVM_MAGIC_FEAT_MAS0_TO_SPRG7 (1 << 1)
8991
92+/* Magic page flags from guest to host */
93+
94+#define MAGIC_PAGE_FLAG_NOT_MAPPED_NX (1 << 0)
95+
9096
9197 #endif /* _UAPI__POWERPC_KVM_PARA_H__ */
arch/powerpc/kernel/align.c+1−33
@@ -25,14 +25,13 @@ · 24 unmodified lines
2525 #include <asm/cputable.h>
2626 #include <asm/emulated_ops.h>
2727 #include <asm/switch_to.h>
28+#include <asm/disassemble.h>
2829
2930 struct aligninfo {
3031 unsigned char len;
3132 unsigned char flags;
3233 };
3334
34−#define IS_XFORM(inst) (((inst) >> 26) == 31)
35−#define IS_DSFORM(inst) (((inst) >> 26) >= 56)
3635
3736 #define INVALID { 0, 0 }
3837
@@ -191,37 +190,6 @@ static struct aligninfo aligninfo[128] = { · 152 unmodified lines
191190 INVALID, /* 11 1 1111 */
192191 };
193192
194−/*
195− * Create a DSISR value from the instruction
196− */
197−static inline unsigned make_dsisr(unsigned instr)
198−{
199− unsigned dsisr;
200−
201−
202− /* bits 6:15 --> 22:31 */
203− dsisr = (instr & 0x03ff0000) >> 16;
204−
205− if (IS_XFORM(instr)) {
206− /* bits 29:30 --> 15:16 */
207− dsisr |= (instr & 0x00000006) << 14;
208− /* bit 25 --> 17 */
209− dsisr |= (instr & 0x00000040) << 8;
210− /* bits 21:24 --> 18:21 */
211− dsisr |= (instr & 0x00000780) << 3;
212− } else {
213− /* bit 5 --> 17 */
214− dsisr |= (instr & 0x04000000) >> 12;
215− /* bits 1: 4 --> 18:21 */
216− dsisr |= (instr & 0x78000000) >> 17;
217− /* bits 30:31 --> 12:13 */
218− if (IS_DSFORM(instr))
219− dsisr |= (instr & 0x00000003) << 18;
220− }
221−
222− return dsisr;
223−}
224−
225193 /*
226194 * The dcbz (data cache block zero) instruction
227195 * gives an alignment fault if used on non-cacheable
arch/powerpc/kernel/asm-offsets.c+10−1
@@ -54,6 +54,7 @@ · 53 unmodified lines
5454 #endif
5555 #if defined(CONFIG_KVM) && defined(CONFIG_PPC_BOOK3S)
5656 #include <asm/kvm_book3s.h>
57+#include <asm/kvm_ppc.h>
5758 #endif
5859
5960 #ifdef CONFIG_PPC32
@@ -445,7 +446,9 @@ int main(void) · 385 unmodified lines
445446 DEFINE(VCPU_XER, offsetof(struct kvm_vcpu, arch.xer));
446447 DEFINE(VCPU_CTR, offsetof(struct kvm_vcpu, arch.ctr));
447448 DEFINE(VCPU_LR, offsetof(struct kvm_vcpu, arch.lr));
449+#ifdef CONFIG_PPC_BOOK3S
448450 DEFINE(VCPU_TAR, offsetof(struct kvm_vcpu, arch.tar));
451+#endif
449452 DEFINE(VCPU_CR, offsetof(struct kvm_vcpu, arch.cr));
450453 DEFINE(VCPU_PC, offsetof(struct kvm_vcpu, arch.pc));
451454 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
@@ -467,6 +470,9 @@ int main(void) · 15 unmodified lines
467470 DEFINE(VCPU_SHARED, offsetof(struct kvm_vcpu, arch.shared));
468471 DEFINE(VCPU_SHARED_MSR, offsetof(struct kvm_vcpu_arch_shared, msr));
469472 DEFINE(VCPU_SHADOW_MSR, offsetof(struct kvm_vcpu, arch.shadow_msr));
473+#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE)
474+ DEFINE(VCPU_SHAREDBE, offsetof(struct kvm_vcpu, arch.shared_big_endian));
475+#endif
470476
471477 DEFINE(VCPU_SHARED_MAS0, offsetof(struct kvm_vcpu_arch_shared, mas0));
472478 DEFINE(VCPU_SHARED_MAS1, offsetof(struct kvm_vcpu_arch_shared, mas1));
@@ -493,7 +499,6 @@ int main(void) · 20 unmodified lines
493499 DEFINE(VCPU_DAR, offsetof(struct kvm_vcpu, arch.shregs.dar));
494500 DEFINE(VCPU_VPA, offsetof(struct kvm_vcpu, arch.vpa.pinned_addr));
495501 DEFINE(VCPU_VPA_DIRTY, offsetof(struct kvm_vcpu, arch.vpa.dirty));
496− DEFINE(VCPU_INTR_MSR, offsetof(struct kvm_vcpu, arch.intr_msr));
497502 #endif
498503 #ifdef CONFIG_PPC_BOOK3S
499504 DEFINE(VCPU_VCPUID, offsetof(struct kvm_vcpu, vcpu_id));
@@ -528,11 +533,13 @@ int main(void) · 28 unmodified lines
528533 DEFINE(VCPU_SLB_NR, offsetof(struct kvm_vcpu, arch.slb_nr));
529534 DEFINE(VCPU_FAULT_DSISR, offsetof(struct kvm_vcpu, arch.fault_dsisr));
530535 DEFINE(VCPU_FAULT_DAR, offsetof(struct kvm_vcpu, arch.fault_dar));
536+ DEFINE(VCPU_INTR_MSR, offsetof(struct kvm_vcpu, arch.intr_msr));
531537 DEFINE(VCPU_LAST_INST, offsetof(struct kvm_vcpu, arch.last_inst));
532538 DEFINE(VCPU_TRAP, offsetof(struct kvm_vcpu, arch.trap));
533539 DEFINE(VCPU_CFAR, offsetof(struct kvm_vcpu, arch.cfar));
534540 DEFINE(VCPU_PPR, offsetof(struct kvm_vcpu, arch.ppr));
535541 DEFINE(VCPU_FSCR, offsetof(struct kvm_vcpu, arch.fscr));
542+ DEFINE(VCPU_SHADOW_FSCR, offsetof(struct kvm_vcpu, arch.shadow_fscr));
536543 DEFINE(VCPU_PSPB, offsetof(struct kvm_vcpu, arch.pspb));
537544 DEFINE(VCPU_EBBHR, offsetof(struct kvm_vcpu, arch.ebbhr));
538545 DEFINE(VCPU_EBBRR, offsetof(struct kvm_vcpu, arch.ebbrr));
@@ -614,6 +621,7 @@ int main(void) · 75 unmodified lines
614621 #ifdef CONFIG_PPC64
615622 SVCPU_FIELD(SVCPU_SLB, slb);
616623 SVCPU_FIELD(SVCPU_SLB_MAX, slb_max);
624+ SVCPU_FIELD(SVCPU_SHADOW_FSCR, shadow_fscr);
617625 #endif
618626
619627 HSTATE_FIELD(HSTATE_HOST_R1, host_r1);
@@ -649,6 +657,7 @@ int main(void) · 29 unmodified lines
649657 #ifdef CONFIG_PPC_BOOK3S_64
650658 HSTATE_FIELD(HSTATE_CFAR, cfar);
651659 HSTATE_FIELD(HSTATE_PPR, ppr);
660+ HSTATE_FIELD(HSTATE_HOST_FSCR, host_fscr);
652661 #endif /* CONFIG_PPC_BOOK3S_64 */
653662
654663 #else /* CONFIG_PPC_BOOK3S */
arch/powerpc/kernel/epapr_paravirt.c+3−2
@@ -47,9 +47,10 @@ static int __init early_init_dt_scan_epapr(unsigned long node, · 46 unmodified lines
4747 return -1;
4848
4949 for (i = 0; i < (len / 4); i++) {
50− patch_instruction(epapr_hypercall_start + i, insts[i]);
50+ u32 inst = be32_to_cpu(insts[i]);
51+ patch_instruction(epapr_hypercall_start + i, inst);
5152 #if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
52− patch_instruction(epapr_ev_idle_start + i, insts[i]);
53+ patch_instruction(epapr_ev_idle_start + i, inst);
5354 #endif
5455 }
5556
arch/powerpc/kernel/kvm.c+1−1
@@ -417,7 +417,7 @@ static void kvm_map_magic_page(void *data) · 416 unmodified lines
417417 ulong out[8];
418418
419419 in[0] = KVM_MAGIC_PAGE;
420− in[1] = KVM_MAGIC_PAGE;
420+ in[1] = KVM_MAGIC_PAGE | MAGIC_PAGE_FLAG_NOT_MAPPED_NX;
421421
422422 epapr_hypercall(in, out, KVM_HCALL_TOKEN(KVM_HC_PPC_MAP_MAGIC_PAGE));
423423
arch/powerpc/kernel/paca.c+3−0
@@ -98,6 +98,9 @@ static inline void free_lppacas(void) { } · 97 unmodified lines
9898 /*
9999 * 3 persistent SLBs are registered here. The buffer will be zero
100100 * initially, hence will all be invaild until we actually write them.
101+ *
102+ * If you make the number of persistent SLB entries dynamic, please also
103+ * update PR KVM to flush and restore them accordingly.
101104 */
102105 static struct slb_shadow *slb_shadow;
103106
arch/powerpc/kvm/Kconfig+1−1
@@ -6,7 +6,6 @@ source "virt/kvm/Kconfig" · 5 unmodified lines
66
77 menuconfig VIRTUALIZATION
88 bool "Virtualization"
9− depends on !CPU_LITTLE_ENDIAN
109 ---help---
1110 Say Y here to get to see options for using your Linux host to run
1211 other operating systems inside virtual machines (guests).
@@ -76,6 +75,7 @@ config KVM_BOOK3S_64 · 63 unmodified lines
7675 config KVM_BOOK3S_64_HV
7776 tristate "KVM support for POWER7 and PPC970 using hypervisor mode in host"
7877 depends on KVM_BOOK3S_64
78+ depends on !CPU_LITTLE_ENDIAN
7979 select KVM_BOOK3S_HV_POSSIBLE
8080 select MMU_NOTIFIER
8181 select CMA
arch/powerpc/kvm/book3s.c+70−36
@@ -85,9 +85,9 @@ static inline void kvmppc_update_int_pending(struct kvm_vcpu *vcpu, · 84 unmodified lines
8585 if (is_kvmppc_hv_enabled(vcpu->kvm))
8686 return;
8787 if (pending_now)
88− vcpu->arch.shared->int_pending = 1;
88+ kvmppc_set_int_pending(vcpu, 1);
8989 else if (old_pending)
90− vcpu->arch.shared->int_pending = 0;
90+ kvmppc_set_int_pending(vcpu, 0);
9191 }
9292
9393 static inline bool kvmppc_critical_section(struct kvm_vcpu *vcpu)
@@ -99,11 +99,11 @@ static inline bool kvmppc_critical_section(struct kvm_vcpu *vcpu) · 5 unmodified lines
9999 if (is_kvmppc_hv_enabled(vcpu->kvm))
100100 return false;
101101
102− crit_raw = vcpu->arch.shared->critical;
102+ crit_raw = kvmppc_get_critical(vcpu);
103103 crit_r1 = kvmppc_get_gpr(vcpu, 1);
104104
105105 /* Truncate crit indicators in 32 bit mode */
106− if (!(vcpu->arch.shared->msr & MSR_SF)) {
106+ if (!(kvmppc_get_msr(vcpu) & MSR_SF)) {
107107 crit_raw &= 0xffffffff;
108108 crit_r1 &= 0xffffffff;
109109 }
@@ -111,15 +111,15 @@ static inline bool kvmppc_critical_section(struct kvm_vcpu *vcpu) · 1 unmodified line
111111 /* Critical section when crit == r1 */
112112 crit = (crit_raw == crit_r1);
113113 /* ... and we're in supervisor mode */
114− crit = crit && !(vcpu->arch.shared->msr & MSR_PR);
114+ crit = crit && !(kvmppc_get_msr(vcpu) & MSR_PR);
115115
116116 return crit;
117117 }
118118
119119 void kvmppc_inject_interrupt(struct kvm_vcpu *vcpu, int vec, u64 flags)
120120 {
121− vcpu->arch.shared->srr0 = kvmppc_get_pc(vcpu);
122− vcpu->arch.shared->srr1 = vcpu->arch.shared->msr | flags;
121+ kvmppc_set_srr0(vcpu, kvmppc_get_pc(vcpu));
122+ kvmppc_set_srr1(vcpu, kvmppc_get_msr(vcpu) | flags);
123123 kvmppc_set_pc(vcpu, kvmppc_interrupt_offset(vcpu) + vec);
124124 vcpu->arch.mmu.reset_msr(vcpu);
125125 }
@@ -145,6 +145,7 @@ static int kvmppc_book3s_vec2irqprio(unsigned int vec) · 19 unmodified lines
145145 case 0xd00: prio = BOOK3S_IRQPRIO_DEBUG; break;
146146 case 0xf20: prio = BOOK3S_IRQPRIO_ALTIVEC; break;
147147 case 0xf40: prio = BOOK3S_IRQPRIO_VSX; break;
148+ case 0xf60: prio = BOOK3S_IRQPRIO_FAC_UNAVAIL; break;
148149 default: prio = BOOK3S_IRQPRIO_MAX; break;
149150 }
150151
@@ -225,12 +226,12 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority) · 74 unmodified lines
225226
226227 switch (priority) {
227228 case BOOK3S_IRQPRIO_DECREMENTER:
228− deliver = (vcpu->arch.shared->msr & MSR_EE) && !crit;
229+ deliver = (kvmppc_get_msr(vcpu) & MSR_EE) && !crit;
229230 vec = BOOK3S_INTERRUPT_DECREMENTER;
230231 break;
231232 case BOOK3S_IRQPRIO_EXTERNAL:
232233 case BOOK3S_IRQPRIO_EXTERNAL_LEVEL:
233− deliver = (vcpu->arch.shared->msr & MSR_EE) && !crit;
234+ deliver = (kvmppc_get_msr(vcpu) & MSR_EE) && !crit;
234235 vec = BOOK3S_INTERRUPT_EXTERNAL;
235236 break;
236237 case BOOK3S_IRQPRIO_SYSTEM_RESET:
@@ -275,6 +276,9 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority) · 38 unmodified lines
275276 case BOOK3S_IRQPRIO_PERFORMANCE_MONITOR:
276277 vec = BOOK3S_INTERRUPT_PERFMON;
277278 break;
279+ case BOOK3S_IRQPRIO_FAC_UNAVAIL:
280+ vec = BOOK3S_INTERRUPT_FAC_UNAVAIL;
281+ break;
278282 default:
279283 deliver = 0;
280284 printk(KERN_ERR "KVM: Unknown interrupt: 0x%x\n", priority);
@@ -343,7 +347,7 @@ pfn_t kvmppc_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn, bool writing, · 62 unmodified lines
343347 {
344348 ulong mp_pa = vcpu->arch.magic_page_pa;
345349
346− if (!(vcpu->arch.shared->msr & MSR_SF))
350+ if (!(kvmppc_get_msr(vcpu) & MSR_SF))
347351 mp_pa = (uint32_t)mp_pa;
348352
349353 /* Magic page override */
@@ -367,7 +371,7 @@ EXPORT_SYMBOL_GPL(kvmppc_gfn_to_pfn); · 17 unmodified lines
367371 static int kvmppc_xlate(struct kvm_vcpu *vcpu, ulong eaddr, bool data,
368372 bool iswrite, struct kvmppc_pte *pte)
369373 {
370− int relocated = (vcpu->arch.shared->msr & (data ? MSR_DR : MSR_IR));
374+ int relocated = (kvmppc_get_msr(vcpu) & (data ? MSR_DR : MSR_IR));
371375 int r;
372376
373377 if (relocated) {
@@ -498,18 +502,18 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) · 124 unmodified lines
498502 regs->ctr = kvmppc_get_ctr(vcpu);
499503 regs->lr = kvmppc_get_lr(vcpu);
500504 regs->xer = kvmppc_get_xer(vcpu);
501− regs->msr = vcpu->arch.shared->msr;
502− regs->srr0 = vcpu->arch.shared->srr0;
503− regs->srr1 = vcpu->arch.shared->srr1;
505+ regs->msr = kvmppc_get_msr(vcpu);
506+ regs->srr0 = kvmppc_get_srr0(vcpu);
507+ regs->srr1 = kvmppc_get_srr1(vcpu);
504508 regs->pid = vcpu->arch.pid;
505− regs->sprg0 = vcpu->arch.shared->sprg0;
506− regs->sprg1 = vcpu->arch.shared->sprg1;
507− regs->sprg2 = vcpu->arch.shared->sprg2;
508− regs->sprg3 = vcpu->arch.shared->sprg3;
509− regs->sprg4 = vcpu->arch.shared->sprg4;
510− regs->sprg5 = vcpu->arch.shared->sprg5;
511− regs->sprg6 = vcpu->arch.shared->sprg6;
512− regs->sprg7 = vcpu->arch.shared->sprg7;
509+ regs->sprg0 = kvmppc_get_sprg0(vcpu);
510+ regs->sprg1 = kvmppc_get_sprg1(vcpu);
511+ regs->sprg2 = kvmppc_get_sprg2(vcpu);
512+ regs->sprg3 = kvmppc_get_sprg3(vcpu);
513+ regs->sprg4 = kvmppc_get_sprg4(vcpu);
514+ regs->sprg5 = kvmppc_get_sprg5(vcpu);
515+ regs->sprg6 = kvmppc_get_sprg6(vcpu);
516+ regs->sprg7 = kvmppc_get_sprg7(vcpu);
513517
514518 for (i = 0; i < ARRAY_SIZE(regs->gpr); i++)
515519 regs->gpr[i] = kvmppc_get_gpr(vcpu, i);
@@ -527,16 +531,16 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) · 11 unmodified lines
527531 kvmppc_set_lr(vcpu, regs->lr);
528532 kvmppc_set_xer(vcpu, regs->xer);
529533 kvmppc_set_msr(vcpu, regs->msr);
530− vcpu->arch.shared->srr0 = regs->srr0;
531− vcpu->arch.shared->srr1 = regs->srr1;
532− vcpu->arch.shared->sprg0 = regs->sprg0;
533− vcpu->arch.shared->sprg1 = regs->sprg1;
534− vcpu->arch.shared->sprg2 = regs->sprg2;
535− vcpu->arch.shared->sprg3 = regs->sprg3;
536− vcpu->arch.shared->sprg4 = regs->sprg4;
537− vcpu->arch.shared->sprg5 = regs->sprg5;
538− vcpu->arch.shared->sprg6 = regs->sprg6;
539− vcpu->arch.shared->sprg7 = regs->sprg7;
534+ kvmppc_set_srr0(vcpu, regs->srr0);
535+ kvmppc_set_srr1(vcpu, regs->srr1);
536+ kvmppc_set_sprg0(vcpu, regs->sprg0);
537+ kvmppc_set_sprg1(vcpu, regs->sprg1);
538+ kvmppc_set_sprg2(vcpu, regs->sprg2);
539+ kvmppc_set_sprg3(vcpu, regs->sprg3);
540+ kvmppc_set_sprg4(vcpu, regs->sprg4);
541+ kvmppc_set_sprg5(vcpu, regs->sprg5);
542+ kvmppc_set_sprg6(vcpu, regs->sprg6);
543+ kvmppc_set_sprg7(vcpu, regs->sprg7);
540544
541545 for (i = 0; i < ARRAY_SIZE(regs->gpr); i++)
542546 kvmppc_set_gpr(vcpu, i, regs->gpr[i]);
@@ -570,10 +574,10 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg) · 27 unmodified lines
570574 r = 0;
571575 switch (reg->id) {
572576 case KVM_REG_PPC_DAR:
573− val = get_reg_val(reg->id, vcpu->arch.shared->dar);
577+ val = get_reg_val(reg->id, kvmppc_get_dar(vcpu));
574578 break;
575579 case KVM_REG_PPC_DSISR:
576− val = get_reg_val(reg->id, vcpu->arch.shared->dsisr);
580+ val = get_reg_val(reg->id, kvmppc_get_dsisr(vcpu));
577581 break;
578582 case KVM_REG_PPC_FPR0 ... KVM_REG_PPC_FPR31:
579583 i = reg->id - KVM_REG_PPC_FPR0;
@@ -627,6 +631,21 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg) · 47 unmodified lines
627631 val = get_reg_val(reg->id, kvmppc_xics_get_icp(vcpu));
628632 break;
629633 #endif /* CONFIG_KVM_XICS */
634+ case KVM_REG_PPC_FSCR:
635+ val = get_reg_val(reg->id, vcpu->arch.fscr);
636+ break;
637+ case KVM_REG_PPC_TAR:
638+ val = get_reg_val(reg->id, vcpu->arch.tar);
639+ break;
640+ case KVM_REG_PPC_EBBHR:
641+ val = get_reg_val(reg->id, vcpu->arch.ebbhr);
642+ break;
643+ case KVM_REG_PPC_EBBRR:
644+ val = get_reg_val(reg->id, vcpu->arch.ebbrr);
645+ break;
646+ case KVM_REG_PPC_BESCR:
647+ val = get_reg_val(reg->id, vcpu->arch.bescr);
648+ break;
630649 default:
631650 r = -EINVAL;
632651 break;
@@ -660,10 +679,10 @@ int kvm_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg) · 27 unmodified lines
660679 r = 0;
661680 switch (reg->id) {
662681 case KVM_REG_PPC_DAR:
663− vcpu->arch.shared->dar = set_reg_val(reg->id, val);
682+ kvmppc_set_dar(vcpu, set_reg_val(reg->id, val));
664683 break;
665684 case KVM_REG_PPC_DSISR:
666− vcpu->arch.shared->dsisr = set_reg_val(reg->id, val);
685+ kvmppc_set_dsisr(vcpu, set_reg_val(reg->id, val));
667686 break;
668687 case KVM_REG_PPC_FPR0 ... KVM_REG_PPC_FPR31:
669688 i = reg->id - KVM_REG_PPC_FPR0;
@@ -716,6 +735,21 @@ int kvm_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg) · 46 unmodified lines
716735 set_reg_val(reg->id, val));
717736 break;
718737 #endif /* CONFIG_KVM_XICS */
738+ case KVM_REG_PPC_FSCR:
739+ vcpu->arch.fscr = set_reg_val(reg->id, val);
740+ break;
741+ case KVM_REG_PPC_TAR:
742+ vcpu->arch.tar = set_reg_val(reg->id, val);
743+ break;
744+ case KVM_REG_PPC_EBBHR:
745+ vcpu->arch.ebbhr = set_reg_val(reg->id, val);
746+ break;
747+ case KVM_REG_PPC_EBBRR:
748+ vcpu->arch.ebbrr = set_reg_val(reg->id, val);
749+ break;
750+ case KVM_REG_PPC_BESCR:
751+ vcpu->arch.bescr = set_reg_val(reg->id, val);
752+ break;
719753 default:
720754 r = -EINVAL;
721755 break;
arch/powerpc/kvm/book3s_32_mmu.c+23−18
@@ -91,7 +91,7 @@ static int kvmppc_mmu_book3s_32_esid_to_vsid(struct kvm_vcpu *vcpu, ulong esid, · 90 unmodified lines
9191
9292 static u32 find_sr(struct kvm_vcpu *vcpu, gva_t eaddr)
9393 {
94− return vcpu->arch.shared->sr[(eaddr >> 28) & 0xf];
94+ return kvmppc_get_sr(vcpu, (eaddr >> 28) & 0xf);
9595 }
9696
9797 static u64 kvmppc_mmu_book3s_32_ea_to_vp(struct kvm_vcpu *vcpu, gva_t eaddr,
@@ -131,7 +131,7 @@ static hva_t kvmppc_mmu_book3s_32_get_pteg(struct kvm_vcpu *vcpu, · 33 unmodified lines
131131 pteg = (vcpu_book3s->sdr1 & 0xffff0000) | hash;
132132
133133 dprintk("MMU: pc=0x%lx eaddr=0x%lx sdr1=0x%llx pteg=0x%x vsid=0x%x\n",
134− kvmppc_get_pc(&vcpu_book3s->vcpu), eaddr, vcpu_book3s->sdr1, pteg,
134+ kvmppc_get_pc(vcpu), eaddr, vcpu_book3s->sdr1, pteg,
135135 sr_vsid(sre));
136136
137137 r = gfn_to_hva(vcpu->kvm, pteg >> PAGE_SHIFT);
@@ -160,7 +160,7 @@ static int kvmppc_mmu_book3s_32_xlate_bat(struct kvm_vcpu *vcpu, gva_t eaddr, · 22 unmodified lines
160160 else
161161 bat = &vcpu_book3s->ibat[i];
162162
163− if (vcpu->arch.shared->msr & MSR_PR) {
163+ if (kvmppc_get_msr(vcpu) & MSR_PR) {
164164 if (!bat->vp)
165165 continue;
166166 } else {
@@ -208,6 +208,7 @@ static int kvmppc_mmu_book3s_32_xlate_pte(struct kvm_vcpu *vcpu, gva_t eaddr, · 41 unmodified lines
208208 u32 sre;
209209 hva_t ptegp;
210210 u32 pteg[16];
211+ u32 pte0, pte1;
211212 u32 ptem = 0;
212213 int i;
213214 int found = 0;
@@ -233,14 +234,16 @@ static int kvmppc_mmu_book3s_32_xlate_pte(struct kvm_vcpu *vcpu, gva_t eaddr, · 19 unmodified lines
233234 }
234235
235236 for (i=0; i<16; i+=2) {
236− if (ptem == pteg[i]) {
237+ pte0 = be32_to_cpu(pteg[i]);
238+ pte1 = be32_to_cpu(pteg[i + 1]);
239+ if (ptem == pte0) {
237240 u8 pp;
238241
239− pte->raddr = (pteg[i+1] & ~(0xFFFULL)) | (eaddr & 0xFFF);
240− pp = pteg[i+1] & 3;
242+ pte->raddr = (pte1 & ~(0xFFFULL)) | (eaddr & 0xFFF);
243+ pp = pte1 & 3;
241244
242− if ((sr_kp(sre) && (vcpu->arch.shared->msr & MSR_PR)) ||
243− (sr_ks(sre) && !(vcpu->arch.shared->msr & MSR_PR)))
245+ if ((sr_kp(sre) && (kvmppc_get_msr(vcpu) & MSR_PR)) ||
246+ (sr_ks(sre) && !(kvmppc_get_msr(vcpu) & MSR_PR)))
244247 pp |= 4;
245248
246249 pte->may_write = false;
@@ -260,7 +263,7 @@ static int kvmppc_mmu_book3s_32_xlate_pte(struct kvm_vcpu *vcpu, gva_t eaddr, · 13 unmodified lines
260263 }
261264
262265 dprintk_pte("MMU: Found PTE -> %x %x - %x\n",
263− pteg[i], pteg[i+1], pp);
266+ pte0, pte1, pp);
264267 found = 1;
265268 break;
266269 }
@@ -269,8 +272,8 @@ static int kvmppc_mmu_book3s_32_xlate_pte(struct kvm_vcpu *vcpu, gva_t eaddr, · 2 unmodified lines
269272 /* Update PTE C and A bits, so the guest's swapper knows we used the
270273 page */
271274 if (found) {
272− u32 pte_r = pteg[i+1];
273− char __user *addr = (char __user *) &pteg[i+1];
275+ u32 pte_r = pte1;
276+ char __user *addr = (char __user *) (ptegp + (i+1) * sizeof(u32));
274277
275278 /*
276279 * Use single-byte writes to update the HPTE, to
@@ -296,7 +299,8 @@ no_page_found: · 19 unmodified lines
296299 to_book3s(vcpu)->sdr1, ptegp);
297300 for (i=0; i<16; i+=2) {
298301 dprintk_pte(" %02d: 0x%x - 0x%x (0x%x)\n",
299− i, pteg[i], pteg[i+1], ptem);
302+ i, be32_to_cpu(pteg[i]),
303+ be32_to_cpu(pteg[i+1]), ptem);
300304 }
301305 }
302306
@@ -316,7 +320,7 @@ static int kvmppc_mmu_book3s_32_xlate(struct kvm_vcpu *vcpu, gva_t eaddr, · 13 unmodified lines
316320 /* Magic page override */
317321 if (unlikely(mp_ea) &&
318322 unlikely((eaddr & ~0xfffULL) == (mp_ea & ~0xfffULL)) &&
319− !(vcpu->arch.shared->msr & MSR_PR)) {
323+ !(kvmppc_get_msr(vcpu) & MSR_PR)) {
320324 pte->vpage = kvmppc_mmu_book3s_32_ea_to_vp(vcpu, eaddr, data);
321325 pte->raddr = vcpu->arch.magic_page_pa | (pte->raddr & 0xfff);
322326 pte->raddr &= KVM_PAM;
@@ -341,13 +345,13 @@ static int kvmppc_mmu_book3s_32_xlate(struct kvm_vcpu *vcpu, gva_t eaddr, · 18 unmodified lines
341345
342346 static u32 kvmppc_mmu_book3s_32_mfsrin(struct kvm_vcpu *vcpu, u32 srnum)
343347 {
344− return vcpu->arch.shared->sr[srnum];
348+ return kvmppc_get_sr(vcpu, srnum);
345349 }
346350
347351 static void kvmppc_mmu_book3s_32_mtsrin(struct kvm_vcpu *vcpu, u32 srnum,
348352 ulong value)
349353 {
350− vcpu->arch.shared->sr[srnum] = value;
354+ kvmppc_set_sr(vcpu, srnum, value);
351355 kvmppc_mmu_map_segment(vcpu, srnum << SID_SHIFT);
352356 }
353357
@@ -367,8 +371,9 @@ static int kvmppc_mmu_book3s_32_esid_to_vsid(struct kvm_vcpu *vcpu, ulong esid, · 13 unmodified lines
367371 ulong ea = esid << SID_SHIFT;
368372 u32 sr;
369373 u64 gvsid = esid;
374+ u64 msr = kvmppc_get_msr(vcpu);
370375
371− if (vcpu->arch.shared->msr & (MSR_DR|MSR_IR)) {
376+ if (msr & (MSR_DR|MSR_IR)) {
372377 sr = find_sr(vcpu, ea);
373378 if (sr_valid(sr))
374379 gvsid = sr_vsid(sr);
@@ -377,7 +382,7 @@ static int kvmppc_mmu_book3s_32_esid_to_vsid(struct kvm_vcpu *vcpu, ulong esid, · 2 unmodified lines
377382 /* In case we only have one of MSR_IR or MSR_DR set, let's put
378383 that in the real-mode context (and hope RM doesn't access
379384 high memory) */
380− switch (vcpu->arch.shared->msr & (MSR_DR|MSR_IR)) {
385+ switch (msr & (MSR_DR|MSR_IR)) {
381386 case 0:
382387 *vsid = VSID_REAL | esid;
383388 break;
@@ -397,7 +402,7 @@ static int kvmppc_mmu_book3s_32_esid_to_vsid(struct kvm_vcpu *vcpu, ulong esid, · 13 unmodified lines
397402 BUG();
398403 }
399404
400− if (vcpu->arch.shared->msr & MSR_PR)
405+ if (msr & MSR_PR)
401406 *vsid |= VSID_PR;
402407
403408 return 0;
arch/powerpc/kvm/book3s_32_mmu_host.c+2−2
@@ -92,7 +92,7 @@ static struct kvmppc_sid_map *find_sid_vsid(struct kvm_vcpu *vcpu, u64 gvsid) · 91 unmodified lines
9292 struct kvmppc_sid_map *map;
9393 u16 sid_map_mask;
9494
95− if (vcpu->arch.shared->msr & MSR_PR)
95+ if (kvmppc_get_msr(vcpu) & MSR_PR)
9696 gvsid |= VSID_PR;
9797
9898 sid_map_mask = kvmppc_sid_hash(vcpu, gvsid);
@@ -279,7 +279,7 @@ static struct kvmppc_sid_map *create_sid_map(struct kvm_vcpu *vcpu, u64 gvsid) · 180 unmodified lines
279279 u16 sid_map_mask;
280280 static int backwards_map = 0;
281281
282− if (vcpu->arch.shared->msr & MSR_PR)
282+ if (kvmppc_get_msr(vcpu) & MSR_PR)
283283 gvsid |= VSID_PR;
284284
285285 /* We might get collisions that trap in preceding order, so let's
arch/powerpc/kvm/book3s_64_mmu.c+23−16
@@ -38,7 +38,7 @@ · 37 unmodified lines
3838
3939 static void kvmppc_mmu_book3s_64_reset_msr(struct kvm_vcpu *vcpu)
4040 {
41− kvmppc_set_msr(vcpu, MSR_SF);
41+ kvmppc_set_msr(vcpu, vcpu->arch.intr_msr);
4242 }
4343
4444 static struct kvmppc_slb *kvmppc_mmu_book3s_64_find_slbe(
@@ -226,7 +226,7 @@ static int kvmppc_mmu_book3s_64_xlate(struct kvm_vcpu *vcpu, gva_t eaddr, · 181 unmodified lines
226226 /* Magic page override */
227227 if (unlikely(mp_ea) &&
228228 unlikely((eaddr & ~0xfffULL) == (mp_ea & ~0xfffULL)) &&
229− !(vcpu->arch.shared->msr & MSR_PR)) {
229+ !(kvmppc_get_msr(vcpu) & MSR_PR)) {
230230 gpte->eaddr = eaddr;
231231 gpte->vpage = kvmppc_mmu_book3s_64_ea_to_vp(vcpu, eaddr, data);
232232 gpte->raddr = vcpu->arch.magic_page_pa | (gpte->raddr & 0xfff);
@@ -269,18 +269,21 @@ do_second: · 36 unmodified lines
269269 goto no_page_found;
270270 }
271271
272− if ((vcpu->arch.shared->msr & MSR_PR) && slbe->Kp)
272+ if ((kvmppc_get_msr(vcpu) & MSR_PR) && slbe->Kp)
273273 key = 4;
274− else if (!(vcpu->arch.shared->msr & MSR_PR) && slbe->Ks)
274+ else if (!(kvmppc_get_msr(vcpu) & MSR_PR) && slbe->Ks)
275275 key = 4;
276276
277277 for (i=0; i<16; i+=2) {
278+ u64 pte0 = be64_to_cpu(pteg[i]);
279+ u64 pte1 = be64_to_cpu(pteg[i + 1]);
280+
278281 /* Check all relevant fields of 1st dword */
279− if ((pteg[i] & v_mask) == v_val) {
282+ if ((pte0 & v_mask) == v_val) {
280283 /* If large page bit is set, check pgsize encoding */
281284 if (slbe->large &&
282285 (vcpu->arch.hflags & BOOK3S_HFLAG_MULTI_PGSIZE)) {
283− pgsize = decode_pagesize(slbe, pteg[i+1]);
286+ pgsize = decode_pagesize(slbe, pte1);
284287 if (pgsize < 0)
285288 continue;
286289 }
@@ -297,8 +300,8 @@ do_second: · 10 unmodified lines
297300 goto do_second;
298301 }
299302
300− v = pteg[i];
301− r = pteg[i+1];
303+ v = be64_to_cpu(pteg[i]);
304+ r = be64_to_cpu(pteg[i+1]);
302305 pp = (r & HPTE_R_PP) | key;
303306 if (r & HPTE_R_PP0)
304307 pp |= 8;
@@ -310,6 +313,9 @@ do_second: · 5 unmodified lines
310313 gpte->raddr = (r & HPTE_R_RPN & ~eaddr_mask) | (eaddr & eaddr_mask);
311314 gpte->page_size = pgsize;
312315 gpte->may_execute = ((r & HPTE_R_N) ? false : true);
316+ if (unlikely(vcpu->arch.disable_kernel_nx) &&
317+ !(kvmppc_get_msr(vcpu) & MSR_PR))
318+ gpte->may_execute = true;
313319 gpte->may_read = false;
314320 gpte->may_write = false;
315321
@@ -342,14 +348,14 @@ do_second: · 26 unmodified lines
342348 * non-PAPR platforms such as mac99, and this is
343349 * what real hardware does.
344350 */
345− char __user *addr = (char __user *) &pteg[i+1];
351+ char __user *addr = (char __user *) (ptegp + (i + 1) * sizeof(u64));
346352 r |= HPTE_R_R;
347353 put_user(r >> 8, addr + 6);
348354 }
349355 if (iswrite && gpte->may_write && !(r & HPTE_R_C)) {
350356 /* Set the dirty flag */
351357 /* Use a single byte write */
352− char __user *addr = (char __user *) &pteg[i+1];
358+ char __user *addr = (char __user *) (ptegp + (i + 1) * sizeof(u64));
353359 r |= HPTE_R_C;
354360 put_user(r, addr + 7);
355361 }
@@ -479,7 +485,7 @@ static void kvmppc_mmu_book3s_64_slbia(struct kvm_vcpu *vcpu) · 123 unmodified lines
479485 vcpu->arch.slb[i].origv = 0;
480486 }
481487
482− if (vcpu->arch.shared->msr & MSR_IR) {
488+ if (kvmppc_get_msr(vcpu) & MSR_IR) {
483489 kvmppc_mmu_flush_segments(vcpu);
484490 kvmppc_mmu_map_segment(vcpu, kvmppc_get_pc(vcpu));
485491 }
@@ -563,7 +569,7 @@ static int segment_contains_magic_page(struct kvm_vcpu *vcpu, ulong esid) · 77 unmodified lines
563569 {
564570 ulong mp_ea = vcpu->arch.magic_page_ea;
565571
566− return mp_ea && !(vcpu->arch.shared->msr & MSR_PR) &&
572+ return mp_ea && !(kvmppc_get_msr(vcpu) & MSR_PR) &&
567573 (mp_ea >> SID_SHIFT) == esid;
568574 }
569575 #endif
@@ -576,8 +582,9 @@ static int kvmppc_mmu_book3s_64_esid_to_vsid(struct kvm_vcpu *vcpu, ulong esid, · 6 unmodified lines
576582 u64 gvsid = esid;
577583 ulong mp_ea = vcpu->arch.magic_page_ea;
578584 int pagesize = MMU_PAGE_64K;
585+ u64 msr = kvmppc_get_msr(vcpu);
579586
580− if (vcpu->arch.shared->msr & (MSR_DR|MSR_IR)) {
587+ if (msr & (MSR_DR|MSR_IR)) {
581588 slb = kvmppc_mmu_book3s_64_find_slbe(vcpu, ea);
582589 if (slb) {
583590 gvsid = slb->vsid;
@@ -590,7 +597,7 @@ static int kvmppc_mmu_book3s_64_esid_to_vsid(struct kvm_vcpu *vcpu, ulong esid, · 6 unmodified lines
590597 }
591598 }
592599
593− switch (vcpu->arch.shared->msr & (MSR_DR|MSR_IR)) {
600+ switch (msr & (MSR_DR|MSR_IR)) {
594601 case 0:
595602 gvsid = VSID_REAL | esid;
596603 break;
@@ -623,7 +630,7 @@ static int kvmppc_mmu_book3s_64_esid_to_vsid(struct kvm_vcpu *vcpu, ulong esid, · 26 unmodified lines
623630 gvsid |= VSID_64K;
624631 #endif
625632
626− if (vcpu->arch.shared->msr & MSR_PR)
633+ if (kvmppc_get_msr(vcpu) & MSR_PR)
627634 gvsid |= VSID_PR;
628635
629636 *vsid = gvsid;
@@ -633,7 +640,7 @@ no_slb: · 3 unmodified lines
633640 /* Catch magic page case */
634641 if (unlikely(mp_ea) &&
635642 unlikely(esid == (mp_ea >> SID_SHIFT)) &&
636− !(vcpu->arch.shared->msr & MSR_PR)) {
643+ !(kvmppc_get_msr(vcpu) & MSR_PR)) {
637644 *vsid = VSID_REAL | esid;
638645 return 0;
639646 }
arch/powerpc/kvm/book3s_64_mmu_host.c+6−9
@@ -58,7 +58,7 @@ static struct kvmppc_sid_map *find_sid_vsid(struct kvm_vcpu *vcpu, u64 gvsid) · 57 unmodified lines
5858 struct kvmppc_sid_map *map;
5959 u16 sid_map_mask;
6060
61− if (vcpu->arch.shared->msr & MSR_PR)
61+ if (kvmppc_get_msr(vcpu) & MSR_PR)
6262 gvsid |= VSID_PR;
6363
6464 sid_map_mask = kvmppc_sid_hash(vcpu, gvsid);
@@ -230,7 +230,7 @@ static struct kvmppc_sid_map *create_sid_map(struct kvm_vcpu *vcpu, u64 gvsid) · 165 unmodified lines
230230 u16 sid_map_mask;
231231 static int backwards_map = 0;
232232
233− if (vcpu->arch.shared->msr & MSR_PR)
233+ if (kvmppc_get_msr(vcpu) & MSR_PR)
234234 gvsid |= VSID_PR;
235235
236236 /* We might get collisions that trap in preceding order, so let's
@@ -271,11 +271,8 @@ static int kvmppc_mmu_next_segment(struct kvm_vcpu *vcpu, ulong esid) · 34 unmodified lines
271271 int found_inval = -1;
272272 int r;
273273
274− if (!svcpu->slb_max)
275− svcpu->slb_max = 1;
276−
277274 /* Are we overwriting? */
278− for (i = 1; i < svcpu->slb_max; i++) {
275+ for (i = 0; i < svcpu->slb_max; i++) {
279276 if (!(svcpu->slb[i].esid & SLB_ESID_V))
280277 found_inval = i;
281278 else if ((svcpu->slb[i].esid & ESID_MASK) == esid) {
@@ -285,7 +282,7 @@ static int kvmppc_mmu_next_segment(struct kvm_vcpu *vcpu, ulong esid) · 3 unmodified lines
285282 }
286283
287284 /* Found a spare entry that was invalidated before */
288− if (found_inval > 0) {
285+ if (found_inval >= 0) {
289286 r = found_inval;
290287 goto out;
291288 }
@@ -359,7 +356,7 @@ void kvmppc_mmu_flush_segment(struct kvm_vcpu *vcpu, ulong ea, ulong seg_size) · 67 unmodified lines
359356 ulong seg_mask = -seg_size;
360357 int i;
361358
362− for (i = 1; i < svcpu->slb_max; i++) {
359+ for (i = 0; i < svcpu->slb_max; i++) {
363360 if ((svcpu->slb[i].esid & SLB_ESID_V) &&
364361 (svcpu->slb[i].esid & seg_mask) == ea) {
365362 /* Invalidate this entry */
@@ -373,7 +370,7 @@ void kvmppc_mmu_flush_segment(struct kvm_vcpu *vcpu, ulong ea, ulong seg_size) · 7 unmodified lines
373370 void kvmppc_mmu_flush_segments(struct kvm_vcpu *vcpu)
374371 {
375372 struct kvmppc_book3s_shadow_vcpu *svcpu = svcpu_get(vcpu);
376− svcpu->slb_max = 1;
373+ svcpu->slb_max = 0;
377374 svcpu->slb[0].esid = 0;
378375 svcpu_put(svcpu);
379376 }
arch/powerpc/kvm/book3s_64_mmu_hv.c+79−37
@@ -52,7 +52,7 @@ static void kvmppc_rmap_reset(struct kvm *kvm); · 51 unmodified lines
5252
5353 long kvmppc_alloc_hpt(struct kvm *kvm, u32 *htab_orderp)
5454 {
55− unsigned long hpt;
55+ unsigned long hpt = 0;
5656 struct revmap_entry *rev;
5757 struct page *page = NULL;
5858 long order = KVM_DEFAULT_HPT_ORDER;
@@ -64,22 +64,11 @@ long kvmppc_alloc_hpt(struct kvm *kvm, u32 *htab_orderp) · 5 unmodified lines
6464 }
6565
6666 kvm->arch.hpt_cma_alloc = 0;
67− /*
68− * try first to allocate it from the kernel page allocator.
69− * We keep the CMA reserved for failed allocation.
70− */
71− hpt = __get_free_pages(GFP_KERNEL | __GFP_ZERO | __GFP_REPEAT |
72− __GFP_NOWARN, order - PAGE_SHIFT);
73−
74− /* Next try to allocate from the preallocated pool */
75− if (!hpt) {
76− VM_BUG_ON(order < KVM_CMA_CHUNK_ORDER);
77− page = kvm_alloc_hpt(1 << (order - PAGE_SHIFT));
78− if (page) {
79− hpt = (unsigned long)pfn_to_kaddr(page_to_pfn(page));
80− kvm->arch.hpt_cma_alloc = 1;
81− } else
82− --order;
67+ VM_BUG_ON(order < KVM_CMA_CHUNK_ORDER);
68+ page = kvm_alloc_hpt(1 << (order - PAGE_SHIFT));
69+ if (page) {
70+ hpt = (unsigned long)pfn_to_kaddr(page_to_pfn(page));
71+ kvm->arch.hpt_cma_alloc = 1;
8372 }
8473
8574 /* Lastly try successively smaller sizes from the page allocator */
@@ -596,6 +585,7 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 510 unmodified lines
596585 struct kvm *kvm = vcpu->kvm;
597586 unsigned long *hptep, hpte[3], r;
598587 unsigned long mmu_seq, psize, pte_size;
588+ unsigned long gpa_base, gfn_base;
599589 unsigned long gpa, gfn, hva, pfn;
600590 struct kvm_memory_slot *memslot;
601591 unsigned long *rmap;
@@ -634,7 +624,9 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 32 unmodified lines
634624
635625 /* Translate the logical address and get the page */
636626 psize = hpte_page_size(hpte[0], r);
637− gpa = (r & HPTE_R_RPN & ~(psize - 1)) | (ea & (psize - 1));
627+ gpa_base = r & HPTE_R_RPN & ~(psize - 1);
628+ gfn_base = gpa_base >> PAGE_SHIFT;
629+ gpa = gpa_base | (ea & (psize - 1));
638630 gfn = gpa >> PAGE_SHIFT;
639631 memslot = gfn_to_memslot(kvm, gfn);
640632
@@ -646,6 +638,13 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 5 unmodified lines
646638 if (!kvm->arch.using_mmu_notifiers)
647639 return -EFAULT; /* should never get here */
648640
641+ /*
642+ * This should never happen, because of the slot_is_aligned()
643+ * check in kvmppc_do_h_enter().
644+ */
645+ if (gfn_base < memslot->base_gfn)
646+ return -EFAULT;
647+
649648 /* used to check for invalidations in progress */
650649 mmu_seq = kvm->mmu_notifier_seq;
651650 smp_rmb();
@@ -738,7 +737,8 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 86 unmodified lines
738737 goto out_unlock;
739738 hpte[0] = (hpte[0] & ~HPTE_V_ABSENT) | HPTE_V_VALID;
740739
741− rmap = &memslot->arch.rmap[gfn - memslot->base_gfn];
740+ /* Always put the HPTE in the rmap chain for the page base address */
741+ rmap = &memslot->arch.rmap[gfn_base - memslot->base_gfn];
742742 lock_rmap(rmap);
743743
744744 /* Check if we might have been invalidated; let the guest retry if so */
@@ -1060,22 +1060,33 @@ void kvm_set_spte_hva_hv(struct kvm *kvm, unsigned long hva, pte_t pte) · 315 unmodified lines
10601060 kvm_handle_hva(kvm, hva, kvm_unmap_rmapp);
10611061 }
10621062
1063−static int kvm_test_clear_dirty(struct kvm *kvm, unsigned long *rmapp)
1063+static int vcpus_running(struct kvm *kvm)
1064+{
1065+ return atomic_read(&kvm->arch.vcpus_running) != 0;
1066+}
1067+
1068+/*
1069+ * Returns the number of system pages that are dirty.
1070+ * This can be more than 1 if we find a huge-page HPTE.
1071+ */
1072+static int kvm_test_clear_dirty_npages(struct kvm *kvm, unsigned long *rmapp)
10641073 {
10651074 struct revmap_entry *rev = kvm->arch.revmap;
10661075 unsigned long head, i, j;
1076+ unsigned long n;
1077+ unsigned long v, r;
10671078 unsigned long *hptep;
1068− int ret = 0;
1079+ int npages_dirty = 0;
10691080
10701081 retry:
10711082 lock_rmap(rmapp);
10721083 if (*rmapp & KVMPPC_RMAP_CHANGED) {
10731084 *rmapp &= ~KVMPPC_RMAP_CHANGED;
1074− ret = 1;
1085+ npages_dirty = 1;
10751086 }
10761087 if (!(*rmapp & KVMPPC_RMAP_PRESENT)) {
10771088 unlock_rmap(rmapp);
1078− return ret;
1089+ return npages_dirty;
10791090 }
10801091
10811092 i = head = *rmapp & KVMPPC_RMAP_INDEX;
@@ -1083,7 +1094,22 @@ static int kvm_test_clear_dirty(struct kvm *kvm, unsigned long *rmapp) · 1 unmodified line
10831094 hptep = (unsigned long *) (kvm->arch.hpt_virt + (i << 4));
10841095 j = rev[i].forw;
10851096
1086− if (!(hptep[1] & HPTE_R_C))
1097+ /*
1098+ * Checking the C (changed) bit here is racy since there
1099+ * is no guarantee about when the hardware writes it back.
1100+ * If the HPTE is not writable then it is stable since the
1101+ * page can't be written to, and we would have done a tlbie
1102+ * (which forces the hardware to complete any writeback)
1103+ * when making the HPTE read-only.
1104+ * If vcpus are running then this call is racy anyway
1105+ * since the page could get dirtied subsequently, so we
1106+ * expect there to be a further call which would pick up
1107+ * any delayed C bit writeback.
1108+ * Otherwise we need to do the tlbie even if C==0 in
1109+ * order to pick up any delayed writeback of C.
1110+ */
1111+ if (!(hptep[1] & HPTE_R_C) &&
1112+ (!hpte_is_writable(hptep[1]) || vcpus_running(kvm)))
10871113 continue;
10881114
10891115 if (!try_lock_hpte(hptep, HPTE_V_HVLOCK)) {
@@ -1095,24 +1121,33 @@ static int kvm_test_clear_dirty(struct kvm *kvm, unsigned long *rmapp) · 5 unmodified lines
10951121 }
10961122
10971123 /* Now check and modify the HPTE */
1098− if ((hptep[0] & HPTE_V_VALID) && (hptep[1] & HPTE_R_C)) {
1099− /* need to make it temporarily absent to clear C */
1100− hptep[0] |= HPTE_V_ABSENT;
1101− kvmppc_invalidate_hpte(kvm, hptep, i);
1102− hptep[1] &= ~HPTE_R_C;
1103− eieio();
1104− hptep[0] = (hptep[0] & ~HPTE_V_ABSENT) | HPTE_V_VALID;
1124+ if (!(hptep[0] & HPTE_V_VALID))
1125+ continue;
1126+
1127+ /* need to make it temporarily absent so C is stable */
1128+ hptep[0] |= HPTE_V_ABSENT;
1129+ kvmppc_invalidate_hpte(kvm, hptep, i);
1130+ v = hptep[0];
1131+ r = hptep[1];
1132+ if (r & HPTE_R_C) {
1133+ hptep[1] = r & ~HPTE_R_C;
11051134 if (!(rev[i].guest_rpte & HPTE_R_C)) {
11061135 rev[i].guest_rpte |= HPTE_R_C;
11071136 note_hpte_modification(kvm, &rev[i]);
11081137 }
1109− ret = 1;
1138+ n = hpte_page_size(v, r);
1139+ n = (n + PAGE_SIZE - 1) >> PAGE_SHIFT;
1140+ if (n > npages_dirty)
1141+ npages_dirty = n;
1142+ eieio();
11101143 }
1111− hptep[0] &= ~HPTE_V_HVLOCK;
1144+ v &= ~(HPTE_V_ABSENT | HPTE_V_HVLOCK);
1145+ v |= HPTE_V_VALID;
1146+ hptep[0] = v;
11121147 } while ((i = j) != head);
11131148
11141149 unlock_rmap(rmapp);
1115− return ret;
1150+ return npages_dirty;
11161151 }
11171152
11181153 static void harvest_vpa_dirty(struct kvmppc_vpa *vpa,
@@ -1136,15 +1171,22 @@ static void harvest_vpa_dirty(struct kvmppc_vpa *vpa, · 17 unmodified lines
11361171 long kvmppc_hv_get_dirty_log(struct kvm *kvm, struct kvm_memory_slot *memslot,
11371172 unsigned long *map)
11381173 {
1139− unsigned long i;
1174+ unsigned long i, j;
11401175 unsigned long *rmapp;
11411176 struct kvm_vcpu *vcpu;
11421177
11431178 preempt_disable();
11441179 rmapp = memslot->arch.rmap;
11451180 for (i = 0; i < memslot->npages; ++i) {
1146− if (kvm_test_clear_dirty(kvm, rmapp) && map)
1147− __set_bit_le(i, map);
1181+ int npages = kvm_test_clear_dirty_npages(kvm, rmapp);
1182+ /*
1183+ * Note that if npages > 0 then i must be a multiple of npages,
1184+ * since we always put huge-page HPTEs in the rmap chain
1185+ * corresponding to their page base address.
1186+ */
1187+ if (npages && map)
1188+ for (j = i; npages; ++j, --npages)
1189+ __set_bit_le(j, map);
11481190 ++rmapp;
11491191 }
11501192
arch/powerpc/kvm/book3s_64_slb.S+40−47
@@ -17,30 +17,9 @@ · 16 unmodified lines
1717 * Authors: Alexander Graf <agraf@suse.de>
1818 */
1919
20−#ifdef __LITTLE_ENDIAN__
21−#error Need to fix SLB shadow accesses in little endian mode
22−#endif
23−
24−#define SHADOW_SLB_ESID(num) (SLBSHADOW_SAVEAREA + (num * 0x10))
25−#define SHADOW_SLB_VSID(num) (SLBSHADOW_SAVEAREA + (num * 0x10) + 0x8)
26−#define UNBOLT_SLB_ENTRY(num) \
27− ld r9, SHADOW_SLB_ESID(num)(r12); \
28− /* Invalid? Skip. */; \
29− rldicl. r0, r9, 37, 63; \
30− beq slb_entry_skip_ ## num; \
31− xoris r9, r9, SLB_ESID_V@h; \
32− std r9, SHADOW_SLB_ESID(num)(r12); \
33− slb_entry_skip_ ## num:
34−
35−#define REBOLT_SLB_ENTRY(num) \
36− ld r10, SHADOW_SLB_ESID(num)(r11); \
37− cmpdi r10, 0; \
38− beq slb_exit_skip_ ## num; \
39− oris r10, r10, SLB_ESID_V@h; \
40− ld r9, SHADOW_SLB_VSID(num)(r11); \
41− slbmte r9, r10; \
42− std r10, SHADOW_SLB_ESID(num)(r11); \
43−slb_exit_skip_ ## num:
20+#define SHADOW_SLB_ENTRY_LEN 0x10
21+#define OFFSET_ESID(x) (SHADOW_SLB_ENTRY_LEN * x)
22+#define OFFSET_VSID(x) ((SHADOW_SLB_ENTRY_LEN * x) + 8)
4423
4524 /******************************************************************************
4625 * *
@@ -64,20 +43,15 @@ slb_exit_skip_ ## num: · 17 unmodified lines
6443 * SVCPU[LR] = guest LR
6544 */
6645
67− /* Remove LPAR shadow entries */
46+BEGIN_FW_FTR_SECTION
6847
69−#if SLB_NUM_BOLTED == 3
48+ /* Declare SLB shadow as 0 entries big */
7049
71− ld r12, PACA_SLBSHADOWPTR(r13)
50+ ld r11, PACA_SLBSHADOWPTR(r13)
51+ li r8, 0
52+ stb r8, 3(r11)
7253
73− /* Remove bolted entries */
74− UNBOLT_SLB_ENTRY(0)
75− UNBOLT_SLB_ENTRY(1)
76− UNBOLT_SLB_ENTRY(2)
77−
78−#else
79−#error unknown number of bolted entries
80−#endif
54+END_FW_FTR_SECTION_IFSET(FW_FEATURE_LPAR)
8155
8256 /* Flush SLB */
8357
@@ -100,7 +74,7 @@ slb_loop_enter: · 16 unmodified lines
10074
10175 ld r10, 0(r11)
10276
103− rldicl. r0, r10, 37, 63
77+ andis. r9, r10, SLB_ESID_V@h
10478 beq slb_loop_enter_skip
10579
10680 ld r9, 8(r11)
@@ -137,23 +111,42 @@ slb_do_enter: · 30 unmodified lines
137111 *
138112 */
139113
140− /* Restore bolted entries from the shadow and fix it along the way */
114+ /* Remove all SLB entries that are in use. */
141115
142− /* We don't store anything in entry 0, so we don't need to take care of it */
116+ li r0, r0
117+ slbmte r0, r0
143118 slbia
144− isync
145119
146−#if SLB_NUM_BOLTED == 3
120+ /* Restore bolted entries from the shadow */
147121
148122 ld r11, PACA_SLBSHADOWPTR(r13)
149123
150− REBOLT_SLB_ENTRY(0)
151− REBOLT_SLB_ENTRY(1)
152− REBOLT_SLB_ENTRY(2)
153−
154−#else
155−#error unknown number of bolted entries
156−#endif
124+BEGIN_FW_FTR_SECTION
125+
126+ /* Declare SLB shadow as SLB_NUM_BOLTED entries big */
127+
128+ li r8, SLB_NUM_BOLTED
129+ stb r8, 3(r11)
130+
131+END_FW_FTR_SECTION_IFSET(FW_FEATURE_LPAR)
132+
133+ /* Manually load all entries from shadow SLB */
134+
135+ li r8, SLBSHADOW_SAVEAREA
136+ li r7, SLBSHADOW_SAVEAREA + 8
137+
138+ .rept SLB_NUM_BOLTED
139+ LDX_BE r10, r11, r8
140+ cmpdi r10, 0
141+ beq 1f
142+ LDX_BE r9, r11, r7
143+ slbmte r9, r10
144+1: addi r7, r7, SHADOW_SLB_ENTRY_LEN
145+ addi r8, r8, SHADOW_SLB_ENTRY_LEN
146+ .endr
147+
148+ isync
149+ sync
157150
158151 slb_do_exit:
159152
arch/powerpc/kvm/book3s_emulate.c+104−52
@@ -80,7 +80,7 @@ static bool spr_allowed(struct kvm_vcpu *vcpu, enum priv_level level) · 79 unmodified lines
8080 return false;
8181
8282 /* Limit user space to its own small SPR set */
83− if ((vcpu->arch.shared->msr & MSR_PR) && level > PRIV_PROBLEM)
83+ if ((kvmppc_get_msr(vcpu) & MSR_PR) && level > PRIV_PROBLEM)
8484 return false;
8585
8686 return true;
@@ -94,14 +94,31 @@ int kvmppc_core_emulate_op_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 7 unmodified lines
9494 int rs = get_rs(inst);
9595 int ra = get_ra(inst);
9696 int rb = get_rb(inst);
97+ u32 inst_sc = 0x44000002;
9798
9899 switch (get_op(inst)) {
100+ case 0:
101+ emulated = EMULATE_FAIL;
102+ if ((kvmppc_get_msr(vcpu) & MSR_LE) &&
103+ (inst == swab32(inst_sc))) {
104+ /*
105+ * This is the byte reversed syscall instruction of our
106+ * hypercall handler. Early versions of LE Linux didn't
107+ * swap the instructions correctly and ended up in
108+ * illegal instructions.
109+ * Just always fail hypercalls on these broken systems.
110+ */
111+ kvmppc_set_gpr(vcpu, 3, EV_UNIMPLEMENTED);
112+ kvmppc_set_pc(vcpu, kvmppc_get_pc(vcpu) + 4);
113+ emulated = EMULATE_DONE;
114+ }
115+ break;
99116 case 19:
100117 switch (get_xop(inst)) {
101118 case OP_19_XOP_RFID:
102119 case OP_19_XOP_RFI:
103− kvmppc_set_pc(vcpu, vcpu->arch.shared->srr0);
104− kvmppc_set_msr(vcpu, vcpu->arch.shared->srr1);
120+ kvmppc_set_pc(vcpu, kvmppc_get_srr0(vcpu));
121+ kvmppc_set_msr(vcpu, kvmppc_get_srr1(vcpu));
105122 *advance = 0;
106123 break;
107124
@@ -113,16 +130,16 @@ int kvmppc_core_emulate_op_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 5 unmodified lines
113130 case 31:
114131 switch (get_xop(inst)) {
115132 case OP_31_XOP_MFMSR:
116− kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->msr);
133+ kvmppc_set_gpr(vcpu, rt, kvmppc_get_msr(vcpu));
117134 break;
118135 case OP_31_XOP_MTMSRD:
119136 {
120137 ulong rs_val = kvmppc_get_gpr(vcpu, rs);
121138 if (inst & 0x10000) {
122− ulong new_msr = vcpu->arch.shared->msr;
139+ ulong new_msr = kvmppc_get_msr(vcpu);
123140 new_msr &= ~(MSR_RI | MSR_EE);
124141 new_msr |= rs_val & (MSR_RI | MSR_EE);
125− vcpu->arch.shared->msr = new_msr;
142+ kvmppc_set_msr_fast(vcpu, new_msr);
126143 } else
127144 kvmppc_set_msr(vcpu, rs_val);
128145 break;
@@ -179,7 +196,7 @@ int kvmppc_core_emulate_op_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 50 unmodified lines
179196 ulong cmd = kvmppc_get_gpr(vcpu, 3);
180197 int i;
181198
182− if ((vcpu->arch.shared->msr & MSR_PR) ||
199+ if ((kvmppc_get_msr(vcpu) & MSR_PR) ||
183200 !vcpu->arch.papr_enabled) {
184201 emulated = EMULATE_FAIL;
185202 break;
@@ -261,14 +278,14 @@ int kvmppc_core_emulate_op_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 75 unmodified lines
261278 ra_val = kvmppc_get_gpr(vcpu, ra);
262279
263280 addr = (ra_val + rb_val) & ~31ULL;
264− if (!(vcpu->arch.shared->msr & MSR_SF))
281+ if (!(kvmppc_get_msr(vcpu) & MSR_SF))
265282 addr &= 0xffffffff;
266283 vaddr = addr;
267284
268285 r = kvmppc_st(vcpu, &addr, 32, zeros, true);
269286 if ((r == -ENOENT) || (r == -EPERM)) {
270287 *advance = 0;
271− vcpu->arch.shared->dar = vaddr;
288+ kvmppc_set_dar(vcpu, vaddr);
272289 vcpu->arch.fault_dar = vaddr;
273290
274291 dsisr = DSISR_ISSTORE;
@@ -277,7 +294,7 @@ int kvmppc_core_emulate_op_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 2 unmodified lines
277294 else if (r == -EPERM)
278295 dsisr |= DSISR_PROTFAULT;
279296
280− vcpu->arch.shared->dsisr = dsisr;
297+ kvmppc_set_dsisr(vcpu, dsisr);
281298 vcpu->arch.fault_dsisr = dsisr;
282299
283300 kvmppc_book3s_queue_irqprio(vcpu,
@@ -356,10 +373,10 @@ int kvmppc_core_emulate_mtspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) · 72 unmodified lines
356373 to_book3s(vcpu)->sdr1 = spr_val;
357374 break;
358375 case SPRN_DSISR:
359− vcpu->arch.shared->dsisr = spr_val;
376+ kvmppc_set_dsisr(vcpu, spr_val);
360377 break;
361378 case SPRN_DAR:
362− vcpu->arch.shared->dar = spr_val;
379+ kvmppc_set_dar(vcpu, spr_val);
363380 break;
364381 case SPRN_HIOR:
365382 to_book3s(vcpu)->hior = spr_val;
@@ -438,6 +455,31 @@ int kvmppc_core_emulate_mtspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) · 72 unmodified lines
438455 case SPRN_GQR7:
439456 to_book3s(vcpu)->gqr[sprn - SPRN_GQR0] = spr_val;
440457 break;
458+ case SPRN_FSCR:
459+ vcpu->arch.fscr = spr_val;
460+ break;
461+#ifdef CONFIG_PPC_BOOK3S_64
462+ case SPRN_BESCR:
463+ vcpu->arch.bescr = spr_val;
464+ break;
465+ case SPRN_EBBHR:
466+ vcpu->arch.ebbhr = spr_val;
467+ break;
468+ case SPRN_EBBRR:
469+ vcpu->arch.ebbrr = spr_val;
470+ break;
471+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
472+ case SPRN_TFHAR:
473+ vcpu->arch.tfhar = spr_val;
474+ break;
475+ case SPRN_TEXASR:
476+ vcpu->arch.texasr = spr_val;
477+ break;
478+ case SPRN_TFIAR:
479+ vcpu->arch.tfiar = spr_val;
480+ break;
481+#endif
482+#endif
441483 case SPRN_ICTC:
442484 case SPRN_THRM1:
443485 case SPRN_THRM2:
@@ -455,6 +497,13 @@ int kvmppc_core_emulate_mtspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) · 11 unmodified lines
455497 case SPRN_WPAR_GEKKO:
456498 case SPRN_MSSSR0:
457499 case SPRN_DABR:
500+#ifdef CONFIG_PPC_BOOK3S_64
501+ case SPRN_MMCRS:
502+ case SPRN_MMCRA:
503+ case SPRN_MMCR0:
504+ case SPRN_MMCR1:
505+ case SPRN_MMCR2:
506+#endif
458507 break;
459508 unprivileged:
460509 default:
@@ -493,10 +542,10 @@ int kvmppc_core_emulate_mfspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val · 32 unmodified lines
493542 *spr_val = to_book3s(vcpu)->sdr1;
494543 break;
495544 case SPRN_DSISR:
496− *spr_val = vcpu->arch.shared->dsisr;
545+ *spr_val = kvmppc_get_dsisr(vcpu);
497546 break;
498547 case SPRN_DAR:
499− *spr_val = vcpu->arch.shared->dar;
548+ *spr_val = kvmppc_get_dar(vcpu);
500549 break;
501550 case SPRN_HIOR:
502551 *spr_val = to_book3s(vcpu)->hior;
@@ -538,6 +587,31 @@ int kvmppc_core_emulate_mfspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val · 35 unmodified lines
538587 case SPRN_GQR7:
539588 *spr_val = to_book3s(vcpu)->gqr[sprn - SPRN_GQR0];
540589 break;
590+ case SPRN_FSCR:
591+ *spr_val = vcpu->arch.fscr;
592+ break;
593+#ifdef CONFIG_PPC_BOOK3S_64
594+ case SPRN_BESCR:
595+ *spr_val = vcpu->arch.bescr;
596+ break;
597+ case SPRN_EBBHR:
598+ *spr_val = vcpu->arch.ebbhr;
599+ break;
600+ case SPRN_EBBRR:
601+ *spr_val = vcpu->arch.ebbrr;
602+ break;
603+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
604+ case SPRN_TFHAR:
605+ *spr_val = vcpu->arch.tfhar;
606+ break;
607+ case SPRN_TEXASR:
608+ *spr_val = vcpu->arch.texasr;
609+ break;
610+ case SPRN_TFIAR:
611+ *spr_val = vcpu->arch.tfiar;
612+ break;
613+#endif
614+#endif
541615 case SPRN_THRM1:
542616 case SPRN_THRM2:
543617 case SPRN_THRM3:
@@ -553,6 +627,14 @@ int kvmppc_core_emulate_mfspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val · 9 unmodified lines
553627 case SPRN_WPAR_GEKKO:
554628 case SPRN_MSSSR0:
555629 case SPRN_DABR:
630+#ifdef CONFIG_PPC_BOOK3S_64
631+ case SPRN_MMCRS:
632+ case SPRN_MMCRA:
633+ case SPRN_MMCR0:
634+ case SPRN_MMCR1:
635+ case SPRN_MMCR2:
636+ case SPRN_TIR:
637+#endif
556638 *spr_val = 0;
557639 break;
558640 default:
@@ -569,48 +651,17 @@ unprivileged: · 10 unmodified lines
569651
570652 u32 kvmppc_alignment_dsisr(struct kvm_vcpu *vcpu, unsigned int inst)
571653 {
572− u32 dsisr = 0;
573−
574− /*
575− * This is what the spec says about DSISR bits (not mentioned = 0):
576− *
577− * 12:13 [DS] Set to bits 30:31
578− * 15:16 [X] Set to bits 29:30
579− * 17 [X] Set to bit 25
580− * [D/DS] Set to bit 5
581− * 18:21 [X] Set to bits 21:24
582− * [D/DS] Set to bits 1:4
583− * 22:26 Set to bits 6:10 (RT/RS/FRT/FRS)
584− * 27:31 Set to bits 11:15 (RA)
585− */
586−
587− switch (get_op(inst)) {
588− /* D-form */
589− case OP_LFS:
590− case OP_LFD:
591− case OP_STFD:
592− case OP_STFS:
593− dsisr |= (inst >> 12) & 0x4000; /* bit 17 */
594− dsisr |= (inst >> 17) & 0x3c00; /* bits 18:21 */
595− break;
596− /* X-form */
597− case 31:
598− dsisr |= (inst << 14) & 0x18000; /* bits 15:16 */
599− dsisr |= (inst << 8) & 0x04000; /* bit 17 */
600− dsisr |= (inst << 3) & 0x03c00; /* bits 18:21 */
601− break;
602− default:
603− printk(KERN_INFO "KVM: Unaligned instruction 0x%x\n", inst);
604− break;
605− }
606−
607− dsisr |= (inst >> 16) & 0x03ff; /* bits 22:31 */
608−
609− return dsisr;
654+ return make_dsisr(inst);
610655 }
611656
612657 ulong kvmppc_alignment_dar(struct kvm_vcpu *vcpu, unsigned int inst)
613658 {
659+#ifdef CONFIG_PPC_BOOK3S_64
660+ /*
661+ * Linux's fix_alignment() assumes that DAR is valid, so can we
662+ */
663+ return vcpu->arch.fault_dar;
664+#else
614665 ulong dar = 0;
615666 ulong ra = get_ra(inst);
616667 ulong rb = get_rb(inst);
@@ -635,4 +686,5 @@ ulong kvmppc_alignment_dar(struct kvm_vcpu *vcpu, unsigned int inst) · 18 unmodified lines
635686 }
636687
637688 return dar;
689+#endif
638690 }
arch/powerpc/kvm/book3s_exports.c+1−0
@@ -18,6 +18,7 @@ · 17 unmodified lines
1818 */
1919
2020 #include <linux/export.h>
21+#include <asm/kvm_ppc.h>
2122 #include <asm/kvm_book3s.h>
2223
2324 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
arch/powerpc/kvm/book3s_hv.c+18−30
@@ -879,24 +879,9 @@ static int kvmppc_get_one_reg_hv(struct kvm_vcpu *vcpu, u64 id, · 878 unmodified lines
879879 case KVM_REG_PPC_IAMR:
880880 *val = get_reg_val(id, vcpu->arch.iamr);
881881 break;
882− case KVM_REG_PPC_FSCR:
883− *val = get_reg_val(id, vcpu->arch.fscr);
884− break;
885882 case KVM_REG_PPC_PSPB:
886883 *val = get_reg_val(id, vcpu->arch.pspb);
887884 break;
888− case KVM_REG_PPC_EBBHR:
889− *val = get_reg_val(id, vcpu->arch.ebbhr);
890− break;
891− case KVM_REG_PPC_EBBRR:
892− *val = get_reg_val(id, vcpu->arch.ebbrr);
893− break;
894− case KVM_REG_PPC_BESCR:
895− *val = get_reg_val(id, vcpu->arch.bescr);
896− break;
897− case KVM_REG_PPC_TAR:
898− *val = get_reg_val(id, vcpu->arch.tar);
899− break;
900885 case KVM_REG_PPC_DPDES:
901886 *val = get_reg_val(id, vcpu->arch.vcore->dpdes);
902887 break;
@@ -1091,24 +1076,9 @@ static int kvmppc_set_one_reg_hv(struct kvm_vcpu *vcpu, u64 id, · 188 unmodified lines
10911076 case KVM_REG_PPC_IAMR:
10921077 vcpu->arch.iamr = set_reg_val(id, *val);
10931078 break;
1094− case KVM_REG_PPC_FSCR:
1095− vcpu->arch.fscr = set_reg_val(id, *val);
1096− break;
10971079 case KVM_REG_PPC_PSPB:
10981080 vcpu->arch.pspb = set_reg_val(id, *val);
10991081 break;
1100− case KVM_REG_PPC_EBBHR:
1101− vcpu->arch.ebbhr = set_reg_val(id, *val);
1102− break;
1103− case KVM_REG_PPC_EBBRR:
1104− vcpu->arch.ebbrr = set_reg_val(id, *val);
1105− break;
1106− case KVM_REG_PPC_BESCR:
1107− vcpu->arch.bescr = set_reg_val(id, *val);
1108− break;
1109− case KVM_REG_PPC_TAR:
1110− vcpu->arch.tar = set_reg_val(id, *val);
1111− break;
11121082 case KVM_REG_PPC_DPDES:
11131083 vcpu->arch.vcore->dpdes = set_reg_val(id, *val);
11141084 break;
@@ -1280,6 +1250,17 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_hv(struct kvm *kvm, · 165 unmodified lines
12801250 goto free_vcpu;
12811251
12821252 vcpu->arch.shared = &vcpu->arch.shregs;
1253+#ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE
1254+ /*
1255+ * The shared struct is never shared on HV,
1256+ * so we can always use host endianness
1257+ */
1258+#ifdef __BIG_ENDIAN__
1259+ vcpu->arch.shared_big_endian = true;
1260+#else
1261+ vcpu->arch.shared_big_endian = false;
1262+#endif
1263+#endif
12831264 vcpu->arch.mmcr[0] = MMCR0_FC;
12841265 vcpu->arch.ctrl = CTRL_RUNLATCH;
12851266 /* default to host PVR, since we can't spoof it */
@@ -1949,6 +1930,13 @@ static void kvmppc_add_seg_page_size(struct kvm_ppc_one_seg_page_size **sps, · 663 unmodified lines
19491930 * support pte_enc here
19501931 */
19511932 (*sps)->enc[0].pte_enc = def->penc[linux_psize];
1933+ /*
1934+ * Add 16MB MPSS support if host supports it
1935+ */
1936+ if (linux_psize != MMU_PAGE_16M && def->penc[MMU_PAGE_16M] != -1) {
1937+ (*sps)->enc[1].page_shift = 24;
1938+ (*sps)->enc[1].pte_enc = def->penc[MMU_PAGE_16M];
1939+ }
19521940 (*sps)++;
19531941 }
19541942
arch/powerpc/kvm/book3s_hv_rm_mmu.c+2−1
@@ -42,13 +42,14 @@ static int global_invalidates(struct kvm *kvm, unsigned long flags) · 41 unmodified lines
4242
4343 /*
4444 * If there is only one vcore, and it's currently running,
45+ * as indicated by local_paca->kvm_hstate.kvm_vcpu being set,
4546 * we can use tlbiel as long as we mark all other physical
4647 * cores as potentially having stale TLB entries for this lpid.
4748 * If we're not using MMU notifiers, we never take pages away
4849 * from the guest, so we can use tlbiel if requested.
4950 * Otherwise, don't use tlbiel.
5051 */
51− if (kvm->arch.online_vcores == 1 && local_paca->kvm_hstate.kvm_vcore)
52+ if (kvm->arch.online_vcores == 1 && local_paca->kvm_hstate.kvm_vcpu)
5253 global = 0;
5354 else if (kvm->arch.using_mmu_notifiers)
5455 global = 1;
arch/powerpc/kvm/book3s_hv_rmhandlers.S+58−2
@@ -86,6 +86,12 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) · 85 unmodified lines
8686 lbz r4, LPPACA_PMCINUSE(r3)
8787 cmpwi r4, 0
8888 beq 23f /* skip if not */
89+BEGIN_FTR_SECTION
90+ ld r3, HSTATE_MMCR(r13)
91+ andi. r4, r3, MMCR0_PMAO_SYNC | MMCR0_PMAO
92+ cmpwi r4, MMCR0_PMAO
93+ beql kvmppc_fix_pmao
94+END_FTR_SECTION_IFSET(CPU_FTR_PMAO_BUG)
8995 lwz r3, HSTATE_PMC(r13)
9096 lwz r4, HSTATE_PMC + 4(r13)
9197 lwz r5, HSTATE_PMC + 8(r13)
@@ -726,6 +732,12 @@ skip_tm: · 634 unmodified lines
726732 sldi r3, r3, 31 /* MMCR0_FC (freeze counters) bit */
727733 mtspr SPRN_MMCR0, r3 /* freeze all counters, disable ints */
728734 isync
735+BEGIN_FTR_SECTION
736+ ld r3, VCPU_MMCR(r4)
737+ andi. r5, r3, MMCR0_PMAO_SYNC | MMCR0_PMAO
738+ cmpwi r5, MMCR0_PMAO
739+ beql kvmppc_fix_pmao
740+END_FTR_SECTION_IFSET(CPU_FTR_PMAO_BUG)
729741 lwz r3, VCPU_PMC(r4) /* always load up guest PMU registers */
730742 lwz r5, VCPU_PMC + 4(r4) /* to prevent information leak */
731743 lwz r6, VCPU_PMC + 8(r4)
@@ -1324,6 +1336,30 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) · 592 unmodified lines
13241336 25:
13251337 /* Save PMU registers if requested */
13261338 /* r8 and cr0.eq are live here */
1339+BEGIN_FTR_SECTION
1340+ /*
1341+ * POWER8 seems to have a hardware bug where setting
1342+ * MMCR0[PMAE] along with MMCR0[PMC1CE] and/or MMCR0[PMCjCE]
1343+ * when some counters are already negative doesn't seem
1344+ * to cause a performance monitor alert (and hence interrupt).
1345+ * The effect of this is that when saving the PMU state,
1346+ * if there is no PMU alert pending when we read MMCR0
1347+ * before freezing the counters, but one becomes pending
1348+ * before we read the counters, we lose it.
1349+ * To work around this, we need a way to freeze the counters
1350+ * before reading MMCR0. Normally, freezing the counters
1351+ * is done by writing MMCR0 (to set MMCR0[FC]) which
1352+ * unavoidably writes MMCR0[PMA0] as well. On POWER8,
1353+ * we can also freeze the counters using MMCR2, by writing
1354+ * 1s to all the counter freeze condition bits (there are
1355+ * 9 bits each for 6 counters).
1356+ */
1357+ li r3, -1 /* set all freeze bits */
1358+ clrrdi r3, r3, 10
1359+ mfspr r10, SPRN_MMCR2
1360+ mtspr SPRN_MMCR2, r3
1361+ isync
1362+END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
13271363 li r3, 1
13281364 sldi r3, r3, 31 /* MMCR0_FC (freeze counters) bit */
13291365 mfspr r4, SPRN_MMCR0 /* save MMCR0 */
@@ -1347,6 +1383,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) · 17 unmodified lines
13471383 std r4, VCPU_MMCR(r9)
13481384 std r5, VCPU_MMCR + 8(r9)
13491385 std r6, VCPU_MMCR + 16(r9)
1386+BEGIN_FTR_SECTION
1387+ std r10, VCPU_MMCR + 24(r9)
1388+END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
13501389 std r7, VCPU_SIAR(r9)
13511390 std r8, VCPU_SDAR(r9)
13521391 mfspr r3, SPRN_PMC1
@@ -1370,12 +1409,10 @@ BEGIN_FTR_SECTION · 17 unmodified lines
13701409 stw r11, VCPU_PMC + 28(r9)
13711410 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_201)
13721411 BEGIN_FTR_SECTION
1373− mfspr r4, SPRN_MMCR2
13741412 mfspr r5, SPRN_SIER
13751413 mfspr r6, SPRN_SPMC1
13761414 mfspr r7, SPRN_SPMC2
13771415 mfspr r8, SPRN_MMCRS
1378− std r4, VCPU_MMCR + 24(r9)
13791416 std r5, VCPU_SIER(r9)
13801417 stw r6, VCPU_PMC + 24(r9)
13811418 stw r7, VCPU_PMC + 28(r9)
@@ -2107,6 +2144,7 @@ machine_check_realmode: · 725 unmodified lines
21072144 beq mc_cont
21082145 /* If not, deliver a machine check. SRR0/1 are already set */
21092146 li r10, BOOK3S_INTERRUPT_MACHINE_CHECK
2147+ ld r11, VCPU_MSR(r9)
21102148 bl kvmppc_msr_interrupt
21112149 b fast_interrupt_c_return
21122150
@@ -2311,3 +2349,21 @@ kvmppc_msr_interrupt: · 198 unmodified lines
23112349 li r0, 1
23122350 1: rldimi r11, r0, MSR_TS_S_LG, 63 - MSR_TS_T_LG
23132351 blr
2352+
2353+/*
2354+ * This works around a hardware bug on POWER8E processors, where
2355+ * writing a 1 to the MMCR0[PMAO] bit doesn't generate a
2356+ * performance monitor interrupt. Instead, when we need to have
2357+ * an interrupt pending, we have to arrange for a counter to overflow.
2358+ */
2359+kvmppc_fix_pmao:
2360+ li r3, 0
2361+ mtspr SPRN_MMCR2, r3
2362+ lis r3, (MMCR0_PMXE | MMCR0_FCECE)@h
2363+ ori r3, r3, MMCR0_PMCjCE | MMCR0_C56RUN
2364+ mtspr SPRN_MMCR0, r3
2365+ lis r3, 0x7fff
2366+ ori r3, r3, 0xffff
2367+ mtspr SPRN_PMC6, r3
2368+ isync
2369+ blr
arch/powerpc/kvm/book3s_interrupts.S+21−2
@@ -104,8 +104,27 @@ kvm_start_lightweight: · 103 unmodified lines
104104 stb r3, HSTATE_RESTORE_HID5(r13)
105105
106106 /* Load up guest SPRG3 value, since it's user readable */
107− ld r3, VCPU_SHARED(r4)
108− ld r3, VCPU_SHARED_SPRG3(r3)
107+ lwz r3, VCPU_SHAREDBE(r4)
108+ cmpwi r3, 0
109+ ld r5, VCPU_SHARED(r4)
110+ beq sprg3_little_endian
111+sprg3_big_endian:
112+#ifdef __BIG_ENDIAN__
113+ ld r3, VCPU_SHARED_SPRG3(r5)
114+#else
115+ addi r5, r5, VCPU_SHARED_SPRG3
116+ ldbrx r3, 0, r5
117+#endif
118+ b after_sprg3_load
119+sprg3_little_endian:
120+#ifdef __LITTLE_ENDIAN__
121+ ld r3, VCPU_SHARED_SPRG3(r5)
122+#else
123+ addi r5, r5, VCPU_SHARED_SPRG3
124+ ldbrx r3, 0, r5
125+#endif
126+
127+after_sprg3_load:
109128 mtspr SPRN_SPRG3, r3
110129 #endif /* CONFIG_PPC_BOOK3S_64 */
111130
arch/powerpc/kvm/book3s_paired_singles.c+9−7
@@ -165,16 +165,18 @@ static inline void kvmppc_sync_qpr(struct kvm_vcpu *vcpu, int rt) · 164 unmodified lines
165165
166166 static void kvmppc_inject_pf(struct kvm_vcpu *vcpu, ulong eaddr, bool is_store)
167167 {
168− u64 dsisr;
169− struct kvm_vcpu_arch_shared *shared = vcpu->arch.shared;
168+ u32 dsisr;
169+ u64 msr = kvmppc_get_msr(vcpu);
170170
171− shared->msr = kvmppc_set_field(shared->msr, 33, 36, 0);
172− shared->msr = kvmppc_set_field(shared->msr, 42, 47, 0);
173− shared->dar = eaddr;
171+ msr = kvmppc_set_field(msr, 33, 36, 0);
172+ msr = kvmppc_set_field(msr, 42, 47, 0);
173+ kvmppc_set_msr(vcpu, msr);
174+ kvmppc_set_dar(vcpu, eaddr);
174175 /* Page Fault */
175176 dsisr = kvmppc_set_field(0, 33, 33, 1);
176177 if (is_store)
177− shared->dsisr = kvmppc_set_field(dsisr, 38, 38, 1);
178+ dsisr = kvmppc_set_field(dsisr, 38, 38, 1);
179+ kvmppc_set_dsisr(vcpu, dsisr);
178180 kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_DATA_STORAGE);
179181 }
180182
@@ -660,7 +662,7 @@ int kvmppc_emulate_paired_single(struct kvm_run *run, struct kvm_vcpu *vcpu) · 479 unmodified lines
660662 if (!kvmppc_inst_is_paired_single(vcpu, inst))
661663 return EMULATE_FAIL;
662664
663− if (!(vcpu->arch.shared->msr & MSR_FP)) {
665+ if (!(kvmppc_get_msr(vcpu) & MSR_FP)) {
664666 kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL);
665667 return EMULATE_AGAIN;
666668 }
arch/powerpc/kvm/book3s_pr.c+195−43
@@ -53,6 +53,7 @@ · 52 unmodified lines
5353
5454 static int kvmppc_handle_ext(struct kvm_vcpu *vcpu, unsigned int exit_nr,
5555 ulong msr);
56+static void kvmppc_giveup_fac(struct kvm_vcpu *vcpu, ulong fac);
5657
5758 /* Some compatibility defines */
5859 #ifdef CONFIG_PPC_BOOK3S_32
@@ -89,6 +90,7 @@ static void kvmppc_core_vcpu_put_pr(struct kvm_vcpu *vcpu) · 30 unmodified lines
8990 #endif
9091
9192 kvmppc_giveup_ext(vcpu, MSR_FP | MSR_VEC | MSR_VSX);
93+ kvmppc_giveup_fac(vcpu, FSCR_TAR_LG);
9294 vcpu->cpu = -1;
9395 }
9496
@@ -115,6 +117,9 @@ void kvmppc_copy_to_svcpu(struct kvmppc_book3s_shadow_vcpu *svcpu, · 20 unmodified lines
115117 svcpu->ctr = vcpu->arch.ctr;
116118 svcpu->lr = vcpu->arch.lr;
117119 svcpu->pc = vcpu->arch.pc;
120+#ifdef CONFIG_PPC_BOOK3S_64
121+ svcpu->shadow_fscr = vcpu->arch.shadow_fscr;
122+#endif
118123 svcpu->in_use = true;
119124 }
120125
@@ -158,6 +163,9 @@ void kvmppc_copy_from_svcpu(struct kvm_vcpu *vcpu, · 37 unmodified lines
158163 vcpu->arch.fault_dar = svcpu->fault_dar;
159164 vcpu->arch.fault_dsisr = svcpu->fault_dsisr;
160165 vcpu->arch.last_inst = svcpu->last_inst;
166+#ifdef CONFIG_PPC_BOOK3S_64
167+ vcpu->arch.shadow_fscr = svcpu->shadow_fscr;
168+#endif
161169 svcpu->in_use = false;
162170
163171 out:
@@ -246,14 +254,15 @@ static void kvm_set_spte_hva_pr(struct kvm *kvm, unsigned long hva, pte_t pte) · 82 unmodified lines
246254
247255 static void kvmppc_recalc_shadow_msr(struct kvm_vcpu *vcpu)
248256 {
249− ulong smsr = vcpu->arch.shared->msr;
257+ ulong guest_msr = kvmppc_get_msr(vcpu);
258+ ulong smsr = guest_msr;
250259
251260 /* Guest MSR values */
252− smsr &= MSR_FE0 | MSR_FE1 | MSR_SF | MSR_SE | MSR_BE;
261+ smsr &= MSR_FE0 | MSR_FE1 | MSR_SF | MSR_SE | MSR_BE | MSR_LE;
253262 /* Process MSR values */
254263 smsr |= MSR_ME | MSR_RI | MSR_IR | MSR_DR | MSR_PR | MSR_EE;
255264 /* External providers the guest reserved */
256− smsr |= (vcpu->arch.shared->msr & vcpu->arch.guest_owned_ext);
265+ smsr |= (guest_msr & vcpu->arch.guest_owned_ext);
257266 /* 64-bit Process MSR values */
258267 #ifdef CONFIG_PPC_BOOK3S_64
259268 smsr |= MSR_ISF | MSR_HV;
@@ -263,14 +272,14 @@ static void kvmppc_recalc_shadow_msr(struct kvm_vcpu *vcpu) · 3 unmodified lines
263272
264273 static void kvmppc_set_msr_pr(struct kvm_vcpu *vcpu, u64 msr)
265274 {
266− ulong old_msr = vcpu->arch.shared->msr;
275+ ulong old_msr = kvmppc_get_msr(vcpu);
267276
268277 #ifdef EXIT_DEBUG
269278 printk(KERN_INFO "KVM: Set MSR to 0x%llx\n", msr);
270279 #endif
271280
272281 msr &= to_book3s(vcpu)->msr_mask;
273− vcpu->arch.shared->msr = msr;
282+ kvmppc_set_msr_fast(vcpu, msr);
274283 kvmppc_recalc_shadow_msr(vcpu);
275284
276285 if (msr & MSR_POW) {
@@ -281,11 +290,11 @@ static void kvmppc_set_msr_pr(struct kvm_vcpu *vcpu, u64 msr) · 4 unmodified lines
281290
282291 /* Unset POW bit after we woke up */
283292 msr &= ~MSR_POW;
284− vcpu->arch.shared->msr = msr;
293+ kvmppc_set_msr_fast(vcpu, msr);
285294 }
286295 }
287296
288− if ((vcpu->arch.shared->msr & (MSR_PR|MSR_IR|MSR_DR)) !=
297+ if ((kvmppc_get_msr(vcpu) & (MSR_PR|MSR_IR|MSR_DR)) !=
289298 (old_msr & (MSR_PR|MSR_IR|MSR_DR))) {
290299 kvmppc_mmu_flush_segments(vcpu);
291300 kvmppc_mmu_map_segment(vcpu, kvmppc_get_pc(vcpu));
@@ -317,7 +326,7 @@ static void kvmppc_set_msr_pr(struct kvm_vcpu *vcpu, u64 msr) · 25 unmodified lines
317326 }
318327
319328 /* Preload FPU if it's enabled */
320− if (vcpu->arch.shared->msr & MSR_FP)
329+ if (kvmppc_get_msr(vcpu) & MSR_FP)
321330 kvmppc_handle_ext(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, MSR_FP);
322331 }
323332
@@ -427,8 +436,8 @@ static void kvmppc_patch_dcbz(struct kvm_vcpu *vcpu, struct kvmppc_pte *pte) · 103 unmodified lines
427436
428437 /* patch dcbz into reserved instruction, so we trap */
429438 for (i=hpage_offset; i < hpage_offset + (HW_PAGE_SIZE / 4); i++)
430− if ((page[i] & 0xff0007ff) == INS_DCBZ)
431− page[i] &= 0xfffffff7;
439+ if ((be32_to_cpu(page[i]) & 0xff0007ff) == INS_DCBZ)
440+ page[i] &= cpu_to_be32(0xfffffff7);
432441
433442 kunmap_atomic(page);
434443 put_page(hpage);
@@ -438,7 +447,7 @@ static int kvmppc_visible_gfn(struct kvm_vcpu *vcpu, gfn_t gfn) · 3 unmodified lines
438447 {
439448 ulong mp_pa = vcpu->arch.magic_page_pa;
440449
441− if (!(vcpu->arch.shared->msr & MSR_SF))
450+ if (!(kvmppc_get_msr(vcpu) & MSR_SF))
442451 mp_pa = (uint32_t)mp_pa;
443452
444453 if (unlikely(mp_pa) &&
@@ -459,8 +468,8 @@ int kvmppc_handle_pagefault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 14 unmodified lines
459468 int page_found = 0;
460469 struct kvmppc_pte pte;
461470 bool is_mmio = false;
462− bool dr = (vcpu->arch.shared->msr & MSR_DR) ? true : false;
463− bool ir = (vcpu->arch.shared->msr & MSR_IR) ? true : false;
471+ bool dr = (kvmppc_get_msr(vcpu) & MSR_DR) ? true : false;
472+ bool ir = (kvmppc_get_msr(vcpu) & MSR_IR) ? true : false;
464473 u64 vsid;
465474
466475 relocated = data ? dr : ir;
@@ -480,7 +489,7 @@ int kvmppc_handle_pagefault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 13 unmodified lines
480489 pte.page_size = MMU_PAGE_64K;
481490 }
482491
483− switch (vcpu->arch.shared->msr & (MSR_DR|MSR_IR)) {
492+ switch (kvmppc_get_msr(vcpu) & (MSR_DR|MSR_IR)) {
484493 case 0:
485494 pte.vpage |= ((u64)VSID_REAL << (SID_SHIFT - 12));
486495 break;
@@ -488,7 +497,7 @@ int kvmppc_handle_pagefault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 1 unmodified line
488497 case MSR_IR:
489498 vcpu->arch.mmu.esid_to_vsid(vcpu, eaddr >> SID_SHIFT, &vsid);
490499
491− if ((vcpu->arch.shared->msr & (MSR_DR|MSR_IR)) == MSR_DR)
500+ if ((kvmppc_get_msr(vcpu) & (MSR_DR|MSR_IR)) == MSR_DR)
492501 pte.vpage |= ((u64)VSID_REAL_DR << (SID_SHIFT - 12));
493502 else
494503 pte.vpage |= ((u64)VSID_REAL_IR << (SID_SHIFT - 12));
@@ -511,22 +520,25 @@ int kvmppc_handle_pagefault(struct kvm_run *run, struct kvm_vcpu *vcpu, · 16 unmodified lines
511520
512521 if (page_found == -ENOENT) {
513522 /* Page not found in guest PTE entries */
514− vcpu->arch.shared->dar = kvmppc_get_fault_dar(vcpu);
515− vcpu->arch.shared->dsisr = vcpu->arch.fault_dsisr;
516− vcpu->arch.shared->msr |=
517− vcpu->arch.shadow_srr1 & 0x00000000f8000000ULL;
523+ u64 ssrr1 = vcpu->arch.shadow_srr1;
524+ u64 msr = kvmppc_get_msr(vcpu);
525+ kvmppc_set_dar(vcpu, kvmppc_get_fault_dar(vcpu));
526+ kvmppc_set_dsisr(vcpu, vcpu->arch.fault_dsisr);
527+ kvmppc_set_msr_fast(vcpu, msr | (ssrr1 & 0xf8000000ULL));
518528 kvmppc_book3s_queue_irqprio(vcpu, vec);
519529 } else if (page_found == -EPERM) {
520530 /* Storage protection */
521− vcpu->arch.shared->dar = kvmppc_get_fault_dar(vcpu);
522− vcpu->arch.shared->dsisr = vcpu->arch.fault_dsisr & ~DSISR_NOHPTE;
523− vcpu->arch.shared->dsisr |= DSISR_PROTFAULT;
524− vcpu->arch.shared->msr |=
525− vcpu->arch.shadow_srr1 & 0x00000000f8000000ULL;
531+ u32 dsisr = vcpu->arch.fault_dsisr;
532+ u64 ssrr1 = vcpu->arch.shadow_srr1;
533+ u64 msr = kvmppc_get_msr(vcpu);
534+ kvmppc_set_dar(vcpu, kvmppc_get_fault_dar(vcpu));
535+ dsisr = (dsisr & ~DSISR_NOHPTE) | DSISR_PROTFAULT;
536+ kvmppc_set_dsisr(vcpu, dsisr);
537+ kvmppc_set_msr_fast(vcpu, msr | (ssrr1 & 0xf8000000ULL));
526538 kvmppc_book3s_queue_irqprio(vcpu, vec);
527539 } else if (page_found == -EINVAL) {
528540 /* Page not found in guest SLB */
529− vcpu->arch.shared->dar = kvmppc_get_fault_dar(vcpu);
541+ kvmppc_set_dar(vcpu, kvmppc_get_fault_dar(vcpu));
530542 kvmppc_book3s_queue_irqprio(vcpu, vec + 0x80);
531543 } else if (!is_mmio &&
532544 kvmppc_visible_gfn(vcpu, pte.raddr >> PAGE_SHIFT)) {
@@ -606,6 +618,25 @@ void kvmppc_giveup_ext(struct kvm_vcpu *vcpu, ulong msr) · 73 unmodified lines
606618 kvmppc_recalc_shadow_msr(vcpu);
607619 }
608620
621+/* Give up facility (TAR / EBB / DSCR) */
622+static void kvmppc_giveup_fac(struct kvm_vcpu *vcpu, ulong fac)
623+{
624+#ifdef CONFIG_PPC_BOOK3S_64
625+ if (!(vcpu->arch.shadow_fscr & (1ULL << fac))) {
626+ /* Facility not available to the guest, ignore giveup request*/
627+ return;
628+ }
629+
630+ switch (fac) {
631+ case FSCR_TAR_LG:
632+ vcpu->arch.tar = mfspr(SPRN_TAR);
633+ mtspr(SPRN_TAR, current->thread.tar);
634+ vcpu->arch.shadow_fscr &= ~FSCR_TAR;
635+ break;
636+ }
637+#endif
638+}
639+
609640 static int kvmppc_read_inst(struct kvm_vcpu *vcpu)
610641 {
611642 ulong srr0 = kvmppc_get_pc(vcpu);
@@ -614,11 +645,12 @@ static int kvmppc_read_inst(struct kvm_vcpu *vcpu) · 2 unmodified lines
614645
615646 ret = kvmppc_ld(vcpu, &srr0, sizeof(u32), &last_inst, false);
616647 if (ret == -ENOENT) {
617− ulong msr = vcpu->arch.shared->msr;
648+ ulong msr = kvmppc_get_msr(vcpu);
618649
619650 msr = kvmppc_set_field(msr, 33, 33, 1);
620651 msr = kvmppc_set_field(msr, 34, 36, 0);
621− vcpu->arch.shared->msr = kvmppc_set_field(msr, 42, 47, 0);
652+ msr = kvmppc_set_field(msr, 42, 47, 0);
653+ kvmppc_set_msr_fast(vcpu, msr);
622654 kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_INST_STORAGE);
623655 return EMULATE_AGAIN;
624656 }
@@ -651,7 +683,7 @@ static int kvmppc_handle_ext(struct kvm_vcpu *vcpu, unsigned int exit_nr, · 26 unmodified lines
651683 if (vcpu->arch.hflags & BOOK3S_HFLAG_PAIRED_SINGLE)
652684 return RESUME_GUEST;
653685
654− if (!(vcpu->arch.shared->msr & msr)) {
686+ if (!(kvmppc_get_msr(vcpu) & msr)) {
655687 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
656688 return RESUME_GUEST;
657689 }
@@ -683,16 +715,20 @@ static int kvmppc_handle_ext(struct kvm_vcpu *vcpu, unsigned int exit_nr, · 25 unmodified lines
683715 #endif
684716
685717 if (msr & MSR_FP) {
718+ preempt_disable();
686719 enable_kernel_fp();
687720 load_fp_state(&vcpu->arch.fp);
688721 t->fp_save_area = &vcpu->arch.fp;
722+ preempt_enable();
689723 }
690724
691725 if (msr & MSR_VEC) {
692726 #ifdef CONFIG_ALTIVEC
727+ preempt_disable();
693728 enable_kernel_altivec();
694729 load_vr_state(&vcpu->arch.vr);
695730 t->vr_save_area = &vcpu->arch.vr;
731+ preempt_enable();
696732 #endif
697733 }
698734
@@ -716,18 +752,90 @@ static void kvmppc_handle_lost_ext(struct kvm_vcpu *vcpu) · 17 unmodified lines
716752 return;
717753
718754 if (lost_ext & MSR_FP) {
755+ preempt_disable();
719756 enable_kernel_fp();
720757 load_fp_state(&vcpu->arch.fp);
758+ preempt_enable();
721759 }
722760 #ifdef CONFIG_ALTIVEC
723761 if (lost_ext & MSR_VEC) {
762+ preempt_disable();
724763 enable_kernel_altivec();
725764 load_vr_state(&vcpu->arch.vr);
765+ preempt_enable();
726766 }
727767 #endif
728768 current->thread.regs->msr |= lost_ext;
729769 }
730770
771+#ifdef CONFIG_PPC_BOOK3S_64
772+
773+static void kvmppc_trigger_fac_interrupt(struct kvm_vcpu *vcpu, ulong fac)
774+{
775+ /* Inject the Interrupt Cause field and trigger a guest interrupt */
776+ vcpu->arch.fscr &= ~(0xffULL << 56);
777+ vcpu->arch.fscr |= (fac << 56);
778+ kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_FAC_UNAVAIL);
779+}
780+
781+static void kvmppc_emulate_fac(struct kvm_vcpu *vcpu, ulong fac)
782+{
783+ enum emulation_result er = EMULATE_FAIL;
784+
785+ if (!(kvmppc_get_msr(vcpu) & MSR_PR))
786+ er = kvmppc_emulate_instruction(vcpu->run, vcpu);
787+
788+ if ((er != EMULATE_DONE) && (er != EMULATE_AGAIN)) {
789+ /* Couldn't emulate, trigger interrupt in guest */
790+ kvmppc_trigger_fac_interrupt(vcpu, fac);
791+ }
792+}
793+
794+/* Enable facilities (TAR, EBB, DSCR) for the guest */
795+static int kvmppc_handle_fac(struct kvm_vcpu *vcpu, ulong fac)
796+{
797+ bool guest_fac_enabled;
798+ BUG_ON(!cpu_has_feature(CPU_FTR_ARCH_207S));
799+
800+ /*
801+ * Not every facility is enabled by FSCR bits, check whether the
802+ * guest has this facility enabled at all.
803+ */
804+ switch (fac) {
805+ case FSCR_TAR_LG:
806+ case FSCR_EBB_LG:
807+ guest_fac_enabled = (vcpu->arch.fscr & (1ULL << fac));
808+ break;
809+ case FSCR_TM_LG:
810+ guest_fac_enabled = kvmppc_get_msr(vcpu) & MSR_TM;
811+ break;
812+ default:
813+ guest_fac_enabled = false;
814+ break;
815+ }
816+
817+ if (!guest_fac_enabled) {
818+ /* Facility not enabled by the guest */
819+ kvmppc_trigger_fac_interrupt(vcpu, fac);
820+ return RESUME_GUEST;
821+ }
822+
823+ switch (fac) {
824+ case FSCR_TAR_LG:
825+ /* TAR switching isn't lazy in Linux yet */
826+ current->thread.tar = mfspr(SPRN_TAR);
827+ mtspr(SPRN_TAR, vcpu->arch.tar);
828+ vcpu->arch.shadow_fscr |= FSCR_TAR;
829+ break;
830+ default:
831+ kvmppc_emulate_fac(vcpu, fac);
832+ break;
833+ }
834+
835+ return RESUME_GUEST;
836+}
837+#endif
838+
731839 int kvmppc_handle_exit_pr(struct kvm_run *run, struct kvm_vcpu *vcpu,
732840 unsigned int exit_nr)
733841 {
@@ -784,7 +892,9 @@ int kvmppc_handle_exit_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 50 unmodified lines
784892 kvmppc_mmu_pte_flush(vcpu, kvmppc_get_pc(vcpu), ~0xFFFUL);
785893 r = RESUME_GUEST;
786894 } else {
787− vcpu->arch.shared->msr |= shadow_srr1 & 0x58000000;
895+ u64 msr = kvmppc_get_msr(vcpu);
896+ msr |= shadow_srr1 & 0x58000000;
897+ kvmppc_set_msr_fast(vcpu, msr);
788898 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
789899 r = RESUME_GUEST;
790900 }
@@ -824,8 +934,8 @@ int kvmppc_handle_exit_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 33 unmodified lines
824934 r = kvmppc_handle_pagefault(run, vcpu, dar, exit_nr);
825935 srcu_read_unlock(&vcpu->kvm->srcu, idx);
826936 } else {
827− vcpu->arch.shared->dar = dar;
828− vcpu->arch.shared->dsisr = fault_dsisr;
937+ kvmppc_set_dar(vcpu, dar);
938+ kvmppc_set_dsisr(vcpu, fault_dsisr);
829939 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
830940 r = RESUME_GUEST;
831941 }
@@ -833,7 +943,7 @@ int kvmppc_handle_exit_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 1 unmodified line
833943 }
834944 case BOOK3S_INTERRUPT_DATA_SEGMENT:
835945 if (kvmppc_mmu_map_segment(vcpu, kvmppc_get_fault_dar(vcpu)) < 0) {
836− vcpu->arch.shared->dar = kvmppc_get_fault_dar(vcpu);
946+ kvmppc_set_dar(vcpu, kvmppc_get_fault_dar(vcpu));
837947 kvmppc_book3s_queue_irqprio(vcpu,
838948 BOOK3S_INTERRUPT_DATA_SEGMENT);
839949 }
@@ -871,7 +981,7 @@ int kvmppc_handle_exit_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, · 31 unmodified lines
871981 program_interrupt:
872982 flags = vcpu->arch.shadow_srr1 & 0x1f0000ull;
873983
874− if (vcpu->arch.shared->msr & MSR_PR) {
984+ if (kvmppc_get_msr(vcpu) & MSR_PR) {
875985 #ifdef EXIT_DEBUG
876986 printk(KERN_INFO "Userspace triggered 0x700 exception at 0x%lx (0x%x)\n", kvmppc_get_pc(vcpu), kvmppc_get_last_inst(vcpu));
877987 #endif
@@ -913,7 +1023,7 @@ program_interrupt: · 35 unmodified lines
9131023 case BOOK3S_INTERRUPT_SYSCALL:
9141024 if (vcpu->arch.papr_enabled &&
9151025 (kvmppc_get_last_sc(vcpu) == 0x44000022) &&
916− !(vcpu->arch.shared->msr & MSR_PR)) {
1026+ !(kvmppc_get_msr(vcpu) & MSR_PR)) {
9171027 /* SC 1 papr hypercalls */
9181028 ulong cmd = kvmppc_get_gpr(vcpu, 3);
9191029 int i;
@@ -945,7 +1055,7 @@ program_interrupt: · 25 unmodified lines
9451055 gprs[i] = kvmppc_get_gpr(vcpu, i);
9461056 vcpu->arch.osi_needed = 1;
9471057 r = RESUME_HOST_NV;
948− } else if (!(vcpu->arch.shared->msr & MSR_PR) &&
1058+ } else if (!(kvmppc_get_msr(vcpu) & MSR_PR) &&
9491059 (((u32)kvmppc_get_gpr(vcpu, 0)) == KVM_SC_MAGIC_R0)) {
9501060 /* KVM PV hypercalls */
9511061 kvmppc_set_gpr(vcpu, 3, kvmppc_kvm_pv(vcpu));
@@ -986,14 +1096,26 @@ program_interrupt: · 34 unmodified lines
9861096 }
9871097 case BOOK3S_INTERRUPT_ALIGNMENT:
9881098 if (kvmppc_read_inst(vcpu) == EMULATE_DONE) {
989− vcpu->arch.shared->dsisr = kvmppc_alignment_dsisr(vcpu,
990− kvmppc_get_last_inst(vcpu));
991− vcpu->arch.shared->dar = kvmppc_alignment_dar(vcpu,
992− kvmppc_get_last_inst(vcpu));
1099+ u32 last_inst = kvmppc_get_last_inst(vcpu);
1100+ u32 dsisr;
1101+ u64 dar;
1102+
1103+ dsisr = kvmppc_alignment_dsisr(vcpu, last_inst);
1104+ dar = kvmppc_alignment_dar(vcpu, last_inst);
1105+
1106+ kvmppc_set_dsisr(vcpu, dsisr);
1107+ kvmppc_set_dar(vcpu, dar);
1108+
9931109 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
9941110 }
9951111 r = RESUME_GUEST;
9961112 break;
1113+#ifdef CONFIG_PPC_BOOK3S_64
1114+ case BOOK3S_INTERRUPT_FAC_UNAVAIL:
1115+ kvmppc_handle_fac(vcpu, vcpu->arch.shadow_fscr >> 56);
1116+ r = RESUME_GUEST;
1117+ break;
1118+#endif
9971119 case BOOK3S_INTERRUPT_MACHINE_CHECK:
9981120 case BOOK3S_INTERRUPT_TRACE:
9991121 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
@@ -1054,7 +1176,7 @@ static int kvm_arch_vcpu_ioctl_get_sregs_pr(struct kvm_vcpu *vcpu, · 54 unmodified lines
10541176 }
10551177 } else {
10561178 for (i = 0; i < 16; i++)
1057− sregs->u.s.ppc32.sr[i] = vcpu->arch.shared->sr[i];
1179+ sregs->u.s.ppc32.sr[i] = kvmppc_get_sr(vcpu, i);
10581180
10591181 for (i = 0; i < 8; i++) {
10601182 sregs->u.s.ppc32.ibat[i] = vcpu3s->ibat[i].raw;
@@ -1110,6 +1232,15 @@ static int kvmppc_get_one_reg_pr(struct kvm_vcpu *vcpu, u64 id, · 49 unmodified lines
11101232 case KVM_REG_PPC_HIOR:
11111233 *val = get_reg_val(id, to_book3s(vcpu)->hior);
11121234 break;
1235+ case KVM_REG_PPC_LPCR:
1236+ /*
1237+ * We are only interested in the LPCR_ILE bit
1238+ */
1239+ if (vcpu->arch.intr_msr & MSR_LE)
1240+ *val = get_reg_val(id, LPCR_ILE);
1241+ else
1242+ *val = get_reg_val(id, 0);
1243+ break;
11131244 default:
11141245 r = -EINVAL;
11151246 break;
@@ -1118,6 +1249,14 @@ static int kvmppc_get_one_reg_pr(struct kvm_vcpu *vcpu, u64 id, · 2 unmodified lines
11181249 return r;
11191250 }
11201251
1252+static void kvmppc_set_lpcr_pr(struct kvm_vcpu *vcpu, u64 new_lpcr)
1253+{
1254+ if (new_lpcr & LPCR_ILE)
1255+ vcpu->arch.intr_msr |= MSR_LE;
1256+ else
1257+ vcpu->arch.intr_msr &= ~MSR_LE;
1258+}
1259+
11211260 static int kvmppc_set_one_reg_pr(struct kvm_vcpu *vcpu, u64 id,
11221261 union kvmppc_one_reg *val)
11231262 {
@@ -1128,6 +1267,9 @@ static int kvmppc_set_one_reg_pr(struct kvm_vcpu *vcpu, u64 id, · 4 unmodified lines
11281267 to_book3s(vcpu)->hior = set_reg_val(id, *val);
11291268 to_book3s(vcpu)->hior_explicit = true;
11301269 break;
1270+ case KVM_REG_PPC_LPCR:
1271+ kvmppc_set_lpcr_pr(vcpu, set_reg_val(id, *val));
1272+ break;
11311273 default:
11321274 r = -EINVAL;
11331275 break;
@@ -1170,8 +1312,14 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_pr(struct kvm *kvm, · 36 unmodified lines
11701312 goto uninit_vcpu;
11711313 /* the real shared page fills the last 4k of our page */
11721314 vcpu->arch.shared = (void *)(p + PAGE_SIZE - 4096);
1173−
11741315 #ifdef CONFIG_PPC_BOOK3S_64
1316+ /* Always start the shared struct in native endian mode */
1317+#ifdef __BIG_ENDIAN__
1318+ vcpu->arch.shared_big_endian = true;
1319+#else
1320+ vcpu->arch.shared_big_endian = false;
1321+#endif
1322+
11751323 /*
11761324 * Default to the same as the host if we're on sufficiently
11771325 * recent machine that we have 1TB segments;
@@ -1180,6 +1328,7 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_pr(struct kvm *kvm, · 2 unmodified lines
11801328 vcpu->arch.pvr = 0x3C0301;
11811329 if (mmu_has_feature(MMU_FTR_1T_SEGMENT))
11821330 vcpu->arch.pvr = mfspr(SPRN_PVR);
1331+ vcpu->arch.intr_msr = MSR_SF;
11831332 #else
11841333 /* default to book3s_32 (750) */
11851334 vcpu->arch.pvr = 0x84202;
@@ -1187,7 +1336,7 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_pr(struct kvm *kvm, · 1 unmodified line
11871336 kvmppc_set_pvr_pr(vcpu, vcpu->arch.pvr);
11881337 vcpu->arch.slb_nr = 64;
11891338
1190− vcpu->arch.shadow_msr = MSR_USER64;
1339+ vcpu->arch.shadow_msr = MSR_USER64 & ~MSR_LE;
11911340
11921341 err = kvmppc_mmu_init(vcpu);
11931342 if (err < 0)
@@ -1264,7 +1413,7 @@ static int kvmppc_vcpu_run_pr(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) · 70 unmodified lines
12641413 #endif
12651414
12661415 /* Preload FPU if it's enabled */
1267− if (vcpu->arch.shared->msr & MSR_FP)
1416+ if (kvmppc_get_msr(vcpu) & MSR_FP)
12681417 kvmppc_handle_ext(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, MSR_FP);
12691418
12701419 kvmppc_fix_ee_before_entry();
@@ -1277,6 +1426,9 @@ static int kvmppc_vcpu_run_pr(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) · 6 unmodified lines
12771426 /* Make sure we save the guest FPU/Altivec/VSX state */
12781427 kvmppc_giveup_ext(vcpu, MSR_FP | MSR_VEC | MSR_VSX);
12791428
1429+ /* Make sure we save the guest TAR/EBB/DSCR state */
1430+ kvmppc_giveup_fac(vcpu, FSCR_TAR_LG);
1431+
12801432 out:
12811433 vcpu->mode = OUTSIDE_GUEST_MODE;
12821434 return ret;
arch/powerpc/kvm/book3s_pr_papr.c+12−4
@@ -57,7 +57,7 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu) · 56 unmodified lines
5757 for (i = 0; ; ++i) {
5858 if (i == 8)
5959 goto done;
60− if ((*hpte & HPTE_V_VALID) == 0)
60+ if ((be64_to_cpu(*hpte) & HPTE_V_VALID) == 0)
6161 break;
6262 hpte += 2;
6363 }
@@ -67,8 +67,8 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu) · 3 unmodified lines
6767 goto done;
6868 }
6969
70− hpte[0] = kvmppc_get_gpr(vcpu, 6);
71− hpte[1] = kvmppc_get_gpr(vcpu, 7);
70+ hpte[0] = cpu_to_be64(kvmppc_get_gpr(vcpu, 6));
71+ hpte[1] = cpu_to_be64(kvmppc_get_gpr(vcpu, 7));
7272 pteg_addr += i * HPTE_SIZE;
7373 copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE);
7474 kvmppc_set_gpr(vcpu, 4, pte_index | i);
@@ -93,6 +93,8 @@ static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu) · 18 unmodified lines
9393 pteg = get_pteg_addr(vcpu, pte_index);
9494 mutex_lock(&vcpu->kvm->arch.hpt_mutex);
9595 copy_from_user(pte, (void __user *)pteg, sizeof(pte));
96+ pte[0] = be64_to_cpu(pte[0]);
97+ pte[1] = be64_to_cpu(pte[1]);
9698
9799 ret = H_NOT_FOUND;
98100 if ((pte[0] & HPTE_V_VALID) == 0 ||
@@ -169,6 +171,8 @@ static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu) · 70 unmodified lines
169171
170172 pteg = get_pteg_addr(vcpu, tsh & H_BULK_REMOVE_PTEX);
171173 copy_from_user(pte, (void __user *)pteg, sizeof(pte));
174+ pte[0] = be64_to_cpu(pte[0]);
175+ pte[1] = be64_to_cpu(pte[1]);
172176
173177 /* tsl = AVPN */
174178 flags = (tsh & H_BULK_REMOVE_FLAGS) >> 26;
@@ -207,6 +211,8 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) · 32 unmodified lines
207211 pteg = get_pteg_addr(vcpu, pte_index);
208212 mutex_lock(&vcpu->kvm->arch.hpt_mutex);
209213 copy_from_user(pte, (void __user *)pteg, sizeof(pte));
214+ pte[0] = be64_to_cpu(pte[0]);
215+ pte[1] = be64_to_cpu(pte[1]);
210216
211217 ret = H_NOT_FOUND;
212218 if ((pte[0] & HPTE_V_VALID) == 0 ||
@@ -225,6 +231,8 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) · 12 unmodified lines
225231
226232 rb = compute_tlbie_rb(v, r, pte_index);
227233 vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false);
234+ pte[0] = cpu_to_be64(pte[0]);
235+ pte[1] = cpu_to_be64(pte[1]);
228236 copy_to_user((void __user *)pteg, pte, sizeof(pte));
229237 ret = H_SUCCESS;
230238
@@ -270,7 +278,7 @@ int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) · 39 unmodified lines
270278 case H_PUT_TCE:
271279 return kvmppc_h_pr_put_tce(vcpu);
272280 case H_CEDE:
273− vcpu->arch.shared->msr |= MSR_EE;
281+ kvmppc_set_msr_fast(vcpu, kvmppc_get_msr(vcpu) | MSR_EE);
274282 kvm_vcpu_block(vcpu);
275283 clear_bit(KVM_REQ_UNHALT, &vcpu->requests);
276284 vcpu->stat.halt_wakeup++;
arch/powerpc/kvm/book3s_rtas.c+29−0
@@ -205,6 +205,32 @@ int kvm_vm_ioctl_rtas_define_token(struct kvm *kvm, void __user *argp) · 204 unmodified lines
205205 return rc;
206206 }
207207
208+static void kvmppc_rtas_swap_endian_in(struct rtas_args *args)
209+{
210+#ifdef __LITTLE_ENDIAN__
211+ int i;
212+
213+ args->token = be32_to_cpu(args->token);
214+ args->nargs = be32_to_cpu(args->nargs);
215+ args->nret = be32_to_cpu(args->nret);
216+ for (i = 0; i < args->nargs; i++)
217+ args->args[i] = be32_to_cpu(args->args[i]);
218+#endif
219+}
220+
221+static void kvmppc_rtas_swap_endian_out(struct rtas_args *args)
222+{
223+#ifdef __LITTLE_ENDIAN__
224+ int i;
225+
226+ for (i = 0; i < args->nret; i++)
227+ args->args[i] = cpu_to_be32(args->args[i]);
228+ args->token = cpu_to_be32(args->token);
229+ args->nargs = cpu_to_be32(args->nargs);
230+ args->nret = cpu_to_be32(args->nret);
231+#endif
232+}
233+
208234 int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu)
209235 {
210236 struct rtas_token_definition *d;
@@ -223,6 +249,8 @@ int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu) · 12 unmodified lines
223249 if (rc)
224250 goto fail;
225251
252+ kvmppc_rtas_swap_endian_in(&args);
253+
226254 /*
227255 * args->rets is a pointer into args->args. Now that we've
228256 * copied args we need to fix it up to point into our copy,
@@ -247,6 +275,7 @@ int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu) · 18 unmodified lines
247275
248276 if (rc == 0) {
249277 args.rets = orig_rets;
278+ kvmppc_rtas_swap_endian_out(&args);
250279 rc = kvm_write_guest(vcpu->kvm, args_phys, &args, sizeof(args));
251280 if (rc)
252281 goto fail;
arch/powerpc/kvm/book3s_segment.S+25−0
@@ -90,6 +90,15 @@ kvmppc_handler_trampoline_enter: · 89 unmodified lines
9090 LOAD_GUEST_SEGMENTS
9191
9292 #ifdef CONFIG_PPC_BOOK3S_64
93+BEGIN_FTR_SECTION
94+ /* Save host FSCR */
95+ mfspr r8, SPRN_FSCR
96+ std r8, HSTATE_HOST_FSCR(r13)
97+ /* Set FSCR during guest execution */
98+ ld r9, SVCPU_SHADOW_FSCR(r13)
99+ mtspr SPRN_FSCR, r9
100+END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
101+
93102 /* Some guests may need to have dcbz set to 32 byte length.
94103 *
95104 * Usually we ensure that by patching the guest's instructions
@@ -255,6 +264,10 @@ BEGIN_FTR_SECTION · 159 unmodified lines
255264 cmpwi r12, BOOK3S_INTERRUPT_H_EMUL_ASSIST
256265 beq- ld_last_inst
257266 END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
267+BEGIN_FTR_SECTION
268+ cmpwi r12, BOOK3S_INTERRUPT_FAC_UNAVAIL
269+ beq- ld_last_inst
270+END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
258271 #endif
259272
260273 b no_ld_last_inst
@@ -311,6 +324,18 @@ no_ld_last_inst: · 50 unmodified lines
311324
312325 no_dcbz32_off:
313326
327+BEGIN_FTR_SECTION
328+ /* Save guest FSCR on a FAC_UNAVAIL interrupt */
329+ cmpwi r12, BOOK3S_INTERRUPT_FAC_UNAVAIL
330+ bne+ no_fscr_save
331+ mfspr r7, SPRN_FSCR
332+ std r7, SVCPU_SHADOW_FSCR(r13)
333+no_fscr_save:
334+ /* Restore host FSCR */
335+ ld r8, HSTATE_HOST_FSCR(r13)
336+ mtspr SPRN_FSCR, r8
337+END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
338+
314339 #endif /* CONFIG_PPC_BOOK3S_64 */
315340
316341 /*
arch/powerpc/kvm/e500_emulate.c+15−0
@@ -19,6 +19,7 @@ · 18 unmodified lines
1919 #include "booke.h"
2020 #include "e500.h"
2121
22+#define XOP_DCBTLS 166
2223 #define XOP_MSGSND 206
2324 #define XOP_MSGCLR 238
2425 #define XOP_TLBIVAX 786
@@ -103,6 +104,15 @@ static int kvmppc_e500_emul_ehpriv(struct kvm_run *run, struct kvm_vcpu *vcpu, · 78 unmodified lines
103104 return emulated;
104105 }
105106
107+static int kvmppc_e500_emul_dcbtls(struct kvm_vcpu *vcpu)
108+{
109+ struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
110+
111+ /* Always fail to lock the cache */
112+ vcpu_e500->l1csr0 |= L1CSR0_CUL;
113+ return EMULATE_DONE;
114+}
115+
106116 int kvmppc_core_emulate_op_e500(struct kvm_run *run, struct kvm_vcpu *vcpu,
107117 unsigned int inst, int *advance)
108118 {
@@ -116,6 +126,10 @@ int kvmppc_core_emulate_op_e500(struct kvm_run *run, struct kvm_vcpu *vcpu, · 7 unmodified lines
116126 case 31:
117127 switch (get_xop(inst)) {
118128
129+ case XOP_DCBTLS:
130+ emulated = kvmppc_e500_emul_dcbtls(vcpu);
131+ break;
132+
119133 #ifdef CONFIG_KVM_E500MC
120134 case XOP_MSGSND:
121135 emulated = kvmppc_e500_emul_msgsnd(vcpu, rb);
@@ -222,6 +236,7 @@ int kvmppc_core_emulate_mtspr_e500(struct kvm_vcpu *vcpu, int sprn, ulong spr_va · 100 unmodified lines
222236 break;
223237 case SPRN_L1CSR1:
224238 vcpu_e500->l1csr1 = spr_val;
239+ vcpu_e500->l1csr1 &= ~(L1CSR1_ICFI | L1CSR1_ICLFR);
225240 break;
226241 case SPRN_HID0:
227242 vcpu_e500->hid0 = spr_val;
arch/powerpc/kvm/emulate.c+12−12
@@ -97,10 +97,10 @@ static int kvmppc_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, int rs) · 96 unmodified lines
9797
9898 switch (sprn) {
9999 case SPRN_SRR0:
100− vcpu->arch.shared->srr0 = spr_val;
100+ kvmppc_set_srr0(vcpu, spr_val);
101101 break;
102102 case SPRN_SRR1:
103− vcpu->arch.shared->srr1 = spr_val;
103+ kvmppc_set_srr1(vcpu, spr_val);
104104 break;
105105
106106 /* XXX We need to context-switch the timebase for
@@ -114,16 +114,16 @@ static int kvmppc_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, int rs) · 7 unmodified lines
114114 break;
115115
116116 case SPRN_SPRG0:
117− vcpu->arch.shared->sprg0 = spr_val;
117+ kvmppc_set_sprg0(vcpu, spr_val);
118118 break;
119119 case SPRN_SPRG1:
120− vcpu->arch.shared->sprg1 = spr_val;
120+ kvmppc_set_sprg1(vcpu, spr_val);
121121 break;
122122 case SPRN_SPRG2:
123− vcpu->arch.shared->sprg2 = spr_val;
123+ kvmppc_set_sprg2(vcpu, spr_val);
124124 break;
125125 case SPRN_SPRG3:
126− vcpu->arch.shared->sprg3 = spr_val;
126+ kvmppc_set_sprg3(vcpu, spr_val);
127127 break;
128128
129129 /* PIR can legally be written, but we ignore it */
@@ -150,10 +150,10 @@ static int kvmppc_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, int rt) · 20 unmodified lines
150150
151151 switch (sprn) {
152152 case SPRN_SRR0:
153− spr_val = vcpu->arch.shared->srr0;
153+ spr_val = kvmppc_get_srr0(vcpu);
154154 break;
155155 case SPRN_SRR1:
156− spr_val = vcpu->arch.shared->srr1;
156+ spr_val = kvmppc_get_srr1(vcpu);
157157 break;
158158 case SPRN_PVR:
159159 spr_val = vcpu->arch.pvr;
@@ -173,16 +173,16 @@ static int kvmppc_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, int rt) · 13 unmodified lines
173173 break;
174174
175175 case SPRN_SPRG0:
176− spr_val = vcpu->arch.shared->sprg0;
176+ spr_val = kvmppc_get_sprg0(vcpu);
177177 break;
178178 case SPRN_SPRG1:
179− spr_val = vcpu->arch.shared->sprg1;
179+ spr_val = kvmppc_get_sprg1(vcpu);
180180 break;
181181 case SPRN_SPRG2:
182− spr_val = vcpu->arch.shared->sprg2;
182+ spr_val = kvmppc_get_sprg2(vcpu);
183183 break;
184184 case SPRN_SPRG3:
185− spr_val = vcpu->arch.shared->sprg3;
185+ spr_val = kvmppc_get_sprg3(vcpu);
186186 break;
187187 /* Note: SPRG4-7 are user-readable, so we don't get
188188 * a trap. */
arch/powerpc/kvm/mpic.c+4−1
@@ -126,6 +126,8 @@ static int openpic_cpu_write_internal(void *opaque, gpa_t addr, · 125 unmodified lines
126126 u32 val, int idx);
127127 static int openpic_cpu_read_internal(void *opaque, gpa_t addr,
128128 u32 *ptr, int idx);
129+static inline void write_IRQreg_idr(struct openpic *opp, int n_IRQ,
130+ uint32_t val);
129131
130132 enum irq_type {
131133 IRQ_TYPE_NORMAL = 0,
@@ -528,7 +530,6 @@ static void openpic_reset(struct openpic *opp) · 396 unmodified lines
528530 /* Initialise IRQ sources */
529531 for (i = 0; i < opp->max_irq; i++) {
530532 opp->src[i].ivpr = opp->ivpr_reset;
531− opp->src[i].idr = opp->idr_reset;
532533
533534 switch (opp->src[i].type) {
534535 case IRQ_TYPE_NORMAL:
@@ -543,6 +544,8 @@ static void openpic_reset(struct openpic *opp) · 8 unmodified lines
543544 case IRQ_TYPE_FSLSPECIAL:
544545 break;
545546 }
547+
548+ write_IRQreg_idr(opp, i, opp->idr_reset);
546549 }
547550 /* Initialise IRQ destinations */
548551 for (i = 0; i < MAX_CPU; i++) {
arch/powerpc/kvm/powerpc.c+53−11
@@ -125,6 +125,27 @@ int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu) · 124 unmodified lines
125125 }
126126 EXPORT_SYMBOL_GPL(kvmppc_prepare_to_enter);
127127
128+#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE)
129+static void kvmppc_swab_shared(struct kvm_vcpu *vcpu)
130+{
131+ struct kvm_vcpu_arch_shared *shared = vcpu->arch.shared;
132+ int i;
133+
134+ shared->sprg0 = swab64(shared->sprg0);
135+ shared->sprg1 = swab64(shared->sprg1);
136+ shared->sprg2 = swab64(shared->sprg2);
137+ shared->sprg3 = swab64(shared->sprg3);
138+ shared->srr0 = swab64(shared->srr0);
139+ shared->srr1 = swab64(shared->srr1);
140+ shared->dar = swab64(shared->dar);
141+ shared->msr = swab64(shared->msr);
142+ shared->dsisr = swab32(shared->dsisr);
143+ shared->int_pending = swab32(shared->int_pending);
144+ for (i = 0; i < ARRAY_SIZE(shared->sr); i++)
145+ shared->sr[i] = swab32(shared->sr[i]);
146+}
147+#endif
148+
128149 int kvmppc_kvm_pv(struct kvm_vcpu *vcpu)
129150 {
130151 int nr = kvmppc_get_gpr(vcpu, 11);
@@ -135,7 +156,7 @@ int kvmppc_kvm_pv(struct kvm_vcpu *vcpu) · 4 unmodified lines
135156 unsigned long __maybe_unused param4 = kvmppc_get_gpr(vcpu, 6);
136157 unsigned long r2 = 0;
137158
138− if (!(vcpu->arch.shared->msr & MSR_SF)) {
159+ if (!(kvmppc_get_msr(vcpu) & MSR_SF)) {
139160 /* 32 bit mode */
140161 param1 &= 0xffffffff;
141162 param2 &= 0xffffffff;
@@ -146,8 +167,28 @@ int kvmppc_kvm_pv(struct kvm_vcpu *vcpu) · 4 unmodified lines
146167 switch (nr) {
147168 case KVM_HCALL_TOKEN(KVM_HC_PPC_MAP_MAGIC_PAGE):
148169 {
149− vcpu->arch.magic_page_pa = param1;
150− vcpu->arch.magic_page_ea = param2;
170+#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE)
171+ /* Book3S can be little endian, find it out here */
172+ int shared_big_endian = true;
173+ if (vcpu->arch.intr_msr & MSR_LE)
174+ shared_big_endian = false;
175+ if (shared_big_endian != vcpu->arch.shared_big_endian)
176+ kvmppc_swab_shared(vcpu);
177+ vcpu->arch.shared_big_endian = shared_big_endian;
178+#endif
179+
180+ if (!(param2 & MAGIC_PAGE_FLAG_NOT_MAPPED_NX)) {
181+ /*
182+ * Older versions of the Linux magic page code had
183+ * a bug where they would map their trampoline code
184+ * NX. If that's the case, remove !PR NX capability.
185+ */
186+ vcpu->arch.disable_kernel_nx = true;
187+ kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
188+ }
189+
190+ vcpu->arch.magic_page_pa = param1 & ~0xfffULL;
191+ vcpu->arch.magic_page_ea = param2 & ~0xfffULL;
151192
152193 r2 = KVM_MAGIC_FEAT_SR | KVM_MAGIC_FEAT_MAS0_TO_SPRG7;
153194
@@ -375,6 +416,7 @@ int kvm_dev_ioctl_check_extension(long ext) · 221 unmodified lines
375416 case KVM_CAP_SPAPR_TCE:
376417 case KVM_CAP_PPC_ALLOC_HTAB:
377418 case KVM_CAP_PPC_RTAS:
419+ case KVM_CAP_PPC_FIXUP_HCALL:
378420 #ifdef CONFIG_KVM_XICS
379421 case KVM_CAP_IRQ_XICS:
380422 #endif
@@ -1015,10 +1057,10 @@ static int kvm_vm_ioctl_get_pvinfo(struct kvm_ppc_pvinfo *pvinfo) · 634 unmodified lines
10151057 u32 inst_nop = 0x60000000;
10161058 #ifdef CONFIG_KVM_BOOKE_HV
10171059 u32 inst_sc1 = 0x44000022;
1018− pvinfo->hcall[0] = inst_sc1;
1019− pvinfo->hcall[1] = inst_nop;
1020− pvinfo->hcall[2] = inst_nop;
1021− pvinfo->hcall[3] = inst_nop;
1060+ pvinfo->hcall[0] = cpu_to_be32(inst_sc1);
1061+ pvinfo->hcall[1] = cpu_to_be32(inst_nop);
1062+ pvinfo->hcall[2] = cpu_to_be32(inst_nop);
1063+ pvinfo->hcall[3] = cpu_to_be32(inst_nop);
10221064 #else
10231065 u32 inst_lis = 0x3c000000;
10241066 u32 inst_ori = 0x60000000;
@@ -1034,10 +1076,10 @@ static int kvm_vm_ioctl_get_pvinfo(struct kvm_ppc_pvinfo *pvinfo) · 9 unmodified lines
10341076 * sc
10351077 * nop
10361078 */
1037− pvinfo->hcall[0] = inst_lis | ((KVM_SC_MAGIC_R0 >> 16) & inst_imm_mask);
1038− pvinfo->hcall[1] = inst_ori | (KVM_SC_MAGIC_R0 & inst_imm_mask);
1039− pvinfo->hcall[2] = inst_sc;
1040− pvinfo->hcall[3] = inst_nop;
1079+ pvinfo->hcall[0] = cpu_to_be32(inst_lis | ((KVM_SC_MAGIC_R0 >> 16) & inst_imm_mask));
1080+ pvinfo->hcall[1] = cpu_to_be32(inst_ori | (KVM_SC_MAGIC_R0 & inst_imm_mask));
1081+ pvinfo->hcall[2] = cpu_to_be32(inst_sc);
1082+ pvinfo->hcall[3] = cpu_to_be32(inst_nop);
10411083 #endif
10421084
10431085 pvinfo->flags = KVM_PPC_PVINFO_FLAGS_EV_IDLE;
arch/powerpc/kvm/trace_pr.h+1−1
@@ -255,7 +255,7 @@ TRACE_EVENT(kvm_exit, · 254 unmodified lines
255255 __entry->exit_nr = exit_nr;
256256 __entry->pc = kvmppc_get_pc(vcpu);
257257 __entry->dar = kvmppc_get_fault_dar(vcpu);
258− __entry->msr = vcpu->arch.shared->msr;
258+ __entry->msr = kvmppc_get_msr(vcpu);
259259 __entry->srr1 = vcpu->arch.shadow_srr1;
260260 __entry->last_inst = vcpu->arch.last_inst;
261261 ),
arch/powerpc/mm/slb.c+1−1
@@ -97,7 +97,7 @@ static inline void create_shadowed_slbe(unsigned long ea, int ssize, · 96 unmodified lines
9797 static void __slb_flush_and_rebolt(void)
9898 {
9999 /* If you change this make sure you change SLB_NUM_BOLTED
100− * appropriately too. */
100+ * and PR KVM appropriately too. */
101101 unsigned long linear_llp, vmalloc_llp, lflags, vflags;
102102 unsigned long ksp_esid_data, ksp_vsid_data;
103103
include/uapi/linux/kvm.h+1−0
@@ -757,6 +757,7 @@ struct kvm_ppc_smmu_info { · 756 unmodified lines
757757 #define KVM_CAP_IOEVENTFD_NO_LENGTH 100
758758 #define KVM_CAP_VM_ATTRIBUTES 101
759759 #define KVM_CAP_ARM_PSCI_0_2 102
760+#define KVM_CAP_PPC_FIXUP_HCALL 103
760761
761762 #ifdef KVM_CAP_IRQ_ROUTING
762763