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:
parent
b194f61064
commit
e37630ca4f
@ -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
34
configure
vendored
@ -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
|
||||
|
@ -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
20
hw/xen.h
Normal 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
60
hw/xen_machine_pv.c
Normal 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,
|
||||
};
|
@ -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
|
||||
|
@ -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
12
vl.c
@ -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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user