]> xenbits.xensource.com Git - libvirt.git/commitdiff
introduce virDomainSetSchedulerParametersFlags
authorHu Tao <hutao@cn.fujitsu.com>
Tue, 17 May 2011 06:20:00 +0000 (14:20 +0800)
committerEric Blake <eblake@redhat.com>
Tue, 17 May 2011 15:37:46 +0000 (09:37 -0600)
This new function allows aditional flags to be passed into from
the virsh command line.

include/libvirt/libvirt.h.in
python/generator.py
src/driver.h
src/libvirt.c
src/libvirt_public.syms

index f4d0b40f33390f41509b072c292a5022a187f45c..ec32b4b3d8f3248d733b5fefcb470136373fdf76 100644 (file)
@@ -295,6 +295,12 @@ typedef enum {
     VIR_DOMAIN_SCHED_FIELD_BOOLEAN = 6  /* boolean(character) case */
 } virSchedParameterType;
 
+typedef enum {
+    VIR_DOMAIN_SCHEDPARAM_CURRENT = (1 << 0), /* affect current domain state */
+    VIR_DOMAIN_SCHEDPARAM_LIVE    = (1 << 1), /* Affect active domain */
+    VIR_DOMAIN_SCHEDPARAM_CONFIG  = (1 << 2), /* Affect next boot */
+} virDomainSchedParameterFlags;
+
 /**
  * VIR_DOMAIN_SCHED_FIELD_LENGTH:
  *
@@ -346,6 +352,14 @@ int     virDomainSetSchedulerParameters (virDomainPtr domain,
                                          virSchedParameterPtr params,
                                          int nparams);
 
+/*
+ * Change scheduler parameters
+ */
+int     virDomainSetSchedulerParametersFlags (virDomainPtr domain,
+                                              virSchedParameterPtr params,
+                                              int nparams,
+                                              unsigned int flags);
+
 /**
  * virDomainBlockStats:
  *
index b395caf32a99b37bd0eb7238bd29ac7a898714dc..9f9deb290e95fbeaf63caf1b2fd34fb66f7d9318 100755 (executable)
@@ -312,6 +312,7 @@ skip_impl = (
     'virDomainGetSchedulerType',
     'virDomainGetSchedulerParameters',
     'virDomainSetSchedulerParameters',
+    'virDomainSetSchedulerParametersFlags',
     'virDomainSetBlkioParameters',
     'virDomainGetBlkioParameters',
     'virDomainSetMemoryParameters',
index 006e0bbd24f524b2128b8b8168277e26a3596685..450dd5362d363d0d61ac9b158d7c9c6fe49fc1da 100644 (file)
@@ -285,6 +285,13 @@ typedef int
                                          virSchedParameterPtr params,
                                          int nparams);
 
+typedef int
+        (*virDrvDomainSetSchedulerParametersFlags)
+                                        (virDomainPtr domain,
+                                         virSchedParameterPtr params,
+                                         int nparams,
+                                         unsigned int flags);
+
 typedef int
     (*virDrvDomainBlockStats)
                     (virDomainPtr domain,
@@ -677,6 +684,7 @@ struct _virDriver {
     virDrvDomainGetSchedulerType       domainGetSchedulerType;
     virDrvDomainGetSchedulerParameters domainGetSchedulerParameters;
     virDrvDomainSetSchedulerParameters domainSetSchedulerParameters;
+    virDrvDomainSetSchedulerParametersFlags domainSetSchedulerParametersFlags;
     virDrvDomainMigratePrepare domainMigratePrepare;
     virDrvDomainMigratePerform domainMigratePerform;
     virDrvDomainMigrateFinish  domainMigrateFinish;
index 62da46b38a2752aba6d093e2620c43483227697e..56b1257b821b3e3e0bc9828879a69bb3d884127c 100644 (file)
@@ -5106,6 +5106,70 @@ error:
 }
 
 
+/**
+ * virDomainSetSchedulerParametersFlags:
+ * @domain: pointer to domain object
+ * @params: pointer to scheduler parameter objects
+ * @nparams: number of scheduler parameter
+ *          (this value should be same or less than the returned value
+ *           nparams of virDomainGetSchedulerType)
+ * @flags: virDomainSchedParameterFlags
+ *
+ * Change the scheduler parameters
+ *
+ * Returns -1 in case of error, 0 in case of success.
+ */
+int
+virDomainSetSchedulerParametersFlags(virDomainPtr domain,
+                                     virSchedParameterPtr params,
+                                     int nparams,
+                                     unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d, flags=%u",
+                     params, nparams, flags);
+
+    virResetLastError();
+
+    if (!(flags & (VIR_DOMAIN_SCHEDPARAM_LIVE |
+                   VIR_DOMAIN_SCHEDPARAM_CONFIG |
+                   VIR_DOMAIN_SCHEDPARAM_CURRENT))) {
+        virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+        virDispatchError(NULL);
+        return -1;
+    }
+
+    if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        virDispatchError(NULL);
+        return -1;
+    }
+    if (domain->conn->flags & VIR_CONNECT_RO) {
+        virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+        goto error;
+    }
+    conn = domain->conn;
+
+    if (conn->driver->domainSetSchedulerParametersFlags) {
+        int ret;
+        ret = conn->driver->domainSetSchedulerParametersFlags(domain,
+                                                              params,
+                                                              nparams,
+                                                              flags);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(domain->conn);
+    return -1;
+}
+
+
 /**
  * virDomainBlockStats:
  * @dom: pointer to the domain object
index 1444b551a720f299096a19dad847328c027c78e8..059053593728c1b832e48d8670217d34bb35e7e0 100644 (file)
@@ -441,6 +441,7 @@ LIBVIRT_0.9.2 {
         virDomainGetState;
         virDomainInjectNMI;
         virDomainScreenshot;
+        virDomainSetSchedulerParametersFlags;
 } LIBVIRT_0.9.0;
 
 # .... define new API here using predicted next version number ....