[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.2-testing] libxl: make devid a type so it is initialized properly
# HG changeset patch # User Matthew Fioravante <matthew.fioravante@xxxxxxxxxx> # Date 1351266177 -3600 # Node ID 87900aea9c6b5528e898ed67f621531451fb1740 # Parent 325a4fdb7f3588b05b35475766e588bfa08c12ff libxl: make devid a type so it is initialized properly Previously device ids in libxl were treated as integers meaning they were being initialized to 0, which is a valid device id. This patch makes devid its own type in libxl and initializes it to -1, an invalid value. This fixes a bug where if you try to do a xl DEV-attach multiple time it will continuously try to reattach device 0 instead of generating a new device id. Signed-off-by: Matthew Fioravante <matthew.fioravante@xxxxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx> xen-unstable changeset: 25988:8a073eb1e849 Backport-requested-by: Ian Campbell <Ian.Campbell@xxxxxxxxxx> Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- diff -r 325a4fdb7f35 -r 87900aea9c6b tools/libxl/gentest.py --- a/tools/libxl/gentest.py Fri Oct 26 16:42:23 2012 +0100 +++ b/tools/libxl/gentest.py Fri Oct 26 16:42:57 2012 +0100 @@ -60,7 +60,7 @@ def gen_rand_init(ty, v, indent = " " passby=idl.PASS_BY_REFERENCE)) elif ty.typename in ["libxl_uuid", "libxl_mac", "libxl_hwcap"]: s += "rand_bytes((uint8_t *)%s, sizeof(*%s));\n" % (v,v) - elif ty.typename in ["libxl_domid"] or isinstance(ty, idl.Number): + elif ty.typename in ["libxl_domid", "libxl_devid"] or isinstance(ty, idl.Number): s += "%s = rand() %% (sizeof(%s)*8);\n" % \ (ty.pass_arg(v, parent is None), ty.pass_arg(v, parent is None)) diff -r 325a4fdb7f35 -r 87900aea9c6b tools/libxl/libxl.h --- a/tools/libxl/libxl.h Fri Oct 26 16:42:23 2012 +0100 +++ b/tools/libxl/libxl.h Fri Oct 26 16:42:57 2012 +0100 @@ -307,6 +307,7 @@ void libxl_cpuid_dispose(libxl_cpuid_pol #define LIBXL_PCI_FUNC_ALL (~0U) typedef uint32_t libxl_domid; +typedef int libxl_devid; /* * Formatting Enumerations. diff -r 325a4fdb7f35 -r 87900aea9c6b tools/libxl/libxl_types.idl --- a/tools/libxl/libxl_types.idl Fri Oct 26 16:42:23 2012 +0100 +++ b/tools/libxl/libxl_types.idl Fri Oct 26 16:42:57 2012 +0100 @@ -8,6 +8,7 @@ namespace("libxl_") libxl_defbool = Builtin("defbool", passby=PASS_BY_REFERENCE) libxl_domid = Builtin("domid", json_fn = "yajl_gen_integer", autogenerate_json = False) +libxl_devid = Builtin("devid", json_fn = "yajl_gen_integer", autogenerate_json = False, signed = True, init_val="-1") libxl_uuid = Builtin("uuid", passby=PASS_BY_REFERENCE) libxl_mac = Builtin("mac", passby=PASS_BY_REFERENCE) libxl_bitmap = Builtin("bitmap", dispose_fn="libxl_bitmap_dispose", passby=PASS_BY_REFERENCE) @@ -337,7 +338,7 @@ libxl_domain_build_info = Struct("domain libxl_device_vfb = Struct("device_vfb", [ ("backend_domid", libxl_domid), - ("devid", integer), + ("devid", libxl_devid), ("vnc", libxl_vnc_info), ("sdl", libxl_sdl_info), # set keyboard layout, default is en-us keyboard @@ -346,7 +347,7 @@ libxl_device_vfb = Struct("device_vfb", libxl_device_vkb = Struct("device_vkb", [ ("backend_domid", libxl_domid), - ("devid", integer), + ("devid", libxl_devid), ]) libxl_device_disk = Struct("device_disk", [ @@ -363,7 +364,7 @@ libxl_device_disk = Struct("device_disk" libxl_device_nic = Struct("device_nic", [ ("backend_domid", libxl_domid), - ("devid", integer), + ("devid", libxl_devid), ("mtu", integer), ("model", string), ("mac", libxl_mac), @@ -393,7 +394,7 @@ libxl_diskinfo = Struct("diskinfo", [ ("backend_id", uint32), ("frontend", string), ("frontend_id", uint32), - ("devid", integer), + ("devid", libxl_devid), ("state", integer), ("evtch", integer), ("rref", integer), @@ -404,7 +405,7 @@ libxl_nicinfo = Struct("nicinfo", [ ("backend_id", uint32), ("frontend", string), ("frontend_id", uint32), - ("devid", integer), + ("devid", libxl_devid), ("state", integer), ("evtch", integer), ("rref_tx", integer), diff -r 325a4fdb7f35 -r 87900aea9c6b tools/ocaml/libs/xl/genwrap.py --- a/tools/ocaml/libs/xl/genwrap.py Fri Oct 26 16:42:23 2012 +0100 +++ b/tools/ocaml/libs/xl/genwrap.py Fri Oct 26 16:42:57 2012 +0100 @@ -10,6 +10,7 @@ builtins = { "int": ("int", "%(c)s = Int_val(%(o)s)", "Val_int(%(c)s)" ), "char *": ("string", "%(c)s = dup_String_val(gc, %(o)s)", "caml_copy_string(%(c)s)"), "libxl_domid": ("domid", "%(c)s = Int_val(%(o)s)", "Val_int(%(c)s)" ), + "libxl_devid": ("devid", "%(c)s = Int_val(%(o)s)", "Val_int(%(c)s)" ), "libxl_defbool": ("bool option", "%(c)s = Defbool_val(%(o)s)", "Val_defbool(%(c)s)" ), "libxl_uuid": ("int array", "Uuid_val(gc, lg, &%(c)s, %(o)s)", "Val_uuid(&%(c)s)"), "libxl_key_value_list": ("(string * string) list", None, None), @@ -41,8 +42,8 @@ def stub_fn_name(ty, name): return "stub_xl_%s_%s" % (ty.rawname,name) def ocaml_type_of(ty): - if ty.rawname == "domid": - return "domid" + if ty.rawname in ["domid","devid"]: + return ty.rawname elif isinstance(ty,idl.UInt): if ty.width in [8, 16]: # handle as ints diff -r 325a4fdb7f35 -r 87900aea9c6b tools/ocaml/libs/xl/xenlight.ml.in --- a/tools/ocaml/libs/xl/xenlight.ml.in Fri Oct 26 16:42:23 2012 +0100 +++ b/tools/ocaml/libs/xl/xenlight.ml.in Fri Oct 26 16:42:57 2012 +0100 @@ -16,6 +16,7 @@ exception Error of string type domid = int +type devid = int (* @@LIBXL_TYPES@@ *) diff -r 325a4fdb7f35 -r 87900aea9c6b tools/ocaml/libs/xl/xenlight.mli.in --- a/tools/ocaml/libs/xl/xenlight.mli.in Fri Oct 26 16:42:23 2012 +0100 +++ b/tools/ocaml/libs/xl/xenlight.mli.in Fri Oct 26 16:42:57 2012 +0100 @@ -16,6 +16,7 @@ exception Error of string type domid = int +type devid = int (* @@LIBXL_TYPES@@ *) diff -r 325a4fdb7f35 -r 87900aea9c6b tools/python/xen/lowlevel/xl/xl.c --- a/tools/python/xen/lowlevel/xl/xl.c Fri Oct 26 16:42:23 2012 +0100 +++ b/tools/python/xen/lowlevel/xl/xl.c Fri Oct 26 16:42:57 2012 +0100 @@ -281,6 +281,11 @@ int attrib__libxl_domid_set(PyObject *v, return 0; } +int attrib__libxl_devid_set(PyObject *v, libxl_devid *devid) { + *devid = PyInt_AsLong(v); + return 0; +} + int attrib__struct_in_addr_set(PyObject *v, struct in_addr *pptr) { PyErr_SetString(PyExc_NotImplementedError, "Setting in_addr"); @@ -342,6 +347,10 @@ PyObject *attrib__libxl_domid_get(libxl_ return PyInt_FromLong(*domid); } +PyObject *attrib__libxl_devid_get(libxl_devid *devid) { + return PyInt_FromLong(*devid); +} + PyObject *attrib__struct_in_addr_get(struct in_addr *pptr) { PyErr_SetString(PyExc_NotImplementedError, "Getting in_addr"); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |