[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] xen: cleanup unrealized flash devices



Jason Andryuk <jandryuk@xxxxxxxxx> writes:

> On Wed, Jul 1, 2020 at 3:03 AM Paul Durrant <xadimgnik@xxxxxxxxx> wrote:
>>
>> > -----Original Message-----
>> > From: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>
>> > Sent: 30 June 2020 18:27
>> > To: 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/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.
>>
>> IIUC Jason originally tried restricting creation but encountered a problem 
>> because xen_enabled() would always return false at that point, because 
>> machine creation occurs before accelerators are initialized.
>
> Correct.  Quoting my previous email:
> """
> Removing the call to pc_system_flash_create() from pc_machine_initfn()
> lets QEMU startup and run a Xen HVM again.  xen_enabled() doesn't work
> there since accelerators have not been initialized yes, I guess?
> """
>
> If you want to remove the creation in the first place, then I have two
> questions.  Why does pc_system_flash_create()/pc_pflash_create() get
> called so early creating the pflash devices?  Why aren't they just
> created as needed in pc_system_flash_map()?

commit ebc29e1beab02646702c8cb9a1d29b68f72ad503

    pc: Support firmware configuration with -blockdev

    [...]

    Properties need to be created in .instance_init() methods.  For PC
    machines, that's pc_machine_initfn().  To make alias properties work,
    we need to create the onboard flash devices there, too.  [...]

For context, read the entire commit message.  If you have questions
then, don't hesitate to ask them here.




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.