From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-arm@nongnu.org, qemu-devel@nongnu.org
Cc: "Shashi Mallela" <shashi.mallela@linaro.org>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: [PATCH 03/14] hw/intc/arm_gicv3: Initialise dma_as in GIC, not ITS
Date: Sat, 22 Jan 2022 18:24:33 +0000 [thread overview]
Message-ID: <20220122182444.724087-4-peter.maydell@linaro.org> (raw)
In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org>
In our implementation, all ITSes connected to a GIC share a single
AddressSpace, which we keep in the GICv3State::dma_as field and
initialized based on the GIC's 'sysmem' property. The right place
to set it up by calling address_space_init() is therefore in the
GIC's realize method, not the ITS's realize.
This fixes a theoretical bug where QEMU hangs on startup if the board
model creates two ITSes connected to the same GIC -- we would call
address_space_init() twice on the same AddressSpace*, which creates
an infinite loop in the QTAILQ that softmmu/memory.c uses to store
its list of AddressSpaces and causes any subsequent attempt to
iterate through that list to loop forever. There aren't any board
models like that in the tree at the moment, though.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/intc/arm_gicv3_common.c | 5 +++++
hw/intc/arm_gicv3_its.c | 3 ---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c
index 9884d2e39b9..579aa0cb9ed 100644
--- a/hw/intc/arm_gicv3_common.c
+++ b/hw/intc/arm_gicv3_common.c
@@ -357,6 +357,11 @@ static void arm_gicv3_common_realize(DeviceState *dev, Error **errp)
return;
}
+ if (s->lpi_enable) {
+ address_space_init(&s->dma_as, s->dma,
+ "gicv3-its-sysmem");
+ }
+
s->cpu = g_new0(GICv3CPUState, s->num_cpu);
for (i = 0; i < s->num_cpu; i++) {
diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c
index 6d2549e64b1..67f12d98af3 100644
--- a/hw/intc/arm_gicv3_its.c
+++ b/hw/intc/arm_gicv3_its.c
@@ -1194,9 +1194,6 @@ static void gicv3_arm_its_realize(DeviceState *dev, Error **errp)
gicv3_its_init_mmio(s, &gicv3_its_control_ops, &gicv3_its_translation_ops);
- address_space_init(&s->gicv3->dma_as, s->gicv3->dma,
- "gicv3-its-sysmem");
-
/* set the ITS default features supported */
s->typer = FIELD_DP64(s->typer, GITS_TYPER, PHYSICAL, 1);
s->typer = FIELD_DP64(s->typer, GITS_TYPER, ITT_ENTRY_SIZE,
--
2.25.1
next prev parent reply other threads:[~2022-01-22 18:29 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-22 18:24 [PATCH 00/14] arm_gicv3_its: Implement MOVI and MOVALL commands Peter Maydell
2022-01-22 18:24 ` [PATCH 01/14] target/arm: Log CPU index in 'Taking exception' log Peter Maydell
2022-01-23 22:00 ` Philippe Mathieu-Daudé via
2022-01-28 3:09 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 02/14] hw/intc/arm_gicv3_its: Add tracepoints Peter Maydell
2022-01-23 22:01 ` Philippe Mathieu-Daudé via
2022-01-28 3:10 ` Richard Henderson
2022-01-22 18:24 ` Peter Maydell [this message]
2022-01-28 3:12 ` [PATCH 03/14] hw/intc/arm_gicv3: Initialise dma_as in GIC, not ITS Richard Henderson
2022-01-22 18:24 ` [PATCH 04/14] hw/intc/arm_gicv3_its: Don't clear GITS_CREADR when GITS_CTLR.ENABLED is set Peter Maydell
2022-01-28 3:12 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 05/14] hw/intc/arm_gicv3_its: Don't clear GITS_CWRITER on writes to GITS_CBASER Peter Maydell
2022-01-28 3:13 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 06/14] hw/intc/arm_gicv3: Honour GICD_CTLR.EnableGrp1NS for LPIs Peter Maydell
2022-01-28 3:15 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 07/14] hw/intc/arm_gicv3_its: Sort ITS command list into numeric order Peter Maydell
2022-01-23 22:02 ` Philippe Mathieu-Daudé via
2022-01-28 3:15 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 08/14] hw/intc/arm_gicv3_redist: Remove unnecessary zero checks Peter Maydell
2022-01-28 3:17 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 09/14] hw/intc/arm_gicv3: Set GICR_CTLR.CES if LPIs are supported Peter Maydell
2022-01-28 3:19 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 10/14] hw/intc/arm_gicv3_its: Provide read accessor for translation_ops Peter Maydell
2022-01-23 22:04 ` Philippe Mathieu-Daudé via
2022-01-28 3:27 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 11/14] hw/intc/arm_gicv3_its: Make GITS_BASER<n> RAZ/WI for unimplemented registers Peter Maydell
2022-01-28 3:31 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 12/14] hw/intc/arm_gicv3_its: Check table bounds against correct limit Peter Maydell
2022-01-28 3:32 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 13/14] hw/intc/arm_gicv3_its: Implement MOVALL Peter Maydell
2022-01-28 3:37 ` Richard Henderson
2022-01-22 18:24 ` [PATCH 14/14] hw/intc/arm_gicv3_its: Implement MOVI Peter Maydell
2022-01-28 3:38 ` Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220122182444.724087-4-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=alex.bennee@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=shashi.mallela@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).