From: Wei Liu <wei.liu2@citrix.com> To: QEMU-devel <qemu-devel@nongnu.org> Cc: xen-devel <xen-devel@lists.xensource.com>, wei.liu2@citrix.com, Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>, Jan Kiszka <jan.kiszka@siemens.com>, "liuw@liuw.name" <liuw@liuw.name>, Paolo Bonzini <pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 2/2] Xen: Add xen-apic support and hook it up. Date: Thu, 5 Apr 2012 10:35:05 +0100 [thread overview] Message-ID: <1333618505.2513.8.camel@leeds.uk.xensource.com> (raw) In-Reply-To: <1333618350.2513.5.camel@leeds.uk.xensource.com> Signed-off-by: Wei Liu <wei.liu2@citrix.com> --- Makefile.target | 2 +- hw/pc.c | 8 +++++ hw/xen_apic.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletions(-) create mode 100644 hw/xen_apic.c diff --git a/Makefile.target b/Makefile.target index cff15f0..6210bae 100644 --- a/Makefile.target +++ b/Makefile.target @@ -235,7 +235,7 @@ QEMU_CFLAGS += $(VNC_PNG_CFLAGS) obj-$(CONFIG_XEN) += xen-all.o xen_machine_pv.o xen_domainbuild.o xen-mapcache.o obj-$(CONFIG_NO_XEN) += xen-stub.o -obj-i386-$(CONFIG_XEN) += xen_platform.o +obj-i386-$(CONFIG_XEN) += xen_platform.o xen_apic.o # Inter-VM PCI shared memory CONFIG_IVSHMEM = diff --git a/hw/pc.c b/hw/pc.c index 83a1b5b..5585cac 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -42,6 +42,7 @@ #include "sysbus.h" #include "sysemu.h" #include "kvm.h" +#include "xen.h" #include "blockdev.h" #include "ui/qemu-spice.h" #include "memory.h" @@ -891,9 +892,12 @@ static DeviceState *apic_init(void *env, uint8_t apic_id) if (kvm_irqchip_in_kernel()) { dev = qdev_create(NULL, "kvm-apic"); + } else if (xen_enabled()) { + dev = qdev_create(NULL, "xen-apic"); } else { dev = qdev_create(NULL, "apic"); } + qdev_prop_set_uint8(dev, "id", apic_id); qdev_prop_set_ptr(dev, "cpu_env", env); qdev_init_nofail(dev); @@ -912,6 +916,10 @@ static DeviceState *apic_init(void *env, uint8_t apic_id) msi_supported = true; } + if (xen_enabled()) { + msi_supported = true; + } + return dev; } diff --git a/hw/xen_apic.c b/hw/xen_apic.c new file mode 100644 index 0000000..b1060b7 --- /dev/null +++ b/hw/xen_apic.c @@ -0,0 +1,90 @@ +/* + * Xen basic APIC support + * + * Copyright (c) 2012 Citrix + * + * Authors: + * Wei Liu <wei.liu2@citrix.com> + * + * This work is licensed under the terms of the GNU GPL version 2. + * See the COPYING file in the top-level directory. + */ +#include "hw/apic_internal.h" +#include "hw/msi.h" +#include "xen.h" + +static uint64_t xen_apic_mem_read(void *opaque, target_phys_addr_t addr, + unsigned size) +{ + return -1U; +} + +static void xen_apic_mem_write(void *opaque, target_phys_addr_t addr, + uint64_t data, unsigned size) +{ + if (size != sizeof(uint32_t)) { + fprintf(stderr, "Xen: APIC write data size = %d, invalid\n", size); + return; + } + + xen_hvm_inject_msi(addr, data); +} + +static const MemoryRegionOps xen_apic_io_ops = { + .read = xen_apic_mem_read, + .write = xen_apic_mem_write, + .endianness = DEVICE_NATIVE_ENDIAN, +}; + +static void xen_apic_init(APICCommonState *s) +{ + memory_region_init_io(&s->io_memory, &xen_apic_io_ops, s, "xen-apic-msi", + MSI_SPACE_SIZE); +} + +static void xen_apic_set_base(APICCommonState *s, uint64_t val) +{ +} + +static void xen_apic_set_tpr(APICCommonState *s, uint8_t val) +{ +} + +static uint8_t xen_apic_get_tpr(APICCommonState *s) +{ + return 0; +} + +static void xen_apic_vapic_base_update(APICCommonState *s) +{ +} + +static void xen_apic_external_nmi(APICCommonState *s) +{ +} + +static void xen_apic_class_init(ObjectClass *klass, void *data) +{ + APICCommonClass *k = APIC_COMMON_CLASS(klass); + + k->init = xen_apic_init; + k->set_base = xen_apic_set_base; + k->set_tpr = xen_apic_set_tpr; + k->get_tpr = xen_apic_get_tpr; + k->vapic_base_update = xen_apic_vapic_base_update; + k->external_nmi = xen_apic_external_nmi; +} + +static TypeInfo xen_apic_info = { + .name = "xen-apic", + .parent = TYPE_APIC_COMMON, + .instance_size = sizeof(APICCommonState), + .class_init = xen_apic_class_init, +}; + +static void xen_apic_register_types(void) +{ + type_register_static(&xen_apic_info); +} + +type_init(xen_apic_register_types) -- 1.7.2.5
WARNING: multiple messages have this Message-ID (diff)
From: Wei Liu <wei.liu2@citrix.com> To: QEMU-devel <qemu-devel@nongnu.org> Cc: xen-devel <xen-devel@lists.xensource.com>, wei.liu2@citrix.com, Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>, Jan Kiszka <jan.kiszka@siemens.com>, "liuw@liuw.name" <liuw@liuw.name>, Paolo Bonzini <pbonzini@redhat.com> Subject: [PATCH 2/2] Xen: Add xen-apic support and hook it up. Date: Thu, 5 Apr 2012 10:35:05 +0100 [thread overview] Message-ID: <1333618505.2513.8.camel@leeds.uk.xensource.com> (raw) In-Reply-To: <1333618350.2513.5.camel@leeds.uk.xensource.com> Signed-off-by: Wei Liu <wei.liu2@citrix.com> --- Makefile.target | 2 +- hw/pc.c | 8 +++++ hw/xen_apic.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletions(-) create mode 100644 hw/xen_apic.c diff --git a/Makefile.target b/Makefile.target index cff15f0..6210bae 100644 --- a/Makefile.target +++ b/Makefile.target @@ -235,7 +235,7 @@ QEMU_CFLAGS += $(VNC_PNG_CFLAGS) obj-$(CONFIG_XEN) += xen-all.o xen_machine_pv.o xen_domainbuild.o xen-mapcache.o obj-$(CONFIG_NO_XEN) += xen-stub.o -obj-i386-$(CONFIG_XEN) += xen_platform.o +obj-i386-$(CONFIG_XEN) += xen_platform.o xen_apic.o # Inter-VM PCI shared memory CONFIG_IVSHMEM = diff --git a/hw/pc.c b/hw/pc.c index 83a1b5b..5585cac 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -42,6 +42,7 @@ #include "sysbus.h" #include "sysemu.h" #include "kvm.h" +#include "xen.h" #include "blockdev.h" #include "ui/qemu-spice.h" #include "memory.h" @@ -891,9 +892,12 @@ static DeviceState *apic_init(void *env, uint8_t apic_id) if (kvm_irqchip_in_kernel()) { dev = qdev_create(NULL, "kvm-apic"); + } else if (xen_enabled()) { + dev = qdev_create(NULL, "xen-apic"); } else { dev = qdev_create(NULL, "apic"); } + qdev_prop_set_uint8(dev, "id", apic_id); qdev_prop_set_ptr(dev, "cpu_env", env); qdev_init_nofail(dev); @@ -912,6 +916,10 @@ static DeviceState *apic_init(void *env, uint8_t apic_id) msi_supported = true; } + if (xen_enabled()) { + msi_supported = true; + } + return dev; } diff --git a/hw/xen_apic.c b/hw/xen_apic.c new file mode 100644 index 0000000..b1060b7 --- /dev/null +++ b/hw/xen_apic.c @@ -0,0 +1,90 @@ +/* + * Xen basic APIC support + * + * Copyright (c) 2012 Citrix + * + * Authors: + * Wei Liu <wei.liu2@citrix.com> + * + * This work is licensed under the terms of the GNU GPL version 2. + * See the COPYING file in the top-level directory. + */ +#include "hw/apic_internal.h" +#include "hw/msi.h" +#include "xen.h" + +static uint64_t xen_apic_mem_read(void *opaque, target_phys_addr_t addr, + unsigned size) +{ + return -1U; +} + +static void xen_apic_mem_write(void *opaque, target_phys_addr_t addr, + uint64_t data, unsigned size) +{ + if (size != sizeof(uint32_t)) { + fprintf(stderr, "Xen: APIC write data size = %d, invalid\n", size); + return; + } + + xen_hvm_inject_msi(addr, data); +} + +static const MemoryRegionOps xen_apic_io_ops = { + .read = xen_apic_mem_read, + .write = xen_apic_mem_write, + .endianness = DEVICE_NATIVE_ENDIAN, +}; + +static void xen_apic_init(APICCommonState *s) +{ + memory_region_init_io(&s->io_memory, &xen_apic_io_ops, s, "xen-apic-msi", + MSI_SPACE_SIZE); +} + +static void xen_apic_set_base(APICCommonState *s, uint64_t val) +{ +} + +static void xen_apic_set_tpr(APICCommonState *s, uint8_t val) +{ +} + +static uint8_t xen_apic_get_tpr(APICCommonState *s) +{ + return 0; +} + +static void xen_apic_vapic_base_update(APICCommonState *s) +{ +} + +static void xen_apic_external_nmi(APICCommonState *s) +{ +} + +static void xen_apic_class_init(ObjectClass *klass, void *data) +{ + APICCommonClass *k = APIC_COMMON_CLASS(klass); + + k->init = xen_apic_init; + k->set_base = xen_apic_set_base; + k->set_tpr = xen_apic_set_tpr; + k->get_tpr = xen_apic_get_tpr; + k->vapic_base_update = xen_apic_vapic_base_update; + k->external_nmi = xen_apic_external_nmi; +} + +static TypeInfo xen_apic_info = { + .name = "xen-apic", + .parent = TYPE_APIC_COMMON, + .instance_size = sizeof(APICCommonState), + .class_init = xen_apic_class_init, +}; + +static void xen_apic_register_types(void) +{ + type_register_static(&xen_apic_info); +} + +type_init(xen_apic_register_types) -- 1.7.2.5
next prev parent reply other threads:[~2012-04-05 9:36 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-04-05 9:32 [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Wei Liu 2012-04-05 9:32 ` Wei Liu 2012-04-05 9:34 ` [Qemu-devel] [PATCH 1/2] Xen: basic HVM MSI injection support Wei Liu 2012-04-05 9:34 ` Wei Liu 2012-04-05 9:35 ` Wei Liu [this message] 2012-04-05 9:35 ` [PATCH 2/2] Xen: Add xen-apic support and hook it up Wei Liu 2012-04-11 16:02 ` Stefano Stabellini 2012-04-11 16:01 ` Jan Kiszka 2012-04-11 16:07 ` Peter Maydell 2012-04-11 16:13 ` Jan Kiszka 2012-04-11 16:23 ` Peter Maydell 2012-04-11 16:17 ` Stefano Stabellini 2012-04-11 16:19 ` Stefano Stabellini 2012-04-11 17:02 ` Eric Blake 2012-04-12 3:23 ` [Qemu-devel] " Wei Liu 2012-04-11 21:37 ` Paolo Bonzini 2012-04-05 10:14 ` [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Paolo Bonzini 2012-04-05 10:14 ` Paolo Bonzini 2012-04-05 10:43 ` [Qemu-devel] " Stefano Stabellini 2012-04-05 10:43 ` Stefano Stabellini 2012-04-05 10:50 ` [Qemu-devel] " Paolo Bonzini 2012-04-05 10:50 ` Paolo Bonzini
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=1333618505.2513.8.camel@leeds.uk.xensource.com \ --to=wei.liu2@citrix.com \ --cc=Stefano.Stabellini@eu.citrix.com \ --cc=jan.kiszka@siemens.com \ --cc=liuw@liuw.name \ --cc=pbonzini@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: linkBe 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.