2 * Copyright (C) 2015, 2016 ARM Ltd.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #include <linux/uaccess.h>
18 #include <linux/interrupt.h>
19 #include <linux/cpu.h>
20 #include <linux/kvm_host.h>
21 #include <kvm/arm_vgic.h>
22 #include <asm/kvm_mmu.h>
26 * Initialization rules: there are multiple stages to the vgic
27 * initialization, both for the distributor and the CPU interfaces. The basic
28 * idea is that even though the VGIC is not functional or not requested from
29 * user space, the critical path of the run loop can still call VGIC functions
30 * that just won't do anything, without them having to check additional
31 * initialization flags to ensure they don't look at uninitialized data
36 * - kvm_vgic_early_init(): initialization of static data that doesn't
37 * depend on any sizing information or emulation type. No allocation
40 * - vgic_init(): allocation and initialization of the generic data
41 * structures that depend on sizing information (number of CPUs,
42 * number of interrupts). Also initializes the vcpu specific data
43 * structures. Can be executed lazily for GICv2.
47 * - kvm_vgic_vcpu_early_init(): initialization of static data that
48 * doesn't depend on any sizing information or emulation type. No
49 * allocation is allowed there.
55 * kvm_vgic_early_init() - Initialize static VGIC VCPU data structures
56 * @kvm: The VM whose VGIC districutor should be initialized
58 * Only do initialization of static structures that don't require any
59 * allocation or sizing information from userspace. vgic_init() called
60 * kvm_vgic_dist_init() which takes care of the rest.
62 void kvm_vgic_early_init(struct kvm
*kvm
)
64 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
66 INIT_LIST_HEAD(&dist
->lpi_list_head
);
67 spin_lock_init(&dist
->lpi_list_lock
);
71 * kvm_vgic_vcpu_early_init() - Initialize static VGIC VCPU data structures
72 * @vcpu: The VCPU whose VGIC data structures whould be initialized
74 * Only do initialization, but do not actually enable the VGIC CPU interface
77 void kvm_vgic_vcpu_early_init(struct kvm_vcpu
*vcpu
)
79 struct vgic_cpu
*vgic_cpu
= &vcpu
->arch
.vgic_cpu
;
82 INIT_LIST_HEAD(&vgic_cpu
->ap_list_head
);
83 spin_lock_init(&vgic_cpu
->ap_list_lock
);
86 * Enable and configure all SGIs to be edge-triggered and
87 * configure all PPIs as level-triggered.
89 for (i
= 0; i
< VGIC_NR_PRIVATE_IRQS
; i
++) {
90 struct vgic_irq
*irq
= &vgic_cpu
->private_irqs
[i
];
92 INIT_LIST_HEAD(&irq
->ap_list
);
93 spin_lock_init(&irq
->irq_lock
);
96 irq
->target_vcpu
= vcpu
;
97 irq
->targets
= 1U << vcpu
->vcpu_id
;
98 kref_init(&irq
->refcount
);
99 if (vgic_irq_is_sgi(i
)) {
102 irq
->config
= VGIC_CONFIG_EDGE
;
105 irq
->config
= VGIC_CONFIG_LEVEL
;
113 * kvm_vgic_create: triggered by the instantiation of the VGIC device by
114 * user space, either through the legacy KVM_CREATE_IRQCHIP ioctl (v2 only)
115 * or through the generic KVM_CREATE_DEVICE API ioctl.
116 * irqchip_in_kernel() tells you if this function succeeded or not.
117 * @kvm: kvm struct pointer
118 * @type: KVM_DEV_TYPE_ARM_VGIC_V[23]
120 int kvm_vgic_create(struct kvm
*kvm
, u32 type
)
122 int i
, vcpu_lock_idx
= -1, ret
;
123 struct kvm_vcpu
*vcpu
;
125 if (irqchip_in_kernel(kvm
))
129 * This function is also called by the KVM_CREATE_IRQCHIP handler,
130 * which had no chance yet to check the availability of the GICv2
131 * emulation. So check this here again. KVM_CREATE_DEVICE does
132 * the proper checks already.
134 if (type
== KVM_DEV_TYPE_ARM_VGIC_V2
&&
135 !kvm_vgic_global_state
.can_emulate_gicv2
)
139 * Any time a vcpu is run, vcpu_load is called which tries to grab the
140 * vcpu->mutex. By grabbing the vcpu->mutex of all VCPUs we ensure
141 * that no other VCPUs are run while we create the vgic.
144 kvm_for_each_vcpu(i
, vcpu
, kvm
) {
145 if (!mutex_trylock(&vcpu
->mutex
))
150 kvm_for_each_vcpu(i
, vcpu
, kvm
) {
151 if (vcpu
->arch
.has_run_once
)
156 if (type
== KVM_DEV_TYPE_ARM_VGIC_V2
)
157 kvm
->arch
.max_vcpus
= VGIC_V2_MAX_CPUS
;
159 kvm
->arch
.max_vcpus
= VGIC_V3_MAX_CPUS
;
161 if (atomic_read(&kvm
->online_vcpus
) > kvm
->arch
.max_vcpus
) {
166 kvm
->arch
.vgic
.in_kernel
= true;
167 kvm
->arch
.vgic
.vgic_model
= type
;
170 * kvm_vgic_global_state.vctrl_base is set on vgic probe (kvm_arch_init)
171 * it is stored in distributor struct for asm save/restore purpose
173 kvm
->arch
.vgic
.vctrl_base
= kvm_vgic_global_state
.vctrl_base
;
175 kvm
->arch
.vgic
.vgic_dist_base
= VGIC_ADDR_UNDEF
;
176 kvm
->arch
.vgic
.vgic_cpu_base
= VGIC_ADDR_UNDEF
;
177 kvm
->arch
.vgic
.vgic_redist_base
= VGIC_ADDR_UNDEF
;
180 for (; vcpu_lock_idx
>= 0; vcpu_lock_idx
--) {
181 vcpu
= kvm_get_vcpu(kvm
, vcpu_lock_idx
);
182 mutex_unlock(&vcpu
->mutex
);
190 * kvm_vgic_dist_init: initialize the dist data structures
191 * @kvm: kvm struct pointer
192 * @nr_spis: number of spis, frozen by caller
194 static int kvm_vgic_dist_init(struct kvm
*kvm
, unsigned int nr_spis
)
196 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
197 struct kvm_vcpu
*vcpu0
= kvm_get_vcpu(kvm
, 0);
200 dist
->spis
= kcalloc(nr_spis
, sizeof(struct vgic_irq
), GFP_KERNEL
);
205 * In the following code we do not take the irq struct lock since
206 * no other action on irq structs can happen while the VGIC is
207 * not initialized yet:
208 * If someone wants to inject an interrupt or does a MMIO access, we
209 * require prior initialization in case of a virtual GICv3 or trigger
210 * initialization when using a virtual GICv2.
212 for (i
= 0; i
< nr_spis
; i
++) {
213 struct vgic_irq
*irq
= &dist
->spis
[i
];
215 irq
->intid
= i
+ VGIC_NR_PRIVATE_IRQS
;
216 INIT_LIST_HEAD(&irq
->ap_list
);
217 spin_lock_init(&irq
->irq_lock
);
219 irq
->target_vcpu
= vcpu0
;
220 kref_init(&irq
->refcount
);
221 if (dist
->vgic_model
== KVM_DEV_TYPE_ARM_VGIC_V2
)
230 * kvm_vgic_vcpu_init() - Register VCPU-specific KVM iodevs
231 * @vcpu: pointer to the VCPU being created and initialized
233 int kvm_vgic_vcpu_init(struct kvm_vcpu
*vcpu
)
236 struct vgic_dist
*dist
= &vcpu
->kvm
->arch
.vgic
;
238 if (!irqchip_in_kernel(vcpu
->kvm
))
242 * If we are creating a VCPU with a GICv3 we must also register the
243 * KVM io device for the redistributor that belongs to this VCPU.
245 if (dist
->vgic_model
== KVM_DEV_TYPE_ARM_VGIC_V3
) {
246 mutex_lock(&vcpu
->kvm
->lock
);
247 ret
= vgic_register_redist_iodev(vcpu
);
248 mutex_unlock(&vcpu
->kvm
->lock
);
253 static void kvm_vgic_vcpu_enable(struct kvm_vcpu
*vcpu
)
255 if (kvm_vgic_global_state
.type
== VGIC_V2
)
256 vgic_v2_enable(vcpu
);
258 vgic_v3_enable(vcpu
);
262 * vgic_init: allocates and initializes dist and vcpu data structures
263 * depending on two dimensioning parameters:
264 * - the number of spis
265 * - the number of vcpus
266 * The function is generally called when nr_spis has been explicitly set
267 * by the guest through the KVM DEVICE API. If not nr_spis is set to 256.
268 * vgic_initialized() returns true when this function has succeeded.
269 * Must be called with kvm->lock held!
271 int vgic_init(struct kvm
*kvm
)
273 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
274 struct kvm_vcpu
*vcpu
;
277 if (vgic_initialized(kvm
))
280 /* freeze the number of spis */
282 dist
->nr_spis
= VGIC_NR_IRQS_LEGACY
- VGIC_NR_PRIVATE_IRQS
;
284 ret
= kvm_vgic_dist_init(kvm
, dist
->nr_spis
);
288 if (vgic_has_its(kvm
)) {
289 ret
= vgic_v4_init(kvm
);
294 kvm_for_each_vcpu(i
, vcpu
, kvm
)
295 kvm_vgic_vcpu_enable(vcpu
);
297 ret
= kvm_vgic_setup_default_irq_routing(kvm
);
301 vgic_debug_init(kvm
);
303 dist
->initialized
= true;
306 * If we're initializing GICv2 on-demand when first running the VCPU
307 * then we need to load the VGIC state onto the CPU. We can detect
308 * this easily by checking if we are in between vcpu_load and vcpu_put
309 * when we just initialized the VGIC.
312 vcpu
= kvm_arm_get_running_vcpu();
320 static void kvm_vgic_dist_destroy(struct kvm
*kvm
)
322 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
325 dist
->initialized
= false;
330 if (vgic_supports_direct_msis(kvm
))
331 vgic_v4_teardown(kvm
);
334 void kvm_vgic_vcpu_destroy(struct kvm_vcpu
*vcpu
)
336 struct vgic_cpu
*vgic_cpu
= &vcpu
->arch
.vgic_cpu
;
338 INIT_LIST_HEAD(&vgic_cpu
->ap_list_head
);
341 /* To be called with kvm->lock held */
342 static void __kvm_vgic_destroy(struct kvm
*kvm
)
344 struct kvm_vcpu
*vcpu
;
347 vgic_debug_destroy(kvm
);
349 kvm_vgic_dist_destroy(kvm
);
351 kvm_for_each_vcpu(i
, vcpu
, kvm
)
352 kvm_vgic_vcpu_destroy(vcpu
);
355 void kvm_vgic_destroy(struct kvm
*kvm
)
357 mutex_lock(&kvm
->lock
);
358 __kvm_vgic_destroy(kvm
);
359 mutex_unlock(&kvm
->lock
);
363 * vgic_lazy_init: Lazy init is only allowed if the GIC exposed to the guest
364 * is a GICv2. A GICv3 must be explicitly initialized by the guest using the
365 * KVM_DEV_ARM_VGIC_GRP_CTRL KVM_DEVICE group.
366 * @kvm: kvm struct pointer
368 int vgic_lazy_init(struct kvm
*kvm
)
372 if (unlikely(!vgic_initialized(kvm
))) {
374 * We only provide the automatic initialization of the VGIC
375 * for the legacy case of a GICv2. Any other type must
376 * be explicitly initialized once setup with the respective
379 if (kvm
->arch
.vgic
.vgic_model
!= KVM_DEV_TYPE_ARM_VGIC_V2
)
382 mutex_lock(&kvm
->lock
);
383 ret
= vgic_init(kvm
);
384 mutex_unlock(&kvm
->lock
);
390 /* RESOURCE MAPPING */
393 * Map the MMIO regions depending on the VGIC model exposed to the guest
394 * called on the first VCPU run.
395 * Also map the virtual CPU interface into the VM.
396 * v2/v3 derivatives call vgic_init if not already done.
397 * vgic_ready() returns true if this function has succeeded.
398 * @kvm: kvm struct pointer
400 int kvm_vgic_map_resources(struct kvm
*kvm
)
402 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
405 mutex_lock(&kvm
->lock
);
406 if (!irqchip_in_kernel(kvm
))
409 if (dist
->vgic_model
== KVM_DEV_TYPE_ARM_VGIC_V2
)
410 ret
= vgic_v2_map_resources(kvm
);
412 ret
= vgic_v3_map_resources(kvm
);
415 __kvm_vgic_destroy(kvm
);
418 mutex_unlock(&kvm
->lock
);
424 static int vgic_init_cpu_starting(unsigned int cpu
)
426 enable_percpu_irq(kvm_vgic_global_state
.maint_irq
, 0);
431 static int vgic_init_cpu_dying(unsigned int cpu
)
433 disable_percpu_irq(kvm_vgic_global_state
.maint_irq
);
437 static irqreturn_t
vgic_maintenance_handler(int irq
, void *data
)
440 * We cannot rely on the vgic maintenance interrupt to be
441 * delivered synchronously. This means we can only use it to
442 * exit the VM, and we perform the handling of EOIed
443 * interrupts on the exit path (see vgic_process_maintenance).
449 * kvm_vgic_init_cpu_hardware - initialize the GIC VE hardware
451 * For a specific CPU, initialize the GIC VE hardware.
453 void kvm_vgic_init_cpu_hardware(void)
455 BUG_ON(preemptible());
458 * We want to make sure the list registers start out clear so that we
459 * only have the program the used registers.
461 if (kvm_vgic_global_state
.type
== VGIC_V2
)
464 kvm_call_hyp(__vgic_v3_init_lrs
);
468 * kvm_vgic_hyp_init: populates the kvm_vgic_global_state variable
469 * according to the host GIC model. Accordingly calls either
470 * vgic_v2/v3_probe which registers the KVM_DEVICE that can be
471 * instantiated by a guest later on .
473 int kvm_vgic_hyp_init(void)
475 const struct gic_kvm_info
*gic_kvm_info
;
478 gic_kvm_info
= gic_get_kvm_info();
482 if (!gic_kvm_info
->maint_irq
) {
483 kvm_err("No vgic maintenance irq\n");
487 switch (gic_kvm_info
->type
) {
489 ret
= vgic_v2_probe(gic_kvm_info
);
492 ret
= vgic_v3_probe(gic_kvm_info
);
494 static_branch_enable(&kvm_vgic_global_state
.gicv3_cpuif
);
495 kvm_info("GIC system register CPU interface enabled\n");
505 kvm_vgic_global_state
.maint_irq
= gic_kvm_info
->maint_irq
;
506 ret
= request_percpu_irq(kvm_vgic_global_state
.maint_irq
,
507 vgic_maintenance_handler
,
508 "vgic", kvm_get_running_vcpus());
510 kvm_err("Cannot register interrupt %d\n",
511 kvm_vgic_global_state
.maint_irq
);
515 ret
= cpuhp_setup_state(CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING
,
516 "kvm/arm/vgic:starting",
517 vgic_init_cpu_starting
, vgic_init_cpu_dying
);
519 kvm_err("Cannot register vgic CPU notifier\n");
523 kvm_info("vgic interrupt IRQ%d\n", kvm_vgic_global_state
.maint_irq
);
527 free_percpu_irq(kvm_vgic_global_state
.maint_irq
,
528 kvm_get_running_vcpus());