GNU Linux-libre 4.14.332-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) & COMPAT_PSR_MODE_MASK;
168                 switch (mode) {
169                 case COMPAT_PSR_MODE_USR:
170                         if (!system_supports_32bit_el0())
171                                 return -EINVAL;
172                         break;
173                 case COMPAT_PSR_MODE_FIQ:
174                 case COMPAT_PSR_MODE_IRQ:
175                 case COMPAT_PSR_MODE_SVC:
176                 case COMPAT_PSR_MODE_ABT:
177                 case COMPAT_PSR_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 out:
195         return err;
196 }
197
198 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
199 {
200         return -EINVAL;
201 }
202
203 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
204 {
205         return -EINVAL;
206 }
207
208 static int kvm_arm_copy_core_reg_indices(u64 __user *uindices)
209 {
210         unsigned int i;
211         int n = 0;
212
213         for (i = 0; i < sizeof(struct kvm_regs) / sizeof(__u32); i++) {
214                 u64 reg = KVM_REG_ARM64 | KVM_REG_ARM_CORE | i;
215                 int size = core_reg_size_from_offset(i);
216
217                 if (size < 0)
218                         continue;
219
220                 switch (size) {
221                 case sizeof(__u32):
222                         reg |= KVM_REG_SIZE_U32;
223                         break;
224
225                 case sizeof(__u64):
226                         reg |= KVM_REG_SIZE_U64;
227                         break;
228
229                 case sizeof(__uint128_t):
230                         reg |= KVM_REG_SIZE_U128;
231                         break;
232
233                 default:
234                         WARN_ON(1);
235                         continue;
236                 }
237
238                 if (uindices) {
239                         if (put_user(reg, uindices))
240                                 return -EFAULT;
241                         uindices++;
242                 }
243
244                 n++;
245         }
246
247         return n;
248 }
249
250 static unsigned long num_core_regs(void)
251 {
252         return kvm_arm_copy_core_reg_indices(NULL);
253 }
254
255 /**
256  * ARM64 versions of the TIMER registers, always available on arm64
257  */
258
259 #define NUM_TIMER_REGS 3
260
261 static bool is_timer_reg(u64 index)
262 {
263         switch (index) {
264         case KVM_REG_ARM_TIMER_CTL:
265         case KVM_REG_ARM_TIMER_CNT:
266         case KVM_REG_ARM_TIMER_CVAL:
267                 return true;
268         }
269         return false;
270 }
271
272 static int copy_timer_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
273 {
274         if (put_user(KVM_REG_ARM_TIMER_CTL, uindices))
275                 return -EFAULT;
276         uindices++;
277         if (put_user(KVM_REG_ARM_TIMER_CNT, uindices))
278                 return -EFAULT;
279         uindices++;
280         if (put_user(KVM_REG_ARM_TIMER_CVAL, uindices))
281                 return -EFAULT;
282
283         return 0;
284 }
285
286 static int set_timer_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
287 {
288         void __user *uaddr = (void __user *)(long)reg->addr;
289         u64 val;
290         int ret;
291
292         ret = copy_from_user(&val, uaddr, KVM_REG_SIZE(reg->id));
293         if (ret != 0)
294                 return -EFAULT;
295
296         return kvm_arm_timer_set_reg(vcpu, reg->id, val);
297 }
298
299 static int get_timer_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
300 {
301         void __user *uaddr = (void __user *)(long)reg->addr;
302         u64 val;
303
304         val = kvm_arm_timer_get_reg(vcpu, reg->id);
305         return copy_to_user(uaddr, &val, KVM_REG_SIZE(reg->id)) ? -EFAULT : 0;
306 }
307
308 /**
309  * kvm_arm_num_regs - how many registers do we present via KVM_GET_ONE_REG
310  *
311  * This is for all registers.
312  */
313 unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu)
314 {
315         return num_core_regs() + kvm_arm_num_sys_reg_descs(vcpu)
316                 + kvm_arm_get_fw_num_regs(vcpu) + NUM_TIMER_REGS;
317 }
318
319 /**
320  * kvm_arm_copy_reg_indices - get indices of all registers.
321  *
322  * We do core registers right here, then we append system regs.
323  */
324 int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
325 {
326         int ret;
327
328         ret = kvm_arm_copy_core_reg_indices(uindices);
329         if (ret < 0)
330                 return ret;
331         uindices += ret;
332
333         ret = kvm_arm_copy_fw_reg_indices(vcpu, uindices);
334         if (ret < 0)
335                 return ret;
336         uindices += kvm_arm_get_fw_num_regs(vcpu);
337
338         ret = copy_timer_indices(vcpu, uindices);
339         if (ret < 0)
340                 return ret;
341         uindices += NUM_TIMER_REGS;
342
343         return kvm_arm_copy_sys_reg_indices(vcpu, uindices);
344 }
345
346 int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
347 {
348         /* We currently use nothing arch-specific in upper 32 bits */
349         if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 != KVM_REG_ARM64 >> 32)
350                 return -EINVAL;
351
352         /* Register group 16 means we want a core register. */
353         if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE)
354                 return get_core_reg(vcpu, reg);
355
356         if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_FW)
357                 return kvm_arm_get_fw_reg(vcpu, reg);
358
359         if (is_timer_reg(reg->id))
360                 return get_timer_reg(vcpu, reg);
361
362         return kvm_arm_sys_reg_get_reg(vcpu, reg);
363 }
364
365 int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
366 {
367         /* We currently use nothing arch-specific in upper 32 bits */
368         if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 != KVM_REG_ARM64 >> 32)
369                 return -EINVAL;
370
371         /* Register group 16 means we set a core register. */
372         if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE)
373                 return set_core_reg(vcpu, reg);
374
375         if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_FW)
376                 return kvm_arm_set_fw_reg(vcpu, reg);
377
378         if (is_timer_reg(reg->id))
379                 return set_timer_reg(vcpu, reg);
380
381         return kvm_arm_sys_reg_set_reg(vcpu, reg);
382 }
383
384 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
385                                   struct kvm_sregs *sregs)
386 {
387         return -EINVAL;
388 }
389
390 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
391                                   struct kvm_sregs *sregs)
392 {
393         return -EINVAL;
394 }
395
396 int __attribute_const__ kvm_target_cpu(void)
397 {
398         unsigned long implementor = read_cpuid_implementor();
399         unsigned long part_number = read_cpuid_part_number();
400
401         switch (implementor) {
402         case ARM_CPU_IMP_ARM:
403                 switch (part_number) {
404                 case ARM_CPU_PART_AEM_V8:
405                         return KVM_ARM_TARGET_AEM_V8;
406                 case ARM_CPU_PART_FOUNDATION:
407                         return KVM_ARM_TARGET_FOUNDATION_V8;
408                 case ARM_CPU_PART_CORTEX_A53:
409                         return KVM_ARM_TARGET_CORTEX_A53;
410                 case ARM_CPU_PART_CORTEX_A57:
411                         return KVM_ARM_TARGET_CORTEX_A57;
412                 };
413                 break;
414         case ARM_CPU_IMP_APM:
415                 switch (part_number) {
416                 case APM_CPU_PART_POTENZA:
417                         return KVM_ARM_TARGET_XGENE_POTENZA;
418                 };
419                 break;
420         };
421
422         /* Return a default generic target */
423         return KVM_ARM_TARGET_GENERIC_V8;
424 }
425
426 int kvm_vcpu_preferred_target(struct kvm_vcpu_init *init)
427 {
428         int target = kvm_target_cpu();
429
430         if (target < 0)
431                 return -ENODEV;
432
433         memset(init, 0, sizeof(*init));
434
435         /*
436          * For now, we don't return any features.
437          * In future, we might use features to return target
438          * specific features available for the preferred
439          * target type.
440          */
441         init->target = (__u32)target;
442
443         return 0;
444 }
445
446 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
447 {
448         return -EINVAL;
449 }
450
451 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
452 {
453         return -EINVAL;
454 }
455
456 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
457                                   struct kvm_translation *tr)
458 {
459         return -EINVAL;
460 }
461
462 #define KVM_GUESTDBG_VALID_MASK (KVM_GUESTDBG_ENABLE |    \
463                             KVM_GUESTDBG_USE_SW_BP | \
464                             KVM_GUESTDBG_USE_HW | \
465                             KVM_GUESTDBG_SINGLESTEP)
466
467 /**
468  * kvm_arch_vcpu_ioctl_set_guest_debug - set up guest debugging
469  * @kvm:        pointer to the KVM struct
470  * @kvm_guest_debug: the ioctl data buffer
471  *
472  * This sets up and enables the VM for guest debugging. Userspace
473  * passes in a control flag to enable different debug types and
474  * potentially other architecture specific information in the rest of
475  * the structure.
476  */
477 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
478                                         struct kvm_guest_debug *dbg)
479 {
480         trace_kvm_set_guest_debug(vcpu, dbg->control);
481
482         if (dbg->control & ~KVM_GUESTDBG_VALID_MASK)
483                 return -EINVAL;
484
485         if (dbg->control & KVM_GUESTDBG_ENABLE) {
486                 vcpu->guest_debug = dbg->control;
487
488                 /* Hardware assisted Break and Watch points */
489                 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) {
490                         vcpu->arch.external_debug_state = dbg->arch;
491                 }
492
493         } else {
494                 /* If not enabled clear all flags */
495                 vcpu->guest_debug = 0;
496         }
497         return 0;
498 }
499
500 int kvm_arm_vcpu_arch_set_attr(struct kvm_vcpu *vcpu,
501                                struct kvm_device_attr *attr)
502 {
503         int ret;
504
505         switch (attr->group) {
506         case KVM_ARM_VCPU_PMU_V3_CTRL:
507                 ret = kvm_arm_pmu_v3_set_attr(vcpu, attr);
508                 break;
509         case KVM_ARM_VCPU_TIMER_CTRL:
510                 ret = kvm_arm_timer_set_attr(vcpu, attr);
511                 break;
512         default:
513                 ret = -ENXIO;
514                 break;
515         }
516
517         return ret;
518 }
519
520 int kvm_arm_vcpu_arch_get_attr(struct kvm_vcpu *vcpu,
521                                struct kvm_device_attr *attr)
522 {
523         int ret;
524
525         switch (attr->group) {
526         case KVM_ARM_VCPU_PMU_V3_CTRL:
527                 ret = kvm_arm_pmu_v3_get_attr(vcpu, attr);
528                 break;
529         case KVM_ARM_VCPU_TIMER_CTRL:
530                 ret = kvm_arm_timer_get_attr(vcpu, attr);
531                 break;
532         default:
533                 ret = -ENXIO;
534                 break;
535         }
536
537         return ret;
538 }
539
540 int kvm_arm_vcpu_arch_has_attr(struct kvm_vcpu *vcpu,
541                                struct kvm_device_attr *attr)
542 {
543         int ret;
544
545         switch (attr->group) {
546         case KVM_ARM_VCPU_PMU_V3_CTRL:
547                 ret = kvm_arm_pmu_v3_has_attr(vcpu, attr);
548                 break;
549         case KVM_ARM_VCPU_TIMER_CTRL:
550                 ret = kvm_arm_timer_has_attr(vcpu, attr);
551                 break;
552         default:
553                 ret = -ENXIO;
554                 break;
555         }
556
557         return ret;
558 }