[libvirt] [PATCH 2/5] setmaxmem: introduce a new libvirt API (virDomainSetMaxMemoryFlags)

Wen Congyang wency at cn.fujitsu.com
Fri Mar 18 03:14:39 UTC 2011


At 03/18/2011 10:44 AM, Taku Izumi Write:
> 
> This patch introduces a new libvirt API (virDomainSetMaxMemoryFlags).
> 
> 
> Signed-off-by: Taku Izumi <izumi.taku at jp.fujitsu.com>
> ---
>  include/libvirt/libvirt.h.in |    3 ++
>  src/driver.h                 |    5 +++
>  src/esx/esx_driver.c         |    1
>  src/libvirt.c                |   62 +++++++++++++++++++++++++++++++++++++++++++
>  src/libvirt_public.syms      |    1
>  src/lxc/lxc_driver.c         |    1
>  src/opennebula/one_driver.c  |    1
>  src/openvz/openvz_driver.c   |    1
>  src/phyp/phyp_driver.c       |    1
>  src/qemu/qemu_driver.c       |    1
>  src/remote/remote_driver.c   |    1
>  src/test/test_driver.c       |    1
>  src/uml/uml_driver.c         |    1
>  src/vbox/vbox_tmpl.c         |    1
>  src/vmware/vmware_driver.c   |    1
>  src/xen/xen_driver.c         |    1
>  src/xenapi/xenapi_driver.c   |    1
>  17 files changed, 84 insertions(+)
> 
> Index: libvirt/include/libvirt/libvirt.h.in
> ===================================================================
> --- libvirt.orig/include/libvirt/libvirt.h.in
> +++ libvirt/include/libvirt/libvirt.h.in
> @@ -868,6 +868,9 @@ char *                  virDomainGetOSTy
>  unsigned long           virDomainGetMaxMemory   (virDomainPtr domain);
>  int                     virDomainSetMaxMemory   (virDomainPtr domain,
>                                                   unsigned long memory);
> +int                     virDomainSetMaxMemoryFlags (virDomainPtr domain,
> +                                                    unsigned long memory,
> +                                                    unsigned int flags);
>  int                     virDomainSetMemory      (virDomainPtr domain,
>                                                   unsigned long memory);
>  int                     virDomainSetMemoryFlags (virDomainPtr domain,
> Index: libvirt/src/driver.h
> ===================================================================
> --- libvirt.orig/src/driver.h
> +++ libvirt/src/driver.h
> @@ -131,6 +131,10 @@ typedef int
>          (*virDrvDomainSetMaxMemory)	(virDomainPtr domain,
>                                           unsigned long memory);
>  typedef int
> +        (*virDrvDomainSetMaxMemoryFlags)(virDomainPtr domain,
> +                                         unsigned long memory,
> +                                         unsigned int flags);
> +typedef int
>          (*virDrvDomainSetMemory)	(virDomainPtr domain,
>                                           unsigned long memory);
>  typedef int
> @@ -551,6 +555,7 @@ struct _virDriver {
>      virDrvDomainGetOSType		domainGetOSType;
>      virDrvDomainGetMaxMemory	domainGetMaxMemory;
>      virDrvDomainSetMaxMemory	domainSetMaxMemory;
> +    virDrvDomainSetMaxMemoryFlags domainSetMaxMemoryFlags;
>      virDrvDomainSetMemory		domainSetMemory;
>      virDrvDomainSetMemoryFlags  domainSetMemoryFlags;
>      virDrvDomainSetMemoryParameters domainSetMemoryParameters;
> Index: libvirt/src/esx/esx_driver.c
> ===================================================================
> --- libvirt.orig/src/esx/esx_driver.c
> +++ libvirt/src/esx/esx_driver.c
> @@ -4592,6 +4592,7 @@ static virDriver esxDriver = {
>      esxDomainGetOSType,              /* domainGetOSType */
>      esxDomainGetMaxMemory,           /* domainGetMaxMemory */
>      esxDomainSetMaxMemory,           /* domainSetMaxMemory */
> +    NULL,                            /* domainSetMaxMemoryFlags */
>      esxDomainSetMemory,              /* domainSetMemory */
>      NULL,                            /* domainSetMemoryFlags */
>      esxDomainSetMemoryParameters,    /* domainSetMemoryParameters */
> Index: libvirt/src/libvirt.c
> ===================================================================
> --- libvirt.orig/src/libvirt.c
> +++ libvirt/src/libvirt.c
> @@ -2791,6 +2791,68 @@ error:
>      return -1;
>  }
> 
> +/*
> + * virDomainSetMaxMemoryFlags:
> + * @domain: a domain object or NULL
> + * @memory: the memory size in kilobytes
> + * @flags: an OR'ed set of virDomainMemoryModFlags
> + *
> + * Dynamically change the maximum amount of physical memory allocated to a
> + * domain. If domain is NULL, then this change the amount of memory reserved
> + * to Domain0 i.e. the domain where the application runs.
> + * This function requires privileged access to the hypervisor.
> + *
> + * @flags must include VIR_DOMAIN_MEM_LIVE to affect a running
> + * domain (which may fail if domain is not active), or
> + * VIR_DOMAIN_MEM_CONFIG to affect the next boot via the XML
> + * description of the domain. Both flags may be set.
> + *
> + * Returns 0 in case of success and -1 in case of failure.
> + */
> +int
> +virDomainSetMaxMemoryFlags(virDomainPtr domain, unsigned long memory,
> +                           unsigned int flags)
> +{
> +    virConnectPtr conn;
> +
> +    VIR_DOMAIN_DEBUG(domain, "memory=%lu flags=%u", memory, flags);
> +
> +    virResetLastError();
> +
> +    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;
> +    }
> +
> +    if (memory < 4096 ||
> +        (flags & (VIR_DOMAIN_MEM_LIVE | VIR_DOMAIN_MEM_CONFIG)) == 0) {
> +        virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);

'goto error' is required here.

> +    }
> +
> +    conn = domain->conn;
> +
> +    if (conn->driver->domainSetMaxMemoryFlags) {
> +        int ret;
> +        ret = conn->driver->domainSetMaxMemoryFlags (domain, memory, flags);
> +        if (ret < 0)
> +            goto error;
> +        return ret;
> +    }
> +
> +    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
> +
> +error:
> +    virDispatchError(domain->conn);
> +    return -1;
> +}
> +
> +
>  /**
>   * virDomainSetMemory:
>   * @domain: a domain object or NULL
> Index: libvirt/src/libvirt_public.syms
> ===================================================================
> --- libvirt.orig/src/libvirt_public.syms
> +++ libvirt/src/libvirt_public.syms
> @@ -431,6 +431,7 @@ LIBVIRT_0.9.0 {
>          virDomainSetMemoryFlags;
>          virEventRegisterDefaultImpl;
>          virEventRunDefaultImpl;
> +        virDomainSetMaxMemoryFlags;
>  } LIBVIRT_0.8.8;
> 
>  # .... define new API here using predicted next version number ....
> Index: libvirt/src/lxc/lxc_driver.c
> ===================================================================
> --- libvirt.orig/src/lxc/lxc_driver.c
> +++ libvirt/src/lxc/lxc_driver.c
> @@ -2817,6 +2817,7 @@ static virDriver lxcDriver = {
>      lxcGetOSType, /* domainGetOSType */
>      lxcDomainGetMaxMemory, /* domainGetMaxMemory */
>      lxcDomainSetMaxMemory, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      lxcDomainSetMemory, /* domainSetMemory */
>      NULL, /* domainSetMemoryFlags */
>      lxcDomainSetMemoryParameters, /* domainSetMemoryParameters */
> Index: libvirt/src/opennebula/one_driver.c
> ===================================================================
> --- libvirt.orig/src/opennebula/one_driver.c
> +++ libvirt/src/opennebula/one_driver.c
> @@ -749,6 +749,7 @@ static virDriver oneDriver = {
>      oneGetOSType, /* domainGetOSType */
>      NULL, /* domainGetMaxMemory */
>      NULL, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      NULL, /* domainSetMemory */
>      NULL, /* domainSetMemoryFlags */
>      NULL, /* domainSetMemoryParameters */
> Index: libvirt/src/openvz/openvz_driver.c
> ===================================================================
> --- libvirt.orig/src/openvz/openvz_driver.c
> +++ libvirt/src/openvz/openvz_driver.c
> @@ -1570,6 +1570,7 @@ static virDriver openvzDriver = {
>      openvzGetOSType, /* domainGetOSType */
>      NULL, /* domainGetMaxMemory */
>      NULL, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      NULL, /* domainSetMemory */
>      NULL, /* domainSetMemoryFlags */
>      NULL, /* domainSetMemoryParameters */
> Index: libvirt/src/phyp/phyp_driver.c
> ===================================================================
> --- libvirt.orig/src/phyp/phyp_driver.c
> +++ libvirt/src/phyp/phyp_driver.c
> @@ -3972,6 +3972,7 @@ static virDriver phypDriver = {
>      NULL,                       /* domainGetOSType */
>      NULL,                       /* domainGetMaxMemory */
>      NULL,                       /* domainSetMaxMemory */
> +    NULL,                       /* domainSetMaxMemoryFlags */
>      NULL,                       /* domainSetMemory */
>      NULL,                       /* domainSetMemoryFlags */
>      NULL,                       /* domainSetMemoryParameters */
> Index: libvirt/src/qemu/qemu_driver.c
> ===================================================================
> --- libvirt.orig/src/qemu/qemu_driver.c
> +++ libvirt/src/qemu/qemu_driver.c
> @@ -7045,6 +7045,7 @@ static virDriver qemuDriver = {
>      qemudDomainGetOSType, /* domainGetOSType */
>      qemudDomainGetMaxMemory, /* domainGetMaxMemory */
>      NULL, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      qemudDomainSetMemory, /* domainSetMemory */
>      qemudDomainSetMemoryFlags, /* domainSetMemoryFlags */
>      qemuDomainSetMemoryParameters, /* domainSetMemoryParameters */
> Index: libvirt/src/remote/remote_driver.c
> ===================================================================
> --- libvirt.orig/src/remote/remote_driver.c
> +++ libvirt/src/remote/remote_driver.c
> @@ -11076,6 +11076,7 @@ static virDriver remote_driver = {
>      remoteDomainGetOSType, /* domainGetOSType */
>      remoteDomainGetMaxMemory, /* domainGetMaxMemory */
>      remoteDomainSetMaxMemory, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      remoteDomainSetMemory, /* domainSetMemory */
>      remoteDomainSetMemoryFlags, /* domainSetMemoryFlags */
>      remoteDomainSetMemoryParameters, /* domainSetMemoryParameters */
> Index: libvirt/src/test/test_driver.c
> ===================================================================
> --- libvirt.orig/src/test/test_driver.c
> +++ libvirt/src/test/test_driver.c
> @@ -5364,6 +5364,7 @@ static virDriver testDriver = {
>      testGetOSType, /* domainGetOSType */
>      testGetMaxMemory, /* domainGetMaxMemory */
>      testSetMaxMemory, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      testSetMemory, /* domainSetMemory */
>      NULL, /* domainSetMemoryFlags */
>      NULL, /* domainSetMemoryParameters */
> Index: libvirt/src/uml/uml_driver.c
> ===================================================================
> --- libvirt.orig/src/uml/uml_driver.c
> +++ libvirt/src/uml/uml_driver.c
> @@ -2166,6 +2166,7 @@ static virDriver umlDriver = {
>      umlDomainGetOSType, /* domainGetOSType */
>      umlDomainGetMaxMemory, /* domainGetMaxMemory */
>      umlDomainSetMaxMemory, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      umlDomainSetMemory, /* domainSetMemory */
>      NULL, /* domainSetMemoryFlags */
>      NULL, /* domainSetMemoryParameters */
> Index: libvirt/src/vbox/vbox_tmpl.c
> ===================================================================
> --- libvirt.orig/src/vbox/vbox_tmpl.c
> +++ libvirt/src/vbox/vbox_tmpl.c
> @@ -8554,6 +8554,7 @@ virDriver NAME(Driver) = {
>      vboxDomainGetOSType, /* domainGetOSType */
>      NULL, /* domainGetMaxMemory */
>      NULL, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      vboxDomainSetMemory, /* domainSetMemory */
>      NULL, /* domainSetMemoryFlags */
>      NULL, /* domainSetMemoryParameters */
> Index: libvirt/src/vmware/vmware_driver.c
> ===================================================================
> --- libvirt.orig/src/vmware/vmware_driver.c
> +++ libvirt/src/vmware/vmware_driver.c
> @@ -924,6 +924,7 @@ static virDriver vmwareDriver = {
>      vmwareGetOSType,            /* domainGetOSType */
>      NULL,                       /* domainGetMaxMemory */
>      NULL,                       /* domainSetMaxMemory */
> +    NULL,                       /* domainSetMaxMemoryFlags */
>      NULL,                       /* domainSetMemory */
>      NULL,                       /* domainSetMemoryFlags */
>      NULL,                       /* domainSetMemoryParameters */
> Index: libvirt/src/xen/xen_driver.c
> ===================================================================
> --- libvirt.orig/src/xen/xen_driver.c
> +++ libvirt/src/xen/xen_driver.c
> @@ -2033,6 +2033,7 @@ static virDriver xenUnifiedDriver = {
>      xenUnifiedDomainGetOSType, /* domainGetOSType */
>      xenUnifiedDomainGetMaxMemory, /* domainGetMaxMemory */
>      xenUnifiedDomainSetMaxMemory, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      xenUnifiedDomainSetMemory, /* domainSetMemory */
>      NULL, /*domainSetMemoryFlags */
>      NULL, /* domainSetMemoryParameters */
> Index: libvirt/src/xenapi/xenapi_driver.c
> ===================================================================
> --- libvirt.orig/src/xenapi/xenapi_driver.c
> +++ libvirt/src/xenapi/xenapi_driver.c
> @@ -1802,6 +1802,7 @@ static virDriver xenapiDriver = {
>      xenapiDomainGetOSType, /* domainGetOSType */
>      xenapiDomainGetMaxMemory, /* domainGetMaxMemory */
>      xenapiDomainSetMaxMemory, /* domainSetMaxMemory */
> +    NULL, /* domainSetMaxMemoryFlags */
>      NULL, /* domainSetMemory */
>      NULL, /* domainSetMemoryFlags */
>      NULL, /* domainSetMemoryParameters */
> 
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 




More information about the libvir-list mailing list