[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 10/11] make devid a type so it is initialized properly
On Thu, Sep 27, 2012 at 6:10 PM, Matthew Fioravante <matthew.fioravante@xxxxxxxxxx> wrote: > 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> Should this be backported to 4.2-testing? -George > > diff --git a/tools/libxl/gentest.py b/tools/libxl/gentest.py > index 2915f71..84b4fd7 100644 > --- a/tools/libxl/gentest.py > +++ b/tools/libxl/gentest.py > @@ -60,7 +60,7 @@ def gen_rand_init(ty, v, indent = " ", parent = None): > 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 --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h > index 599c7f1..7a7c419 100644 > --- a/tools/libxl/libxl.h > +++ b/tools/libxl/libxl.h > @@ -307,6 +307,7 @@ void libxl_cpuid_dispose(libxl_cpuid_policy_list > *cpuid_list); > #define LIBXL_PCI_FUNC_ALL (~0U) > > typedef uint32_t libxl_domid; > +typedef int libxl_devid; > > /* > * Formatting Enumerations. > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index cf83c60..de111a6 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -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) > @@ -343,7 +344,7 @@ libxl_domain_build_info = Struct("domain_build_info",[ > > 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 > @@ -352,7 +353,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", [ > @@ -369,7 +370,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), > @@ -399,7 +400,7 @@ libxl_diskinfo = Struct("diskinfo", [ > ("backend_id", uint32), > ("frontend", string), > ("frontend_id", uint32), > - ("devid", integer), > + ("devid", libxl_devid), > ("state", integer), > ("evtch", integer), > ("rref", integer), > @@ -410,7 +411,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 --git a/tools/ocaml/libs/xl/genwrap.py b/tools/ocaml/libs/xl/genwrap.py > index 42f374e..97d088d 100644 > --- a/tools/ocaml/libs/xl/genwrap.py > +++ b/tools/ocaml/libs/xl/genwrap.py > @@ -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 --git a/tools/ocaml/libs/xl/xenlight.ml.in > b/tools/ocaml/libs/xl/xenlight.ml.in > index c47623c..dcc1a38 100644 > --- a/tools/ocaml/libs/xl/xenlight.ml.in > +++ b/tools/ocaml/libs/xl/xenlight.ml.in > @@ -16,6 +16,7 @@ > exception Error of string > > type domid = int > +type devid = int > > (* @@LIBXL_TYPES@@ *) > > diff --git a/tools/ocaml/libs/xl/xenlight.mli.in > b/tools/ocaml/libs/xl/xenlight.mli.in > index 4717bac..3fd0165 100644 > --- a/tools/ocaml/libs/xl/xenlight.mli.in > +++ b/tools/ocaml/libs/xl/xenlight.mli.in > @@ -16,6 +16,7 @@ > exception Error of string > > type domid = int > +type devid = int > > (* @@LIBXL_TYPES@@ *) > > diff --git a/tools/python/xen/lowlevel/xl/xl.c > b/tools/python/xen/lowlevel/xl/xl.c > index 0551c76..32f982a 100644 > --- a/tools/python/xen/lowlevel/xl/xl.c > +++ b/tools/python/xen/lowlevel/xl/xl.c > @@ -281,6 +281,11 @@ int attrib__libxl_domid_set(PyObject *v, libxl_domid > *domid) { > 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_domid *domid) { > 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"); > -- > 1.7.9.5 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |