Commit e37630ca4f5142a6830654d9801b473600417d5c

Authored by aliguori
1 parent b194f610

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
Makefile.target
@@ -560,6 +560,13 @@ ifdef CONFIG_BLUEZ @@ -560,6 +560,13 @@ ifdef CONFIG_BLUEZ
560 LIBS += $(CONFIG_BLUEZ_LIBS) 560 LIBS += $(CONFIG_BLUEZ_LIBS)
561 endif 561 endif
562 562
  563 +# xen backend driver support
  564 +XEN_OBJS := xen_machine_pv.o
  565 +ifeq ($(CONFIG_XEN), yes)
  566 + OBJS += $(XEN_OBJS)
  567 + LIBS += $(XEN_LIBS)
  568 +endif
  569 +
563 # SCSI layer 570 # SCSI layer
564 OBJS+= lsi53c895a.o esp.o 571 OBJS+= lsi53c895a.o esp.o
565 572
configure
@@ -191,6 +191,7 @@ aix=&quot;no&quot; @@ -191,6 +191,7 @@ aix=&quot;no&quot;
191 blobs="yes" 191 blobs="yes"
192 fdt="yes" 192 fdt="yes"
193 sdl_x11="no" 193 sdl_x11="no"
  194 +xen="yes"
194 pkgversion="" 195 pkgversion=""
195 196
196 # OS specific 197 # OS specific
@@ -421,6 +422,8 @@ for opt do @@ -421,6 +422,8 @@ for opt do
421 ;; 422 ;;
422 --disable-kqemu) kqemu="no" 423 --disable-kqemu) kqemu="no"
423 ;; 424 ;;
  425 + --disable-xen) xen="no"
  426 + ;;
424 --disable-brlapi) brlapi="no" 427 --disable-brlapi) brlapi="no"
425 ;; 428 ;;
426 --disable-bluez) bluez="no" 429 --disable-bluez) bluez="no"
@@ -586,6 +589,7 @@ echo &quot; Available drivers: $audio_possible_drivers&quot; @@ -586,6 +589,7 @@ echo &quot; Available drivers: $audio_possible_drivers&quot;
586 echo " --audio-card-list=LIST set list of emulated audio cards [$audio_card_list]" 589 echo " --audio-card-list=LIST set list of emulated audio cards [$audio_card_list]"
587 echo " Available cards: $audio_possible_cards" 590 echo " Available cards: $audio_possible_cards"
588 echo " --enable-mixemu enable mixer emulation" 591 echo " --enable-mixemu enable mixer emulation"
  592 +echo " --disable-xen disable xen backend driver support"
589 echo " --disable-brlapi disable BrlAPI" 593 echo " --disable-brlapi disable BrlAPI"
590 echo " --disable-vnc-tls disable TLS encryption for VNC server" 594 echo " --disable-vnc-tls disable TLS encryption for VNC server"
591 echo " --disable-vnc-sasl disable SASL encryption for VNC server" 595 echo " --disable-vnc-sasl disable SASL encryption for VNC server"
@@ -802,6 +806,22 @@ else @@ -802,6 +806,22 @@ else
802 fi 806 fi
803 807
804 ########################################## 808 ##########################################
  809 +# xen probe
  810 +
  811 +if test "$xen" = "yes" ; then
  812 +cat > $TMPC <<EOF
  813 +#include <xenctrl.h>
  814 +#include <xs.h>
  815 +int main(void) { xs_daemon_open; xc_interface_open; }
  816 +EOF
  817 + if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC -lxenstore -lxenctrl 2> /dev/null ; then
  818 + :
  819 + else
  820 + xen="no"
  821 + fi
  822 +fi
  823 +
  824 +##########################################
805 # SDL probe 825 # SDL probe
806 826
807 sdl_too_old=no 827 sdl_too_old=no
@@ -1296,6 +1316,7 @@ if test -n &quot;$sparc_cpu&quot;; then @@ -1296,6 +1316,7 @@ if test -n &quot;$sparc_cpu&quot;; then
1296 echo "Target Sparc Arch $sparc_cpu" 1316 echo "Target Sparc Arch $sparc_cpu"
1297 fi 1317 fi
1298 echo "kqemu support $kqemu" 1318 echo "kqemu support $kqemu"
  1319 +echo "xen support $xen"
1299 echo "brlapi support $brlapi" 1320 echo "brlapi support $brlapi"
1300 echo "Documentation $build_docs" 1321 echo "Documentation $build_docs"
1301 [ ! -z "$uname_release" ] && \ 1322 [ ! -z "$uname_release" ] && \
@@ -1612,6 +1633,9 @@ if test &quot;$bluez&quot; = &quot;yes&quot; ; then @@ -1612,6 +1633,9 @@ if test &quot;$bluez&quot; = &quot;yes&quot; ; then
1612 echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_mak 1633 echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_mak
1613 echo "#define CONFIG_BLUEZ 1" >> $config_h 1634 echo "#define CONFIG_BLUEZ 1" >> $config_h
1614 fi 1635 fi
  1636 +if test "$xen" = "yes" ; then
  1637 + echo "XEN_LIBS=-lxenstore -lxenctrl" >> $config_mak
  1638 +fi
