]> xenbits.xensource.com Git - libvirt.git/commitdiff
vcpupin: add virDomainVcpupinDel function
authorTaku Izumi <izumi.taku@jp.fujitsu.com>
Fri, 10 Jun 2011 06:40:36 +0000 (15:40 +0900)
committerWen Congyang <wency@cn.fujitsu.com>
Mon, 20 Jun 2011 10:14:54 +0000 (18:14 +0800)
This patch add the private API (virDomainVcpupinDel).
This API can delete the vcpupin setting of a specified virtual cpu.

Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms

index 8d5e173613d8a5a76417379b26ef36ecf36d3836..536086309100fa6dfced29d0626b7375f55a5270 100644 (file)
@@ -8206,6 +8206,45 @@ cleanup:
     return -1;
 }
 
+int
+virDomainVcpupinDel(virDomainDefPtr def, int vcpu)
+{
+    int n;
+    bool deleted = false;
+    virDomainVcpupinDefPtr *vcpupin_list = def->cputune.vcpupin;
+
+    /* No vcpupin exists yet */
+    if (!def->cputune.nvcpupin) {
+        return 0;
+    }
+
+    for (n = 0; n < def->cputune.nvcpupin; n++) {
+        if (vcpupin_list[n]->vcpuid == vcpu) {
+            VIR_FREE(vcpupin_list[n]->cpumask);
+            VIR_FREE(vcpupin_list[n]);
+            memmove(&vcpupin_list[n],
+                    &vcpupin_list[n+1],
+                    (def->cputune.nvcpupin - n - 1) * sizeof(virDomainVcpupinDef *));
+            deleted = true;
+            break;
+        }
+    }
+
+    if (!deleted)
+        return 0;
+
+    if (--def->cputune.nvcpupin == 0) {
+        virDomainVcpupinDefFree(def->cputune.vcpupin, 0);
+    } else {
+        if (VIR_REALLOC_N(def->cputune.vcpupin, def->cputune.nvcpupin) < 0) {
+            virReportOOMError();
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
 static int
 virDomainLifecycleDefFormat(virBufferPtr buf,
                             int type,
index 3c54e8be2dd796419ff36fd00f700b74c0968fca..ff5c28d7c7634b5640455c21143aecbc6ec1e012 100644 (file)
@@ -1412,6 +1412,8 @@ int virDomainVcpupinAdd(virDomainDefPtr def,
                         int maplen,
                         int vcpu);
 
+int virDomainVcpupinDel(virDomainDefPtr def, int vcpu);
+
 int virDomainDiskIndexByName(virDomainDefPtr def, const char *name);
 int virDomainDiskInsert(virDomainDefPtr def,
                         virDomainDiskDefPtr disk);
index ae18c0dfca33b23b7c6cc42a40b46f812dbfd7d9..03d2ddb6d290d7717b8c1cff4c944ee43cfdf5ce 100644 (file)
@@ -364,6 +364,7 @@ virDomainTimerTickpolicyTypeToString;
 virDomainTimerTrackTypeFromString;
 virDomainTimerTrackTypeToString;
 virDomainVcpupinAdd;
+virDomainVcpupinDel;
 virDomainVcpupinFindByVcpu;
 virDomainVcpupinIsDuplicate;
 virDomainVideoDefFree;