On 11/20/2015 10:22 AM, Peter Krempa wrote: > Extract the checking code into a separate function and prepare the > infrastructure for checking the new structure type. > --- > src/conf/domain_conf.c | 41 ++++++++++++++++++++++++++++++----------- > 1 file changed, 30 insertions(+), 11 deletions(-) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 631e1db..66fc6d3 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -17835,6 +17835,35 @@ virDomainMemoryDefCheckABIStability(virDomainMemoryDefPtr src, > } > > > +static bool > +virDomainDefVcpuCheckAbiStability(virDomainDefPtr src, > + virDomainDefPtr dst) I see use of "Vcpu" here... > +{ > + size_t i; > + > + if (src->maxvcpus != dst->maxvcpus) { Should these be accessors? Like they were in the moved code? > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("Target domain vCPU max %zu does not match source %zu"), > + dst->maxvcpus, src->maxvcpus); > + return false; > + } > + > + for (i = 0; i < src->maxvcpus; i++) { Allowing for this to be an accessor/local too. > + virDomainVCpuInfoPtr svcpu = &src->vcpus[i]; > + virDomainVCpuInfoPtr dvcpu = &dst->vcpus[i]; > + > + if (svcpu->online != dvcpu->online) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("State of vCPU '%zu' differs between source and " > + "destination definitions"), i); > + return false; > + } This changes the original code/design just slightly from a counted value online to having the same order between source/dest. If the current algorithm of using the first 'current' vcpus doesn't change, then I foresee perhaps an interesting issue/question. Say we start with 2 current (0,1) and 4 total (0,1,2,3). If we allow someone to start/hotplug #3, then a migration occurs. Would the "target" start "0,1,2" or "0,1,3"? If I think about the current algorithm, it's get the # of vCPU's "current" (virDomainDefGetVCpus) and then set online in order 0, 1, 2 (virDomainDefSetVCpus). That causes a failure for this algorithm, but should it? Again only an issue if you're ultimate goal is to allow the user to choose which vCPU's to place online or offline. I haven't looked that far forward yet. Conditional ACK depending on response. John > + } > + > + return true; > +} > + > + > /* This compares two configurations and looks for any differences > * which will affect the guest ABI. This is primarily to allow > * validation of custom XML config passed in during migration > @@ -17908,18 +17937,8 @@ virDomainDefCheckABIStability(virDomainDefPtr src, > goto error; > } > > - if (virDomainDefGetVCpus(src) != virDomainDefGetVCpus(dst)) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > - _("Target domain vCPU count %d does not match source %d"), > - virDomainDefGetVCpus(dst), virDomainDefGetVCpus(src)); > + if (!virDomainDefVcpuCheckAbiStability(src, dst)) > goto error; > - } > - if (virDomainDefGetVCpusMax(src) != virDomainDefGetVCpusMax(dst)) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > - _("Target domain vCPU max %d does not match source %d"), > - virDomainDefGetVCpusMax(dst), virDomainDefGetVCpusMax(src)); > - goto error; > - } > > if (src->iothreads != dst->iothreads) { > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list