[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/2] xen: cleanup unrealized flash devices
On 6/30/20 5:44 PM, Paul Durrant wrote: >> -----Original Message----- >> From: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> >> Sent: 30 June 2020 16:26 >> To: Paul Durrant <paul@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx; >> qemu-devel@xxxxxxxxxx >> Cc: Eduardo Habkost <ehabkost@xxxxxxxxxx>; Michael S. Tsirkin >> <mst@xxxxxxxxxx>; Paul Durrant >> <pdurrant@xxxxxxxxxx>; Jason Andryuk <jandryuk@xxxxxxxxx>; Paolo Bonzini >> <pbonzini@xxxxxxxxxx>; >> Richard Henderson <rth@xxxxxxxxxxx> >> Subject: Re: [PATCH 2/2] xen: cleanup unrealized flash devices >> >> On 6/24/20 2:18 PM, Paul Durrant wrote: >>> From: Paul Durrant <pdurrant@xxxxxxxxxx> >>> >>> The generic pc_machine_initfn() calls pc_system_flash_create() which creates >>> 'system.flash0' and 'system.flash1' devices. These devices are then realized >>> by pc_system_flash_map() which is called from pc_system_firmware_init() >>> which >>> itself is called via pc_memory_init(). The latter however is not called when >>> xen_enable() is true and hence the following assertion fails: >>> >>> qemu-system-i386: hw/core/qdev.c:439: qdev_assert_realized_properly: >>> Assertion `dev->realized' failed >>> >>> These flash devices are unneeded when using Xen so this patch avoids the >>> assertion by simply removing them using pc_system_flash_cleanup_unused(). >>> >>> Reported-by: Jason Andryuk <jandryuk@xxxxxxxxx> >>> Fixes: ebc29e1beab0 ("pc: Support firmware configuration with -blockdev") >>> Signed-off-by: Paul Durrant <pdurrant@xxxxxxxxxx> >>> Tested-by: Jason Andryuk <jandryuk@xxxxxxxxx> >>> --- >>> Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> >>> Cc: Richard Henderson <rth@xxxxxxxxxxx> >>> Cc: Eduardo Habkost <ehabkost@xxxxxxxxxx> >>> Cc: "Michael S. Tsirkin" <mst@xxxxxxxxxx> >>> Cc: Marcel Apfelbaum <marcel.apfelbaum@xxxxxxxxx> >>> --- >>> hw/i386/pc_piix.c | 9 ++++++--- >>> hw/i386/pc_sysfw.c | 2 +- >>> include/hw/i386/pc.h | 1 + >>> 3 files changed, 8 insertions(+), 4 deletions(-) >>> >>> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c >>> index 1497d0e4ae..977d40afb8 100644 >>> --- a/hw/i386/pc_piix.c >>> +++ b/hw/i386/pc_piix.c >>> @@ -186,9 +186,12 @@ static void pc_init1(MachineState *machine, >>> if (!xen_enabled()) { >>> pc_memory_init(pcms, system_memory, >>> rom_memory, &ram_memory); >>> - } else if (machine->kernel_filename != NULL) { >>> - /* For xen HVM direct kernel boot, load linux here */ >>> - xen_load_linux(pcms); >>> + } else { >>> + pc_system_flash_cleanup_unused(pcms); >> >> TIL pc_system_flash_cleanup_unused(). >> >> What about restricting at the source? >> > > And leave the devices in place? They are not relevant for Xen, so why not > clean up? No, I meant to not create them in the first place, instead of create+destroy. Anyway what you did works, so I don't have any problem. Reviewed-by: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> > > Paul > >> -- >8 -- >> --- a/hw/i386/pc.c >> +++ b/hw/i386/pc.c >> @@ -1004,24 +1004,26 @@ void pc_memory_init(PCMachineState *pcms, >> &machine->device_memory->mr); >> } >> >> - /* Initialize PC system firmware */ >> - pc_system_firmware_init(pcms, rom_memory); >> - >> - option_rom_mr = g_malloc(sizeof(*option_rom_mr)); >> - memory_region_init_ram(option_rom_mr, NULL, "pc.rom", PC_ROM_SIZE, >> - &error_fatal); >> - if (pcmc->pci_enabled) { >> - memory_region_set_readonly(option_rom_mr, true); >> - } >> - memory_region_add_subregion_overlap(rom_memory, >> - PC_ROM_MIN_VGA, >> - option_rom_mr, >> - 1); >> - >> fw_cfg = fw_cfg_arch_create(machine, >> x86ms->boot_cpus, x86ms->apic_id_limit); >> >> - rom_set_fw(fw_cfg); >> + /* Initialize PC system firmware */ >> + if (!xen_enabled()) { >> + pc_system_firmware_init(pcms, rom_memory); >> + >> + option_rom_mr = g_malloc(sizeof(*option_rom_mr)); >> + memory_region_init_ram(option_rom_mr, NULL, "pc.rom", PC_ROM_SIZE, >> + &error_fatal); >> + if (pcmc->pci_enabled) { >> + memory_region_set_readonly(option_rom_mr, true); >> + } >> + memory_region_add_subregion_overlap(rom_memory, >> + PC_ROM_MIN_VGA, >> + option_rom_mr, >> + 1); >> + >> + rom_set_fw(fw_cfg); >> + } >> >> if (pcmc->has_reserved_memory && machine->device_memory->base) { >> uint64_t *val = g_malloc(sizeof(*val)); >> --- >> >>> + if (machine->kernel_filename != NULL) { >>> + /* For xen HVM direct kernel boot, load linux here */ >>> + xen_load_linux(pcms); >>> + } >>> } >>> >>> gsi_state = pc_gsi_create(&x86ms->gsi, pcmc->pci_enabled); >>> diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c >>> index ec2a3b3e7e..0ff47a4b59 100644 >>> --- a/hw/i386/pc_sysfw.c >>> +++ b/hw/i386/pc_sysfw.c >>> @@ -108,7 +108,7 @@ void pc_system_flash_create(PCMachineState *pcms) >>> } >>> } >>> >>> -static void pc_system_flash_cleanup_unused(PCMachineState *pcms) >>> +void pc_system_flash_cleanup_unused(PCMachineState *pcms) >>> { >>> char *prop_name; >>> int i; >>> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h >>> index e6135c34d6..497f2b7ab7 100644 >>> --- a/include/hw/i386/pc.h >>> +++ b/include/hw/i386/pc.h >>> @@ -187,6 +187,7 @@ int cmos_get_fd_drive_type(FloppyDriveType fd0); >>> >>> /* pc_sysfw.c */ >>> void pc_system_flash_create(PCMachineState *pcms); >>> +void pc_system_flash_cleanup_unused(PCMachineState *pcms); >>> void pc_system_firmware_init(PCMachineState *pcms, MemoryRegion >>> *rom_memory); >>> >>> /* acpi-build.c */ >>> > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |