OSDN Git Service

irqchip/gic-v3: Use SGIs without active state if offered
authorMarc Zyngier <maz@kernel.org>
Wed, 4 Mar 2020 20:33:08 +0000 (20:33 +0000)
committerMarc Zyngier <maz@kernel.org>
Thu, 19 Mar 2020 11:11:21 +0000 (11:11 +0000)
commit0b04758b002bde9434053be2fff8064ac3d9d8bb
tree5aab4329df84df756179778c1cda925d61a2877f
parent98d54f81e36ba3bf92172791eba5ca5bd813989b
irqchip/gic-v3: Use SGIs without active state if offered

To allow the direct injection of SGIs into a guest, the GICv4.1
architecture has to sacrifice the Active state so that SGIs look
a lot like LPIs (they are injected by the same mechanism).

In order not to break existing software, the architecture gives
offers guests OSs the choice: SGIs with or without an active
state. It is the hypervisors duty to honor the guest's choice.

For this, the architecture offers a discovery bit indicating whether
the GIC supports GICv4.1 SGIs (GICD_TYPER2.nASSGIcap), and another
bit indicating whether the guest wants Active-less SGIs or not
(controlled by GICD_CTLR.nASSGIreq).

A hypervisor not supporting GICv4.1 SGIs would leave nASSGIcap
clear, and a guest not knowing about GICv4.1 SGIs (or definitely
wanting an Active state) would leave nASSGIreq clear (both being
thankfully backward compatible with older revisions of the GIC).

Since Linux is perfectly happy without an active state on SGIs,
inform the hypervisor that we'll use that if offered.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Zenghui Yu <yuzenghui@huawei.com>
Link: https://lore.kernel.org/r/20200304203330.4967-2-maz@kernel.org
drivers/irqchip/irq-gic-v3.c
include/linux/irqchip/arm-gic-v3.h