Re: [Xen-devel] Re: [Qemu-devel] [PATCH V10 06/15] xen: Add the Xen platform pci device
On Thu, 2011-02-24 at 17:36 +, Paolo Bonzini wrote: +/* Send bytes to syslog */ +static void log_writeb(PCIXenPlatformState *s, char val) +{ + if (val == '\n' || s-log_buffer_off == sizeof(s-log_buffer) - 1) { + /* Flush buffer */ + s-log_buffer[s-log_buffer_off] = 0; + DPRINTF(%s\n, s-log_buffer); This should go to a chardev. Or it should just go away. Guests can already write to 0xe9 and see the output on the host's xm dmesg ring and serial console. Only true if you have configured the guest log level to include debug messages. In any case host dmesg is not really the same as going to a file in dom0 from a supportability PoV. Ian.
Re: [Qemu-devel] [PATCH V10 06/15] xen: Add the Xen platform pci device
On 02/25/2011 10:58 AM, Ian Campbell wrote: Or it should just go away. Guests can already write to 0xe9 and see the output on the host's xm dmesg ring and serial console. Only true if you have configured the guest log level to include debug messages. If you can recompile QEMU to add DEBUG_PLATFORM, you can usually do that too. To avoid recompilation, rather than a chardev it would be even better to keep it as a trace event. Paolo
Re: [Xen-devel] Re: [Qemu-devel] [PATCH V10 06/15] xen: Add the Xen platform pci device
On Fri, Feb 25, 2011 at 10:54, Paolo Bonzini pbonz...@redhat.com wrote: On 02/25/2011 10:58 AM, Ian Campbell wrote: Or it should just go away. Guests can already write to 0xe9 and see the output on the host's xm dmesg ring and serial console. Only true if you have configured the guest log level to include debug messages. If you can recompile QEMU to add DEBUG_PLATFORM, you can usually do that too. To avoid recompilation, rather than a chardev it would be even better to keep it as a trace event. The trace event seems a good idea, let's go for that! Regards, -- Anthony PERARD
Re: [Qemu-devel] [PATCH V10 06/15] xen: Add the Xen platform pci device
On 02/02/2011 08:49 AM, anthony.per...@citrix.com wrote: From: Steven Smithssm...@xensource.com Introduce a new emulated PCI device, specific to fully virtualized Xen guests. The device is necessary for PV on HVM drivers to work. Signed-off-by: Steven Smithssm...@xensource.com Signed-off-by: Anthony PERARDanthony.per...@citrix.com Signed-off-by: Stefano Stabellinistefano.stabell...@eu.citrix.com --- Makefile.target |1 + hw/hw.h |3 + hw/pc_piix.c |4 + hw/pci_ids.h |2 + hw/xen.h |2 + hw/xen_platform.c | 348 + xen-stub.c|4 + 7 files changed, 364 insertions(+), 0 deletions(-) create mode 100644 hw/xen_platform.c diff --git a/Makefile.target b/Makefile.target index 00bb690..7a4fd72 100644 --- a/Makefile.target +++ b/Makefile.target @@ -215,6 +215,7 @@ obj-$(CONFIG_NO_XEN) += xen-stub.o 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 +obj-i386-$(CONFIG_XEN) += xen_platform.o # Inter-VM PCI shared memory obj-$(CONFIG_KVM) += ivshmem.o diff --git a/hw/hw.h b/hw/hw.h index dd993de..298df31 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -672,6 +672,9 @@ extern const VMStateDescription vmstate_i2c_slave; #define VMSTATE_INT32_LE(_f, _s) \ VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_le, int32_t) +#define VMSTATE_UINT8_TEST(_f, _s, _t) \ +VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint8, uint8_t) + #define VMSTATE_UINT16_TEST(_f, _s, _t) \ VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint16, uint16_t) diff --git a/hw/pc_piix.c b/hw/pc_piix.c index 0ab8907..765877c 100644 --- a/hw/pc_piix.c +++ b/hw/pc_piix.c @@ -120,6 +120,10 @@ static void pc_init1(ram_addr_t ram_size, pc_vga_init(pci_enabled? pci_bus: NULL); +if (xen_enabled()) { +pci_xen_platform_init(pci_bus); +} + /* init basic PC hardware */ pc_basic_device_init(isa_irq,floppy_controller,rtc_state); diff --git a/hw/pci_ids.h b/hw/pci_ids.h index ea3418c..6e9eabc 100644 --- a/hw/pci_ids.h +++ b/hw/pci_ids.h @@ -108,3 +108,5 @@ #define PCI_DEVICE_ID_INTEL_82371AB 0x7111 #define PCI_DEVICE_ID_INTEL_82371AB_20x7112 #define PCI_DEVICE_ID_INTEL_82371AB_30x7113 + +#define PCI_VENDOR_ID_XENSOURCE 0x5853 diff --git a/hw/xen.h b/hw/xen.h index 3984069..53a2ca4 100644 --- a/hw/xen.h +++ b/hw/xen.h @@ -29,6 +29,8 @@ static inline int xen_enabled(void) #endif } +void pci_xen_platform_init(PCIBus *bus); + int xen_init(int smp_cpus); #if defined(CONFIG_XEN) CONFIG_XEN_CTRL_INTERFACE_VERSION 400 diff --git a/hw/xen_platform.c b/hw/xen_platform.c new file mode 100644 index 000..383cfcf --- /dev/null +++ b/hw/xen_platform.c @@ -0,0 +1,348 @@ +/* + * XEN platform pci device, formerly known as the event channel device + * + * Copyright (c) 2003-2004 Intel Corp. + * Copyright (c) 2006 XenSource + * + * 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 irq.h +#include xen_common.h +#include net.h +#include xen_backend.h +#include qemu-log.h +#include rwhandler.h + +#includeassert.h +#includexenguest.h + +//#define DEBUG_PLATFORM + +#ifdef DEBUG_PLATFORM +#define DPRINTF(fmt, ...) do { \ +fprintf(stderr, xen_platform: fmt, ## __VA_ARGS__); \ +} while (0) +#else +#define DPRINTF(fmt, ...) do { } while (0) +#endif + +#define PFFLAG_ROM_LOCK 1 /* Sets whether ROM memory area is RW or RO */ + +typedef struct PCIXenPlatformState { +PCIDevice pci_dev; +uint8_t flags; /* used only for version_id == 2 */ +int drivers_blacklisted; +uint16_t driver_product_version; + +/* Log from guest drivers */ +char log_buffer[4096]; +
Re: [Qemu-devel] [PATCH V10 06/15] xen: Add the Xen platform pci device
On 02/24/2011 06:33 PM, Anthony Liguori wrote: On 02/02/2011 08:49 AM, anthony.per...@citrix.com wrote: From: Steven Smithssm...@xensource.com Introduce a new emulated PCI device, specific to fully virtualized Xen guests. The device is necessary for PV on HVM drivers to work. Signed-off-by: Steven Smithssm...@xensource.com Signed-off-by: Anthony PERARDanthony.per...@citrix.com Signed-off-by: Stefano Stabellinistefano.stabell...@eu.citrix.com --- Makefile.target | 1 + hw/hw.h | 3 + hw/pc_piix.c | 4 + hw/pci_ids.h | 2 + hw/xen.h | 2 + hw/xen_platform.c | 348 + xen-stub.c | 4 + 7 files changed, 364 insertions(+), 0 deletions(-) create mode 100644 hw/xen_platform.c diff --git a/Makefile.target b/Makefile.target index 00bb690..7a4fd72 100644 --- a/Makefile.target +++ b/Makefile.target @@ -215,6 +215,7 @@ obj-$(CONFIG_NO_XEN) += xen-stub.o 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 +obj-i386-$(CONFIG_XEN) += xen_platform.o # Inter-VM PCI shared memory obj-$(CONFIG_KVM) += ivshmem.o diff --git a/hw/hw.h b/hw/hw.h index dd993de..298df31 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -672,6 +672,9 @@ extern const VMStateDescription vmstate_i2c_slave; #define VMSTATE_INT32_LE(_f, _s) \ VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_le, int32_t) +#define VMSTATE_UINT8_TEST(_f, _s, _t) \ + VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint8, uint8_t) + #define VMSTATE_UINT16_TEST(_f, _s, _t) \ VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint16, uint16_t) diff --git a/hw/pc_piix.c b/hw/pc_piix.c index 0ab8907..765877c 100644 --- a/hw/pc_piix.c +++ b/hw/pc_piix.c @@ -120,6 +120,10 @@ static void pc_init1(ram_addr_t ram_size, pc_vga_init(pci_enabled? pci_bus: NULL); + if (xen_enabled()) { + pci_xen_platform_init(pci_bus); + } + /* init basic PC hardware */ pc_basic_device_init(isa_irq,floppy_controller,rtc_state); diff --git a/hw/pci_ids.h b/hw/pci_ids.h index ea3418c..6e9eabc 100644 --- a/hw/pci_ids.h +++ b/hw/pci_ids.h @@ -108,3 +108,5 @@ #define PCI_DEVICE_ID_INTEL_82371AB 0x7111 #define PCI_DEVICE_ID_INTEL_82371AB_2 0x7112 #define PCI_DEVICE_ID_INTEL_82371AB_3 0x7113 + +#define PCI_VENDOR_ID_XENSOURCE 0x5853 diff --git a/hw/xen.h b/hw/xen.h index 3984069..53a2ca4 100644 --- a/hw/xen.h +++ b/hw/xen.h @@ -29,6 +29,8 @@ static inline int xen_enabled(void) #endif } +void pci_xen_platform_init(PCIBus *bus); + int xen_init(int smp_cpus); #if defined(CONFIG_XEN) CONFIG_XEN_CTRL_INTERFACE_VERSION 400 diff --git a/hw/xen_platform.c b/hw/xen_platform.c new file mode 100644 index 000..383cfcf --- /dev/null +++ b/hw/xen_platform.c @@ -0,0 +1,348 @@ +/* + * XEN platform pci device, formerly known as the event channel device + * + * Copyright (c) 2003-2004 Intel Corp. + * Copyright (c) 2006 XenSource + * + * 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 irq.h +#include xen_common.h +#include net.h +#include xen_backend.h +#include qemu-log.h +#include rwhandler.h + +#includeassert.h +#includexenguest.h + +//#define DEBUG_PLATFORM + +#ifdef DEBUG_PLATFORM +#define DPRINTF(fmt, ...) do { \ + fprintf(stderr, xen_platform: fmt, ## __VA_ARGS__); \ +} while (0) +#else +#define DPRINTF(fmt, ...) do { } while (0) +#endif + +#define PFFLAG_ROM_LOCK 1 /* Sets whether ROM memory area is RW or RO */ + +typedef struct PCIXenPlatformState { + PCIDevice pci_dev; + uint8_t flags; /* used only for version_id == 2 */ + int drivers_blacklisted; + uint16_t driver_product_version; + + /* Log from guest drivers */ + char log_buffer[4096]; + int log_buffer_off; +} PCIXenPlatformState; + +#define XEN_PLATFORM_IOPORT 0x10 + +/* Send bytes to syslog */ +static void log_writeb(PCIXenPlatformState *s, char val) +{ + if (val == '\n' || s-log_buffer_off == sizeof(s-log_buffer) - 1) { +
[Qemu-devel] [PATCH V10 06/15] xen: Add the Xen platform pci device
From: Steven Smith ssm...@xensource.com Introduce a new emulated PCI device, specific to fully virtualized Xen guests. The device is necessary for PV on HVM drivers to work. Signed-off-by: Steven Smith ssm...@xensource.com Signed-off-by: Anthony PERARD anthony.per...@citrix.com Signed-off-by: Stefano Stabellini stefano.stabell...@eu.citrix.com --- Makefile.target |1 + hw/hw.h |3 + hw/pc_piix.c |4 + hw/pci_ids.h |2 + hw/xen.h |2 + hw/xen_platform.c | 348 + xen-stub.c|4 + 7 files changed, 364 insertions(+), 0 deletions(-) create mode 100644 hw/xen_platform.c diff --git a/Makefile.target b/Makefile.target index 00bb690..7a4fd72 100644 --- a/Makefile.target +++ b/Makefile.target @@ -215,6 +215,7 @@ obj-$(CONFIG_NO_XEN) += xen-stub.o 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 +obj-i386-$(CONFIG_XEN) += xen_platform.o # Inter-VM PCI shared memory obj-$(CONFIG_KVM) += ivshmem.o diff --git a/hw/hw.h b/hw/hw.h index dd993de..298df31 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -672,6 +672,9 @@ extern const VMStateDescription vmstate_i2c_slave; #define VMSTATE_INT32_LE(_f, _s) \ VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_le, int32_t) +#define VMSTATE_UINT8_TEST(_f, _s, _t) \ +VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint8, uint8_t) + #define VMSTATE_UINT16_TEST(_f, _s, _t) \ VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint16, uint16_t) diff --git a/hw/pc_piix.c b/hw/pc_piix.c index 0ab8907..765877c 100644 --- a/hw/pc_piix.c +++ b/hw/pc_piix.c @@ -120,6 +120,10 @@ static void pc_init1(ram_addr_t ram_size, pc_vga_init(pci_enabled? pci_bus: NULL); +if (xen_enabled()) { +pci_xen_platform_init(pci_bus); +} + /* init basic PC hardware */ pc_basic_device_init(isa_irq, floppy_controller, rtc_state); diff --git a/hw/pci_ids.h b/hw/pci_ids.h index ea3418c..6e9eabc 100644 --- a/hw/pci_ids.h +++ b/hw/pci_ids.h @@ -108,3 +108,5 @@ #define PCI_DEVICE_ID_INTEL_82371AB 0x7111 #define PCI_DEVICE_ID_INTEL_82371AB_20x7112 #define PCI_DEVICE_ID_INTEL_82371AB_30x7113 + +#define PCI_VENDOR_ID_XENSOURCE 0x5853 diff --git a/hw/xen.h b/hw/xen.h index 3984069..53a2ca4 100644 --- a/hw/xen.h +++ b/hw/xen.h @@ -29,6 +29,8 @@ static inline int xen_enabled(void) #endif } +void pci_xen_platform_init(PCIBus *bus); + int xen_init(int smp_cpus); #if defined(CONFIG_XEN) CONFIG_XEN_CTRL_INTERFACE_VERSION 400 diff --git a/hw/xen_platform.c b/hw/xen_platform.c new file mode 100644 index 000..383cfcf --- /dev/null +++ b/hw/xen_platform.c @@ -0,0 +1,348 @@ +/* + * XEN platform pci device, formerly known as the event channel device + * + * Copyright (c) 2003-2004 Intel Corp. + * Copyright (c) 2006 XenSource + * + * 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 irq.h +#include xen_common.h +#include net.h +#include xen_backend.h +#include qemu-log.h +#include rwhandler.h + +#include assert.h +#include xenguest.h + +//#define DEBUG_PLATFORM + +#ifdef DEBUG_PLATFORM +#define DPRINTF(fmt, ...) do { \ +fprintf(stderr, xen_platform: fmt, ## __VA_ARGS__); \ +} while (0) +#else +#define DPRINTF(fmt, ...) do { } while (0) +#endif + +#define PFFLAG_ROM_LOCK 1 /* Sets whether ROM memory area is RW or RO */ + +typedef struct PCIXenPlatformState { +PCIDevice pci_dev; +uint8_t flags; /* used only for version_id == 2 */ +int drivers_blacklisted; +uint16_t driver_product_version; + +/* Log from guest drivers */ +char log_buffer[4096]; +int log_buffer_off; +} PCIXenPlatformState; + +#define