Message ID | 20230213162004.2797-7-shentey@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | PC cleanups | expand |
On 2/14/2023 12:20 AM, Bernhard Beschow wrote: > Going through pc_memory_init() seems quite complicated for a simple > assignment. > ... > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > index 5bde4533cc..00ba725656 100644 > --- a/hw/i386/pc_piix.c > +++ b/hw/i386/pc_piix.c > @@ -143,6 +143,7 @@ static void pc_init1(MachineState *machine, > if (xen_enabled()) { > xen_hvm_init_pc(pcms, &ram_memory); > } else { > + ram_memory = machine->ram; > if (!pcms->max_ram_below_4g) { > pcms->max_ram_below_4g = 0xe0000000; /* default: 3.5G */ > } > @@ -205,8 +206,7 @@ static void pc_init1(MachineState *machine, > > /* allocate ram and load rom/bios */ > if (!xen_enabled()) { > - pc_memory_init(pcms, system_memory, > - rom_memory, &ram_memory, hole64_size); IMHO, it seems more proper to put + ram_memory = machine->ram; here rather than above. > + pc_memory_init(pcms, system_memory, rom_memory, hole64_size); > } else { > pc_system_flash_cleanup_unused(pcms); > if (machine->kernel_filename != NULL) {
Am 22. Februar 2023 02:38:04 UTC schrieb Xiaoyao Li <xiaoyao.li@intel.com>: >On 2/14/2023 12:20 AM, Bernhard Beschow wrote: >> Going through pc_memory_init() seems quite complicated for a simple >> assignment. >> > >... > >> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c >> index 5bde4533cc..00ba725656 100644 >> --- a/hw/i386/pc_piix.c >> +++ b/hw/i386/pc_piix.c >> @@ -143,6 +143,7 @@ static void pc_init1(MachineState *machine, >> if (xen_enabled()) { >> xen_hvm_init_pc(pcms, &ram_memory); In Xen mode, ram_memory is initialized here and machine->ram isn't used at all. >> } else { >> + ram_memory = machine->ram; The idea of moving the assignment here is to make the code more symmetric to Xen and to establish the invariant of ram_memory being initialized after this if-else block. IOW one shouldn't need to use machine->ram directly after this point. >> if (!pcms->max_ram_below_4g) { >> pcms->max_ram_below_4g = 0xe0000000; /* default: 3.5G */ >> } >> @@ -205,8 +206,7 @@ static void pc_init1(MachineState *machine, >> /* allocate ram and load rom/bios */ >> if (!xen_enabled()) { >> - pc_memory_init(pcms, system_memory, >> - rom_memory, &ram_memory, hole64_size); > >IMHO, it seems more proper to put > >+ ram_memory = machine->ram; > >here rather than above. This patch allowed for further cleanup (establishing above invariant) which I inlined for simplicity. Do you still see issues here? Thanks, Bernhard > >> + pc_memory_init(pcms, system_memory, rom_memory, hole64_size); >> } else { >> pc_system_flash_cleanup_unused(pcms); >> if (machine->kernel_filename != NULL) { >
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 66e3d059ef..b60b95921b 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -162,7 +162,6 @@ void xen_load_linux(PCMachineState *pcms); void pc_memory_init(PCMachineState *pcms, MemoryRegion *system_memory, MemoryRegion *rom_memory, - MemoryRegion **ram_memory, uint64_t pci_hole64_size); uint64_t pc_pci_hole64_start(void); DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus); diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 6e592bd969..8898cc9961 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -936,7 +936,6 @@ static hwaddr pc_max_used_gpa(PCMachineState *pcms, uint64_t pci_hole64_size) void pc_memory_init(PCMachineState *pcms, MemoryRegion *system_memory, MemoryRegion *rom_memory, - MemoryRegion **ram_memory, uint64_t pci_hole64_size) { int linux_boot, i; @@ -994,7 +993,6 @@ void pc_memory_init(PCMachineState *pcms, * Split single memory region and use aliases to address portions of it, * done for backwards compatibility with older qemus. */ - *ram_memory = machine->ram; ram_below_4g = g_malloc(sizeof(*ram_below_4g)); memory_region_init_alias(ram_below_4g, NULL, "ram-below-4g", machine->ram, 0, x86ms->below_4g_mem_size); diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 5bde4533cc..00ba725656 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -143,6 +143,7 @@ static void pc_init1(MachineState *machine, if (xen_enabled()) { xen_hvm_init_pc(pcms, &ram_memory); } else { + ram_memory = machine->ram; if (!pcms->max_ram_below_4g) { pcms->max_ram_below_4g = 0xe0000000; /* default: 3.5G */ } @@ -205,8 +206,7 @@ static void pc_init1(MachineState *machine, /* allocate ram and load rom/bios */ if (!xen_enabled()) { - pc_memory_init(pcms, system_memory, - rom_memory, &ram_memory, hole64_size); + pc_memory_init(pcms, system_memory, rom_memory, hole64_size); } else { pc_system_flash_cleanup_unused(pcms); if (machine->kernel_filename != NULL) { diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 8253b49296..455cbe11fa 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -129,7 +129,6 @@ static void pc_q35_init(MachineState *machine) MemoryRegion *system_io = get_system_io(); MemoryRegion *pci_memory; MemoryRegion *rom_memory; - MemoryRegion *ram_memory; GSIState *gsi_state; ISABus *isa_bus; int i; @@ -216,12 +215,11 @@ static void pc_q35_init(MachineState *machine) } /* allocate ram and load rom/bios */ - pc_memory_init(pcms, system_memory, rom_memory, &ram_memory, - pci_hole64_size); + pc_memory_init(pcms, system_memory, rom_memory, pci_hole64_size); object_property_add_child(OBJECT(machine), "q35", OBJECT(q35_host)); object_property_set_link(OBJECT(q35_host), MCH_HOST_PROP_RAM_MEM, - OBJECT(ram_memory), NULL); + OBJECT(machine->ram), NULL); object_property_set_link(OBJECT(q35_host), MCH_HOST_PROP_PCI_MEM, OBJECT(pci_memory), NULL); object_property_set_link(OBJECT(q35_host), MCH_HOST_PROP_SYSTEM_MEM,