xen: groundwork for xen support (Gerd Hoffmann)

- configure script and build system changes.
- wind up new machine type.
- add -xen-* command line options.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7219 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
aliguori 2009-04-22 15:19:10 +00:00
parent b194f61064
commit e37630ca4f
8 changed files with 150 additions and 0 deletions

View File

@ -560,6 +560,13 @@ ifdef CONFIG_BLUEZ
LIBS += $(CONFIG_BLUEZ_LIBS)
endif
# xen backend driver support
XEN_OBJS := xen_machine_pv.o
ifeq ($(CONFIG_XEN), yes)
OBJS += $(XEN_OBJS)
LIBS += $(XEN_LIBS)
endif
# SCSI layer
OBJS+= lsi53c895a.o esp.o

34
configure vendored
View File

@ -191,6 +191,7 @@ aix="no"
blobs="yes"
fdt="yes"
sdl_x11="no"
xen="yes"
pkgversion=""
# OS specific
@ -421,6 +422,8 @@ for opt do
;;
--disable-kqemu) kqemu="no"
;;
--disable-xen) xen="no"
;;
--disable-brlapi) brlapi="no"
;;
--disable-bluez) bluez="no"
@ -586,6 +589,7 @@ echo " Available drivers: $audio_possible_drivers"
echo " --audio-card-list=LIST set list of emulated audio cards [$audio_card_list]"
echo " Available cards: $audio_possible_cards"
echo " --enable-mixemu enable mixer emulation"
echo " --disable-xen disable xen backend driver support"
echo " --disable-brlapi disable BrlAPI"
echo " --disable-vnc-tls disable TLS encryption for VNC server"
echo " --disable-vnc-sasl disable SASL encryption for VNC server"
@ -801,6 +805,22 @@ else
exit 1
fi
##########################################
# xen probe
if test "$xen" = "yes" ; then
cat > $TMPC <<EOF
#include <xenctrl.h>
#include <xs.h>
int main(void) { xs_daemon_open; xc_interface_open; }
EOF
if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC -lxenstore -lxenctrl 2> /dev/null ; then
:
else
xen="no"
fi
fi
##########################################
# SDL probe
@ -1296,6 +1316,7 @@ if test -n "$sparc_cpu"; then
echo "Target Sparc Arch $sparc_cpu"
fi
echo "kqemu support $kqemu"
echo "xen support $xen"
echo "brlapi support $brlapi"
echo "Documentation $build_docs"
[ ! -z "$uname_release" ] && \
@ -1612,6 +1633,9 @@ if test "$bluez" = "yes" ; then
echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_mak
echo "#define CONFIG_BLUEZ 1" >> $config_h
fi
if test "$xen" = "yes" ; then
echo "XEN_LIBS=-lxenstore -lxenctrl" >> $config_mak
fi
if test "$aio" = "yes" ; then
echo "#define CONFIG_AIO 1" >> $config_h
echo "CONFIG_AIO=yes" >> $config_mak
@ -1777,6 +1801,11 @@ case "$target_cpu" in
echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
echo "#define CONFIG_KVM 1" >> $config_h
fi
if test "$xen" = "yes" -a "$target_softmmu" = "yes";
then
echo "CONFIG_XEN=yes" >> $config_mak
echo "#define CONFIG_XEN 1" >> $config_h
fi
;;
x86_64)
echo "TARGET_ARCH=x86_64" >> $config_mak
@ -1793,6 +1822,11 @@ case "$target_cpu" in
echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
echo "#define CONFIG_KVM 1" >> $config_h
fi
if test "$xen" = "yes" -a "$target_softmmu" = "yes"
then
echo "CONFIG_XEN=yes" >> $config_mak
echo "#define CONFIG_XEN 1" >> $config_h
fi
;;
alpha)
echo "TARGET_ARCH=alpha" >> $config_mak

View File

