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

Re: [Xen-devel] [PATCH v5 9/9] ioreq-server: bring the PCI hotplug controller implementation into Xen



On Tue, 2014-05-06 at 14:35 +0100, Paul Durrant wrote:
> > When libxl does the qmp call to tell qemu about a new device what stops
> > qemu from generating hotplug events (SCI or whatever the interrupt
> > mechanism is) even if Xen is emulating the HP controller? Because Qemu
> > will still have the controller emulation, it's just "shadowed", right?
> >
> 
> The controller emulation is there but since the ports are handled by
> Xen the I/O to enable the hotplug events will never get through. So,
> yes QEMU will go through the motions of hotplugging but it will never
> raise the SCI.

OK. And just to make doubly sure this I/O to enable the hotplug events
is definitely not preserved over a migration somewhere? (meaning I don't
have to think about what happens if it is enabled in qemu and then
migrated to a system where Xen handles it)


>  
> > > > What does "hotplugging via qemu" mean here if qemu isn't patched to
> > call
> > > > this new call?
> > > >
> > >
> > > It means QEMU is implementing the hotplug device. So, if Xen is
> > > implementing the PCIHP libxl will call the new function and it will
> > > succeed. If QEMU is implementing the PCIHP then libxl will call the
> > > new function, it will fail, but QEMU will implicitly do the hotplug.
> > > Either way, the guest sees a hotplug event.
> > 
> > Even if Xen is implementing the PCIHP qemu is still involved in plugging
> > the device, since it has to know about it though, so in some sense
> > hotplugging is always (partially) via qemu (which is why I'm a bit
> > confused, but also why the lack of a Qemu side patch surprises me)
> > 
> 
> Yes, but because QEMU's PCIHP implementation never has any of its
> enabled bits set it remains silent.

Makes sense, might be worth mentioing this somewhere (comment, commit
log), since it is a bit subtle.


> > > > > diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c
> > > > > index 44d0453..55cb8a2 100644
> > > > > --- a/tools/libxl/libxl_pci.c
> > > > > +++ b/tools/libxl/libxl_pci.c
> > > > > @@ -867,6 +867,13 @@ static int do_pci_add(libxl__gc *gc, uint32_t
> > > > domid, libxl_device_pci *pcidev, i
> > > > >          }
> > > > >          if ( rc )
> > > > >              return ERROR_FAIL;
> > > > > +
> > > > > +        rc = xc_hvm_pci_hotplug(CTX->xch, domid, pcidev->dev, 1);
> > > > > +        if (rc < 0 && errno != EOPNOTSUPP) {
> > > > > +            LOGE(ERROR, "Error: xc_hvm_pci_hotplug enable failed");
> > > > > +            return ERROR_FAIL;
> > > > > +        }
> > > >
> > > > I initially thought you needed to also reset rc to indicate success in
> > > > the errno==EOPNOTSUPP, but actually the error handling in this function
> > > > is just confusing...
> > > >
> > > > But, have you tried hotpluging into a migrated guest?
> > > >
> > >
> > > Not yet, but I can't see why that would be a problem over hotplugging
> > > at all,
> > 
> > It's the problems we can't imagine that I'm worried about. This stuff is
> > certainly subtle in places WRT migration.
> > 
> 
> I'll give it a go on my dev box. I'm also trying to get this series
> backported onto Xen 4.4 so I can throw it at XenRT.

Thanks!

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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