diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 247954fe2b..ba15dc9f11 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -677,23 +677,6 @@ qemuOpenVhostNet(virDomainDefPtr def, return -1; } -int -qemuDomainParseIOThreadAlias(char *alias, - unsigned int *iothread_id) -{ - unsigned int idval; - - if (virStrToLong_ui(alias + strlen("iothread"), - NULL, 10, &idval) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("failed to find iothread id for '%s'"), - alias); - return -1; - } - - *iothread_id = idval; - return 0; -} int qemuNetworkPrepareDevices(virDomainDefPtr def) diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 538ccdf550..a29db41d1e 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -238,9 +238,6 @@ int qemuOpenVhostNet(virDomainDefPtr def, int *vhostfd, size_t *vhostfdSize); -int qemuDomainParseIOThreadAlias(char *alias, - unsigned int *iothread_id); - int qemuNetworkPrepareDevices(virDomainDefPtr def); /* diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 74dcb0a53d..d0147e9603 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5918,16 +5918,11 @@ qemuDomainGetIOThreadsLive(virQEMUDriverPtr driver, goto endjob; for (i = 0; i < niothreads; i++) { - unsigned int iothread_id; virBitmapPtr map = NULL; - if (qemuDomainParseIOThreadAlias(iothreads[i]->name, - &iothread_id) < 0) - goto endjob; - if (VIR_ALLOC(info_ret[i]) < 0) goto endjob; - info_ret[i]->iothread_id = iothread_id; + info_ret[i]->iothread_id = iothreads[i]->iothread_id; if (virProcessGetAffinity(iothreads[i]->thread_id, &map, hostcpus) < 0) goto endjob; @@ -6292,7 +6287,7 @@ qemuDomainHotplugAddIOThread(virQEMUDriverPtr driver, * in the QEMU IOThread list, so we can add it to our iothreadids list */ for (idx = 0; idx < new_niothreads; idx++) { - if (STREQ(new_iothreads[idx]->name, alias)) + if (new_iothreads[idx]->iothread_id == iothread_id) break; } diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 1e7d2efb97..48bfeb0956 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3818,7 +3818,6 @@ qemuMonitorIOThreadInfoFree(qemuMonitorIOThreadInfoPtr iothread) { if (!iothread) return; - VIR_FREE(iothread->name); VIR_FREE(iothread); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index cd4cc6634f..bce8031f4c 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -877,7 +877,7 @@ typedef struct _qemuMonitorIOThreadInfo qemuMonitorIOThreadInfo; typedef qemuMonitorIOThreadInfo *qemuMonitorIOThreadInfoPtr; struct _qemuMonitorIOThreadInfo { - char *name; + unsigned int iothread_id; int thread_id; }; int qemuMonitorGetIOThreads(qemuMonitorPtr mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 3af319c931..c02ef47d2d 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6481,20 +6481,28 @@ qemuMonitorJSONGetIOThreads(qemuMonitorPtr mon, const char *tmp; qemuMonitorIOThreadInfoPtr info; - if (VIR_ALLOC(info) < 0) - goto cleanup; - - infolist[i] = info; - if (!(tmp = virJSONValueObjectGetString(child, "id"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("query-iothreads reply data was missing 'id'")); goto cleanup; } - if (VIR_STRDUP(info->name, tmp) < 0) + if (!STRPREFIX(tmp, "iothread")) + continue; + + if (VIR_ALLOC(info) < 0) goto cleanup; + infolist[i] = info; + + if (virStrToLong_ui(tmp + strlen("iothread"), + NULL, 10, &info->iothread_id) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("failed to find iothread id for '%s'"), + tmp); + goto cleanup; + } + if (virJSONValueObjectGetNumberInt(child, "thread-id", &info->thread_id) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 5ae2241f89..f06ec5688c 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2248,16 +2248,13 @@ qemuProcessDetectIOThreadPIDs(virQEMUDriverPtr driver, } for (i = 0; i < niothreads; i++) { - unsigned int iothread_id; virDomainIOThreadIDDefPtr iothrid; - if (qemuDomainParseIOThreadAlias(iothreads[i]->name, - &iothread_id) < 0) - goto cleanup; - - if (!(iothrid = virDomainIOThreadIDFind(vm->def, iothread_id))) { + if (!(iothrid = virDomainIOThreadIDFind(vm->def, + iothreads[i]->iothread_id))) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("iothread %d not found"), iothread_id); + _("iothread %d not found"), + iothreads[i]->iothread_id); goto cleanup; } iothrid->thread_id = iothreads[i]->thread_id; diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index f729c7c9d8..39eeaa7bfb 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2269,12 +2269,12 @@ testQemuMonitorJSONGetIOThreads(const void *data) goto cleanup; } -#define CHECK(i, wantname, wantthread_id) \ +#define CHECK(i, wantiothread_id, wantthread_id) \ do { \ - if (STRNEQ(info[i]->name, (wantname))) { \ + if (info[i]->iothread_id != (wantiothread_id)) { \ virReportError(VIR_ERR_INTERNAL_ERROR, \ - "name %s is not %s", \ - info[i]->name, (wantname)); \ + "iothread_id %u is not %u", \ + info[i]->iothread_id, (wantiothread_id)); \ goto cleanup; \ } \ if (info[i]->thread_id != (wantthread_id)) { \ @@ -2285,8 +2285,8 @@ testQemuMonitorJSONGetIOThreads(const void *data) } \ } while (0) - CHECK(0, "iothread1", 30992); - CHECK(1, "iothread2", 30993); + CHECK(0, 1, 30992); + CHECK(1, 2, 30993); #undef CHECK