mirror of https://github.com/xemu-project/xemu.git
memory: give name to every AddressSpace
The "info mtree" command in QEMU console prints only "memory" and "I/O" address spaces while there are actually a lot more other AddressSpace structs created by PCI and VIO devices. Those devices do not normally have names and therefore not present in "info mtree" output. The patch fixes this. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
df32fd1c9f
commit
7dca8043f3
6
exec.c
6
exec.c
|
@ -1827,13 +1827,11 @@ static void memory_map_init(void)
|
|||
{
|
||||
system_memory = g_malloc(sizeof(*system_memory));
|
||||
memory_region_init(system_memory, "system", INT64_MAX);
|
||||
address_space_init(&address_space_memory, system_memory);
|
||||
address_space_memory.name = "memory";
|
||||
address_space_init(&address_space_memory, system_memory, "memory");
|
||||
|
||||
system_io = g_malloc(sizeof(*system_io));
|
||||
memory_region_init(system_io, "io", 65536);
|
||||
address_space_init(&address_space_io, system_io);
|
||||
address_space_io.name = "I/O";
|
||||
address_space_init(&address_space_io, system_io, "I/O");
|
||||
|
||||
memory_listener_register(&core_memory_listener, &address_space_memory);
|
||||
memory_listener_register(&io_memory_listener, &address_space_io);
|
||||
|
|
|
@ -814,7 +814,8 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
|
|||
memory_region_init_alias(&pci_dev->bus_master_enable_region, "bus master",
|
||||
dma_as->root, 0, memory_region_size(dma_as->root));
|
||||
memory_region_set_enabled(&pci_dev->bus_master_enable_region, false);
|
||||
address_space_init(&pci_dev->bus_master_as, &pci_dev->bus_master_enable_region);
|
||||
address_space_init(&pci_dev->bus_master_as, &pci_dev->bus_master_enable_region,
|
||||
name);
|
||||
|
||||
pci_dev->devfn = devfn;
|
||||
pstrcpy(pci_dev->name, sizeof(pci_dev->name), name);
|
||||
|
|
|
@ -650,7 +650,9 @@ static int spapr_phb_init(SysBusDevice *s)
|
|||
fprintf(stderr, "Unable to create TCE table for %s\n", sphb->dtbusname);
|
||||
return -1;
|
||||
}
|
||||
address_space_init(&sphb->iommu_as, spapr_tce_get_iommu(sphb->tcet));
|
||||
address_space_init(&sphb->iommu_as, spapr_tce_get_iommu(sphb->tcet),
|
||||
sphb->dtbusname);
|
||||
|
||||
pci_setup_iommu(bus, spapr_pci_dma_iommu, sphb);
|
||||
|
||||
QLIST_INSERT_HEAD(&spapr->phbs, sphb, list);
|
||||
|
|
|
@ -454,7 +454,7 @@ static int spapr_vio_busdev_init(DeviceState *qdev)
|
|||
if (pc->rtce_window_size) {
|
||||
uint32_t liobn = SPAPR_VIO_BASE_LIOBN | dev->reg;
|
||||
dev->tcet = spapr_tce_new_table(liobn, pc->rtce_window_size);
|
||||
address_space_init(&dev->as, spapr_tce_get_iommu(dev->tcet));
|
||||
address_space_init(&dev->as, spapr_tce_get_iommu(dev->tcet), qdev->id);
|
||||
}
|
||||
|
||||
return pc->init(dev);
|
||||
|
|
|
@ -192,7 +192,7 @@ struct MemoryRegionPortio {
|
|||
*/
|
||||
struct AddressSpace {
|
||||
/* All fields are private. */
|
||||
const char *name;
|
||||
char *name;
|
||||
MemoryRegion *root;
|
||||
struct FlatView *current_map;
|
||||
int ioeventfd_nb;
|
||||
|
@ -892,8 +892,10 @@ void mtree_info(fprintf_function mon_printf, void *f);
|
|||
*
|
||||
* @as: an uninitialized #AddressSpace
|
||||
* @root: a #MemoryRegion that routes addesses for the address space
|
||||
* @name: an address space name. The name is only used for debugging
|
||||
* output.
|
||||
*/
|
||||
void address_space_init(AddressSpace *as, MemoryRegion *root);
|
||||
void address_space_init(AddressSpace *as, MemoryRegion *root, const char *name);
|
||||
|
||||
|
||||
/**
|
||||
|
|
8
memory.c
8
memory.c
|
@ -1657,7 +1657,7 @@ void memory_listener_unregister(MemoryListener *listener)
|
|||
QTAILQ_REMOVE(&memory_listeners, listener, link);
|
||||
}
|
||||
|
||||
void address_space_init(AddressSpace *as, MemoryRegion *root)
|
||||
void address_space_init(AddressSpace *as, MemoryRegion *root, const char *name)
|
||||
{
|
||||
memory_region_transaction_begin();
|
||||
as->root = root;
|
||||
|
@ -1666,7 +1666,7 @@ void address_space_init(AddressSpace *as, MemoryRegion *root)
|
|||
as->ioeventfd_nb = 0;
|
||||
as->ioeventfds = NULL;
|
||||
QTAILQ_INSERT_TAIL(&address_spaces, as, address_spaces_link);
|
||||
as->name = NULL;
|
||||
as->name = g_strdup(name ? name : "anonymous");
|
||||
address_space_init_dispatch(as);
|
||||
memory_region_update_pending |= root->enabled;
|
||||
memory_region_transaction_commit();
|
||||
|
@ -1681,6 +1681,7 @@ void address_space_destroy(AddressSpace *as)
|
|||
QTAILQ_REMOVE(&address_spaces, as, address_spaces_link);
|
||||
address_space_destroy_dispatch(as);
|
||||
flatview_destroy(as->current_map);
|
||||
g_free(as->name);
|
||||
g_free(as->current_map);
|
||||
g_free(as->ioeventfds);
|
||||
}
|
||||
|
@ -1807,9 +1808,6 @@ void mtree_info(fprintf_function mon_printf, void *f)
|
|||
QTAILQ_INIT(&ml_head);
|
||||
|
||||
QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) {
|
||||
if (!as->name) {
|
||||
continue;
|
||||
}
|
||||
mon_printf(f, "%s\n", as->name);
|
||||
mtree_print_mr(mon_printf, f, as->root, 0, 0, &ml_head);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue