|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 6 of 9 v2] libxl: execute hotplug scripts directly from libxl
On Fri, 2011-11-18 at 11:59 +0000, Roger Pau Monne wrote:
> # HG changeset patch
> # User Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
> # Date 1317386335 -7200
> # Node ID 1d81d1c4c851c0b07696373304801df56a221e90
> # Parent 4ad998fddb16a299cb230ea23ba944d84adbd2bf
> libxl: execute hotplug scripts directly from libxl.
>
> Added the necessary handlers to execute hotplug scripts when necessary
> from libxl. Split NetBSD and Linux hotplug calls into two separate
> files, because parameters for hotplug scripts are different. Linux
> has empty functions, since the calling of hotplug scripts is still
> done using udev.
>
> Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
>
> diff -r 4ad998fddb16 -r 1d81d1c4c851 tools/libxl/Makefile
> --- a/tools/libxl/Makefile Fri Nov 18 11:29:14 2011 +0100
> +++ b/tools/libxl/Makefile Fri Sep 30 14:38:55 2011 +0200
> @@ -34,8 +34,10 @@ LIBXL_OBJS-$(CONFIG_IA64) += libxl_nocpu
Should be:
> ifeq ($(CONFIG_NetBSD),y)
> LIBXL_OBJS-y += libxl_phybackend.o
> +LIBXL_OBJS-y += hotplug_netbsd.o
elsif ($(CONFIG_Linux),y)
> LIBXL_OBJS-y += libxl_nophybackend.o
> +LIBXL_OBJS-y += hotplug_linux.o
else
$(error A message of some sort)
> endif
> diff -r 4ad998fddb16 -r 1d81d1c4c851 tools/libxl/libxl_device.c
> --- a/tools/libxl/libxl_device.c Fri Nov 18 11:29:14 2011 +0100
> +++ b/tools/libxl/libxl_device.c Fri Sep 30 14:38:55 2011 +0200
> @@ -68,6 +68,24 @@ int libxl__parse_backend_path(libxl__gc
> return libxl__device_kind_from_string(strkind, &dev->backend_kind);
> }
>
> +int libxl__device_execute_hotplug(libxl__gc *gc, libxl__device *dev)
No need for a add/remove type parameter?
> +{
> + int rc = 0;
> +
> + switch(dev->kind) {
> + case LIBXL__DEVICE_KIND_VIF:
> + rc = libxl__nic_hotplug(gc, dev);
> + break;
> + case LIBXL__DEVICE_KIND_VBD:
> + rc = libxl__disk_hotplug(gc, dev);
> + break;
> + default:
> + break;
> + }
> +
> + return rc;
> +}
> +
> int libxl__device_generic_add(libxl__gc *gc, libxl__device *device,
> char **bents, char **fents)
> {
> @@ -449,6 +467,7 @@ int libxl__device_remove(libxl__gc *gc,
> if (!state)
> goto out;
> if (atoi(state) != 4) {
> + libxl__device_execute_hotplug(gc, dev);
> libxl__device_destroy_tapdisk(gc, be_path);
> xs_rm(ctx->xsh, XBT_NULL, be_path);
> goto out;
> @@ -492,6 +511,12 @@ int libxl__device_destroy(libxl__gc *gc,
> char *be_path = libxl__device_backend_path(gc, dev);
> char *fe_path = libxl__device_frontend_path(gc, dev);
>
> + /*
> + * Run hotplug scripts, which will probably not be able to
> + * execute successfully since the device may still be plugged
What does this mean? If we don't expect it to work why are we calling
them?
> + */
> + libxl__device_execute_hotplug(gc, dev);
> +
> xs_rm(ctx->xsh, XBT_NULL, be_path);
> xs_rm(ctx->xsh, XBT_NULL, fe_path);
>
> diff -r 4ad998fddb16 -r 1d81d1c4c851 tools/libxl/libxl_internal.h
> --- a/tools/libxl/libxl_internal.h Fri Nov 18 11:29:14 2011 +0100
> +++ b/tools/libxl/libxl_internal.h Fri Sep 30 14:38:55 2011 +0200
> @@ -287,6 +287,34 @@ _hidden int libxl__wait_for_device_state
> */
> _hidden int libxl__try_phy_backend(mode_t st_mode);
>
> +/* hotplug functions */
> +/*
> + * libxl__device_execute_hotplug - generic function to execute hotplug
> scripts
> + * gc: allocation pool
> + * dev: reference to the device that executes the hotplug scripts
> + *
> + * Returns 0 on success, and < 0 on error.
> + */
> +_hidden int libxl__device_execute_hotplug(libxl__gc *gc, libxl__device *dev);
> +
> +/*
> + * libxl__disk_hotplug - execute hotplug script for a disk type device
> + * gc: allocation pool
> + * dev: reference to the disk device
> + *
> + * Returns 0 on success, and < 0 on error.
> + */
> +_hidden int libxl__disk_hotplug(libxl__gc *gc, libxl__device *dev);
> +
> +/*
> + * libxl__nic_hotplug - execute hotplug script for a nic type device
> + * gc: allocation pool
> + * dev: reference to the nic device
> + *
> + * Returns 0 on success, and < 0 on error.
> + */
> +_hidden int libxl__nic_hotplug(libxl__gc *gc, libxl__device *dev);
> +
> /* from libxl_pci */
>
> _hidden int libxl__device_pci_add(libxl__gc *gc, uint32_t domid,
> libxl_device_pci *pcidev, int starting);
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |