|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5 of 6] xend/xc: Implement a domain_set_e820_hole function to be used by python code
On Sat, 2012-03-24 at 17:41 +0000, Konrad Rzeszutek Wilk wrote:
> # HG changeset patch
> # User Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> # Date 1332610898 14400
> # Node ID 95eda76084314aa8a5cfd4b5e83969823492deda
> # Parent d42921da3931026ecf5da7c0e5bb86074e77cf71
> xend/xc: Implement a domain_set_e820_hole function to be used by python code
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
>
> diff -r d42921da3931 -r 95eda7608431 tools/python/xen/lowlevel/xc/xc.c
> --- a/tools/python/xen/lowlevel/xc/xc.c Sat Mar 24 13:41:38 2012 -0400
> +++ b/tools/python/xen/lowlevel/xc/xc.c Sat Mar 24 13:41:38 2012 -0400
> @@ -16,6 +16,7 @@
> #include <sys/mman.h>
> #include <netdb.h>
> #include <arpa/inet.h>
> +#include <stdio.h>
>
> #include "xenctrl.h"
> #include <xen/elfnote.h>
> @@ -1697,6 +1698,243 @@ static PyObject *pyxc_domain_set_memmap_
> return zero;
> }
>
> +#ifdef PRIu64
This is a really weird condition -- when / where does this end up not
defined?
Perhaps you see this depending on platform? In which case is this just a
case of including the right header (stdint.h?) directly instead of
implicitly via some arch dependent chain of includes?
> +static const char *e820_names(int type)
> +{
> + switch (type) {
> + case E820_RAM: return "RAM";
> + case E820_RESERVED: return "Reserved";
> + case E820_ACPI: return "ACPI";
> + case E820_NVS: return "ACPI NVS";
> + case E820_UNUSABLE: return "Unusable";
> + default: break;
> + }
> + return "Unknown";
> +}
> +#endif
> +static int e820_sanitize(struct e820entry src[],
> + uint32_t *nr_entries,
> + unsigned long map_limitkb,
> + unsigned long balloon_kb)
> +{
Seems odd to do this in the C bindings, can this be done either in the
python layer or in the libxc layer (in which case libxl can use it too?)
[...]
> +}
> +
> +static PyObject *pyxc_domain_set_e820_hole(XcObject *self, PyObject *args)
> +{
> + uint32_t dom, nr;
> + unsigned int target_kb;
> + unsigned int balloon_kb;
> + int rc;
> + struct e820entry map[E820MAX];
> +
> + if ( !PyArg_ParseTuple(args, "iii", &dom, &target_kb, &balloon_kb) )
> + return NULL;
> +
> + rc = xc_get_machine_memory_map(self->xc_handle, map, E820MAX);
> + if (rc < 0)
> + return pyxc_error_to_exception(self->xc_handle);
> +
> + nr = rc;
> + rc = e820_sanitize(map, &nr, target_kb, balloon_kb);
> + if (rc)
> + return pyxc_error_to_exception(self->xc_handle);
> +
> + rc = xc_domain_set_memory_map(self->xc_handle, dom, map, nr);
> + if (rc < 0)
> + return pyxc_error_to_exception(self->xc_handle);
> +
> + Py_INCREF(zero);
> + return zero;
> +}
> +
> static PyObject *pyxc_domain_ioport_permission(XcObject *self,
> PyObject *args,
> PyObject *kwds)
> @@ -2701,6 +2939,15 @@ static PyMethodDef pyxc_methods[] = {
> " map_limitkb [int]: .\n"
> "Returns: [int] 0 on success; -1 on error.\n" },
>
> + { "domain_set_e820_hole",
> + (PyCFunction)pyxc_domain_set_e820_hole,
> + METH_VARARGS, "\n"
> + "Set a domain's E820 memory map\n"
> + " dom [int]: Identifier of domain.\n"
> + " target_memkb [int]: .\n"
> + " balloon_kb [int]: .\n"
> + "Returns: [int] 0 on success; -1 on error.\n" },
> +
> #ifdef __ia64__
> { "nvram_init",
> (PyCFunction)pyxc_nvram_init,
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |