mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
Revert "tools: remove blktap2 related code and documentation"
This reverts commit 3f0ae679f2.
This commit is contained in:
1 parent
d383c07e8b
commit
d5e9965ee4
22 files changed
+405
-13
No files matched your search
+14
@@ -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
|
||||
|
||||
@@ -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$
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -322,6 +322,8 @@ M: Shriram Rajagopalan <rshriram@cs.ubc.ca>
|
||||
M: Yang Hongyang <imhy.yang@gmail.com>
|
||||
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
|
||||
|
||||
@@ -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@
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
+16
-1
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Vendored
+83
@@ -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; }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+22
-3
@@ -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",
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Advanced Micro Devices
|
||||
* Author Christoph Egger <Christoph.Egger@amd.com>
|
||||
*
|
||||
* 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:
|
||||
*/
|
||||
@@ -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;
|
||||
|
||||
+14
-3
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Advanced Micro Devices
|
||||
* Author Christoph Egger <Christoph.Egger@amd.com>
|
||||
*
|
||||
* 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:
|
||||
*/
|
||||
@@ -1,5 +1,10 @@
|
||||
/* Copyright (C) 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
|
||||
|
||||
/*
|
||||
* There are duplicates of this code in:
|
||||
* - tools/blktap2/drivers/hashtable.c
|
||||
*/
|
||||
|
||||
#include "hashtable.h"
|
||||
#include "hashtable_private.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
/* Copyright (C) 2002 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
|
||||
|
||||
/*
|
||||
* There are duplicates of this code in:
|
||||
* - tools/blktap2/drivers/hashtable.h
|
||||
*/
|
||||
|
||||
#ifndef __HASHTABLE_CWC22_H__
|
||||
#define __HASHTABLE_CWC22_H__
|
||||
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
/* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
|
||||
|
||||
/*
|
||||
* There are duplicates of this code in:
|
||||
* - tools/blktap2/drivers/hashtable_private.h
|
||||
*/
|
||||
|
||||
#ifndef __HASHTABLE_PRIVATE_CWC22_H__
|
||||
#define __HASHTABLE_PRIVATE_CWC22_H__
|
||||
|
||||
|
||||