From: Anthony Liguori <anthony@codemonkey.ws>
To: qemu-devel@nongnu.org
Cc: xen-devel@lists.xensource.com, Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 1/7] xen: groundwork for xen support
Date: Mon, 28 Jul 2008 09:04:54 -0500 [thread overview]
Message-ID: <488DD206.8040404@codemonkey.ws> (raw)
In-Reply-To: <1217251078-6591-2-git-send-email-kraxel@redhat.com>
Gerd Hoffmann wrote:
> - configure script and build system changes.
> - wind up new machine type.
> - add -domid command line option.
> - allow xenpv machines run without disk and kernel specified.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> Makefile.target | 8 +++++
> configure | 27 ++++++++++++++++
> hw/boards.h | 4 ++
> hw/xen-machine.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++
> hw/xen.h | 12 +++++++
> target-i386/machine.c | 3 ++
> vl.c | 25 +++++++++++++--
> 7 files changed, 159 insertions(+), 3 deletions(-)
> create mode 100644 hw/xen-machine.c
> create mode 100644 hw/xen.h
>
> diff --git a/Makefile.target b/Makefile.target
> index ff105c1..4f42582 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -515,6 +515,14 @@ CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
> LIBS += $(CONFIG_VNC_TLS_LIBS)
> endif
>
> +# xen backend driver support
> +XEN_OBJS := xen-machine.o
> +ifeq ($(CONFIG_XEN), yes)
> + OBJS += $(XEN_OBJS)
> + LIBS += $(XEN_LIBS)
> + $(XEN_OBJS) : CFLAGS += -Wall -Wmissing-prototypes -Wstrict-prototypes
> +endif
> +
> # SCSI layer
> OBJS+= lsi53c895a.o esp.o
>
> diff --git a/configure b/configure
> index fd04766..34516b9 100755
> --- a/configure
> +++ b/configure
> @@ -108,6 +108,7 @@ uname_release=""
> curses="yes"
> nptl="yes"
> mixemu="no"
> +xen="no"
>
> # OS specific
> targetos=`uname -s`
> @@ -202,6 +203,7 @@ linux="yes"
> linux_user="yes"
> if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
> kqemu="yes"
> + xen="yes"
> audio_possible_drivers="$audio_possible_drivers fmod"
> fi
> ;;
> @@ -285,6 +287,8 @@ for opt do
> ;;
> --disable-kqemu) kqemu="no"
> ;;
> + --disable-xen) xen="no"
> + ;;
> --disable-brlapi) brlapi="no"
> ;;
> --enable-profiler) profiler="yes"
> @@ -421,6 +425,7 @@ echo " Available drivers: $audio_possible_drivers"
> echo " --audio-card-list=LIST set list of additional emulated audio cards"
> echo " Available cards: ac97 adlib cs4231a gus"
> 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-curses disable curses output"
> @@ -681,6 +686,22 @@ else
> fi
>
> ##########################################
> +# xen probe
> +
> +if test "$xen" = "yes" ; then
> +cat > $TMPC <<EOF
> +#include <xs.h>
> +#include <xenctrl.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
>
> sdl_too_old=no
> @@ -916,6 +937,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" ] && \
> @@ -1167,6 +1189,11 @@ if test "$brlapi" = "yes" ; then
> echo "#define CONFIG_BRLAPI 1" >> $config_h
> echo "BRLAPI_LIBS=-lbrlapi" >> $config_mak
> fi
> +if test "$xen" = "yes" ; then
> + echo "CONFIG_XEN=yes" >> $config_mak
> + echo "#define CONFIG_XEN 1" >> $config_h
> + echo "XEN_LIBS=-lxenstore -lxenctrl" >> $config_mak
> +fi
>
> # XXX: suppress that
> if [ "$bsd" = "yes" ] ; then
> diff --git a/hw/boards.h b/hw/boards.h
> index 22ac332..5931720 100644
> --- a/hw/boards.h
> +++ b/hw/boards.h
> @@ -29,6 +29,10 @@ extern QEMUMachine bareetraxfs_machine;
> extern QEMUMachine pc_machine;
> extern QEMUMachine isapc_machine;
>
> +/* xen_machine.c */
> +extern QEMUMachine xenpv_machine;
> +extern QEMUMachine xenfv_machine;
>
Why does xenfv need its own machine type?
> /* ppc.c */
> extern QEMUMachine prep_machine;
> extern QEMUMachine core99_machine;
> diff --git a/hw/xen-machine.c b/hw/xen-machine.c
> new file mode 100644
> index 0000000..88f0f6e
> --- /dev/null
> +++ b/hw/xen-machine.c
> @@ -0,0 +1,83 @@
> +/*
> + * QEMU Xen PV Machine
> + *
> + * Copyright (c) 2007,08 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 "boards.h"
> +
> +#include "xen.h"
> +
> +/* -------------------------------------------------------------------- */
> +/* variables */
> +
> +int xen_domid;
> +
> +/* -------------------------------------------------------------------- */
> +/* paravirtualized xen guests */
> +
> +static void xenpv_init(ram_addr_t ram_size, int vga_ram_size,
> + const char *boot_device, DisplayState *ds,
> + const char *kernel_filename,
> + const char *kernel_cmdline,
> + const char *initrd_filename,
> + const char *cpu_model)
> +{
> + CPUState *env;
> +
> + /* create dummy cpu, halted */
> + 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 = {
> + "xenpv",
> + "paravirtualized Xen machine",
> + xenpv_init,
> +};
> +
> +/* -------------------------------------------------------------------- */
> +/* fully virtualized xen guests */
> +
> +static void xenfv_init(ram_addr_t ram_size, int vga_ram_size,
> + const char *boot_device, DisplayState *ds,
> + const char *kernel_filename,
> + const char *kernel_cmdline,
> + const char *initrd_filename,
> + const char *cpu_model)
> +{
> + /* to be done */
> + fprintf(stderr, "%s: not implemented yet\n", __FUNCTION__);
> +}
> +
> +QEMUMachine xenfv_machine = {
> + "xenfv",
> + "fully virtualized Xen machine",
> + xenfv_init,
> +};
> diff --git a/hw/xen.h b/hw/xen.h
> new file mode 100644
> index 0000000..19349b5
> --- /dev/null
> +++ b/hw/xen.h
> @@ -0,0 +1,12 @@
> +/*
> + * public xen header
> + * stuff needed outside xen-*.c, i.e. interfaces to qemu.
> + * should not depend on any xen headers being present in
> + * /usr/include/xen, so it can be included unconditionally.
> + *
> + * internal bits for the xen backend drivers are in xen-backend.h
> + */
> +
> +/* xen-machine.c */
> +extern int xen_domid;
> +
> diff --git a/target-i386/machine.c b/target-i386/machine.c
> index 91dbd55..98ece17 100644
> --- a/target-i386/machine.c
> +++ b/target-i386/machine.c
> @@ -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)
> diff --git a/vl.c b/vl.c
> index 8801615..8aef3bd 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -29,6 +29,7 @@
> #include "hw/audiodev.h"
> #include "hw/isa.h"
> #include "hw/baum.h"
> +#include "hw/xen.h"
> #include "net.h"
> #include "console.h"
> #include "sysemu.h"
> @@ -7737,6 +7738,9 @@ static void help(int exitcode)
> "-startdate select initial date of the clock\n"
> "-icount [N|auto]\n"
> " Enable virtual instruction counter with 2^N clock ticks per instruction\n"
> +#ifdef CONFIG_XEN
> + "-domid specify xen guest domain id\n"
> +#endif
> "\n"
> "During emulation, the following keys are useful:\n"
> "ctrl-alt-f toggle full screen\n"
> @@ -7842,6 +7846,9 @@ enum {
> QEMU_OPTION_startdate,
> QEMU_OPTION_tb_size,
> QEMU_OPTION_icount,
> +#ifdef CONFIG_XEN
> + QEMU_OPTION_domid,
> +#endif
> };
>
> typedef struct QEMUOption {
> @@ -7930,6 +7937,9 @@ const QEMUOption qemu_options[] = {
> #ifdef CONFIG_CURSES
> { "curses", 0, QEMU_OPTION_curses },
> #endif
> +#ifdef CONFIG_XEN
> + { "domid", HAS_ARG, QEMU_OPTION_domid },
> +#endif
>
> /* temporary options */
> { "usb", 0, QEMU_OPTION_usb },
> @@ -8150,7 +8160,7 @@ int main(int argc, char **argv)
> #endif
> uint32_t boot_devices_bitmap = 0;
> int i;
> - int snapshot, linux_boot, net_boot;
> + int snapshot, linux_boot, net_boot, nodisk_ok;
> const char *initrd_filename;
> const char *kernel_filename, *kernel_cmdline;
> const char *boot_devices = "";
> @@ -8787,6 +8797,11 @@ int main(int argc, char **argv)
> icount_time_shift = strtol(optarg, NULL, 0);
> }
> break;
> +#ifdef CONFIG_XEN
> + case QEMU_OPTION_domid:
> + xen_domid = atoi(optarg);
> + break;
> +#endif
> }
> }
> }
> @@ -8852,9 +8867,13 @@ int main(int argc, char **argv)
> linux_boot = (kernel_filename != NULL);
> net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
>
> - /* XXX: this should not be: some embedded targets just have flash */
> + /* need a disk for this machine to boot ? */
> + /* XXX: add embedded targets which just have flash */
> + nodisk_ok = 0;
> + if (0 == strcmp(machine->name, "xenpv"))
> + nodisk_ok = 1;
> if (!linux_boot && net_boot == 0 &&
> - nb_drives_opt == 0)
> + !nodisk_ok && nb_drives_opt == 0)
> help(1);
This patch is pretty clean with the exception of this bit. I think a
cleaner way to do this would be to let the machine types specify whether
a disk is needed or not.
Regards,
Anthony LIguori
>
> if (!linux_boot && *kernel_cmdline != '\0') {
>
next prev parent reply other threads:[~2008-07-28 14:05 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-28 13:17 [Qemu-devel] [PATCH 0/7] merge some xen bits into qemu Gerd Hoffmann
2008-07-28 13:17 ` [Qemu-devel] [PATCH 1/7] xen: groundwork for xen support Gerd Hoffmann
2008-07-28 14:04 ` Anthony Liguori [this message]
2008-07-28 14:52 ` Gerd Hoffmann
2008-07-29 8:10 ` [Xen-devel] " Daniel P. Berrange
2008-07-29 13:32 ` Anthony Liguori
2008-07-29 14:24 ` Daniel P. Berrange
2008-07-29 19:11 ` Anthony Liguori
2008-07-29 21:36 ` Gerd Hoffmann
2008-07-29 21:48 ` Anthony Liguori
2008-07-29 14:32 ` Gerd Hoffmann
2008-07-28 23:14 ` Samuel Thibault
2008-07-29 7:38 ` Gerd Hoffmann
2008-07-29 8:12 ` Daniel P. Berrange
2008-07-29 8:55 ` Gerd Hoffmann
2008-07-28 13:17 ` [Qemu-devel] [PATCH 2/7] xen: backend driver core Gerd Hoffmann
2008-07-28 14:13 ` Anthony Liguori
2008-07-28 15:51 ` Gerd Hoffmann
2008-07-28 13:17 ` [Qemu-devel] [PATCH 3/7] xen: add console backend driver Gerd Hoffmann
2008-07-28 14:17 ` Anthony Liguori
2008-07-28 15:43 ` Gerd Hoffmann
2008-07-28 19:04 ` Anthony Liguori
2008-07-28 13:17 ` [Qemu-devel] [PATCH 4/7] xen: add framebuffer " Gerd Hoffmann
2008-07-28 14:22 ` Anthony Liguori
2008-07-28 14:41 ` Andreas Färber
2008-07-30 9:59 ` Gerd Hoffmann
2008-08-01 14:57 ` Anthony Liguori
2008-07-30 9:20 ` Gerd Hoffmann
2008-07-30 16:31 ` Markus Armbruster
2008-08-01 15:05 ` Anthony Liguori
2008-07-28 13:17 ` [Qemu-devel] [PATCH 5/7] xen: add block device " Gerd Hoffmann
2008-07-28 14:25 ` Anthony Liguori
2008-07-28 13:17 ` [Qemu-devel] [PATCH 6/7] xen: add net " Gerd Hoffmann
2008-07-28 14:27 ` Anthony Liguori
2008-07-28 15:45 ` Gerd Hoffmann
2008-07-28 13:17 ` [Qemu-devel] [PATCH 7/7] xen: blk & nic configuration via cmd line Gerd Hoffmann
-- strict thread matches above, loose matches on Subject: below --
2008-08-04 15:50 [Qemu-devel] [PATCH 0/7] merge some xen bits into qemu Gerd Hoffmann
2008-08-04 15:50 ` [Qemu-devel] [PATCH 1/7] xen: groundwork for xen support Gerd Hoffmann
2008-08-04 16:34 ` Blue Swirl
2008-08-04 18:01 ` Gerd Hoffmann
2008-08-04 17:35 ` Anthony Liguori
2008-08-04 18:04 ` Gerd Hoffmann
2008-10-28 12:23 [Qemu-devel] [PATCH 0/7] merge some xen bits into qemu Gerd Hoffmann
2008-10-28 12:23 ` [Qemu-devel] [PATCH 1/7] xen: groundwork for xen support Gerd Hoffmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=488DD206.8040404@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).