qemu/hw
Peter Maydell 82a65e3188 hw/intc/arm_gicv3_cpuif: handle LPIs in in the list registers
The hypervisor can deliver (virtual) LPIs to a guest by setting up a
list register to have an intid which is an LPI.  The GIC has to treat
these a little differently to standard interrupt IDs, because LPIs
have no Active state, and so the guest will only EOI them, it will
not also deactivate them.  So icv_eoir_write() must do two things:

 * if the LPI ID is not in any list register, we drop the
   priority but do not increment the EOI count
 * if the LPI ID is in a list register, we immediately deactivate
   it, regardless of the split-drop-and-deactivate control

This can be seen in the VirtualWriteEOIR0() and VirtualWriteEOIR1()
pseudocode in the GICv3 architecture specification.

Without this fix, potentially a hypervisor guest might stall because
LPIs get stuck in a bogus Active+Pending state.

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Tested-by: Miguel Luis <miguel.luis@oracle.com>
2024-01-09 14:43:44 +00:00
..
9pfs * configure: use a native non-cross compiler for linux-user 2024-01-04 19:55:20 +00:00
acpi * configure: use a native non-cross compiler for linux-user 2024-01-04 19:55:20 +00:00
adc hw/adc: Constify VMState 2023-12-29 11:17:30 +11:00
alpha hw/pci: modify pci_setup_iommu() to set PCIIOMMUOps 2023-11-03 09:20:31 +01:00
arm hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
audio hw/audio/sb16: Do not migrate qdev properties 2024-01-05 16:20:15 +01:00
avr hw/avr/atmega: Fix wrong initial value of stack pointer 2023-11-28 14:27:12 +01:00
block Rename "QEMU global mutex" to "BQL" in comments and docs 2024-01-08 10:45:43 -05:00
char hw/char: Constify VMState 2023-12-29 11:17:30 +11:00
core system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
cpu hw/cpu/cluster: Cleanup unused included header in cluster.c 2024-01-05 16:20:15 +01:00
cris
cxl meson: remove CONFIG_ALL 2023-12-31 09:11:28 +01:00
display Replace "iothread lock" with "BQL" in comments 2024-01-08 10:45:43 -05:00
dma hw/dma: Constify VMState 2023-12-29 11:17:30 +11:00
gpio hw/gpio: Constify VMState 2023-12-29 11:17:30 +11:00
hppa hw/core/machine: Constify MachineClass::valid_cpu_types[] 2023-11-20 15:30:59 +00:00
hyperv hw/hyperv: Constify VMState 2023-12-29 11:17:30 +11:00
i2c hw/i2c: Constify VMState 2023-12-29 11:17:30 +11:00
i386 qemu/main-loop: rename QEMU_IOTHREAD_LOCK_GUARD to BQL_LOCK_GUARD 2024-01-08 10:45:43 -05:00
ide hw/ide: Constify VMState 2023-12-29 11:17:30 +11:00
input hw/input: Constify VMState 2023-12-29 11:17:30 +11:00
intc hw/intc/arm_gicv3_cpuif: handle LPIs in in the list registers 2024-01-09 14:43:44 +00:00
ipack hw/ipack: Constify VMState 2023-12-29 11:17:30 +11:00
ipmi hw/ipmi: Constify VMState 2023-12-29 11:17:30 +11:00
isa hw/isa: Constify VMState 2023-12-29 11:17:30 +11:00
loongarch hw/loongarch: Constify VMState 2023-12-29 11:17:30 +11:00
m68k hw/m68k/mcf5206: Embed m5206_timer_state in m5206_mbar_state 2024-01-05 16:20:15 +01:00
mem meson: remove CONFIG_ALL 2023-12-31 09:11:28 +01:00
microblaze hw/microblaze: Clean up local variable shadowing 2023-09-29 10:07:16 +02:00
mips qemu/main-loop: rename QEMU_IOTHREAD_LOCK_GUARD to BQL_LOCK_GUARD 2024-01-08 10:45:43 -05:00
misc system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
net system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
nios2 target/nios2: Deprecate the Nios II architecture 2023-11-23 14:10:04 +00:00
nubus
nvme hw/nvme: Clean up local variable shadowing in nvme_ns_init() 2023-09-29 10:07:20 +02:00
nvram hw/nvram: Simplify memory_region_init_rom_device() calls 2024-01-05 16:20:15 +01:00
openrisc hw/openrisc: Constify VMState 2023-12-30 07:38:06 +11:00
pci * configure: use a native non-cross compiler for linux-user 2024-01-04 19:55:20 +00:00
pci-bridge * configure: use a native non-cross compiler for linux-user 2024-01-04 19:55:20 +00:00
pci-host hw/pci-host/raven: Propagate error in raven_realize() 2024-01-05 16:20:15 +01:00
pcmcia hw/pcmcia/pxa2xx: Inline pxa2xx_pcmcia_init() 2023-10-27 12:48:57 +01:00
ppc qemu/main-loop: rename qemu_cond_wait_iothread() to qemu_cond_wait_bql() 2024-01-08 10:45:43 -05:00
rdma hw/rdma/vmw/pvrdma_cmd: Use correct struct in query_port() 2023-10-21 15:00:22 +03:00
remote Replace "iothread lock" with "BQL" in comments 2024-01-08 10:45:43 -05:00
riscv hw/riscv/shakti_c: Check CPU type in machine_run_board_init() 2024-01-05 16:20:15 +01:00
rtc hw/rtc: Constify VMState 2023-12-30 07:38:06 +11:00
rx hw/rx/rx62n: Use qdev_prop_set_array() 2023-11-10 18:19:13 +01:00
s390x system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
scsi Rename "QEMU global mutex" to "BQL" in comments and docs 2024-01-08 10:45:43 -05:00
sd hw/sd: Constify VMState 2023-12-30 07:38:06 +11:00
sensor hw/sensor: Constify VMState 2023-12-30 07:38:06 +11:00
sh4 hw/other: spelling fixes 2023-09-21 11:31:16 +03:00
smbios meson: remove CONFIG_ALL 2023-12-31 09:11:28 +01:00
sparc target/sparc: Simplify qemu_irq_ack 2024-01-05 16:20:15 +01:00
sparc64 hw/sparc: Simplify memory_region_init_ram_nomigrate() calls 2024-01-05 16:20:15 +01:00
ssi hw/ssi: Constify VMState 2023-12-30 07:38:06 +11:00
timer hw/timer: Constify VMState 2023-12-30 07:38:06 +11:00
tpm hw/tpm: Constify VMState 2023-12-30 07:38:06 +11:00
tricore hw/tricore: Log failing test in testdevice 2023-09-29 08:28:02 +02:00
ufs hw/ufs: avoid generating the same ID string for different LU devices 2023-12-05 13:57:18 +09:00
usb migration 1st pull for 9.0 2024-01-05 13:35:25 +00:00
vfio vfio/migration: Add helper function to set state or reset device 2024-01-05 21:25:20 +01:00
virtio misc: Simplify qemu_prealloc_mem() calls 2024-01-05 16:20:15 +01:00
watchdog hw/watchdog: Constify VMState 2023-12-30 07:38:06 +11:00
xen cpus: check running not RUN_STATE_RUNNING 2024-01-04 09:52:42 +08:00
xenpv hw/xen: update Xen PV NIC to XenDevice model 2023-11-07 08:54:20 +00:00
xtensa
Kconfig
meson.build