[libvirt] [PATCH 4/7] qemu: Fix coldplug of vcpus

Peter Krempa pkrempa at redhat.com
Fri Sep 30 07:58:55 UTC 2016


On Fri, Sep 30, 2016 at 09:52:08 +0200, Pavel Hrdina wrote:
> On Wed, Sep 21, 2016 at 01:49:56PM +0200, Peter Krempa wrote:
> > virDomainDefSetVcpus was not designed to handle coldplug of vcpus now
> > that we can set state of vcpus individually.
> > 
> > Introduce qemuDomainSetVcpusConfig that properly handles state changes
> > of vcpus when coldplugging so that invalid configurations are not
> > created.
> > 
> > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1375939
> > ---
> >  src/qemu/qemu_driver.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++--
> >  1 file changed, 53 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> > index e29180d..336673d 100644
> > --- a/src/qemu/qemu_driver.c
> > +++ b/src/qemu/qemu_driver.c
> > @@ -4898,6 +4898,58 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver,
> >  }
> > 
> > 
> > +/**
> > + * qemuDomainSetVcpusConfig:
> > + * @def: config/offline definition of a domain
> > + * @nvcpus: target vcpu count
> > + *
> > + * Properly handle cold(un)plug of vcpus:
> > + * - plug in inactive vcpus/uplug active rather than rewriting state
> > + * - fix hotpluggable state
> > + */
> > +static void
> > +qemuDomainSetVcpusConfig(virDomainDefPtr def,
> > +                         unsigned int nvcpus)
> > +{
> > +    virDomainVcpuDefPtr vcpu;
> > +    size_t curvcpus = virDomainDefGetVcpus(def);
> > +    size_t maxvcpus = virDomainDefGetVcpusMax(def);
> > +    size_t i;
> > +
> > +
> > +    if (curvcpus == nvcpus)
> > +        return;
> > +
> > +    if (curvcpus < nvcpus) {
> > +        for (i = 0; i < maxvcpus; i++) {
> > +            vcpu = virDomainDefGetVcpu(def, i);
> > +
> > +            if (!vcpu || vcpu->online)
> > +                continue;
> 
> vcpu == NULL should not happen because virDomainDefGetVcpu() checks
> if (i >= maxvcpus)

Coverity and a few versions of GCC are grumpy about that though since
their static analysis sucks. See:

05f89657eed52550050f9308bb7cb8d56dde9cd0
a6ab72a9c3ad475a544ffd53a782e46a02437006
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160930/2dcf648c/attachment-0001.sig>


More information about the libvir-list mailing list