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)
int *vhostfd,
size_t *vhostfdSize);
-int qemuDomainParseIOThreadAlias(char *alias,
- unsigned int *iothread_id);
-
int qemuNetworkPrepareDevices(virDomainDefPtr def);
/*
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;
* 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;
}
{
if (!iothread)
return;
- VIR_FREE(iothread->name);
VIR_FREE(iothread);
}
typedef qemuMonitorIOThreadInfo *qemuMonitorIOThreadInfoPtr;
struct _qemuMonitorIOThreadInfo {
- char *name;
+ unsigned int iothread_id;
int thread_id;
};
int qemuMonitorGetIOThreads(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",
}
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;
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)) { \
} \
} while (0)
- CHECK(0, "iothread1", 30992);
- CHECK(1, "iothread2", 30993);
+ CHECK(0, 1, 30992);
+ CHECK(1, 2, 30993);
#undef CHECK