1615 if test "$aio" = "yes" ; then 1639 if test "$aio" = "yes" ; then
1616 echo "#define CONFIG_AIO 1" >> $config_h 1640 echo "#define CONFIG_AIO 1" >> $config_h
1617 echo "CONFIG_AIO=yes" >> $config_mak 1641 echo "CONFIG_AIO=yes" >> $config_mak
@@ -1777,6 +1801,11 @@ case &quot;$target_cpu&quot; in @@ -1777,6 +1801,11 @@ case &quot;$target_cpu&quot; in
1777 echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak 1801 echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
1778 echo "#define CONFIG_KVM 1" >> $config_h 1802 echo "#define CONFIG_KVM 1" >> $config_h
1779 fi 1803 fi
  1804 + if test "$xen" = "yes" -a "$target_softmmu" = "yes";
  1805 + then
  1806 + echo "CONFIG_XEN=yes" >> $config_mak
  1807 + echo "#define CONFIG_XEN 1" >> $config_h
  1808 + fi
1780 ;; 1809 ;;
1781 x86_64) 1810 x86_64)
1782 echo "TARGET_ARCH=x86_64" >> $config_mak 1811 echo "TARGET_ARCH=x86_64" >> $config_mak
@@ -1793,6 +1822,11 @@ case &quot;$target_cpu&quot; in @@ -1793,6 +1822,11 @@ case &quot;$target_cpu&quot; in
1793 echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak 1822 echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
1794 echo "#define CONFIG_KVM 1" >> $config_h 1823 echo "#define CONFIG_KVM 1" >> $config_h
1795 fi 1824 fi
  1825 + if test "$xen" = "yes" -a "$target_softmmu" = "yes"
  1826 + then
  1827 + echo "CONFIG_XEN=yes" >> $config_mak
  1828 + echo "#define CONFIG_XEN 1" >> $config_h
  1829 + fi
1796 ;; 1830 ;;
1797 alpha) 1831 alpha)
1798 echo "TARGET_ARCH=alpha" >> $config_mak 1832 echo "TARGET_ARCH=alpha" >> $config_mak
hw/boards.h
@@ -32,6 +32,9 @@ extern QEMUMachine axisdev88_machine; @@ -32,6 +32,9 @@ extern QEMUMachine axisdev88_machine;
32 extern QEMUMachine pc_machine; 32 extern QEMUMachine pc_machine;
33 extern QEMUMachine isapc_machine; 33 extern QEMUMachine isapc_machine;
34 34
  35 +/* xen_machine.c */
  36 +extern QEMUMachine xenpv_machine;
  37 +
35 /* ppc.c */ 38 /* ppc.c */
36 extern QEMUMachine prep_machine; 39 extern QEMUMachine prep_machine;
37 extern QEMUMachine core99_machine; 40 extern QEMUMachine core99_machine;
hw/xen.h 0 โ†’ 100644
  1 +#ifndef QEMU_HW_XEN_H
  2 +#define QEMU_HW_XEN_H 1
  3 +/*
  4 + * public xen header
  5 + * stuff needed outside xen-*.c, i.e. interfaces to qemu.
  6 + * must not depend on any xen headers being present in
  7 + * /usr/include/xen, so it can be included unconditionally.
  8 + */
  9 +
  10 +/* xen-machine.c */
  11 +enum xen_mode {
  12 + XEN_EMULATE = 0, // xen emulation, using xenner (default)
  13 + XEN_CREATE, // create xen domain
  14 + XEN_ATTACH // attach to xen domain created by xend
  15 +};
  16 +
  17 +extern uint32_t xen_domid;
  18 +extern enum xen_mode xen_mode;
  19 +
  20 +#endif /* QEMU_HW_XEN_H */
