Create a bitmap of iothreads that have scheduler info set so that the transformation algorithm does not have to iterate the empty bitmap many times. By reusing self-expanding bitmaps the bitmap size does not need to be pre-calculated. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1264008 --- src/conf/domain_conf.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d5d9ff7..d7f0291 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -21808,19 +21808,32 @@ static int virDomainFormatIOThreadSchedDef(virDomainDefPtr def, virBufferPtr buf) { - virBitmapPtr allthreadmap; - int ret; + virBitmapPtr threadmap; + size_t i; + int ret = -1; if (def->niothreadids == 0) return 0; - if (!(allthreadmap = virDomainIOThreadIDMap(def))) + if (!(threadmap = virBitmapNewEmpty())) return -1; + for (i = 0; i < def->niothreadids; i++) { + if (def->iothreadids[i]->sched.policy != VIR_PROC_POLICY_NONE && + virBitmapSetBitExpand(threadmap, def->iothreadids[i]->iothread_id) < 0) + goto cleanup; + } + + if (virBitmapIsAllClear(threadmap)) { + ret = 0; + goto cleanup; + } + ret = virDomainFormatSchedDef(def, buf, "iothreads", - virDomainDefGetIOThreadSched, allthreadmap); + virDomainDefGetIOThreadSched, threadmap); - virBitmapFree(allthreadmap); + cleanup: + virBitmapFree(threadmap); return ret; } -- 2.7.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list