[libvirt] [PATCH 0/6] Follow-up patches for IOThread API/display
Ján Tomko
jtomko at redhat.com
Tue Mar 10 13:03:47 UTC 2015
On Mon, Mar 09, 2015 at 08:27:10AM -0400, John Ferlan wrote:
>
>
> On 03/08/2015 07:03 AM, Ján Tomko wrote:
> > ACK series, thanks for touching up VcpuInfo and EmulatorInfo as well!
> >
> > There's one bug that I noticed:
> > If the CPUs are pinned domain-wide, that is:
> > <vcpu placement='static' cpuset='0-1'>4</vcpu>
> > <iothreads>2</iothreads>
> >
> > Both vcpu threads and iothreads will inherit this pinning.
> >
> > For a shutoff domain, vcpupininfo will display 0-1 for all vcpus, but
> > iothreadsinfo shows 0-4, even though they will get pinned to 0-1 after
> > domain startup.
> >
> > Turns out the vpcupin info is filled for all the vcpus when the XML is
> > parsed since commit 10f8a45deb0f057a70a0d49794d3a3d19d17dceb
> >
> > Falling back to targetDef->cpumask in qemuDomainGetIOThreadsConfig
> > (as qemuDomainGetEmulatorPinInfo does) would solve that too.
> >
>
> Squashed the following into patch 4 to address this...
I don't think this functional change belongs to the patch refactoring
the function to use the virBitmap* APIs. But since the functionality has
not yet been released, nobody should feel the need to backport any of
these commits, so mixing them up is not that big deal.
>
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 2a9db1b..ceceafa 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -5653,6 +5653,8 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef,
> virDomainIOThreadInfoPtr **info)
> {
> virDomainIOThreadInfoPtr *info_ret = NULL;
> + virBitmapPtr bitmap = NULL;
> + virBitmapPtr cpumask = NULL;
> int hostcpus;
> size_t i;
> int ret = -1;
> @@ -5668,7 +5670,6 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef,
>
> for (i = 0; i < targetDef->iothreads; i++) {
> virDomainVcpuPinDefPtr pininfo;
> - virBitmapPtr bitmap = NULL;
>
> if (VIR_ALLOC(info_ret[i]) < 0)
> goto cleanup;
> @@ -5681,20 +5682,22 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef,
> targetDef->cputune.niothreadspin,
> i + 1);
> if (!pininfo) {
> - if (!(bitmap = virBitmapNew(hostcpus)))
> - goto cleanup;
> - virBitmapSetAll(bitmap);
> + if (targetDef->cpumask) {
> + cpumask = targetDef->cpumask;
> + } else {
> + if (!(bitmap = virBitmapNew(hostcpus)))
> + goto cleanup;
> + virBitmapSetAll(bitmap);
> + cpumask = bitmap;
> + }
> } else {
> - bitmap = pininfo->cpumask;
> + cpumask = pininfo->cpumask;
> }
> - if (virBitmapToData(bitmap, &info_ret[i]->cpumap,
> - &info_ret[i]->cpumaplen) < 0) {
> - if (!pininfo)
> - virBitmapFree(bitmap);
> + if (virBitmapToData(cpumask, &info_ret[i]->cpumap,
> + &info_ret[i]->cpumaplen) < 0)
> goto cleanup;
> - }
> - if (!pininfo)
> - virBitmapFree(bitmap);
> + virBitmapFree(bitmap);
> + bitmap = NULL;
> }
>
> *info = info_ret;
> @@ -5707,6 +5710,7 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef,
> virDomainIOThreadsInfoFree(info_ret[i]);
> VIR_FREE(info_ret);
> }
> + virBitmapFree(bitmap);
>
> return ret;
> }
>
>
> Replaced the overly aggressively removed lines from patch 5...
>
> I will send a separate patch for the domain_conf.c change that
> addresses any needs for iothreadspin setup to use the def->cpumask.
However the squashed-in patch could've benefited from going through a
standard review process. If you plan to copy the vcpupin code in domain_conf.c
to do the same with iothreadspin, the squashed-in change is redundant.
Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150310/8ef1302c/attachment-0001.sig>
More information about the libvir-list
mailing list