> Since there are currently no uses of this type there is no change to
> the generated code.
But for reference if I add Dario''s numa info type:
diff -r 03b641aa89f9 tools/libxl/libxl_types.idl
--- a/tools/libxl/libxl_types.idl Wed Jun 27 11:05:57 2012 +0100
+++ b/tools/libxl/libxl_types.idl Wed Jun 27 11:13:44 2012 +0100
@@ -423,6 +423,12 @@ libxl_physinfo = Struct("physinfo", [
("cap_hvm_directio", bool),
], dir=DIR_OUT)
+libxl_numainfo = Struct("numainfo", [
+ ("size", uint64),
+ ("free", uint64),
+ ("dists", Array(uint32, "num_dists")),
+ ], dir=DIR_OUT)
+
libxl_cputopology = Struct("cputopology", [
("core", uint32),
("socket", uint32),
then I get the following diff to the generated files:
--- tools/libxl/_libxl_types.c.baseline 2012-06-27 10:08:58.000000000 +0100
+++ tools/libxl/_libxl_types.c 2012-06-27 11:12:06.000000000 +0100
@@ -176,6 +176,12 @@ void libxl_physinfo_dispose(libxl_physin
memset(p, LIBXL_DTOR_POISON, sizeof(*p));
}
+void libxl_numainfo_dispose(libxl_numainfo *p)
+{
+ free(p->dists);
+ memset(p, LIBXL_DTOR_POISON, sizeof(*p));
+}
+
void libxl_cputopology_dispose(libxl_cputopology *p)
{
memset(p, LIBXL_DTOR_POISON, sizeof(*p));
@@ -337,6 +343,11 @@ void libxl_physinfo_init(libxl_physinfo
memset(p, ''\0'', sizeof(*p));
}
+void libxl_numainfo_init(libxl_numainfo *p)
+{
+ memset(p, ''\0'', sizeof(*p));
+}
+
void libxl_cputopology_init(libxl_cputopology *p)
{
memset(p, ''\0'', sizeof(*p));
@@ -2554,6 +2565,53 @@ char *libxl_physinfo_to_json(libxl_ctx *
return libxl__object_to_json(ctx, "libxl_physinfo",
(libxl__gen_json_callback)&libxl_physinfo_gen_json, (void *)p);
}
+yajl_gen_status libxl_numainfo_gen_json(yajl_gen hand, libxl_numainfo *p)
+{
+ yajl_gen_status s;
+ s = yajl_gen_map_open(hand);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ s = yajl_gen_string(hand, (const unsigned char *)"size",
sizeof("size")-1);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ s = yajl_gen_integer(hand, p->size);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ s = yajl_gen_string(hand, (const unsigned char *)"free",
sizeof("free")-1);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ s = yajl_gen_integer(hand, p->free);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ s = yajl_gen_string(hand, (const unsigned char *)"dists",
sizeof("dists")-1);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ {
+ int i;
+ s = yajl_gen_array_open(hand);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ for (i=0; i<p->num_dists; i++) {
+ s = yajl_gen_integer(hand, p->dists[i]);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ }
+ s = yajl_gen_array_close(hand);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ }
+ s = yajl_gen_map_close(hand);
+ if (s != yajl_gen_status_ok)
+ goto out;
+ out:
+ return s;
+}
+
+char *libxl_numainfo_to_json(libxl_ctx *ctx, libxl_numainfo *p)
+{
+ return libxl__object_to_json(ctx, "libxl_numainfo",
(libxl__gen_json_callback)&libxl_numainfo_gen_json, (void *)p);
+}
+
yajl_gen_status libxl_cputopology_gen_json(yajl_gen hand, libxl_cputopology *p)
{
yajl_gen_status s;
--- tools/libxl/_libxl_types.h.baseline 2012-06-27 10:08:58.000000000 +0100
+++ tools/libxl/_libxl_types.h 2012-06-27 11:12:06.000000000 +0100
@@ -475,6 +475,16 @@ void libxl_physinfo_dispose(libxl_physin
void libxl_physinfo_init(libxl_physinfo *p);
char *libxl_physinfo_to_json(libxl_ctx *ctx, libxl_physinfo *p);
+typedef struct libxl_numainfo {
+ uint64_t size;
+ uint64_t free;
+ int num_dists;
+ uint32_t * dists;
+} libxl_numainfo;
+void libxl_numainfo_dispose(libxl_numainfo *p);
+void libxl_numainfo_init(libxl_numainfo *p);
+char *libxl_numainfo_to_json(libxl_ctx *ctx, libxl_numainfo *p);
+
typedef struct libxl_cputopology {
uint32_t core;
uint32_t socket;
--- tools/libxl/_libxl_types_json.h.baseline 2012-06-27 10:08:58.000000000 +0100
+++ tools/libxl/_libxl_types_json.h 2012-06-27 11:12:06.000000000 +0100
@@ -40,6 +40,7 @@ yajl_gen_status libxl_diskinfo_gen_json(
yajl_gen_status libxl_nicinfo_gen_json(yajl_gen hand, libxl_nicinfo *p);
yajl_gen_status libxl_vcpuinfo_gen_json(yajl_gen hand, libxl_vcpuinfo *p);
yajl_gen_status libxl_physinfo_gen_json(yajl_gen hand, libxl_physinfo *p);
+yajl_gen_status libxl_numainfo_gen_json(yajl_gen hand, libxl_numainfo *p);
yajl_gen_status libxl_cputopology_gen_json(yajl_gen hand, libxl_cputopology
*p);
yajl_gen_status libxl_sched_credit_params_gen_json(yajl_gen hand,
libxl_sched_credit_params *p);
yajl_gen_status libxl_domain_remus_info_gen_json(yajl_gen hand,
libxl_domain_remus_info *p);
--- tools/python/xen/lowlevel/xl/_pyxl_types.h.baseline 2012-06-27
10:08:58.000000000 +0100
+++ tools/python/xen/lowlevel/xl/_pyxl_types.h 2012-06-27 11:12:09.000000000
+0100
@@ -268,6 +268,17 @@ _hidden int Pyphysinfo_Check(PyObject *s
_hidden PyObject *attrib__libxl_hwcap_get(libxl_hwcap *hw_cap);
+/* Internal API for libxl_numainfo wrapper */
+typedef struct {
+ PyObject_HEAD;
+ libxl_numainfo obj;
+}Py_numainfo;
+
+_hidden Py_numainfo *Pynumainfo_New(void);
+
+_hidden int Pynumainfo_Check(PyObject *self);
+
+
/* Internal API for libxl_cputopology wrapper */
typedef struct {
PyObject_HEAD;
--- tools/python/xen/lowlevel/xl/_pyxl_types.c.baseline 2012-06-27
10:08:58.000000000 +0100
+++ tools/python/xen/lowlevel/xl/_pyxl_types.c 2012-06-27 11:12:09.000000000
+0100
@@ -3495,6 +3495,111 @@ int Pyphysinfo_Check(PyObject *self)
{
return (self->ob_type == &Pyphysinfo_Type);
}
+/* Attribute get/set functions for libxl_numainfo */
+static PyObject *py_numainfo_size_get(Py_numainfo *self, void *priv)
+{
+ return genwrap__ull_get(self->obj.size);
+}
+
+static PyObject *py_numainfo_free_get(Py_numainfo *self, void *priv)
+{
+ return genwrap__ull_get(self->obj.free);
+}
+
+static PyObject *py_numainfo_dists_get(Py_numainfo *self, void *priv)
+{
+ PyErr_SetString(PyExc_NotImplementedError, "Getting
libxl_numainfo");
+ return NULL;
+}
+
+static void Pynumainfo_dealloc(Py_numainfo *self)
+{
+ libxl_numainfo_dispose(&self->obj);
+ self->ob_type->tp_free((PyObject *)self);
+}
+
+static int Pynumainfo_init(Py_numainfo *self, PyObject *args, PyObject *kwds)
+{
+ memset(&self->obj, 0, sizeof(self->obj));
+ return genwrap__obj_init((PyObject *)self, args, kwds);
+}
+
+static PyObject *Pynumainfo_new(PyTypeObject *type, PyObject *args, PyObject
*kwds)
+{
+ Py_numainfo *self = (Py_numainfo *)type->tp_alloc(type, 0);
+ if (self == NULL)
+ return NULL;
+ memset(&self->obj, 0, sizeof(self->obj));
+ return (PyObject *)self;
+}
+
+static PyGetSetDef Pynumainfo_getset[] = {
+ { .name = "size",
+ .get = (getter)py_numainfo_size_get,
+ .set = (setter)NULL,
+ },
+ { .name = "free",
+ .get = (getter)py_numainfo_free_get,
+ .set = (setter)NULL,
+ },
+ { .name = "dists",
+ .get = (getter)py_numainfo_dists_get,
+ .set = (setter)NULL,
+ },
+ { .name = NULL }
+};
+
+static PyTypeObject Pynumainfo_Type= {
+ PyObject_HEAD_INIT(NULL)
+ 0,
+ PKG ".numainfo",
+ sizeof(Py_numainfo),
+ 0,
+ (destructor)Pynumainfo_dealloc, /* tp_dealloc */
+ NULL, /* tp_print */
+ NULL, /* tp_getattr */
+ NULL, /* tp_setattr */
+ NULL, /* tp_compare */
+ NULL, /* tp_repr */
+ NULL, /* tp_as_number */
+ NULL, /* tp_as_sequence */
+ NULL, /* tp_as_mapping */
+ NULL, /* tp_hash */
+ NULL, /* tp_call */
+ NULL, /* tp_str */
+ NULL, /* tp_getattro */
+ NULL, /* tp_setattro */
+ NULL, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
+ "numainfo", /* tp_doc */
+ NULL, /* tp_traverse */
+ NULL, /* tp_clear */
+ NULL, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ NULL, /* tp_iter */
+ NULL, /* tp_iternext */
+ NULL, /* tp_methods */
+ NULL, /* tp_members */
+ Pynumainfo_getset, /* tp_getset */
+ NULL, /* tp_base */
+ NULL, /* tp_dict */
+ NULL, /* tp_descr_get */
+ NULL, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)Pynumainfo_init, /* tp_init */
+ NULL, /* tp_alloc */
+ Pynumainfo_new, /* tp_new */
+};
+
+Py_numainfo *Pynumainfo_New(void)
+{
+ return (Py_numainfo *)Pynumainfo_new(&Pynumainfo_Type, NULL, NULL);
+}
+
+int Pynumainfo_Check(PyObject *self)
+{
+ return (self->ob_type == &Pynumainfo_Type);
+}
/* Attribute get/set functions for libxl_cputopology */
static PyObject *py_cputopology_core_get(Py_cputopology *self, void *priv)
{
@@ -4100,6 +4205,10 @@ void genwrap__init(PyObject *m)
Py_INCREF(&Pyphysinfo_Type);
PyModule_AddObject(m, "physinfo", (PyObject
*)&Pyphysinfo_Type);
}
+ if (PyType_Ready(&Pynumainfo_Type) >= 0) {
+ Py_INCREF(&Pynumainfo_Type);
+ PyModule_AddObject(m, "numainfo", (PyObject
*)&Pynumainfo_Type);
+ }
if (PyType_Ready(&Pycputopology_Type) >= 0) {
Py_INCREF(&Pycputopology_Type);
PyModule_AddObject(m, "cputopology", (PyObject
*)&Pycputopology_Type);
--- tools/ocaml/libs/xl/_libxl_types.inc.baseline 2012-06-27 10:08:58.000000000
+0100
+++ tools/ocaml/libs/xl/_libxl_types.inc 2012-06-27 11:12:11.000000000 +0100
@@ -1129,6 +1129,36 @@ static value Val_physinfo (caml_gc *gc,
/* Stubs for physinfo */
value stub_xl_physinfo_get(value v1);
+/* Convert numainfo to a caml value */
+static value Val_numainfo (caml_gc *gc, struct caml_logger *lg, libxl_numainfo
*numainfo_c)
+{
+ CAMLparam0();
+ CAMLlocal1(numainfo_ocaml);
+ {
+ value numainfo_field;
+
+ numainfo_ocaml = caml_alloc_tuple(3);
+
+ numainfo_field = caml_copy_int64(numainfo_c->size);
+ Store_field(numainfo_ocaml, 0, numainfo_field);
+
+ numainfo_field = caml_copy_int64(numainfo_c->free);
+ Store_field(numainfo_ocaml, 1, numainfo_field);
+
+ {
+ int i;
+ value array_elem;
+ numainfo_field = caml_alloc(numainfo_c->num_dists,0);
+ for(i=0; i<numainfo_c->num_dists; i++) {
+ array_elem = caml_copy_int32(numainfo_c->dists[i]);
+ Store_field(numainfo_field, i, array_elem);
+ }
+ }
+ Store_field(numainfo_ocaml, 2, numainfo_field);
+ }
+ CAMLreturn(numainfo_ocaml);
+}
+
/* Convert cputopology to a caml value */
static value Val_cputopology (caml_gc *gc, struct caml_logger *lg,
libxl_cputopology *cputopology_c)
{
--- tools/ocaml/libs/xl/_libxl_types.mli.in.baseline 2012-06-27
10:08:58.000000000 +0100
+++ tools/ocaml/libs/xl/_libxl_types.mli.in 2012-06-27 11:12:11.000000000 +0100
@@ -312,6 +312,15 @@ module Physinfo : sig
external get : unit -> t = "stub_xl_physinfo_get"
end
+module Numainfo : sig
+ type t + {
+ size : int64;
+ free : int64;
+ dists : int32 array;
+ }
+end
+
module Cputopology : sig
type t {
--- tools/ocaml/libs/xl/_libxl_types.ml.in.baseline 2012-06-27
10:08:58.000000000 +0100
+++ tools/ocaml/libs/xl/_libxl_types.ml.in 2012-06-27 11:12:11.000000000 +0100
@@ -312,6 +312,15 @@ module Physinfo = struct
external get : unit -> t = "stub_xl_physinfo_get"
end
+module Numainfo = struct
+ type t + {
+ size : int64;
+ free : int64;
+ dists : int32 array;
+ }
+end
+
module Cputopology = struct
type t {
--- tools/libxl/testidl.c.baseline 2012-06-27 10:08:58.000000000 +0100
+++ tools/libxl/testidl.c 2012-06-27 11:12:06.000000000 +0100
@@ -521,6 +521,20 @@ static void libxl_physinfo_rand_init(lib
p->cap_hvm_directio = rand() % 2;
}
+static void libxl_numainfo_rand_init(libxl_numainfo *p);
+static void libxl_numainfo_rand_init(libxl_numainfo *p)
+{
+ p->size = rand() % (sizeof(p->size)*8);
+ p->free = rand() % (sizeof(p->free)*8);
+ p->num_dists = rand()%8;
+ p->dists = calloc(p->num_dists, sizeof(*p->dists));
+ {
+ int i;
+ for (i=0; i<p->num_dists; i++)
+ p->dists[i] = rand() % (sizeof(p->dists[i])*8);
+ }
+}
+
static void libxl_cputopology_rand_init(libxl_cputopology *p);
static void libxl_cputopology_rand_init(libxl_cputopology *p)
{
@@ -610,6 +624,7 @@ int main(int argc, char **argv)
libxl_nicinfo libxl_nicinfo_val;
libxl_vcpuinfo libxl_vcpuinfo_val;
libxl_physinfo libxl_physinfo_val;
+ libxl_numainfo libxl_numainfo_val;
libxl_cputopology libxl_cputopology_val;
libxl_sched_credit_params libxl_sched_credit_params_val;
libxl_domain_remus_info libxl_domain_remus_info_val;
@@ -842,6 +857,13 @@ int main(int argc, char **argv)
free(s);
libxl_physinfo_dispose(&libxl_physinfo_val);
+ libxl_numainfo_rand_init(&libxl_numainfo_val);
+ s = libxl_numainfo_to_json(ctx, &libxl_numainfo_val);
+ printf("%s: %s\n", "libxl_numainfo", s);
+ if (s == NULL) abort();
+ free(s);
+ libxl_numainfo_dispose(&libxl_numainfo_val);
+
libxl_cputopology_rand_init(&libxl_cputopology_val);
s = libxl_cputopology_to_json(ctx, &libxl_cputopology_val);
printf("%s: %s\n", "libxl_cputopology", s);