qemu: Remove need for qemuDomainParseIOThreadAlias

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.
This commit is contained in:
John Ferlan 2015-04-27 14:16:54 -04:00
parent e505591e28
commit 4c2ca5664a
8 changed files with 27 additions and 48 deletions

View File

@ -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)

View File

@ -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);
/*

View File

@ -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;
}

View File

@ -3818,7 +3818,6 @@ qemuMonitorIOThreadInfoFree(qemuMonitorIOThreadInfoPtr iothread)
{
if (!iothread)
return;
VIR_FREE(iothread->name);
VIR_FREE(iothread);
}

View File

@ -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,

View File

@ -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",

View File

@ -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;

View File

@ -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