From: Anthony Liguori <anthony@codemonkey.ws>
To: anthony.perard@citrix.com
Cc: Xen Devel <xen-devel@lists.xensource.com>,
QEMU-devel <qemu-devel@nongnu.org>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [Qemu-devel] [PATCH V9 05/16] xen: Add xen_machine_fv
Date: Wed, 26 Jan 2011 16:56:37 -0600 [thread overview]
Message-ID: <4D40A6A5.8090903@codemonkey.ws> (raw)
In-Reply-To: <1295965760-31508-6-git-send-email-anthony.perard@citrix.com>
On 01/25/2011 08:29 AM, anthony.perard@citrix.com wrote:
> From: Anthony PERARD<anthony.perard@citrix.com>
>
> Add the Xen FV (Fully Virtualized) machine to Qemu;
> this is groundwork to add Xen device model support in Qemu.
>
> Signed-off-by: Anthony PERARD<anthony.perard@citrix.com>
> Signed-off-by: Stefano Stabellini<stefano.stabellini@eu.citrix.com>
> ---
> Makefile.target | 3 +
> hw/xen_common.h | 5 ++
> hw/xen_machine_fv.c | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 167 insertions(+), 0 deletions(-)
> create mode 100644 hw/xen_machine_fv.c
>
> diff --git a/Makefile.target b/Makefile.target
> index d09719f..07cc21e 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -213,6 +213,9 @@ obj-$(CONFIG_XEN) += xen_backend.o xen_devconfig.o
> obj-$(CONFIG_XEN) += xen_console.o xenfb.o xen_disk.o xen_nic.o
> obj-i386-$(CONFIG_XEN) += xen_machine_pv.o xen_domainbuild.o
>
> +# xen full virtualized machine
> +obj-i386-$(CONFIG_XEN) += xen_machine_fv.o
> +
> # Inter-VM PCI shared memory
> obj-$(CONFIG_KVM) += ivshmem.o
>
> diff --git a/hw/xen_common.h b/hw/xen_common.h
> index 33df207..b98d107 100644
> --- a/hw/xen_common.h
> +++ b/hw/xen_common.h
> @@ -18,6 +18,11 @@
> * We don't support Xen prior to 3.3.0.
> */
>
> +/* Before Xen 4.0.0 */
> +#if CONFIG_XEN_CTRL_INTERFACE_VERSION< 400
> +# define HVM_MAX_VCPUS 32
> +#endif
> +
> /* Xen unstable */
> #if CONFIG_XEN_CTRL_INTERFACE_VERSION< 410
> typedef int qemu_xc_interface;
> diff --git a/hw/xen_machine_fv.c b/hw/xen_machine_fv.c
> new file mode 100644
> index 0000000..657c1e8
> --- /dev/null
> +++ b/hw/xen_machine_fv.c
> @@ -0,0 +1,159 @@
> +/*
> + * QEMU Xen FV Machine
> + *
> + * Copyright (c) 2003-2007 Fabrice Bellard
> + * 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 "pci.h"
> +#include "usb-uhci.h"
> +#include "net.h"
> +#include "boards.h"
> +#include "ide.h"
> +#include "sysemu.h"
> +#include "blockdev.h"
> +#include "arch_init.h"
> +
> +#include "xen_common.h"
> +#include "xen/hvm/hvm_info_table.h"
> +
> +#define MAX_IDE_BUS 2
> +
> +static void xen_init_fv(ram_addr_t ram_size,
> + const char *boot_device,
> + const char *kernel_filename,
> + const char *kernel_cmdline,
> + const char *initrd_filename,
> + const char *cpu_model)
> +{
> + int i;
> + ram_addr_t below_4g_mem_size, above_4g_mem_size = 0;
> + PCIBus *pci_bus;
> + PCII440FXState *i440fx_state;
> + int piix3_devfn = -1;
> + qemu_irq *cpu_irq;
> + qemu_irq *isa_irq;
> + qemu_irq *i8259;
> + qemu_irq *cmos_s3;
> + qemu_irq *smi_irq;
> + IsaIrqState *isa_irq_state;
> + DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
> + FDCtrl *floppy_controller;
> + BusState *idebus[MAX_IDE_BUS];
> + ISADevice *rtc_state;
> +
> + 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;
> +
> + cpu_irq = pc_allocate_cpu_irq();
> + i8259 = i8259_init(cpu_irq[0]);
> + isa_irq_state = qemu_mallocz(sizeof (*isa_irq_state));
> + isa_irq_state->i8259 = i8259;
> +
> + isa_irq = qemu_allocate_irqs(isa_irq_handler, isa_irq_state, 24);
> +
> + pci_bus = i440fx_init(&i440fx_state,&piix3_devfn, isa_irq, ram_size);
> + isa_bus_irqs(isa_irq);
> +
> + pc_register_ferr_irq(isa_reserve_irq(13));
> +
> + pc_vga_init(pci_bus);
> +
> + /* init basic PC hardware */
> + pc_basic_device_init(isa_irq,&floppy_controller,&rtc_state);
> +
> + for (i = 0; i< nb_nics; i++) {
> + NICInfo *nd =&nd_table[i];
> +
> + if (nd->model&& strcmp(nd->model, "ne2k_isa") == 0)
> + pc_init_ne2k_isa(nd);
> + else
> + pci_nic_init_nofail(nd, "e1000", NULL);
> + }
> +
> + if (drive_get_max_bus(IF_IDE)>= MAX_IDE_BUS) {
> + fprintf(stderr, "qemu: too many IDE bus\n");
> + exit(1);
> + }
> +
> + for (i = 0; i< MAX_IDE_BUS * MAX_IDE_DEVS; i++) {
> + hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
> + }
> +
> + PCIDevice *dev = pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1);
> + idebus[0] = qdev_get_child_bus(&dev->qdev, "ide.0");
> + idebus[1] = qdev_get_child_bus(&dev->qdev, "ide.1");
> +
> + audio_init(isa_irq, pci_bus);
> +
> + if (ram_size>= 0xe0000000) {
> + above_4g_mem_size = ram_size - 0xe0000000;
> + below_4g_mem_size = 0xe0000000;
> + } else {
> + below_4g_mem_size = ram_size;
> + }
> + pc_cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device,
> + idebus[0], idebus[1], floppy_controller, rtc_state);
> +
> + if (usb_enabled) {
> + usb_uhci_piix3_init(pci_bus, piix3_devfn + 2);
> + }
> +
> + if (acpi_enabled) {
> + cmos_s3 = qemu_allocate_irqs(pc_cmos_set_s3_resume, rtc_state, 1);
> + smi_irq = qemu_allocate_irqs(pc_acpi_smi_interrupt, first_cpu, 1);
> + piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
> + isa_reserve_irq(9), *cmos_s3, *smi_irq, 0);
> + }
> +
> + if (i440fx_state) {
> + i440fx_init_memory_mappings(i440fx_state);
> + }
> +
> + pc_pci_device_init(pci_bus);
> +}
>
It's not obvious to me why you can't make use of most of the normal pc
code here.
Regards,
Anthony Liguori
> +
> +static QEMUMachine xenfv_machine = {
> + .name = "xenfv",
> + .desc = "Xen Fully-virtualized PC",
> + .init = xen_init_fv,
> + .max_cpus = HVM_MAX_VCPUS,
> + .default_machine_opts = "accel=xen",
> +};
> +
> +static void xenfv_machine_init(void)
> +{
> + qemu_register_machine(&xenfv_machine);
> +}
> +
> +machine_init(xenfv_machine_init);
>
next prev parent reply other threads:[~2011-01-26 22:56 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-25 14:29 [Qemu-devel] [PATCH V9 00/16] Xen device model support anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 01/16] xen: Replace some tab-indents with spaces (clean-up) anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 02/16] xen: Make xen build only on x86 target anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 03/16] xen: Add a generic layer for xc calls anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 22:49 ` [Qemu-devel] " Anthony Liguori
2011-01-28 15:09 ` [Xen-devel] " Anthony PERARD
2011-01-28 15:09 ` Anthony PERARD
2011-01-28 15:12 ` [Xen-devel] " Alexander Graf
2011-01-28 15:12 ` Alexander Graf
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 04/16] xen: Support new libxc calls from xen unstable anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 22:53 ` [Qemu-devel] " Anthony Liguori
2011-01-27 12:03 ` Stefano Stabellini
2011-01-27 12:03 ` Stefano Stabellini
2011-01-27 12:16 ` [Xen-devel] " Keir Fraser
2011-01-27 12:16 ` Keir Fraser
2011-01-27 12:21 ` [Xen-devel] " Stefano Stabellini
2011-01-27 12:21 ` Stefano Stabellini
2011-01-27 17:24 ` Anthony PERARD
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 05/16] xen: Add xen_machine_fv anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 22:56 ` Anthony Liguori [this message]
2011-01-27 12:04 ` [Qemu-devel] " Stefano Stabellini
2011-01-27 12:04 ` Stefano Stabellini
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 06/16] xen: Add initialisation of Xen anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 22:57 ` [Qemu-devel] " Anthony Liguori
2011-01-26 22:57 ` Anthony Liguori
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 07/16] xen: Add the Xen platform pci device anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 23:01 ` [Qemu-devel] " Anthony Liguori
2011-01-26 23:01 ` Anthony Liguori
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 08/16] piix_pci: Introduces Xen specific call for irq anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 09/16] xen: add a 8259 Interrupt Controller anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 23:04 ` [Qemu-devel] " Anthony Liguori
2011-01-26 23:04 ` Anthony Liguori
2011-01-27 17:19 ` [Qemu-devel] " Anthony PERARD
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 10/16] xen: Introduce the Xen mapcache anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 23:07 ` [Qemu-devel] " Anthony Liguori
2011-01-27 12:04 ` Stefano Stabellini
2011-01-27 12:04 ` Stefano Stabellini
2011-01-31 16:30 ` Stefano Stabellini
2011-01-31 16:30 ` Stefano Stabellini
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 11/16] configure: Always use 64bits target physical addresses with xen enabled anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 12/16] Introduce qemu_ram_ptr_unlock anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 23:10 ` [Qemu-devel] " Anthony Liguori
2011-01-26 23:10 ` Anthony Liguori
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 13/16] vl.c: Introduce getter for shutdown_requested and reset_requested anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 14/16] xen: Initialize event channels and io rings anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 15/16] xen: Set running state in xenstore anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 23:12 ` [Qemu-devel] " Anthony Liguori
2011-01-25 14:29 ` [Qemu-devel] [PATCH V9 16/16] acpi-piix4: Add Xen hypercall for sleep state anthony.perard
2011-01-25 14:29 ` anthony.perard
2011-01-26 2:49 ` [Qemu-devel] " Isaku Yamahata
2011-01-26 13:47 ` Anthony PERARD
2011-01-26 14:36 ` [Qemu-devel] Re: [PATCH V9 16/16] xen: Add Xen hypercall for sleep state in the cmos_s3 callback anthony.perard
2011-01-26 14:36 ` anthony.perard
2011-01-26 23:14 ` [Qemu-devel] " Anthony Liguori
2011-01-26 23:11 ` [Qemu-devel] [PATCH V9 16/16] acpi-piix4: Add Xen hypercall for sleep state Anthony Liguori
2011-01-26 23:11 ` Anthony Liguori
2011-01-25 14:41 ` [Qemu-devel] Re: [PATCH V9 00/16] Xen device model support Anthony PERARD
2011-01-25 14:41 ` Anthony PERARD
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=4D40A6A5.8090903@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=anthony.perard@citrix.com \
--cc=qemu-devel@nongnu.org \
--cc=stefano.stabellini@eu.citrix.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.