#
d9fdaad0 |
| 16-Jun-2022 |
Andre Przywara <andre.przywara@arm.com> |
arm: gic: fdt: fix PPI CPU mask calculation
The GICv2 DT binding describes the third cell in each interrupt descriptor as holding the trigger type, but also the CPU mask that this IRQ applies to, in
arm: gic: fdt: fix PPI CPU mask calculation
The GICv2 DT binding describes the third cell in each interrupt descriptor as holding the trigger type, but also the CPU mask that this IRQ applies to, in bits [15:8]. However this is not the case for GICv3, where we don't use a CPU mask in the third cell: a simple mask wouldn't fit for the many more supported cores anyway.
At the moment we fill this CPU mask field regardless of the GIC type, for the PMU and arch timer DT nodes. This is not only the wrong thing to do in case of a GICv3, but also triggers UBSAN splats when using more than 30 cores, as we do shifting beyond what a u32 can hold: $ lkvm run -k Image -c 31 --pmu arm/timer.c:13:22: runtime error: left shift of 1 by 31 places cannot be represented in type 'int' arm/timer.c:13:38: runtime error: signed integer overflow: -2147483648 - 1 cannot be represented in type 'int' arm/timer.c:13:43: runtime error: left shift of 2147483647 by 8 places cannot be represented in type 'int' arm/aarch64/pmu.c:202:22: runtime error: left shift of 1 by 31 places cannot be represented in type 'int' arm/aarch64/pmu.c:202:38: runtime error: signed integer overflow: -2147483648 - 1 cannot be represented in type 'int' arm/aarch64/pmu.c:202:43: runtime error: left shift of 2147483647 by 8 places cannot be represented in type 'int'
Fix that by adding a function that creates the mask by looking at the GIC type first, and returning zero when a GICv3 is used. Also we explicitly check for the CPU limit again, even though this would be done before already, when we try to create a GICv2 VM with more than 8 cores.
Acked-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Andre Przywara <andre.przywara@arm.com> Link: https://lore.kernel.org/r/20220616145526.3337196-1-andre.przywara@arm.com Signed-off-by: Will Deacon <will@kernel.org>
show more ...
|
#
e4f04b19 |
| 13-Jun-2016 |
Marc Zyngier <marc.zyngier@arm.com> |
kvmtool/arm: Fix timer trigger
KVM exposes a level triggered timer to the guest, and yet kvmtool presents it as being edge-triggered in the DT. Let's fix it and match what the kernel exposes.
Signe
kvmtool/arm: Fix timer trigger
KVM exposes a level triggered timer to the guest, and yet kvmtool presents it as being edge-triggered in the DT. Let's fix it and match what the kernel exposes.
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
show more ...
|
#
045fc040 |
| 17-Dec-2014 |
Andre Przywara <andre.przywara@arm.com> |
kvmtool: replace GIC specific IRQ type #defines
We had GIC specific defines for the IRQ type identifiers in kvmtool. But in fact the specification of being a level or edge interrupt is quite generic
kvmtool: replace GIC specific IRQ type #defines
We had GIC specific defines for the IRQ type identifiers in kvmtool. But in fact the specification of being a level or edge interrupt is quite generic, with the GIC binding using the generic Linux defines. So lets replace the GIC specific #defines in favour of the more general names copied from Linux' include/linux/irq.h.
Signed-off-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
show more ...
|
#
00751da0 |
| 20-Jun-2014 |
Marc Zyngier <marc.zyngier@arm.com> |
kvmtool: ARM: timers: add "always-on" property to the device tree
The new optional property "always-on" indicates that the timers are, well, always on when used with KVM.
This allows for substantia
kvmtool: ARM: timers: add "always-on" property to the device tree
The new optional property "always-on" indicates that the timers are, well, always on when used with KVM.
This allows for substantial performance improvement in the guest (it switches to NOHZ instead of using a periodic tick per vcpu) and removes a lot of burden from the host (no need to inject tons of interrupts with the associated rescheduling overhead).
Old kernels that don't understand this property will simply ignore it.
Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
show more ...
|
#
f4c0490c |
| 06-Jan-2014 |
Robin Murphy <Robin.Murphy@arm.com> |
kvm tools: arm: add option to override generic timer frequency
Some platforms have secure firmware which does not correctly set the CNTFRQ register on boot, preventing the use of the Generic Timer.
kvm tools: arm: add option to override generic timer frequency
Some platforms have secure firmware which does not correctly set the CNTFRQ register on boot, preventing the use of the Generic Timer. This patch allows mirroring the necessary host workaround by specifying the clock-frequency property in the guest DT.
This should only be considered a means of KVM bring-up on such systems, such that vendors may be convinced to properly implement their firmware to support the virtualisation capabilities of their hardware.
Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
show more ...
|
#
909d7f77 |
| 06-Jan-2014 |
Jonathan Austin <Jonathan.Austin@arm.com> |
kvm tools: arm: extract common timer support code for ARM cpus
The ARM V7 and V8 CPUs use the nearly identical support code for generating timer DT nodes as they both use ARM's architected timers. T
kvm tools: arm: extract common timer support code for ARM cpus
The ARM V7 and V8 CPUs use the nearly identical support code for generating timer DT nodes as they both use ARM's architected timers. This code is currently duplicated for AArch32 and AArch64.
This cleanup patch generalises timer DT node generation to follow the same pattern as for the GIC. The ability of a DT node to contain multiple compatible strings is exploited to allow an identical DT node to be used on V7 and V8 platforms.
Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Jonathan Austin <jonathan.austin@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
show more ...
|