[libvirt] [RFC PATCH 02/12] domain_conf: add support for cpu device configuration in XML

Zhu Guihua zhugh.fnst at cn.fujitsu.com
Wed Jan 21 08:00:54 UTC 2015


This patch adds configuration support for the cpu device.

Signed-off-by: Zhu Guihua <zhugh.fnst at cn.fujitsu.com>
---
 src/conf/domain_conf.c   | 14 ++++++++++++++
 src/conf/domain_conf.h   | 19 +++++++++++++++++++
 src/libvirt_private.syms |  1 +
 src/qemu/qemu_driver.c   |  6 ++++++
 src/qemu/qemu_hotplug.c  |  1 +
 5 files changed, 41 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 1631421..e036d75 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -231,6 +231,7 @@ VIR_ENUM_IMPL(virDomainDevice, VIR_DOMAIN_DEVICE_LAST,
               "redirdev",
               "smartcard",
               "chr",
+              "cpu",
               "memballoon",
               "nvram",
               "rng",
@@ -1981,6 +1982,7 @@ void virDomainDeviceDefFree(virDomainDeviceDefPtr def)
     case VIR_DOMAIN_DEVICE_PANIC:
         virDomainPanicDefFree(def->data.panic);
         break;
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_LAST:
     case VIR_DOMAIN_DEVICE_NONE:
         break;
@@ -2675,6 +2677,8 @@ virDomainDeviceGetInfo(virDomainDeviceDefPtr device)
         return &device->data.smartcard->info;
     case VIR_DOMAIN_DEVICE_CHR:
         return &device->data.chr->info;
+    case VIR_DOMAIN_DEVICE_CPU:
+        return &device->data.cpu->info;
     case VIR_DOMAIN_DEVICE_MEMBALLOON:
         return &device->data.memballoon->info;
     case VIR_DOMAIN_DEVICE_NVRAM:
@@ -2857,6 +2861,12 @@ virDomainDeviceInfoIterateInternal(virDomainDefPtr def,
         if (cb(def, &device, &def->consoles[i]->info, opaque) < 0)
             return -1;
     }
+    device.type = VIR_DOMAIN_DEVICE_CPU;
+    for (i = 0; i < def->ncpus; i++) {
+        device.data.cpu = def->cpus[i];
+        if (cb(def, &device, &def->cpus[i]->info, opaque) < 0)
+            return -1;
+    }
     device.type = VIR_DOMAIN_DEVICE_INPUT;
     for (i = 0; i < def->ninputs; i++) {
         device.data.input = def->inputs[i];
@@ -2943,6 +2953,7 @@ virDomainDeviceInfoIterateInternal(virDomainDefPtr def,
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_SMARTCARD:
     case VIR_DOMAIN_DEVICE_CHR:
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_MEMBALLOON:
     case VIR_DOMAIN_DEVICE_NVRAM:
     case VIR_DOMAIN_DEVICE_SHMEM:
@@ -11175,6 +11186,7 @@ virDomainDeviceDefParse(const char *xmlStr,
         if (!(dev->data.panic = virDomainPanicDefParseXML(node)))
             goto error;
         break;
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_LAST:
         break;
@@ -16015,6 +16027,7 @@ virDomainDefCheckABIStability(virDomainDefPtr src,
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_SMARTCARD:
     case VIR_DOMAIN_DEVICE_CHR:
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_MEMBALLOON:
     case VIR_DOMAIN_DEVICE_NVRAM:
     case VIR_DOMAIN_DEVICE_LAST:
@@ -21463,6 +21476,7 @@ virDomainDeviceDefCopy(virDomainDeviceDefPtr src,
     case VIR_DOMAIN_DEVICE_PANIC:
         rc = virDomainPanicDefFormat(&buf, src->data.panic);
         break;
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_SMARTCARD:
     case VIR_DOMAIN_DEVICE_MEMBALLOON:
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 8869d26..618eef3 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -108,6 +108,9 @@ typedef virDomainSmartcardDef *virDomainSmartcardDefPtr;
 typedef struct _virDomainChrDef virDomainChrDef;
 typedef virDomainChrDef *virDomainChrDefPtr;
 
+typedef struct _virDomainCPUDef virDomainCPUDef;
+typedef virDomainCPUDef *virDomainCPUDefPtr;
+
 typedef struct _virDomainMemballoonDef virDomainMemballoonDef;
 typedef virDomainMemballoonDef *virDomainMemballoonDefPtr;
 
@@ -162,6 +165,7 @@ typedef enum {
     VIR_DOMAIN_DEVICE_REDIRDEV,
     VIR_DOMAIN_DEVICE_SMARTCARD,
     VIR_DOMAIN_DEVICE_CHR,
+    VIR_DOMAIN_DEVICE_CPU,
     VIR_DOMAIN_DEVICE_MEMBALLOON,
     VIR_DOMAIN_DEVICE_NVRAM,
     VIR_DOMAIN_DEVICE_RNG,
@@ -192,6 +196,7 @@ struct _virDomainDeviceDef {
         virDomainRedirdevDefPtr redirdev;
         virDomainSmartcardDefPtr smartcard;
         virDomainChrDefPtr chr;
+        virDomainCPUDefPtr cpu;
         virDomainMemballoonDefPtr memballoon;
         virDomainNVRAMDefPtr nvram;
         virDomainRNGDefPtr rng;
@@ -1158,6 +1163,13 @@ struct _virDomainChrDef {
     virSecurityDeviceLabelDefPtr *seclabels;
 };
 
+struct _virDomainCPUDef {
+    char *driver;
+    int apic_id;
+
+    virDomainDeviceInfo info;
+};
+
 typedef enum {
     VIR_DOMAIN_SMARTCARD_TYPE_HOST,
     VIR_DOMAIN_SMARTCARD_TYPE_HOST_CERTIFICATES,
@@ -2130,6 +2142,9 @@ struct _virDomainDef {
     size_t nsmartcards;
     virDomainSmartcardDefPtr *smartcards;
 
+    size_t ncpus;
+    virDomainCPUDefPtr *cpus;
+
     size_t nserials;
     virDomainChrDefPtr *serials;
 
@@ -2342,6 +2357,7 @@ void virDomainActualNetDefFree(virDomainActualNetDefPtr def);
 void virDomainNetDefFree(virDomainNetDefPtr def);
 void virDomainSmartcardDefFree(virDomainSmartcardDefPtr def);
 void virDomainChrDefFree(virDomainChrDefPtr def);
+void virDomainCPUDefFree(virDomainCPUDefPtr def);
 void virDomainChrSourceDefFree(virDomainChrSourceDefPtr def);
 int virDomainChrSourceDefCopy(virDomainChrSourceDefPtr src,
                               virDomainChrSourceDefPtr dest);
@@ -2387,6 +2403,8 @@ void virDomainDefFree(virDomainDefPtr vm);
 
 virDomainChrDefPtr virDomainChrDefNew(void);
 
+virDomainCPUDefPtr virDomainCPUDefNew(void);
+
 virDomainDefPtr virDomainDefNew(const char *name,
                                 const unsigned char *uuid,
                                 int id);
@@ -2805,6 +2823,7 @@ VIR_ENUM_DECL(virDomainChrChannelTarget)
 VIR_ENUM_DECL(virDomainChrConsoleTarget)
 VIR_ENUM_DECL(virDomainChrSerialTarget)
 VIR_ENUM_DECL(virDomainSmartcard)
+VIR_ENUM_DECL(virDomainCPU)
 VIR_ENUM_DECL(virDomainChr)
 VIR_ENUM_DECL(virDomainChrTcpProtocol)
 VIR_ENUM_DECL(virDomainChrSpicevmc)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index d08e400..9ceff71 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -166,6 +166,7 @@ virDomainChrTcpProtocolTypeFromString;
 virDomainChrTcpProtocolTypeToString;
 virDomainChrTypeFromString;
 virDomainChrTypeToString;
+virDomainCPUDefFree;
 virDomainClockBasisTypeToString;
 virDomainClockOffsetTypeFromString;
 virDomainClockOffsetTypeToString;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 6bc7d8d..ecdf5c6 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6994,6 +6994,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm,
             dev->data.chr = NULL;
         break;
 
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_FS:
     case VIR_DOMAIN_DEVICE_INPUT:
@@ -7069,6 +7070,7 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm,
     case VIR_DOMAIN_DEVICE_CHR:
         ret = qemuDomainDetachChrDevice(driver, vm, dev->data.chr);
         break;
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_FS:
     case VIR_DOMAIN_DEVICE_INPUT:
     case VIR_DOMAIN_DEVICE_SOUND:
@@ -7188,6 +7190,7 @@ qemuDomainUpdateDeviceLive(virConnectPtr conn,
     case VIR_DOMAIN_DEVICE_CONTROLLER:
     case VIR_DOMAIN_DEVICE_REDIRDEV:
     case VIR_DOMAIN_DEVICE_CHR:
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_TPM:
     case VIR_DOMAIN_DEVICE_PANIC:
@@ -7312,6 +7315,7 @@ qemuDomainAttachDeviceConfig(virQEMUCapsPtr qemuCaps,
         dev->data.fs = NULL;
         break;
 
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_INPUT:
     case VIR_DOMAIN_DEVICE_SOUND:
     case VIR_DOMAIN_DEVICE_VIDEO:
@@ -7428,6 +7432,7 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
         virDomainFSDefFree(fs);
         break;
 
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_INPUT:
     case VIR_DOMAIN_DEVICE_SOUND:
     case VIR_DOMAIN_DEVICE_VIDEO:
@@ -7543,6 +7548,7 @@ qemuDomainUpdateDeviceConfig(virQEMUCapsPtr qemuCaps,
     case VIR_DOMAIN_DEVICE_CONTROLLER:
     case VIR_DOMAIN_DEVICE_REDIRDEV:
     case VIR_DOMAIN_DEVICE_CHR:
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_TPM:
     case VIR_DOMAIN_DEVICE_PANIC:
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 9ed96dc..f6d7667 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -2885,6 +2885,7 @@ qemuDomainRemoveDevice(virQEMUDriverPtr driver,
         ret = qemuDomainRemoveChrDevice(driver, vm, dev->data.chr);
         break;
 
+    case VIR_DOMAIN_DEVICE_CPU:
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_LEASE:
     case VIR_DOMAIN_DEVICE_FS:
-- 
1.9.3




More information about the libvir-list mailing list