hw/intc/arm_gicv3: Keep pointers to every connected ITS
commit7c087bd33073503914cd0c17084de459f68ac002
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 8 Apr 2022 14:15:24 +0000 (8 15:15 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 22 Apr 2022 08:24:44 +0000 (22 09:24 +0100)
treecd1b26e41afc4d8a659fe85178f74eb48be9d7eb
parent469cf23bf857412e45bb480eabd8f0cd890b41b1
hw/intc/arm_gicv3: Keep pointers to every connected ITS

The GICv4 ITS VMOVP command's semantics require it to perform the
operation on every ITS connected to the same GIC that the ITS that
received the command is attached to.  This means that the GIC object
needs to keep a pointer to every ITS that is connected to it
(previously it was sufficient for the ITS to have a pointer to its
GIC).

Add a glib ptrarray to the GICv3 object which holds pointers to every
connected ITS, and make the ITS add itself to the array for the GIC
it is connected to when it is realized.

Note that currently all QEMU machine types with an ITS have exactly
one ITS in the system, so typically the length of this ptrarray will
be 1.  Multiple ITSes are typically used to improve performance on
real hardware, so we wouldn't need to have more than one unless we
were modelling a real machine type that had multile ITSes.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
[PMM: Moved gicv3_add_its() to arm_gicv3_its_common.h to avoid
 compilation error building the KVM ITS]
Message-id: 20220408141550.1271295-16-peter.maydell@linaro.org
hw/intc/arm_gicv3_common.c
hw/intc/arm_gicv3_its.c
hw/intc/arm_gicv3_its_kvm.c
include/hw/intc/arm_gicv3_common.h
include/hw/intc/arm_gicv3_its_common.h