Require QEMU >= 1.0.

QEMU 1.0 was released at the end of 2011.

Remove all the cruft about detecting broken -machine type which
was only required for QEMU 0.15.

This also reverts commit 30ecbf3ec2.
Even on ARM you can pass -machine accel=kvm:tcg and qemu does the
right thing, so I'm not sure why we wanted to disable that.
This commit is contained in:
Richard W.M. Jones
2012-06-12 15:31:35 +01:00
parent 7652b5aece
commit 295d6af48d
3 changed files with 26 additions and 69 deletions

2
README
View File

@@ -46,7 +46,7 @@ For basic functionality and the C tools:
- look at appliance/packagelist.in and install as many of the packages
that apply to your distro as possible
- recent QEMU >= 0.13 (0.14 or later is better) with virtio-serial support
- QEMU >= 1.0.
- kernel >= 2.6.34 with virtio-serial support enabled.

View File

@@ -568,55 +568,29 @@ working.
])
fi
AS_IF([test "x$QEMU_OPTIONS" = "x"],[
dnl qemu 0.15 was released with broken support for '-machine',
dnl requiring you to add the machine type: '-machine pc,[...]'.
dnl The problem is that 'pc' is only applicable for PC-like
dnl hardware, so we cannot do this as a general solution. Since
dnl qemu 0.15, this problem has been fixed so now the default
dnl machine type is chosen (qemu commit 2645c6dcaf6ea2a51a).
dnl
dnl We need to work out if this qemu is the broken version, so we
dnl can add 'pc' just for this broken version.
dnl
dnl Note that old qemu didn't support the '-machine' option at all.
dnl
dnl We use the -kernel option for testing this, because this option
dnl is processed very late, after qemu has set up the machine.
AC_MSG_CHECKING([for broken '-machine accel=tcg' option in $QEMU])
LC_ALL=C $QEMU -nographic -machine accel=tcg -kernel /NO_SUCH_FILE \
> config1.tmp 2>&1
LC_ALL=C $QEMU -nographic -machine pc,accel=tcg -kernel /NO_SUCH_FILE \
> config2.tmp 2>&1
if cmp -s config1.tmp config2.tmp; then
AC_MSG_RESULT([no])
else
AC_MSG_RESULT([yes])
AC_DEFINE([QEMU_MACHINE_TYPE_IS_BROKEN],[1],[qemu -machine accel=tcg option is broken (in qemu 0.15 only)])
fi
rm config1.tmp config2.tmp
AC_MSG_CHECKING([that $QEMU -version works])
if $QEMU -version >&AS_MESSAGE_LOG_FD 2>&1; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
AC_MSG_FAILURE(
[$QEMU -version: command failed.
dnl See if the '-machine [pc,]accel=tcg' option is required in
dnl order to run the virtio-serial test below. This happens when
dnl we run qemu-kvm inside a VM without forcing TCG:
dnl
dnl Could not access KVM kernel module: No such file or directory
dnl failed to initialize KVM: No such file or directory
dnl No accelerator found!
AC_MSG_CHECKING([if -machine @<:@pc,@:>@accel=tcg option is required to test virtio-serial feature])
if $QEMU -nographic -device \? >/dev/null 2>&1; then
:
elif $QEMU -machine accel=tcg -nographic -device \? >/dev/null 2>&1; then
QEMU_OPTIONS_FOR_TEST="-machine accel=tcg"
elif $QEMU -machine pc,accel=tcg -nographic -device \? >/dev/null 2>&1; then
QEMU_OPTIONS_FOR_TEST="-machine pc,accel=tcg"
# else nothing ... it'll fail below.
fi
AC_MSG_RESULT([$QEMU_OPTIONS_FOR_TEST])
])
This could be a very old version of qemu, or qemu might not be
working.
])
fi
AC_MSG_CHECKING([for $QEMU version >= 1])
if $QEMU -version | grep -sq 'version @<:@1-@:>@'; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
AC_MSG_FAILURE([$QEMU version must be >= 1.0.])
fi
AC_MSG_CHECKING([for virtio-serial support in $QEMU])
if $QEMU $QEMU_OPTIONS $QEMU_OPTIONS_FOR_TEST -nographic -device \? 2>&1 | grep -sq virtio-serial; then
if $QEMU $QEMU_OPTIONS -machine accel=kvm:tcg -device \? 2>&1 | grep -sq virtio-serial; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])

View File

@@ -678,29 +678,13 @@ launch_appliance (guestfs_h *g)
add_cmdline_shell_unquoted (g, QEMU_OPTIONS);
}
/* The #if on the next line should really be "architectures for
* which KVM is commonly available.
*/
#if defined(__i386__) || defined(__x86_64__)
/* The qemu -machine option (added 2010-12) is a bit more sane
* since it falls back through various different acceleration
* modes, so try that first (thanks Markus Armbruster).
*/
if (qemu_supports (g, "-machine")) {
add_cmdline (g, "-machine");
#if QEMU_MACHINE_TYPE_IS_BROKEN
/* Workaround for qemu 0.15: We have to add the '[type=]pc'
* since there is no default. This is not a permanent solution
* because this only works on PC-like hardware. Other platforms
* like ppc would need a different machine type.
*
* This bug is fixed in qemu commit 2645c6dcaf6ea2a51a, and was
* not a problem in qemu < 0.15.
*/
add_cmdline (g, "pc,accel=kvm:tcg");
#else
add_cmdline (g, "accel=kvm:tcg");
#endif
} else {
/* qemu sometimes needs this option to enable hardware
* virtualization, but some versions of 'qemu-kvm' will use KVM
@@ -718,7 +702,6 @@ launch_appliance (guestfs_h *g)
is_openable (g, "/dev/kvm", O_RDWR|O_CLOEXEC))
add_cmdline (g, "-enable-kvm");
}
#endif /* i386 or x86-64 */
if (g->smp > 1) {
snprintf (buf, sizeof buf, "%d", g->smp);
@@ -1339,11 +1322,11 @@ test_qemu (guestfs_h *g)
snprintf (cmd, sizeof cmd, "LC_ALL=C '%s' -nographic -help", g->qemu);
/* qemu -help should always work (qemu -version OTOH wasn't
* supported by qemu 0.9). If this command doesn't work then it
* probably indicates that the qemu binary is missing.
/* If this command doesn't work then it probably indicates that the
* qemu binary is missing.
*/
if (test_qemu_cmd (g, cmd, &g->qemu_help) == -1) {
qemu_error:
error (g, _("command failed: %s\n\nIf qemu is located on a non-standard path, try setting the LIBGUESTFS_QEMU\nenvironment variable. There may also be errors printed above."),
cmd);
return -1;
@@ -1352,8 +1335,8 @@ test_qemu (guestfs_h *g)
snprintf (cmd, sizeof cmd, "LC_ALL=C '%s' -nographic -version 2>/dev/null",
g->qemu);
/* Intentionally ignore errors from qemu -version. */
ignore_value (test_qemu_cmd (g, cmd, &g->qemu_version));
if (test_qemu_cmd (g, cmd, &g->qemu_version) == -1)
goto qemu_error;
return 0;
}