Rather than have a separate routine to parse the alias of an iothread
returned from qemu in order to get the iothread_id value, parse the alias
when returning and just return the iothread_id in qemuMonitorIOThreadInfoPtr
This set of patches removes the function, changes the "char *name" to
"unsigned int" and handles all the fallout.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/qemu/qemu_command.c | 17 -----------------
src/qemu/qemu_command.h | 3 ---
src/qemu/qemu_driver.c | 9 ++-------
src/qemu/qemu_monitor.c | 1 -
src/qemu/qemu_monitor.h | 2 +-
src/qemu/qemu_monitor_json.c | 20 ++++++++++++++------
src/qemu/qemu_process.c | 11 ++++-------
tests/qemumonitorjsontest.c | 12 ++++++------
8 files changed, 27 insertions(+), 48 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 247954f..ba15dc9 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 538ccdf..a29db41 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 74dcb0a..d0147e9 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 1e7d2ef..48bfeb0 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 cd4cc66..bce8031 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 3af319c..c02ef47 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 5ae2241..f06ec56 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 f729c7c..39eeaa7 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
--
2.1.0