1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2015, 2016 ARM Ltd.
6 #include <linux/uaccess.h>
7 #include <linux/interrupt.h>
9 #include <linux/kvm_host.h>
10 #include <kvm/arm_vgic.h>
11 #include <asm/kvm_emulate.h>
12 #include <asm/kvm_mmu.h>
16 * Initialization rules: there are multiple stages to the vgic
17 * initialization, both for the distributor and the CPU interfaces. The basic
18 * idea is that even though the VGIC is not functional or not requested from
19 * user space, the critical path of the run loop can still call VGIC functions
20 * that just won't do anything, without them having to check additional
21 * initialization flags to ensure they don't look at uninitialized data
26 * - kvm_vgic_early_init(): initialization of static data that doesn't
27 * depend on any sizing information or emulation type. No allocation
30 * - vgic_init(): allocation and initialization of the generic data
31 * structures that depend on sizing information (number of CPUs,
32 * number of interrupts). Also initializes the vcpu specific data
33 * structures. Can be executed lazily for GICv2.
37 * - kvm_vgic_vcpu_init(): initialization of static data that
38 * doesn't depend on any sizing information or emulation type. No
39 * allocation is allowed there.
45 * kvm_vgic_early_init() - Initialize static VGIC VCPU data structures
46 * @kvm: The VM whose VGIC districutor should be initialized
48 * Only do initialization of static structures that don't require any
49 * allocation or sizing information from userspace. vgic_init() called
50 * kvm_vgic_dist_init() which takes care of the rest.
52 void kvm_vgic_early_init(struct kvm
*kvm
)
54 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
56 INIT_LIST_HEAD(&dist
->lpi_list_head
);
57 INIT_LIST_HEAD(&dist
->lpi_translation_cache
);
58 raw_spin_lock_init(&dist
->lpi_list_lock
);
64 * kvm_vgic_create: triggered by the instantiation of the VGIC device by
65 * user space, either through the legacy KVM_CREATE_IRQCHIP ioctl (v2 only)
66 * or through the generic KVM_CREATE_DEVICE API ioctl.
67 * irqchip_in_kernel() tells you if this function succeeded or not.
68 * @kvm: kvm struct pointer
69 * @type: KVM_DEV_TYPE_ARM_VGIC_V[23]
71 int kvm_vgic_create(struct kvm
*kvm
, u32 type
)
74 struct kvm_vcpu
*vcpu
;
76 if (irqchip_in_kernel(kvm
))
80 * This function is also called by the KVM_CREATE_IRQCHIP handler,
81 * which had no chance yet to check the availability of the GICv2
82 * emulation. So check this here again. KVM_CREATE_DEVICE does
83 * the proper checks already.
85 if (type
== KVM_DEV_TYPE_ARM_VGIC_V2
&&
86 !kvm_vgic_global_state
.can_emulate_gicv2
)
90 if (!lock_all_vcpus(kvm
))
93 kvm_for_each_vcpu(i
, vcpu
, kvm
) {
94 if (vcpu
->arch
.has_run_once
)
99 if (type
== KVM_DEV_TYPE_ARM_VGIC_V2
)
100 kvm
->arch
.max_vcpus
= VGIC_V2_MAX_CPUS
;
102 kvm
->arch
.max_vcpus
= VGIC_V3_MAX_CPUS
;
104 if (atomic_read(&kvm
->online_vcpus
) > kvm
->arch
.max_vcpus
) {
109 kvm
->arch
.vgic
.in_kernel
= true;
110 kvm
->arch
.vgic
.vgic_model
= type
;
112 kvm
->arch
.vgic
.vgic_dist_base
= VGIC_ADDR_UNDEF
;
114 if (type
== KVM_DEV_TYPE_ARM_VGIC_V2
)
115 kvm
->arch
.vgic
.vgic_cpu_base
= VGIC_ADDR_UNDEF
;
117 INIT_LIST_HEAD(&kvm
->arch
.vgic
.rd_regions
);
120 unlock_all_vcpus(kvm
);
127 * kvm_vgic_dist_init: initialize the dist data structures
128 * @kvm: kvm struct pointer
129 * @nr_spis: number of spis, frozen by caller
131 static int kvm_vgic_dist_init(struct kvm
*kvm
, unsigned int nr_spis
)
133 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
134 struct kvm_vcpu
*vcpu0
= kvm_get_vcpu(kvm
, 0);
137 dist
->spis
= kcalloc(nr_spis
, sizeof(struct vgic_irq
), GFP_KERNEL
);
142 * In the following code we do not take the irq struct lock since
143 * no other action on irq structs can happen while the VGIC is
144 * not initialized yet:
145 * If someone wants to inject an interrupt or does a MMIO access, we
146 * require prior initialization in case of a virtual GICv3 or trigger
147 * initialization when using a virtual GICv2.
149 for (i
= 0; i
< nr_spis
; i
++) {
150 struct vgic_irq
*irq
= &dist
->spis
[i
];
152 irq
->intid
= i
+ VGIC_NR_PRIVATE_IRQS
;
153 INIT_LIST_HEAD(&irq
->ap_list
);
154 raw_spin_lock_init(&irq
->irq_lock
);
156 irq
->target_vcpu
= vcpu0
;
157 kref_init(&irq
->refcount
);
158 switch (dist
->vgic_model
) {
159 case KVM_DEV_TYPE_ARM_VGIC_V2
:
163 case KVM_DEV_TYPE_ARM_VGIC_V3
:
177 * kvm_vgic_vcpu_init() - Initialize static VGIC VCPU data
178 * structures and register VCPU-specific KVM iodevs
180 * @vcpu: pointer to the VCPU being created and initialized
182 * Only do initialization, but do not actually enable the
185 int kvm_vgic_vcpu_init(struct kvm_vcpu
*vcpu
)
187 struct vgic_cpu
*vgic_cpu
= &vcpu
->arch
.vgic_cpu
;
188 struct vgic_dist
*dist
= &vcpu
->kvm
->arch
.vgic
;
192 vgic_cpu
->rd_iodev
.base_addr
= VGIC_ADDR_UNDEF
;
194 INIT_LIST_HEAD(&vgic_cpu
->ap_list_head
);
195 raw_spin_lock_init(&vgic_cpu
->ap_list_lock
);
196 atomic_set(&vgic_cpu
->vgic_v3
.its_vpe
.vlpi_count
, 0);
199 * Enable and configure all SGIs to be edge-triggered and
200 * configure all PPIs as level-triggered.
202 for (i
= 0; i
< VGIC_NR_PRIVATE_IRQS
; i
++) {
203 struct vgic_irq
*irq
= &vgic_cpu
->private_irqs
[i
];
205 INIT_LIST_HEAD(&irq
->ap_list
);
206 raw_spin_lock_init(&irq
->irq_lock
);
209 irq
->target_vcpu
= vcpu
;
210 kref_init(&irq
->refcount
);
211 if (vgic_irq_is_sgi(i
)) {
214 irq
->config
= VGIC_CONFIG_EDGE
;
217 irq
->config
= VGIC_CONFIG_LEVEL
;
221 if (!irqchip_in_kernel(vcpu
->kvm
))
225 * If we are creating a VCPU with a GICv3 we must also register the
226 * KVM io device for the redistributor that belongs to this VCPU.
228 if (dist
->vgic_model
== KVM_DEV_TYPE_ARM_VGIC_V3
) {
229 mutex_lock(&vcpu
->kvm
->lock
);
230 ret
= vgic_register_redist_iodev(vcpu
);
231 mutex_unlock(&vcpu
->kvm
->lock
);
236 static void kvm_vgic_vcpu_enable(struct kvm_vcpu
*vcpu
)
238 if (kvm_vgic_global_state
.type
== VGIC_V2
)
239 vgic_v2_enable(vcpu
);
241 vgic_v3_enable(vcpu
);
245 * vgic_init: allocates and initializes dist and vcpu data structures
246 * depending on two dimensioning parameters:
247 * - the number of spis
248 * - the number of vcpus
249 * The function is generally called when nr_spis has been explicitly set
250 * by the guest through the KVM DEVICE API. If not nr_spis is set to 256.
251 * vgic_initialized() returns true when this function has succeeded.
252 * Must be called with kvm->lock held!
254 int vgic_init(struct kvm
*kvm
)
256 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
257 struct kvm_vcpu
*vcpu
;
260 if (vgic_initialized(kvm
))
263 /* Are we also in the middle of creating a VCPU? */
264 if (kvm
->created_vcpus
!= atomic_read(&kvm
->online_vcpus
))
267 /* freeze the number of spis */
269 dist
->nr_spis
= VGIC_NR_IRQS_LEGACY
- VGIC_NR_PRIVATE_IRQS
;
271 ret
= kvm_vgic_dist_init(kvm
, dist
->nr_spis
);
275 /* Initialize groups on CPUs created before the VGIC type was known */
276 kvm_for_each_vcpu(idx
, vcpu
, kvm
) {
277 struct vgic_cpu
*vgic_cpu
= &vcpu
->arch
.vgic_cpu
;
279 for (i
= 0; i
< VGIC_NR_PRIVATE_IRQS
; i
++) {
280 struct vgic_irq
*irq
= &vgic_cpu
->private_irqs
[i
];
281 switch (dist
->vgic_model
) {
282 case KVM_DEV_TYPE_ARM_VGIC_V3
:
284 irq
->mpidr
= kvm_vcpu_get_mpidr_aff(vcpu
);
286 case KVM_DEV_TYPE_ARM_VGIC_V2
:
288 irq
->targets
= 1U << idx
;
297 if (vgic_has_its(kvm
)) {
298 vgic_lpi_translation_cache_init(kvm
);
299 ret
= vgic_v4_init(kvm
);
304 kvm_for_each_vcpu(i
, vcpu
, kvm
)
305 kvm_vgic_vcpu_enable(vcpu
);
307 ret
= kvm_vgic_setup_default_irq_routing(kvm
);
311 vgic_debug_init(kvm
);
313 dist
->implementation_rev
= 2;
314 dist
->initialized
= true;
320 static void kvm_vgic_dist_destroy(struct kvm
*kvm
)
322 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
323 struct vgic_redist_region
*rdreg
, *next
;
326 dist
->initialized
= false;
332 if (kvm
->arch
.vgic
.vgic_model
== KVM_DEV_TYPE_ARM_VGIC_V3
) {
333 list_for_each_entry_safe(rdreg
, next
, &dist
->rd_regions
, list
) {
334 list_del(&rdreg
->list
);
337 INIT_LIST_HEAD(&dist
->rd_regions
);
340 if (vgic_has_its(kvm
))
341 vgic_lpi_translation_cache_destroy(kvm
);
343 if (vgic_supports_direct_msis(kvm
))
344 vgic_v4_teardown(kvm
);
347 void kvm_vgic_vcpu_destroy(struct kvm_vcpu
*vcpu
)
349 struct vgic_cpu
*vgic_cpu
= &vcpu
->arch
.vgic_cpu
;
351 INIT_LIST_HEAD(&vgic_cpu
->ap_list_head
);
354 /* To be called with kvm->lock held */
355 static void __kvm_vgic_destroy(struct kvm
*kvm
)
357 struct kvm_vcpu
*vcpu
;
360 vgic_debug_destroy(kvm
);
362 kvm_vgic_dist_destroy(kvm
);
364 kvm_for_each_vcpu(i
, vcpu
, kvm
)
365 kvm_vgic_vcpu_destroy(vcpu
);
368 void kvm_vgic_destroy(struct kvm
*kvm
)
370 mutex_lock(&kvm
->lock
);
371 __kvm_vgic_destroy(kvm
);
372 mutex_unlock(&kvm
->lock
);
376 * vgic_lazy_init: Lazy init is only allowed if the GIC exposed to the guest
377 * is a GICv2. A GICv3 must be explicitly initialized by the guest using the
378 * KVM_DEV_ARM_VGIC_GRP_CTRL KVM_DEVICE group.
379 * @kvm: kvm struct pointer
381 int vgic_lazy_init(struct kvm
*kvm
)
385 if (unlikely(!vgic_initialized(kvm
))) {
387 * We only provide the automatic initialization of the VGIC
388 * for the legacy case of a GICv2. Any other type must
389 * be explicitly initialized once setup with the respective
392 if (kvm
->arch
.vgic
.vgic_model
!= KVM_DEV_TYPE_ARM_VGIC_V2
)
395 mutex_lock(&kvm
->lock
);
396 ret
= vgic_init(kvm
);
397 mutex_unlock(&kvm
->lock
);
403 /* RESOURCE MAPPING */
406 * Map the MMIO regions depending on the VGIC model exposed to the guest
407 * called on the first VCPU run.
408 * Also map the virtual CPU interface into the VM.
409 * v2/v3 derivatives call vgic_init if not already done.
410 * vgic_ready() returns true if this function has succeeded.
411 * @kvm: kvm struct pointer
413 int kvm_vgic_map_resources(struct kvm
*kvm
)
415 struct vgic_dist
*dist
= &kvm
->arch
.vgic
;
418 mutex_lock(&kvm
->lock
);
419 if (!irqchip_in_kernel(kvm
))
422 if (dist
->vgic_model
== KVM_DEV_TYPE_ARM_VGIC_V2
)
423 ret
= vgic_v2_map_resources(kvm
);
425 ret
= vgic_v3_map_resources(kvm
);
428 __kvm_vgic_destroy(kvm
);
431 mutex_unlock(&kvm
->lock
);
437 static int vgic_init_cpu_starting(unsigned int cpu
)
439 enable_percpu_irq(kvm_vgic_global_state
.maint_irq
, 0);
444 static int vgic_init_cpu_dying(unsigned int cpu
)
446 disable_percpu_irq(kvm_vgic_global_state
.maint_irq
);
450 static irqreturn_t
vgic_maintenance_handler(int irq
, void *data
)
453 * We cannot rely on the vgic maintenance interrupt to be
454 * delivered synchronously. This means we can only use it to
455 * exit the VM, and we perform the handling of EOIed
456 * interrupts on the exit path (see vgic_fold_lr_state).
462 * kvm_vgic_init_cpu_hardware - initialize the GIC VE hardware
464 * For a specific CPU, initialize the GIC VE hardware.
466 void kvm_vgic_init_cpu_hardware(void)
468 BUG_ON(preemptible());
471 * We want to make sure the list registers start out clear so that we
472 * only have the program the used registers.
474 if (kvm_vgic_global_state
.type
== VGIC_V2
)
477 kvm_call_hyp(__vgic_v3_init_lrs
);
481 * kvm_vgic_hyp_init: populates the kvm_vgic_global_state variable
482 * according to the host GIC model. Accordingly calls either
483 * vgic_v2/v3_probe which registers the KVM_DEVICE that can be
484 * instantiated by a guest later on .
486 int kvm_vgic_hyp_init(void)
488 const struct gic_kvm_info
*gic_kvm_info
;
491 gic_kvm_info
= gic_get_kvm_info();
495 if (!gic_kvm_info
->maint_irq
) {
496 kvm_err("No vgic maintenance irq\n");
500 switch (gic_kvm_info
->type
) {
502 ret
= vgic_v2_probe(gic_kvm_info
);
505 ret
= vgic_v3_probe(gic_kvm_info
);
507 static_branch_enable(&kvm_vgic_global_state
.gicv3_cpuif
);
508 kvm_info("GIC system register CPU interface enabled\n");
518 kvm_vgic_global_state
.maint_irq
= gic_kvm_info
->maint_irq
;
519 ret
= request_percpu_irq(kvm_vgic_global_state
.maint_irq
,
520 vgic_maintenance_handler
,
521 "vgic", kvm_get_running_vcpus());
523 kvm_err("Cannot register interrupt %d\n",
524 kvm_vgic_global_state
.maint_irq
);
528 ret
= cpuhp_setup_state(CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING
,
529 "kvm/arm/vgic:starting",
530 vgic_init_cpu_starting
, vgic_init_cpu_dying
);
532 kvm_err("Cannot register vgic CPU notifier\n");
536 kvm_info("vgic interrupt IRQ%d\n", kvm_vgic_global_state
.maint_irq
);
540 free_percpu_irq(kvm_vgic_global_state
.maint_irq
,
541 kvm_get_running_vcpus());