[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] Revert "tools: remove blktap2 related code and documentation"
commit d5e9965ee449d3dc123ad9fe0038893dd595e1a0 Author: Wei Liu <wei.liu2@xxxxxxxxxx> AuthorDate: Thu Sep 8 16:15:59 2016 +0100 Commit: Wei Liu <wei.liu2@xxxxxxxxxx> CommitDate: Thu Sep 8 16:15:59 2016 +0100 Revert "tools: remove blktap2 related code and documentation" This reverts commit 3f0ae679f2704ca5671eef5be59ec30982fbf08a. --- .gitignore | 14 ++++++ .hgignore | 12 +++++ INSTALL | 4 ++ MAINTAINERS | 2 + config/Tools.mk.in | 1 + docs/misc/xl-disk-configuration.txt | 2 +- tools/Makefile | 1 + tools/Rules.mk | 17 ++++++- tools/config.h.in | 6 +++ tools/configure | 83 ++++++++++++++++++++++++++++++++ tools/configure.ac | 22 +++++++++ tools/libxl/Makefile | 8 +++- tools/libxl/check-xl-disk-parse | 2 +- tools/libxl/libxl.c | 25 ++++++++-- tools/libxl/libxl_blktap2.c | 94 +++++++++++++++++++++++++++++++++++++ tools/libxl/libxl_device.c | 32 +++++++++++-- tools/libxl/libxl_dm.c | 17 +++++-- tools/libxl/libxl_internal.h | 19 ++++++++ tools/libxl/libxl_noblktap2.c | 42 +++++++++++++++++ tools/xenstore/hashtable.c | 5 ++ tools/xenstore/hashtable.h | 5 ++ tools/xenstore/hashtable_private.h | 5 ++ 22 files changed, 405 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 848318e..cc64fc9 100644 --- a/.gitignore +++ b/.gitignore @@ -98,6 +98,19 @@ tools/libs/evtchn/headers.chk tools/libs/gnttab/headers.chk tools/libs/call/headers.chk tools/libs/foreignmemory/headers.chk +tools/blktap2/daemon/blktapctrl +tools/blktap2/drivers/img2qcow +tools/blktap2/drivers/lock-util +tools/blktap2/drivers/qcow-create +tools/blktap2/drivers/qcow2raw +tools/blktap2/drivers/tapdisk +tools/blktap2/drivers/tapdisk-client +tools/blktap2/drivers/tapdisk-diff +tools/blktap2/drivers/tapdisk-stream +tools/blktap2/drivers/tapdisk2 +tools/blktap2/drivers/td-util +tools/blktap2/vhd/vhd-update +tools/blktap2/vhd/vhd-util tools/console/xenconsole tools/console/xenconsoled tools/console/client/_paths.h @@ -314,6 +327,7 @@ tools/libxl/*.pyc tools/libxl/libxl-save-helper tools/libxl/test_timedereg tools/libxl/test_fdderegrace +tools/blktap2/control/tap-ctl tools/firmware/etherboot/eb-roms.h tools/firmware/etherboot/gpxe-git-snapshot.tar.gz tools/misc/xenwatchdogd diff --git a/.hgignore b/.hgignore index 80568bd..8342f36 100644 --- a/.hgignore +++ b/.hgignore @@ -128,6 +128,18 @@ ^stubdom/stubdompath\.sh$ ^stubdom/vtpm/vtpm_manager\.h$ ^tools/.*/build/lib.*/.*\.py$ +^tools/blktap2/control/tap-ctl$ +^tools/blktap2/drivers/img2qcow$ +^tools/blktap2/drivers/lock-util$ +^tools/blktap2/drivers/qcow-create$ +^tools/blktap2/drivers/qcow2raw$ +^tools/blktap2/drivers/tapdisk-client$ +^tools/blktap2/drivers/tapdisk-diff$ +^tools/blktap2/drivers/tapdisk-stream$ +^tools/blktap2/drivers/tapdisk2$ +^tools/blktap2/drivers/td-util$ +^tools/blktap2/vhd/vhd-update$ +^tools/blktap2/vhd/vhd-util$ ^tools/check/\..*$ ^tools/console/xenconsole$ ^tools/console/xenconsoled$ diff --git a/INSTALL b/INSTALL index 3b255c7..9759354 100644 --- a/INSTALL +++ b/INSTALL @@ -144,6 +144,10 @@ this detection and the sysv runlevel scripts have to be used. --with-systemd=DIR --with-systemd-modules-load=DIR +The old backend drivers are disabled because qdisk is now the default. +This option can be used to build them anyway. + --enable-blktap2 + Build various stubom components, some are only example code. Its usually enough to specify just --enable-stubdom and leave these options alone. --enable-ioemu-stubdom diff --git a/MAINTAINERS b/MAINTAINERS index d54795b..97720a8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -322,6 +322,8 @@ M: Shriram Rajagopalan <rshriram@xxxxxxxxx> M: Yang Hongyang <imhy.yang@xxxxxxxxx> S: Maintained F: docs/README.remus +F: tools/blktap2/drivers/block-remus.c +F: tools/blktap2/drivers/hashtable* F: tools/libxl/libxl_remus_* F: tools/libxl/libxl_netbuffer.c F: tools/libxl/libxl_nonetbuffer.c diff --git a/config/Tools.mk.in b/config/Tools.mk.in index 511406c..0f79f4e 100644 --- a/config/Tools.mk.in +++ b/config/Tools.mk.in @@ -56,6 +56,7 @@ CONFIG_ROMBIOS := @rombios@ CONFIG_SEABIOS := @seabios@ CONFIG_QEMU_TRAD := @qemu_traditional@ CONFIG_QEMU_XEN := @qemu_xen@ +CONFIG_BLKTAP2 := @blktap2@ CONFIG_QEMUU_EXTRA_ARGS:= @EXTRA_QEMUU_CONFIGURE_ARGS@ CONFIG_LIBNL := @libnl@ diff --git a/docs/misc/xl-disk-configuration.txt b/docs/misc/xl-disk-configuration.txt index 2e9345c..b3402bc 100644 --- a/docs/misc/xl-disk-configuration.txt +++ b/docs/misc/xl-disk-configuration.txt @@ -155,7 +155,7 @@ backendtype=<backend-type> -------------------------- Description: Specifies the backend implementation to use -Supported values: phy, qdisk +Supported values: phy, tap, qdisk Mandatory: No Default value: Automatically determine which backend to use. diff --git a/tools/Makefile b/tools/Makefile index b8fe2ce..71515b4 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -17,6 +17,7 @@ SUBDIRS-y += console SUBDIRS-y += xenmon SUBDIRS-y += xenstat SUBDIRS-$(CONFIG_Linux) += memshr +SUBDIRS-$(CONFIG_BLKTAP2) += blktap2 SUBDIRS-$(CONFIG_NetBSD) += xenbackendd SUBDIRS-y += libfsimage SUBDIRS-$(CONFIG_Linux) += libvchan diff --git a/tools/Rules.mk b/tools/Rules.mk index bbeef14..5a80fec 100644 --- a/tools/Rules.mk +++ b/tools/Rules.mk @@ -19,6 +19,7 @@ XEN_LIBXC = $(XEN_ROOT)/tools/libxc XEN_XENLIGHT = $(XEN_ROOT)/tools/libxl XEN_XENSTORE = $(XEN_ROOT)/tools/xenstore XEN_LIBXENSTAT = $(XEN_ROOT)/tools/xenstat/libxenstat/src +XEN_BLKTAP2 = $(XEN_ROOT)/tools/blktap2 XEN_LIBVCHAN = $(XEN_ROOT)/tools/libvchan CFLAGS_xeninclude = -I$(XEN_INCLUDE) @@ -142,8 +143,22 @@ CFLAGS += -O0 -g3 PY_CFLAGS += $(PY_NOOPT_CFLAGS) endif +LIBXL_BLKTAP ?= $(CONFIG_BLKTAP2) + +ifeq ($(LIBXL_BLKTAP),y) +CFLAGS_libblktapctl = -I$(XEN_BLKTAP2)/control -I$(XEN_BLKTAP2)/include $(CFLAGS_xeninclude) +SHDEPS_libblktapctl = +LDLIBS_libblktapctl = $(SHDEPS_libblktapctl) $(XEN_BLKTAP2)/control/libblktapctl$(libextension) +SHLIB_libblktapctl = $(SHDEPS_libblktapctl) -Wl,-rpath-link=$(XEN_BLKTAP2)/control +else +CFLAGS_libblktapctl = +SHDEPS_libblktapctl = +LDLIBS_libblktapctl = +SHLIB_libblktapctl = +endif + CFLAGS_libxenlight = -I$(XEN_XENLIGHT) $(CFLAGS_libxenctrl) $(CFLAGS_xeninclude) -SHDEPS_libxenlight = $(SHLIB_libxenctrl) $(SHLIB_libxenstore) +SHDEPS_libxenlight = $(SHLIB_libxenctrl) $(SHLIB_libxenstore) $(SHLIB_libblktapctl) LDLIBS_libxenlight = $(SHDEPS_libxenlight) $(XEN_XENLIGHT)/libxenlight$(libextension) SHLIB_libxenlight = $(SHDEPS_libxenlight) -Wl,-rpath-link=$(XEN_XENLIGHT) diff --git a/tools/config.h.in b/tools/config.h.in index f86b40a..f65eec4 100644 --- a/tools/config.h.in +++ b/tools/config.h.in @@ -3,6 +3,9 @@ /* Enabling support partial device tree in libxl */ #undef ENABLE_PARTIAL_DEVICE_TREE +/* Blktap2 enabled */ +#undef HAVE_BLKTAP2 + /* Define to 1 if you have the declaration of `fdt_first_subnode', and to 0 if you don't. */ #undef HAVE_DECL_FDT_FIRST_SUBNODE @@ -24,6 +27,9 @@ /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H +/* Define to 1 if you have the `aio' library (-laio). */ +#undef HAVE_LIBAIO + /* Define to 1 if you have the `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO diff --git a/tools/configure b/tools/configure index 29c6d77..7b22305 100755 --- a/tools/configure +++ b/tools/configure @@ -703,6 +703,7 @@ BCC LD86 AS86 qemu_traditional +blktap2 LINUX_BACKEND_MODULES seabios ovmf @@ -801,6 +802,7 @@ enable_xsmpolicy enable_ovmf enable_seabios with_linux_backend_modules +enable_blktap2 enable_qemu_traditional enable_rombios with_system_qemu @@ -1473,6 +1475,8 @@ Optional Features: --disable-xsmpolicy Disable XSM policy compilation (default is ENABLED) --enable-ovmf Enable OVMF (default is DISABLED) --disable-seabios Disable SeaBIOS (default is ENABLED) + --enable-blktap2 Enable blktap2, (DEFAULT is on for Linux, otherwise + off) --enable-qemu-traditional Enable qemu traditional device model, (DEFAULT is on for Linux or NetBSD x86, otherwise off) @@ -4155,6 +4159,7 @@ xen-scsibk usbbk pciback xen-acpi-processor +blktap2 " ;; *) @@ -4166,6 +4171,33 @@ fi LINUX_BACKEND_MODULES="`eval echo $LINUX_BACKEND_MODULES`" +# Check whether --enable-blktap2 was given. +if test "${enable_blktap2+set}" = set; then : + enableval=$enable_blktap2; +else + + case "$host_os" in + linux*) + enable_blktap2="yes";; + *) enable_blktap2="no";; + esac + +fi + +if test "x$enable_blktap2" = "xyes"; then : + + +$as_echo "#define HAVE_BLKTAP2 1" >>confdefs.h + + blktap2=y +else + + blktap2=n + +fi + + + # Check whether --enable-qemu-traditional was given. if test "${enable_qemu_traditional+set}" = set; then : enableval=$enable_qemu_traditional; @@ -8276,6 +8308,57 @@ fi +if test "x$enable_blktap2" = "xyes"; then : + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for io_setup in -laio" >&5 +$as_echo_n "checking for io_setup in -laio... " >&6; } +if ${ac_cv_lib_aio_io_setup+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-laio $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char io_setup (); +int +main () +{ +return io_setup (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_aio_io_setup=yes +else + ac_cv_lib_aio_io_setup=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_aio_io_setup" >&5 +$as_echo "$ac_cv_lib_aio_io_setup" >&6; } +if test "x$ac_cv_lib_aio_io_setup" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBAIO 1 +_ACEOF + + LIBS="-laio $LIBS" + +else + as_fn_error $? "Could not find libaio" "$LINENO" 5 +fi + + +fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MD5 in -lcrypto" >&5 $as_echo_n "checking for MD5 in -lcrypto... " >&6; } diff --git a/tools/configure.ac b/tools/configure.ac index d00fa45..f010d72 100644 --- a/tools/configure.ac +++ b/tools/configure.ac @@ -108,6 +108,7 @@ xen-scsibk usbbk pciback xen-acpi-processor +blktap2 " ;; *) @@ -117,6 +118,24 @@ esac]) LINUX_BACKEND_MODULES="`eval echo $LINUX_BACKEND_MODULES`" AC_SUBST(LINUX_BACKEND_MODULES) +dnl Enable blktap2 on Linux only. +AC_ARG_ENABLE([blktap2], + AS_HELP_STRING([--enable-blktap2], + [Enable blktap2, (DEFAULT is on for Linux, otherwise off)]),,[ + case "$host_os" in + linux*) + enable_blktap2="yes";; + *) enable_blktap2="no";; + esac +]) +AS_IF([test "x$enable_blktap2" = "xyes"], [ +AC_DEFINE([HAVE_BLKTAP2], [1], [Blktap2 enabled]) + blktap2=y],[ + blktap2=n +]) +AC_SUBST(blktap2) + + AC_ARG_ENABLE([qemu-traditional], AS_HELP_STRING([--enable-qemu-traditional], [Enable qemu traditional device model, (DEFAULT is on for Linux or NetBSD x86, otherwise off)]),,[ @@ -350,6 +369,9 @@ AC_CHECK_HEADER([lzo/lzo1x.h], [ AC_CHECK_LIB([lzo2], [lzo1x_decompress], [zlib="$zlib -DHAVE_LZO1X -llzo2"]) ]) AC_SUBST(zlib) +AS_IF([test "x$enable_blktap2" = "xyes"], [ +AC_CHECK_LIB([aio], [io_setup], [], [AC_MSG_ERROR([Could not find libaio])]) +]) AC_SUBST(system_aio) AC_CHECK_LIB([crypto], [MD5], [], [AC_MSG_ERROR([Could not find libcrypto])]) AX_CHECK_EXTFS diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile index 6994c58..14a1a8e 100644 --- a/tools/libxl/Makefile +++ b/tools/libxl/Makefile @@ -20,7 +20,7 @@ LIBUUID_LIBS += -luuid endif LIBXL_LIBS = -LIBXL_LIBS = $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) $(PTYFUNCS_LIBS) $(LIBUUID_LIBS) +LIBXL_LIBS = $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) $(LDLIBS_libblktapctl) $(PTYFUNCS_LIBS) $(LIBUUID_LIBS) ifeq ($(CONFIG_LIBNL),y) LIBXL_LIBS += $(LIBNL3_LIBS) endif @@ -30,6 +30,7 @@ CFLAGS_LIBXL += $(CFLAGS_libxenevtchn) CFLAGS_LIBXL += $(CFLAGS_libxenctrl) CFLAGS_LIBXL += $(CFLAGS_libxenguest) CFLAGS_LIBXL += $(CFLAGS_libxenstore) +CFLAGS_LIBXL += $(CFLAGS_libblktapctl) ifeq ($(CONFIG_LIBNL),y) CFLAGS_LIBXL += $(LIBNL3_CFLAGS) endif @@ -45,6 +46,11 @@ LIBXL_LIBS += $(LIBXL_LIBS-y) LIBXLU_LIBS = $(LDLIBS_libxenlight) LIBXL_OBJS-y = osdeps.o libxl_paths.o libxl_bootloader.o flexarray.o +ifeq ($(LIBXL_BLKTAP),y) +LIBXL_OBJS-y += libxl_blktap2.o +else +LIBXL_OBJS-y += libxl_noblktap2.o +endif ifeq ($(CONFIG_LIBNL),y) LIBXL_OBJS-y += libxl_netbuffer.o diff --git a/tools/libxl/check-xl-disk-parse b/tools/libxl/check-xl-disk-parse index 643f4f4..03572e4 100755 --- a/tools/libxl/check-xl-disk-parse +++ b/tools/libxl/check-xl-disk-parse @@ -3,7 +3,7 @@ set -e if [ -x ./xl ] ; then - export LD_LIBRARY_PATH=.:../libxc:../xenstore + export LD_LIBRARY_PATH=.:../libxc:../xenstore:../blktap2/control XL=./xl else XL=xl diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 577ed35..6a50e49 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2218,6 +2218,7 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, case LIBXL_DISK_BACKEND_PHY: dev = disk->pdev_path; + do_backend_phy: flexarray_append(back, "params"); flexarray_append(back, dev); @@ -2229,9 +2230,27 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, break; case LIBXL_DISK_BACKEND_TAP: - LOG(ERROR, "blktap is not supported"); - rc = ERROR_FAIL; - goto out; + if (dev == NULL) { + dev = libxl__blktap_devpath(gc, disk->pdev_path, + disk->format); + if (!dev) { + LOG(ERROR, "failed to get blktap devpath for %p", + disk->pdev_path); + rc = ERROR_FAIL; + goto out; + } + } + flexarray_append(back, "tapdisk-params"); + flexarray_append(back, GCSPRINTF("%s:%s", + libxl__device_disk_string_of_format(disk->format), + disk->pdev_path)); + + /* tap backends with scripts are rejected by + * libxl__device_disk_set_backend */ + assert(!disk->script); + + /* now create a phy device to export the device to the guest */ + goto do_backend_phy; case LIBXL_DISK_BACKEND_QDISK: flexarray_append(back, "params"); flexarray_append(back, GCSPRINTF("%s:%s", diff --git a/tools/libxl/libxl_blktap2.c b/tools/libxl/libxl_blktap2.c new file mode 100644 index 0000000..5c9a0a2 --- /dev/null +++ b/tools/libxl/libxl_blktap2.c @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2010 Advanced Micro Devices + * Author Christoph Egger <Christoph.Egger@xxxxxxx> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; version 2.1 only. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + */ + +#include "libxl_osdeps.h" /* must come before any other headers */ +#include "libxl_internal.h" + +#include "tap-ctl.h" + +int libxl__blktap_enabled(libxl__gc *gc) +{ + const char *msg; + return !tap_ctl_check(&msg); +} + +char *libxl__blktap_devpath(libxl__gc *gc, + const char *disk, + libxl_disk_format format) +{ + const char *type; + char *params, *devname = NULL; + tap_list_t tap; + int err; + + type = libxl__device_disk_string_of_format(format); + err = tap_ctl_find(type, disk, &tap); + if (err == 0) { + devname = GCSPRINTF("/dev/xen/blktap-2/tapdev%d", tap.minor); + if (devname) + return devname; + } + + params = GCSPRINTF("%s:%s", type, disk); + err = tap_ctl_create(params, &devname); + if (!err) { + libxl__ptr_add(gc, devname); + return devname; + } + + free(devname); + return NULL; +} + + +int libxl__device_destroy_tapdisk(libxl__gc *gc, const char *params) +{ + char *type, *disk; + int err; + tap_list_t tap; + + type = libxl__strdup(gc, params); + + disk = strchr(type, ':'); + if (!disk) { + LOG(ERROR, "Unable to parse params %s", params); + return ERROR_INVAL; + } + + *disk++ = '\0'; + + err = tap_ctl_find(type, disk, &tap); + if (err < 0) { + /* returns -errno */ + LOGEV(ERROR, -err, "Unable to find type %s disk %s", type, disk); + return ERROR_FAIL; + } + + err = tap_ctl_destroy(tap.id, tap.minor); + if (err < 0) { + LOGEV(ERROR, -err, "Failed to destroy tap device id %d minor %d", + tap.id, tap.minor); + return ERROR_FAIL; + } + + return 0; +} + +/* + * Local variables: + * mode: C + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c index 9c77b62..dbf157d 100644 --- a/tools/libxl/libxl_device.c +++ b/tools/libxl/libxl_device.c @@ -271,9 +271,26 @@ static int disk_try_backend(disk_try_backend_args *a, return 0; case LIBXL_DISK_BACKEND_TAP: - LOG(DEBUG, "Disk vdev=%s, backend tap unsuitable because blktap " - "not supported", a->disk->vdev); - return 0; + if (a->disk->script) goto bad_script; + + if (libxl_defbool_val(a->disk->colo_enable)) + goto bad_colo; + + if (a->disk->is_cdrom) { + LOG(DEBUG, "Disk vdev=%s, backend tap unsuitable for cdroms", + a->disk->vdev); + return 0; + } + if (!libxl__blktap_enabled(a->gc)) { + LOG(DEBUG, "Disk vdev=%s, backend tap unsuitable because blktap " + "not available", a->disk->vdev); + return 0; + } + if (!(a->disk->format == LIBXL_DISK_FORMAT_RAW || + a->disk->format == LIBXL_DISK_FORMAT_VHD)) { + goto bad_format; + } + return backend; case LIBXL_DISK_BACKEND_QDISK: if (a->disk->script) goto bad_script; @@ -665,6 +682,8 @@ int libxl__device_destroy(libxl__gc *gc, libxl__device *dev) const char *be_path = libxl__device_backend_path(gc, dev); const char *fe_path = libxl__device_frontend_path(gc, dev); const char *libxl_path = libxl__device_libxl_path(gc, dev); + const char *tapdisk_path = GCSPRINTF("%s/%s", be_path, "tapdisk-params"); + const char *tapdisk_params; xs_transaction_t t = 0; int rc; uint32_t domid; @@ -676,6 +695,10 @@ int libxl__device_destroy(libxl__gc *gc, libxl__device *dev) rc = libxl__xs_transaction_start(gc, &t); if (rc) goto out; + /* May not exist if this is not a tap device */ + rc = libxl__xs_read_checked(gc, t, tapdisk_path, &tapdisk_params); + if (rc) goto out; + if (domid == LIBXL_TOOLSTACK_DOMID) { /* * The toolstack domain is in charge of removing the @@ -697,6 +720,9 @@ int libxl__device_destroy(libxl__gc *gc, libxl__device *dev) if (rc < 0) goto out; } + if (tapdisk_params) + rc = libxl__device_destroy_tapdisk(gc, tapdisk_params); + out: libxl__xs_transaction_abort(gc, &t); return rc; diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index 1da956e..e3bf28f 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -1362,9 +1362,20 @@ static int libxl__build_device_model_args_new(libxl__gc *gc, continue; } - assert(disks[i].backend != LIBXL_DISK_BACKEND_TAP); - target_path = libxl__device_disk_find_local_path(gc, - guest_domid, &disks[i], true); + /* + * We can't call libxl__blktap_devpath from + * libxl__device_disk_find_local_path for now because + * the bootloader is called before the disks are set + * up, so this function would set up a blktap node, + * but there's no TAP tear-down on error conditions in + * the bootloader path. + */ + if (disks[i].backend == LIBXL_DISK_BACKEND_TAP) + target_path = libxl__blktap_devpath(gc, disks[i].pdev_path, + disks[i].format); + else + target_path = libxl__device_disk_find_local_path(gc, + guest_domid, &disks[i], true); if (!target_path) { LOG(WARN, "No way to get local access disk to image: %s\n" diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index f9ac09a..ce8e17a 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1705,6 +1705,25 @@ struct libxl__cpuid_policy { char *policy[4]; }; +/* + * blktap2 support + */ + +/* libxl__blktap_enabled: + * return true if blktap/blktap2 support is available. + */ +_hidden int libxl__blktap_enabled(libxl__gc *gc); + +/* libxl__blktap_devpath: + * Argument: path and disk image as specified in config file. + * The type specifies whether this is aio, qcow, qcow2, etc. + * returns device path xenstore wants to have. returns NULL + * if no device corresponds to the disk. + */ +_hidden char *libxl__blktap_devpath(libxl__gc *gc, + const char *disk, + libxl_disk_format format); + /* libxl__device_destroy_tapdisk: * Destroys any tapdisk process associated with the backend represented * by be_path. diff --git a/tools/libxl/libxl_noblktap2.c b/tools/libxl/libxl_noblktap2.c new file mode 100644 index 0000000..5a86ed1 --- /dev/null +++ b/tools/libxl/libxl_noblktap2.c @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2010 Advanced Micro Devices + * Author Christoph Egger <Christoph.Egger@xxxxxxx> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; version 2.1 only. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + */ + +#include "libxl_osdeps.h" /* must come before any other headers */ + +#include "libxl_internal.h" + +int libxl__blktap_enabled(libxl__gc *gc) +{ + return 0; +} + +char *libxl__blktap_devpath(libxl__gc *gc, + const char *disk, + libxl_disk_format format) +{ + return NULL; +} + +int libxl__device_destroy_tapdisk(libxl__gc *gc, const char *params) +{ + return 0; +} + +/* + * Local variables: + * mode: C + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/tools/xenstore/hashtable.c b/tools/xenstore/hashtable.c index 394b1cf..0ba1d55 100644 --- a/tools/xenstore/hashtable.c +++ b/tools/xenstore/hashtable.c @@ -1,5 +1,10 @@ /* Copyright (C) 2004 Christopher Clark <firstname.lastname@xxxxxxxxxxxx> */ +/* + * There are duplicates of this code in: + * - tools/blktap2/drivers/hashtable.c + */ + #include "hashtable.h" #include "hashtable_private.h" #include <stdlib.h> diff --git a/tools/xenstore/hashtable.h b/tools/xenstore/hashtable.h index b90781a..4d68223 100644 --- a/tools/xenstore/hashtable.h +++ b/tools/xenstore/hashtable.h @@ -1,5 +1,10 @@ /* Copyright (C) 2002 Christopher Clark <firstname.lastname@xxxxxxxxxxxx> */ +/* + * There are duplicates of this code in: + * - tools/blktap2/drivers/hashtable.h + */ + #ifndef __HASHTABLE_CWC22_H__ #define __HASHTABLE_CWC22_H__ diff --git a/tools/xenstore/hashtable_private.h b/tools/xenstore/hashtable_private.h index 3e95f60..a08559d 100644 --- a/tools/xenstore/hashtable_private.h +++ b/tools/xenstore/hashtable_private.h @@ -1,5 +1,10 @@ /* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@xxxxxxxxxxxx> */ +/* + * There are duplicates of this code in: + * - tools/blktap2/drivers/hashtable_private.h + */ + #ifndef __HASHTABLE_PRIVATE_CWC22_H__ #define __HASHTABLE_PRIVATE_CWC22_H__ -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |