Home
last modified time | relevance | path

Searched full:vgic (Results 1 – 25 of 95) sorted by relevance

1234

/kernel/linux/linux-5.10/arch/arm64/kvm/
DMakefile18 vgic-sys-reg-v3.o fpsimd.o pmu.o \
20 vgic/vgic.o vgic/vgic-init.o \
21 vgic/vgic-irqfd.o vgic/vgic-v2.o \
22 vgic/vgic-v3.o vgic/vgic-v4.o \
23 vgic/vgic-mmio.o vgic/vgic-mmio-v2.o \
24 vgic/vgic-mmio-v3.o vgic/vgic-kvm-device.o \
25 vgic/vgic-its.o vgic/vgic-debug.o
/kernel/linux/linux-6.6/arch/arm64/kvm/
DMakefile16 vgic-sys-reg-v3.o fpsimd.o pkvm.o \
18 vgic/vgic.o vgic/vgic-init.o \
19 vgic/vgic-irqfd.o vgic/vgic-v2.o \
20 vgic/vgic-v3.o vgic/vgic-v4.o \
21 vgic/vgic-mmio.o vgic/vgic-mmio-v2.o \
22 vgic/vgic-mmio-v3.o vgic/vgic-kvm-device.o \
23 vgic/vgic-its.o vgic/vgic-debug.o
/kernel/linux/linux-5.10/arch/arm64/kvm/vgic/
Dvgic-init.c13 #include "vgic.h"
16 * Initialization rules: there are multiple stages to the vgic
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
45 * kvm_vgic_early_init() - Initialize static VGIC VCPU data structures
46 * @kvm: The VM whose VGIC districutor should be initialized
54 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_early_init()
64 * kvm_vgic_create: triggered by the instantiation of the VGIC device by
109 kvm->arch.vgic.in_kernel = true; in kvm_vgic_create()
110 kvm->arch.vgic.vgic_model = type; in kvm_vgic_create()
[all …]
Dvgic-debug.c14 #include "vgic.h"
17 * Structure to control looping through the entire vgic state. We start at
63 iter->nr_spis = kvm->arch.vgic.nr_spis; in iter_init()
64 if (kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { in iter_init()
89 iter = kvm->arch.vgic.iter; in vgic_debug_start()
102 kvm->arch.vgic.iter = iter; in vgic_debug_start()
114 struct vgic_state_iter *iter = kvm->arch.vgic.iter; in vgic_debug_next()
136 iter = kvm->arch.vgic.iter; in vgic_debug_stop()
139 kvm->arch.vgic.iter = NULL; in vgic_debug_stop()
239 print_dist_state(s, &kvm->arch.vgic); in vgic_debug_show()
[all …]
Dvgic-kvm-device.c3 * VGIC: KVM DEVICE API
13 #include "vgic.h"
34 if (kvm->arch.vgic.vgic_model != type_needed) in vgic_check_type()
41 * kvm_vgic_addr - set or get vgic VM base addresses
43 * @type: the VGIC addr type, one of KVM_VGIC_V[23]_ADDR_TYPE_XXX
48 * Set or get the vgic base addresses for the distributor and the virtual CPU
59 struct vgic_dist *vgic = &kvm->arch.vgic; in kvm_vgic_addr() local
67 addr_ptr = &vgic->vgic_dist_base; in kvm_vgic_addr()
72 addr_ptr = &vgic->vgic_cpu_base; in kvm_vgic_addr()
77 addr_ptr = &vgic->vgic_dist_base; in kvm_vgic_addr()
[all …]
Dvgic-v3.c11 #include "vgic.h"
35 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_fold_lr_state()
92 * observe rising edges as input to the VGIC. in vgic_v3_fold_lr_state()
120 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_populate_lr()
185 * rising edges as input to the VGIC. We therefore lower the line in vgic_v3_populate_lr()
208 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_set_vmcr()
238 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_get_vmcr()
288 if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { in vgic_v3_enable()
365 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_v3_save_pending_tables()
422 struct vgic_dist *d = &kvm->arch.vgic; in vgic_v3_rdist_overlap()
[all …]
Dvgic-v2.c12 #include "vgic.h"
101 * observe rising edges as input to the VGIC. in vgic_v2_fold_lr_state()
202 * rising edges as input to the VGIC. We therefore lower the line in vgic_v2_populate_lr()
306 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_v2_map_resources()
314 kvm_err("Need to set vgic cpu and dist addresses first\n"); in vgic_v2_map_resources()
320 kvm_err("VGIC CPU and dist frames overlap\n"); in vgic_v2_map_resources()
326 * Initialize the vgic if this hasn't already been done on demand by in vgic_v2_map_resources()
327 * accessing the vgic state from userspace. in vgic_v2_map_resources()
331 kvm_err("Unable to initialize VGIC dynamic data structures\n"); in vgic_v2_map_resources()
337 kvm_err("Unable to register VGIC MMIO regions\n"); in vgic_v2_map_resources()
[all …]
Dvgic-mmio-v3.c18 #include "vgic.h"
19 #include "vgic-mmio.h"
43 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_has_its()
67 struct vgic_dist *vgic = &vcpu->kvm->arch.vgic; in vgic_mmio_read_v3_misc() local
72 if (vgic->enabled) in vgic_mmio_read_v3_misc()
75 if (vgic->nassgireq) in vgic_mmio_read_v3_misc()
79 value = vgic->nr_spis + VGIC_NR_PRIVATE_IRQS; in vgic_mmio_read_v3_misc()
94 (vgic->implementation_rev << GICD_IIDR_REVISION_SHIFT) | in vgic_mmio_read_v3_misc()
108 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_write_v3_misc()
157 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_uaccess_write_v3_misc()
[all …]
Dvgic-mmio-v2.c14 #include "vgic.h"
15 #include "vgic-mmio.h"
28 struct vgic_dist *vgic = &vcpu->kvm->arch.vgic; in vgic_mmio_read_v2_misc() local
33 value = vgic->enabled ? GICD_ENABLE : 0; in vgic_mmio_read_v2_misc()
36 value = vgic->nr_spis + VGIC_NR_PRIVATE_IRQS; in vgic_mmio_read_v2_misc()
42 (vgic->implementation_rev << GICD_IIDR_REVISION_SHIFT) | in vgic_mmio_read_v2_misc()
56 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_write_v2_misc()
90 vcpu->kvm->arch.vgic.v2_groups_user_writable = true; in vgic_mmio_uaccess_write_v2_misc()
102 if (vcpu->kvm->arch.vgic.v2_groups_user_writable) in vgic_mmio_uaccess_write_v2_group()
/kernel/linux/linux-6.6/arch/arm64/kvm/vgic/
Dvgic-init.c13 #include "vgic.h"
16 * Initialization rules: there are multiple stages to the vgic
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
45 * kvm_vgic_early_init() - Initialize static VGIC VCPU data structures
46 * @kvm: The VM whose VGIC districutor should be initialized
54 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_early_init()
64 * kvm_vgic_create: triggered by the instantiation of the VGIC device by
117 kvm->arch.vgic.in_kernel = true; in kvm_vgic_create()
118 kvm->arch.vgic.vgic_model = type; in kvm_vgic_create()
[all …]
Dvgic-kvm-device.c3 * VGIC: KVM DEVICE API
13 #include "vgic.h"
38 if (kvm->arch.vgic.vgic_model != type_needed) in vgic_check_type()
46 struct vgic_dist *vgic = &kvm->arch.vgic; in kvm_set_legacy_vgic_v2_addr() local
54 r = vgic_check_iorange(kvm, vgic->vgic_dist_base, dev_addr->addr, in kvm_set_legacy_vgic_v2_addr()
57 vgic->vgic_dist_base = dev_addr->addr; in kvm_set_legacy_vgic_v2_addr()
62 r = vgic_check_iorange(kvm, vgic->vgic_cpu_base, dev_addr->addr, in kvm_set_legacy_vgic_v2_addr()
65 vgic->vgic_cpu_base = dev_addr->addr; in kvm_set_legacy_vgic_v2_addr()
77 * kvm_vgic_addr - set or get vgic VM base addresses
83 * Set or get the vgic base addresses for the distributor and the virtual CPU
[all …]
Dvgic-debug.c14 #include "vgic.h"
17 * Structure to control looping through the entire vgic state. We start at
63 iter->nr_spis = kvm->arch.vgic.nr_spis; in iter_init()
64 if (kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { in iter_init()
89 iter = kvm->arch.vgic.iter; in vgic_debug_start()
102 kvm->arch.vgic.iter = iter; in vgic_debug_start()
114 struct vgic_state_iter *iter = kvm->arch.vgic.iter; in vgic_debug_next()
136 iter = kvm->arch.vgic.iter; in vgic_debug_stop()
139 kvm->arch.vgic.iter = NULL; in vgic_debug_stop()
239 print_dist_state(s, &kvm->arch.vgic); in vgic_debug_show()
[all …]
Dvgic-v3.c14 #include "vgic.h"
39 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_fold_lr_state()
109 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_populate_lr()
174 * rising edges as input to the VGIC. We therefore lower the line in vgic_v3_populate_lr()
197 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_set_vmcr()
227 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_get_vmcr()
277 if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { in vgic_v3_enable()
356 struct vgic_dist *dist = &kvm->arch.vgic; in unmap_all_vpes()
365 struct vgic_dist *dist = &kvm->arch.vgic; in map_all_vpes()
379 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_v3_save_pending_tables()
[all …]
Dvgic-mmio-v2.c14 #include "vgic.h"
15 #include "vgic-mmio.h"
28 struct vgic_dist *vgic = &vcpu->kvm->arch.vgic; in vgic_mmio_read_v2_misc() local
33 value = vgic->enabled ? GICD_ENABLE : 0; in vgic_mmio_read_v2_misc()
36 value = vgic->nr_spis + VGIC_NR_PRIVATE_IRQS; in vgic_mmio_read_v2_misc()
42 (vgic->implementation_rev << GICD_IIDR_REVISION_SHIFT) | in vgic_mmio_read_v2_misc()
56 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_write_v2_misc()
76 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_uaccess_write_v2_misc()
98 vcpu->kvm->arch.vgic.v2_groups_user_writable = true; in vgic_mmio_uaccess_write_v2_misc()
114 if (vcpu->kvm->arch.vgic.v2_groups_user_writable) in vgic_mmio_uaccess_write_v2_group()
Dvgic-v2.c12 #include "vgic.h"
187 * rising edges as input to the VGIC. We therefore lower the line in vgic_v2_populate_lr()
291 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_v2_map_resources()
296 kvm_debug("Need to set vgic cpu and dist addresses first\n"); in vgic_v2_map_resources()
301 kvm_debug("VGIC CPU and dist frames overlap\n"); in vgic_v2_map_resources()
306 * Initialize the vgic if this hasn't already been done on demand by in vgic_v2_map_resources()
307 * accessing the vgic state from userspace. in vgic_v2_map_resources()
311 kvm_err("Unable to initialize VGIC dynamic data structures\n"); in vgic_v2_map_resources()
320 kvm_err("Unable to remap VGIC CPU to VCPU\n"); in vgic_v2_map_resources()
391 kvm_debug("vgic-v2@%llx\n", info->vctrl.start); in vgic_v2_probe()
Dvgic-mmio-v3.c18 #include "vgic.h"
19 #include "vgic-mmio.h"
43 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_has_its()
67 struct vgic_dist *vgic = &vcpu->kvm->arch.vgic; in vgic_mmio_read_v3_misc() local
72 if (vgic->enabled) in vgic_mmio_read_v3_misc()
75 if (vgic->nassgireq) in vgic_mmio_read_v3_misc()
79 value = vgic->nr_spis + VGIC_NR_PRIVATE_IRQS; in vgic_mmio_read_v3_misc()
94 (vgic->implementation_rev << GICD_IIDR_REVISION_SHIFT) | in vgic_mmio_read_v3_misc()
108 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_write_v3_misc()
157 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_uaccess_write_v3_misc()
[all …]
Dvgic-mmio.c3 * VGIC MMIO handling functions
16 #include "vgic.h"
17 #include "vgic-mmio.h"
148 * while the interrupt was disabled at the VGIC level. in vgic_mmio_write_senable()
249 * Refer to Documentation/virt/kvm/devices/arm-vgic-v3.rst in __read_pending()
264 switch (vcpu->kvm->arch.vgic.vgic_model) { in __read_pending()
301 vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2); in is_vgic_v2_sgi()
388 * can happen is an additional vgic injection. We also clear in vgic_hw_irq_cpending()
482 * userspace accesses to the VGIC state already require all VCPUs to be
488 if ((vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 && in vgic_access_active_prepare()
[all …]
/kernel/linux/linux-6.6/arch/arm64/kvm/hyp/
Dvgic-v2-cpuif-proxy.c40 struct vgic_dist *vgic = &kvm->arch.vgic; in __vgic_v2_perform_cpuif_access() local
50 if (fault_ipa < vgic->vgic_cpu_base || in __vgic_v2_perform_cpuif_access()
51 fault_ipa >= (vgic->vgic_cpu_base + KVM_VGIC_V2_CPU_SIZE)) in __vgic_v2_perform_cpuif_access()
68 addr += fault_ipa - vgic->vgic_cpu_base; in __vgic_v2_perform_cpuif_access()
/kernel/linux/linux-5.10/arch/arm64/kvm/hyp/
Dvgic-v2-cpuif-proxy.c38 struct vgic_dist *vgic = &kvm->arch.vgic; in __vgic_v2_perform_cpuif_access() local
48 if (fault_ipa < vgic->vgic_cpu_base || in __vgic_v2_perform_cpuif_access()
49 fault_ipa >= (vgic->vgic_cpu_base + KVM_VGIC_V2_CPU_SIZE)) in __vgic_v2_perform_cpuif_access()
66 addr += fault_ipa - vgic->vgic_cpu_base; in __vgic_v2_perform_cpuif_access()
/kernel/linux/linux-6.6/Documentation/virt/kvm/devices/
Dindex.rst10 arm-vgic-its
11 arm-vgic
12 arm-vgic-v3
Darm-vgic.rst4 ARM Virtual Generic Interrupt Controller v2 (VGIC)
11 Only one VGIC instance may be instantiated through either this API or the
12 legacy KVM_CREATE_IRQCHIP API. The created VGIC will act as the VM interrupt
14 VGIC instead of directly to CPUs.
18 device and guest ITS devices, see arm-vgic-v3.txt. It is not possible to
146 request the initialization of the VGIC or ITS, no additional parameter
152 -ENXIO VGIC not properly configured as required prior to calling
155 -ENOMEM memory shortage when allocating vgic internal data
/kernel/linux/linux-5.10/Documentation/virt/kvm/devices/
Dindex.rst10 arm-vgic-its
11 arm-vgic
12 arm-vgic-v3
Darm-vgic.rst4 ARM Virtual Generic Interrupt Controller v2 (VGIC)
11 Only one VGIC instance may be instantiated through either this API or the
12 legacy KVM_CREATE_IRQCHIP API. The created VGIC will act as the VM interrupt
14 VGIC instead of directly to CPUs.
18 device and guest ITS devices, see arm-vgic-v3.txt. It is not possible to
146 request the initialization of the VGIC or ITS, no additional parameter
152 -ENXIO VGIC not properly configured as required prior to calling
155 -ENOMEM memory shortage when allocating vgic internal data
/kernel/linux/linux-5.10/include/kvm/
Darm_vgic.h46 /* Physical address of vgic virtual cpu interface */
208 /* vGIC model the kernel emulates for the guest (GICv2 or GICv3) */
259 /* used by vgic-debug */
364 #define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel))
365 #define vgic_initialized(k) ((k)->arch.vgic.initialized)
366 #define vgic_ready(k) ((k)->arch.vgic.ready)
368 ((i) < (k)->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS))
/kernel/linux/linux-6.6/include/kvm/
Darm_vgic.h48 /* Physical address of vgic virtual cpu interface */
229 /* vGIC model the kernel emulates for the guest (GICv2 or GICv3) */
284 /* used by vgic-debug */
392 #define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel))
393 #define vgic_initialized(k) ((k)->arch.vgic.initialized)
394 #define vgic_ready(k) ((k)->arch.vgic.ready)
396 ((i) < (k)->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS))

1234