1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#include <linux/kvm_host.h>
22#include <linux/kernel.h>
23#include <linux/err.h>
24#include <linux/slab.h>
25#include <linux/preempt.h>
26#include <linux/sched/signal.h>
27#include <linux/sched/stat.h>
28#include <linux/delay.h>
29#include <linux/export.h>
30#include <linux/fs.h>
31#include <linux/anon_inodes.h>
32#include <linux/cpu.h>
33#include <linux/cpumask.h>
34#include <linux/spinlock.h>
35#include <linux/page-flags.h>
36#include <linux/srcu.h>
37#include <linux/miscdevice.h>
38#include <linux/debugfs.h>
39#include <linux/gfp.h>
40#include <linux/vmalloc.h>
41#include <linux/highmem.h>
42#include <linux/hugetlb.h>
43#include <linux/kvm_irqfd.h>
44#include <linux/irqbypass.h>
45#include <linux/module.h>
46#include <linux/compiler.h>
47#include <linux/of.h>
48
49#include <asm/reg.h>
50#include <asm/ppc-opcode.h>
51#include <asm/asm-prototypes.h>
52#include <asm/debug.h>
53#include <asm/disassemble.h>
54#include <asm/cputable.h>
55#include <asm/cacheflush.h>
56#include <asm/tlbflush.h>
57#include <linux/uaccess.h>
58#include <asm/io.h>
59#include <asm/kvm_ppc.h>
60#include <asm/kvm_book3s.h>
61#include <asm/mmu_context.h>
62#include <asm/lppaca.h>
63#include <asm/processor.h>
64#include <asm/cputhreads.h>
65#include <asm/page.h>
66#include <asm/hvcall.h>
67#include <asm/switch_to.h>
68#include <asm/smp.h>
69#include <asm/dbell.h>
70#include <asm/hmi.h>
71#include <asm/pnv-pci.h>
72#include <asm/mmu.h>
73#include <asm/opal.h>
74#include <asm/xics.h>
75#include <asm/xive.h>
76
77#include "book3s.h"
78
79#define CREATE_TRACE_POINTS
80#include "trace_hv.h"
81
82
83
84
85
86
87#define RESUME_PAGE_FAULT (RESUME_GUEST | RESUME_FLAG_ARCH1)
88
89#define RESUME_PASSTHROUGH (RESUME_GUEST | RESUME_FLAG_ARCH2)
90
91
92#define TB_NIL (~(u64)0)
93
94static DECLARE_BITMAP(default_enabled_hcalls, MAX_HCALL_OPCODE/4 + 1);
95
96static int dynamic_mt_modes = 6;
97module_param(dynamic_mt_modes, int, 0644);
98MODULE_PARM_DESC(dynamic_mt_modes, "Set of allowed dynamic micro-threading modes: 0 (= none), 2, 4, or 6 (= 2 or 4)");
99static int target_smt_mode;
100module_param(target_smt_mode, int, 0644);
101MODULE_PARM_DESC(target_smt_mode, "Target threads per core (0 = max)");
102
103static bool indep_threads_mode = true;
104module_param(indep_threads_mode, bool, S_IRUGO | S_IWUSR);
105MODULE_PARM_DESC(indep_threads_mode, "Independent-threads mode (only on POWER9)");
106
107#ifdef CONFIG_KVM_XICS
108static struct kernel_param_ops module_param_ops = {
109 .set = param_set_int,
110 .get = param_get_int,
111};
112
113module_param_cb(kvm_irq_bypass, &module_param_ops, &kvm_irq_bypass, 0644);
114MODULE_PARM_DESC(kvm_irq_bypass, "Bypass passthrough interrupt optimization");
115
116module_param_cb(h_ipi_redirect, &module_param_ops, &h_ipi_redirect, 0644);
117MODULE_PARM_DESC(h_ipi_redirect, "Redirect H_IPI wakeup to a free host core");
118#endif
119
120
121static bool no_mixing_hpt_and_radix;
122
123static void kvmppc_end_cede(struct kvm_vcpu *vcpu);
124static int kvmppc_hv_setup_htab_rma(struct kvm_vcpu *vcpu);
125
126
127
128
129
130
131#define RWMR_RPA_P8_1THREAD 0x164520C62609AECA
132#define RWMR_RPA_P8_2THREAD 0x7FFF2908450D8DA9
133#define RWMR_RPA_P8_3THREAD 0x164520C62609AECA
134#define RWMR_RPA_P8_4THREAD 0x199A421245058DA9
135#define RWMR_RPA_P8_5THREAD 0x164520C62609AECA
136#define RWMR_RPA_P8_6THREAD 0x164520C62609AECA
137#define RWMR_RPA_P8_7THREAD 0x164520C62609AECA
138#define RWMR_RPA_P8_8THREAD 0x164520C62609AECA
139
140static unsigned long p8_rwmr_values[MAX_SMT_THREADS + 1] = {
141 RWMR_RPA_P8_1THREAD,
142 RWMR_RPA_P8_1THREAD,
143 RWMR_RPA_P8_2THREAD,
144 RWMR_RPA_P8_3THREAD,
145 RWMR_RPA_P8_4THREAD,
146 RWMR_RPA_P8_5THREAD,
147 RWMR_RPA_P8_6THREAD,
148 RWMR_RPA_P8_7THREAD,
149 RWMR_RPA_P8_8THREAD,
150};
151
152static inline struct kvm_vcpu *next_runnable_thread(struct kvmppc_vcore *vc,
153 int *ip)
154{
155 int i = *ip;
156 struct kvm_vcpu *vcpu;
157
158 while (++i < MAX_SMT_THREADS) {
159 vcpu = READ_ONCE(vc->runnable_threads[i]);
160 if (vcpu) {
161 *ip = i;
162 return vcpu;
163 }
164 }
165 return NULL;
166}
167
168
169#define for_each_runnable_thread(i, vcpu, vc) \
170 for (i = -1; (vcpu = next_runnable_thread(vc, &i)); )
171
172static bool kvmppc_ipi_thread(int cpu)
173{
174 unsigned long msg = PPC_DBELL_TYPE(PPC_DBELL_SERVER);
175
176
177 if (cpu_has_feature(CPU_FTR_ARCH_300)) {
178 msg |= get_hard_smp_processor_id(cpu);
179 smp_mb();
180 __asm__ __volatile__ (PPC_MSGSND(%0) : : "r" (msg));
181 return true;
182 }
183
184
185 if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
186 preempt_disable();
187 if (cpu_first_thread_sibling(cpu) ==
188 cpu_first_thread_sibling(smp_processor_id())) {
189 msg |= cpu_thread_in_core(cpu);
190 smp_mb();
191 __asm__ __volatile__ (PPC_MSGSND(%0) : : "r" (msg));
192 preempt_enable();
193 return true;
194 }
195 preempt_enable();
196 }
197
198#if defined(CONFIG_PPC_ICP_NATIVE) && defined(CONFIG_SMP)
199 if (cpu >= 0 && cpu < nr_cpu_ids) {
200 if (paca_ptrs[cpu]->kvm_hstate.xics_phys) {
201 xics_wake_cpu(cpu);
202 return true;
203 }
204 opal_int_set_mfrr(get_hard_smp_processor_id(cpu), IPI_PRIORITY);
205 return true;
206 }
207#endif
208
209 return false;
210}
211
212static void kvmppc_fast_vcpu_kick_hv(struct kvm_vcpu *vcpu)
213{
214 int cpu;
215 struct swait_queue_head *wqp;
216
217 wqp = kvm_arch_vcpu_wq(vcpu);
218 if (swq_has_sleeper(wqp)) {
219 swake_up(wqp);
220 ++vcpu->stat.halt_wakeup;
221 }
222
223 cpu = READ_ONCE(vcpu->arch.thread_cpu);
224 if (cpu >= 0 && kvmppc_ipi_thread(cpu))
225 return;
226
227
228 cpu = vcpu->cpu;
229 if (cpu >= 0 && cpu < nr_cpu_ids && cpu_online(cpu))
230 smp_send_reschedule(cpu);
231}
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266static void kvmppc_core_start_stolen(struct kvmppc_vcore *vc)
267{
268 unsigned long flags;
269
270 spin_lock_irqsave(&vc->stoltb_lock, flags);
271 vc->preempt_tb = mftb();
272 spin_unlock_irqrestore(&vc->stoltb_lock, flags);
273}
274
275static void kvmppc_core_end_stolen(struct kvmppc_vcore *vc)
276{
277 unsigned long flags;
278
279 spin_lock_irqsave(&vc->stoltb_lock, flags);
280 if (vc->preempt_tb != TB_NIL) {
281 vc->stolen_tb += mftb() - vc->preempt_tb;
282 vc->preempt_tb = TB_NIL;
283 }
284 spin_unlock_irqrestore(&vc->stoltb_lock, flags);
285}
286
287static void kvmppc_core_vcpu_load_hv(struct kvm_vcpu *vcpu, int cpu)
288{
289 struct kvmppc_vcore *vc = vcpu->arch.vcore;
290 unsigned long flags;
291
292
293
294
295
296
297
298 if (vc->runner == vcpu && vc->vcore_state >= VCORE_SLEEPING)
299 kvmppc_core_end_stolen(vc);
300
301 spin_lock_irqsave(&vcpu->arch.tbacct_lock, flags);
302 if (vcpu->arch.state == KVMPPC_VCPU_BUSY_IN_HOST &&
303 vcpu->arch.busy_preempt != TB_NIL) {
304 vcpu->arch.busy_stolen += mftb() - vcpu->arch.busy_preempt;
305 vcpu->arch.busy_preempt = TB_NIL;
306 }
307 spin_unlock_irqrestore(&vcpu->arch.tbacct_lock, flags);
308}
309
310static void kvmppc_core_vcpu_put_hv(struct kvm_vcpu *vcpu)
311{
312 struct kvmppc_vcore *vc = vcpu->arch.vcore;
313 unsigned long flags;
314
315 if (vc->runner == vcpu && vc->vcore_state >= VCORE_SLEEPING)
316 kvmppc_core_start_stolen(vc);
317
318 spin_lock_irqsave(&vcpu->arch.tbacct_lock, flags);
319 if (vcpu->arch.state == KVMPPC_VCPU_BUSY_IN_HOST)
320 vcpu->arch.busy_preempt = mftb();
321 spin_unlock_irqrestore(&vcpu->arch.tbacct_lock, flags);
322}
323
324static void kvmppc_set_msr_hv(struct kvm_vcpu *vcpu, u64 msr)
325{
326
327
328
329
330 if ((msr & MSR_TS_MASK) == MSR_TS_MASK)
331 msr &= ~MSR_TS_MASK;
332 vcpu->arch.shregs.msr = msr;
333 kvmppc_end_cede(vcpu);
334}
335
336static void kvmppc_set_pvr_hv(struct kvm_vcpu *vcpu, u32 pvr)
337{
338 vcpu->arch.pvr = pvr;
339}
340
341
342#define PCR_ARCH_300 (PCR_ARCH_207 << 1)
343
344static int kvmppc_set_arch_compat(struct kvm_vcpu *vcpu, u32 arch_compat)
345{
346 unsigned long host_pcr_bit = 0, guest_pcr_bit = 0;
347 struct kvmppc_vcore *vc = vcpu->arch.vcore;
348
349
350 if (cpu_has_feature(CPU_FTR_ARCH_300))
351 host_pcr_bit = PCR_ARCH_300;
352 else if (cpu_has_feature(CPU_FTR_ARCH_207S))
353 host_pcr_bit = PCR_ARCH_207;
354 else if (cpu_has_feature(CPU_FTR_ARCH_206))
355 host_pcr_bit = PCR_ARCH_206;
356 else
357 host_pcr_bit = PCR_ARCH_205;
358
359
360 guest_pcr_bit = host_pcr_bit;
361 if (arch_compat) {
362 switch (arch_compat) {
363 case PVR_ARCH_205:
364 guest_pcr_bit = PCR_ARCH_205;
365 break;
366 case PVR_ARCH_206:
367 case PVR_ARCH_206p:
368 guest_pcr_bit = PCR_ARCH_206;
369 break;
370 case PVR_ARCH_207:
371 guest_pcr_bit = PCR_ARCH_207;
372 break;
373 case PVR_ARCH_300:
374 guest_pcr_bit = PCR_ARCH_300;
375 break;
376 default:
377 return -EINVAL;
378 }
379 }
380
381
382 if (guest_pcr_bit > host_pcr_bit)
383 return -EINVAL;
384
385 spin_lock(&vc->lock);
386 vc->arch_compat = arch_compat;
387
388 vc->pcr = host_pcr_bit - guest_pcr_bit;
389 spin_unlock(&vc->lock);
390
391 return 0;
392}
393
394static void kvmppc_dump_regs(struct kvm_vcpu *vcpu)
395{
396 int r;
397
398 pr_err("vcpu %p (%d):\n", vcpu, vcpu->vcpu_id);
399 pr_err("pc = %.16lx msr = %.16llx trap = %x\n",
400 vcpu->arch.regs.nip, vcpu->arch.shregs.msr, vcpu->arch.trap);
401 for (r = 0; r < 16; ++r)
402 pr_err("r%2d = %.16lx r%d = %.16lx\n",
403 r, kvmppc_get_gpr(vcpu, r),
404 r+16, kvmppc_get_gpr(vcpu, r+16));
405 pr_err("ctr = %.16lx lr = %.16lx\n",
406 vcpu->arch.regs.ctr, vcpu->arch.regs.link);
407 pr_err("srr0 = %.16llx srr1 = %.16llx\n",
408 vcpu->arch.shregs.srr0, vcpu->arch.shregs.srr1);
409 pr_err("sprg0 = %.16llx sprg1 = %.16llx\n",
410 vcpu->arch.shregs.sprg0, vcpu->arch.shregs.sprg1);
411 pr_err("sprg2 = %.16llx sprg3 = %.16llx\n",
412 vcpu->arch.shregs.sprg2, vcpu->arch.shregs.sprg3);
413 pr_err("cr = %.8x xer = %.16lx dsisr = %.8x\n",
414 vcpu->arch.cr, vcpu->arch.regs.xer, vcpu->arch.shregs.dsisr);
415 pr_err("dar = %.16llx\n", vcpu->arch.shregs.dar);
416 pr_err("fault dar = %.16lx dsisr = %.8x\n",
417 vcpu->arch.fault_dar, vcpu->arch.fault_dsisr);
418 pr_err("SLB (%d entries):\n", vcpu->arch.slb_max);
419 for (r = 0; r < vcpu->arch.slb_max; ++r)
420 pr_err(" ESID = %.16llx VSID = %.16llx\n",
421 vcpu->arch.slb[r].orige, vcpu->arch.slb[r].origv);
422 pr_err("lpcr = %.16lx sdr1 = %.16lx last_inst = %.8x\n",
423 vcpu->arch.vcore->lpcr, vcpu->kvm->arch.sdr1,
424 vcpu->arch.last_inst);
425}
426
427static struct kvm_vcpu *kvmppc_find_vcpu(struct kvm *kvm, int id)
428{
429 struct kvm_vcpu *ret;
430
431 mutex_lock(&kvm->lock);
432 ret = kvm_get_vcpu_by_id(kvm, id);
433 mutex_unlock(&kvm->lock);
434 return ret;
435}
436
437static void init_vpa(struct kvm_vcpu *vcpu, struct lppaca *vpa)
438{
439 vpa->__old_status |= LPPACA_OLD_SHARED_PROC;
440 vpa->yield_count = cpu_to_be32(1);
441}
442
443static int set_vpa(struct kvm_vcpu *vcpu, struct kvmppc_vpa *v,
444 unsigned long addr, unsigned long len)
445{
446
447 if (addr & (L1_CACHE_BYTES - 1))
448 return -EINVAL;
449 spin_lock(&vcpu->arch.vpa_update_lock);
450 if (v->next_gpa != addr || v->len != len) {
451 v->next_gpa = addr;
452 v->len = addr ? len : 0;
453 v->update_pending = 1;
454 }
455 spin_unlock(&vcpu->arch.vpa_update_lock);
456 return 0;
457}
458
459
460struct reg_vpa {
461 u32 dummy;
462 union {
463 __be16 hword;
464 __be32 word;
465 } length;
466};
467
468static int vpa_is_registered(struct kvmppc_vpa *vpap)
469{
470 if (vpap->update_pending)
471 return vpap->next_gpa != 0;
472 return vpap->pinned_addr != NULL;
473}
474
475static unsigned long do_h_register_vpa(struct kvm_vcpu *vcpu,
476 unsigned long flags,
477 unsigned long vcpuid, unsigned long vpa)
478{
479 struct kvm *kvm = vcpu->kvm;
480 unsigned long len, nb;
481 void *va;
482 struct kvm_vcpu *tvcpu;
483 int err;
484 int subfunc;
485 struct kvmppc_vpa *vpap;
486
487 tvcpu = kvmppc_find_vcpu(kvm, vcpuid);
488 if (!tvcpu)
489 return H_PARAMETER;
490
491 subfunc = (flags >> H_VPA_FUNC_SHIFT) & H_VPA_FUNC_MASK;
492 if (subfunc == H_VPA_REG_VPA || subfunc == H_VPA_REG_DTL ||
493 subfunc == H_VPA_REG_SLB) {
494
495 if ((vpa & (L1_CACHE_BYTES - 1)) || !vpa)
496 return H_PARAMETER;
497
498
499 va = kvmppc_pin_guest_page(kvm, vpa, &nb);
500 if (va == NULL)
501 return H_PARAMETER;
502 if (subfunc == H_VPA_REG_VPA)
503 len = be16_to_cpu(((struct reg_vpa *)va)->length.hword);
504 else
505 len = be32_to_cpu(((struct reg_vpa *)va)->length.word);
506 kvmppc_unpin_guest_page(kvm, va, vpa, false);
507
508
509 if (len > nb || len < sizeof(struct reg_vpa))
510 return H_PARAMETER;
511 } else {
512 vpa = 0;
513 len = 0;
514 }
515
516 err = H_PARAMETER;
517 vpap = NULL;
518 spin_lock(&tvcpu->arch.vpa_update_lock);
519
520 switch (subfunc) {
521 case H_VPA_REG_VPA:
522
523
524
525
526
527
528 BUILD_BUG_ON(sizeof(struct lppaca) != 640);
529 if (len < sizeof(struct lppaca))
530 break;
531 vpap = &tvcpu->arch.vpa;
532 err = 0;
533 break;
534
535 case H_VPA_REG_DTL:
536 if (len < sizeof(struct dtl_entry))
537 break;
538 len -= len % sizeof(struct dtl_entry);
539
540
541 err = H_RESOURCE;
542 if (!vpa_is_registered(&tvcpu->arch.vpa))
543 break;
544
545 vpap = &tvcpu->arch.dtl;
546 err = 0;
547 break;
548
549 case H_VPA_REG_SLB:
550
551 err = H_RESOURCE;
552 if (!vpa_is_registered(&tvcpu->arch.vpa))
553 break;
554
555 vpap = &tvcpu->arch.slb_shadow;
556 err = 0;
557 break;
558
559 case H_VPA_DEREG_VPA:
560
561 err = H_RESOURCE;
562 if (vpa_is_registered(&tvcpu->arch.dtl) ||
563 vpa_is_registered(&tvcpu->arch.slb_shadow))
564 break;
565
566 vpap = &tvcpu->arch.vpa;
567 err = 0;
568 break;
569
570 case H_VPA_DEREG_DTL:
571 vpap = &tvcpu->arch.dtl;
572 err = 0;
573 break;
574
575 case H_VPA_DEREG_SLB:
576 vpap = &tvcpu->arch.slb_shadow;
577 err = 0;
578 break;
579 }
580
581 if (vpap) {
582 vpap->next_gpa = vpa;
583 vpap->len = len;
584 vpap->update_pending = 1;
585 }
586
587 spin_unlock(&tvcpu->arch.vpa_update_lock);
588
589 return err;
590}
591
592static void kvmppc_update_vpa(struct kvm_vcpu *vcpu, struct kvmppc_vpa *vpap)
593{
594 struct kvm *kvm = vcpu->kvm;
595 void *va;
596 unsigned long nb;
597 unsigned long gpa;
598
599
600
601
602
603
604
605
606
607 for (;;) {
608 gpa = vpap->next_gpa;
609 spin_unlock(&vcpu->arch.vpa_update_lock);
610 va = NULL;
611 nb = 0;
612 if (gpa)
613 va = kvmppc_pin_guest_page(kvm, gpa, &nb);
614 spin_lock(&vcpu->arch.vpa_update_lock);
615 if (gpa == vpap->next_gpa)
616 break;
617
618 if (va)
619 kvmppc_unpin_guest_page(kvm, va, gpa, false);
620 }
621
622 vpap->update_pending = 0;
623 if (va && nb < vpap->len) {
624
625
626
627
628
629 kvmppc_unpin_guest_page(kvm, va, gpa, false);
630 va = NULL;
631 }
632 if (vpap->pinned_addr)
633 kvmppc_unpin_guest_page(kvm, vpap->pinned_addr, vpap->gpa,
634 vpap->dirty);
635 vpap->gpa = gpa;
636 vpap->pinned_addr = va;
637 vpap->dirty = false;
638 if (va)
639 vpap->pinned_end = va + vpap->len;
640}
641
642static void kvmppc_update_vpas(struct kvm_vcpu *vcpu)
643{
644 if (!(vcpu->arch.vpa.update_pending ||
645 vcpu->arch.slb_shadow.update_pending ||
646 vcpu->arch.dtl.update_pending))
647 return;
648
649 spin_lock(&vcpu->arch.vpa_update_lock);
650 if (vcpu->arch.vpa.update_pending) {
651 kvmppc_update_vpa(vcpu, &vcpu->arch.vpa);
652 if (vcpu->arch.vpa.pinned_addr)
653 init_vpa(vcpu, vcpu->arch.vpa.pinned_addr);
654 }
655 if (vcpu->arch.dtl.update_pending) {
656 kvmppc_update_vpa(vcpu, &vcpu->arch.dtl);
657 vcpu->arch.dtl_ptr = vcpu->arch.dtl.pinned_addr;
658 vcpu->arch.dtl_index = 0;
659 }
660 if (vcpu->arch.slb_shadow.update_pending)
661 kvmppc_update_vpa(vcpu, &vcpu->arch.slb_shadow);
662 spin_unlock(&vcpu->arch.vpa_update_lock);
663}
664
665
666
667
668
669static u64 vcore_stolen_time(struct kvmppc_vcore *vc, u64 now)
670{
671 u64 p;
672 unsigned long flags;
673
674 spin_lock_irqsave(&vc->stoltb_lock, flags);
675 p = vc->stolen_tb;
676 if (vc->vcore_state != VCORE_INACTIVE &&
677 vc->preempt_tb != TB_NIL)
678 p += now - vc->preempt_tb;
679 spin_unlock_irqrestore(&vc->stoltb_lock, flags);
680 return p;
681}
682
683static void kvmppc_create_dtl_entry(struct kvm_vcpu *vcpu,
684 struct kvmppc_vcore *vc)
685{
686 struct dtl_entry *dt;
687 struct lppaca *vpa;
688 unsigned long stolen;
689 unsigned long core_stolen;
690 u64 now;
691 unsigned long flags;
692
693 dt = vcpu->arch.dtl_ptr;
694 vpa = vcpu->arch.vpa.pinned_addr;
695 now = mftb();
696 core_stolen = vcore_stolen_time(vc, now);
697 stolen = core_stolen - vcpu->arch.stolen_logged;
698 vcpu->arch.stolen_logged = core_stolen;
699 spin_lock_irqsave(&vcpu->arch.tbacct_lock, flags);
700 stolen += vcpu->arch.busy_stolen;
701 vcpu->arch.busy_stolen = 0;
702 spin_unlock_irqrestore(&vcpu->arch.tbacct_lock, flags);
703 if (!dt || !vpa)
704 return;
705 memset(dt, 0, sizeof(struct dtl_entry));
706 dt->dispatch_reason = 7;
707 dt->processor_id = cpu_to_be16(vc->pcpu + vcpu->arch.ptid);
708 dt->timebase = cpu_to_be64(now + vc->tb_offset);
709 dt->enqueue_to_dispatch_time = cpu_to_be32(stolen);
710 dt->srr0 = cpu_to_be64(kvmppc_get_pc(vcpu));
711 dt->srr1 = cpu_to_be64(vcpu->arch.shregs.msr);
712 ++dt;
713 if (dt == vcpu->arch.dtl.pinned_end)
714 dt = vcpu->arch.dtl.pinned_addr;
715 vcpu->arch.dtl_ptr = dt;
716
717 smp_wmb();
718 vpa->dtl_idx = cpu_to_be64(++vcpu->arch.dtl_index);
719 vcpu->arch.dtl.dirty = true;
720}
721
722
723static bool kvmppc_doorbell_pending(struct kvm_vcpu *vcpu)
724{
725 int thr;
726 struct kvmppc_vcore *vc;
727
728 if (vcpu->arch.doorbell_request)
729 return true;
730
731
732
733
734
735
736 smp_rmb();
737 vc = vcpu->arch.vcore;
738 thr = vcpu->vcpu_id - vc->first_vcpuid;
739 return !!(vc->dpdes & (1 << thr));
740}
741
742static bool kvmppc_power8_compatible(struct kvm_vcpu *vcpu)
743{
744 if (vcpu->arch.vcore->arch_compat >= PVR_ARCH_207)
745 return true;
746 if ((!vcpu->arch.vcore->arch_compat) &&
747 cpu_has_feature(CPU_FTR_ARCH_207S))
748 return true;
749 return false;
750}
751
752static int kvmppc_h_set_mode(struct kvm_vcpu *vcpu, unsigned long mflags,
753 unsigned long resource, unsigned long value1,
754 unsigned long value2)
755{
756 switch (resource) {
757 case H_SET_MODE_RESOURCE_SET_CIABR:
758 if (!kvmppc_power8_compatible(vcpu))
759 return H_P2;
760 if (value2)
761 return H_P4;
762 if (mflags)
763 return H_UNSUPPORTED_FLAG_START;
764
765 if ((value1 & CIABR_PRIV) == CIABR_PRIV_HYPER)
766 return H_P3;
767 vcpu->arch.ciabr = value1;
768 return H_SUCCESS;
769 case H_SET_MODE_RESOURCE_SET_DAWR:
770 if (!kvmppc_power8_compatible(vcpu))
771 return H_P2;
772 if (!ppc_breakpoint_available())
773 return H_P2;
774 if (mflags)
775 return H_UNSUPPORTED_FLAG_START;
776 if (value2 & DABRX_HYP)
777 return H_P4;
778 vcpu->arch.dawr = value1;
779 vcpu->arch.dawrx = value2;
780 return H_SUCCESS;
781 default:
782 return H_TOO_HARD;
783 }
784}
785
786static int kvm_arch_vcpu_yield_to(struct kvm_vcpu *target)
787{
788 struct kvmppc_vcore *vcore = target->arch.vcore;
789
790
791
792
793
794
795
796
797
798 spin_lock(&vcore->lock);
799 if (target->arch.state == KVMPPC_VCPU_RUNNABLE &&
800 vcore->vcore_state != VCORE_INACTIVE &&
801 vcore->runner)
802 target = vcore->runner;
803 spin_unlock(&vcore->lock);
804
805 return kvm_vcpu_yield_to(target);
806}
807
808static int kvmppc_get_yield_count(struct kvm_vcpu *vcpu)
809{
810 int yield_count = 0;
811 struct lppaca *lppaca;
812
813 spin_lock(&vcpu->arch.vpa_update_lock);
814 lppaca = (struct lppaca *)vcpu->arch.vpa.pinned_addr;
815 if (lppaca)
816 yield_count = be32_to_cpu(lppaca->yield_count);
817 spin_unlock(&vcpu->arch.vpa_update_lock);
818 return yield_count;
819}
820
821int kvmppc_pseries_do_hcall(struct kvm_vcpu *vcpu)
822{
823 unsigned long req = kvmppc_get_gpr(vcpu, 3);
824 unsigned long target, ret = H_SUCCESS;
825 int yield_count;
826 struct kvm_vcpu *tvcpu;
827 int idx, rc;
828
829 if (req <= MAX_HCALL_OPCODE &&
830 !test_bit(req/4, vcpu->kvm->arch.enabled_hcalls))
831 return RESUME_HOST;
832
833 switch (req) {
834 case H_CEDE:
835 break;
836 case H_PROD:
837 target = kvmppc_get_gpr(vcpu, 4);
838 tvcpu = kvmppc_find_vcpu(vcpu->kvm, target);
839 if (!tvcpu) {
840 ret = H_PARAMETER;
841 break;
842 }
843 tvcpu->arch.prodded = 1;
844 smp_mb();
845 if (tvcpu->arch.ceded)
846 kvmppc_fast_vcpu_kick_hv(tvcpu);
847 break;
848 case H_CONFER:
849 target = kvmppc_get_gpr(vcpu, 4);
850 if (target == -1)
851 break;
852 tvcpu = kvmppc_find_vcpu(vcpu->kvm, target);
853 if (!tvcpu) {
854 ret = H_PARAMETER;
855 break;
856 }
857 yield_count = kvmppc_get_gpr(vcpu, 5);
858 if (kvmppc_get_yield_count(tvcpu) != yield_count)
859 break;
860 kvm_arch_vcpu_yield_to(tvcpu);
861 break;
862 case H_REGISTER_VPA:
863 ret = do_h_register_vpa(vcpu, kvmppc_get_gpr(vcpu, 4),
864 kvmppc_get_gpr(vcpu, 5),
865 kvmppc_get_gpr(vcpu, 6));
866 break;
867 case H_RTAS:
868 if (list_empty(&vcpu->kvm->arch.rtas_tokens))
869 return RESUME_HOST;
870
871 idx = srcu_read_lock(&vcpu->kvm->srcu);
872 rc = kvmppc_rtas_hcall(vcpu);
873 srcu_read_unlock(&vcpu->kvm->srcu, idx);
874
875 if (rc == -ENOENT)
876 return RESUME_HOST;
877 else if (rc == 0)
878 break;
879
880
881 return rc;
882 case H_LOGICAL_CI_LOAD:
883 ret = kvmppc_h_logical_ci_load(vcpu);
884 if (ret == H_TOO_HARD)
885 return RESUME_HOST;
886 break;
887 case H_LOGICAL_CI_STORE:
888 ret = kvmppc_h_logical_ci_store(vcpu);
889 if (ret == H_TOO_HARD)
890 return RESUME_HOST;
891 break;
892 case H_SET_MODE:
893 ret = kvmppc_h_set_mode(vcpu, kvmppc_get_gpr(vcpu, 4),
894 kvmppc_get_gpr(vcpu, 5),
895 kvmppc_get_gpr(vcpu, 6),
896 kvmppc_get_gpr(vcpu, 7));
897 if (ret == H_TOO_HARD)
898 return RESUME_HOST;
899 break;
900 case H_XIRR:
901 case H_CPPR:
902 case H_EOI:
903 case H_IPI:
904 case H_IPOLL:
905 case H_XIRR_X:
906 if (kvmppc_xics_enabled(vcpu)) {
907 if (xive_enabled()) {
908 ret = H_NOT_AVAILABLE;
909 return RESUME_GUEST;
910 }
911 ret = kvmppc_xics_hcall(vcpu, req);
912 break;
913 }
914 return RESUME_HOST;
915 case H_PUT_TCE:
916 ret = kvmppc_h_put_tce(vcpu, kvmppc_get_gpr(vcpu, 4),
917 kvmppc_get_gpr(vcpu, 5),
918 kvmppc_get_gpr(vcpu, 6));
919 if (ret == H_TOO_HARD)
920 return RESUME_HOST;
921 break;
922 case H_PUT_TCE_INDIRECT:
923 ret = kvmppc_h_put_tce_indirect(vcpu, kvmppc_get_gpr(vcpu, 4),
924 kvmppc_get_gpr(vcpu, 5),
925 kvmppc_get_gpr(vcpu, 6),
926 kvmppc_get_gpr(vcpu, 7));
927 if (ret == H_TOO_HARD)
928 return RESUME_HOST;
929 break;
930 case H_STUFF_TCE:
931 ret = kvmppc_h_stuff_tce(vcpu, kvmppc_get_gpr(vcpu, 4),
932 kvmppc_get_gpr(vcpu, 5),
933 kvmppc_get_gpr(vcpu, 6),
934 kvmppc_get_gpr(vcpu, 7));
935 if (ret == H_TOO_HARD)
936 return RESUME_HOST;
937 break;
938 default:
939 return RESUME_HOST;
940 }
941 kvmppc_set_gpr(vcpu, 3, ret);
942 vcpu->arch.hcall_needed = 0;
943 return RESUME_GUEST;
944}
945
946static int kvmppc_hcall_impl_hv(unsigned long cmd)
947{
948 switch (cmd) {
949 case H_CEDE:
950 case H_PROD:
951 case H_CONFER:
952 case H_REGISTER_VPA:
953 case H_SET_MODE:
954 case H_LOGICAL_CI_LOAD:
955 case H_LOGICAL_CI_STORE:
956#ifdef CONFIG_KVM_XICS
957 case H_XIRR:
958 case H_CPPR:
959 case H_EOI:
960 case H_IPI:
961 case H_IPOLL:
962 case H_XIRR_X:
963#endif
964 return 1;
965 }
966
967
968 return kvmppc_hcall_impl_hv_realmode(cmd);
969}
970
971static int kvmppc_emulate_debug_inst(struct kvm_run *run,
972 struct kvm_vcpu *vcpu)
973{
974 u32 last_inst;
975
976 if (kvmppc_get_last_inst(vcpu, INST_GENERIC, &last_inst) !=
977 EMULATE_DONE) {
978
979
980
981
982 return RESUME_GUEST;
983 }
984
985 if (last_inst == KVMPPC_INST_SW_BREAKPOINT) {
986 run->exit_reason = KVM_EXIT_DEBUG;
987 run->debug.arch.address = kvmppc_get_pc(vcpu);
988 return RESUME_HOST;
989 } else {
990 kvmppc_core_queue_program(vcpu, SRR1_PROGILL);
991 return RESUME_GUEST;
992 }
993}
994
995static void do_nothing(void *x)
996{
997}
998
999static unsigned long kvmppc_read_dpdes(struct kvm_vcpu *vcpu)
1000{
1001 int thr, cpu, pcpu, nthreads;
1002 struct kvm_vcpu *v;
1003 unsigned long dpdes;
1004
1005 nthreads = vcpu->kvm->arch.emul_smt_mode;
1006 dpdes = 0;
1007 cpu = vcpu->vcpu_id & ~(nthreads - 1);
1008 for (thr = 0; thr < nthreads; ++thr, ++cpu) {
1009 v = kvmppc_find_vcpu(vcpu->kvm, cpu);
1010 if (!v)
1011 continue;
1012
1013
1014
1015
1016
1017 pcpu = READ_ONCE(v->cpu);
1018 if (pcpu >= 0)
1019 smp_call_function_single(pcpu, do_nothing, NULL, 1);
1020 if (kvmppc_doorbell_pending(v))
1021 dpdes |= 1 << thr;
1022 }
1023 return dpdes;
1024}
1025
1026
1027
1028
1029
1030
1031
1032static int kvmppc_emulate_doorbell_instr(struct kvm_vcpu *vcpu)
1033{
1034 u32 inst, rb, thr;
1035 unsigned long arg;
1036 struct kvm *kvm = vcpu->kvm;
1037 struct kvm_vcpu *tvcpu;
1038
1039 if (kvmppc_get_last_inst(vcpu, INST_GENERIC, &inst) != EMULATE_DONE)
1040 return RESUME_GUEST;
1041 if (get_op(inst) != 31)
1042 return EMULATE_FAIL;
1043 rb = get_rb(inst);
1044 thr = vcpu->vcpu_id & (kvm->arch.emul_smt_mode - 1);
1045 switch (get_xop(inst)) {
1046 case OP_31_XOP_MSGSNDP:
1047 arg = kvmppc_get_gpr(vcpu, rb);
1048 if (((arg >> 27) & 0xf) != PPC_DBELL_SERVER)
1049 break;
1050 arg &= 0x3f;
1051 if (arg >= kvm->arch.emul_smt_mode)
1052 break;
1053 tvcpu = kvmppc_find_vcpu(kvm, vcpu->vcpu_id - thr + arg);
1054 if (!tvcpu)
1055 break;
1056 if (!tvcpu->arch.doorbell_request) {
1057 tvcpu->arch.doorbell_request = 1;
1058 kvmppc_fast_vcpu_kick_hv(tvcpu);
1059 }
1060 break;
1061 case OP_31_XOP_MSGCLRP:
1062 arg = kvmppc_get_gpr(vcpu, rb);
1063 if (((arg >> 27) & 0xf) != PPC_DBELL_SERVER)
1064 break;
1065 vcpu->arch.vcore->dpdes = 0;
1066 vcpu->arch.doorbell_request = 0;
1067 break;
1068 case OP_31_XOP_MFSPR:
1069 switch (get_sprn(inst)) {
1070 case SPRN_TIR:
1071 arg = thr;
1072 break;
1073 case SPRN_DPDES:
1074 arg = kvmppc_read_dpdes(vcpu);
1075 break;
1076 default:
1077 return EMULATE_FAIL;
1078 }
1079 kvmppc_set_gpr(vcpu, get_rt(inst), arg);
1080 break;
1081 default:
1082 return EMULATE_FAIL;
1083 }
1084 kvmppc_set_pc(vcpu, kvmppc_get_pc(vcpu) + 4);
1085 return RESUME_GUEST;
1086}
1087
1088
1089static int kvmppc_handle_exit_hv(struct kvm_run *run, struct kvm_vcpu *vcpu,
1090 struct task_struct *tsk)
1091{
1092 int r = RESUME_HOST;
1093
1094 vcpu->stat.sum_exits++;
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104 if (vcpu->arch.shregs.msr & MSR_HV) {
1105 printk(KERN_EMERG "KVM trap in HV mode!\n");
1106 printk(KERN_EMERG "trap=0x%x | pc=0x%lx | msr=0x%llx\n",
1107 vcpu->arch.trap, kvmppc_get_pc(vcpu),
1108 vcpu->arch.shregs.msr);
1109 kvmppc_dump_regs(vcpu);
1110 run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
1111 run->hw.hardware_exit_reason = vcpu->arch.trap;
1112 return RESUME_HOST;
1113 }
1114 run->exit_reason = KVM_EXIT_UNKNOWN;
1115 run->ready_for_interrupt_injection = 1;
1116 switch (vcpu->arch.trap) {
1117
1118 case BOOK3S_INTERRUPT_HV_DECREMENTER:
1119 vcpu->stat.dec_exits++;
1120 r = RESUME_GUEST;
1121 break;
1122 case BOOK3S_INTERRUPT_EXTERNAL:
1123 case BOOK3S_INTERRUPT_H_DOORBELL:
1124 case BOOK3S_INTERRUPT_H_VIRT:
1125 vcpu->stat.ext_intr_exits++;
1126 r = RESUME_GUEST;
1127 break;
1128
1129 case BOOK3S_INTERRUPT_HMI:
1130 case BOOK3S_INTERRUPT_PERFMON:
1131 case BOOK3S_INTERRUPT_SYSTEM_RESET:
1132 r = RESUME_GUEST;
1133 break;
1134 case BOOK3S_INTERRUPT_MACHINE_CHECK:
1135
1136 run->exit_reason = KVM_EXIT_NMI;
1137 run->hw.hardware_exit_reason = vcpu->arch.trap;
1138
1139 run->flags &= ~KVM_RUN_PPC_NMI_DISP_MASK;
1140
1141 if (vcpu->arch.mce_evt.disposition == MCE_DISPOSITION_RECOVERED)
1142 run->flags |= KVM_RUN_PPC_NMI_DISP_FULLY_RECOV;
1143 else
1144 run->flags |= KVM_RUN_PPC_NMI_DISP_NOT_RECOV;
1145
1146 r = RESUME_HOST;
1147
1148 machine_check_print_event_info(&vcpu->arch.mce_evt, false);
1149 break;
1150 case BOOK3S_INTERRUPT_PROGRAM:
1151 {
1152 ulong flags;
1153
1154
1155
1156
1157
1158
1159 flags = vcpu->arch.shregs.msr & 0x1f0000ull;
1160 kvmppc_core_queue_program(vcpu, flags);
1161 r = RESUME_GUEST;
1162 break;
1163 }
1164 case BOOK3S_INTERRUPT_SYSCALL:
1165 {
1166
1167 int i;
1168
1169
1170
1171
1172
1173 run->papr_hcall.nr = kvmppc_get_gpr(vcpu, 3);
1174 for (i = 0; i < 9; ++i)
1175 run->papr_hcall.args[i] = kvmppc_get_gpr(vcpu, 4 + i);
1176 run->exit_reason = KVM_EXIT_PAPR_HCALL;
1177 vcpu->arch.hcall_needed = 1;
1178 r = RESUME_HOST;
1179 break;
1180 }
1181
1182
1183
1184
1185
1186
1187
1188 case BOOK3S_INTERRUPT_H_DATA_STORAGE:
1189 r = RESUME_PAGE_FAULT;
1190 break;
1191 case BOOK3S_INTERRUPT_H_INST_STORAGE:
1192 vcpu->arch.fault_dar = kvmppc_get_pc(vcpu);
1193 vcpu->arch.fault_dsisr = 0;
1194 r = RESUME_PAGE_FAULT;
1195 break;
1196
1197
1198
1199
1200
1201
1202
1203 case BOOK3S_INTERRUPT_H_EMUL_ASSIST:
1204 if (vcpu->arch.emul_inst != KVM_INST_FETCH_FAILED)
1205 vcpu->arch.last_inst = kvmppc_need_byteswap(vcpu) ?
1206 swab32(vcpu->arch.emul_inst) :
1207 vcpu->arch.emul_inst;
1208 if (vcpu->guest_debug & KVM_GUESTDBG_USE_SW_BP) {
1209
1210 spin_unlock(&vcpu->arch.vcore->lock);
1211 r = kvmppc_emulate_debug_inst(run, vcpu);
1212 spin_lock(&vcpu->arch.vcore->lock);
1213 } else {
1214 kvmppc_core_queue_program(vcpu, SRR1_PROGILL);
1215 r = RESUME_GUEST;
1216 }
1217 break;
1218
1219
1220
1221
1222
1223
1224
1225 case BOOK3S_INTERRUPT_H_FAC_UNAVAIL:
1226 r = EMULATE_FAIL;
1227 if (((vcpu->arch.hfscr >> 56) == FSCR_MSGP_LG) &&
1228 cpu_has_feature(CPU_FTR_ARCH_300)) {
1229
1230 spin_unlock(&vcpu->arch.vcore->lock);
1231 r = kvmppc_emulate_doorbell_instr(vcpu);
1232 spin_lock(&vcpu->arch.vcore->lock);
1233 }
1234 if (r == EMULATE_FAIL) {
1235 kvmppc_core_queue_program(vcpu, SRR1_PROGILL);
1236 r = RESUME_GUEST;
1237 }
1238 break;
1239
1240#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1241 case BOOK3S_INTERRUPT_HV_SOFTPATCH:
1242
1243
1244
1245
1246
1247
1248 r = kvmhv_p9_tm_emulation(vcpu);
1249 break;
1250#endif
1251
1252 case BOOK3S_INTERRUPT_HV_RM_HARD:
1253 r = RESUME_PASSTHROUGH;
1254 break;
1255 default:
1256 kvmppc_dump_regs(vcpu);
1257 printk(KERN_EMERG "trap=0x%x | pc=0x%lx | msr=0x%llx\n",
1258 vcpu->arch.trap, kvmppc_get_pc(vcpu),
1259 vcpu->arch.shregs.msr);
1260 run->hw.hardware_exit_reason = vcpu->arch.trap;
1261 r = RESUME_HOST;
1262 break;
1263 }
1264
1265 return r;
1266}
1267
1268static int kvm_arch_vcpu_ioctl_get_sregs_hv(struct kvm_vcpu *vcpu,
1269 struct kvm_sregs *sregs)
1270{
1271 int i;
1272
1273 memset(sregs, 0, sizeof(struct kvm_sregs));
1274 sregs->pvr = vcpu->arch.pvr;
1275 for (i = 0; i < vcpu->arch.slb_max; i++) {
1276 sregs->u.s.ppc64.slb[i].slbe = vcpu->arch.slb[i].orige;
1277 sregs->u.s.ppc64.slb[i].slbv = vcpu->arch.slb[i].origv;
1278 }
1279
1280 return 0;
1281}
1282
1283static int kvm_arch_vcpu_ioctl_set_sregs_hv(struct kvm_vcpu *vcpu,
1284 struct kvm_sregs *sregs)
1285{
1286 int i, j;
1287
1288
1289 if (sregs->pvr != vcpu->arch.pvr)
1290 return -EINVAL;
1291
1292 j = 0;
1293 for (i = 0; i < vcpu->arch.slb_nr; i++) {
1294 if (sregs->u.s.ppc64.slb[i].slbe & SLB_ESID_V) {
1295 vcpu->arch.slb[j].orige = sregs->u.s.ppc64.slb[i].slbe;
1296 vcpu->arch.slb[j].origv = sregs->u.s.ppc64.slb[i].slbv;
1297 ++j;
1298 }
1299 }
1300 vcpu->arch.slb_max = j;
1301
1302 return 0;
1303}
1304
1305static void kvmppc_set_lpcr(struct kvm_vcpu *vcpu, u64 new_lpcr,
1306 bool preserve_top32)
1307{
1308 struct kvm *kvm = vcpu->kvm;
1309 struct kvmppc_vcore *vc = vcpu->arch.vcore;
1310 u64 mask;
1311
1312 mutex_lock(&kvm->lock);
1313 spin_lock(&vc->lock);
1314
1315
1316
1317
1318 if ((new_lpcr & LPCR_ILE) != (vc->lpcr & LPCR_ILE)) {
1319 struct kvm_vcpu *vcpu;
1320 int i;
1321
1322 kvm_for_each_vcpu(i, vcpu, kvm) {
1323 if (vcpu->arch.vcore != vc)
1324 continue;
1325 if (new_lpcr & LPCR_ILE)
1326 vcpu->arch.intr_msr |= MSR_LE;
1327 else
1328 vcpu->arch.intr_msr &= ~MSR_LE;
1329 }
1330 }
1331
1332
1333
1334
1335
1336
1337 mask = LPCR_DPFD | LPCR_ILE | LPCR_TC;
1338 if (cpu_has_feature(CPU_FTR_ARCH_207S))
1339 mask |= LPCR_AIL;
1340
1341
1342
1343
1344 if (cpu_has_feature(CPU_FTR_ARCH_300))
1345 mask |= LPCR_LD;
1346
1347
1348 if (preserve_top32)
1349 mask &= 0xFFFFFFFF;
1350 vc->lpcr = (vc->lpcr & ~mask) | (new_lpcr & mask);
1351 spin_unlock(&vc->lock);
1352 mutex_unlock(&kvm->lock);
1353}
1354
1355static int kvmppc_get_one_reg_hv(struct kvm_vcpu *vcpu, u64 id,
1356 union kvmppc_one_reg *val)
1357{
1358 int r = 0;
1359 long int i;
1360
1361 switch (id) {
1362 case KVM_REG_PPC_DEBUG_INST:
1363 *val = get_reg_val(id, KVMPPC_INST_SW_BREAKPOINT);
1364 break;
1365 case KVM_REG_PPC_HIOR:
1366 *val = get_reg_val(id, 0);
1367 break;
1368 case KVM_REG_PPC_DABR:
1369 *val = get_reg_val(id, vcpu->arch.dabr);
1370 break;
1371 case KVM_REG_PPC_DABRX:
1372 *val = get_reg_val(id, vcpu->arch.dabrx);
1373 break;
1374 case KVM_REG_PPC_DSCR:
1375 *val = get_reg_val(id, vcpu->arch.dscr);
1376 break;
1377 case KVM_REG_PPC_PURR:
1378 *val = get_reg_val(id, vcpu->arch.purr);
1379 break;
1380 case KVM_REG_PPC_SPURR:
1381 *val = get_reg_val(id, vcpu->arch.spurr);
1382 break;
1383 case KVM_REG_PPC_AMR:
1384 *val = get_reg_val(id, vcpu->arch.amr);
1385 break;
1386 case KVM_REG_PPC_UAMOR:
1387 *val = get_reg_val(id, vcpu->arch.uamor);
1388 break;
1389 case KVM_REG_PPC_MMCR0 ... KVM_REG_PPC_MMCRS:
1390 i = id - KVM_REG_PPC_MMCR0;
1391 *val = get_reg_val(id, vcpu->arch.mmcr[i]);
1392 break;
1393 case KVM_REG_PPC_PMC1 ... KVM_REG_PPC_PMC8:
1394 i = id - KVM_REG_PPC_PMC1;
1395 *val = get_reg_val(id, vcpu->arch.pmc[i]);
1396 break;
1397 case KVM_REG_PPC_SPMC1 ... KVM_REG_PPC_SPMC2:
1398 i = id - KVM_REG_PPC_SPMC1;
1399 *val = get_reg_val(id, vcpu->arch.spmc[i]);
1400 break;
1401 case KVM_REG_PPC_SIAR:
1402 *val = get_reg_val(id, vcpu->arch.siar);
1403 break;
1404 case KVM_REG_PPC_SDAR:
1405 *val = get_reg_val(id, vcpu->arch.sdar);
1406 break;
1407 case KVM_REG_PPC_SIER:
1408 *val = get_reg_val(id, vcpu->arch.sier);
1409 break;
1410 case KVM_REG_PPC_IAMR:
1411 *val = get_reg_val(id, vcpu->arch.iamr);
1412 break;
1413 case KVM_REG_PPC_PSPB:
1414 *val = get_reg_val(id, vcpu->arch.pspb);
1415 break;
1416 case KVM_REG_PPC_DPDES:
1417 *val = get_reg_val(id, vcpu->arch.vcore->dpdes);
1418 break;
1419 case KVM_REG_PPC_VTB:
1420 *val = get_reg_val(id, vcpu->arch.vcore->vtb);
1421 break;
1422 case KVM_REG_PPC_DAWR:
1423 *val = get_reg_val(id, vcpu->arch.dawr);
1424 break;
1425 case KVM_REG_PPC_DAWRX:
1426 *val = get_reg_val(id, vcpu->arch.dawrx);
1427 break;
1428 case KVM_REG_PPC_CIABR:
1429 *val = get_reg_val(id, vcpu->arch.ciabr);
1430 break;
1431 case KVM_REG_PPC_CSIGR:
1432 *val = get_reg_val(id, vcpu->arch.csigr);
1433 break;
1434 case KVM_REG_PPC_TACR:
1435 *val = get_reg_val(id, vcpu->arch.tacr);
1436 break;
1437 case KVM_REG_PPC_TCSCR:
1438 *val = get_reg_val(id, vcpu->arch.tcscr);
1439 break;
1440 case KVM_REG_PPC_PID:
1441 *val = get_reg_val(id, vcpu->arch.pid);
1442 break;
1443 case KVM_REG_PPC_ACOP:
1444 *val = get_reg_val(id, vcpu->arch.acop);
1445 break;
1446 case KVM_REG_PPC_WORT:
1447 *val = get_reg_val(id, vcpu->arch.wort);
1448 break;
1449 case KVM_REG_PPC_TIDR:
1450 *val = get_reg_val(id, vcpu->arch.tid);
1451 break;
1452 case KVM_REG_PPC_PSSCR:
1453 *val = get_reg_val(id, vcpu->arch.psscr);
1454 break;
1455 case KVM_REG_PPC_VPA_ADDR:
1456 spin_lock(&vcpu->arch.vpa_update_lock);
1457 *val = get_reg_val(id, vcpu->arch.vpa.next_gpa);
1458 spin_unlock(&vcpu->arch.vpa_update_lock);
1459 break;
1460 case KVM_REG_PPC_VPA_SLB:
1461 spin_lock(&vcpu->arch.vpa_update_lock);
1462 val->vpaval.addr = vcpu->arch.slb_shadow.next_gpa;
1463 val->vpaval.length = vcpu->arch.slb_shadow.len;
1464 spin_unlock(&vcpu->arch.vpa_update_lock);
1465 break;
1466 case KVM_REG_PPC_VPA_DTL:
1467 spin_lock(&vcpu->arch.vpa_update_lock);
1468 val->vpaval.addr = vcpu->arch.dtl.next_gpa;
1469 val->vpaval.length = vcpu->arch.dtl.len;
1470 spin_unlock(&vcpu->arch.vpa_update_lock);
1471 break;
1472 case KVM_REG_PPC_TB_OFFSET:
1473 *val = get_reg_val(id, vcpu->arch.vcore->tb_offset);
1474 break;
1475 case KVM_REG_PPC_LPCR:
1476 case KVM_REG_PPC_LPCR_64:
1477 *val = get_reg_val(id, vcpu->arch.vcore->lpcr);
1478 break;
1479 case KVM_REG_PPC_PPR:
1480 *val = get_reg_val(id, vcpu->arch.ppr);
1481 break;
1482#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1483 case KVM_REG_PPC_TFHAR:
1484 *val = get_reg_val(id, vcpu->arch.tfhar);
1485 break;
1486 case KVM_REG_PPC_TFIAR:
1487 *val = get_reg_val(id, vcpu->arch.tfiar);
1488 break;
1489 case KVM_REG_PPC_TEXASR:
1490 *val = get_reg_val(id, vcpu->arch.texasr);
1491 break;
1492 case KVM_REG_PPC_TM_GPR0 ... KVM_REG_PPC_TM_GPR31:
1493 i = id - KVM_REG_PPC_TM_GPR0;
1494 *val = get_reg_val(id, vcpu->arch.gpr_tm[i]);
1495 break;
1496 case KVM_REG_PPC_TM_VSR0 ... KVM_REG_PPC_TM_VSR63:
1497 {
1498 int j;
1499 i = id - KVM_REG_PPC_TM_VSR0;
1500 if (i < 32)
1501 for (j = 0; j < TS_FPRWIDTH; j++)
1502 val->vsxval[j] = vcpu->arch.fp_tm.fpr[i][j];
1503 else {
1504 if (cpu_has_feature(CPU_FTR_ALTIVEC))
1505 val->vval = vcpu->arch.vr_tm.vr[i-32];
1506 else
1507 r = -ENXIO;
1508 }
1509 break;
1510 }
1511 case KVM_REG_PPC_TM_CR:
1512 *val = get_reg_val(id, vcpu->arch.cr_tm);
1513 break;
1514 case KVM_REG_PPC_TM_XER:
1515 *val = get_reg_val(id, vcpu->arch.xer_tm);
1516 break;
1517 case KVM_REG_PPC_TM_LR:
1518 *val = get_reg_val(id, vcpu->arch.lr_tm);
1519 break;
1520 case KVM_REG_PPC_TM_CTR:
1521 *val = get_reg_val(id, vcpu->arch.ctr_tm);
1522 break;
1523 case KVM_REG_PPC_TM_FPSCR:
1524 *val = get_reg_val(id, vcpu->arch.fp_tm.fpscr);
1525 break;
1526 case KVM_REG_PPC_TM_AMR:
1527 *val = get_reg_val(id, vcpu->arch.amr_tm);
1528 break;
1529 case KVM_REG_PPC_TM_PPR:
1530 *val = get_reg_val(id, vcpu->arch.ppr_tm);
1531 break;
1532 case KVM_REG_PPC_TM_VRSAVE:
1533 *val = get_reg_val(id, vcpu->arch.vrsave_tm);
1534 break;
1535 case KVM_REG_PPC_TM_VSCR:
1536 if (cpu_has_feature(CPU_FTR_ALTIVEC))
1537 *val = get_reg_val(id, vcpu->arch.vr_tm.vscr.u[3]);
1538 else
1539 r = -ENXIO;
1540 break;
1541 case KVM_REG_PPC_TM_DSCR:
1542 *val = get_reg_val(id, vcpu->arch.dscr_tm);
1543 break;
1544 case KVM_REG_PPC_TM_TAR:
1545 *val = get_reg_val(id, vcpu->arch.tar_tm);
1546 break;
1547#endif
1548 case KVM_REG_PPC_ARCH_COMPAT:
1549 *val = get_reg_val(id, vcpu->arch.vcore->arch_compat);
1550 break;
1551 case KVM_REG_PPC_DEC_EXPIRY:
1552 *val = get_reg_val(id, vcpu->arch.dec_expires +
1553 vcpu->arch.vcore->tb_offset);
1554 break;
1555 case KVM_REG_PPC_ONLINE:
1556 *val = get_reg_val(id, vcpu->arch.online);
1557 break;
1558 default:
1559 r = -EINVAL;
1560 break;
1561 }
1562
1563 return r;
1564}
1565
1566static int kvmppc_set_one_reg_hv(struct kvm_vcpu *vcpu, u64 id,
1567 union kvmppc_one_reg *val)
1568{
1569 int r = 0;
1570 long int i;
1571 unsigned long addr, len;
1572
1573 switch (id) {
1574 case KVM_REG_PPC_HIOR:
1575
1576 if (set_reg_val(id, *val))
1577 r = -EINVAL;
1578 break;
1579 case KVM_REG_PPC_DABR:
1580 vcpu->arch.dabr = set_reg_val(id, *val);
1581 break;
1582 case KVM_REG_PPC_DABRX:
1583 vcpu->arch.dabrx = set_reg_val(id, *val) & ~DABRX_HYP;
1584 break;
1585 case KVM_REG_PPC_DSCR:
1586 vcpu->arch.dscr = set_reg_val(id, *val);
1587 break;
1588 case KVM_REG_PPC_PURR:
1589 vcpu->arch.purr = set_reg_val(id, *val);
1590 break;
1591 case KVM_REG_PPC_SPURR:
1592 vcpu->arch.spurr = set_reg_val(id, *val);
1593 break;
1594 case KVM_REG_PPC_AMR:
1595 vcpu->arch.amr = set_reg_val(id, *val);
1596 break;
1597 case KVM_REG_PPC_UAMOR:
1598 vcpu->arch.uamor = set_reg_val(id, *val);
1599 break;
1600 case KVM_REG_PPC_MMCR0 ... KVM_REG_PPC_MMCRS:
1601 i = id - KVM_REG_PPC_MMCR0;
1602 vcpu->arch.mmcr[i] = set_reg_val(id, *val);
1603 break;
1604 case KVM_REG_PPC_PMC1 ... KVM_REG_PPC_PMC8:
1605 i = id - KVM_REG_PPC_PMC1;
1606 vcpu->arch.pmc[i] = set_reg_val(id, *val);
1607 break;
1608 case KVM_REG_PPC_SPMC1 ... KVM_REG_PPC_SPMC2:
1609 i = id - KVM_REG_PPC_SPMC1;
1610 vcpu->arch.spmc[i] = set_reg_val(id, *val);
1611 break;
1612 case KVM_REG_PPC_SIAR:
1613 vcpu->arch.siar = set_reg_val(id, *val);
1614 break;
1615 case KVM_REG_PPC_SDAR:
1616 vcpu->arch.sdar = set_reg_val(id, *val);
1617 break;
1618 case KVM_REG_PPC_SIER:
1619 vcpu->arch.sier = set_reg_val(id, *val);
1620 break;
1621 case KVM_REG_PPC_IAMR:
1622 vcpu->arch.iamr = set_reg_val(id, *val);
1623 break;
1624 case KVM_REG_PPC_PSPB:
1625 vcpu->arch.pspb = set_reg_val(id, *val);
1626 break;
1627 case KVM_REG_PPC_DPDES:
1628 vcpu->arch.vcore->dpdes = set_reg_val(id, *val);
1629 break;
1630 case KVM_REG_PPC_VTB:
1631 vcpu->arch.vcore->vtb = set_reg_val(id, *val);
1632 break;
1633 case KVM_REG_PPC_DAWR:
1634 vcpu->arch.dawr = set_reg_val(id, *val);
1635 break;
1636 case KVM_REG_PPC_DAWRX:
1637 vcpu->arch.dawrx = set_reg_val(id, *val) & ~DAWRX_HYP;
1638 break;
1639 case KVM_REG_PPC_CIABR:
1640 vcpu->arch.ciabr = set_reg_val(id, *val);
1641
1642 if ((vcpu->arch.ciabr & CIABR_PRIV) == CIABR_PRIV_HYPER)
1643 vcpu->arch.ciabr &= ~CIABR_PRIV;
1644 break;
1645 case KVM_REG_PPC_CSIGR:
1646 vcpu->arch.csigr = set_reg_val(id, *val);
1647 break;
1648 case KVM_REG_PPC_TACR:
1649 vcpu->arch.tacr = set_reg_val(id, *val);
1650 break;
1651 case KVM_REG_PPC_TCSCR:
1652 vcpu->arch.tcscr = set_reg_val(id, *val);
1653 break;
1654 case KVM_REG_PPC_PID:
1655 vcpu->arch.pid = set_reg_val(id, *val);
1656 break;
1657 case KVM_REG_PPC_ACOP:
1658 vcpu->arch.acop = set_reg_val(id, *val);
1659 break;
1660 case KVM_REG_PPC_WORT:
1661 vcpu->arch.wort = set_reg_val(id, *val);
1662 break;
1663 case KVM_REG_PPC_TIDR:
1664 vcpu->arch.tid = set_reg_val(id, *val);
1665 break;
1666 case KVM_REG_PPC_PSSCR:
1667 vcpu->arch.psscr = set_reg_val(id, *val) & PSSCR_GUEST_VIS;
1668 break;
1669 case KVM_REG_PPC_VPA_ADDR:
1670 addr = set_reg_val(id, *val);
1671 r = -EINVAL;
1672 if (!addr && (vcpu->arch.slb_shadow.next_gpa ||
1673 vcpu->arch.dtl.next_gpa))
1674 break;
1675 r = set_vpa(vcpu, &vcpu->arch.vpa, addr, sizeof(struct lppaca));
1676 break;
1677 case KVM_REG_PPC_VPA_SLB:
1678 addr = val->vpaval.addr;
1679 len = val->vpaval.length;
1680 r = -EINVAL;
1681 if (addr && !vcpu->arch.vpa.next_gpa)
1682 break;
1683 r = set_vpa(vcpu, &vcpu->arch.slb_shadow, addr, len);
1684 break;
1685 case KVM_REG_PPC_VPA_DTL:
1686 addr = val->vpaval.addr;
1687 len = val->vpaval.length;
1688 r = -EINVAL;
1689 if (addr && (len < sizeof(struct dtl_entry) ||
1690 !vcpu->arch.vpa.next_gpa))
1691 break;
1692 len -= len % sizeof(struct dtl_entry);
1693 r = set_vpa(vcpu, &vcpu->arch.dtl, addr, len);
1694 break;
1695 case KVM_REG_PPC_TB_OFFSET:
1696
1697
1698
1699
1700
1701
1702 if (cpu_has_feature(CPU_FTR_POWER9_DD1))
1703 break;
1704
1705 vcpu->arch.vcore->tb_offset =
1706 ALIGN(set_reg_val(id, *val), 1UL << 24);
1707 break;
1708 case KVM_REG_PPC_LPCR:
1709 kvmppc_set_lpcr(vcpu, set_reg_val(id, *val), true);
1710 break;
1711 case KVM_REG_PPC_LPCR_64:
1712 kvmppc_set_lpcr(vcpu, set_reg_val(id, *val), false);
1713 break;
1714 case KVM_REG_PPC_PPR:
1715 vcpu->arch.ppr = set_reg_val(id, *val);
1716 break;
1717#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1718 case KVM_REG_PPC_TFHAR:
1719 vcpu->arch.tfhar = set_reg_val(id, *val);
1720 break;
1721 case KVM_REG_PPC_TFIAR:
1722 vcpu->arch.tfiar = set_reg_val(id, *val);
1723 break;
1724 case KVM_REG_PPC_TEXASR:
1725 vcpu->arch.texasr = set_reg_val(id, *val);
1726 break;
1727 case KVM_REG_PPC_TM_GPR0 ... KVM_REG_PPC_TM_GPR31:
1728 i = id - KVM_REG_PPC_TM_GPR0;
1729 vcpu->arch.gpr_tm[i] = set_reg_val(id, *val);
1730 break;
1731 case KVM_REG_PPC_TM_VSR0 ... KVM_REG_PPC_TM_VSR63:
1732 {
1733 int j;
1734 i = id - KVM_REG_PPC_TM_VSR0;
1735 if (i < 32)
1736 for (j = 0; j < TS_FPRWIDTH; j++)
1737 vcpu->arch.fp_tm.fpr[i][j] = val->vsxval[j];
1738 else
1739 if (cpu_has_feature(CPU_FTR_ALTIVEC))
1740 vcpu->arch.vr_tm.vr[i-32] = val->vval;
1741 else
1742 r = -ENXIO;
1743 break;
1744 }
1745 case KVM_REG_PPC_TM_CR:
1746 vcpu->arch.cr_tm = set_reg_val(id, *val);
1747 break;
1748 case KVM_REG_PPC_TM_XER:
1749 vcpu->arch.xer_tm = set_reg_val(id, *val);
1750 break;
1751 case KVM_REG_PPC_TM_LR:
1752 vcpu->arch.lr_tm = set_reg_val(id, *val);
1753 break;
1754 case KVM_REG_PPC_TM_CTR:
1755 vcpu->arch.ctr_tm = set_reg_val(id, *val);
1756 break;
1757 case KVM_REG_PPC_TM_FPSCR:
1758 vcpu->arch.fp_tm.fpscr = set_reg_val(id, *val);
1759 break;
1760 case KVM_REG_PPC_TM_AMR:
1761 vcpu->arch.amr_tm = set_reg_val(id, *val);
1762 break;
1763 case KVM_REG_PPC_TM_PPR:
1764 vcpu->arch.ppr_tm = set_reg_val(id, *val);
1765 break;
1766 case KVM_REG_PPC_TM_VRSAVE:
1767 vcpu->arch.vrsave_tm = set_reg_val(id, *val);
1768 break;
1769 case KVM_REG_PPC_TM_VSCR:
1770 if (cpu_has_feature(CPU_FTR_ALTIVEC))
1771 vcpu->arch.vr.vscr.u[3] = set_reg_val(id, *val);
1772 else
1773 r = - ENXIO;
1774 break;
1775 case KVM_REG_PPC_TM_DSCR:
1776 vcpu->arch.dscr_tm = set_reg_val(id, *val);
1777 break;
1778 case KVM_REG_PPC_TM_TAR:
1779 vcpu->arch.tar_tm = set_reg_val(id, *val);
1780 break;
1781#endif
1782 case KVM_REG_PPC_ARCH_COMPAT:
1783 r = kvmppc_set_arch_compat(vcpu, set_reg_val(id, *val));
1784 break;
1785 case KVM_REG_PPC_DEC_EXPIRY:
1786 vcpu->arch.dec_expires = set_reg_val(id, *val) -
1787 vcpu->arch.vcore->tb_offset;
1788 break;
1789 case KVM_REG_PPC_ONLINE:
1790 i = set_reg_val(id, *val);
1791 if (i && !vcpu->arch.online)
1792 atomic_inc(&vcpu->arch.vcore->online_count);
1793 else if (!i && vcpu->arch.online)
1794 atomic_dec(&vcpu->arch.vcore->online_count);
1795 vcpu->arch.online = i;
1796 break;
1797 default:
1798 r = -EINVAL;
1799 break;
1800 }
1801
1802 return r;
1803}
1804
1805
1806
1807
1808
1809
1810
1811
1812static int threads_per_vcore(struct kvm *kvm)
1813{
1814 if (kvm->arch.threads_indep)
1815 return 1;
1816 return threads_per_subcore;
1817}
1818
1819static struct kvmppc_vcore *kvmppc_vcore_create(struct kvm *kvm, int core)
1820{
1821 struct kvmppc_vcore *vcore;
1822
1823 vcore = kzalloc(sizeof(struct kvmppc_vcore), GFP_KERNEL);
1824
1825 if (vcore == NULL)
1826 return NULL;
1827
1828 spin_lock_init(&vcore->lock);
1829 spin_lock_init(&vcore->stoltb_lock);
1830 init_swait_queue_head(&vcore->wq);
1831 vcore->preempt_tb = TB_NIL;
1832 vcore->lpcr = kvm->arch.lpcr;
1833 vcore->first_vcpuid = core * kvm->arch.smt_mode;
1834 vcore->kvm = kvm;
1835 INIT_LIST_HEAD(&vcore->preempt_list);
1836
1837 return vcore;
1838}
1839
1840#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
1841static struct debugfs_timings_element {
1842 const char *name;
1843 size_t offset;
1844} timings[] = {
1845 {"rm_entry", offsetof(struct kvm_vcpu, arch.rm_entry)},
1846 {"rm_intr", offsetof(struct kvm_vcpu, arch.rm_intr)},
1847 {"rm_exit", offsetof(struct kvm_vcpu, arch.rm_exit)},
1848 {"guest", offsetof(struct kvm_vcpu, arch.guest_time)},
1849 {"cede", offsetof(struct kvm_vcpu, arch.cede_time)},
1850};
1851
1852#define N_TIMINGS (ARRAY_SIZE(timings))
1853
1854struct debugfs_timings_state {
1855 struct kvm_vcpu *vcpu;
1856 unsigned int buflen;
1857 char buf[N_TIMINGS * 100];
1858};
1859
1860static int debugfs_timings_open(struct inode *inode, struct file *file)
1861{
1862 struct kvm_vcpu *vcpu = inode->i_private;
1863 struct debugfs_timings_state *p;
1864
1865 p = kzalloc(sizeof(*p), GFP_KERNEL);
1866 if (!p)
1867 return -ENOMEM;
1868
1869 kvm_get_kvm(vcpu->kvm);
1870 p->vcpu = vcpu;
1871 file->private_data = p;
1872
1873 return nonseekable_open(inode, file);
1874}
1875
1876static int debugfs_timings_release(struct inode *inode, struct file *file)
1877{
1878 struct debugfs_timings_state *p = file->private_data;
1879
1880 kvm_put_kvm(p->vcpu->kvm);
1881 kfree(p);
1882 return 0;
1883}
1884
1885static ssize_t debugfs_timings_read(struct file *file, char __user *buf,
1886 size_t len, loff_t *ppos)
1887{
1888 struct debugfs_timings_state *p = file->private_data;
1889 struct kvm_vcpu *vcpu = p->vcpu;
1890 char *s, *buf_end;
1891 struct kvmhv_tb_accumulator tb;
1892 u64 count;
1893 loff_t pos;
1894 ssize_t n;
1895 int i, loops;
1896 bool ok;
1897
1898 if (!p->buflen) {
1899 s = p->buf;
1900 buf_end = s + sizeof(p->buf);
1901 for (i = 0; i < N_TIMINGS; ++i) {
1902 struct kvmhv_tb_accumulator *acc;
1903
1904 acc = (struct kvmhv_tb_accumulator *)
1905 ((unsigned long)vcpu + timings[i].offset);
1906 ok = false;
1907 for (loops = 0; loops < 1000; ++loops) {
1908 count = acc->seqcount;
1909 if (!(count & 1)) {
1910 smp_rmb();
1911 tb = *acc;
1912 smp_rmb();
1913 if (count == acc->seqcount) {
1914 ok = true;
1915 break;
1916 }
1917 }
1918 udelay(1);
1919 }
1920 if (!ok)
1921 snprintf(s, buf_end - s, "%s: stuck\n",
1922 timings[i].name);
1923 else
1924 snprintf(s, buf_end - s,
1925 "%s: %llu %llu %llu %llu\n",
1926 timings[i].name, count / 2,
1927 tb_to_ns(tb.tb_total),
1928 tb_to_ns(tb.tb_min),
1929 tb_to_ns(tb.tb_max));
1930 s += strlen(s);
1931 }
1932 p->buflen = s - p->buf;
1933 }
1934
1935 pos = *ppos;
1936 if (pos >= p->buflen)
1937 return 0;
1938 if (len > p->buflen - pos)
1939 len = p->buflen - pos;
1940 n = copy_to_user(buf, p->buf + pos, len);
1941 if (n) {
1942 if (n == len)
1943 return -EFAULT;
1944 len -= n;
1945 }
1946 *ppos = pos + len;
1947 return len;
1948}
1949
1950static ssize_t debugfs_timings_write(struct file *file, const char __user *buf,
1951 size_t len, loff_t *ppos)
1952{
1953 return -EACCES;
1954}
1955
1956static const struct file_operations debugfs_timings_ops = {
1957 .owner = THIS_MODULE,
1958 .open = debugfs_timings_open,
1959 .release = debugfs_timings_release,
1960 .read = debugfs_timings_read,
1961 .write = debugfs_timings_write,
1962 .llseek = generic_file_llseek,
1963};
1964
1965
1966static void debugfs_vcpu_init(struct kvm_vcpu *vcpu, unsigned int id)
1967{
1968 char buf[16];
1969 struct kvm *kvm = vcpu->kvm;
1970
1971 snprintf(buf, sizeof(buf), "vcpu%u", id);
1972 if (IS_ERR_OR_NULL(kvm->arch.debugfs_dir))
1973 return;
1974 vcpu->arch.debugfs_dir = debugfs_create_dir(buf, kvm->arch.debugfs_dir);
1975 if (IS_ERR_OR_NULL(vcpu->arch.debugfs_dir))
1976 return;
1977 vcpu->arch.debugfs_timings =
1978 debugfs_create_file("timings", 0444, vcpu->arch.debugfs_dir,
1979 vcpu, &debugfs_timings_ops);
1980}
1981
1982#else
1983static void debugfs_vcpu_init(struct kvm_vcpu *vcpu, unsigned int id)
1984{
1985}
1986#endif
1987
1988static struct kvm_vcpu *kvmppc_core_vcpu_create_hv(struct kvm *kvm,
1989 unsigned int id)
1990{
1991 struct kvm_vcpu *vcpu;
1992 int err;
1993 int core;
1994 struct kvmppc_vcore *vcore;
1995
1996 err = -ENOMEM;
1997 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
1998 if (!vcpu)
1999 goto out;
2000
2001 err = kvm_vcpu_init(vcpu, kvm, id);
2002 if (err)
2003 goto free_vcpu;
2004
2005 vcpu->arch.shared = &vcpu->arch.shregs;
2006#ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE
2007
2008
2009
2010
2011#ifdef __BIG_ENDIAN__
2012 vcpu->arch.shared_big_endian = true;
2013#else
2014 vcpu->arch.shared_big_endian = false;
2015#endif
2016#endif
2017 vcpu->arch.mmcr[0] = MMCR0_FC;
2018 vcpu->arch.ctrl = CTRL_RUNLATCH;
2019
2020 kvmppc_set_pvr_hv(vcpu, mfspr(SPRN_PVR));
2021 spin_lock_init(&vcpu->arch.vpa_update_lock);
2022 spin_lock_init(&vcpu->arch.tbacct_lock);
2023 vcpu->arch.busy_preempt = TB_NIL;
2024 vcpu->arch.intr_msr = MSR_SF | MSR_ME;
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034 vcpu->arch.hfscr = mfspr(SPRN_HFSCR);
2035 if (cpu_has_feature(CPU_FTR_P9_TM_HV_ASSIST))
2036 vcpu->arch.hfscr |= HFSCR_TM;
2037 else if (!cpu_has_feature(CPU_FTR_TM_COMP))
2038 vcpu->arch.hfscr &= ~HFSCR_TM;
2039 if (cpu_has_feature(CPU_FTR_ARCH_300))
2040 vcpu->arch.hfscr &= ~HFSCR_MSGP;
2041
2042 kvmppc_mmu_book3s_hv_init(vcpu);
2043
2044 vcpu->arch.state = KVMPPC_VCPU_NOTREADY;
2045
2046 init_waitqueue_head(&vcpu->arch.cpu_run);
2047
2048 mutex_lock(&kvm->lock);
2049 vcore = NULL;
2050 err = -EINVAL;
2051 core = id / kvm->arch.smt_mode;
2052 if (core < KVM_MAX_VCORES) {
2053 vcore = kvm->arch.vcores[core];
2054 if (!vcore) {
2055 err = -ENOMEM;
2056 vcore = kvmppc_vcore_create(kvm, core);
2057 kvm->arch.vcores[core] = vcore;
2058 kvm->arch.online_vcores++;
2059 }
2060 }
2061 mutex_unlock(&kvm->lock);
2062
2063 if (!vcore)
2064 goto free_vcpu;
2065
2066 spin_lock(&vcore->lock);
2067 ++vcore->num_threads;
2068 spin_unlock(&vcore->lock);
2069 vcpu->arch.vcore = vcore;
2070 vcpu->arch.ptid = vcpu->vcpu_id - vcore->first_vcpuid;
2071 vcpu->arch.thread_cpu = -1;
2072 vcpu->arch.prev_cpu = -1;
2073
2074 vcpu->arch.cpu_type = KVM_CPU_3S_64;
2075 kvmppc_sanity_check(vcpu);
2076
2077 debugfs_vcpu_init(vcpu, id);
2078
2079 return vcpu;
2080
2081free_vcpu:
2082 kmem_cache_free(kvm_vcpu_cache, vcpu);
2083out:
2084 return ERR_PTR(err);
2085}
2086
2087static int kvmhv_set_smt_mode(struct kvm *kvm, unsigned long smt_mode,
2088 unsigned long flags)
2089{
2090 int err;
2091 int esmt = 0;
2092
2093 if (flags)
2094 return -EINVAL;
2095 if (smt_mode > MAX_SMT_THREADS || !is_power_of_2(smt_mode))
2096 return -EINVAL;
2097 if (!cpu_has_feature(CPU_FTR_ARCH_300)) {
2098
2099
2100
2101
2102 if (smt_mode > threads_per_subcore)
2103 return -EINVAL;
2104 } else {
2105
2106
2107
2108
2109 esmt = smt_mode;
2110 smt_mode = 1;
2111 }
2112 mutex_lock(&kvm->lock);
2113 err = -EBUSY;
2114 if (!kvm->arch.online_vcores) {
2115 kvm->arch.smt_mode = smt_mode;
2116 kvm->arch.emul_smt_mode = esmt;
2117 err = 0;
2118 }
2119 mutex_unlock(&kvm->lock);
2120
2121 return err;
2122}
2123
2124static void unpin_vpa(struct kvm *kvm, struct kvmppc_vpa *vpa)
2125{
2126 if (vpa->pinned_addr)
2127 kvmppc_unpin_guest_page(kvm, vpa->pinned_addr, vpa->gpa,
2128 vpa->dirty);
2129}
2130
2131static void kvmppc_core_vcpu_free_hv(struct kvm_vcpu *vcpu)
2132{
2133 spin_lock(&vcpu->arch.vpa_update_lock);
2134 unpin_vpa(vcpu->kvm, &vcpu->arch.dtl);
2135 unpin_vpa(vcpu->kvm, &vcpu->arch.slb_shadow);
2136 unpin_vpa(vcpu->kvm, &vcpu->arch.vpa);
2137 spin_unlock(&vcpu->arch.vpa_update_lock);
2138 kvm_vcpu_uninit(vcpu);
2139 kmem_cache_free(kvm_vcpu_cache, vcpu);
2140}
2141
2142static int kvmppc_core_check_requests_hv(struct kvm_vcpu *vcpu)
2143{
2144
2145 return 1;
2146}
2147
2148static void kvmppc_set_timer(struct kvm_vcpu *vcpu)
2149{
2150 unsigned long dec_nsec, now;
2151
2152 now = get_tb();
2153 if (now > vcpu->arch.dec_expires) {
2154
2155 kvmppc_core_queue_dec(vcpu);
2156 kvmppc_core_prepare_to_enter(vcpu);
2157 return;
2158 }
2159 dec_nsec = (vcpu->arch.dec_expires - now) * NSEC_PER_SEC
2160 / tb_ticks_per_sec;
2161 hrtimer_start(&vcpu->arch.dec_timer, dec_nsec, HRTIMER_MODE_REL);
2162 vcpu->arch.timer_running = 1;
2163}
2164
2165static void kvmppc_end_cede(struct kvm_vcpu *vcpu)
2166{
2167 vcpu->arch.ceded = 0;
2168 if (vcpu->arch.timer_running) {
2169 hrtimer_try_to_cancel(&vcpu->arch.dec_timer);
2170 vcpu->arch.timer_running = 0;
2171 }
2172}
2173
2174extern int __kvmppc_vcore_entry(void);
2175
2176static void kvmppc_remove_runnable(struct kvmppc_vcore *vc,
2177 struct kvm_vcpu *vcpu)
2178{
2179 u64 now;
2180
2181 if (vcpu->arch.state != KVMPPC_VCPU_RUNNABLE)
2182 return;
2183 spin_lock_irq(&vcpu->arch.tbacct_lock);
2184 now = mftb();
2185 vcpu->arch.busy_stolen += vcore_stolen_time(vc, now) -
2186 vcpu->arch.stolen_logged;
2187 vcpu->arch.busy_preempt = now;
2188 vcpu->arch.state = KVMPPC_VCPU_BUSY_IN_HOST;
2189 spin_unlock_irq(&vcpu->arch.tbacct_lock);
2190 --vc->n_runnable;
2191 WRITE_ONCE(vc->runnable_threads[vcpu->arch.ptid], NULL);
2192}
2193
2194static int kvmppc_grab_hwthread(int cpu)
2195{
2196 struct paca_struct *tpaca;
2197 long timeout = 10000;
2198
2199 tpaca = paca_ptrs[cpu];
2200
2201
2202 tpaca->kvm_hstate.kvm_vcpu = NULL;
2203 tpaca->kvm_hstate.kvm_vcore = NULL;
2204 tpaca->kvm_hstate.napping = 0;
2205 smp_wmb();
2206 tpaca->kvm_hstate.hwthread_req = 1;
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217 smp_mb();
2218 while (tpaca->kvm_hstate.hwthread_state == KVM_HWTHREAD_IN_KERNEL) {
2219 if (--timeout <= 0) {
2220 pr_err("KVM: couldn't grab cpu %d\n", cpu);
2221 return -EBUSY;
2222 }
2223 udelay(1);
2224 }
2225 return 0;
2226}
2227
2228static void kvmppc_release_hwthread(int cpu)
2229{
2230 struct paca_struct *tpaca;
2231
2232 tpaca = paca_ptrs[cpu];
2233 tpaca->kvm_hstate.hwthread_req = 0;
2234 tpaca->kvm_hstate.kvm_vcpu = NULL;
2235 tpaca->kvm_hstate.kvm_vcore = NULL;
2236 tpaca->kvm_hstate.kvm_split_mode = NULL;
2237}
2238
2239static void radix_flush_cpu(struct kvm *kvm, int cpu, struct kvm_vcpu *vcpu)
2240{
2241 int i;
2242
2243 cpu = cpu_first_thread_sibling(cpu);
2244 cpumask_set_cpu(cpu, &kvm->arch.need_tlb_flush);
2245
2246
2247
2248
2249
2250 smp_mb();
2251 for (i = 0; i < threads_per_core; ++i)
2252 if (cpumask_test_cpu(cpu + i, &kvm->arch.cpu_in_guest))
2253 smp_call_function_single(cpu + i, do_nothing, NULL, 1);
2254}
2255
2256static void kvmppc_prepare_radix_vcpu(struct kvm_vcpu *vcpu, int pcpu)
2257{
2258 struct kvm *kvm = vcpu->kvm;
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272 if (vcpu->arch.prev_cpu != pcpu) {
2273 if (vcpu->arch.prev_cpu >= 0 &&
2274 cpu_first_thread_sibling(vcpu->arch.prev_cpu) !=
2275 cpu_first_thread_sibling(pcpu))
2276 radix_flush_cpu(kvm, vcpu->arch.prev_cpu, vcpu);
2277 vcpu->arch.prev_cpu = pcpu;
2278 }
2279}
2280
2281static void kvmppc_start_thread(struct kvm_vcpu *vcpu, struct kvmppc_vcore *vc)
2282{
2283 int cpu;
2284 struct paca_struct *tpaca;
2285 struct kvm *kvm = vc->kvm;
2286
2287 cpu = vc->pcpu;
2288 if (vcpu) {
2289 if (vcpu->arch.timer_running) {
2290 hrtimer_try_to_cancel(&vcpu->arch.dec_timer);
2291 vcpu->arch.timer_running = 0;
2292 }
2293 cpu += vcpu->arch.ptid;
2294 vcpu->cpu = vc->pcpu;
2295 vcpu->arch.thread_cpu = cpu;
2296 cpumask_set_cpu(cpu, &kvm->arch.cpu_in_guest);
2297 }
2298 tpaca = paca_ptrs[cpu];
2299 tpaca->kvm_hstate.kvm_vcpu = vcpu;
2300 tpaca->kvm_hstate.ptid = cpu - vc->pcpu;
2301 tpaca->kvm_hstate.fake_suspend = 0;
2302
2303 smp_wmb();
2304 tpaca->kvm_hstate.kvm_vcore = vc;
2305 if (cpu != smp_processor_id())
2306 kvmppc_ipi_thread(cpu);
2307}
2308
2309static void kvmppc_wait_for_nap(int n_threads)
2310{
2311 int cpu = smp_processor_id();
2312 int i, loops;
2313
2314 if (n_threads <= 1)
2315 return;
2316 for (loops = 0; loops < 1000000; ++loops) {
2317
2318
2319
2320
2321
2322
2323 for (i = 1; i < n_threads; ++i)
2324 if (paca_ptrs[cpu + i]->kvm_hstate.kvm_vcore)
2325 break;
2326 if (i == n_threads) {
2327 HMT_medium();
2328 return;
2329 }
2330 HMT_low();
2331 }
2332 HMT_medium();
2333 for (i = 1; i < n_threads; ++i)
2334 if (paca_ptrs[cpu + i]->kvm_hstate.kvm_vcore)
2335 pr_err("KVM: CPU %d seems to be stuck\n", cpu + i);
2336}
2337
2338
2339
2340
2341
2342
2343static int on_primary_thread(void)
2344{
2345 int cpu = smp_processor_id();
2346 int thr;
2347
2348
2349 if (cpu_thread_in_subcore(cpu))
2350 return 0;
2351
2352 thr = 0;
2353 while (++thr < threads_per_subcore)
2354 if (cpu_online(cpu + thr))
2355 return 0;
2356
2357
2358 for (thr = 1; thr < threads_per_subcore; ++thr) {
2359 if (kvmppc_grab_hwthread(cpu + thr)) {
2360
2361 do {
2362 kvmppc_release_hwthread(cpu + thr);
2363 } while (--thr > 0);
2364 return 0;
2365 }
2366 }
2367 return 1;
2368}
2369
2370
2371
2372
2373
2374
2375struct preempted_vcore_list {
2376 struct list_head list;
2377 spinlock_t lock;
2378};
2379
2380static DEFINE_PER_CPU(struct preempted_vcore_list, preempted_vcores);
2381
2382static void init_vcore_lists(void)
2383{
2384 int cpu;
2385
2386 for_each_possible_cpu(cpu) {
2387 struct preempted_vcore_list *lp = &per_cpu(preempted_vcores, cpu);
2388 spin_lock_init(&lp->lock);
2389 INIT_LIST_HEAD(&lp->list);
2390 }
2391}
2392
2393static void kvmppc_vcore_preempt(struct kvmppc_vcore *vc)
2394{
2395 struct preempted_vcore_list *lp = this_cpu_ptr(&preempted_vcores);
2396
2397 vc->vcore_state = VCORE_PREEMPT;
2398 vc->pcpu = smp_processor_id();
2399 if (vc->num_threads < threads_per_vcore(vc->kvm)) {
2400 spin_lock(&lp->lock);
2401 list_add_tail(&vc->preempt_list, &lp->list);
2402 spin_unlock(&lp->lock);
2403 }
2404
2405
2406 kvmppc_core_start_stolen(vc);
2407}
2408
2409static void kvmppc_vcore_end_preempt(struct kvmppc_vcore *vc)
2410{
2411 struct preempted_vcore_list *lp;
2412
2413 kvmppc_core_end_stolen(vc);
2414 if (!list_empty(&vc->preempt_list)) {
2415 lp = &per_cpu(preempted_vcores, vc->pcpu);
2416 spin_lock(&lp->lock);
2417 list_del_init(&vc->preempt_list);
2418 spin_unlock(&lp->lock);
2419 }
2420 vc->vcore_state = VCORE_INACTIVE;
2421}
2422
2423
2424
2425
2426
2427struct core_info {
2428 int n_subcores;
2429 int max_subcore_threads;
2430 int total_threads;
2431 int subcore_threads[MAX_SUBCORES];
2432 struct kvmppc_vcore *vc[MAX_SUBCORES];
2433};
2434
2435
2436
2437
2438
2439static int subcore_thread_map[MAX_SUBCORES] = { 0, 4, 2, 6 };
2440
2441static void init_core_info(struct core_info *cip, struct kvmppc_vcore *vc)
2442{
2443 memset(cip, 0, sizeof(*cip));
2444 cip->n_subcores = 1;
2445 cip->max_subcore_threads = vc->num_threads;
2446 cip->total_threads = vc->num_threads;
2447 cip->subcore_threads[0] = vc->num_threads;
2448 cip->vc[0] = vc;
2449}
2450
2451static bool subcore_config_ok(int n_subcores, int n_threads)
2452{
2453
2454
2455
2456
2457 if (cpu_has_feature(CPU_FTR_ARCH_300))
2458 return n_subcores <= 4 && n_threads == 1;
2459
2460
2461 if (n_subcores > 1 && threads_per_subcore < MAX_SMT_THREADS)
2462 return false;
2463 if (n_subcores > MAX_SUBCORES)
2464 return false;
2465 if (n_subcores > 1) {
2466 if (!(dynamic_mt_modes & 2))
2467 n_subcores = 4;
2468 if (n_subcores > 2 && !(dynamic_mt_modes & 4))
2469 return false;
2470 }
2471
2472 return n_subcores * roundup_pow_of_two(n_threads) <= MAX_SMT_THREADS;
2473}
2474
2475static void init_vcore_to_run(struct kvmppc_vcore *vc)
2476{
2477 vc->entry_exit_map = 0;
2478 vc->in_guest = 0;
2479 vc->napping_threads = 0;
2480 vc->conferring_threads = 0;
2481 vc->tb_offset_applied = 0;
2482}
2483
2484static bool can_dynamic_split(struct kvmppc_vcore *vc, struct core_info *cip)
2485{
2486 int n_threads = vc->num_threads;
2487 int sub;
2488
2489 if (!cpu_has_feature(CPU_FTR_ARCH_207S))
2490 return false;
2491
2492
2493 if (no_mixing_hpt_and_radix &&
2494 kvm_is_radix(vc->kvm) != kvm_is_radix(cip->vc[0]->kvm))
2495 return false;
2496
2497 if (n_threads < cip->max_subcore_threads)
2498 n_threads = cip->max_subcore_threads;
2499 if (!subcore_config_ok(cip->n_subcores + 1, n_threads))
2500 return false;
2501 cip->max_subcore_threads = n_threads;
2502
2503 sub = cip->n_subcores;
2504 ++cip->n_subcores;
2505 cip->total_threads += vc->num_threads;
2506 cip->subcore_threads[sub] = vc->num_threads;
2507 cip->vc[sub] = vc;
2508 init_vcore_to_run(vc);
2509 list_del_init(&vc->preempt_list);
2510
2511 return true;
2512}
2513
2514
2515
2516
2517
2518static bool can_piggyback(struct kvmppc_vcore *pvc, struct core_info *cip,
2519 int target_threads)
2520{
2521 if (cip->total_threads + pvc->num_threads > target_threads)
2522 return false;
2523
2524 return can_dynamic_split(pvc, cip);
2525}
2526
2527static void prepare_threads(struct kvmppc_vcore *vc)
2528{
2529 int i;
2530 struct kvm_vcpu *vcpu;
2531
2532 for_each_runnable_thread(i, vcpu, vc) {
2533 if (signal_pending(vcpu->arch.run_task))
2534 vcpu->arch.ret = -EINTR;
2535 else if (vcpu->arch.vpa.update_pending ||
2536 vcpu->arch.slb_shadow.update_pending ||
2537 vcpu->arch.dtl.update_pending)
2538 vcpu->arch.ret = RESUME_GUEST;
2539 else
2540 continue;
2541 kvmppc_remove_runnable(vc, vcpu);
2542 wake_up(&vcpu->arch.cpu_run);
2543 }
2544}
2545
2546static void collect_piggybacks(struct core_info *cip, int target_threads)
2547{
2548 struct preempted_vcore_list *lp = this_cpu_ptr(&preempted_vcores);
2549 struct kvmppc_vcore *pvc, *vcnext;
2550
2551 spin_lock(&lp->lock);
2552 list_for_each_entry_safe(pvc, vcnext, &lp->list, preempt_list) {
2553 if (!spin_trylock(&pvc->lock))
2554 continue;
2555 prepare_threads(pvc);
2556 if (!pvc->n_runnable) {
2557 list_del_init(&pvc->preempt_list);
2558 if (pvc->runner == NULL) {
2559 pvc->vcore_state = VCORE_INACTIVE;
2560 kvmppc_core_end_stolen(pvc);
2561 }
2562 spin_unlock(&pvc->lock);
2563 continue;
2564 }
2565 if (!can_piggyback(pvc, cip, target_threads)) {
2566 spin_unlock(&pvc->lock);
2567 continue;
2568 }
2569 kvmppc_core_end_stolen(pvc);
2570 pvc->vcore_state = VCORE_PIGGYBACK;
2571 if (cip->total_threads >= target_threads)
2572 break;
2573 }
2574 spin_unlock(&lp->lock);
2575}
2576
2577static bool recheck_signals(struct core_info *cip)
2578{
2579 int sub, i;
2580 struct kvm_vcpu *vcpu;
2581
2582 for (sub = 0; sub < cip->n_subcores; ++sub)
2583 for_each_runnable_thread(i, vcpu, cip->vc[sub])
2584 if (signal_pending(vcpu->arch.run_task))
2585 return true;
2586 return false;
2587}
2588
2589static void post_guest_process(struct kvmppc_vcore *vc, bool is_master)
2590{
2591 int still_running = 0, i;
2592 u64 now;
2593 long ret;
2594 struct kvm_vcpu *vcpu;
2595
2596 spin_lock(&vc->lock);
2597 now = get_tb();
2598 for_each_runnable_thread(i, vcpu, vc) {
2599
2600 if (now < vcpu->arch.dec_expires &&
2601 kvmppc_core_pending_dec(vcpu))
2602 kvmppc_core_dequeue_dec(vcpu);
2603
2604 trace_kvm_guest_exit(vcpu);
2605
2606 ret = RESUME_GUEST;
2607 if (vcpu->arch.trap)
2608 ret = kvmppc_handle_exit_hv(vcpu->arch.kvm_run, vcpu,
2609 vcpu->arch.run_task);
2610
2611 vcpu->arch.ret = ret;
2612 vcpu->arch.trap = 0;
2613
2614 if (is_kvmppc_resume_guest(vcpu->arch.ret)) {
2615 if (vcpu->arch.pending_exceptions)
2616 kvmppc_core_prepare_to_enter(vcpu);
2617 if (vcpu->arch.ceded)
2618 kvmppc_set_timer(vcpu);
2619 else
2620 ++still_running;
2621 } else {
2622 kvmppc_remove_runnable(vc, vcpu);
2623 wake_up(&vcpu->arch.cpu_run);
2624 }
2625 }
2626 if (!is_master) {
2627 if (still_running > 0) {
2628 kvmppc_vcore_preempt(vc);
2629 } else if (vc->runner) {
2630 vc->vcore_state = VCORE_PREEMPT;
2631 kvmppc_core_start_stolen(vc);
2632 } else {
2633 vc->vcore_state = VCORE_INACTIVE;
2634 }
2635 if (vc->n_runnable > 0 && vc->runner == NULL) {
2636
2637 i = -1;
2638 vcpu = next_runnable_thread(vc, &i);
2639 wake_up(&vcpu->arch.cpu_run);
2640 }
2641 }
2642 spin_unlock(&vc->lock);
2643}
2644
2645
2646
2647
2648
2649
2650static inline int kvmppc_clear_host_core(unsigned int cpu)
2651{
2652 int core;
2653
2654 if (!kvmppc_host_rm_ops_hv || cpu_thread_in_core(cpu))
2655 return 0;
2656
2657
2658
2659
2660
2661 core = cpu >> threads_shift;
2662 kvmppc_host_rm_ops_hv->rm_core[core].rm_state.in_host = 0;
2663 return 0;
2664}
2665
2666
2667
2668
2669
2670
2671static inline int kvmppc_set_host_core(unsigned int cpu)
2672{
2673 int core;
2674
2675 if (!kvmppc_host_rm_ops_hv || cpu_thread_in_core(cpu))
2676 return 0;
2677
2678
2679
2680
2681
2682 core = cpu >> threads_shift;
2683 kvmppc_host_rm_ops_hv->rm_core[core].rm_state.in_host = 1;
2684 return 0;
2685}
2686
2687static void set_irq_happened(int trap)
2688{
2689 switch (trap) {
2690 case BOOK3S_INTERRUPT_EXTERNAL:
2691 local_paca->irq_happened |= PACA_IRQ_EE;
2692 break;
2693 case BOOK3S_INTERRUPT_H_DOORBELL:
2694 local_paca->irq_happened |= PACA_IRQ_DBELL;
2695 break;
2696 case BOOK3S_INTERRUPT_HMI:
2697 local_paca->irq_happened |= PACA_IRQ_HMI;
2698 break;
2699 case BOOK3S_INTERRUPT_SYSTEM_RESET:
2700 replay_system_reset();
2701 break;
2702 }
2703}
2704
2705
2706
2707
2708
2709static noinline void kvmppc_run_core(struct kvmppc_vcore *vc)
2710{
2711 struct kvm_vcpu *vcpu;
2712 int i;
2713 int srcu_idx;
2714 struct core_info core_info;
2715 struct kvmppc_vcore *pvc;
2716 struct kvm_split_mode split_info, *sip;
2717 int split, subcore_size, active;
2718 int sub;
2719 bool thr0_done;
2720 unsigned long cmd_bit, stat_bit;
2721 int pcpu, thr;
2722 int target_threads;
2723 int controlled_threads;
2724 int trap;
2725 bool is_power8;
2726 bool hpt_on_radix;
2727
2728
2729
2730
2731
2732 prepare_threads(vc);
2733
2734
2735 if (vc->runner->arch.state != KVMPPC_VCPU_RUNNABLE)
2736 return;
2737
2738
2739
2740
2741 init_vcore_to_run(vc);
2742 vc->preempt_tb = TB_NIL;
2743
2744
2745
2746
2747
2748
2749 controlled_threads = threads_per_vcore(vc->kvm);
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759 hpt_on_radix = no_mixing_hpt_and_radix && radix_enabled() &&
2760 !kvm_is_radix(vc->kvm);
2761 if (((controlled_threads > 1) &&
2762 ((vc->num_threads > threads_per_subcore) || !on_primary_thread())) ||
2763 (hpt_on_radix && vc->kvm->arch.threads_indep)) {
2764 for_each_runnable_thread(i, vcpu, vc) {
2765 vcpu->arch.ret = -EBUSY;
2766 kvmppc_remove_runnable(vc, vcpu);
2767 wake_up(&vcpu->arch.cpu_run);
2768 }
2769 goto out;
2770 }
2771
2772
2773
2774
2775
2776 init_core_info(&core_info, vc);
2777 pcpu = smp_processor_id();
2778 target_threads = controlled_threads;
2779 if (target_smt_mode && target_smt_mode < target_threads)
2780 target_threads = target_smt_mode;
2781 if (vc->num_threads < target_threads)
2782 collect_piggybacks(&core_info, target_threads);
2783
2784
2785
2786
2787
2788
2789 pcpu = smp_processor_id();
2790 if (kvm_is_radix(vc->kvm)) {
2791 for (sub = 0; sub < core_info.n_subcores; ++sub)
2792 for_each_runnable_thread(i, vcpu, core_info.vc[sub])
2793 kvmppc_prepare_radix_vcpu(vcpu, pcpu);
2794 }
2795
2796
2797
2798
2799
2800
2801
2802
2803 local_irq_disable();
2804 hard_irq_disable();
2805 if (lazy_irq_pending() || need_resched() ||
2806 recheck_signals(&core_info) || !vc->kvm->arch.mmu_ready) {
2807 local_irq_enable();
2808 vc->vcore_state = VCORE_INACTIVE;
2809
2810 for (sub = 1; sub < core_info.n_subcores; ++sub) {
2811 pvc = core_info.vc[sub];
2812
2813 kvmppc_vcore_preempt(pvc);
2814 spin_unlock(&pvc->lock);
2815 }
2816 for (i = 0; i < controlled_threads; ++i)
2817 kvmppc_release_hwthread(pcpu + i);
2818 return;
2819 }
2820
2821 kvmppc_clear_host_core(pcpu);
2822
2823
2824 subcore_size = threads_per_subcore;
2825 cmd_bit = stat_bit = 0;
2826 split = core_info.n_subcores;
2827 sip = NULL;
2828 is_power8 = cpu_has_feature(CPU_FTR_ARCH_207S)
2829 && !cpu_has_feature(CPU_FTR_ARCH_300);
2830
2831 if (split > 1 || hpt_on_radix) {
2832 sip = &split_info;
2833 memset(&split_info, 0, sizeof(split_info));
2834 for (sub = 0; sub < core_info.n_subcores; ++sub)
2835 split_info.vc[sub] = core_info.vc[sub];
2836
2837 if (is_power8) {
2838 if (split == 2 && (dynamic_mt_modes & 2)) {
2839 cmd_bit = HID0_POWER8_1TO2LPAR;
2840 stat_bit = HID0_POWER8_2LPARMODE;
2841 } else {
2842 split = 4;
2843 cmd_bit = HID0_POWER8_1TO4LPAR;
2844 stat_bit = HID0_POWER8_4LPARMODE;
2845 }
2846 subcore_size = MAX_SMT_THREADS / split;
2847 split_info.rpr = mfspr(SPRN_RPR);
2848 split_info.pmmar = mfspr(SPRN_PMMAR);
2849 split_info.ldbar = mfspr(SPRN_LDBAR);
2850 split_info.subcore_size = subcore_size;
2851 } else {
2852 split_info.subcore_size = 1;
2853 if (hpt_on_radix) {
2854
2855 split_info.lpcr_req = vc->lpcr;
2856 split_info.lpidr_req = vc->kvm->arch.lpid;
2857 split_info.host_lpcr = vc->kvm->arch.host_lpcr;
2858 split_info.do_set = 1;
2859 }
2860 }
2861
2862
2863 smp_wmb();
2864 }
2865
2866 for (thr = 0; thr < controlled_threads; ++thr) {
2867 struct paca_struct *paca = paca_ptrs[pcpu + thr];
2868
2869 paca->kvm_hstate.tid = thr;
2870 paca->kvm_hstate.napping = 0;
2871 paca->kvm_hstate.kvm_split_mode = sip;
2872 }
2873
2874
2875 if (cmd_bit) {
2876 unsigned long hid0 = mfspr(SPRN_HID0);
2877
2878 hid0 |= cmd_bit | HID0_POWER8_DYNLPARDIS;
2879 mb();
2880 mtspr(SPRN_HID0, hid0);
2881 isync();
2882 for (;;) {
2883 hid0 = mfspr(SPRN_HID0);
2884 if (hid0 & stat_bit)
2885 break;
2886 cpu_relax();
2887 }
2888 }
2889
2890
2891
2892
2893
2894
2895 if (is_power8) {
2896 unsigned long rwmr_val = RWMR_RPA_P8_8THREAD;
2897 int n_online = atomic_read(&vc->online_count);
2898
2899
2900
2901
2902
2903 if (split == 1 && threads_per_subcore == MAX_SMT_THREADS &&
2904 n_online >= 1 && n_online <= MAX_SMT_THREADS)
2905 rwmr_val = p8_rwmr_values[n_online];
2906 mtspr(SPRN_RWMR, rwmr_val);
2907 }
2908
2909
2910 active = 0;
2911 for (sub = 0; sub < core_info.n_subcores; ++sub) {
2912 thr = is_power8 ? subcore_thread_map[sub] : sub;
2913 thr0_done = false;
2914 active |= 1 << thr;
2915 pvc = core_info.vc[sub];
2916 pvc->pcpu = pcpu + thr;
2917 for_each_runnable_thread(i, vcpu, pvc) {
2918 kvmppc_start_thread(vcpu, pvc);
2919 kvmppc_create_dtl_entry(vcpu, pvc);
2920 trace_kvm_guest_enter(vcpu);
2921 if (!vcpu->arch.ptid)
2922 thr0_done = true;
2923 active |= 1 << (thr + vcpu->arch.ptid);
2924 }
2925
2926
2927
2928
2929 if (!thr0_done)
2930 kvmppc_start_thread(NULL, pvc);
2931 }
2932
2933
2934
2935
2936
2937 smp_mb();
2938
2939
2940
2941
2942
2943
2944
2945
2946 if (cmd_bit || hpt_on_radix) {
2947 split_info.do_nap = 1;
2948 for (thr = 1; thr < threads_per_subcore; ++thr)
2949 if (!(active & (1 << thr)))
2950 kvmppc_ipi_thread(pcpu + thr);
2951 }
2952
2953 vc->vcore_state = VCORE_RUNNING;
2954 preempt_disable();
2955
2956 trace_kvmppc_run_core(vc, 0);
2957
2958 for (sub = 0; sub < core_info.n_subcores; ++sub)
2959 spin_unlock(&core_info.vc[sub]->lock);
2960
2961 if (kvm_is_radix(vc->kvm)) {
2962 int tmp = pcpu;
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974 mtspr(SPRN_LPID, vc->kvm->arch.lpid);
2975 isync();
2976
2977 if (cpu_has_feature(CPU_FTR_ARCH_300))
2978 tmp &= ~0x3UL;
2979
2980 if (cpumask_test_cpu(tmp, &vc->kvm->arch.need_tlb_flush)) {
2981 radix__local_flush_tlb_lpid_guest(vc->kvm->arch.lpid);
2982
2983 cpumask_clear_cpu(tmp, &vc->kvm->arch.need_tlb_flush);
2984 }
2985 }
2986
2987
2988
2989
2990
2991 trace_hardirqs_on();
2992
2993 guest_enter_irqoff();
2994
2995 srcu_idx = srcu_read_lock(&vc->kvm->srcu);
2996
2997 this_cpu_disable_ftrace();
2998
2999 trap = __kvmppc_vcore_entry();
3000
3001 this_cpu_enable_ftrace();
3002
3003 srcu_read_unlock(&vc->kvm->srcu, srcu_idx);
3004
3005 trace_hardirqs_off();
3006 set_irq_happened(trap);
3007
3008 spin_lock(&vc->lock);
3009
3010 vc->vcore_state = VCORE_EXITING;
3011
3012
3013 kvmppc_wait_for_nap(controlled_threads);
3014
3015
3016 if (cmd_bit) {
3017 unsigned long hid0 = mfspr(SPRN_HID0);
3018 unsigned long loops = 0;
3019
3020 hid0 &= ~HID0_POWER8_DYNLPARDIS;
3021 stat_bit = HID0_POWER8_2LPARMODE | HID0_POWER8_4LPARMODE;
3022 mb();
3023 mtspr(SPRN_HID0, hid0);
3024 isync();
3025 for (;;) {
3026 hid0 = mfspr(SPRN_HID0);
3027 if (!(hid0 & stat_bit))
3028 break;
3029 cpu_relax();
3030 ++loops;
3031 }
3032 } else if (hpt_on_radix) {
3033
3034 for (thr = 1; thr < controlled_threads; ++thr) {
3035 struct paca_struct *paca = paca_ptrs[pcpu + thr];
3036
3037 while (paca->kvm_hstate.kvm_split_mode) {
3038 HMT_low();
3039 barrier();
3040 }
3041 HMT_medium();
3042 }
3043 }
3044 split_info.do_nap = 0;
3045
3046 kvmppc_set_host_core(pcpu);
3047
3048 local_irq_enable();
3049 guest_exit();
3050
3051
3052 for (i = 0; i < controlled_threads; ++i) {
3053 kvmppc_release_hwthread(pcpu + i);
3054 if (sip && sip->napped[i])
3055 kvmppc_ipi_thread(pcpu + i);
3056 cpumask_clear_cpu(pcpu + i, &vc->kvm->arch.cpu_in_guest);
3057 }
3058
3059 spin_unlock(&vc->lock);
3060
3061
3062 smp_mb();
3063
3064 preempt_enable();
3065
3066 for (sub = 0; sub < core_info.n_subcores; ++sub) {
3067 pvc = core_info.vc[sub];
3068 post_guest_process(pvc, pvc == vc);
3069 }
3070
3071 spin_lock(&vc->lock);
3072
3073 out:
3074 vc->vcore_state = VCORE_INACTIVE;
3075 trace_kvmppc_run_core(vc, 1);
3076}
3077
3078
3079
3080
3081
3082static void kvmppc_wait_for_exec(struct kvmppc_vcore *vc,
3083 struct kvm_vcpu *vcpu, int wait_state)
3084{
3085 DEFINE_WAIT(wait);
3086
3087 prepare_to_wait(&vcpu->arch.cpu_run, &wait, wait_state);
3088 if (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE) {
3089 spin_unlock(&vc->lock);
3090 schedule();
3091 spin_lock(&vc->lock);
3092 }
3093 finish_wait(&vcpu->arch.cpu_run, &wait);
3094}
3095
3096static void grow_halt_poll_ns(struct kvmppc_vcore *vc)
3097{
3098
3099 if (vc->halt_poll_ns == 0 && halt_poll_ns_grow)
3100 vc->halt_poll_ns = 10000;
3101 else
3102 vc->halt_poll_ns *= halt_poll_ns_grow;
3103}
3104
3105static void shrink_halt_poll_ns(struct kvmppc_vcore *vc)
3106{
3107 if (halt_poll_ns_shrink == 0)
3108 vc->halt_poll_ns = 0;
3109 else
3110 vc->halt_poll_ns /= halt_poll_ns_shrink;
3111}
3112
3113#ifdef CONFIG_KVM_XICS
3114static inline bool xive_interrupt_pending(struct kvm_vcpu *vcpu)
3115{
3116 if (!xive_enabled())
3117 return false;
3118 return vcpu->arch.irq_pending || vcpu->arch.xive_saved_state.pipr <
3119 vcpu->arch.xive_saved_state.cppr;
3120}
3121#else
3122static inline bool xive_interrupt_pending(struct kvm_vcpu *vcpu)
3123{
3124 return false;
3125}
3126#endif
3127
3128static bool kvmppc_vcpu_woken(struct kvm_vcpu *vcpu)
3129{
3130 if (vcpu->arch.pending_exceptions || vcpu->arch.prodded ||
3131 kvmppc_doorbell_pending(vcpu) || xive_interrupt_pending(vcpu))
3132 return true;
3133
3134 return false;
3135}
3136
3137
3138
3139
3140
3141static int kvmppc_vcore_check_block(struct kvmppc_vcore *vc)
3142{
3143 struct kvm_vcpu *vcpu;
3144 int i;
3145
3146 for_each_runnable_thread(i, vcpu, vc) {
3147 if (!vcpu->arch.ceded || kvmppc_vcpu_woken(vcpu))
3148 return 1;
3149 }
3150
3151 return 0;
3152}
3153
3154
3155
3156
3157
3158static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc)
3159{
3160 ktime_t cur, start_poll, start_wait;
3161 int do_sleep = 1;
3162 u64 block_ns;
3163 DECLARE_SWAITQUEUE(wait);
3164
3165
3166 cur = start_poll = ktime_get();
3167 if (vc->halt_poll_ns) {
3168 ktime_t stop = ktime_add_ns(start_poll, vc->halt_poll_ns);
3169 ++vc->runner->stat.halt_attempted_poll;
3170
3171 vc->vcore_state = VCORE_POLLING;
3172 spin_unlock(&vc->lock);
3173
3174 do {
3175 if (kvmppc_vcore_check_block(vc)) {
3176 do_sleep = 0;
3177 break;
3178 }
3179 cur = ktime_get();
3180 } while (single_task_running() && ktime_before(cur, stop));
3181
3182 spin_lock(&vc->lock);
3183 vc->vcore_state = VCORE_INACTIVE;
3184
3185 if (!do_sleep) {
3186 ++vc->runner->stat.halt_successful_poll;
3187 goto out;
3188 }
3189 }
3190
3191 prepare_to_swait(&vc->wq, &wait, TASK_INTERRUPTIBLE);
3192
3193 if (kvmppc_vcore_check_block(vc)) {
3194 finish_swait(&vc->wq, &wait);
3195 do_sleep = 0;
3196
3197 if (vc->halt_poll_ns)
3198 ++vc->runner->stat.halt_successful_poll;
3199 goto out;
3200 }
3201
3202 start_wait = ktime_get();
3203
3204 vc->vcore_state = VCORE_SLEEPING;
3205 trace_kvmppc_vcore_blocked(vc, 0);
3206 spin_unlock(&vc->lock);
3207 schedule();
3208 finish_swait(&vc->wq, &wait);
3209 spin_lock(&vc->lock);
3210 vc->vcore_state = VCORE_INACTIVE;
3211 trace_kvmppc_vcore_blocked(vc, 1);
3212 ++vc->runner->stat.halt_successful_wait;
3213
3214 cur = ktime_get();
3215
3216out:
3217 block_ns = ktime_to_ns(cur) - ktime_to_ns(start_poll);
3218
3219
3220 if (do_sleep) {
3221 vc->runner->stat.halt_wait_ns +=
3222 ktime_to_ns(cur) - ktime_to_ns(start_wait);
3223
3224 if (vc->halt_poll_ns)
3225 vc->runner->stat.halt_poll_fail_ns +=
3226 ktime_to_ns(start_wait) -
3227 ktime_to_ns(start_poll);
3228 } else {
3229
3230 if (vc->halt_poll_ns)
3231 vc->runner->stat.halt_poll_success_ns +=
3232 ktime_to_ns(cur) -
3233 ktime_to_ns(start_poll);
3234 }
3235
3236
3237 if (halt_poll_ns) {
3238 if (block_ns <= vc->halt_poll_ns)
3239 ;
3240
3241 else if (vc->halt_poll_ns && block_ns > halt_poll_ns)
3242 shrink_halt_poll_ns(vc);
3243
3244 else if (vc->halt_poll_ns < halt_poll_ns &&
3245 block_ns < halt_poll_ns)
3246 grow_halt_poll_ns(vc);
3247 if (vc->halt_poll_ns > halt_poll_ns)
3248 vc->halt_poll_ns = halt_poll_ns;
3249 } else
3250 vc->halt_poll_ns = 0;
3251
3252 trace_kvmppc_vcore_wakeup(do_sleep, block_ns);
3253}
3254
3255static int kvmhv_setup_mmu(struct kvm_vcpu *vcpu)
3256{
3257 int r = 0;
3258 struct kvm *kvm = vcpu->kvm;
3259
3260 mutex_lock(&kvm->lock);
3261 if (!kvm->arch.mmu_ready) {
3262 if (!kvm_is_radix(kvm))
3263 r = kvmppc_hv_setup_htab_rma(vcpu);
3264 if (!r) {
3265 if (cpu_has_feature(CPU_FTR_ARCH_300))
3266 kvmppc_setup_partition_table(kvm);
3267 kvm->arch.mmu_ready = 1;
3268 }
3269 }
3270 mutex_unlock(&kvm->lock);
3271 return r;
3272}
3273
3274static int kvmppc_run_vcpu(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
3275{
3276 int n_ceded, i, r;
3277 struct kvmppc_vcore *vc;
3278 struct kvm_vcpu *v;
3279
3280 trace_kvmppc_run_vcpu_enter(vcpu);
3281
3282 kvm_run->exit_reason = 0;
3283 vcpu->arch.ret = RESUME_GUEST;
3284 vcpu->arch.trap = 0;
3285 kvmppc_update_vpas(vcpu);
3286
3287
3288
3289
3290 vc = vcpu->arch.vcore;
3291 spin_lock(&vc->lock);
3292 vcpu->arch.ceded = 0;
3293 vcpu->arch.run_task = current;
3294 vcpu->arch.kvm_run = kvm_run;
3295 vcpu->arch.stolen_logged = vcore_stolen_time(vc, mftb());
3296 vcpu->arch.state = KVMPPC_VCPU_RUNNABLE;
3297 vcpu->arch.busy_preempt = TB_NIL;
3298 WRITE_ONCE(vc->runnable_threads[vcpu->arch.ptid], vcpu);
3299 ++vc->n_runnable;
3300
3301
3302
3303
3304
3305
3306 if (!signal_pending(current)) {
3307 if ((vc->vcore_state == VCORE_PIGGYBACK ||
3308 vc->vcore_state == VCORE_RUNNING) &&
3309 !VCORE_IS_EXITING(vc)) {
3310 kvmppc_create_dtl_entry(vcpu, vc);
3311 kvmppc_start_thread(vcpu, vc);
3312 trace_kvm_guest_enter(vcpu);
3313 } else if (vc->vcore_state == VCORE_SLEEPING) {
3314 swake_up(&vc->wq);
3315 }
3316
3317 }
3318
3319 while (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE &&
3320 !signal_pending(current)) {
3321
3322 if (!vcpu->kvm->arch.mmu_ready) {
3323 spin_unlock(&vc->lock);
3324 r = kvmhv_setup_mmu(vcpu);
3325 spin_lock(&vc->lock);
3326 if (r) {
3327 kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY;
3328 kvm_run->fail_entry.
3329 hardware_entry_failure_reason = 0;
3330 vcpu->arch.ret = r;
3331 break;
3332 }
3333 }
3334
3335 if (vc->vcore_state == VCORE_PREEMPT && vc->runner == NULL)
3336 kvmppc_vcore_end_preempt(vc);
3337
3338 if (vc->vcore_state != VCORE_INACTIVE) {
3339 kvmppc_wait_for_exec(vc, vcpu, TASK_INTERRUPTIBLE);
3340 continue;
3341 }
3342 for_each_runnable_thread(i, v, vc) {
3343 kvmppc_core_prepare_to_enter(v);
3344 if (signal_pending(v->arch.run_task)) {
3345 kvmppc_remove_runnable(vc, v);
3346 v->stat.signal_exits++;
3347 v->arch.kvm_run->exit_reason = KVM_EXIT_INTR;
3348 v->arch.ret = -EINTR;
3349 wake_up(&v->arch.cpu_run);
3350 }
3351 }
3352 if (!vc->n_runnable || vcpu->arch.state != KVMPPC_VCPU_RUNNABLE)
3353 break;
3354 n_ceded = 0;
3355 for_each_runnable_thread(i, v, vc) {
3356 if (!kvmppc_vcpu_woken(v))
3357 n_ceded += v->arch.ceded;
3358 else
3359 v->arch.ceded = 0;
3360 }
3361 vc->runner = vcpu;
3362 if (n_ceded == vc->n_runnable) {
3363 kvmppc_vcore_blocked(vc);
3364 } else if (need_resched()) {
3365 kvmppc_vcore_preempt(vc);
3366
3367 cond_resched_lock(&vc->lock);
3368 if (vc->vcore_state == VCORE_PREEMPT)
3369 kvmppc_vcore_end_preempt(vc);
3370 } else {
3371 kvmppc_run_core(vc);
3372 }
3373 vc->runner = NULL;
3374 }
3375
3376 while (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE &&
3377 (vc->vcore_state == VCORE_RUNNING ||
3378 vc->vcore_state == VCORE_EXITING ||
3379 vc->vcore_state == VCORE_PIGGYBACK))
3380 kvmppc_wait_for_exec(vc, vcpu, TASK_UNINTERRUPTIBLE);
3381
3382 if (vc->vcore_state == VCORE_PREEMPT && vc->runner == NULL)
3383 kvmppc_vcore_end_preempt(vc);
3384
3385 if (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE) {
3386 kvmppc_remove_runnable(vc, vcpu);
3387 vcpu->stat.signal_exits++;
3388 kvm_run->exit_reason = KVM_EXIT_INTR;
3389 vcpu->arch.ret = -EINTR;
3390 }
3391
3392 if (vc->n_runnable && vc->vcore_state == VCORE_INACTIVE) {
3393
3394 i = -1;
3395 v = next_runnable_thread(vc, &i);
3396 wake_up(&v->arch.cpu_run);
3397 }
3398
3399 trace_kvmppc_run_vcpu_exit(vcpu, kvm_run);
3400 spin_unlock(&vc->lock);
3401 return vcpu->arch.ret;
3402}
3403
3404static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)
3405{
3406 int r;
3407 int srcu_idx;
3408 unsigned long ebb_regs[3] = {};
3409 unsigned long user_tar = 0;
3410 unsigned int user_vrsave;
3411 struct kvm *kvm;
3412
3413 if (!vcpu->arch.sane) {
3414 run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
3415 return -EINVAL;
3416 }
3417
3418
3419
3420
3421
3422
3423
3424#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
3425 if (cpu_has_feature(CPU_FTR_TM) && current->thread.regs &&
3426 (current->thread.regs->msr & MSR_TM)) {
3427 if (MSR_TM_ACTIVE(current->thread.regs->msr)) {
3428 run->exit_reason = KVM_EXIT_FAIL_ENTRY;
3429 run->fail_entry.hardware_entry_failure_reason = 0;
3430 return -EINVAL;
3431 }
3432
3433 mtmsr(mfmsr() | MSR_TM);
3434 current->thread.tm_tfhar = mfspr(SPRN_TFHAR);
3435 current->thread.tm_tfiar = mfspr(SPRN_TFIAR);
3436 current->thread.tm_texasr = mfspr(SPRN_TEXASR);
3437 current->thread.regs->msr &= ~MSR_TM;
3438 }
3439#endif
3440
3441
3442
3443
3444
3445 if (!vcpu->arch.online) {
3446 atomic_inc(&vcpu->arch.vcore->online_count);
3447 vcpu->arch.online = 1;
3448 }
3449
3450 kvmppc_core_prepare_to_enter(vcpu);
3451
3452
3453 if (signal_pending(current)) {
3454 run->exit_reason = KVM_EXIT_INTR;
3455 return -EINTR;
3456 }
3457
3458 kvm = vcpu->kvm;
3459 atomic_inc(&kvm->arch.vcpus_running);
3460
3461 smp_mb();
3462
3463 flush_all_to_thread(current);
3464
3465
3466 if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
3467 ebb_regs[0] = mfspr(SPRN_EBBHR);
3468 ebb_regs[1] = mfspr(SPRN_EBBRR);
3469 ebb_regs[2] = mfspr(SPRN_BESCR);
3470 user_tar = mfspr(SPRN_TAR);
3471 }
3472 user_vrsave = mfspr(SPRN_VRSAVE);
3473
3474 vcpu->arch.wqp = &vcpu->arch.vcore->wq;
3475 vcpu->arch.pgdir = current->mm->pgd;
3476 vcpu->arch.state = KVMPPC_VCPU_BUSY_IN_HOST;
3477
3478 do {
3479 r = kvmppc_run_vcpu(run, vcpu);
3480
3481 if (run->exit_reason == KVM_EXIT_PAPR_HCALL &&
3482 !(vcpu->arch.shregs.msr & MSR_PR)) {
3483 trace_kvm_hcall_enter(vcpu);
3484 r = kvmppc_pseries_do_hcall(vcpu);
3485 trace_kvm_hcall_exit(vcpu, r);
3486 kvmppc_core_prepare_to_enter(vcpu);
3487 } else if (r == RESUME_PAGE_FAULT) {
3488 srcu_idx = srcu_read_lock(&kvm->srcu);
3489 r = kvmppc_book3s_hv_page_fault(run, vcpu,
3490 vcpu->arch.fault_dar, vcpu->arch.fault_dsisr);
3491 srcu_read_unlock(&kvm->srcu, srcu_idx);
3492 } else if (r == RESUME_PASSTHROUGH) {
3493 if (WARN_ON(xive_enabled()))
3494 r = H_SUCCESS;
3495 else
3496 r = kvmppc_xics_rm_complete(vcpu, 0);
3497 }
3498 } while (is_kvmppc_resume_guest(r));
3499
3500
3501 if (cpu_has_feature(CPU_FTR_ARCH_207S)) {
3502 mtspr(SPRN_EBBHR, ebb_regs[0]);
3503 mtspr(SPRN_EBBRR, ebb_regs[1]);
3504 mtspr(SPRN_BESCR, ebb_regs[2]);
3505 mtspr(SPRN_TAR, user_tar);
3506 mtspr(SPRN_FSCR, current->thread.fscr);
3507 }
3508 mtspr(SPRN_VRSAVE, user_vrsave);
3509
3510 vcpu->arch.state = KVMPPC_VCPU_NOTREADY;
3511 atomic_dec(&kvm->arch.vcpus_running);
3512 return r;
3513}
3514
3515static void kvmppc_add_seg_page_size(struct kvm_ppc_one_seg_page_size **sps,
3516 int shift, int sllp)
3517{
3518 (*sps)->page_shift = shift;
3519 (*sps)->slb_enc = sllp;
3520 (*sps)->enc[0].page_shift = shift;
3521 (*sps)->enc[0].pte_enc = kvmppc_pgsize_lp_encoding(shift, shift);
3522
3523
3524
3525 if (shift != 24) {
3526 int penc = kvmppc_pgsize_lp_encoding(shift, 24);
3527 if (penc != -1) {
3528 (*sps)->enc[1].page_shift = 24;
3529 (*sps)->enc[1].pte_enc = penc;
3530 }
3531 }
3532 (*sps)++;
3533}
3534
3535static int kvm_vm_ioctl_get_smmu_info_hv(struct kvm *kvm,
3536 struct kvm_ppc_smmu_info *info)
3537{
3538 struct kvm_ppc_one_seg_page_size *sps;
3539
3540
3541
3542
3543
3544
3545 info->data_keys = 32;
3546 info->instr_keys = cpu_has_feature(CPU_FTR_ARCH_207S) ? 32 : 0;
3547
3548
3549 info->flags = KVM_PPC_PAGE_SIZES_REAL | KVM_PPC_1T_SEGMENTS;
3550 info->slb_size = 32;
3551
3552
3553 sps = &info->sps[0];
3554 kvmppc_add_seg_page_size(&sps, 12, 0);
3555 kvmppc_add_seg_page_size(&sps, 16, SLB_VSID_L | SLB_VSID_LP_01);
3556 kvmppc_add_seg_page_size(&sps, 24, SLB_VSID_L);
3557
3558 return 0;
3559}
3560
3561
3562
3563
3564static int kvm_vm_ioctl_get_dirty_log_hv(struct kvm *kvm,
3565 struct kvm_dirty_log *log)
3566{
3567 struct kvm_memslots *slots;
3568 struct kvm_memory_slot *memslot;
3569 int i, r;
3570 unsigned long n;
3571 unsigned long *buf, *p;
3572 struct kvm_vcpu *vcpu;
3573
3574 mutex_lock(&kvm->slots_lock);
3575
3576 r = -EINVAL;
3577 if (log->slot >= KVM_USER_MEM_SLOTS)
3578 goto out;
3579
3580 slots = kvm_memslots(kvm);
3581 memslot = id_to_memslot(slots, log->slot);
3582 r = -ENOENT;
3583 if (!memslot->dirty_bitmap)
3584 goto out;
3585
3586
3587
3588
3589
3590 n = kvm_dirty_bitmap_bytes(memslot);
3591 buf = memslot->dirty_bitmap + n / sizeof(long);
3592 memset(buf, 0, n);
3593
3594 if (kvm_is_radix(kvm))
3595 r = kvmppc_hv_get_dirty_log_radix(kvm, memslot, buf);
3596 else
3597 r = kvmppc_hv_get_dirty_log_hpt(kvm, memslot, buf);
3598 if (r)
3599 goto out;
3600
3601
3602
3603
3604
3605
3606
3607 p = memslot->dirty_bitmap;
3608 for (i = 0; i < n / sizeof(long); ++i)
3609 buf[i] |= xchg(&p[i], 0);
3610
3611
3612
3613 kvm_for_each_vcpu(i, vcpu, kvm) {
3614 spin_lock(&vcpu->arch.vpa_update_lock);
3615 kvmppc_harvest_vpa_dirty(&vcpu->arch.vpa, memslot, buf);
3616 kvmppc_harvest_vpa_dirty(&vcpu->arch.dtl, memslot, buf);
3617 spin_unlock(&vcpu->arch.vpa_update_lock);
3618 }
3619
3620 r = -EFAULT;
3621 if (copy_to_user(log->dirty_bitmap, buf, n))
3622 goto out;
3623
3624 r = 0;
3625out:
3626 mutex_unlock(&kvm->slots_lock);
3627 return r;
3628}
3629
3630static void kvmppc_core_free_memslot_hv(struct kvm_memory_slot *free,
3631 struct kvm_memory_slot *dont)
3632{
3633 if (!dont || free->arch.rmap != dont->arch.rmap) {
3634 vfree(free->arch.rmap);
3635 free->arch.rmap = NULL;
3636 }
3637}
3638
3639static int kvmppc_core_create_memslot_hv(struct kvm_memory_slot *slot,
3640 unsigned long npages)
3641{
3642 slot->arch.rmap = vzalloc(array_size(npages, sizeof(*slot->arch.rmap)));
3643 if (!slot->arch.rmap)
3644 return -ENOMEM;
3645
3646 return 0;
3647}
3648
3649static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm,
3650 struct kvm_memory_slot *memslot,
3651 const struct kvm_userspace_memory_region *mem)
3652{
3653 return 0;
3654}
3655
3656static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm,
3657 const struct kvm_userspace_memory_region *mem,
3658 const struct kvm_memory_slot *old,
3659 const struct kvm_memory_slot *new)
3660{
3661 unsigned long npages = mem->memory_size >> PAGE_SHIFT;
3662
3663
3664
3665
3666
3667
3668
3669 if (npages)
3670 atomic64_inc(&kvm->arch.mmio_update);
3671}
3672
3673
3674
3675
3676
3677void kvmppc_update_lpcr(struct kvm *kvm, unsigned long lpcr, unsigned long mask)
3678{
3679 long int i;
3680 u32 cores_done = 0;
3681
3682 if ((kvm->arch.lpcr & mask) == lpcr)
3683 return;
3684
3685 kvm->arch.lpcr = (kvm->arch.lpcr & ~mask) | lpcr;
3686
3687 for (i = 0; i < KVM_MAX_VCORES; ++i) {
3688 struct kvmppc_vcore *vc = kvm->arch.vcores[i];
3689 if (!vc)
3690 continue;
3691 spin_lock(&vc->lock);
3692 vc->lpcr = (vc->lpcr & ~mask) | lpcr;
3693 spin_unlock(&vc->lock);
3694 if (++cores_done >= kvm->arch.online_vcores)
3695 break;
3696 }
3697}
3698
3699static void kvmppc_mmu_destroy_hv(struct kvm_vcpu *vcpu)
3700{
3701 return;
3702}
3703
3704void kvmppc_setup_partition_table(struct kvm *kvm)
3705{
3706 unsigned long dw0, dw1;
3707
3708 if (!kvm_is_radix(kvm)) {
3709
3710 dw0 = ((kvm->arch.vrma_slb_v & SLB_VSID_L) >> 1) |
3711 ((kvm->arch.vrma_slb_v & SLB_VSID_LP) << 1);
3712
3713 dw0 |= kvm->arch.sdr1;
3714
3715
3716 dw1 = kvm->arch.process_table;
3717 } else {
3718 dw0 = PATB_HR | radix__get_tree_size() |
3719 __pa(kvm->arch.pgtable) | RADIX_PGD_INDEX_SIZE;
3720 dw1 = PATB_GR | kvm->arch.process_table;
3721 }
3722
3723 mmu_partition_table_set_entry(kvm->arch.lpid, dw0, dw1);
3724}
3725
3726
3727
3728
3729
3730static int kvmppc_hv_setup_htab_rma(struct kvm_vcpu *vcpu)
3731{
3732 int err = 0;
3733 struct kvm *kvm = vcpu->kvm;
3734 unsigned long hva;
3735 struct kvm_memory_slot *memslot;
3736 struct vm_area_struct *vma;
3737 unsigned long lpcr = 0, senc;
3738 unsigned long psize, porder;
3739 int srcu_idx;
3740
3741
3742 if (!kvm->arch.hpt.virt) {
3743 int order = KVM_DEFAULT_HPT_ORDER;
3744 struct kvm_hpt_info info;
3745
3746 err = kvmppc_allocate_hpt(&info, order);
3747
3748
3749
3750 while ((err == -ENOMEM) && --order >= PPC_MIN_HPT_ORDER)
3751 err = kvmppc_allocate_hpt(&info, order);
3752
3753 if (err < 0) {
3754 pr_err("KVM: Couldn't alloc HPT\n");
3755 goto out;
3756 }
3757
3758 kvmppc_set_hpt(kvm, &info);
3759 }
3760
3761
3762 srcu_idx = srcu_read_lock(&kvm->srcu);
3763 memslot = gfn_to_memslot(kvm, 0);
3764
3765
3766 err = -EINVAL;
3767 if (!memslot || (memslot->flags & KVM_MEMSLOT_INVALID))
3768 goto out_srcu;
3769
3770
3771 hva = memslot->userspace_addr;
3772 down_read(¤t->mm->mmap_sem);
3773 vma = find_vma(current->mm, hva);
3774 if (!vma || vma->vm_start > hva || (vma->vm_flags & VM_IO))
3775 goto up_out;
3776
3777 psize = vma_kernel_pagesize(vma);
3778
3779 up_read(¤t->mm->mmap_sem);
3780
3781
3782 if (psize >= 0x1000000)
3783 psize = 0x1000000;
3784 else if (psize >= 0x10000)
3785 psize = 0x10000;
3786 else
3787 psize = 0x1000;
3788 porder = __ilog2(psize);
3789
3790 senc = slb_pgsize_encoding(psize);
3791 kvm->arch.vrma_slb_v = senc | SLB_VSID_B_1T |
3792 (VRMA_VSID << SLB_VSID_SHIFT_1T);
3793
3794 kvmppc_map_vrma(vcpu, memslot, porder);
3795
3796
3797 if (!cpu_has_feature(CPU_FTR_ARCH_300)) {
3798
3799 lpcr = senc << (LPCR_VRMASD_SH - 4);
3800 kvmppc_update_lpcr(kvm, lpcr, LPCR_VRMASD);
3801 }
3802
3803
3804 smp_wmb();
3805 err = 0;
3806 out_srcu:
3807 srcu_read_unlock(&kvm->srcu, srcu_idx);
3808 out:
3809 return err;
3810
3811 up_out:
3812 up_read(¤t->mm->mmap_sem);
3813 goto out_srcu;
3814}
3815
3816
3817int kvmppc_switch_mmu_to_hpt(struct kvm *kvm)
3818{
3819 kvmppc_free_radix(kvm);
3820 kvmppc_update_lpcr(kvm, LPCR_VPM1,
3821 LPCR_VPM1 | LPCR_UPRT | LPCR_GTSE | LPCR_HR);
3822 kvmppc_rmap_reset(kvm);
3823 kvm->arch.radix = 0;
3824 kvm->arch.process_table = 0;
3825 return 0;
3826}
3827
3828
3829int kvmppc_switch_mmu_to_radix(struct kvm *kvm)
3830{
3831 int err;
3832
3833 err = kvmppc_init_vm_radix(kvm);
3834 if (err)
3835 return err;
3836
3837 kvmppc_free_hpt(&kvm->arch.hpt);
3838 kvmppc_update_lpcr(kvm, LPCR_UPRT | LPCR_GTSE | LPCR_HR,
3839 LPCR_VPM1 | LPCR_UPRT | LPCR_GTSE | LPCR_HR);
3840 kvm->arch.radix = 1;
3841 return 0;
3842}
3843
3844#ifdef CONFIG_KVM_XICS
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855void kvmppc_alloc_host_rm_ops(void)
3856{
3857 struct kvmppc_host_rm_ops *ops;
3858 unsigned long l_ops;
3859 int cpu, core;
3860 int size;
3861
3862
3863 if (kvmppc_host_rm_ops_hv != NULL)
3864 return;
3865
3866 ops = kzalloc(sizeof(struct kvmppc_host_rm_ops), GFP_KERNEL);
3867 if (!ops)
3868 return;
3869
3870 size = cpu_nr_cores() * sizeof(struct kvmppc_host_rm_core);
3871 ops->rm_core = kzalloc(size, GFP_KERNEL);
3872
3873 if (!ops->rm_core) {
3874 kfree(ops);
3875 return;
3876 }
3877
3878 cpus_read_lock();
3879
3880 for (cpu = 0; cpu < nr_cpu_ids; cpu += threads_per_core) {
3881 if (!cpu_online(cpu))
3882 continue;
3883
3884 core = cpu >> threads_shift;
3885 ops->rm_core[core].rm_state.in_host = 1;
3886 }
3887
3888 ops->vcpu_kick = kvmppc_fast_vcpu_kick_hv;
3889
3890
3891
3892
3893
3894
3895
3896 smp_wmb();
3897 l_ops = (unsigned long) ops;
3898
3899 if (cmpxchg64((unsigned long *)&kvmppc_host_rm_ops_hv, 0, l_ops)) {
3900 cpus_read_unlock();
3901 kfree(ops->rm_core);
3902 kfree(ops);
3903 return;
3904 }
3905
3906 cpuhp_setup_state_nocalls_cpuslocked(CPUHP_KVM_PPC_BOOK3S_PREPARE,
3907 "ppc/kvm_book3s:prepare",
3908 kvmppc_set_host_core,
3909 kvmppc_clear_host_core);
3910 cpus_read_unlock();
3911}
3912
3913void kvmppc_free_host_rm_ops(void)
3914{
3915 if (kvmppc_host_rm_ops_hv) {
3916 cpuhp_remove_state_nocalls(CPUHP_KVM_PPC_BOOK3S_PREPARE);
3917 kfree(kvmppc_host_rm_ops_hv->rm_core);
3918 kfree(kvmppc_host_rm_ops_hv);
3919 kvmppc_host_rm_ops_hv = NULL;
3920 }
3921}
3922#endif
3923
3924static int kvmppc_core_init_vm_hv(struct kvm *kvm)
3925{
3926 unsigned long lpcr, lpid;
3927 char buf[32];
3928 int ret;
3929
3930
3931
3932 lpid = kvmppc_alloc_lpid();
3933 if ((long)lpid < 0)
3934 return -ENOMEM;
3935 kvm->arch.lpid = lpid;
3936
3937 kvmppc_alloc_host_rm_ops();
3938
3939
3940
3941
3942
3943
3944
3945
3946 if (!cpu_has_feature(CPU_FTR_ARCH_300))
3947 cpumask_setall(&kvm->arch.need_tlb_flush);
3948
3949
3950 memcpy(kvm->arch.enabled_hcalls, default_enabled_hcalls,
3951 sizeof(kvm->arch.enabled_hcalls));
3952
3953 if (!cpu_has_feature(CPU_FTR_ARCH_300))
3954 kvm->arch.host_sdr1 = mfspr(SPRN_SDR1);
3955
3956
3957 kvm->arch.host_lpid = mfspr(SPRN_LPID);
3958 kvm->arch.host_lpcr = lpcr = mfspr(SPRN_LPCR);
3959 lpcr &= LPCR_PECE | LPCR_LPES;
3960 lpcr |= (4UL << LPCR_DPFD_SH) | LPCR_HDICE |
3961 LPCR_VPM0 | LPCR_VPM1;
3962 kvm->arch.vrma_slb_v = SLB_VSID_B_1T |
3963 (VRMA_VSID << SLB_VSID_SHIFT_1T);
3964
3965 if (cpu_has_feature(CPU_FTR_ARCH_207S))
3966 lpcr |= LPCR_ONL;
3967
3968
3969
3970
3971
3972
3973
3974 if (cpu_has_feature(CPU_FTR_ARCH_300)) {
3975 lpcr &= ~LPCR_VPM0;
3976 lpcr |= LPCR_HVICE | LPCR_HEIC;
3977
3978
3979
3980
3981
3982 if (xive_enabled())
3983 lpcr |= LPCR_LPES;
3984 }
3985
3986
3987
3988
3989 if (radix_enabled()) {
3990 kvm->arch.radix = 1;
3991 kvm->arch.mmu_ready = 1;
3992 lpcr &= ~LPCR_VPM1;
3993 lpcr |= LPCR_UPRT | LPCR_GTSE | LPCR_HR;
3994 ret = kvmppc_init_vm_radix(kvm);
3995 if (ret) {
3996 kvmppc_free_lpid(kvm->arch.lpid);
3997 return ret;
3998 }
3999 kvmppc_setup_partition_table(kvm);
4000 }
4001
4002 kvm->arch.lpcr = lpcr;
4003
4004
4005 kvm->arch.resize_hpt = NULL;
4006
4007
4008
4009
4010
4011 if (radix_enabled())
4012 kvm->arch.tlb_sets = POWER9_TLB_SETS_RADIX;
4013 else if (cpu_has_feature(CPU_FTR_ARCH_300))
4014 kvm->arch.tlb_sets = POWER9_TLB_SETS_HASH;
4015 else if (cpu_has_feature(CPU_FTR_ARCH_207S))
4016 kvm->arch.tlb_sets = POWER8_TLB_SETS;
4017 else
4018 kvm->arch.tlb_sets = POWER7_TLB_SETS;
4019
4020
4021
4022
4023
4024
4025
4026 if (cpu_has_feature(CPU_FTR_ARCH_300))
4027 kvm->arch.threads_indep = indep_threads_mode;
4028 if (!kvm->arch.threads_indep)
4029 kvm_hv_vm_activated();
4030
4031
4032
4033
4034
4035
4036
4037
4038 if (!cpu_has_feature(CPU_FTR_ARCH_300))
4039 kvm->arch.smt_mode = threads_per_subcore;
4040 else
4041 kvm->arch.smt_mode = 1;
4042 kvm->arch.emul_smt_mode = 1;
4043
4044
4045
4046
4047 snprintf(buf, sizeof(buf), "vm%d", current->pid);
4048 kvm->arch.debugfs_dir = debugfs_create_dir(buf, kvm_debugfs_dir);
4049 kvmppc_mmu_debugfs_init(kvm);
4050
4051 return 0;
4052}
4053
4054static void kvmppc_free_vcores(struct kvm *kvm)
4055{
4056 long int i;
4057
4058 for (i = 0; i < KVM_MAX_VCORES; ++i)
4059 kfree(kvm->arch.vcores[i]);
4060 kvm->arch.online_vcores = 0;
4061}
4062
4063static void kvmppc_core_destroy_vm_hv(struct kvm *kvm)
4064{
4065 debugfs_remove_recursive(kvm->arch.debugfs_dir);
4066
4067 if (!kvm->arch.threads_indep)
4068 kvm_hv_vm_deactivated();
4069
4070 kvmppc_free_vcores(kvm);
4071
4072 kvmppc_free_lpid(kvm->arch.lpid);
4073
4074 if (kvm_is_radix(kvm))
4075 kvmppc_free_radix(kvm);
4076 else
4077 kvmppc_free_hpt(&kvm->arch.hpt);
4078
4079 kvmppc_free_pimap(kvm);
4080}
4081
4082
4083static int kvmppc_core_emulate_op_hv(struct kvm_run *run, struct kvm_vcpu *vcpu,
4084 unsigned int inst, int *advance)
4085{
4086 return EMULATE_FAIL;
4087}
4088
4089static int kvmppc_core_emulate_mtspr_hv(struct kvm_vcpu *vcpu, int sprn,
4090 ulong spr_val)
4091{
4092 return EMULATE_FAIL;
4093}
4094
4095static int kvmppc_core_emulate_mfspr_hv(struct kvm_vcpu *vcpu, int sprn,
4096 ulong *spr_val)
4097{
4098 return EMULATE_FAIL;
4099}
4100
4101static int kvmppc_core_check_processor_compat_hv(void)
4102{
4103 if (!cpu_has_feature(CPU_FTR_HVMODE) ||
4104 !cpu_has_feature(CPU_FTR_ARCH_206))
4105 return -EIO;
4106
4107 return 0;
4108}
4109
4110#ifdef CONFIG_KVM_XICS
4111
4112void kvmppc_free_pimap(struct kvm *kvm)
4113{
4114 kfree(kvm->arch.pimap);
4115}
4116
4117static struct kvmppc_passthru_irqmap *kvmppc_alloc_pimap(void)
4118{
4119 return kzalloc(sizeof(struct kvmppc_passthru_irqmap), GFP_KERNEL);
4120}
4121
4122static int kvmppc_set_passthru_irq(struct kvm *kvm, int host_irq, int guest_gsi)
4123{
4124 struct irq_desc *desc;
4125 struct kvmppc_irq_map *irq_map;
4126 struct kvmppc_passthru_irqmap *pimap;
4127 struct irq_chip *chip;
4128 int i, rc = 0;
4129
4130 if (!kvm_irq_bypass)
4131 return 1;
4132
4133 desc = irq_to_desc(host_irq);
4134 if (!desc)
4135 return -EIO;
4136
4137 mutex_lock(&kvm->lock);
4138
4139 pimap = kvm->arch.pimap;
4140 if (pimap == NULL) {
4141
4142 pimap = kvmppc_alloc_pimap();
4143 if (pimap == NULL) {
4144 mutex_unlock(&kvm->lock);
4145 return -ENOMEM;
4146 }
4147 kvm->arch.pimap = pimap;
4148 }
4149
4150
4151
4152
4153
4154
4155 chip = irq_data_get_irq_chip(&desc->irq_data);
4156 if (!chip || !(is_pnv_opal_msi(chip) || is_xive_irq(chip))) {
4157 pr_warn("kvmppc_set_passthru_irq_hv: Could not assign IRQ map for (%d,%d)\n",
4158 host_irq, guest_gsi);
4159 mutex_unlock(&kvm->lock);
4160 return -ENOENT;
4161 }
4162
4163
4164
4165
4166
4167
4168 for (i = 0; i < pimap->n_mapped; i++) {
4169 if (guest_gsi == pimap->mapped[i].v_hwirq) {
4170 if (pimap->mapped[i].r_hwirq) {
4171 mutex_unlock(&kvm->lock);
4172 return -EINVAL;
4173 }
4174 break;
4175 }
4176 }
4177
4178 if (i == KVMPPC_PIRQ_MAPPED) {
4179 mutex_unlock(&kvm->lock);
4180 return -EAGAIN;
4181 }
4182
4183 irq_map = &pimap->mapped[i];
4184
4185 irq_map->v_hwirq = guest_gsi;
4186 irq_map->desc = desc;
4187
4188
4189
4190
4191
4192 smp_wmb();
4193 irq_map->r_hwirq = desc->irq_data.hwirq;
4194
4195 if (i == pimap->n_mapped)
4196 pimap->n_mapped++;
4197
4198 if (xive_enabled())
4199 rc = kvmppc_xive_set_mapped(kvm, guest_gsi, desc);
4200 else
4201 kvmppc_xics_set_mapped(kvm, guest_gsi, desc->irq_data.hwirq);
4202 if (rc)
4203 irq_map->r_hwirq = 0;
4204
4205 mutex_unlock(&kvm->lock);
4206
4207 return 0;
4208}
4209
4210static int kvmppc_clr_passthru_irq(struct kvm *kvm, int host_irq, int guest_gsi)
4211{
4212 struct irq_desc *desc;
4213 struct kvmppc_passthru_irqmap *pimap;
4214 int i, rc = 0;
4215
4216 if (!kvm_irq_bypass)
4217 return 0;
4218
4219 desc = irq_to_desc(host_irq);
4220 if (!desc)
4221 return -EIO;
4222
4223 mutex_lock(&kvm->lock);
4224 if (!kvm->arch.pimap)
4225 goto unlock;
4226
4227 pimap = kvm->arch.pimap;
4228
4229 for (i = 0; i < pimap->n_mapped; i++) {
4230 if (guest_gsi == pimap->mapped[i].v_hwirq)
4231 break;
4232 }
4233
4234 if (i == pimap->n_mapped) {
4235 mutex_unlock(&kvm->lock);
4236 return -ENODEV;
4237 }
4238
4239 if (xive_enabled())
4240 rc = kvmppc_xive_clr_mapped(kvm, guest_gsi, pimap->mapped[i].desc);
4241 else
4242 kvmppc_xics_clr_mapped(kvm, guest_gsi, pimap->mapped[i].r_hwirq);
4243
4244
4245 pimap->mapped[i].r_hwirq = 0;
4246
4247
4248
4249
4250
4251 unlock:
4252 mutex_unlock(&kvm->lock);
4253 return rc;
4254}
4255
4256static int kvmppc_irq_bypass_add_producer_hv(struct irq_bypass_consumer *cons,
4257 struct irq_bypass_producer *prod)
4258{
4259 int ret = 0;
4260 struct kvm_kernel_irqfd *irqfd =
4261 container_of(cons, struct kvm_kernel_irqfd, consumer);
4262
4263 irqfd->producer = prod;
4264
4265 ret = kvmppc_set_passthru_irq(irqfd->kvm, prod->irq, irqfd->gsi);
4266 if (ret)
4267 pr_info("kvmppc_set_passthru_irq (irq %d, gsi %d) fails: %d\n",
4268 prod->irq, irqfd->gsi, ret);
4269
4270 return ret;
4271}
4272
4273static void kvmppc_irq_bypass_del_producer_hv(struct irq_bypass_consumer *cons,
4274 struct irq_bypass_producer *prod)
4275{
4276 int ret;
4277 struct kvm_kernel_irqfd *irqfd =
4278 container_of(cons, struct kvm_kernel_irqfd, consumer);
4279
4280 irqfd->producer = NULL;
4281
4282
4283
4284
4285
4286
4287 ret = kvmppc_clr_passthru_irq(irqfd->kvm, prod->irq, irqfd->gsi);
4288 if (ret)
4289 pr_warn("kvmppc_clr_passthru_irq (irq %d, gsi %d) fails: %d\n",
4290 prod->irq, irqfd->gsi, ret);
4291}
4292#endif
4293
4294static long kvm_arch_vm_ioctl_hv(struct file *filp,
4295 unsigned int ioctl, unsigned long arg)
4296{
4297 struct kvm *kvm __maybe_unused = filp->private_data;
4298 void __user *argp = (void __user *)arg;
4299 long r;
4300
4301 switch (ioctl) {
4302
4303 case KVM_PPC_ALLOCATE_HTAB: {
4304 u32 htab_order;
4305
4306 r = -EFAULT;
4307 if (get_user(htab_order, (u32 __user *)argp))
4308 break;
4309 r = kvmppc_alloc_reset_hpt(kvm, htab_order);
4310 if (r)
4311 break;
4312 r = 0;
4313 break;
4314 }
4315
4316 case KVM_PPC_GET_HTAB_FD: {
4317 struct kvm_get_htab_fd ghf;
4318
4319 r = -EFAULT;
4320 if (copy_from_user(&ghf, argp, sizeof(ghf)))
4321 break;
4322 r = kvm_vm_ioctl_get_htab_fd(kvm, &ghf);
4323 break;
4324 }
4325
4326 case KVM_PPC_RESIZE_HPT_PREPARE: {
4327 struct kvm_ppc_resize_hpt rhpt;
4328
4329 r = -EFAULT;
4330 if (copy_from_user(&rhpt, argp, sizeof(rhpt)))
4331 break;
4332
4333 r = kvm_vm_ioctl_resize_hpt_prepare(kvm, &rhpt);
4334 break;
4335 }
4336
4337 case KVM_PPC_RESIZE_HPT_COMMIT: {
4338 struct kvm_ppc_resize_hpt rhpt;
4339
4340 r = -EFAULT;
4341 if (copy_from_user(&rhpt, argp, sizeof(rhpt)))
4342 break;
4343
4344 r = kvm_vm_ioctl_resize_hpt_commit(kvm, &rhpt);
4345 break;
4346 }
4347
4348 default:
4349 r = -ENOTTY;
4350 }
4351
4352 return r;
4353}
4354
4355
4356
4357
4358
4359
4360
4361static unsigned int default_hcall_list[] = {
4362 H_REMOVE,
4363 H_ENTER,
4364 H_READ,
4365 H_PROTECT,
4366 H_BULK_REMOVE,
4367 H_GET_TCE,
4368 H_PUT_TCE,
4369 H_SET_DABR,
4370 H_SET_XDABR,
4371 H_CEDE,
4372 H_PROD,
4373 H_CONFER,
4374 H_REGISTER_VPA,
4375#ifdef CONFIG_KVM_XICS
4376 H_EOI,
4377 H_CPPR,
4378 H_IPI,
4379 H_IPOLL,
4380 H_XIRR,
4381 H_XIRR_X,
4382#endif
4383 0
4384};
4385
4386static void init_default_hcalls(void)
4387{
4388 int i;
4389 unsigned int hcall;
4390
4391 for (i = 0; default_hcall_list[i]; ++i) {
4392 hcall = default_hcall_list[i];
4393 WARN_ON(!kvmppc_hcall_impl_hv(hcall));
4394 __set_bit(hcall / 4, default_enabled_hcalls);
4395 }
4396}
4397
4398static int kvmhv_configure_mmu(struct kvm *kvm, struct kvm_ppc_mmuv3_cfg *cfg)
4399{
4400 unsigned long lpcr;
4401 int radix;
4402 int err;
4403
4404
4405 if (!cpu_has_feature(CPU_FTR_ARCH_300))
4406 return -ENODEV;
4407
4408
4409 if (cfg->flags & ~(KVM_PPC_MMUV3_RADIX | KVM_PPC_MMUV3_GTSE))
4410 return -EINVAL;
4411
4412
4413 radix = !!(cfg->flags & KVM_PPC_MMUV3_RADIX);
4414 if (!!(cfg->process_table & PATB_GR) != radix)
4415 return -EINVAL;
4416
4417
4418 if ((cfg->process_table & PRTS_MASK) > 24)
4419 return -EINVAL;
4420
4421
4422 if (radix && !radix_enabled())
4423 return -EINVAL;
4424
4425 mutex_lock(&kvm->lock);
4426 if (radix != kvm_is_radix(kvm)) {
4427 if (kvm->arch.mmu_ready) {
4428 kvm->arch.mmu_ready = 0;
4429
4430 smp_mb();
4431 if (atomic_read(&kvm->arch.vcpus_running)) {
4432 kvm->arch.mmu_ready = 1;
4433 err = -EBUSY;
4434 goto out_unlock;
4435 }
4436 }
4437 if (radix)
4438 err = kvmppc_switch_mmu_to_radix(kvm);
4439 else
4440 err = kvmppc_switch_mmu_to_hpt(kvm);
4441 if (err)
4442 goto out_unlock;
4443 }
4444
4445 kvm->arch.process_table = cfg->process_table;
4446 kvmppc_setup_partition_table(kvm);
4447
4448 lpcr = (cfg->flags & KVM_PPC_MMUV3_GTSE) ? LPCR_GTSE : 0;
4449 kvmppc_update_lpcr(kvm, lpcr, LPCR_GTSE);
4450 err = 0;
4451
4452 out_unlock:
4453 mutex_unlock(&kvm->lock);
4454 return err;
4455}
4456
4457static struct kvmppc_ops kvm_ops_hv = {
4458 .get_sregs = kvm_arch_vcpu_ioctl_get_sregs_hv,
4459 .set_sregs = kvm_arch_vcpu_ioctl_set_sregs_hv,
4460 .get_one_reg = kvmppc_get_one_reg_hv,
4461 .set_one_reg = kvmppc_set_one_reg_hv,
4462 .vcpu_load = kvmppc_core_vcpu_load_hv,
4463 .vcpu_put = kvmppc_core_vcpu_put_hv,
4464 .set_msr = kvmppc_set_msr_hv,
4465 .vcpu_run = kvmppc_vcpu_run_hv,
4466 .vcpu_create = kvmppc_core_vcpu_create_hv,
4467 .vcpu_free = kvmppc_core_vcpu_free_hv,
4468 .check_requests = kvmppc_core_check_requests_hv,
4469 .get_dirty_log = kvm_vm_ioctl_get_dirty_log_hv,
4470 .flush_memslot = kvmppc_core_flush_memslot_hv,
4471 .prepare_memory_region = kvmppc_core_prepare_memory_region_hv,
4472 .commit_memory_region = kvmppc_core_commit_memory_region_hv,
4473 .unmap_hva_range = kvm_unmap_hva_range_hv,
4474 .age_hva = kvm_age_hva_hv,
4475 .test_age_hva = kvm_test_age_hva_hv,
4476 .set_spte_hva = kvm_set_spte_hva_hv,
4477 .mmu_destroy = kvmppc_mmu_destroy_hv,
4478 .free_memslot = kvmppc_core_free_memslot_hv,
4479 .create_memslot = kvmppc_core_create_memslot_hv,
4480 .init_vm = kvmppc_core_init_vm_hv,
4481 .destroy_vm = kvmppc_core_destroy_vm_hv,
4482 .get_smmu_info = kvm_vm_ioctl_get_smmu_info_hv,
4483 .emulate_op = kvmppc_core_emulate_op_hv,
4484 .emulate_mtspr = kvmppc_core_emulate_mtspr_hv,
4485 .emulate_mfspr = kvmppc_core_emulate_mfspr_hv,
4486 .fast_vcpu_kick = kvmppc_fast_vcpu_kick_hv,
4487 .arch_vm_ioctl = kvm_arch_vm_ioctl_hv,
4488 .hcall_implemented = kvmppc_hcall_impl_hv,
4489#ifdef CONFIG_KVM_XICS
4490 .irq_bypass_add_producer = kvmppc_irq_bypass_add_producer_hv,
4491 .irq_bypass_del_producer = kvmppc_irq_bypass_del_producer_hv,
4492#endif
4493 .configure_mmu = kvmhv_configure_mmu,
4494 .get_rmmu_info = kvmhv_get_rmmu_info,
4495 .set_smt_mode = kvmhv_set_smt_mode,
4496};
4497
4498static int kvm_init_subcore_bitmap(void)
4499{
4500 int i, j;
4501 int nr_cores = cpu_nr_cores();
4502 struct sibling_subcore_state *sibling_subcore_state;
4503
4504 for (i = 0; i < nr_cores; i++) {
4505 int first_cpu = i * threads_per_core;
4506 int node = cpu_to_node(first_cpu);
4507
4508
4509 if (paca_ptrs[first_cpu]->sibling_subcore_state)
4510 continue;
4511
4512 sibling_subcore_state =
4513 kmalloc_node(sizeof(struct sibling_subcore_state),
4514 GFP_KERNEL, node);
4515 if (!sibling_subcore_state)
4516 return -ENOMEM;
4517
4518 memset(sibling_subcore_state, 0,
4519 sizeof(struct sibling_subcore_state));
4520
4521 for (j = 0; j < threads_per_core; j++) {
4522 int cpu = first_cpu + j;
4523
4524 paca_ptrs[cpu]->sibling_subcore_state =
4525 sibling_subcore_state;
4526 }
4527 }
4528 return 0;
4529}
4530
4531static int kvmppc_radix_possible(void)
4532{
4533 return cpu_has_feature(CPU_FTR_ARCH_300) && radix_enabled();
4534}
4535
4536static int kvmppc_book3s_init_hv(void)
4537{
4538 int r;
4539
4540
4541
4542 r = kvmppc_core_check_processor_compat_hv();
4543 if (r < 0)
4544 return -ENODEV;
4545
4546 r = kvm_init_subcore_bitmap();
4547 if (r)
4548 return r;
4549
4550
4551
4552
4553
4554
4555#ifdef CONFIG_SMP
4556 if (!xive_enabled() && !local_paca->kvm_hstate.xics_phys) {
4557 struct device_node *np;
4558
4559 np = of_find_compatible_node(NULL, NULL, "ibm,opal-intc");
4560 if (!np) {
4561 pr_err("KVM-HV: Cannot determine method for accessing XICS\n");
4562 return -ENODEV;
4563 }
4564 }
4565#endif
4566
4567 kvm_ops_hv.owner = THIS_MODULE;
4568 kvmppc_hv_ops = &kvm_ops_hv;
4569
4570 init_default_hcalls();
4571
4572 init_vcore_lists();
4573
4574 r = kvmppc_mmu_hv_init();
4575 if (r)
4576 return r;
4577
4578 if (kvmppc_radix_possible())
4579 r = kvmppc_radix_init();
4580
4581
4582
4583
4584
4585 if (cpu_has_feature(CPU_FTR_ARCH_300)) {
4586 unsigned int pvr = mfspr(SPRN_PVR);
4587 if ((pvr >> 16) == PVR_POWER9 &&
4588 (((pvr & 0xe000) == 0 && (pvr & 0xfff) < 0x202) ||
4589 ((pvr & 0xe000) == 0x2000 && (pvr & 0xfff) < 0x101)))
4590 no_mixing_hpt_and_radix = true;
4591 }
4592
4593 return r;
4594}
4595
4596static void kvmppc_book3s_exit_hv(void)
4597{
4598 kvmppc_free_host_rm_ops();
4599 if (kvmppc_radix_possible())
4600 kvmppc_radix_exit();
4601 kvmppc_hv_ops = NULL;
4602}
4603
4604module_init(kvmppc_book3s_init_hv);
4605module_exit(kvmppc_book3s_exit_hv);
4606MODULE_LICENSE("GPL");
4607MODULE_ALIAS_MISCDEV(KVM_MINOR);
4608MODULE_ALIAS("devname:kvm");
4609