qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests
@ 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
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Wei Liu @ 2012-04-05  9:32 UTC (permalink / raw)
  To: QEMU-devel
  Cc: xen-devel, wei.liu2, Stefano Stabellini, Jan Kiszka, liuw,
	Paolo Bonzini

Implement a simple Xen APIC module and use it to deliver MSI/MSIX for
Xen HVM guests.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 1/2] Xen: basic HVM MSI injection support.
  2012-04-05  9:32 [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Wei Liu
@ 2012-04-05  9:34 ` Wei Liu
  2012-04-05  9:35 ` [Qemu-devel] [PATCH 2/2] Xen: Add xen-apic support and hook it up Wei Liu
  2012-04-05 10:14 ` [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Paolo Bonzini
  2 siblings, 0 replies; 6+ messages in thread
From: Wei Liu @ 2012-04-05  9:34 UTC (permalink / raw)
  To: QEMU-devel
  Cc: xen-devel, wei.liu2, Stefano Stabellini, Jan Kiszka,
	liuw@liuw.name, Paolo Bonzini


Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
 hw/xen.h   |    1 +
 xen-all.c  |    5 +++++
 xen-stub.c |    4 ++++
 3 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/hw/xen.h b/hw/xen.h
index b46879c..e5926b7 100644
--- a/hw/xen.h
+++ b/hw/xen.h
@@ -34,6 +34,7 @@ static inline int xen_enabled(void)
 int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num);
 void xen_piix3_set_irq(void *opaque, int irq_num, int level);
 void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int len);
+void xen_hvm_inject_msi(uint64_t addr, uint32_t data);
 void xen_cmos_set_s3_resume(void *opaque, int irq, int level);
 
 qemu_irq *xen_interrupt_controller_init(void);
diff --git a/xen-all.c b/xen-all.c
index 3e6de41..abd2b2d 100644
--- a/xen-all.c
+++ b/xen-all.c
@@ -122,6 +122,11 @@ void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int len)
     }
 }
 
+void xen_hvm_inject_msi(uint64_t addr, uint32_t data)
+{
+    xc_hvm_inject_msi(xen_xc, xen_domid, addr, data);
+}
+
 static void xen_suspend_notifier(Notifier *notifier, void *data)
 {
     xc_set_hvm_param(xen_xc, xen_domid, HVM_PARAM_ACPI_S_STATE, 3);
diff --git a/xen-stub.c b/xen-stub.c
index 9ea02d4..8ff2b79 100644
--- a/xen-stub.c
+++ b/xen-stub.c
@@ -29,6 +29,10 @@ void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int len)
 {
 }
 
+void xen_hvm_inject_msi(uint64_t addr, uint32_t data)
+{
+}
+
 void xen_cmos_set_s3_resume(void *opaque, int irq, int level)
 {
 }
-- 
1.7.2.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 2/2] Xen: Add xen-apic support and hook it up.
  2012-04-05  9:32 [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Wei Liu
  2012-04-05  9:34 ` [Qemu-devel] [PATCH 1/2] Xen: basic HVM MSI injection support Wei Liu
@ 2012-04-05  9:35 ` Wei Liu
  2012-04-05 10:14 ` [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Paolo Bonzini
  2 siblings, 0 replies; 6+ messages in thread
From: Wei Liu @ 2012-04-05  9:35 UTC (permalink / raw)
  To: QEMU-devel
  Cc: xen-devel, wei.liu2, Stefano Stabellini, Jan Kiszka,
	liuw@liuw.name, Paolo Bonzini


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

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests
  2012-04-05  9:32 [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Wei Liu
  2012-04-05  9:34 ` [Qemu-devel] [PATCH 1/2] Xen: basic HVM MSI injection support Wei Liu
  2012-04-05  9:35 ` [Qemu-devel] [PATCH 2/2] Xen: Add xen-apic support and hook it up Wei Liu
@ 2012-04-05 10:14 ` Paolo Bonzini
  2012-04-05 10:43   ` Stefano Stabellini
  2 siblings, 1 reply; 6+ messages in thread
From: Paolo Bonzini @ 2012-04-05 10:14 UTC (permalink / raw)
  To: Wei Liu; +Cc: Jan Kiszka, xen-devel, QEMU-devel, Stefano Stabellini, liuw

Il 05/04/2012 11:32, Wei Liu ha scritto:
> Implement a simple Xen APIC module and use it to deliver MSI/MSIX for
> Xen HVM guests.

Only skimmed the patch but yeah, this is what I had in mind.  Thanks!

Paolo

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests
  2012-04-05 10:14 ` [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Paolo Bonzini
@ 2012-04-05 10:43   ` Stefano Stabellini
  2012-04-05 10:50     ` Paolo Bonzini
  0 siblings, 1 reply; 6+ messages in thread
From: Stefano Stabellini @ 2012-04-05 10:43 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: xen-devel, Wei Liu (Intern), Stefano Stabellini, Jan Kiszka,
	liuw@liuw.name, QEMU-devel

On Thu, 5 Apr 2012, Paolo Bonzini wrote:
> Il 05/04/2012 11:32, Wei Liu ha scritto:
> > Implement a simple Xen APIC module and use it to deliver MSI/MSIX for
> > Xen HVM guests.
> 
> Only skimmed the patch but yeah, this is what I had in mind.  Thanks!

It looks good to me too.
Paolo, can I add your acked-by?

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests
  2012-04-05 10:43   ` Stefano Stabellini
@ 2012-04-05 10:50     ` Paolo Bonzini
  0 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2012-04-05 10:50 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Jan Kiszka, xen-devel, Wei Liu (Intern), QEMU-devel,
	liuw@liuw.name

Il 05/04/2012 12:43, Stefano Stabellini ha scritto:
>>> > > Implement a simple Xen APIC module and use it to deliver MSI/MSIX for
>>> > > Xen HVM guests.
>> > 
>> > Only skimmed the patch but yeah, this is what I had in mind.  Thanks!
> It looks good to me too.
> Paolo, can I add your acked-by?

Acked-by, yes.  Reviewed-by, no. :)

Paolo

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-04-05 10:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-05  9:32 [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Wei Liu
2012-04-05  9:34 ` [Qemu-devel] [PATCH 1/2] Xen: basic HVM MSI injection support Wei Liu
2012-04-05  9:35 ` [Qemu-devel] [PATCH 2/2] Xen: Add xen-apic support and hook it up Wei Liu
2012-04-05 10:14 ` [Qemu-devel] [PATCH 0/0] MSI/MSIX injection for Xen HVM guests Paolo Bonzini
2012-04-05 10:43   ` Stefano Stabellini
2012-04-05 10:50     ` Paolo Bonzini

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).