|
[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 |