提交 e8787191 编写于 作者: J John Ferlan

domain: Introduce virDomainIOThreadsPin{Add|Del}

https://bugzilla.redhat.com/show_bug.cgi?id=1135491

More or less a virtual copy of the existing virDomainVcpuPin{Add|Del} API's.

NB: The IOThreads implementation "reused" the virDomainVcpuPinDefPtr
since it provided everything necessary - an "id" and a "map" for each
thread id configured.
上级 d8977b8e
......@@ -16798,6 +16798,70 @@ virDomainEmulatorPinDel(virDomainDefPtr def)
return 0;
}
int
virDomainIOThreadsPinAdd(virDomainVcpuPinDefPtr **iothreadspin_list,
size_t *niothreadspin,
unsigned char *cpumap,
int maplen,
unsigned int iothread_id)
{
/* IOThreads share the virDomainVcpuPinDefPtr */
virDomainVcpuPinDefPtr iothreadpin = NULL;
if (!iothreadspin_list)
return -1;
iothreadpin = virDomainVcpuPinFindByVcpu(*iothreadspin_list,
*niothreadspin,
iothread_id);
if (iothreadpin) {
iothreadpin->vcpuid = iothread_id;
virBitmapFree(iothreadpin->cpumask);
iothreadpin->cpumask = virBitmapNewData(cpumap, maplen);
if (!iothreadpin->cpumask)
return -1;
return 0;
}
/* No existing iothreadpin matches iothread_id, adding a new one */
if (VIR_ALLOC(iothreadpin) < 0)
goto error;
iothreadpin->vcpuid = iothread_id;
iothreadpin->cpumask = virBitmapNewData(cpumap, maplen);
if (!iothreadpin->cpumask)
goto error;
if (VIR_APPEND_ELEMENT(*iothreadspin_list, *niothreadspin, iothreadpin) < 0)
goto error;
return 0;
error:
virDomainVcpuPinDefFree(iothreadpin);
return -1;
}
void
virDomainIOThreadsPinDel(virDomainDefPtr def,
unsigned int iothread_id)
{
size_t i;
/* IOThreads share the virDomainVcpuPinDefPtr */
virDomainVcpuPinDefPtr *iothreadspin_list = def->cputune.iothreadspin;
for (i = 0; i < def->cputune.niothreadspin; i++) {
if (iothreadspin_list[i]->vcpuid == iothread_id) {
virBitmapFree(iothreadspin_list[i]->cpumask);
VIR_DELETE_ELEMENT(def->cputune.iothreadspin, i,
def->cputune.niothreadspin);
return;
}
}
}
static int
virDomainEventActionDefFormat(virBufferPtr buf,
int type,
......
......@@ -2563,6 +2563,16 @@ int virDomainEmulatorPinAdd(virDomainDefPtr def,
int virDomainEmulatorPinDel(virDomainDefPtr def);
/* IOThreads share the virDomainVcpuPinDefPtr */
int virDomainIOThreadsPinAdd(virDomainVcpuPinDefPtr **iothreadspin_list,
size_t *niothreads,
unsigned char *cpumap,
int maplen,
unsigned int iothread_id);
void virDomainIOThreadsPinDel(virDomainDefPtr def,
unsigned int iothread_id);
void virDomainRNGDefFree(virDomainRNGDefPtr def);
bool virDomainDiskDefDstDuplicates(virDomainDefPtr def);
......
......@@ -308,6 +308,8 @@ virDomainHubTypeToString;
virDomainHypervTypeFromString;
virDomainHypervTypeToString;
virDomainInputDefFree;
virDomainIOThreadsPinAdd;
virDomainIOThreadsPinDel;
virDomainLeaseDefFree;
virDomainLeaseIndex;
virDomainLeaseInsert;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册