qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 1/2] pvpanic: initialization cleanup


From: Stefano Stabellini
Subject: Re: [Qemu-devel] [PATCH 1/2] pvpanic: initialization cleanup
Date: Wed, 19 Jun 2013 14:39:07 +0100
User-agent: Alpine 2.02 (DEB 1266 2009-07-14)

On Mon, 17 Jun 2013, Laszlo Ersek wrote:
> On 06/17/13 11:57, Michael S. Tsirkin wrote:
> > On Mon, Jun 17, 2013 at 11:35:00AM +0200, Laszlo Ersek wrote:
> >> On 06/17/13 11:19, Michael S. Tsirkin wrote:
> >>> On Mon, Jun 17, 2013 at 09:56:56AM +0200, Laszlo Ersek wrote:
> >>>> On 06/16/13 22:59, Michael S. Tsirkin wrote:
> >>>>> Avoid use of static variables: PC systems initialize pvpanic device
> >>>>> through pvpanic_init, so we can simply create the fw_cfg file at that
> >>>>> point.  Others don't use fw_cfg at all.  This also makes it possible to
> >>>>> assert if fw_cfg is not there rather than skipping the device silently.
> >>>>>
> >>>>> Signed-off-by: Michael S. Tsirkin <address@hidden>
> >>>>> ---
> >>>>>  hw/misc/pvpanic.c | 23 ++++++++++-------------
> >>>>>  1 file changed, 10 insertions(+), 13 deletions(-)
> >>>>>
> >>>>> diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c
> >>>>> index 060099b..9ed9897 100644
> >>>>> --- a/hw/misc/pvpanic.c
> >>>>> +++ b/hw/misc/pvpanic.c
> >>>>> @@ -97,25 +97,22 @@ static void pvpanic_isa_realizefn(DeviceState *dev, 
> >>>>> Error **errp)
> >>>>>  {
> >>>>>      ISADevice *d = ISA_DEVICE(dev);
> >>>>>      PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
> >>>>> -    static bool port_configured;
> >>>>> -    FWCfgState *fw_cfg;
> >>>>>  
> >>>>>      isa_register_ioport(d, &s->io, s->ioport);
> >>>>> -
> >>>>> -    if (!port_configured) {
> >>>>> -        fw_cfg = fw_cfg_find();
> >>>>> -        if (fw_cfg) {
> >>>>> -            fw_cfg_add_file(fw_cfg, "etc/pvpanic-port",
> >>>>> -                            g_memdup(&s->ioport, sizeof(s->ioport)),
> >>>>> -                            sizeof(s->ioport));
> >>>>> -            port_configured = true;
> >>>>> -        }
> >>>>> -    }
> >>>>>  }
> >>>>>  
> >>>>>  int pvpanic_init(ISABus *bus)
> >>>>>  {
> >>>>> -    isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
> >>>>> +    ISADevice *dev = isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
> >>>>> +    PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
> >>>>> +    FWCfgState *fw_cfg = fw_cfg_find();
> >>>>> +
> >>>>> +    assert(fw_cfg);
> >>>>
> >>>> Won't the assert fire if:
> >>>>
> >>>>   xen_enabled() &&
> >>>>   machine != "pc-0.10" && machine != "pc-0.11" &&
> >>>>   machine != "pc-0.12" && machine != "pc-0.13" &&
> >>>>   machine != "pc-q35-1.4"
> >>>>
> >>>> Because under the above condition "has_pvpanic" remains "true", but
> >>>> fw_cfg is not initialized.
> >>>>
> >>>> (pc_init_pci_no_kvmclock() in "hw/i386/pc_piix.c" sets "has_pvpanic" to
> >>>> "false", and claims to be "reused by xenfv", so the above condition may
> >>>> be constant false.)
> >>>
> >>> That's what I think - if user wants pvpanic to work, fw cfg is required 
> >>> ATM.
> >>
> >> What I have in mind is the following: suppose xen is enabled and qemu is
> >> started with -M pc-i440fx-1.5.
> >>
> >> Before the patch, the pvpanic device didn't work, but qemu didn't crash
> >> either. After the patch, the assert() is triggered at startup.
> >>
> >> Of course, if starting qemu for xen with "-M pc-i440fx-1.5" is *already*
> >> broken (for other, maybe more serious, reasons), ie. PEBKAC, then the
> >> patch is correct. But I can't evaluate that condition to constant false,
> >> and suppose that it's a possible configuration, under which qemu would
> >> now start with an assertion failure.
> >>
> >> Can someone with Xen knowledge chime in? CC'ing Stefano.
> >>
> >> Laszlo
> > 
> > A sane alternative is to avoid creating the pvpanic device.
> > Not as easy to debug as an assert, but at least
> > guest does not get reserved ports which said guest
> > has no way to discover.
> 
> Yes, I think that's exactly what happens *if* at domain creation time
> the Xen userspace utilities start qemu with such a machine model that
> sets "has_pvpanic" to false. I'd only like to have confirmation that the
> leading comment on pc_init_pci_no_kvmclock() is up-to-date and we can
> trust this code never to run on Xen.

xenfv now uses pc_xen_hvm_init, that calls directly pc_init_pci, so
has_pvpanic would be true. However we could easily change that if it is
necessary. Even if we fix xenfv, I would like to retain the possibility
to start QEMU on Xen with other QEMUMachine though.


> Actually, we can figure out later, if/when it breaks under Xen. It
> shouldn't be hard to fix.
> 
> series
> Reviewed-by: Laszlo Ersek <address@hidden>

I really appreciate that you involved me in this discussion before
committing the patches and I wouldn't want to be the cause of a delay
in QEMU development. However in general I think it's reasonable to wait
a couple of days for an answer when a clear possibility for breakage
exists.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]