From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"David Hildenbrand" <david@redhat.com>,
"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
"Alistair Francis" <alistair@alistair23.me>,
"Jianxian Wen" <jianxian.wen@verisilicon.com>,
"Peter Xu" <peterx@redhat.com>,
qemu-arm@nongnu.org, "Gerd Hoffmann" <kraxel@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: [RFC PATCH 6/6] memory: Have address_space_create() re-use global &address_space_memory
Date: Thu, 19 Aug 2021 16:20:39 +0200 [thread overview]
Message-ID: <20210819142039.2825366-7-philmd@redhat.com> (raw)
In-Reply-To: <20210819142039.2825366-1-philmd@redhat.com>
We already have a global AddressSpace created along with the
global get_system_memory(): address_space_memory. Return it
directly instead of creating the same AS with a different name.
This drastically reduce 'info mtree' on some boards (diff -c100):
(echo info mtree; echo q) | ./qemu-system-aarch64 -S -monitor stdio -M raspi3b
QEMU 6.0.93 monitor - type 'help' for more information
(qemu) info mtree
address-space: memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-000000003fffffff (prio 0, ram): ram
000000003f000000-000000003fffffff (prio 1, i/o): bcm2835-peripherals
000000003f003000-000000003f00301f (prio 0, i/o): bcm2835-sys-timer
000000003f004000-000000003f004fff (prio -1000, i/o): bcm2835-txp
000000003f006000-000000003f006fff (prio 0, i/o): mphi
000000003f007000-000000003f007fff (prio 0, i/o): bcm2835-dma
000000003f00b200-000000003f00b3ff (prio 0, i/o): bcm2835-ic
000000003f00b400-000000003f00b43f (prio -1000, i/o): bcm2835-sp804
000000003f00b800-000000003f00bbff (prio 0, i/o): bcm2835-mbox
000000003f100000-000000003f1001ff (prio 0, i/o): bcm2835-powermgt
000000003f101000-000000003f102fff (prio 0, i/o): bcm2835-cprman
000000003f104000-000000003f10400f (prio 0, i/o): bcm2835-rng
000000003f200000-000000003f200fff (prio 0, i/o): bcm2835_gpio
000000003f201000-000000003f201fff (prio 0, i/o): pl011
000000003f202000-000000003f202fff (prio 0, i/o): bcm2835-sdhost
000000003f203000-000000003f2030ff (prio -1000, i/o): bcm2835-i2s
000000003f204000-000000003f20401f (prio -1000, i/o): bcm2835-spi0
000000003f205000-000000003f20501f (prio -1000, i/o): bcm2835-i2c0
000000003f20f000-000000003f20f07f (prio -1000, i/o): bcm2835-otp
000000003f212000-000000003f212007 (prio 0, i/o): bcm2835-thermal
000000003f214000-000000003f2140ff (prio -1000, i/o): bcm2835-spis
000000003f215000-000000003f2150ff (prio 0, i/o): bcm2835-aux
000000003f300000-000000003f3000ff (prio 0, i/o): sdhci
000000003f600000-000000003f6000ff (prio -1000, i/o): bcm2835-smi
000000003f804000-000000003f80401f (prio -1000, i/o): bcm2835-i2c1
000000003f805000-000000003f80501f (prio -1000, i/o): bcm2835-i2c2
000000003f900000-000000003f907fff (prio -1000, i/o): bcm2835-dbus
000000003f910000-000000003f917fff (prio -1000, i/o): bcm2835-ave0
000000003f980000-000000003f990fff (prio 0, i/o): dwc2
000000003f980000-000000003f980fff (prio 0, i/o): dwc2-io
000000003f981000-000000003f990fff (prio 0, i/o): dwc2-fifo
000000003fc00000-000000003fc00fff (prio -1000, i/o): bcm2835-v3d
000000003fe00000-000000003fe000ff (prio -1000, i/o): bcm2835-sdramc
000000003fe05000-000000003fe050ff (prio 0, i/o): bcm2835-dma-chan15
0000000040000000-00000000400000ff (prio 0, i/o): bcm2836-control
address-space: I/O
0000000000000000-000000000000ffff (prio 0, i/o): io
address-space: bcm2835-mbox-memory
0000000000000000-000000000000008f (prio 0, i/o): bcm2835-mbox
0000000000000010-000000000000001f (prio 0, i/o): bcm2835-fb
0000000000000080-000000000000008f (prio 0, i/o): bcm2835-property
address-space: bcm2835-fb-memory
0000000000000000-00000000ffffffff (prio 0, i/o): bcm2835-gpu
0000000000000000-000000003fffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
0000000040000000-000000007fffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
000000007e000000-000000007effffff (prio 1, i/o): alias bcm2835-peripherals @bcm2835-peripherals 0000000000000000-0000000000ffffff
0000000080000000-00000000bfffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
00000000c0000000-00000000ffffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
address-space: bcm2835-property-memory
0000000000000000-00000000ffffffff (prio 0, i/o): bcm2835-gpu
0000000000000000-000000003fffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
0000000040000000-000000007fffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
000000007e000000-000000007effffff (prio 1, i/o): alias bcm2835-peripherals @bcm2835-peripherals 0000000000000000-0000000000ffffff
0000000080000000-00000000bfffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
00000000c0000000-00000000ffffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
address-space: bcm2835-dma-memory
0000000000000000-00000000ffffffff (prio 0, i/o): bcm2835-gpu
0000000000000000-000000003fffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
0000000040000000-000000007fffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
000000007e000000-000000007effffff (prio 1, i/o): alias bcm2835-peripherals @bcm2835-peripherals 0000000000000000-0000000000ffffff
0000000080000000-00000000bfffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
00000000c0000000-00000000ffffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
address-space: dwc2
0000000000000000-00000000ffffffff (prio 0, i/o): bcm2835-gpu
0000000000000000-000000003fffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
0000000040000000-000000007fffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
000000007e000000-000000007effffff (prio 1, i/o): alias bcm2835-peripherals @bcm2835-peripherals 0000000000000000-0000000000ffffff
0000000080000000-00000000bfffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
00000000c0000000-00000000ffffffff (prio 0, ram): alias bcm2835-gpu-ram-alias[*] @ram 0000000000000000-000000003fffffff
- address-space: cpu-secure-memory-0
- 0000000000000000-ffffffffffffffff (prio 0, i/o): system
- 0000000000000000-000000003fffffff (prio 0, ram): ram
- 000000003f000000-000000003fffffff (prio 1, i/o): bcm2835-peripherals
- 000000003f003000-000000003f00301f (prio 0, i/o): bcm2835-sys-timer
- 000000003f004000-000000003f004fff (prio -1000, i/o): bcm2835-txp
- 000000003f006000-000000003f006fff (prio 0, i/o): mphi
- 000000003f007000-000000003f007fff (prio 0, i/o): bcm2835-dma
- 000000003f00b200-000000003f00b3ff (prio 0, i/o): bcm2835-ic
- 000000003f00b400-000000003f00b43f (prio -1000, i/o): bcm2835-sp804
- 000000003f00b800-000000003f00bbff (prio 0, i/o): bcm2835-mbox
- 000000003f100000-000000003f1001ff (prio 0, i/o): bcm2835-powermgt
- 000000003f101000-000000003f102fff (prio 0, i/o): bcm2835-cprman
- 000000003f104000-000000003f10400f (prio 0, i/o): bcm2835-rng
- 000000003f200000-000000003f200fff (prio 0, i/o): bcm2835_gpio
- 000000003f201000-000000003f201fff (prio 0, i/o): pl011
- 000000003f202000-000000003f202fff (prio 0, i/o): bcm2835-sdhost
- 000000003f203000-000000003f2030ff (prio -1000, i/o): bcm2835-i2s
- 000000003f204000-000000003f20401f (prio -1000, i/o): bcm2835-spi0
- 000000003f205000-000000003f20501f (prio -1000, i/o): bcm2835-i2c0
- 000000003f20f000-000000003f20f07f (prio -1000, i/o): bcm2835-otp
- 000000003f212000-000000003f212007 (prio 0, i/o): bcm2835-thermal
- 000000003f214000-000000003f2140ff (prio -1000, i/o): bcm2835-spis
- 000000003f215000-000000003f2150ff (prio 0, i/o): bcm2835-aux
- 000000003f300000-000000003f3000ff (prio 0, i/o): sdhci
- 000000003f600000-000000003f6000ff (prio -1000, i/o): bcm2835-smi
- 000000003f804000-000000003f80401f (prio -1000, i/o): bcm2835-i2c1
- 000000003f805000-000000003f80501f (prio -1000, i/o): bcm2835-i2c2
- 000000003f900000-000000003f907fff (prio -1000, i/o): bcm2835-dbus
- 000000003f910000-000000003f917fff (prio -1000, i/o): bcm2835-ave0
- 000000003f980000-000000003f990fff (prio 0, i/o): dwc2
- 000000003f980000-000000003f980fff (prio 0, i/o): dwc2-io
- 000000003f981000-000000003f990fff (prio 0, i/o): dwc2-fifo
- 000000003fc00000-000000003fc00fff (prio -1000, i/o): bcm2835-v3d
- 000000003fe00000-000000003fe000ff (prio -1000, i/o): bcm2835-sdramc
- 000000003fe05000-000000003fe050ff (prio 0, i/o): bcm2835-dma-chan15
- 0000000040000000-00000000400000ff (prio 0, i/o): bcm2836-control
-
- address-space: cpu-memory-0
- 0000000000000000-ffffffffffffffff (prio 0, i/o): system
[...]
-
- address-space: cpu-secure-memory-1
- 0000000000000000-ffffffffffffffff (prio 0, i/o): system
[...]
-
- address-space: cpu-memory-1
- 0000000000000000-ffffffffffffffff (prio 0, i/o): system
[...]
-
- address-space: cpu-secure-memory-2
- 0000000000000000-ffffffffffffffff (prio 0, i/o): system
[...]
-
- address-space: cpu-memory-2
- 0000000000000000-ffffffffffffffff (prio 0, i/o): system
[...]
-
- address-space: cpu-secure-memory-3
- 0000000000000000-ffffffffffffffff (prio 0, i/o): system
[...]
-
- address-space: cpu-memory-3
- 0000000000000000-ffffffffffffffff (prio 0, i/o): system
[...]
-
memory-region: ram
0000000000000000-000000003fffffff (prio 0, ram): ram
memory-region: bcm2835-peripherals
000000003f000000-000000003fffffff (prio 1, i/o): bcm2835-peripherals
000000003f003000-000000003f00301f (prio 0, i/o): bcm2835-sys-timer
000000003f004000-000000003f004fff (prio -1000, i/o): bcm2835-txp
000000003f006000-000000003f006fff (prio 0, i/o): mphi
000000003f007000-000000003f007fff (prio 0, i/o): bcm2835-dma
000000003f00b200-000000003f00b3ff (prio 0, i/o): bcm2835-ic
000000003f00b400-000000003f00b43f (prio -1000, i/o): bcm2835-sp804
000000003f00b800-000000003f00bbff (prio 0, i/o): bcm2835-mbox
000000003f100000-000000003f1001ff (prio 0, i/o): bcm2835-powermgt
000000003f101000-000000003f102fff (prio 0, i/o): bcm2835-cprman
000000003f104000-000000003f10400f (prio 0, i/o): bcm2835-rng
000000003f200000-000000003f200fff (prio 0, i/o): bcm2835_gpio
000000003f201000-000000003f201fff (prio 0, i/o): pl011
000000003f202000-000000003f202fff (prio 0, i/o): bcm2835-sdhost
000000003f203000-000000003f2030ff (prio -1000, i/o): bcm2835-i2s
000000003f204000-000000003f20401f (prio -1000, i/o): bcm2835-spi0
000000003f205000-000000003f20501f (prio -1000, i/o): bcm2835-i2c0
000000003f20f000-000000003f20f07f (prio -1000, i/o): bcm2835-otp
000000003f212000-000000003f212007 (prio 0, i/o): bcm2835-thermal
000000003f214000-000000003f2140ff (prio -1000, i/o): bcm2835-spis
000000003f215000-000000003f2150ff (prio 0, i/o): bcm2835-aux
000000003f300000-000000003f3000ff (prio 0, i/o): sdhci
000000003f600000-000000003f6000ff (prio -1000, i/o): bcm2835-smi
000000003f804000-000000003f80401f (prio -1000, i/o): bcm2835-i2c1
000000003f805000-000000003f80501f (prio -1000, i/o): bcm2835-i2c2
000000003f900000-000000003f907fff (prio -1000, i/o): bcm2835-dbus
000000003f910000-000000003f917fff (prio -1000, i/o): bcm2835-ave0
000000003f980000-000000003f990fff (prio 0, i/o): dwc2
000000003f980000-000000003f980fff (prio 0, i/o): dwc2-io
000000003f981000-000000003f990fff (prio 0, i/o): dwc2-fifo
000000003fc00000-000000003fc00fff (prio -1000, i/o): bcm2835-v3d
000000003fe00000-000000003fe000ff (prio -1000, i/o): bcm2835-sdramc
000000003fe05000-000000003fe050ff (prio 0, i/o): bcm2835-dma-chan15
(qemu) q
Inspired-by: Jianxian Wen <jianxian.wen@verisilicon.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
Note, we loose the specific description of the duplicated
address spaces, but this doesn't seem very useful in this
output, it is rather more confusing IMO.
---
softmmu/memory.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/softmmu/memory.c b/softmmu/memory.c
index 16a2b518d8d..e4506b5a0d5 100644
--- a/softmmu/memory.c
+++ b/softmmu/memory.c
@@ -2941,6 +2941,10 @@ AddressSpace *address_space_create(MemoryRegion *root, const char *name)
{
AddressSpace *as;
+ if (root == get_system_memory()) {
+ return &address_space_memory;
+ }
+
as = g_new(AddressSpace, 1);
address_space_init(as, root, name);
@@ -2961,6 +2965,10 @@ void address_space_destroy(AddressSpace *as)
{
MemoryRegion *root = as->root;
+ if (as == &address_space_memory) {
+ return;
+ }
+
/* Flush out anything from MemoryListeners listening in on this */
memory_region_transaction_begin();
as->root = NULL;
--
2.31.1
next prev parent reply other threads:[~2021-08-19 14:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-19 14:20 [PATCH 0/6] memory: Introduce address_space_create(), re-use &address_space_memory Philippe Mathieu-Daudé
2021-08-19 14:20 ` [PATCH 1/6] memory: Do not increase refcount on global system_memory region Philippe Mathieu-Daudé
2021-08-19 14:23 ` Peter Maydell
2021-08-19 14:20 ` [PATCH 2/6] memory: Introduce address_space_create() Philippe Mathieu-Daudé
2021-08-19 14:24 ` Peter Maydell
2021-08-19 14:36 ` Philippe Mathieu-Daudé
2021-08-19 14:20 ` [PATCH 3/6] memory: Have cpu_address_space_init() use address_space_create() Philippe Mathieu-Daudé
2021-08-19 14:20 ` [PATCH 4/6] hw/dma: Replace alloc() + address_space_init() by address_space_create() Philippe Mathieu-Daudé
2021-08-19 14:22 ` Peter Maydell
2021-08-19 14:32 ` Philippe Mathieu-Daudé
2021-08-19 14:38 ` Peter Maydell
2021-08-19 14:41 ` Philippe Mathieu-Daudé
2021-08-19 14:20 ` [PATCH 5/6] hw/usb: " Philippe Mathieu-Daudé
2021-08-19 14:20 ` Philippe Mathieu-Daudé [this message]
2021-08-19 14:34 ` [RFC PATCH 6/6] memory: Have address_space_create() re-use global &address_space_memory Peter Maydell
2021-08-19 14:41 ` Philippe Mathieu-Daudé
2021-08-20 6:07 ` Gerd Hoffmann
2021-08-20 7:17 ` Philippe Mathieu-Daudé
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=20210819142039.2825366-7-philmd@redhat.com \
--to=philmd@redhat.com \
--cc=alistair@alistair23.me \
--cc=david@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=jianxian.wen@verisilicon.com \
--cc=kraxel@redhat.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.