@ -32,6 +32,9 @@ extern QEMUMachine axisdev88_machine;
extern QEMUMachine pc_machine;
extern QEMUMachine isapc_machine;
/* xen_machine.c */
extern QEMUMachine xenpv_machine;
/* ppc.c */
extern QEMUMachine prep_machine;
extern QEMUMachine core99_machine;

20
hw/xen.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef QEMU_HW_XEN_H
#define QEMU_HW_XEN_H 1
/*
* public xen header
* stuff needed outside xen-*.c, i.e. interfaces to qemu.
* must not depend on any xen headers being present in
* /usr/include/xen, so it can be included unconditionally.
*/
/* xen-machine.c */
enum xen_mode {
XEN_EMULATE = 0, // xen emulation, using xenner (default)
XEN_CREATE, // create xen domain
XEN_ATTACH // attach to xen domain created by xend
};
extern uint32_t xen_domid;
extern enum xen_mode xen_mode;
#endif /* QEMU_HW_XEN_H */

60
hw/xen_machine_pv.c Normal file
View File

@ -0,0 +1,60 @@
/*
* QEMU Xen PV Machine
*
* Copyright (c) 2007 Red Hat
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "hw.h"
#include "pc.h"
#include "sysemu.h"
#include "boards.h"
#include "xen.h"
uint32_t xen_domid;
enum xen_mode xen_mode = XEN_EMULATE;
static void xen_init_pv(ram_addr_t ram_size, int vga_ram_size,
const char *boot_device,
const char *kernel_filename,
const char *kernel_cmdline,
const char *initrd_filename,
const char *cpu_model)
{
CPUState *env;
/* Initialize a dummy CPU */
if (cpu_model == NULL) {
#ifdef TARGET_X86_64
cpu_model = "qemu64";
#else
cpu_model = "qemu32";
#endif
}
env = cpu_init(cpu_model);
env->halted = 1;
}
QEMUMachine xenpv_machine = {
.name = "xenpv",
.desc = "Xen Para-virtualized PC",
.init = xen_init_pv,
.max_cpus = 1,
};

View File

@ -1348,6 +1348,17 @@ Enable KVM full virtualization support. This option is only available
if KVM support is enabled when compiling.
ETEXI
#ifdef CONFIG_XEN
DEF("xen-domid", HAS_ARG, QEMU_OPTION_xen_domid,
"-xen-domid id specify xen guest domain id\n")
DEF("xen-create", 0, QEMU_OPTION_xen_create,
"-xen-create create domain using xen hypercalls, bypassing xend\n"
" warning: should not be used when xend is in use\n")
DEF("xen-attach", 0, QEMU_OPTION_xen_attach,
"-xen-attach attach to existing xen domain\n"
" xend will use this when starting qemu\n")
#endif
DEF("no-reboot", 0, QEMU_OPTION_no_reboot, \
"-no-reboot exit instead of rebooting\n")
STEXI

View File

@ -9,6 +9,9 @@ void register_machines(void)
{
qemu_register_machine(&pc_machine);
qemu_register_machine(&isapc_machine);
#ifdef CONFIG_XEN
qemu_register_machine(&xenpv_machine);
#endif
}
static void cpu_put_seg(QEMUFile *f, SegmentCache *dt)

12
vl.c
View File

@ -139,6 +139,7 @@ int main(int argc, char **argv)
#include "hw/baum.h"
#include "hw/bt.h"
#include "hw/smbios.h"
#include "hw/xen.h"
#include "bt-host.h"
#include "net.h"
#include "monitor.h"
@ -5045,6 +5046,17 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_runas:
run_as = optarg;
break;
#endif
#ifdef CONFIG_XEN
case QEMU_OPTION_xen_domid:
xen_domid = atoi(optarg);
break;
case QEMU_OPTION_xen_create:
xen_mode = XEN_CREATE;
break;
case QEMU_OPTION_xen_attach:
xen_mode = XEN_ATTACH;
break;
#endif
}
}