On 4/8/22 07:15, Peter Maydell wrote:
The function gicv3_cpuif_virt_update() currently sets all of vIRQ,
vFIQ and the maintenance interrupt.  This implies that it has to be
used quite carefully -- as the comment notes, setting the maintenance
interrupt will typically cause the GIC code to be re-entered
recursively.  For handling vLPIs, we need the redistributor to be
able to tell the cpuif to update the vIRQ and vFIQ lines when the
highest priority pending vLPI changes.  Since that change can't cause
the maintenance interrupt state to change, we can pull the "update
vIRQ/vFIQ" parts of gicv3_cpuif_virt_update() out into a separate
function, which the redistributor can then call without having to
worry about the reentrancy issue.

Signed-off-by: Peter Maydell<peter.mayd...@linaro.org>
---
  hw/intc/gicv3_internal.h  | 11 +++++++
  hw/intc/arm_gicv3_cpuif.c | 64 ++++++++++++++++++++++++---------------
  hw/intc/trace-events      |  3 +-
  3 files changed, 53 insertions(+), 25 deletions(-)

Reviewed-by: Richard Henderson <richard.hender...@linaro.org>

r~

Reply via email to