|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v19 04/12] libxl/remus: introduce an abstract Remus device layer
Yang Hongyang writes ("[PATCH v19 04/12] libxl/remus: introduce an abstract
Remus device layer"):
> Introduce an abstract device layer that allows the Remus
> logic in libxl to control a guest's devices in a device-agnostic
> manner. The device layer also exposes a set of internal interfaces
> that a device type must implement, if it wishes to support Remus.
...
I went to double-check this and found that I hadn't looked at your
revised searching-for-an-appropriate-subkind code.
> diff --git a/tools/libxl/libxl_remus_device.c
> b/tools/libxl/libxl_remus_device.c
> new file mode 100644
> index 0000000..835d095
> --- /dev/null
> +++ b/tools/libxl/libxl_remus_device.c
...
> +static void remus_devices_setup(libxl__egc *egc,
> + libxl__remus_devices_state *rds)
> +{
> + int i, rc;
> + libxl__remus_device *dev;
> +
> + STATE_AO_GC(rds->ao);
> +
> + libxl__multidev_begin(ao, &rds->multidev);
> + rds->multidev.callback = devices_setup_cb;
...
> + libxl__multidev_prepare_with_aodev(&rds->multidev, &dev->aodev);
...
> +static void devices_setup_cb(libxl__egc *egc,
> + libxl__multidev *multidev,
> + int rc)
...
> + if (rc == ERROR_REMUS_DEVOPS_DOES_NOT_MATCH) {
> + remus_devices_setup(egc, rds);
This improperly reenters the multidev. See the doc comment for
multidev. You mustn't call libxl__multidev_begin until the whole
thing is done.
The cause of this is that the loop is still somewhat inside-out. You
need to call the aodev's callback only when you have found the right
device.
Perhaps I should try to rewrite this part.
> +struct libxl__remus_devices_state {
...
> + libxl__egc *egc;
I have just spotted this field. I think this is quite wrong.
As the comment in libxl_internal.h has it:
* The egc and its gc may be accessed only on the creating thread. */
And of course the event callbacks which your code receives may occur
on any thread.
> diff --git a/tools/libxl/libxl_types_internal.idl
> b/tools/libxl/libxl_types_internal.idl
> index 800361b..720232e 100644
> --- a/tools/libxl/libxl_types_internal.idl
> +++ b/tools/libxl/libxl_types_internal.idl
> @@ -22,6 +22,8 @@ libxl__device_kind = Enumeration("device_kind", [
> (6, "VKBD"),
> (7, "CONSOLE"),
> (8, "VTPM"),
> + (9, "REMUS_NIC"),
> + (10, "REMUS_DISK"),
I don't understand why these need new enum values. What's wrong with
VIF and VBD ?
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |