[libvirt] [PATCH v5 08/10] domain: Introduce virDomainIOThreadSchedDelId
Peter Krempa
pkrempa at redhat.com
Mon Apr 27 15:56:35 UTC 2015
On Mon, Apr 27, 2015 at 11:54:08 -0400, John Ferlan wrote:
>
>
> On 04/27/2015 10:35 AM, Peter Krempa wrote:
> > On Fri, Apr 24, 2015 at 12:06:00 -0400, John Ferlan wrote:
> >> We're about to allow IOThreads to be deleted, but an iothreadid may be
> >> included in some domain thread sched, so add a new API to allow removing
> >> an iothread from some entry.
> >>
> >> Then during the writing of the threadsched data and an additional check
> >> to determine whether the bitmap is all clear before writing it out.
> >>
> >> Signed-off-by: John Ferlan <jferlan at redhat.com>
> >> ---
> >> src/conf/domain_conf.c | 20 ++++++++++++++++++++
> >> src/conf/domain_conf.h | 1 +
> >> src/libvirt_private.syms | 1 +
> >> 3 files changed, 22 insertions(+)
> >>
> >> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> >> index 9d4c916..5f99fbd 100644
> >> --- a/src/conf/domain_conf.c
> >> +++ b/src/conf/domain_conf.c
> >> @@ -17455,6 +17455,24 @@ virDomainIOThreadIDDel(virDomainDefPtr def,
> >> }
> >> }
> >>
> >> +void
> >> +virDomainIOThreadSchedDelId(virDomainDefPtr def,
> >> + unsigned int iothreadid)
> >> +{
> >> + size_t i;
> >> +
> >> + if (!def->cputune.iothreadsched || !def->cputune.niothreadsched)
> >> + return;
> >> +
> >> + for (i = 0; i < def->cputune.niothreadsched; i++) {
> >> + if (virBitmapIsBitSet(def->cputune.iothreadsched[i].ids, iothreadid)) {
> >> + ignore_value(virBitmapClearBit(def->cputune.iothreadsched[i].ids,
> >> + iothreadid));
> >> + return;
> >> + }
> >
> > This function will need to remove the bitmap from the array once it's
> > clear, as ...
> >
>
> hmm.. OK - I think the iothreadsched implementation was probably
> incomplete... Different issue though
>
> >> + }
> >> +}
> >> +
> >> virDomainPinDefPtr
> >> virDomainPinFind(virDomainPinDefPtr *def,
> >> int npin,
> >> @@ -20897,6 +20915,8 @@ virDomainDefFormatInternal(virDomainDefPtr def,
> >> virDomainThreadSchedParamPtr sp = &def->cputune.iothreadsched[i];
> >> char *ids = NULL;
> >>
> >> + if (virBitmapIsAllClear(sp->ids))
> >> + continue;
> >
> > ... this check isn't enough not to oputput empty <cputune> element if
> > you removed the last iothread that would have any info that would
> > trigger cputune to be formatted. The chance to have such situation is
> > extremely slim, but possible.
> >
> >> if (!(ids = virBitmapFormat(sp->ids)))
> >> goto error;
> >> virBufferAsprintf(buf, "<iothreadsched iothreads='%s' scheduler='%s'",
> >
> > Peter
> >
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 926a176..0b18720 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -17481,6 +17481,11 @@ virDomainIOThreadSchedDelId(virDomainDefPtr def,
> if (virBitmapIsBitSet(def->cputune.iothreadsched[i].ids, iothreadid)) {
> ignore_value(virBitmapClearBit(def->cputune.iothreadsched[i].ids,
> iothreadid));
> + if (virBitmapIsAllClear(def->cputune.iothreadsched[i].ids)) {
> + virBitmapFree(def->cputune.iothreadsched[i].ids);
> + VIR_DELETE_ELEMENT(def->cputune.iothreadsched, i,
> + def->cputune.niothreadsched);
> + }
> return;
> }
> }
> @@ -20926,8 +20931,6 @@ virDomainDefFormatInternal(virDomainDefPtr def,
> virDomainThreadSchedParamPtr sp = &def->cputune.iothreadsched[i];
> char *ids = NULL;
>
> - if (virBitmapIsAllClear(sp->ids))
> - continue;
> if (!(ids = virBitmapFormat(sp->ids)))
> goto error;
> virBufferAsprintf(buf, "<iothreadsched iothreads='%s' scheduler='%s'",
ACK with the squash-in.
-------------- 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/20150427/a83d44f1/attachment-0001.sig>
More information about the libvir-list
mailing list