Merge tag 'ipvs-fixes-for-v4.12' of http://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / arch / powerpc / kvm / powerpc.c
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License, version 2, as
4  * published by the Free Software Foundation.
5  *
6  * This program is distributed in the hope that it will be useful,
7  * but WITHOUT ANY WARRANTY; without even the implied warranty of
8  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9  * GNU General Public License for more details.
10  *
11  * You should have received a copy of the GNU General Public License
12  * along with this program; if not, write to the Free Software
13  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
14  *
15  * Copyright IBM Corp. 2007
16  *
17  * Authors: Hollis Blanchard <hollisb@us.ibm.com>
18  *          Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
19  */
20
21 #include <linux/errno.h>
22 #include <linux/err.h>
23 #include <linux/kvm_host.h>
24 #include <linux/vmalloc.h>
25 #include <linux/hrtimer.h>
26 #include <linux/sched/signal.h>
27 #include <linux/fs.h>
28 #include <linux/slab.h>
29 #include <linux/file.h>
30 #include <linux/module.h>
31 #include <linux/irqbypass.h>
32 #include <linux/kvm_irqfd.h>
33 #include <asm/cputable.h>
34 #include <linux/uaccess.h>
35 #include <asm/kvm_ppc.h>
36 #include <asm/tlbflush.h>
37 #include <asm/cputhreads.h>
38 #include <asm/irqflags.h>
39 #include <asm/iommu.h>
40 #include <asm/switch_to.h>
41 #include "timing.h"
42 #include "irq.h"
43 #include "../mm/mmu_decl.h"
44
45 #define CREATE_TRACE_POINTS
46 #include "trace.h"
47
48 struct kvmppc_ops *kvmppc_hv_ops;
49 EXPORT_SYMBOL_GPL(kvmppc_hv_ops);
50 struct kvmppc_ops *kvmppc_pr_ops;
51 EXPORT_SYMBOL_GPL(kvmppc_pr_ops);
52
53
54 int kvm_arch_vcpu_runnable(struct kvm_vcpu *v)
55 {
56         return !!(v->arch.pending_exceptions) ||
57                v->requests;
58 }
59
60 int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
61 {
62         return 1;
63 }
64
65 /*
66  * Common checks before entering the guest world.  Call with interrupts
67  * disabled.
68  *
69  * returns:
70  *
71  * == 1 if we're ready to go into guest state
72  * <= 0 if we need to go back to the host with return value
73  */
74 int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu)
75 {
76         int r;
77
78         WARN_ON(irqs_disabled());
79         hard_irq_disable();
80
81         while (true) {
82                 if (need_resched()) {
83                         local_irq_enable();
84                         cond_resched();
85                         hard_irq_disable();
86                         continue;
87                 }
88
89                 if (signal_pending(current)) {
90                         kvmppc_account_exit(vcpu, SIGNAL_EXITS);
91                         vcpu->run->exit_reason = KVM_EXIT_INTR;
92                         r = -EINTR;
93                         break;
94                 }
95
96                 vcpu->mode = IN_GUEST_MODE;
97
98                 /*
99                  * Reading vcpu->requests must happen after setting vcpu->mode,
100                  * so we don't miss a request because the requester sees
101                  * OUTSIDE_GUEST_MODE and assumes we'll be checking requests
102                  * before next entering the guest (and thus doesn't IPI).
103                  * This also orders the write to mode from any reads
104                  * to the page tables done while the VCPU is running.
105                  * Please see the comment in kvm_flush_remote_tlbs.
106                  */
107                 smp_mb();
108
109                 if (vcpu->requests) {
110                         /* Make sure we process requests preemptable */
111                         local_irq_enable();
112                         trace_kvm_check_requests(vcpu);
113                         r = kvmppc_core_check_requests(vcpu);
114                         hard_irq_disable();
115                         if (r > 0)
116                                 continue;
117                         break;
118                 }
119
120                 if (kvmppc_core_prepare_to_enter(vcpu)) {
121                         /* interrupts got enabled in between, so we
122                            are back at square 1 */
123                         continue;
124                 }
125
126                 guest_enter_irqoff();
127                 return 1;
128         }
129
130         /* return to host */
131         local_irq_enable();
132         return r;
133 }
134 EXPORT_SYMBOL_GPL(kvmppc_prepare_to_enter);
135
136 #if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE)
137 static void kvmppc_swab_shared(struct kvm_vcpu *vcpu)
138 {
139         struct kvm_vcpu_arch_shared *shared = vcpu->arch.shared;
140         int i;
141
142         shared->sprg0 = swab64(shared->sprg0);
143         shared->sprg1 = swab64(shared->sprg1);
144         shared->sprg2 = swab64(shared->sprg2);
145         shared->sprg3 = swab64(shared->sprg3);
146         shared->srr0 = swab64(shared->srr0);
147         shared->srr1 = swab64(shared->srr1);
148         shared->dar = swab64(shared->dar);
149         shared->msr = swab64(shared->msr);
150         shared->dsisr = swab32(shared->dsisr);
151         shared->int_pending = swab32(shared->int_pending);
152         for (i = 0; i < ARRAY_SIZE(shared->sr); i++)
153                 shared->sr[i] = swab32(shared->sr[i]);
154 }
155 #endif
156
157 int kvmppc_kvm_pv(struct kvm_vcpu *vcpu)
158 {
159         int nr = kvmppc_get_gpr(vcpu, 11);
160         int r;
161         unsigned long __maybe_unused param1 = kvmppc_get_gpr(vcpu, 3);
162         unsigned long __maybe_unused param2 = kvmppc_get_gpr(vcpu, 4);
163         unsigned long __maybe_unused param3 = kvmppc_get_gpr(vcpu, 5);
164         unsigned long __maybe_unused param4 = kvmppc_get_gpr(vcpu, 6);
165         unsigned long r2 = 0;
166
167         if (!(kvmppc_get_msr(vcpu) & MSR_SF)) {
168                 /* 32 bit mode */
169                 param1 &= 0xffffffff;
170                 param2 &= 0xffffffff;
171                 param3 &= 0xffffffff;
172                 param4 &= 0xffffffff;
173         }
174
175         switch (nr) {
176         case KVM_HCALL_TOKEN(KVM_HC_PPC_MAP_MAGIC_PAGE):
177         {
178 #if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE)
179                 /* Book3S can be little endian, find it out here */
180                 int shared_big_endian = true;
181                 if (vcpu->arch.intr_msr & MSR_LE)
182                         shared_big_endian = false;
183                 if (shared_big_endian != vcpu->arch.shared_big_endian)
184                         kvmppc_swab_shared(vcpu);
185                 vcpu->arch.shared_big_endian = shared_big_endian;
186 #endif
187
188                 if (!(param2 & MAGIC_PAGE_FLAG_NOT_MAPPED_NX)) {
189                         /*
190                          * Older versions of the Linux magic page code had
191                          * a bug where they would map their trampoline code
192                          * NX. If that's the case, remove !PR NX capability.
193                          */
194                         vcpu->arch.disable_kernel_nx = true;
195                         kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
196                 }
197
198                 vcpu->arch.magic_page_pa = param1 & ~0xfffULL;
199                 vcpu->arch.magic_page_ea = param2 & ~0xfffULL;
200
201 #ifdef CONFIG_PPC_64K_PAGES
202                 /*
203                  * Make sure our 4k magic page is in the same window of a 64k
204                  * page within the guest and within the host's page.
205                  */
206                 if ((vcpu->arch.magic_page_pa & 0xf000) !=
207                     ((ulong)vcpu->arch.shared & 0xf000)) {
208                         void *old_shared = vcpu->arch.shared;
209                         ulong shared = (ulong)vcpu->arch.shared;
210                         void *new_shared;
211
212                         shared &= PAGE_MASK;
213                         shared |= vcpu->arch.magic_page_pa & 0xf000;
214                         new_shared = (void*)shared;
215                         memcpy(new_shared, old_shared, 0x1000);
216                         vcpu->arch.shared = new_shared;
217                 }
218 #endif
219
220                 r2 = KVM_MAGIC_FEAT_SR | KVM_MAGIC_FEAT_MAS0_TO_SPRG7;
221
222                 r = EV_SUCCESS;
223                 break;
224         }
225         case KVM_HCALL_TOKEN(KVM_HC_FEATURES):
226                 r = EV_SUCCESS;
227 #if defined(CONFIG_PPC_BOOK3S) || defined(CONFIG_KVM_E500V2)
228                 r2 |= (1 << KVM_FEATURE_MAGIC_PAGE);
229 #endif
230
231                 /* Second return value is in r4 */
232                 break;
233         case EV_HCALL_TOKEN(EV_IDLE):
234                 r = EV_SUCCESS;
235                 kvm_vcpu_block(vcpu);
236                 kvm_clear_request(KVM_REQ_UNHALT, vcpu);
237                 break;
238         default:
239                 r = EV_UNIMPLEMENTED;
240                 break;
241         }
242
243         kvmppc_set_gpr(vcpu, 4, r2);
244
245         return r;
246 }
247 EXPORT_SYMBOL_GPL(kvmppc_kvm_pv);
248
249 int kvmppc_sanity_check(struct kvm_vcpu *vcpu)
250 {
251         int r = false;
252
253         /* We have to know what CPU to virtualize */
254         if (!vcpu->arch.pvr)
255                 goto out;
256
257         /* PAPR only works with book3s_64 */
258         if ((vcpu->arch.cpu_type != KVM_CPU_3S_64) && vcpu->arch.papr_enabled)
259                 goto out;
260
261         /* HV KVM can only do PAPR mode for now */
262         if (!vcpu->arch.papr_enabled && is_kvmppc_hv_enabled(vcpu->kvm))
263                 goto out;
264
265 #ifdef CONFIG_KVM_BOOKE_HV
266         if (!cpu_has_feature(CPU_FTR_EMB_HV))
267                 goto out;
268 #endif
269
270         r = true;
271
272 out:
273         vcpu->arch.sane = r;
274         return r ? 0 : -EINVAL;
275 }
276 EXPORT_SYMBOL_GPL(kvmppc_sanity_check);
277
278 int kvmppc_emulate_mmio(struct kvm_run *run, struct kvm_vcpu *vcpu)
279 {
280         enum emulation_result er;
281         int r;
282
283         er = kvmppc_emulate_loadstore(vcpu);
284         switch (er) {
285         case EMULATE_DONE:
286                 /* Future optimization: only reload non-volatiles if they were
287                  * actually modified. */
288                 r = RESUME_GUEST_NV;
289                 break;
290         case EMULATE_AGAIN:
291                 r = RESUME_GUEST;
292                 break;
293         case EMULATE_DO_MMIO:
294                 run->exit_reason = KVM_EXIT_MMIO;
295                 /* We must reload nonvolatiles because "update" load/store
296                  * instructions modify register state. */
297                 /* Future optimization: only reload non-volatiles if they were
298                  * actually modified. */
299                 r = RESUME_HOST_NV;
300                 break;
301         case EMULATE_FAIL:
302         {
303                 u32 last_inst;
304
305                 kvmppc_get_last_inst(vcpu, INST_GENERIC, &last_inst);
306                 /* XXX Deliver Program interrupt to guest. */
307                 pr_emerg("%s: emulation failed (%08x)\n", __func__, last_inst);
308                 r = RESUME_HOST;
309                 break;
310         }
311         default:
312                 WARN_ON(1);
313                 r = RESUME_GUEST;
314         }
315
316         return r;
317 }
318 EXPORT_SYMBOL_GPL(kvmppc_emulate_mmio);
319
320 int kvmppc_st(struct kvm_vcpu *vcpu, ulong *eaddr, int size, void *ptr,
321               bool data)
322 {
323         ulong mp_pa = vcpu->arch.magic_page_pa & KVM_PAM & PAGE_MASK;
324         struct kvmppc_pte pte;
325         int r;
326
327         vcpu->stat.st++;
328
329         r = kvmppc_xlate(vcpu, *eaddr, data ? XLATE_DATA : XLATE_INST,
330                          XLATE_WRITE, &pte);
331         if (r < 0)
332                 return r;
333
334         *eaddr = pte.raddr;
335
336         if (!pte.may_write)
337                 return -EPERM;
338
339         /* Magic page override */
340         if (kvmppc_supports_magic_page(vcpu) && mp_pa &&
341             ((pte.raddr & KVM_PAM & PAGE_MASK) == mp_pa) &&
342             !(kvmppc_get_msr(vcpu) & MSR_PR)) {
343                 void *magic = vcpu->arch.shared;
344                 magic += pte.eaddr & 0xfff;
345                 memcpy(magic, ptr, size);
346                 return EMULATE_DONE;
347         }
348
349         if (kvm_write_guest(vcpu->kvm, pte.raddr, ptr, size))
350                 return EMULATE_DO_MMIO;
351
352         return EMULATE_DONE;
353 }
354 EXPORT_SYMBOL_GPL(kvmppc_st);
355
356 int kvmppc_ld(struct kvm_vcpu *vcpu, ulong *eaddr, int size, void *ptr,
357                       bool data)
358 {
359         ulong mp_pa = vcpu->arch.magic_page_pa & KVM_PAM & PAGE_MASK;
360         struct kvmppc_pte pte;
361         int rc;
362
363         vcpu->stat.ld++;
364
365         rc = kvmppc_xlate(vcpu, *eaddr, data ? XLATE_DATA : XLATE_INST,
366                           XLATE_READ, &pte);
367         if (rc)
368                 return rc;
369
370         *eaddr = pte.raddr;
371
372         if (!pte.may_read)
373                 return -EPERM;
374
375         if (!data && !pte.may_execute)
376                 return -ENOEXEC;
377
378         /* Magic page override */
379         if (kvmppc_supports_magic_page(vcpu) && mp_pa &&
380             ((pte.raddr & KVM_PAM & PAGE_MASK) == mp_pa) &&
381             !(kvmppc_get_msr(vcpu) & MSR_PR)) {
382                 void *magic = vcpu->arch.shared;
383                 magic += pte.eaddr & 0xfff;
384                 memcpy(ptr, magic, size);
385                 return EMULATE_DONE;
386         }
387
388         if (kvm_read_guest(vcpu->kvm, pte.raddr, ptr, size))
389                 return EMULATE_DO_MMIO;
390
391         return EMULATE_DONE;
392 }
393 EXPORT_SYMBOL_GPL(kvmppc_ld);
394
395 int kvm_arch_hardware_enable(void)
396 {
397         return 0;
398 }
399
400 int kvm_arch_hardware_setup(void)
401 {
402         return 0;
403 }
404
405 void kvm_arch_check_processor_compat(void *rtn)
406 {
407         *(int *)rtn = kvmppc_core_check_processor_compat();
408 }
409
410 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
411 {
412         struct kvmppc_ops *kvm_ops = NULL;
413         /*
414          * if we have both HV and PR enabled, default is HV
415          */
416         if (type == 0) {
417                 if (kvmppc_hv_ops)
418                         kvm_ops = kvmppc_hv_ops;
419                 else
420                         kvm_ops = kvmppc_pr_ops;
421                 if (!kvm_ops)
422                         goto err_out;
423         } else  if (type == KVM_VM_PPC_HV) {
424                 if (!kvmppc_hv_ops)
425                         goto err_out;
426                 kvm_ops = kvmppc_hv_ops;
427         } else if (type == KVM_VM_PPC_PR) {
428                 if (!kvmppc_pr_ops)
429                         goto err_out;
430                 kvm_ops = kvmppc_pr_ops;
431         } else
432                 goto err_out;
433
434         if (kvm_ops->owner && !try_module_get(kvm_ops->owner))
435                 return -ENOENT;
436
437         kvm->arch.kvm_ops = kvm_ops;
438         return kvmppc_core_init_vm(kvm);
439 err_out:
440         return -EINVAL;
441 }
442
443 bool kvm_arch_has_vcpu_debugfs(void)
444 {
445         return false;
446 }
447
448 int kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu)
449 {
450         return 0;
451 }
452
453 void kvm_arch_destroy_vm(struct kvm *kvm)
454 {
455         unsigned int i;
456         struct kvm_vcpu *vcpu;
457
458 #ifdef CONFIG_KVM_XICS
459         /*
460          * We call kick_all_cpus_sync() to ensure that all
461          * CPUs have executed any pending IPIs before we
462          * continue and free VCPUs structures below.
463          */
464         if (is_kvmppc_hv_enabled(kvm))
465                 kick_all_cpus_sync();
466 #endif
467
468         kvm_for_each_vcpu(i, vcpu, kvm)
469                 kvm_arch_vcpu_free(vcpu);
470
471         mutex_lock(&kvm->lock);
472         for (i = 0; i < atomic_read(&kvm->online_vcpus); i++)
473                 kvm->vcpus[i] = NULL;
474
475         atomic_set(&kvm->online_vcpus, 0);
476
477         kvmppc_core_destroy_vm(kvm);
478
479         mutex_unlock(&kvm->lock);
480
481         /* drop the module reference */
482         module_put(kvm->arch.kvm_ops->owner);
483 }
484
485 int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
486 {
487         int r;
488         /* Assume we're using HV mode when the HV module is loaded */
489         int hv_enabled = kvmppc_hv_ops ? 1 : 0;
490
491         if (kvm) {
492                 /*
493                  * Hooray - we know which VM type we're running on. Depend on
494                  * that rather than the guess above.
495                  */
496                 hv_enabled = is_kvmppc_hv_enabled(kvm);
497         }
498
499         switch (ext) {
500 #ifdef CONFIG_BOOKE
501         case KVM_CAP_PPC_BOOKE_SREGS:
502         case KVM_CAP_PPC_BOOKE_WATCHDOG:
503         case KVM_CAP_PPC_EPR:
504 #else
505         case KVM_CAP_PPC_SEGSTATE:
506         case KVM_CAP_PPC_HIOR:
507         case KVM_CAP_PPC_PAPR:
508 #endif
509         case KVM_CAP_PPC_UNSET_IRQ:
510         case KVM_CAP_PPC_IRQ_LEVEL:
511         case KVM_CAP_ENABLE_CAP:
512         case KVM_CAP_ENABLE_CAP_VM:
513         case KVM_CAP_ONE_REG:
514         case KVM_CAP_IOEVENTFD:
515         case KVM_CAP_DEVICE_CTRL:
516         case KVM_CAP_IMMEDIATE_EXIT:
517                 r = 1;
518                 break;
519         case KVM_CAP_PPC_PAIRED_SINGLES:
520         case KVM_CAP_PPC_OSI:
521         case KVM_CAP_PPC_GET_PVINFO:
522 #if defined(CONFIG_KVM_E500V2) || defined(CONFIG_KVM_E500MC)
523         case KVM_CAP_SW_TLB:
524 #endif
525                 /* We support this only for PR */
526                 r = !hv_enabled;
527                 break;
528 #ifdef CONFIG_KVM_MPIC
529         case KVM_CAP_IRQ_MPIC:
530                 r = 1;
531                 break;
532 #endif
533
534 #ifdef CONFIG_PPC_BOOK3S_64
535         case KVM_CAP_SPAPR_TCE:
536         case KVM_CAP_SPAPR_TCE_64:
537                 /* fallthrough */
538         case KVM_CAP_SPAPR_TCE_VFIO:
539         case KVM_CAP_PPC_RTAS:
540         case KVM_CAP_PPC_FIXUP_HCALL:
541         case KVM_CAP_PPC_ENABLE_HCALL:
542 #ifdef CONFIG_KVM_XICS
543         case KVM_CAP_IRQ_XICS:
544 #endif
545                 r = 1;
546                 break;
547
548         case KVM_CAP_PPC_ALLOC_HTAB:
549                 r = hv_enabled;
550                 break;
551 #endif /* CONFIG_PPC_BOOK3S_64 */
552 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
553         case KVM_CAP_PPC_SMT:
554                 r = 0;
555                 if (hv_enabled) {
556                         if (cpu_has_feature(CPU_FTR_ARCH_300))
557                                 r = 1;
558                         else
559                                 r = threads_per_subcore;
560                 }
561                 break;
562         case KVM_CAP_PPC_RMA:
563                 r = 0;
564                 break;
565         case KVM_CAP_PPC_HWRNG:
566                 r = kvmppc_hwrng_present();
567                 break;
568         case KVM_CAP_PPC_MMU_RADIX:
569                 r = !!(hv_enabled && radix_enabled());
570                 break;
571         case KVM_CAP_PPC_MMU_HASH_V3:
572                 r = !!(hv_enabled && !radix_enabled() &&
573                        cpu_has_feature(CPU_FTR_ARCH_300));
574                 break;
575 #endif
576         case KVM_CAP_SYNC_MMU:
577 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
578                 r = hv_enabled;
579 #elif defined(KVM_ARCH_WANT_MMU_NOTIFIER)
580                 r = 1;
581 #else
582                 r = 0;
583 #endif
584                 break;
585 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
586         case KVM_CAP_PPC_HTAB_FD:
587                 r = hv_enabled;
588                 break;
589 #endif
590         case KVM_CAP_NR_VCPUS:
591                 /*
592                  * Recommending a number of CPUs is somewhat arbitrary; we
593                  * return the number of present CPUs for -HV (since a host
594                  * will have secondary threads "offline"), and for other KVM
595                  * implementations just count online CPUs.
596                  */
597                 if (hv_enabled)
598                         r = num_present_cpus();
599                 else
600                         r = num_online_cpus();
601                 break;
602         case KVM_CAP_NR_MEMSLOTS:
603                 r = KVM_USER_MEM_SLOTS;
604                 break;
605         case KVM_CAP_MAX_VCPUS:
606                 r = KVM_MAX_VCPUS;
607                 break;
608 #ifdef CONFIG_PPC_BOOK3S_64
609         case KVM_CAP_PPC_GET_SMMU_INFO:
610                 r = 1;
611                 break;
612         case KVM_CAP_SPAPR_MULTITCE:
613                 r = 1;
614                 break;
615         case KVM_CAP_SPAPR_RESIZE_HPT:
616                 /* Disable this on POWER9 until code handles new HPTE format */
617                 r = !!hv_enabled && !cpu_has_feature(CPU_FTR_ARCH_300);
618                 break;
619 #endif
620         case KVM_CAP_PPC_HTM:
621                 r = cpu_has_feature(CPU_FTR_TM_COMP) &&
622                     is_kvmppc_hv_enabled(kvm);
623                 break;
624         default:
625                 r = 0;
626                 break;
627         }
628         return r;
629
630 }
631
632 long kvm_arch_dev_ioctl(struct file *filp,
633                         unsigned int ioctl, unsigned long arg)
634 {
635         return -EINVAL;
636 }
637
638 void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,
639                            struct kvm_memory_slot *dont)
640 {
641         kvmppc_core_free_memslot(kvm, free, dont);
642 }
643
644 int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
645                             unsigned long npages)
646 {
647         return kvmppc_core_create_memslot(kvm, slot, npages);
648 }
649
650 int kvm_arch_prepare_memory_region(struct kvm *kvm,
651                                    struct kvm_memory_slot *memslot,
652                                    const struct kvm_userspace_memory_region *mem,
653                                    enum kvm_mr_change change)
654 {
655         return kvmppc_core_prepare_memory_region(kvm, memslot, mem);
656 }
657
658 void kvm_arch_commit_memory_region(struct kvm *kvm,
659                                    const struct kvm_userspace_memory_region *mem,
660                                    const struct kvm_memory_slot *old,
661                                    const struct kvm_memory_slot *new,
662                                    enum kvm_mr_change change)
663 {
664         kvmppc_core_commit_memory_region(kvm, mem, old, new);
665 }
666
667 void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
668                                    struct kvm_memory_slot *slot)
669 {
670         kvmppc_core_flush_memslot(kvm, slot);
671 }
672
673 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id)
674 {
675         struct kvm_vcpu *vcpu;
676         vcpu = kvmppc_core_vcpu_create(kvm, id);
677         if (!IS_ERR(vcpu)) {
678                 vcpu->arch.wqp = &vcpu->wq;
679                 kvmppc_create_vcpu_debugfs(vcpu, id);
680         }
681         return vcpu;
682 }
683
684 void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
685 {
686 }
687
688 void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu)
689 {
690         /* Make sure we're not using the vcpu anymore */
691         hrtimer_cancel(&vcpu->arch.dec_timer);
692
693         kvmppc_remove_vcpu_debugfs(vcpu);
694
695         switch (vcpu->arch.irq_type) {
696         case KVMPPC_IRQ_MPIC:
697                 kvmppc_mpic_disconnect_vcpu(vcpu->arch.mpic, vcpu);
698                 break;
699         case KVMPPC_IRQ_XICS:
700                 kvmppc_xics_free_icp(vcpu);
701                 break;
702         }
703
704         kvmppc_core_vcpu_free(vcpu);
705 }
706
707 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
708 {
709         kvm_arch_vcpu_free(vcpu);
710 }
711
712 int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
713 {
714         return kvmppc_core_pending_dec(vcpu);
715 }
716
717 static enum hrtimer_restart kvmppc_decrementer_wakeup(struct hrtimer *timer)
718 {
719         struct kvm_vcpu *vcpu;
720
721         vcpu = container_of(timer, struct kvm_vcpu, arch.dec_timer);
722         kvmppc_decrementer_func(vcpu);
723
724         return HRTIMER_NORESTART;
725 }
726
727 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
728 {
729         int ret;
730
731         hrtimer_init(&vcpu->arch.dec_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
732         vcpu->arch.dec_timer.function = kvmppc_decrementer_wakeup;
733         vcpu->arch.dec_expires = ~(u64)0;
734
735 #ifdef CONFIG_KVM_EXIT_TIMING
736         mutex_init(&vcpu->arch.exit_timing_lock);
737 #endif
738         ret = kvmppc_subarch_vcpu_init(vcpu);
739         return ret;
740 }
741
742 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
743 {
744         kvmppc_mmu_destroy(vcpu);
745         kvmppc_subarch_vcpu_uninit(vcpu);
746 }
747
748 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
749 {
750 #ifdef CONFIG_BOOKE
751         /*
752          * vrsave (formerly usprg0) isn't used by Linux, but may
753          * be used by the guest.
754          *
755          * On non-booke this is associated with Altivec and
756          * is handled by code in book3s.c.
757          */
758         mtspr(SPRN_VRSAVE, vcpu->arch.vrsave);
759 #endif
760         kvmppc_core_vcpu_load(vcpu, cpu);
761 }
762
763 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
764 {
765         kvmppc_core_vcpu_put(vcpu);
766 #ifdef CONFIG_BOOKE
767         vcpu->arch.vrsave = mfspr(SPRN_VRSAVE);
768 #endif
769 }
770
771 /*
772  * irq_bypass_add_producer and irq_bypass_del_producer are only
773  * useful if the architecture supports PCI passthrough.
774  * irq_bypass_stop and irq_bypass_start are not needed and so
775  * kvm_ops are not defined for them.
776  */
777 bool kvm_arch_has_irq_bypass(void)
778 {
779         return ((kvmppc_hv_ops && kvmppc_hv_ops->irq_bypass_add_producer) ||
780                 (kvmppc_pr_ops && kvmppc_pr_ops->irq_bypass_add_producer));
781 }
782
783 int kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *cons,
784                                      struct irq_bypass_producer *prod)
785 {
786         struct kvm_kernel_irqfd *irqfd =
787                 container_of(cons, struct kvm_kernel_irqfd, consumer);
788         struct kvm *kvm = irqfd->kvm;
789
790         if (kvm->arch.kvm_ops->irq_bypass_add_producer)
791                 return kvm->arch.kvm_ops->irq_bypass_add_producer(cons, prod);
792
793         return 0;
794 }
795
796 void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *cons,
797                                       struct irq_bypass_producer *prod)
798 {
799         struct kvm_kernel_irqfd *irqfd =
800                 container_of(cons, struct kvm_kernel_irqfd, consumer);
801         struct kvm *kvm = irqfd->kvm;
802
803         if (kvm->arch.kvm_ops->irq_bypass_del_producer)
804                 kvm->arch.kvm_ops->irq_bypass_del_producer(cons, prod);
805 }
806
807 #ifdef CONFIG_VSX
808 static inline int kvmppc_get_vsr_dword_offset(int index)
809 {
810         int offset;
811
812         if ((index != 0) && (index != 1))
813                 return -1;
814
815 #ifdef __BIG_ENDIAN
816         offset =  index;
817 #else
818         offset = 1 - index;
819 #endif
820
821         return offset;
822 }
823
824 static inline int kvmppc_get_vsr_word_offset(int index)
825 {
826         int offset;
827
828         if ((index > 3) || (index < 0))
829                 return -1;
830
831 #ifdef __BIG_ENDIAN
832         offset = index;
833 #else
834         offset = 3 - index;
835 #endif
836         return offset;
837 }
838
839 static inline void kvmppc_set_vsr_dword(struct kvm_vcpu *vcpu,
840         u64 gpr)
841 {
842         union kvmppc_one_reg val;
843         int offset = kvmppc_get_vsr_dword_offset(vcpu->arch.mmio_vsx_offset);
844         int index = vcpu->arch.io_gpr & KVM_MMIO_REG_MASK;
845
846         if (offset == -1)
847                 return;
848
849         if (vcpu->arch.mmio_vsx_tx_sx_enabled) {
850                 val.vval = VCPU_VSX_VR(vcpu, index);
851                 val.vsxval[offset] = gpr;
852                 VCPU_VSX_VR(vcpu, index) = val.vval;
853         } else {
854                 VCPU_VSX_FPR(vcpu, index, offset) = gpr;
855         }
856 }
857
858 static inline void kvmppc_set_vsr_dword_dump(struct kvm_vcpu *vcpu,
859         u64 gpr)
860 {
861         union kvmppc_one_reg val;
862         int index = vcpu->arch.io_gpr & KVM_MMIO_REG_MASK;
863
864         if (vcpu->arch.mmio_vsx_tx_sx_enabled) {
865                 val.vval = VCPU_VSX_VR(vcpu, index);
866                 val.vsxval[0] = gpr;
867                 val.vsxval[1] = gpr;
868                 VCPU_VSX_VR(vcpu, index) = val.vval;
869         } else {
870                 VCPU_VSX_FPR(vcpu, index, 0) = gpr;
871                 VCPU_VSX_FPR(vcpu, index, 1) = gpr;
872         }
873 }
874
875 static inline void kvmppc_set_vsr_word(struct kvm_vcpu *vcpu,
876         u32 gpr32)
877 {
878         union kvmppc_one_reg val;
879         int offset = kvmppc_get_vsr_word_offset(vcpu->arch.mmio_vsx_offset);
880         int index = vcpu->arch.io_gpr & KVM_MMIO_REG_MASK;
881         int dword_offset, word_offset;
882
883         if (offset == -1)
884                 return;
885
886         if (vcpu->arch.mmio_vsx_tx_sx_enabled) {
887                 val.vval = VCPU_VSX_VR(vcpu, index);
888                 val.vsx32val[offset] = gpr32;
889                 VCPU_VSX_VR(vcpu, index) = val.vval;
890         } else {
891                 dword_offset = offset / 2;
892                 word_offset = offset % 2;
893                 val.vsxval[0] = VCPU_VSX_FPR(vcpu, index, dword_offset);
894                 val.vsx32val[word_offset] = gpr32;
895                 VCPU_VSX_FPR(vcpu, index, dword_offset) = val.vsxval[0];
896         }
897 }
898 #endif /* CONFIG_VSX */
899
900 #ifdef CONFIG_PPC_FPU
901 static inline u64 sp_to_dp(u32 fprs)
902 {
903         u64 fprd;
904
905         preempt_disable();
906         enable_kernel_fp();
907         asm ("lfs%U1%X1 0,%1; stfd%U0%X0 0,%0" : "=m" (fprd) : "m" (fprs)
908              : "fr0");
909         preempt_enable();
910         return fprd;
911 }
912
913 static inline u32 dp_to_sp(u64 fprd)
914 {
915         u32 fprs;
916
917         preempt_disable();
918         enable_kernel_fp();
919         asm ("lfd%U1%X1 0,%1; stfs%U0%X0 0,%0" : "=m" (fprs) : "m" (fprd)
920              : "fr0");
921         preempt_enable();
922         return fprs;
923 }
924
925 #else
926 #define sp_to_dp(x)     (x)
927 #define dp_to_sp(x)     (x)
928 #endif /* CONFIG_PPC_FPU */
929
930 static void kvmppc_complete_mmio_load(struct kvm_vcpu *vcpu,
931                                       struct kvm_run *run)
932 {
933         u64 uninitialized_var(gpr);
934
935         if (run->mmio.len > sizeof(gpr)) {
936                 printk(KERN_ERR "bad MMIO length: %d\n", run->mmio.len);
937                 return;
938         }
939
940         if (!vcpu->arch.mmio_host_swabbed) {
941                 switch (run->mmio.len) {
942                 case 8: gpr = *(u64 *)run->mmio.data; break;
943                 case 4: gpr = *(u32 *)run->mmio.data; break;
944                 case 2: gpr = *(u16 *)run->mmio.data; break;
945                 case 1: gpr = *(u8 *)run->mmio.data; break;
946                 }
947         } else {
948                 switch (run->mmio.len) {
949                 case 8: gpr = swab64(*(u64 *)run->mmio.data); break;
950                 case 4: gpr = swab32(*(u32 *)run->mmio.data); break;
951                 case 2: gpr = swab16(*(u16 *)run->mmio.data); break;
952                 case 1: gpr = *(u8 *)run->mmio.data; break;
953                 }
954         }
955
956         /* conversion between single and double precision */
957         if ((vcpu->arch.mmio_sp64_extend) && (run->mmio.len == 4))
958                 gpr = sp_to_dp(gpr);
959
960         if (vcpu->arch.mmio_sign_extend) {
961                 switch (run->mmio.len) {
962 #ifdef CONFIG_PPC64
963                 case 4:
964                         gpr = (s64)(s32)gpr;
965                         break;
966 #endif
967                 case 2:
968                         gpr = (s64)(s16)gpr;
969                         break;
970                 case 1:
971                         gpr = (s64)(s8)gpr;
972                         break;
973                 }
974         }
975
976         switch (vcpu->arch.io_gpr & KVM_MMIO_REG_EXT_MASK) {
977         case KVM_MMIO_REG_GPR:
978                 kvmppc_set_gpr(vcpu, vcpu->arch.io_gpr, gpr);
979                 break;
980         case KVM_MMIO_REG_FPR:
981                 VCPU_FPR(vcpu, vcpu->arch.io_gpr & KVM_MMIO_REG_MASK) = gpr;
982                 break;
983 #ifdef CONFIG_PPC_BOOK3S
984         case KVM_MMIO_REG_QPR:
985                 vcpu->arch.qpr[vcpu->arch.io_gpr & KVM_MMIO_REG_MASK] = gpr;
986                 break;
987         case KVM_MMIO_REG_FQPR:
988                 VCPU_FPR(vcpu, vcpu->arch.io_gpr & KVM_MMIO_REG_MASK) = gpr;
989                 vcpu->arch.qpr[vcpu->arch.io_gpr & KVM_MMIO_REG_MASK] = gpr;
990                 break;
991 #endif
992 #ifdef CONFIG_VSX
993         case KVM_MMIO_REG_VSX:
994                 if (vcpu->arch.mmio_vsx_copy_type == KVMPPC_VSX_COPY_DWORD)
995                         kvmppc_set_vsr_dword(vcpu, gpr);
996                 else if (vcpu->arch.mmio_vsx_copy_type == KVMPPC_VSX_COPY_WORD)
997                         kvmppc_set_vsr_word(vcpu, gpr);
998                 else if (vcpu->arch.mmio_vsx_copy_type ==
999                                 KVMPPC_VSX_COPY_DWORD_LOAD_DUMP)
1000                         kvmppc_set_vsr_dword_dump(vcpu, gpr);
1001                 break;
1002 #endif
1003         default:
1004                 BUG();
1005         }
1006 }
1007
1008 static int __kvmppc_handle_load(struct kvm_run *run, struct kvm_vcpu *vcpu,
1009                                 unsigned int rt, unsigned int bytes,
1010                                 int is_default_endian, int sign_extend)
1011 {
1012         int idx, ret;
1013         bool host_swabbed;
1014
1015         /* Pity C doesn't have a logical XOR operator */
1016         if (kvmppc_need_byteswap(vcpu)) {
1017                 host_swabbed = is_default_endian;
1018         } else {
1019                 host_swabbed = !is_default_endian;
1020         }
1021
1022         if (bytes > sizeof(run->mmio.data)) {
1023                 printk(KERN_ERR "%s: bad MMIO length: %d\n", __func__,
1024                        run->mmio.len);
1025         }
1026
1027         run->mmio.phys_addr = vcpu->arch.paddr_accessed;
1028         run->mmio.len = bytes;
1029         run->mmio.is_write = 0;
1030
1031         vcpu->arch.io_gpr = rt;
1032         vcpu->arch.mmio_host_swabbed = host_swabbed;
1033         vcpu->mmio_needed = 1;
1034         vcpu->mmio_is_write = 0;
1035         vcpu->arch.mmio_sign_extend = sign_extend;
1036
1037         idx = srcu_read_lock(&vcpu->kvm->srcu);
1038
1039         ret = kvm_io_bus_read(vcpu, KVM_MMIO_BUS, run->mmio.phys_addr,
1040                               bytes, &run->mmio.data);
1041
1042         srcu_read_unlock(&vcpu->kvm->srcu, idx);
1043
1044         if (!ret) {
1045                 kvmppc_complete_mmio_load(vcpu, run);
1046                 vcpu->mmio_needed = 0;
1047                 return EMULATE_DONE;
1048         }
1049
1050         return EMULATE_DO_MMIO;
1051 }
1052
1053 int kvmppc_handle_load(struct kvm_run *run, struct kvm_vcpu *vcpu,
1054                        unsigned int rt, unsigned int bytes,
1055                        int is_default_endian)
1056 {
1057         return __kvmppc_handle_load(run, vcpu, rt, bytes, is_default_endian, 0);
1058 }
1059 EXPORT_SYMBOL_GPL(kvmppc_handle_load);
1060
1061 /* Same as above, but sign extends */
1062 int kvmppc_handle_loads(struct kvm_run *run, struct kvm_vcpu *vcpu,
1063                         unsigned int rt, unsigned int bytes,
1064                         int is_default_endian)
1065 {
1066         return __kvmppc_handle_load(run, vcpu, rt, bytes, is_default_endian, 1);
1067 }
1068
1069 #ifdef CONFIG_VSX
1070 int kvmppc_handle_vsx_load(struct kvm_run *run, struct kvm_vcpu *vcpu,
1071                         unsigned int rt, unsigned int bytes,
1072                         int is_default_endian, int mmio_sign_extend)
1073 {
1074         enum emulation_result emulated = EMULATE_DONE;
1075
1076         /* Currently, mmio_vsx_copy_nums only allowed to be less than 4 */
1077         if ( (vcpu->arch.mmio_vsx_copy_nums > 4) ||
1078                 (vcpu->arch.mmio_vsx_copy_nums < 0) ) {
1079                 return EMULATE_FAIL;
1080         }
1081
1082         while (vcpu->arch.mmio_vsx_copy_nums) {
1083                 emulated = __kvmppc_handle_load(run, vcpu, rt, bytes,
1084                         is_default_endian, mmio_sign_extend);
1085
1086                 if (emulated != EMULATE_DONE)
1087                         break;
1088
1089                 vcpu->arch.paddr_accessed += run->mmio.len;
1090
1091                 vcpu->arch.mmio_vsx_copy_nums--;
1092                 vcpu->arch.mmio_vsx_offset++;
1093         }
1094         return emulated;
1095 }
1096 #endif /* CONFIG_VSX */
1097
1098 int kvmppc_handle_store(struct kvm_run *run, struct kvm_vcpu *vcpu,
1099                         u64 val, unsigned int bytes, int is_default_endian)
1100 {
1101         void *data = run->mmio.data;
1102         int idx, ret;
1103         bool host_swabbed;
1104
1105         /* Pity C doesn't have a logical XOR operator */
1106         if (kvmppc_need_byteswap(vcpu)) {
1107                 host_swabbed = is_default_endian;
1108         } else {
1109                 host_swabbed = !is_default_endian;
1110         }
1111
1112         if (bytes > sizeof(run->mmio.data)) {
1113                 printk(KERN_ERR "%s: bad MMIO length: %d\n", __func__,
1114                        run->mmio.len);
1115         }
1116
1117         run->mmio.phys_addr = vcpu->arch.paddr_accessed;
1118         run->mmio.len = bytes;
1119         run->mmio.is_write = 1;
1120         vcpu->mmio_needed = 1;
1121         vcpu->mmio_is_write = 1;
1122
1123         if ((vcpu->arch.mmio_sp64_extend) && (bytes == 4))
1124                 val = dp_to_sp(val);
1125
1126         /* Store the value at the lowest bytes in 'data'. */
1127         if (!host_swabbed) {
1128                 switch (bytes) {
1129                 case 8: *(u64 *)data = val; break;
1130                 case 4: *(u32 *)data = val; break;
1131                 case 2: *(u16 *)data = val; break;
1132                 case 1: *(u8  *)data = val; break;
1133                 }
1134         } else {
1135                 switch (bytes) {
1136                 case 8: *(u64 *)data = swab64(val); break;
1137                 case 4: *(u32 *)data = swab32(val); break;
1138                 case 2: *(u16 *)data = swab16(val); break;
1139                 case 1: *(u8  *)data = val; break;
1140                 }
1141         }
1142
1143         idx = srcu_read_lock(&vcpu->kvm->srcu);
1144
1145         ret = kvm_io_bus_write(vcpu, KVM_MMIO_BUS, run->mmio.phys_addr,
1146                                bytes, &run->mmio.data);
1147
1148         srcu_read_unlock(&vcpu->kvm->srcu, idx);
1149
1150         if (!ret) {
1151                 vcpu->mmio_needed = 0;
1152                 return EMULATE_DONE;
1153         }
1154
1155         return EMULATE_DO_MMIO;
1156 }
1157 EXPORT_SYMBOL_GPL(kvmppc_handle_store);
1158
1159 #ifdef CONFIG_VSX
1160 static inline int kvmppc_get_vsr_data(struct kvm_vcpu *vcpu, int rs, u64 *val)
1161 {
1162         u32 dword_offset, word_offset;
1163         union kvmppc_one_reg reg;
1164         int vsx_offset = 0;
1165         int copy_type = vcpu->arch.mmio_vsx_copy_type;
1166         int result = 0;
1167
1168         switch (copy_type) {
1169         case KVMPPC_VSX_COPY_DWORD:
1170                 vsx_offset =
1171                         kvmppc_get_vsr_dword_offset(vcpu->arch.mmio_vsx_offset);
1172
1173                 if (vsx_offset == -1) {
1174                         result = -1;
1175                         break;
1176                 }
1177
1178                 if (!vcpu->arch.mmio_vsx_tx_sx_enabled) {
1179                         *val = VCPU_VSX_FPR(vcpu, rs, vsx_offset);
1180                 } else {
1181                         reg.vval = VCPU_VSX_VR(vcpu, rs);
1182                         *val = reg.vsxval[vsx_offset];
1183                 }
1184                 break;
1185
1186         case KVMPPC_VSX_COPY_WORD:
1187                 vsx_offset =
1188                         kvmppc_get_vsr_word_offset(vcpu->arch.mmio_vsx_offset);
1189
1190                 if (vsx_offset == -1) {
1191                         result = -1;
1192                         break;
1193                 }
1194
1195                 if (!vcpu->arch.mmio_vsx_tx_sx_enabled) {
1196                         dword_offset = vsx_offset / 2;
1197                         word_offset = vsx_offset % 2;
1198                         reg.vsxval[0] = VCPU_VSX_FPR(vcpu, rs, dword_offset);
1199                         *val = reg.vsx32val[word_offset];
1200                 } else {
1201                         reg.vval = VCPU_VSX_VR(vcpu, rs);
1202                         *val = reg.vsx32val[vsx_offset];
1203                 }
1204                 break;
1205
1206         default:
1207                 result = -1;
1208                 break;
1209         }
1210
1211         return result;
1212 }
1213
1214 int kvmppc_handle_vsx_store(struct kvm_run *run, struct kvm_vcpu *vcpu,
1215                         int rs, unsigned int bytes, int is_default_endian)
1216 {
1217         u64 val;
1218         enum emulation_result emulated = EMULATE_DONE;
1219
1220         vcpu->arch.io_gpr = rs;
1221
1222         /* Currently, mmio_vsx_copy_nums only allowed to be less than 4 */
1223         if ( (vcpu->arch.mmio_vsx_copy_nums > 4) ||
1224                 (vcpu->arch.mmio_vsx_copy_nums < 0) ) {
1225                 return EMULATE_FAIL;
1226         }
1227
1228         while (vcpu->arch.mmio_vsx_copy_nums) {
1229                 if (kvmppc_get_vsr_data(vcpu, rs, &val) == -1)
1230                         return EMULATE_FAIL;
1231
1232                 emulated = kvmppc_handle_store(run, vcpu,
1233                          val, bytes, is_default_endian);
1234
1235                 if (emulated != EMULATE_DONE)
1236                         break;
1237
1238                 vcpu->arch.paddr_accessed += run->mmio.len;
1239
1240                 vcpu->arch.mmio_vsx_copy_nums--;
1241                 vcpu->arch.mmio_vsx_offset++;
1242         }
1243
1244         return emulated;
1245 }
1246
1247 static int kvmppc_emulate_mmio_vsx_loadstore(struct kvm_vcpu *vcpu,
1248                         struct kvm_run *run)
1249 {
1250         enum emulation_result emulated = EMULATE_FAIL;
1251         int r;
1252
1253         vcpu->arch.paddr_accessed += run->mmio.len;
1254
1255         if (!vcpu->mmio_is_write) {
1256                 emulated = kvmppc_handle_vsx_load(run, vcpu, vcpu->arch.io_gpr,
1257                          run->mmio.len, 1, vcpu->arch.mmio_sign_extend);
1258         } else {
1259                 emulated = kvmppc_handle_vsx_store(run, vcpu,
1260                          vcpu->arch.io_gpr, run->mmio.len, 1);
1261         }
1262
1263         switch (emulated) {
1264         case EMULATE_DO_MMIO:
1265                 run->exit_reason = KVM_EXIT_MMIO;
1266                 r = RESUME_HOST;
1267                 break;
1268         case EMULATE_FAIL:
1269                 pr_info("KVM: MMIO emulation failed (VSX repeat)\n");
1270                 run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
1271                 run->internal.suberror = KVM_INTERNAL_ERROR_EMULATION;
1272                 r = RESUME_HOST;
1273                 break;
1274         default:
1275                 r = RESUME_GUEST;
1276                 break;
1277         }
1278         return r;
1279 }
1280 #endif /* CONFIG_VSX */
1281
1282 int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg)
1283 {
1284         int r = 0;
1285         union kvmppc_one_reg val;
1286         int size;
1287
1288         size = one_reg_size(reg->id);
1289         if (size > sizeof(val))
1290                 return -EINVAL;
1291
1292         r = kvmppc_get_one_reg(vcpu, reg->id, &val);
1293         if (r == -EINVAL) {
1294                 r = 0;
1295                 switch (reg->id) {
1296 #ifdef CONFIG_ALTIVEC
1297                 case KVM_REG_PPC_VR0 ... KVM_REG_PPC_VR31:
1298                         if (!cpu_has_feature(CPU_FTR_ALTIVEC)) {
1299                                 r = -ENXIO;
1300                                 break;
1301                         }
1302                         val.vval = vcpu->arch.vr.vr[reg->id - KVM_REG_PPC_VR0];
1303                         break;
1304                 case KVM_REG_PPC_VSCR:
1305                         if (!cpu_has_feature(CPU_FTR_ALTIVEC)) {
1306                                 r = -ENXIO;
1307                                 break;
1308                         }
1309                         val = get_reg_val(reg->id, vcpu->arch.vr.vscr.u[3]);
1310                         break;
1311                 case KVM_REG_PPC_VRSAVE:
1312                         val = get_reg_val(reg->id, vcpu->arch.vrsave);
1313                         break;
1314 #endif /* CONFIG_ALTIVEC */
1315                 default:
1316                         r = -EINVAL;
1317                         break;
1318                 }
1319         }
1320
1321         if (r)
1322                 return r;
1323
1324         if (copy_to_user((char __user *)(unsigned long)reg->addr, &val, size))
1325                 r = -EFAULT;
1326
1327         return r;
1328 }
1329
1330 int kvm_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg)
1331 {
1332         int r;
1333         union kvmppc_one_reg val;
1334         int size;
1335
1336         size = one_reg_size(reg->id);
1337         if (size > sizeof(val))
1338                 return -EINVAL;
1339
1340         if (copy_from_user(&val, (char __user *)(unsigned long)reg->addr, size))
1341                 return -EFAULT;
1342
1343         r = kvmppc_set_one_reg(vcpu, reg->id, &val);
1344         if (r == -EINVAL) {
1345                 r = 0;
1346                 switch (reg->id) {
1347 #ifdef CONFIG_ALTIVEC
1348                 case KVM_REG_PPC_VR0 ... KVM_REG_PPC_VR31:
1349                         if (!cpu_has_feature(CPU_FTR_ALTIVEC)) {
1350                                 r = -ENXIO;
1351                                 break;
1352                         }
1353                         vcpu->arch.vr.vr[reg->id - KVM_REG_PPC_VR0] = val.vval;
1354                         break;
1355                 case KVM_REG_PPC_VSCR:
1356                         if (!cpu_has_feature(CPU_FTR_ALTIVEC)) {
1357                                 r = -ENXIO;
1358                                 break;
1359                         }
1360                         vcpu->arch.vr.vscr.u[3] = set_reg_val(reg->id, val);
1361                         break;
1362                 case KVM_REG_PPC_VRSAVE:
1363                         if (!cpu_has_feature(CPU_FTR_ALTIVEC)) {
1364                                 r = -ENXIO;
1365                                 break;
1366                         }
1367                         vcpu->arch.vrsave = set_reg_val(reg->id, val);
1368                         break;
1369 #endif /* CONFIG_ALTIVEC */
1370                 default:
1371                         r = -EINVAL;
1372                         break;
1373                 }
1374         }
1375
1376         return r;
1377 }
1378
1379 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
1380 {
1381         int r;
1382         sigset_t sigsaved;
1383
1384         if (vcpu->mmio_needed) {
1385                 vcpu->mmio_needed = 0;
1386                 if (!vcpu->mmio_is_write)
1387                         kvmppc_complete_mmio_load(vcpu, run);
1388 #ifdef CONFIG_VSX
1389                 if (vcpu->arch.mmio_vsx_copy_nums > 0) {
1390                         vcpu->arch.mmio_vsx_copy_nums--;
1391                         vcpu->arch.mmio_vsx_offset++;
1392                 }
1393
1394                 if (vcpu->arch.mmio_vsx_copy_nums > 0) {
1395                         r = kvmppc_emulate_mmio_vsx_loadstore(vcpu, run);
1396                         if (r == RESUME_HOST) {
1397                                 vcpu->mmio_needed = 1;
1398                                 return r;
1399                         }
1400                 }
1401 #endif
1402         } else if (vcpu->arch.osi_needed) {
1403                 u64 *gprs = run->osi.gprs;
1404                 int i;
1405
1406                 for (i = 0; i < 32; i++)
1407                         kvmppc_set_gpr(vcpu, i, gprs[i]);
1408                 vcpu->arch.osi_needed = 0;
1409         } else if (vcpu->arch.hcall_needed) {
1410                 int i;
1411
1412                 kvmppc_set_gpr(vcpu, 3, run->papr_hcall.ret);
1413                 for (i = 0; i < 9; ++i)
1414                         kvmppc_set_gpr(vcpu, 4 + i, run->papr_hcall.args[i]);
1415                 vcpu->arch.hcall_needed = 0;
1416 #ifdef CONFIG_BOOKE
1417         } else if (vcpu->arch.epr_needed) {
1418                 kvmppc_set_epr(vcpu, run->epr.epr);
1419                 vcpu->arch.epr_needed = 0;
1420 #endif
1421         }
1422
1423         if (vcpu->sigset_active)
1424                 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
1425
1426         if (run->immediate_exit)
1427                 r = -EINTR;
1428         else
1429                 r = kvmppc_vcpu_run(run, vcpu);
1430
1431         if (vcpu->sigset_active)
1432                 sigprocmask(SIG_SETMASK, &sigsaved, NULL);
1433
1434         return r;
1435 }
1436
1437 int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, struct kvm_interrupt *irq)
1438 {
1439         if (irq->irq == KVM_INTERRUPT_UNSET) {
1440                 kvmppc_core_dequeue_external(vcpu);
1441                 return 0;
1442         }
1443
1444         kvmppc_core_queue_external(vcpu, irq);
1445
1446         kvm_vcpu_kick(vcpu);
1447
1448         return 0;
1449 }
1450
1451 static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
1452                                      struct kvm_enable_cap *cap)
1453 {
1454         int r;
1455
1456         if (cap->flags)
1457                 return -EINVAL;
1458
1459         switch (cap->cap) {
1460         case KVM_CAP_PPC_OSI:
1461                 r = 0;
1462                 vcpu->arch.osi_enabled = true;
1463                 break;
1464         case KVM_CAP_PPC_PAPR:
1465                 r = 0;
1466                 vcpu->arch.papr_enabled = true;
1467                 break;
1468         case KVM_CAP_PPC_EPR:
1469                 r = 0;
1470                 if (cap->args[0])
1471                         vcpu->arch.epr_flags |= KVMPPC_EPR_USER;
1472                 else
1473                         vcpu->arch.epr_flags &= ~KVMPPC_EPR_USER;
1474                 break;
1475 #ifdef CONFIG_BOOKE
1476         case KVM_CAP_PPC_BOOKE_WATCHDOG:
1477                 r = 0;
1478                 vcpu->arch.watchdog_enabled = true;
1479                 break;
1480 #endif
1481 #if defined(CONFIG_KVM_E500V2) || defined(CONFIG_KVM_E500MC)
1482         case KVM_CAP_SW_TLB: {
1483                 struct kvm_config_tlb cfg;
1484                 void __user *user_ptr = (void __user *)(uintptr_t)cap->args[0];
1485
1486                 r = -EFAULT;
1487                 if (copy_from_user(&cfg, user_ptr, sizeof(cfg)))
1488                         break;
1489
1490                 r = kvm_vcpu_ioctl_config_tlb(vcpu, &cfg);
1491                 break;
1492         }
1493 #endif
1494 #ifdef CONFIG_KVM_MPIC
1495         case KVM_CAP_IRQ_MPIC: {
1496                 struct fd f;
1497                 struct kvm_device *dev;
1498
1499                 r = -EBADF;
1500                 f = fdget(cap->args[0]);
1501                 if (!f.file)
1502                         break;
1503
1504                 r = -EPERM;
1505                 dev = kvm_device_from_filp(f.file);
1506                 if (dev)
1507                         r = kvmppc_mpic_connect_vcpu(dev, vcpu, cap->args[1]);
1508
1509                 fdput(f);
1510                 break;
1511         }
1512 #endif
1513 #ifdef CONFIG_KVM_XICS
1514         case KVM_CAP_IRQ_XICS: {
1515                 struct fd f;
1516                 struct kvm_device *dev;
1517
1518                 r = -EBADF;
1519                 f = fdget(cap->args[0]);
1520                 if (!f.file)
1521                         break;
1522
1523                 r = -EPERM;
1524                 dev = kvm_device_from_filp(f.file);
1525                 if (dev)
1526                         r = kvmppc_xics_connect_vcpu(dev, vcpu, cap->args[1]);
1527
1528                 fdput(f);
1529                 break;
1530         }
1531 #endif /* CONFIG_KVM_XICS */
1532         default:
1533                 r = -EINVAL;
1534                 break;
1535         }
1536
1537         if (!r)
1538                 r = kvmppc_sanity_check(vcpu);
1539
1540         return r;
1541 }
1542
1543 bool kvm_arch_intc_initialized(struct kvm *kvm)
1544 {
1545 #ifdef CONFIG_KVM_MPIC
1546         if (kvm->arch.mpic)
1547                 return true;
1548 #endif
1549 #ifdef CONFIG_KVM_XICS
1550         if (kvm->arch.xics)
1551                 return true;
1552 #endif
1553         return false;
1554 }
1555
1556 int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
1557                                     struct kvm_mp_state *mp_state)
1558 {
1559         return -EINVAL;
1560 }
1561
1562 int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
1563                                     struct kvm_mp_state *mp_state)
1564 {
1565         return -EINVAL;
1566 }
1567
1568 long kvm_arch_vcpu_ioctl(struct file *filp,
1569                          unsigned int ioctl, unsigned long arg)
1570 {
1571         struct kvm_vcpu *vcpu = filp->private_data;
1572         void __user *argp = (void __user *)arg;
1573         long r;
1574
1575         switch (ioctl) {
1576         case KVM_INTERRUPT: {
1577                 struct kvm_interrupt irq;
1578                 r = -EFAULT;
1579                 if (copy_from_user(&irq, argp, sizeof(irq)))
1580                         goto out;
1581                 r = kvm_vcpu_ioctl_interrupt(vcpu, &irq);
1582                 goto out;
1583         }
1584
1585         case KVM_ENABLE_CAP:
1586         {
1587                 struct kvm_enable_cap cap;
1588                 r = -EFAULT;
1589                 if (copy_from_user(&cap, argp, sizeof(cap)))
1590                         goto out;
1591                 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
1592                 break;
1593         }
1594
1595         case KVM_SET_ONE_REG:
1596         case KVM_GET_ONE_REG:
1597         {
1598                 struct kvm_one_reg reg;
1599                 r = -EFAULT;
1600                 if (copy_from_user(&reg, argp, sizeof(reg)))
1601                         goto out;
1602                 if (ioctl == KVM_SET_ONE_REG)
1603                         r = kvm_vcpu_ioctl_set_one_reg(vcpu, &reg);
1604                 else
1605                         r = kvm_vcpu_ioctl_get_one_reg(vcpu, &reg);
1606                 break;
1607         }
1608
1609 #if defined(CONFIG_KVM_E500V2) || defined(CONFIG_KVM_E500MC)
1610         case KVM_DIRTY_TLB: {
1611                 struct kvm_dirty_tlb dirty;
1612                 r = -EFAULT;
1613                 if (copy_from_user(&dirty, argp, sizeof(dirty)))
1614                         goto out;
1615                 r = kvm_vcpu_ioctl_dirty_tlb(vcpu, &dirty);
1616                 break;
1617         }
1618 #endif
1619         default:
1620                 r = -EINVAL;
1621         }
1622
1623 out:
1624         return r;
1625 }
1626
1627 int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
1628 {
1629         return VM_FAULT_SIGBUS;
1630 }
1631
1632 static int kvm_vm_ioctl_get_pvinfo(struct kvm_ppc_pvinfo *pvinfo)
1633 {
1634         u32 inst_nop = 0x60000000;
1635 #ifdef CONFIG_KVM_BOOKE_HV
1636         u32 inst_sc1 = 0x44000022;
1637         pvinfo->hcall[0] = cpu_to_be32(inst_sc1);
1638         pvinfo->hcall[1] = cpu_to_be32(inst_nop);
1639         pvinfo->hcall[2] = cpu_to_be32(inst_nop);
1640         pvinfo->hcall[3] = cpu_to_be32(inst_nop);
1641 #else
1642         u32 inst_lis = 0x3c000000;
1643         u32 inst_ori = 0x60000000;
1644         u32 inst_sc = 0x44000002;
1645         u32 inst_imm_mask = 0xffff;
1646
1647         /*
1648          * The hypercall to get into KVM from within guest context is as
1649          * follows:
1650          *
1651          *    lis r0, r0, KVM_SC_MAGIC_R0@h
1652          *    ori r0, KVM_SC_MAGIC_R0@l
1653          *    sc
1654          *    nop
1655          */
1656         pvinfo->hcall[0] = cpu_to_be32(inst_lis | ((KVM_SC_MAGIC_R0 >> 16) & inst_imm_mask));
1657         pvinfo->hcall[1] = cpu_to_be32(inst_ori | (KVM_SC_MAGIC_R0 & inst_imm_mask));
1658         pvinfo->hcall[2] = cpu_to_be32(inst_sc);
1659         pvinfo->hcall[3] = cpu_to_be32(inst_nop);
1660 #endif
1661
1662         pvinfo->flags = KVM_PPC_PVINFO_FLAGS_EV_IDLE;
1663
1664         return 0;
1665 }
1666
1667 int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_event,
1668                           bool line_status)
1669 {
1670         if (!irqchip_in_kernel(kvm))
1671                 return -ENXIO;
1672
1673         irq_event->status = kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID,
1674                                         irq_event->irq, irq_event->level,
1675                                         line_status);
1676         return 0;
1677 }
1678
1679
1680 static int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
1681                                    struct kvm_enable_cap *cap)
1682 {
1683         int r;
1684
1685         if (cap->flags)
1686                 return -EINVAL;
1687
1688         switch (cap->cap) {
1689 #ifdef CONFIG_KVM_BOOK3S_64_HANDLER
1690         case KVM_CAP_PPC_ENABLE_HCALL: {
1691                 unsigned long hcall = cap->args[0];
1692
1693                 r = -EINVAL;
1694                 if (hcall > MAX_HCALL_OPCODE || (hcall & 3) ||
1695                     cap->args[1] > 1)
1696                         break;
1697                 if (!kvmppc_book3s_hcall_implemented(kvm, hcall))
1698                         break;
1699                 if (cap->args[1])
1700                         set_bit(hcall / 4, kvm->arch.enabled_hcalls);
1701                 else
1702                         clear_bit(hcall / 4, kvm->arch.enabled_hcalls);
1703                 r = 0;
1704                 break;
1705         }
1706 #endif
1707         default:
1708                 r = -EINVAL;
1709                 break;
1710         }
1711
1712         return r;
1713 }
1714
1715 long kvm_arch_vm_ioctl(struct file *filp,
1716                        unsigned int ioctl, unsigned long arg)
1717 {
1718         struct kvm *kvm __maybe_unused = filp->private_data;
1719         void __user *argp = (void __user *)arg;
1720         long r;
1721
1722         switch (ioctl) {
1723         case KVM_PPC_GET_PVINFO: {
1724                 struct kvm_ppc_pvinfo pvinfo;
1725                 memset(&pvinfo, 0, sizeof(pvinfo));
1726                 r = kvm_vm_ioctl_get_pvinfo(&pvinfo);
1727                 if (copy_to_user(argp, &pvinfo, sizeof(pvinfo))) {
1728                         r = -EFAULT;
1729                         goto out;
1730                 }
1731
1732                 break;
1733         }
1734         case KVM_ENABLE_CAP:
1735         {
1736                 struct kvm_enable_cap cap;
1737                 r = -EFAULT;
1738                 if (copy_from_user(&cap, argp, sizeof(cap)))
1739                         goto out;
1740                 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
1741                 break;
1742         }
1743 #ifdef CONFIG_PPC_BOOK3S_64
1744         case KVM_CREATE_SPAPR_TCE_64: {
1745                 struct kvm_create_spapr_tce_64 create_tce_64;
1746
1747                 r = -EFAULT;
1748                 if (copy_from_user(&create_tce_64, argp, sizeof(create_tce_64)))
1749                         goto out;
1750                 if (create_tce_64.flags) {
1751                         r = -EINVAL;
1752                         goto out;
1753                 }
1754                 r = kvm_vm_ioctl_create_spapr_tce(kvm, &create_tce_64);
1755                 goto out;
1756         }
1757         case KVM_CREATE_SPAPR_TCE: {
1758                 struct kvm_create_spapr_tce create_tce;
1759                 struct kvm_create_spapr_tce_64 create_tce_64;
1760
1761                 r = -EFAULT;
1762                 if (copy_from_user(&create_tce, argp, sizeof(create_tce)))
1763                         goto out;
1764
1765                 create_tce_64.liobn = create_tce.liobn;
1766                 create_tce_64.page_shift = IOMMU_PAGE_SHIFT_4K;
1767                 create_tce_64.offset = 0;
1768                 create_tce_64.size = create_tce.window_size >>
1769                                 IOMMU_PAGE_SHIFT_4K;
1770                 create_tce_64.flags = 0;
1771                 r = kvm_vm_ioctl_create_spapr_tce(kvm, &create_tce_64);
1772                 goto out;
1773         }
1774         case KVM_PPC_GET_SMMU_INFO: {
1775                 struct kvm_ppc_smmu_info info;
1776                 struct kvm *kvm = filp->private_data;
1777
1778                 memset(&info, 0, sizeof(info));
1779                 r = kvm->arch.kvm_ops->get_smmu_info(kvm, &info);
1780                 if (r >= 0 && copy_to_user(argp, &info, sizeof(info)))
1781                         r = -EFAULT;
1782                 break;
1783         }
1784         case KVM_PPC_RTAS_DEFINE_TOKEN: {
1785                 struct kvm *kvm = filp->private_data;
1786
1787                 r = kvm_vm_ioctl_rtas_define_token(kvm, argp);
1788                 break;
1789         }
1790         case KVM_PPC_CONFIGURE_V3_MMU: {
1791                 struct kvm *kvm = filp->private_data;
1792                 struct kvm_ppc_mmuv3_cfg cfg;
1793
1794                 r = -EINVAL;
1795                 if (!kvm->arch.kvm_ops->configure_mmu)
1796                         goto out;
1797                 r = -EFAULT;
1798                 if (copy_from_user(&cfg, argp, sizeof(cfg)))
1799                         goto out;
1800                 r = kvm->arch.kvm_ops->configure_mmu(kvm, &cfg);
1801                 break;
1802         }
1803         case KVM_PPC_GET_RMMU_INFO: {
1804                 struct kvm *kvm = filp->private_data;
1805                 struct kvm_ppc_rmmu_info info;
1806
1807                 r = -EINVAL;
1808                 if (!kvm->arch.kvm_ops->get_rmmu_info)
1809                         goto out;
1810                 r = kvm->arch.kvm_ops->get_rmmu_info(kvm, &info);
1811                 if (r >= 0 && copy_to_user(argp, &info, sizeof(info)))
1812                         r = -EFAULT;
1813                 break;
1814         }
1815         default: {
1816                 struct kvm *kvm = filp->private_data;
1817                 r = kvm->arch.kvm_ops->arch_vm_ioctl(filp, ioctl, arg);
1818         }
1819 #else /* CONFIG_PPC_BOOK3S_64 */
1820         default:
1821                 r = -ENOTTY;
1822 #endif
1823         }
1824 out:
1825         return r;
1826 }
1827
1828 static unsigned long lpid_inuse[BITS_TO_LONGS(KVMPPC_NR_LPIDS)];
1829 static unsigned long nr_lpids;
1830
1831 long kvmppc_alloc_lpid(void)
1832 {
1833         long lpid;
1834
1835         do {
1836                 lpid = find_first_zero_bit(lpid_inuse, KVMPPC_NR_LPIDS);
1837                 if (lpid >= nr_lpids) {
1838                         pr_err("%s: No LPIDs free\n", __func__);
1839                         return -ENOMEM;
1840                 }
1841         } while (test_and_set_bit(lpid, lpid_inuse));
1842
1843         return lpid;
1844 }
1845 EXPORT_SYMBOL_GPL(kvmppc_alloc_lpid);
1846
1847 void kvmppc_claim_lpid(long lpid)
1848 {
1849         set_bit(lpid, lpid_inuse);
1850 }
1851 EXPORT_SYMBOL_GPL(kvmppc_claim_lpid);
1852
1853 void kvmppc_free_lpid(long lpid)
1854 {
1855         clear_bit(lpid, lpid_inuse);
1856 }
1857 EXPORT_SYMBOL_GPL(kvmppc_free_lpid);
1858
1859 void kvmppc_init_lpid(unsigned long nr_lpids_param)
1860 {
1861         nr_lpids = min_t(unsigned long, KVMPPC_NR_LPIDS, nr_lpids_param);
1862         memset(lpid_inuse, 0, sizeof(lpid_inuse));
1863 }
1864 EXPORT_SYMBOL_GPL(kvmppc_init_lpid);
1865
1866 int kvm_arch_init(void *opaque)
1867 {
1868         return 0;
1869 }
1870
1871 EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_ppc_instr);