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