GNU Linux-libre 4.19.314-gnu1
[releases.git] / arch / arm64 / kvm / guest.c
1 /*
2  * Copyright (C) 2012,2013 - ARM Ltd
3  * Author: Marc Zyngier <marc.zyngier@arm.com>
4  *
5  * Derived from arch/arm/kvm/guest.c:
6  * Copyright (C) 2012 - Virtual Open Systems and Columbia University
7  * Author: Christoffer Dall <c.dall@virtualopensystems.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  */
21
22 #include <linux/errno.h>
23 #include <linux/err.h>
24 #include <linux/kvm_host.h>
25 #include <linux/module.h>
26 #include <linux/vmalloc.h>
27 #include <linux/fs.h>
28 #include <kvm/arm_psci.h>
29 #include <asm/cputype.h>
30 #include <linux/uaccess.h>
31 #include <asm/kvm.h>
32 #include <asm/kvm_emulate.h>
33 #include <asm/kvm_coproc.h>
34
35 #include "trace.h"
36
37 #define VM_STAT(x) { #x, offsetof(struct kvm, stat.x), KVM_STAT_VM }
38 #define VCPU_STAT(x) { #x, offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU }
39
40 struct kvm_stats_debugfs_item debugfs_entries[] = {
41         VCPU_STAT(hvc_exit_stat),
42         VCPU_STAT(wfe_exit_stat),
43         VCPU_STAT(wfi_exit_stat),
44         VCPU_STAT(mmio_exit_user),
45         VCPU_STAT(mmio_exit_kernel),
46         VCPU_STAT(exits),
47         { NULL }
48 };
49
50 int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
51 {
52         return 0;
53 }
54
55 static u64 core_reg_offset_from_id(u64 id)
56 {
57         return id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | KVM_REG_ARM_CORE);
58 }
59
60 static int core_reg_size_from_offset(u64 off)
61 {
62         int size;
63
64         switch (off) {
65         case KVM_REG_ARM_CORE_REG(regs.regs[0]) ...
66              KVM_REG_ARM_CORE_REG(regs.regs[30]):
67         case KVM_REG_ARM_CORE_REG(regs.sp):
68         case KVM_REG_ARM_CORE_REG(regs.pc):
69         case KVM_REG_ARM_CORE_REG(regs.pstate):
70         case KVM_REG_ARM_CORE_REG(sp_el1):
71         case KVM_REG_ARM_CORE_REG(elr_el1):
72         case KVM_REG_ARM_CORE_REG(spsr[0]) ...
73              KVM_REG_ARM_CORE_REG(spsr[KVM_NR_SPSR - 1]):
74                 size = sizeof(__u64);
75                 break;
76
77         case KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]) ...
78              KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]):
79                 size = sizeof(__uint128_t);
80                 break;
81
82         case KVM_REG_ARM_CORE_REG(fp_regs.fpsr):
83         case KVM_REG_ARM_CORE_REG(fp_regs.fpcr):
84                 size = sizeof(__u32);
85                 break;
86
87         default:
88                 return -EINVAL;
89         }
90
91         if (!IS_ALIGNED(off, size / sizeof(__u32)))
92                 return -EINVAL;
93
94         return size;
95 }
96
97 static int validate_core_offset(const struct kvm_one_reg *reg)
98 {
99         u64 off = core_reg_offset_from_id(reg->id);
100         int size = core_reg_size_from_offset(off);
101
102         if (size < 0)
103                 return -EINVAL;
104
105         if (KVM_REG_SIZE(reg->id) != size)
106                 return -EINVAL;
107
108         return 0;
109 }
110
111 static int get_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
112 {
113         /*
114          * Because the kvm_regs structure is a mix of 32, 64 and
115          * 128bit fields, we index it as if it was a 32bit
116          * array. Hence below, nr_regs is the number of entries, and
117          * off the index in the "array".
118          */
119         __u32 __user *uaddr = (__u32 __user *)(unsigned long)reg->addr;
120         struct kvm_regs *regs = vcpu_gp_regs(vcpu);
121         int nr_regs = sizeof(*regs) / sizeof(__u32);
122         u32 off;
123
124         /* Our ID is an index into the kvm_regs struct. */
125         off = core_reg_offset_from_id(reg->id);
126         if (off >= nr_regs ||
127             (off + (KVM_REG_SIZE(reg->id) / sizeof(__u32))) >= nr_regs)
128                 return -ENOENT;
129
130         if (validate_core_offset(reg))
131                 return -EINVAL;
132
133         if (copy_to_user(uaddr, ((u32 *)regs) + off, KVM_REG_SIZE(reg->id)))
134                 return -EFAULT;
135
136         return 0;
137 }
138
139 static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
140 {
141         __u32 __user *uaddr = (__u32 __user *)(unsigned long)reg->addr;
142         struct kvm_regs *regs = vcpu_gp_regs(vcpu);
143         int nr_regs = sizeof(*regs) / sizeof(__u32);
144         __uint128_t tmp;
145         void *valp = &tmp;
146         u64 off;
147         int err = 0;
148
149         /* Our ID is an index into the kvm_regs struct. */
150         off = core_reg_offset_from_id(reg->id);
151         if (off >= nr_regs ||
152             (off + (KVM_REG_SIZE(reg->id) / sizeof(__u32))) >= nr_regs)
153                 return -ENOENT;
154
155         if (validate_core_offset(reg))
156                 return -EINVAL;
157
158         if (KVM_REG_SIZE(reg->id) > sizeof(tmp))
159                 return -EINVAL;
160
161         if (copy_from_user(valp, uaddr, KVM_REG_SIZE(reg->id))) {
162                 err = -EFAULT;
163                 goto out;
164         }
165
166         if (off == KVM_REG_ARM_CORE_REG(regs.pstate)) {
167                 u64 mode = (*(u64 *)valp) & PSR_AA32_MODE_MASK;
168                 switch (mode) {
169                 case PSR_AA32_MODE_USR:
170                         if (!system_supports_32bit_el0())
171                                 return -EINVAL;
172                         break;
173                 case PSR_AA32_MODE_FIQ:
174                 case PSR_AA32_MODE_IRQ:
175                 case PSR_AA32_MODE_SVC:
176                 case PSR_AA32_MODE_ABT:
177                 case PSR_AA32_MODE_UND:
178                         if (!vcpu_el1_is_32bit(vcpu))
179                                 return -EINVAL;
180                         break;
181                 case PSR_MODE_EL0t:
182                 case PSR_MODE_EL1t:
183                 case PSR_MODE_EL1h:
184                         if (vcpu_el1_is_32bit(vcpu))
185                                 return -EINVAL;
186                         break;
187                 default:
188                         err = -EINVAL;
189                         goto out;
190                 }
191         }
192
193         memcpy((u32 *)regs + off, valp, KVM_REG_SIZE(reg->id));
194
195         if (*vcpu_cpsr(vcpu) & PSR_MODE32_BIT) {
196                 int i;
197
198                 for (i = 0; i < 16; i++)
199                         *vcpu_reg32(vcpu, i) = (u32)*vcpu_reg32(vcpu, i);
200         }
201 out:
202         return err;
203 }
204
205 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
206 {
207         return -EINVAL;
208 }
209
210 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
211 {
212         return -EINVAL;
213 }
214
215 static int kvm_arm_copy_core_reg_indices(u64 __user *uindices)
216 {
217         unsigned int i;
218         int n = 0;
219
220         for (i = 0; i < sizeof(struct kvm_regs) / sizeof(__u32); i++) {
221                 u64 reg = KVM_REG_ARM64 | KVM_REG_ARM_CORE | i;
222                 int size = core_reg_size_from_offset(i);
223
224                 if (size < 0)
225                         continue;
226
227                 switch (size) {
228                 case sizeof(__u32):
229                         reg |= KVM_REG_SIZE_U32;
230                         break;
231
232                 case sizeof(__u64):
233                         reg |= KVM_REG_SIZE_U64;
234                         break;
235
236                 case sizeof(__uint128_t):
237                         reg |= KVM_REG_SIZE_U128;
238                         break;
239
240                 default:
241                         WARN_ON(1);
242                         continue;
243                 }
244
245                 if (uindices) {
246                         if (put_user(reg, uindices))
247                                 return -EFAULT;
248                         uindices++;
249                 }
250
251                 n++;
252         }
253
254         return n;
255 }
256
257 static unsigned long num_core_regs(void)
258 {
259         return kvm_arm_copy_core_reg_indices(NULL);
260 }
261
262 /**
263  * ARM64 versions of the TIMER registers, always available on arm64
264  */
265
266 #define NUM_TIMER_REGS 3
267
268 static bool is_timer_reg(u64 index)
269 {
270         switch (index) {
271         case KVM_REG_ARM_TIMER_CTL:
272         case KVM_REG_ARM_TIMER_CNT:
273         case KVM_REG_ARM_TIMER_CVAL:
274                 return true;
275         }
276         return false;
277 }
278
279 static int copy_timer_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
280 {
281         if (put_user(KVM_REG_ARM_TIMER_CTL, uindices))
282                 return -EFAULT;
283         uindices++;
284         if (put_user(KVM_REG_ARM_TIMER_CNT, uindices))
285                 return -EFAULT;
286         uindices++;
287         if (put_user(KVM_REG_ARM_TIMER_CVAL, uindices))
288                 return -EFAULT;
289
290         return 0;
291 }
292
293 static int set_timer_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
294 {
295         void __user *uaddr = (void __user *)(long)reg->addr;
296         u64 val;
297         int ret;
298
299         ret = copy_from_user(&val, uaddr, KVM_REG_SIZE(reg->id));
300         if (ret != 0)
301                 return -EFAULT;
302
303         return kvm_arm_timer_set_reg(vcpu, reg->id, val);
304 }
305
306 static int get_timer_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
307 {
308         void __user *uaddr = (void __user *)(long)reg->addr;
309         u64 val;
310
311         val = kvm_arm_timer_get_reg(vcpu, reg->id);
312         return copy_to_user(uaddr, &val, KVM_REG_SIZE(reg->id)) ? -EFAULT : 0;
313 }
314
315 /**
316  * kvm_arm_num_regs - how many registers do we present via KVM_GET_ONE_REG
317  *
318  * This is for all registers.
319  */
320 unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu)
321 {
322         return num_core_regs() + kvm_arm_num_sys_reg_descs(vcpu)
323                 + kvm_arm_get_fw_num_regs(vcpu) + NUM_TIMER_REGS;
324 }
325
326 /**
327  * kvm_arm_copy_reg_indices - get indices of all registers.
328  *
329  * We do core registers right here, then we append system regs.
330  */
331 int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
332 {
333         int ret;
334
335         ret = kvm_arm_copy_core_reg_indices(uindices);
336         if (ret < 0)
337                 return ret;
338         uindices += ret;
339
340         ret = kvm_arm_copy_fw_reg_indices(vcpu, uindices);
341         if (ret < 0)
342                 return ret;
343         uindices += kvm_arm_get_fw_num_regs(vcpu);
344
345         ret = copy_timer_indices(vcpu, uindices);
346         if (ret < 0)
347                 return ret;
348         uindices += NUM_TIMER_REGS;
349
350         return kvm_arm_copy_sys_reg_indices(vcpu, uindices);
351 }
352
353 int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
354 {
355         /* We currently use nothing arch-specific in upper 32 bits */
356         if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 != KVM_REG_ARM64 >> 32)
357                 return -EINVAL;
358
359         /* Register group 16 means we want a core register. */
360         if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE)
361                 return get_core_reg(vcpu, reg);
362
363         if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_FW)
364                 return kvm_arm_get_fw_reg(vcpu, reg);
365
366         if (is_timer_reg(reg->id))
367                 return get_timer_reg(vcpu, reg);
368
369         return kvm_arm_sys_reg_get_reg(vcpu, reg);
370 }
371
372 int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
373 {
374         /* We currently use nothing arch-specific in upper 32 bits */
375         if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 != KVM_REG_ARM64 >> 32)
376                 return -EINVAL;
377
378         /* Register group 16 means we set a core register. */
379         if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE)
380                 return set_core_reg(vcpu, reg);
381
382         if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_FW)
383                 return kvm_arm_set_fw_reg(vcpu, reg);
384
385         if (is_timer_reg(reg->id))
386                 return set_timer_reg(vcpu, reg);
387
388         return kvm_arm_sys_reg_set_reg(vcpu, reg);
389 }
390
391 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
392                                   struct kvm_sregs *sregs)
393 {
394         return -EINVAL;
395 }
396
397 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
398                                   struct kvm_sregs *sregs)
399 {
400         return -EINVAL;
401 }
402
403 int __kvm_arm_vcpu_get_events(struct kvm_vcpu *vcpu,
404                               struct kvm_vcpu_events *events)
405 {
406         events->exception.serror_pending = !!(vcpu->arch.hcr_el2 & HCR_VSE);
407         events->exception.serror_has_esr = cpus_have_const_cap(ARM64_HAS_RAS_EXTN);
408
409         if (events->exception.serror_pending && events->exception.serror_has_esr)
410                 events->exception.serror_esr = vcpu_get_vsesr(vcpu);
411
412         return 0;
413 }
414
415 int __kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu,
416                               struct kvm_vcpu_events *events)
417 {
418         bool serror_pending = events->exception.serror_pending;
419         bool has_esr = events->exception.serror_has_esr;
420
421         if (serror_pending && has_esr) {
422                 if (!cpus_have_const_cap(ARM64_HAS_RAS_EXTN))
423                         return -EINVAL;
424
425                 if (!((events->exception.serror_esr) & ~ESR_ELx_ISS_MASK))
426                         kvm_set_sei_esr(vcpu, events->exception.serror_esr);
427                 else
428                         return -EINVAL;
429         } else if (serror_pending) {
430                 kvm_inject_vabt(vcpu);
431         }
432
433         return 0;
434 }
435
436 int __attribute_const__ kvm_target_cpu(void)
437 {
438         unsigned long implementor = read_cpuid_implementor();
439         unsigned long part_number = read_cpuid_part_number();
440
441         switch (implementor) {
442         case ARM_CPU_IMP_ARM:
443                 switch (part_number) {
444                 case ARM_CPU_PART_AEM_V8:
445                         return KVM_ARM_TARGET_AEM_V8;
446                 case ARM_CPU_PART_FOUNDATION:
447                         return KVM_ARM_TARGET_FOUNDATION_V8;
448                 case ARM_CPU_PART_CORTEX_A53:
449                         return KVM_ARM_TARGET_CORTEX_A53;
450                 case ARM_CPU_PART_CORTEX_A57:
451                         return KVM_ARM_TARGET_CORTEX_A57;
452                 };
453                 break;
454         case ARM_CPU_IMP_APM:
455                 switch (part_number) {
456                 case APM_CPU_PART_POTENZA:
457                         return KVM_ARM_TARGET_XGENE_POTENZA;
458                 };
459                 break;
460         };
461
462         /* Return a default generic target */
463         return KVM_ARM_TARGET_GENERIC_V8;
464 }
465
466 int kvm_vcpu_preferred_target(struct kvm_vcpu_init *init)
467 {
468         int target = kvm_target_cpu();
469
470         if (target < 0)
471                 return -ENODEV;
472
473         memset(init, 0, sizeof(*init));
474
475         /*
476          * For now, we don't return any features.
477          * In future, we might use features to return target
478          * specific features available for the preferred
479          * target type.
480          */
481         init->target = (__u32)target;
482
483         return 0;
484 }
485
486 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
487 {
488         return -EINVAL;
489 }
490
491 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
492 {
493         return -EINVAL;
494 }
495
496 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
497                                   struct kvm_translation *tr)
498 {
499         return -EINVAL;
500 }
501
502 #define KVM_GUESTDBG_VALID_MASK (KVM_GUESTDBG_ENABLE |    \
503                             KVM_GUESTDBG_USE_SW_BP | \
504                             KVM_GUESTDBG_USE_HW | \
505                             KVM_GUESTDBG_SINGLESTEP)
506
507 /**
508  * kvm_arch_vcpu_ioctl_set_guest_debug - set up guest debugging
509  * @kvm:        pointer to the KVM struct
510  * @kvm_guest_debug: the ioctl data buffer
511  *
512  * This sets up and enables the VM for guest debugging. Userspace
513  * passes in a control flag to enable different debug types and
514  * potentially other architecture specific information in the rest of
515  * the structure.
516  */
517 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
518                                         struct kvm_guest_debug *dbg)
519 {
520         int ret = 0;
521
522         trace_kvm_set_guest_debug(vcpu, dbg->control);
523
524         if (dbg->control & ~KVM_GUESTDBG_VALID_MASK) {
525                 ret = -EINVAL;
526                 goto out;
527         }
528
529         if (dbg->control & KVM_GUESTDBG_ENABLE) {
530                 vcpu->guest_debug = dbg->control;
531
532                 /* Hardware assisted Break and Watch points */
533                 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) {
534                         vcpu->arch.external_debug_state = dbg->arch;
535                 }
536
537         } else {
538                 /* If not enabled clear all flags */
539                 vcpu->guest_debug = 0;
540         }
541
542 out:
543         return ret;
544 }
545
546 int kvm_arm_vcpu_arch_set_attr(struct kvm_vcpu *vcpu,
547                                struct kvm_device_attr *attr)
548 {
549         int ret;
550
551         switch (attr->group) {
552         case KVM_ARM_VCPU_PMU_V3_CTRL:
553                 ret = kvm_arm_pmu_v3_set_attr(vcpu, attr);
554                 break;
555         case KVM_ARM_VCPU_TIMER_CTRL:
556                 ret = kvm_arm_timer_set_attr(vcpu, attr);
557                 break;
558         default:
559                 ret = -ENXIO;
560                 break;
561         }
562
563         return ret;
564 }
565
566 int kvm_arm_vcpu_arch_get_attr(struct kvm_vcpu *vcpu,
567                                struct kvm_device_attr *attr)
568 {
569         int ret;
570
571         switch (attr->group) {
572         case KVM_ARM_VCPU_PMU_V3_CTRL:
573                 ret = kvm_arm_pmu_v3_get_attr(vcpu, attr);
574                 break;
575         case KVM_ARM_VCPU_TIMER_CTRL:
576                 ret = kvm_arm_timer_get_attr(vcpu, attr);
577                 break;
578         default:
579                 ret = -ENXIO;
580                 break;
581         }
582
583         return ret;
584 }
585
586 int kvm_arm_vcpu_arch_has_attr(struct kvm_vcpu *vcpu,
587                                struct kvm_device_attr *attr)
588 {
589         int ret;
590
591         switch (attr->group) {
592         case KVM_ARM_VCPU_PMU_V3_CTRL:
593                 ret = kvm_arm_pmu_v3_has_attr(vcpu, attr);
594                 break;
595         case KVM_ARM_VCPU_TIMER_CTRL:
596                 ret = kvm_arm_timer_has_attr(vcpu, attr);
597                 break;
598         default:
599                 ret = -ENXIO;
600                 break;
601         }
602
603         return ret;
604 }