hw/xen_machine_pv.c 0 โ†’ 100644
  1 +/*
  2 + * QEMU Xen PV Machine
  3 + *
  4 + * Copyright (c) 2007 Red Hat
  5 + *
  6 + * Permission is hereby granted, free of charge, to any person obtaining a copy
  7 + * of this software and associated documentation files (the "Software"), to deal
  8 + * in the Software without restriction, including without limitation the rights
  9 + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10 + * copies of the Software, and to permit persons to whom the Software is
  11 + * furnished to do so, subject to the following conditions:
  12 + *
  13 + * The above copyright notice and this permission notice shall be included in
  14 + * all copies or substantial portions of the Software.
  15 + *
  16 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  19 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21 + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22 + * THE SOFTWARE.
  23 + */
  24 +
  25 +#include "hw.h"
  26 +#include "pc.h"
  27 +#include "sysemu.h"
  28 +#include "boards.h"
  29 +#include "xen.h"
  30 +
  31 +uint32_t xen_domid;
  32 +enum xen_mode xen_mode = XEN_EMULATE;
  33 +
  34 +static void xen_init_pv(ram_addr_t ram_size, int vga_ram_size,
  35 + const char *boot_device,
  36 + const char *kernel_filename,
  37 + const char *kernel_cmdline,
  38 + const char *initrd_filename,
  39 + const char *cpu_model)
  40 +{
  41 + CPUState *env;
  42 +
  43 + /* Initialize a dummy CPU */
  44 + if (cpu_model == NULL) {
  45 +#ifdef TARGET_X86_64
  46 + cpu_model = "qemu64";
  47 +#else
  48 + cpu_model = "qemu32";
  49 +#endif
  50 + }
  51 + env = cpu_init(cpu_model);
  52 + env->halted = 1;
  53 +}
  54 +
  55 +QEMUMachine xenpv_machine = {
  56 + .name = "xenpv",
  57 + .desc = "Xen Para-virtualized PC",
  58 + .init = xen_init_pv,
  59 + .max_cpus = 1,
  60 +};
qemu-options.hx
@@ -1348,6 +1348,17 @@ Enable KVM full virtualization support. This option is only available @@ -1348,6 +1348,17 @@ Enable KVM full virtualization support. This option is only available
1348 if KVM support is enabled when compiling. 1348 if KVM support is enabled when compiling.
1349 ETEXI 1349 ETEXI
1350 1350
  1351 +#ifdef CONFIG_XEN
  1352 +DEF("xen-domid", HAS_ARG, QEMU_OPTION_xen_domid,
  1353 + "-xen-domid id specify xen guest domain id\n")
  1354 +DEF("xen-create", 0, QEMU_OPTION_xen_create,
  1355 + "-xen-create create domain using xen hypercalls, bypassing xend\n"
  1356 + " warning: should not be used when xend is in use\n")
  1357 +DEF("xen-attach", 0, QEMU_OPTION_xen_attach,
  1358 + "-xen-attach attach to existing xen domain\n"
  1359 + " xend will use this when starting qemu\n")
  1360 +#endif
  1361 +
1351 DEF("no-reboot", 0, QEMU_OPTION_no_reboot, \ 1362 DEF("no-reboot", 0, QEMU_OPTION_no_reboot, \
1352 "-no-reboot exit instead of rebooting\n") 1363 "-no-reboot exit instead of rebooting\n")
1353 STEXI 1364 STEXI
target-i386/machine.c
@@ -9,6 +9,9 @@ void register_machines(void) @@ -9,6 +9,9 @@ void register_machines(void)
9 { 9 {
10 qemu_register_machine(&pc_machine); 10 qemu_register_machine(&pc_machine);
11 qemu_register_machine(&isapc_machine); 11 qemu_register_machine(&isapc_machine);
  12 +#ifdef CONFIG_XEN
  13 + qemu_register_machine(&xenpv_machine);
  14 +#endif
12 } 15 }
13 16
14 static void cpu_put_seg(QEMUFile *f, SegmentCache *dt) 17 static void cpu_put_seg(QEMUFile *f, SegmentCache *dt)
@@ -139,6 +139,7 @@ int main(int argc, char **argv) @@ -139,6 +139,7 @@ int main(int argc, char **argv)
139 #include "hw/baum.h" 139 #include "hw/baum.h"
140 #include "hw/bt.h" 140 #include "hw/bt.h"
141 #include "hw/smbios.h" 141 #include "hw/smbios.h"
  142 +#include "hw/xen.h"
142 #include "bt-host.h" 143 #include "bt-host.h"
143 #include "net.h" 144 #include "net.h"
144 #include "monitor.h" 145 #include "monitor.h"
@@ -5046,6 +5047,17 @@ int main(int argc, char **argv, char **envp) @@ -5046,6 +5047,17 @@ int main(int argc, char **argv, char **envp)
5046 run_as = optarg; 5047 run_as = optarg;
5047 break; 5048 break;
5048 #endif 5049 #endif
  5050 +#ifdef CONFIG_XEN
  5051 + case QEMU_OPTION_xen_domid:
  5052 + xen_domid = atoi(optarg);
  5053 + break;
  5054 + case QEMU_OPTION_xen_create:
  5055 + xen_mode = XEN_CREATE;
  5056 + break;
  5057 + case QEMU_OPTION_xen_attach:
  5058 + xen_mode = XEN_ATTACH;
  5059 + break;
  5060 +#endif
5049 } 5061 }
5050 } 5062 }
5051 } 5063 }