|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH xm/xl enhancements for vptm 5/6] make devid a libxl type
On Tue, 2012-09-25 at 17:00 +0100, Matthew Fioravante wrote:
> On 09/25/2012 06:36 AM, Ian Campbell wrote:
> > On Fri, 2012-09-21 at 20:20 +0100, Matthew Fioravante wrote:
> >> This fixes a bug in libxl where device ids are not initialized properly.
> >> The devid field for each device is set to be an integer type which are
> >> always initialized to 0.
> >>
> >> This makes the xl DEV-attach commands always fail to add more than one
> >> device, because each time the device id is initialized to 0, when it
> >> should be initialized to -1, which in the code will trigger a search for
> >> free id.
> > Which of the DEV-attach commands can be used to add more than one
> > device?
> network-attach, block-attach, and also my vtpm-attach.
Oh, you mean by being called repeatedly, not adding multiple devices in
one go!
> > Where is the code to do the search? I had a look in the disk and network
> > cases and couldn't find it.
> libxl.c
>
> void libxl__device_nic_add(
>
> if (nic->devid == -1) {
> if (!(dompath = libxl__xs_get_dompath(gc, domid))) {
> rc = ERROR_FAIL;
> goto out_free;
> }
> if (!(l = libxl__xs_directory(gc, XBT_NULL,
> libxl__sprintf(gc, "%s/device/vif",
> dompath), &nb))) {
> nic->devid = 0;
> } else {
> nic->devid = strtoul(l[nb - 1], NULL, 10) + 1;
> }
> }
Not sure how I missed this.
> Right now, nic-devid is 0 on attach.
Is devid not a parameter to network-attach? It is to block-attach.
> So it always tries to use 0. When you do a network-attach twice,
> the second time it trys and fails to create device/vif/0
Your change to use -1 as thye default is certainly correct. I'm just
trying to figure out why xl does things this way in the first place.
>
> >
> >> diff --git a/tools/ocaml/libs/xs/xs.mli b/tools/ocaml/libs/xs/xs.mli
> >> --- a/tools/ocaml/libs/xs/xs.mli
> >> +++ b/tools/ocaml/libs/xs/xs.mli
> >> @@ -27,6 +27,7 @@ exception Failed_to_connect
> >> type perms = Xsraw.perms
> >>
> >> type domid = int
> >> +type devid = int
> > I can see why these were needed in the xl modules, but I don't see how
> > this type can be required in the xenstore ones.
> It shouldn't be required for xenstore or xc. The problem is they won't
> compile without it because of the way the ocaml build system works. As
> far as I understand it creates types for xl, xc, and xs from the
> libxl_types.idl.
No, only xl does this.
The others are the libxc and xenstore bindings which are completely hand
coded and there is no concept of a devid at those layers anyway. What
error do you get if you omit the changes to those module?
> Either the build system needs to be changed, or devid
> needs to be a type in all libraries, or we find some other way to fix
> this initialization bug.
> >
> > Ian.
> >
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |