* [PATCH v3] Add support for pvpanic pci device @ 2021-01-15 18:34 Mihai Carabas 2021-01-15 18:34 ` [PATCH 1/4] hw/misc/pvpanic: split-out generic and bus dependent code Mihai Carabas ` (4 more replies) 0 siblings, 5 replies; 19+ messages in thread From: Mihai Carabas @ 2021-01-15 18:34 UTC (permalink / raw) To: qemu-devel; +Cc: Mihai Carabas, peter.maydell, kraxel This patchset adds support for pvpanic pci device. v3 applied feedback: - patch 1: made pvpanic isa device available only for PC, compile pvpanic-test only when isa device is present - patch 2: fixed device id to 0x0011, used OBJECT_DECLARE_TYPE, PVPANIC_PCI_DEVICE, added VMSTATE_PCI_DEVICE, removed INTERFACE_PCIE_DEVICE - patch 3: fixed documentation - patch 4: add a qtest for pvpanic-pci Mihai Carabas (4): hw/misc/pvpanic: split-out generic and bus dependent code hw/misc/pvpanic: add PCI interface support pvpanic : update pvpanic spec document tests/qtest: add a test case for pvpanic-pci docs/specs/pci-ids.txt | 1 + docs/specs/pvpanic.txt | 13 +++++- hw/i386/Kconfig | 2 +- hw/misc/Kconfig | 12 +++++- hw/misc/meson.build | 4 +- hw/misc/pvpanic-isa.c | 94 ++++++++++++++++++++++++++++++++++++++++++ hw/misc/pvpanic-pci.c | 94 ++++++++++++++++++++++++++++++++++++++++++ hw/misc/pvpanic.c | 85 +++----------------------------------- include/hw/misc/pvpanic.h | 24 ++++++++++- include/hw/pci/pci.h | 1 + tests/qtest/meson.build | 3 +- tests/qtest/pvpanic-pci-test.c | 62 ++++++++++++++++++++++++++++ 12 files changed, 309 insertions(+), 86 deletions(-) create mode 100644 hw/misc/pvpanic-isa.c create mode 100644 hw/misc/pvpanic-pci.c create mode 100644 tests/qtest/pvpanic-pci-test.c -- 1.8.3.1 ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 1/4] hw/misc/pvpanic: split-out generic and bus dependent code 2021-01-15 18:34 [PATCH v3] Add support for pvpanic pci device Mihai Carabas @ 2021-01-15 18:34 ` Mihai Carabas 2021-01-19 13:12 ` Peter Maydell 2021-01-15 18:34 ` [PATCH 2/4] hw/misc/pvpanic: add PCI interface support Mihai Carabas ` (3 subsequent siblings) 4 siblings, 1 reply; 19+ messages in thread From: Mihai Carabas @ 2021-01-15 18:34 UTC (permalink / raw) To: qemu-devel; +Cc: Mihai Carabas, peter.maydell, kraxel To ease the PCI device addition in next patches, split the code as follows: - generic code (read/write/setup) is being kept in pvpanic.c - ISA dependent code moved to pvpanic-isa.c Also, rename: - ISA_PVPANIC_DEVICE -> PVPANIC_ISA_DEVICE. - TYPE_PVPANIC -> TYPE_PVPANIC_ISA. - MemoryRegion io -> mr. - pvpanic_ioport_* in pvpanic_*. Update the build system with the new files and config structure. Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> --- hw/i386/Kconfig | 2 +- hw/misc/Kconfig | 6 ++- hw/misc/meson.build | 3 +- hw/misc/pvpanic-isa.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++ hw/misc/pvpanic.c | 85 +++--------------------------------------- include/hw/misc/pvpanic.h | 23 +++++++++++- tests/qtest/meson.build | 2 +- 7 files changed, 130 insertions(+), 85 deletions(-) create mode 100644 hw/misc/pvpanic-isa.c diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index eea059f..7f91f30 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -14,7 +14,7 @@ config PC imply ISA_DEBUG imply PARALLEL imply PCI_DEVICES - imply PVPANIC + imply PVPANIC_ISA imply QXL imply SEV imply SGA diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index cf18ac0..23bc978 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -121,9 +121,13 @@ config IOTKIT_SYSCTL config IOTKIT_SYSINFO bool -config PVPANIC +config PVPANIC_COMMON + bool + +config PVPANIC_ISA bool depends on ISA_BUS + select PVPANIC_COMMON config AUX bool diff --git a/hw/misc/meson.build b/hw/misc/meson.build index ce15ffc..8c828ad 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -13,6 +13,7 @@ softmmu_ss.add(when: 'CONFIG_EMC141X', if_true: files('emc141x.c')) softmmu_ss.add(when: 'CONFIG_UNIMP', if_true: files('unimp.c')) softmmu_ss.add(when: 'CONFIG_EMPTY_SLOT', if_true: files('empty_slot.c')) softmmu_ss.add(when: 'CONFIG_LED', if_true: files('led.c')) +softmmu_ss.add(when: 'CONFIG_PVPANIC_COMMON', if_true: files('pvpanic.c')) # ARM devices softmmu_ss.add(when: 'CONFIG_PL310', if_true: files('arm_l2x0.c')) @@ -97,7 +98,7 @@ softmmu_ss.add(when: 'CONFIG_IOTKIT_SYSINFO', if_true: files('iotkit-sysinfo.c') softmmu_ss.add(when: 'CONFIG_ARMSSE_CPUID', if_true: files('armsse-cpuid.c')) softmmu_ss.add(when: 'CONFIG_ARMSSE_MHU', if_true: files('armsse-mhu.c')) -softmmu_ss.add(when: 'CONFIG_PVPANIC', if_true: files('pvpanic.c')) +softmmu_ss.add(when: 'CONFIG_PVPANIC_ISA', if_true: files('pvpanic-isa.c')) softmmu_ss.add(when: 'CONFIG_AUX', if_true: files('auxbus.c')) softmmu_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('aspeed_scu.c', 'aspeed_sdmc.c', 'aspeed_xdma.c')) softmmu_ss.add(when: 'CONFIG_MSF2', if_true: files('msf2-sysreg.c')) diff --git a/hw/misc/pvpanic-isa.c b/hw/misc/pvpanic-isa.c new file mode 100644 index 0000000..27113ab --- /dev/null +++ b/hw/misc/pvpanic-isa.c @@ -0,0 +1,94 @@ +/* + * QEMU simulated pvpanic device. + * + * Copyright Fujitsu, Corp. 2013 + * + * Authors: + * Wen Congyang <wency@cn.fujitsu.com> + * Hu Tao <hutao@cn.fujitsu.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "sysemu/runstate.h" + +#include "hw/nvram/fw_cfg.h" +#include "hw/qdev-properties.h" +#include "hw/misc/pvpanic.h" +#include "qom/object.h" +#include "hw/isa/isa.h" + +OBJECT_DECLARE_SIMPLE_TYPE(PVPanicISAState, PVPANIC_ISA_DEVICE) + +/* + * PVPanicISAState for ISA device and + * use ioport. + */ +struct PVPanicISAState { + ISADevice parent_obj; + + uint16_t ioport; + PVPanicState pvpanic; +}; + +static void pvpanic_isa_initfn(Object *obj) +{ + PVPanicISAState *s = PVPANIC_ISA_DEVICE(obj); + + pvpanic_setup_io(&s->pvpanic, DEVICE(s), 1); +} + +static void pvpanic_isa_realizefn(DeviceState *dev, Error **errp) +{ + ISADevice *d = ISA_DEVICE(dev); + PVPanicISAState *s = PVPANIC_ISA_DEVICE(dev); + PVPanicState *ps = &s->pvpanic; + FWCfgState *fw_cfg = fw_cfg_find(); + uint16_t *pvpanic_port; + + if (!fw_cfg) { + return; + } + + pvpanic_port = g_malloc(sizeof(*pvpanic_port)); + *pvpanic_port = cpu_to_le16(s->ioport); + fw_cfg_add_file(fw_cfg, "etc/pvpanic-port", pvpanic_port, + sizeof(*pvpanic_port)); + + isa_register_ioport(d, &ps->mr, s->ioport); +} + +static Property pvpanic_isa_properties[] = { + DEFINE_PROP_UINT16(PVPANIC_IOPORT_PROP, PVPanicISAState, ioport, 0x505), + DEFINE_PROP_UINT8("events", PVPanicISAState, pvpanic.events, PVPANIC_PANICKED | PVPANIC_CRASHLOADED), + DEFINE_PROP_END_OF_LIST(), +}; + +static void pvpanic_isa_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + + dc->realize = pvpanic_isa_realizefn; + device_class_set_props(dc, pvpanic_isa_properties); + set_bit(DEVICE_CATEGORY_MISC, dc->categories); +} + +static TypeInfo pvpanic_isa_info = { + .name = TYPE_PVPANIC_ISA_DEVICE, + .parent = TYPE_ISA_DEVICE, + .instance_size = sizeof(PVPanicISAState), + .instance_init = pvpanic_isa_initfn, + .class_init = pvpanic_isa_class_init, +}; + +static void pvpanic_register_types(void) +{ + type_register_static(&pvpanic_isa_info); +} + +type_init(pvpanic_register_types) diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c index 35d6797..e2cb4a5 100644 --- a/hw/misc/pvpanic.c +++ b/hw/misc/pvpanic.c @@ -22,18 +22,6 @@ #include "hw/misc/pvpanic.h" #include "qom/object.h" -/* The bit of supported pv event, TODO: include uapi header and remove this */ -#define PVPANIC_F_PANICKED 0 -#define PVPANIC_F_CRASHLOADED 1 - -/* The pv event value */ -#define PVPANIC_PANICKED (1 << PVPANIC_F_PANICKED) -#define PVPANIC_CRASHLOADED (1 << PVPANIC_F_CRASHLOADED) - -typedef struct PVPanicState PVPanicState; -DECLARE_INSTANCE_CHECKER(PVPanicState, ISA_PVPANIC_DEVICE, - TYPE_PVPANIC) - static void handle_event(int event) { static bool logged; @@ -54,90 +42,29 @@ static void handle_event(int event) } } -#include "hw/isa/isa.h" - -struct PVPanicState { - ISADevice parent_obj; - - MemoryRegion io; - uint16_t ioport; - uint8_t events; -}; - /* return supported events on read */ -static uint64_t pvpanic_ioport_read(void *opaque, hwaddr addr, unsigned size) +static uint64_t pvpanic_read(void *opaque, hwaddr addr, unsigned size) { PVPanicState *pvp = opaque; return pvp->events; } -static void pvpanic_ioport_write(void *opaque, hwaddr addr, uint64_t val, +static void pvpanic_write(void *opaque, hwaddr addr, uint64_t val, unsigned size) { handle_event(val); } static const MemoryRegionOps pvpanic_ops = { - .read = pvpanic_ioport_read, - .write = pvpanic_ioport_write, + .read = pvpanic_read, + .write = pvpanic_write, .impl = { .min_access_size = 1, .max_access_size = 1, }, }; -static void pvpanic_isa_initfn(Object *obj) -{ - PVPanicState *s = ISA_PVPANIC_DEVICE(obj); - - memory_region_init_io(&s->io, OBJECT(s), &pvpanic_ops, s, "pvpanic", 1); -} - -static void pvpanic_isa_realizefn(DeviceState *dev, Error **errp) -{ - ISADevice *d = ISA_DEVICE(dev); - PVPanicState *s = ISA_PVPANIC_DEVICE(dev); - FWCfgState *fw_cfg = fw_cfg_find(); - uint16_t *pvpanic_port; - - if (!fw_cfg) { - return; - } - - pvpanic_port = g_malloc(sizeof(*pvpanic_port)); - *pvpanic_port = cpu_to_le16(s->ioport); - fw_cfg_add_file(fw_cfg, "etc/pvpanic-port", pvpanic_port, - sizeof(*pvpanic_port)); - - isa_register_ioport(d, &s->io, s->ioport); -} - -static Property pvpanic_isa_properties[] = { - DEFINE_PROP_UINT16(PVPANIC_IOPORT_PROP, PVPanicState, ioport, 0x505), - DEFINE_PROP_UINT8("events", PVPanicState, events, PVPANIC_PANICKED | PVPANIC_CRASHLOADED), - DEFINE_PROP_END_OF_LIST(), -}; - -static void pvpanic_isa_class_init(ObjectClass *klass, void *data) +void pvpanic_setup_io(PVPanicState *s, DeviceState *dev, unsigned size) { - DeviceClass *dc = DEVICE_CLASS(klass); - - dc->realize = pvpanic_isa_realizefn; - device_class_set_props(dc, pvpanic_isa_properties); - set_bit(DEVICE_CATEGORY_MISC, dc->categories); + memory_region_init_io(&s->mr, OBJECT(dev), &pvpanic_ops, s, "pvpanic", size); } - -static TypeInfo pvpanic_isa_info = { - .name = TYPE_PVPANIC, - .parent = TYPE_ISA_DEVICE, - .instance_size = sizeof(PVPanicState), - .instance_init = pvpanic_isa_initfn, - .class_init = pvpanic_isa_class_init, -}; - -static void pvpanic_register_types(void) -{ - type_register_static(&pvpanic_isa_info); -} - -type_init(pvpanic_register_types) diff --git a/include/hw/misc/pvpanic.h b/include/hw/misc/pvpanic.h index ae0c818..abc9dde 100644 --- a/include/hw/misc/pvpanic.h +++ b/include/hw/misc/pvpanic.h @@ -17,13 +17,32 @@ #include "qom/object.h" -#define TYPE_PVPANIC "pvpanic" +#define TYPE_PVPANIC_ISA_DEVICE "pvpanic" #define PVPANIC_IOPORT_PROP "ioport" +/* The bit of supported pv event, TODO: include uapi header and remove this */ +#define PVPANIC_F_PANICKED 0 +#define PVPANIC_F_CRASHLOADED 1 + +/* The pv event value */ +#define PVPANIC_PANICKED (1 << PVPANIC_F_PANICKED) +#define PVPANIC_CRASHLOADED (1 << PVPANIC_F_CRASHLOADED) + +/* + * PVPanicState for any device type + */ +typedef struct PVPanicState PVPanicState; +struct PVPanicState { + MemoryRegion mr; + uint8_t events; +}; + +void pvpanic_setup_io(PVPanicState *s, DeviceState *dev, unsigned size); + static inline uint16_t pvpanic_port(void) { - Object *o = object_resolve_path_type("", TYPE_PVPANIC, NULL); + Object *o = object_resolve_path_type("", TYPE_PVPANIC_ISA_DEVICE, NULL); if (!o) { return 0; } diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 6a67c53..b050289 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -33,7 +33,7 @@ qtests_i386 = \ (config_host.has_key('CONFIG_LINUX') and \ config_all_devices.has_key('CONFIG_ISA_IPMI_BT') ? ['ipmi-bt-test'] : []) + \ (config_all_devices.has_key('CONFIG_WDT_IB700') ? ['wdt_ib700-test'] : []) + \ - (config_all_devices.has_key('CONFIG_PVPANIC') ? ['pvpanic-test'] : []) + \ + (config_all_devices.has_key('CONFIG_PVPANIC_ISA') ? ['pvpanic-test'] : []) + \ (config_all_devices.has_key('CONFIG_HDA') ? ['intel-hda-test'] : []) + \ (config_all_devices.has_key('CONFIG_I82801B11') ? ['i82801b11-test'] : []) + \ (config_all_devices.has_key('CONFIG_IOH3420') ? ['ioh3420-test'] : []) + \ -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 1/4] hw/misc/pvpanic: split-out generic and bus dependent code 2021-01-15 18:34 ` [PATCH 1/4] hw/misc/pvpanic: split-out generic and bus dependent code Mihai Carabas @ 2021-01-19 13:12 ` Peter Maydell 0 siblings, 0 replies; 19+ messages in thread From: Peter Maydell @ 2021-01-19 13:12 UTC (permalink / raw) To: Mihai Carabas; +Cc: QEMU Developers, Gerd Hoffmann On Fri, 15 Jan 2021 at 19:21, Mihai Carabas <mihai.carabas@oracle.com> wrote: > > To ease the PCI device addition in next patches, split the code as follows: > - generic code (read/write/setup) is being kept in pvpanic.c > - ISA dependent code moved to pvpanic-isa.c > > Also, rename: > - ISA_PVPANIC_DEVICE -> PVPANIC_ISA_DEVICE. > - TYPE_PVPANIC -> TYPE_PVPANIC_ISA. > - MemoryRegion io -> mr. > - pvpanic_ioport_* in pvpanic_*. > > Update the build system with the new files and config structure. > > Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 2/4] hw/misc/pvpanic: add PCI interface support 2021-01-15 18:34 [PATCH v3] Add support for pvpanic pci device Mihai Carabas 2021-01-15 18:34 ` [PATCH 1/4] hw/misc/pvpanic: split-out generic and bus dependent code Mihai Carabas @ 2021-01-15 18:34 ` Mihai Carabas 2021-01-18 10:00 ` Gerd Hoffmann ` (2 more replies) 2021-01-15 18:34 ` [PATCH 3/4] pvpanic : update pvpanic spec document Mihai Carabas ` (2 subsequent siblings) 4 siblings, 3 replies; 19+ messages in thread From: Mihai Carabas @ 2021-01-15 18:34 UTC (permalink / raw) To: qemu-devel; +Cc: Mihai Carabas, peter.maydell, kraxel Add PCI interface support for PVPANIC device. Create a new file pvpanic-pci.c where the PCI specific routines reside and update the build system with the new files and config structure. Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> --- docs/specs/pci-ids.txt | 1 + hw/misc/Kconfig | 6 +++ hw/misc/meson.build | 1 + hw/misc/pvpanic-pci.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++ include/hw/misc/pvpanic.h | 1 + include/hw/pci/pci.h | 1 + 6 files changed, 104 insertions(+) create mode 100644 hw/misc/pvpanic-pci.c diff --git a/docs/specs/pci-ids.txt b/docs/specs/pci-ids.txt index abbdbca..5e407a6 100644 --- a/docs/specs/pci-ids.txt +++ b/docs/specs/pci-ids.txt @@ -64,6 +64,7 @@ PCI devices (other than virtio): 1b36:000d PCI xhci usb host adapter 1b36:000f mdpy (mdev sample device), linux/samples/vfio-mdev/mdpy.c 1b36:0010 PCIe NVMe device (-device nvme) +1b36:0011 PCI PVPanic device (-device pvpanic-pci) All these devices are documented in docs/specs. diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 23bc978..19c216f 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -124,6 +124,12 @@ config IOTKIT_SYSINFO config PVPANIC_COMMON bool +config PVPANIC_PCI + bool + default y if PCI_DEVICES + depends on PCI + select PVPANIC_COMMON + config PVPANIC_ISA bool depends on ISA_BUS diff --git a/hw/misc/meson.build b/hw/misc/meson.build index 8c828ad..f686019 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -99,6 +99,7 @@ softmmu_ss.add(when: 'CONFIG_ARMSSE_CPUID', if_true: files('armsse-cpuid.c')) softmmu_ss.add(when: 'CONFIG_ARMSSE_MHU', if_true: files('armsse-mhu.c')) softmmu_ss.add(when: 'CONFIG_PVPANIC_ISA', if_true: files('pvpanic-isa.c')) +softmmu_ss.add(when: 'CONFIG_PVPANIC_PCI', if_true: files('pvpanic-pci.c')) softmmu_ss.add(when: 'CONFIG_AUX', if_true: files('auxbus.c')) softmmu_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('aspeed_scu.c', 'aspeed_sdmc.c', 'aspeed_xdma.c')) softmmu_ss.add(when: 'CONFIG_MSF2', if_true: files('msf2-sysreg.c')) diff --git a/hw/misc/pvpanic-pci.c b/hw/misc/pvpanic-pci.c new file mode 100644 index 0000000..d629639 --- /dev/null +++ b/hw/misc/pvpanic-pci.c @@ -0,0 +1,94 @@ +/* + * QEMU simulated PCI pvpanic device. + * + * Copyright (C) 2020 Oracle + * + * Authors: + * Mihai Carabas <mihai.carabas@oracle.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "sysemu/runstate.h" + +#include "hw/nvram/fw_cfg.h" +#include "hw/qdev-properties.h" +#include "migration/vmstate.h" +#include "hw/misc/pvpanic.h" +#include "qom/object.h" +#include "hw/pci/pci.h" + +OBJECT_DECLARE_SIMPLE_TYPE(PVPanicPCIState, PVPANIC_PCI_DEVICE) + +/* + * PVPanicPCIState for PCI device + */ +typedef struct PVPanicPCIState { + PCIDevice dev; + PVPanicState pvpanic; +} PVPanicPCIState; + +static const VMStateDescription vmstate_pvpanic_pci = { + .name = "pvpanic-pci", + .version_id = 1, + .minimum_version_id = 1, + .fields = (VMStateField[]) { + VMSTATE_PCI_DEVICE(dev, PVPanicPCIState), + VMSTATE_END_OF_LIST() + } +}; + +static void pvpanic_pci_realizefn(PCIDevice *dev, Error **errp) +{ + PVPanicPCIState *s = PVPANIC_PCI_DEVICE(dev); + PVPanicState *ps = &s->pvpanic; + + pvpanic_setup_io(&s->pvpanic, DEVICE(s), 2); + + pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &ps->mr); +} + +static Property pvpanic_pci_properties[] = { + DEFINE_PROP_UINT8("events", PVPanicPCIState, pvpanic.events, PVPANIC_PANICKED | PVPANIC_CRASHLOADED), + DEFINE_PROP_END_OF_LIST(), +}; + +static void pvpanic_pci_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + PCIDeviceClass *pc = PCI_DEVICE_CLASS(klass); + + device_class_set_props(dc, pvpanic_pci_properties); + + pc->realize = pvpanic_pci_realizefn; + pc->vendor_id = PCI_VENDOR_ID_REDHAT; + pc->device_id = PCI_DEVICE_ID_REDHAT_PVPANIC; + pc->revision = 1; + pc->class_id = PCI_CLASS_SYSTEM_OTHER; + dc->vmsd = &vmstate_pvpanic_pci; + + set_bit(DEVICE_CATEGORY_MISC, dc->categories); +} + +static TypeInfo pvpanic_pci_info = { + .name = TYPE_PVPANIC_PCI_DEVICE, + .parent = TYPE_PCI_DEVICE, + .instance_size = sizeof(PVPanicPCIState), + .class_init = pvpanic_pci_class_init, + .interfaces = (InterfaceInfo[]) { + { INTERFACE_CONVENTIONAL_PCI_DEVICE }, + { } + } +}; + +static void pvpanic_register_types(void) +{ + type_register_static(&pvpanic_pci_info); +} + +type_init(pvpanic_register_types); diff --git a/include/hw/misc/pvpanic.h b/include/hw/misc/pvpanic.h index abc9dde..ca3c5bb 100644 --- a/include/hw/misc/pvpanic.h +++ b/include/hw/misc/pvpanic.h @@ -18,6 +18,7 @@ #include "qom/object.h" #define TYPE_PVPANIC_ISA_DEVICE "pvpanic" +#define TYPE_PVPANIC_PCI_DEVICE "pvpanic-pci" #define PVPANIC_IOPORT_PROP "ioport" diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 259f9c9..66db084 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -107,6 +107,7 @@ extern bool pci_available; #define PCI_DEVICE_ID_REDHAT_PCIE_BRIDGE 0x000e #define PCI_DEVICE_ID_REDHAT_MDPY 0x000f #define PCI_DEVICE_ID_REDHAT_NVME 0x0010 +#define PCI_DEVICE_ID_REDHAT_PVPANIC 0x0011 #define PCI_DEVICE_ID_REDHAT_QXL 0x0100 #define FMT_PCIBUS PRIx64 -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] hw/misc/pvpanic: add PCI interface support 2021-01-15 18:34 ` [PATCH 2/4] hw/misc/pvpanic: add PCI interface support Mihai Carabas @ 2021-01-18 10:00 ` Gerd Hoffmann 2021-01-19 13:14 ` Peter Maydell 2021-01-20 11:57 ` Yan Vugenfirer 2 siblings, 0 replies; 19+ messages in thread From: Gerd Hoffmann @ 2021-01-18 10:00 UTC (permalink / raw) To: Mihai Carabas; +Cc: peter.maydell, qemu-devel > --- a/docs/specs/pci-ids.txt > +++ b/docs/specs/pci-ids.txt > @@ -64,6 +64,7 @@ PCI devices (other than virtio): > 1b36:000d PCI xhci usb host adapter > 1b36:000f mdpy (mdev sample device), linux/samples/vfio-mdev/mdpy.c > 1b36:0010 PCIe NVMe device (-device nvme) > +1b36:0011 PCI PVPanic device (-device pvpanic-pci) > > All these devices are documented in docs/specs. > > diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h > index 259f9c9..66db084 100644 > --- a/include/hw/pci/pci.h > +++ b/include/hw/pci/pci.h > @@ -107,6 +107,7 @@ extern bool pci_available; > #define PCI_DEVICE_ID_REDHAT_PCIE_BRIDGE 0x000e > #define PCI_DEVICE_ID_REDHAT_MDPY 0x000f > #define PCI_DEVICE_ID_REDHAT_NVME 0x0010 > +#define PCI_DEVICE_ID_REDHAT_PVPANIC 0x0011 > #define PCI_DEVICE_ID_REDHAT_QXL 0x0100 Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> take care, Gerd ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] hw/misc/pvpanic: add PCI interface support 2021-01-15 18:34 ` [PATCH 2/4] hw/misc/pvpanic: add PCI interface support Mihai Carabas 2021-01-18 10:00 ` Gerd Hoffmann @ 2021-01-19 13:14 ` Peter Maydell 2021-01-20 11:57 ` Yan Vugenfirer 2 siblings, 0 replies; 19+ messages in thread From: Peter Maydell @ 2021-01-19 13:14 UTC (permalink / raw) To: Mihai Carabas; +Cc: QEMU Developers, Gerd Hoffmann On Fri, 15 Jan 2021 at 19:23, Mihai Carabas <mihai.carabas@oracle.com> wrote: > > Add PCI interface support for PVPANIC device. Create a new file pvpanic-pci.c > where the PCI specific routines reside and update the build system with the new > files and config structure. > > Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] hw/misc/pvpanic: add PCI interface support 2021-01-15 18:34 ` [PATCH 2/4] hw/misc/pvpanic: add PCI interface support Mihai Carabas 2021-01-18 10:00 ` Gerd Hoffmann 2021-01-19 13:14 ` Peter Maydell @ 2021-01-20 11:57 ` Yan Vugenfirer 2021-01-20 12:49 ` Mihai Carabas 2021-01-20 13:43 ` Gerd Hoffmann 2 siblings, 2 replies; 19+ messages in thread From: Yan Vugenfirer @ 2021-01-20 11:57 UTC (permalink / raw) To: Mihai Carabas; +Cc: peter.maydell, QEMU Devel Mailing List, kraxel > On 15 Jan 2021, at 8:34 PM, Mihai Carabas <mihai.carabas@oracle.com> wrote: > > Add PCI interface support for PVPANIC device. Create a new file pvpanic-pci.c > where the PCI specific routines reside and update the build system with the new > files and config structure. > > Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> > --- > docs/specs/pci-ids.txt | 1 + > hw/misc/Kconfig | 6 +++ > hw/misc/meson.build | 1 + > hw/misc/pvpanic-pci.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++ > include/hw/misc/pvpanic.h | 1 + > include/hw/pci/pci.h | 1 + > 6 files changed, 104 insertions(+) > create mode 100644 hw/misc/pvpanic-pci.c > > diff --git a/docs/specs/pci-ids.txt b/docs/specs/pci-ids.txt > index abbdbca..5e407a6 100644 > --- a/docs/specs/pci-ids.txt > +++ b/docs/specs/pci-ids.txt > @@ -64,6 +64,7 @@ PCI devices (other than virtio): > 1b36:000d PCI xhci usb host adapter > 1b36:000f mdpy (mdev sample device), linux/samples/vfio-mdev/mdpy.c > 1b36:0010 PCIe NVMe device (-device nvme) > +1b36:0011 PCI PVPanic device (-device pvpanic-pci) > > All these devices are documented in docs/specs. > > diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig > index 23bc978..19c216f 100644 > --- a/hw/misc/Kconfig > +++ b/hw/misc/Kconfig > @@ -124,6 +124,12 @@ config IOTKIT_SYSINFO > config PVPANIC_COMMON > bool > > +config PVPANIC_PCI > + bool > + default y if PCI_DEVICES > + depends on PCI > + select PVPANIC_COMMON > + > config PVPANIC_ISA > bool > depends on ISA_BUS > diff --git a/hw/misc/meson.build b/hw/misc/meson.build > index 8c828ad..f686019 100644 > --- a/hw/misc/meson.build > +++ b/hw/misc/meson.build > @@ -99,6 +99,7 @@ softmmu_ss.add(when: 'CONFIG_ARMSSE_CPUID', if_true: files('armsse-cpuid.c')) > softmmu_ss.add(when: 'CONFIG_ARMSSE_MHU', if_true: files('armsse-mhu.c')) > > softmmu_ss.add(when: 'CONFIG_PVPANIC_ISA', if_true: files('pvpanic-isa.c')) > +softmmu_ss.add(when: 'CONFIG_PVPANIC_PCI', if_true: files('pvpanic-pci.c')) > softmmu_ss.add(when: 'CONFIG_AUX', if_true: files('auxbus.c')) > softmmu_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('aspeed_scu.c', 'aspeed_sdmc.c', 'aspeed_xdma.c')) > softmmu_ss.add(when: 'CONFIG_MSF2', if_true: files('msf2-sysreg.c')) > diff --git a/hw/misc/pvpanic-pci.c b/hw/misc/pvpanic-pci.c > new file mode 100644 > index 0000000..d629639 > --- /dev/null > +++ b/hw/misc/pvpanic-pci.c > @@ -0,0 +1,94 @@ > +/* > + * QEMU simulated PCI pvpanic device. > + * > + * Copyright (C) 2020 Oracle > + * > + * Authors: > + * Mihai Carabas <mihai.carabas@oracle.com> > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + * > + */ > + > +#include "qemu/osdep.h" > +#include "qemu/log.h" > +#include "qemu/module.h" > +#include "sysemu/runstate.h" > + > +#include "hw/nvram/fw_cfg.h" > +#include "hw/qdev-properties.h" > +#include "migration/vmstate.h" > +#include "hw/misc/pvpanic.h" > +#include "qom/object.h" > +#include "hw/pci/pci.h" > + > +OBJECT_DECLARE_SIMPLE_TYPE(PVPanicPCIState, PVPANIC_PCI_DEVICE) > + > +/* > + * PVPanicPCIState for PCI device > + */ > +typedef struct PVPanicPCIState { > + PCIDevice dev; > + PVPanicState pvpanic; > +} PVPanicPCIState; > + > +static const VMStateDescription vmstate_pvpanic_pci = { > + .name = "pvpanic-pci", > + .version_id = 1, > + .minimum_version_id = 1, > + .fields = (VMStateField[]) { > + VMSTATE_PCI_DEVICE(dev, PVPanicPCIState), > + VMSTATE_END_OF_LIST() > + } > +}; > + > +static void pvpanic_pci_realizefn(PCIDevice *dev, Error **errp) > +{ > + PVPanicPCIState *s = PVPANIC_PCI_DEVICE(dev); > + PVPanicState *ps = &s->pvpanic; > + > + pvpanic_setup_io(&s->pvpanic, DEVICE(s), 2); > + > + pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &ps->mr); > +} > + > +static Property pvpanic_pci_properties[] = { > + DEFINE_PROP_UINT8("events", PVPanicPCIState, pvpanic.events, PVPANIC_PANICKED | PVPANIC_CRASHLOADED), > + DEFINE_PROP_END_OF_LIST(), > +}; > + > +static void pvpanic_pci_class_init(ObjectClass *klass, void *data) > +{ > + DeviceClass *dc = DEVICE_CLASS(klass); > + PCIDeviceClass *pc = PCI_DEVICE_CLASS(klass); > + > + device_class_set_props(dc, pvpanic_pci_properties); > + > + pc->realize = pvpanic_pci_realizefn; > + pc->vendor_id = PCI_VENDOR_ID_REDHAT; > + pc->device_id = PCI_DEVICE_ID_REDHAT_PVPANIC; Please fill out subsystem and subsystem vendor IDs as well: pc->subsystem_vendor_id pc->subsystem_id It is needed in order to pass MS WHQL tests. Requirement name “Device.Connectivity.PciConnected.SubsystemIdsRequired” in "Windows Hardware Compatibility Specifications – Components and Peripherals” document. https://docs.microsoft.com/en-us/windows-hardware/design/compatibility/whcp-specifications-policies Thanks, Yan. > + pc->revision = 1; > + pc->class_id = PCI_CLASS_SYSTEM_OTHER; > + dc->vmsd = &vmstate_pvpanic_pci; > + > + set_bit(DEVICE_CATEGORY_MISC, dc->categories); > +} > + > +static TypeInfo pvpanic_pci_info = { > + .name = TYPE_PVPANIC_PCI_DEVICE, > + .parent = TYPE_PCI_DEVICE, > + .instance_size = sizeof(PVPanicPCIState), > + .class_init = pvpanic_pci_class_init, > + .interfaces = (InterfaceInfo[]) { > + { INTERFACE_CONVENTIONAL_PCI_DEVICE }, > + { } > + } > +}; > + > +static void pvpanic_register_types(void) > +{ > + type_register_static(&pvpanic_pci_info); > +} > + > +type_init(pvpanic_register_types); > diff --git a/include/hw/misc/pvpanic.h b/include/hw/misc/pvpanic.h > index abc9dde..ca3c5bb 100644 > --- a/include/hw/misc/pvpanic.h > +++ b/include/hw/misc/pvpanic.h > @@ -18,6 +18,7 @@ > #include "qom/object.h" > > #define TYPE_PVPANIC_ISA_DEVICE "pvpanic" > +#define TYPE_PVPANIC_PCI_DEVICE "pvpanic-pci" > > #define PVPANIC_IOPORT_PROP "ioport" > > diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h > index 259f9c9..66db084 100644 > --- a/include/hw/pci/pci.h > +++ b/include/hw/pci/pci.h > @@ -107,6 +107,7 @@ extern bool pci_available; > #define PCI_DEVICE_ID_REDHAT_PCIE_BRIDGE 0x000e > #define PCI_DEVICE_ID_REDHAT_MDPY 0x000f > #define PCI_DEVICE_ID_REDHAT_NVME 0x0010 > +#define PCI_DEVICE_ID_REDHAT_PVPANIC 0x0011 > #define PCI_DEVICE_ID_REDHAT_QXL 0x0100 > > #define FMT_PCIBUS PRIx64 > -- > 1.8.3.1 > > ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] hw/misc/pvpanic: add PCI interface support 2021-01-20 11:57 ` Yan Vugenfirer @ 2021-01-20 12:49 ` Mihai Carabas 2021-01-20 13:43 ` Gerd Hoffmann 1 sibling, 0 replies; 19+ messages in thread From: Mihai Carabas @ 2021-01-20 12:49 UTC (permalink / raw) To: Yan Vugenfirer; +Cc: peter.maydell, QEMU Devel Mailing List, kraxel >> + device_class_set_props(dc, pvpanic_pci_properties); >> + >> + pc->realize = pvpanic_pci_realizefn; >> + pc->vendor_id = PCI_VENDOR_ID_REDHAT; >> + pc->device_id = PCI_DEVICE_ID_REDHAT_PVPANIC; > Please fill out subsystem and subsystem vendor IDs as well: > pc->subsystem_vendor_id > pc->subsystem_id Will send v5 now with these info filled out. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] hw/misc/pvpanic: add PCI interface support 2021-01-20 11:57 ` Yan Vugenfirer 2021-01-20 12:49 ` Mihai Carabas @ 2021-01-20 13:43 ` Gerd Hoffmann 2021-01-20 14:05 ` Mihai Carabas 1 sibling, 1 reply; 19+ messages in thread From: Gerd Hoffmann @ 2021-01-20 13:43 UTC (permalink / raw) To: Yan Vugenfirer; +Cc: Mihai Carabas, peter.maydell, QEMU Devel Mailing List Hi, > > + pc->realize = pvpanic_pci_realizefn; > > + pc->vendor_id = PCI_VENDOR_ID_REDHAT; > > + pc->device_id = PCI_DEVICE_ID_REDHAT_PVPANIC; > > Please fill out subsystem and subsystem vendor IDs as well: > pc->subsystem_vendor_id > pc->subsystem_id Not needed, when left blank they are set to the default qemu subsystem id (1af4:1100) by the pci core. take care, Gerd ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] hw/misc/pvpanic: add PCI interface support 2021-01-20 13:43 ` Gerd Hoffmann @ 2021-01-20 14:05 ` Mihai Carabas 0 siblings, 0 replies; 19+ messages in thread From: Mihai Carabas @ 2021-01-20 14:05 UTC (permalink / raw) To: Gerd Hoffmann, Yan Vugenfirer; +Cc: peter.maydell, QEMU Devel Mailing List La 20.01.2021 15:43, Gerd Hoffmann a scris: > Hi, > >>> + pc->realize = pvpanic_pci_realizefn; >>> + pc->vendor_id = PCI_VENDOR_ID_REDHAT; >>> + pc->device_id = PCI_DEVICE_ID_REDHAT_PVPANIC; >> Please fill out subsystem and subsystem vendor IDs as well: >> pc->subsystem_vendor_id >> pc->subsystem_id > Not needed, when left blank they are set to the default > qemu subsystem id (1af4:1100) by the pci core. Thank you! @Peter: You can grab v4 if this is not needed. ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 3/4] pvpanic : update pvpanic spec document 2021-01-15 18:34 [PATCH v3] Add support for pvpanic pci device Mihai Carabas 2021-01-15 18:34 ` [PATCH 1/4] hw/misc/pvpanic: split-out generic and bus dependent code Mihai Carabas 2021-01-15 18:34 ` [PATCH 2/4] hw/misc/pvpanic: add PCI interface support Mihai Carabas @ 2021-01-15 18:34 ` Mihai Carabas 2021-01-18 10:32 ` Philippe Mathieu-Daudé 2021-01-19 13:17 ` Peter Maydell 2021-01-15 18:34 ` [PATCH 4/4] tests/qtest: add a test case for pvpanic-pci Mihai Carabas 2021-01-19 13:29 ` [PATCH v3] Add support for pvpanic pci device Peter Maydell 4 siblings, 2 replies; 19+ messages in thread From: Mihai Carabas @ 2021-01-15 18:34 UTC (permalink / raw) To: qemu-devel; +Cc: Mihai Carabas, peter.maydell, kraxel Add pvpanic PCI device support details in docs/specs/pvpanic.txt. Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> --- docs/specs/pvpanic.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/specs/pvpanic.txt b/docs/specs/pvpanic.txt index a90fbca..974aafd 100644 --- a/docs/specs/pvpanic.txt +++ b/docs/specs/pvpanic.txt @@ -1,7 +1,7 @@ PVPANIC DEVICE ============== -pvpanic device is a simulated ISA device, through which a guest panic +pvpanic device is a simulated device, through which a guest panic event is sent to qemu, and a QMP event is generated. This allows management apps (e.g. libvirt) to be notified and respond to the event. @@ -9,6 +9,9 @@ The management app has the option of waiting for GUEST_PANICKED events, and/or polling for guest-panicked RunState, to learn when the pvpanic device has fired a panic event. +The pvpanic device can be implemented as an ISA device (using IOPORT) or as a +PCI device. + ISA Interface ------------- @@ -24,6 +27,14 @@ bit 1: a guest panic has happened and will be handled by the guest; the host should record it or report it, but should not affect the execution of the guest. +PCI Interface +------------- + +The PCI interface is similar to the ISA interface except that it uses an MMIO +address space provided by its BAR0, 1 byte long. Any machine with a PCI device +can enable a pvpanic device by adding '-device pvpanic-pci' to the command +line. + ACPI Interface -------------- -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] pvpanic : update pvpanic spec document 2021-01-15 18:34 ` [PATCH 3/4] pvpanic : update pvpanic spec document Mihai Carabas @ 2021-01-18 10:32 ` Philippe Mathieu-Daudé 2021-01-18 14:36 ` Mihai Carabas 2021-01-19 13:17 ` Peter Maydell 1 sibling, 1 reply; 19+ messages in thread From: Philippe Mathieu-Daudé @ 2021-01-18 10:32 UTC (permalink / raw) To: Mihai Carabas, qemu-devel; +Cc: peter.maydell, kraxel On 1/15/21 7:34 PM, Mihai Carabas wrote: > Add pvpanic PCI device support details in docs/specs/pvpanic.txt. > > Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> > --- > docs/specs/pvpanic.txt | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/docs/specs/pvpanic.txt b/docs/specs/pvpanic.txt > index a90fbca..974aafd 100644 > --- a/docs/specs/pvpanic.txt > +++ b/docs/specs/pvpanic.txt > @@ -1,7 +1,7 @@ > PVPANIC DEVICE > ============== > > -pvpanic device is a simulated ISA device, through which a guest panic > +pvpanic device is a simulated device, through which a guest panic > event is sent to qemu, and a QMP event is generated. This allows > management apps (e.g. libvirt) to be notified and respond to the event. > > @@ -9,6 +9,9 @@ The management app has the option of waiting for GUEST_PANICKED events, > and/or polling for guest-panicked RunState, to learn when the pvpanic > device has fired a panic event. > > +The pvpanic device can be implemented as an ISA device (using IOPORT) or as a > +PCI device. > + > ISA Interface > ------------- > > @@ -24,6 +27,14 @@ bit 1: a guest panic has happened and will be handled by the guest; > the host should record it or report it, but should not affect > the execution of the guest. > > +PCI Interface > +------------- > + > +The PCI interface is similar to the ISA interface except that it uses an MMIO > +address space provided by its BAR0, 1 byte long. Any machine with a PCI device "device" -> "bus"? > +can enable a pvpanic device by adding '-device pvpanic-pci' to the command > +line. > + > ACPI Interface > -------------- > > ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] pvpanic : update pvpanic spec document 2021-01-18 10:32 ` Philippe Mathieu-Daudé @ 2021-01-18 14:36 ` Mihai Carabas 0 siblings, 0 replies; 19+ messages in thread From: Mihai Carabas @ 2021-01-18 14:36 UTC (permalink / raw) To: Philippe Mathieu-Daudé, qemu-devel; +Cc: peter.maydell, kraxel La 18.01.2021 12:32, Philippe Mathieu-Daudé a scris: > On 1/15/21 7:34 PM, Mihai Carabas wrote: >> Add pvpanic PCI device support details in docs/specs/pvpanic.txt. >> >> Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> >> --- >> docs/specs/pvpanic.txt | 13 ++++++++++++- >> 1 file changed, 12 insertions(+), 1 deletion(-) >> >> diff --git a/docs/specs/pvpanic.txt b/docs/specs/pvpanic.txt >> index a90fbca..974aafd 100644 >> --- a/docs/specs/pvpanic.txt >> +++ b/docs/specs/pvpanic.txt >> @@ -1,7 +1,7 @@ >> PVPANIC DEVICE >> ============== >> >> -pvpanic device is a simulated ISA device, through which a guest panic >> +pvpanic device is a simulated device, through which a guest panic >> event is sent to qemu, and a QMP event is generated. This allows >> management apps (e.g. libvirt) to be notified and respond to the event. >> >> @@ -9,6 +9,9 @@ The management app has the option of waiting for GUEST_PANICKED events, >> and/or polling for guest-panicked RunState, to learn when the pvpanic >> device has fired a panic event. >> >> +The pvpanic device can be implemented as an ISA device (using IOPORT) or as a >> +PCI device. >> + >> ISA Interface >> ------------- >> >> @@ -24,6 +27,14 @@ bit 1: a guest panic has happened and will be handled by the guest; >> the host should record it or report it, but should not affect >> the execution of the guest. >> >> +PCI Interface >> +------------- >> + >> +The PCI interface is similar to the ISA interface except that it uses an MMIO >> +address space provided by its BAR0, 1 byte long. Any machine with a PCI device > > "device" -> "bus"? You are right. I will update. Thanks! > >> +can enable a pvpanic device by adding '-device pvpanic-pci' to the command >> +line. >> + >> ACPI Interface >> -------------- >> >> > ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/4] pvpanic : update pvpanic spec document 2021-01-15 18:34 ` [PATCH 3/4] pvpanic : update pvpanic spec document Mihai Carabas 2021-01-18 10:32 ` Philippe Mathieu-Daudé @ 2021-01-19 13:17 ` Peter Maydell 1 sibling, 0 replies; 19+ messages in thread From: Peter Maydell @ 2021-01-19 13:17 UTC (permalink / raw) To: Mihai Carabas; +Cc: QEMU Developers, Gerd Hoffmann On Fri, 15 Jan 2021 at 19:23, Mihai Carabas <mihai.carabas@oracle.com> wrote: > > Add pvpanic PCI device support details in docs/specs/pvpanic.txt. > > Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> > --- > docs/specs/pvpanic.txt | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/docs/specs/pvpanic.txt b/docs/specs/pvpanic.txt > index a90fbca..974aafd 100644 > --- a/docs/specs/pvpanic.txt > +++ b/docs/specs/pvpanic.txt > @@ -1,7 +1,7 @@ > PVPANIC DEVICE > ============== > > -pvpanic device is a simulated ISA device, through which a guest panic > +pvpanic device is a simulated device, through which a guest panic > event is sent to qemu, and a QMP event is generated. This allows > management apps (e.g. libvirt) to be notified and respond to the event. > > @@ -9,6 +9,9 @@ The management app has the option of waiting for GUEST_PANICKED events, > and/or polling for guest-panicked RunState, to learn when the pvpanic > device has fired a panic event. > > +The pvpanic device can be implemented as an ISA device (using IOPORT) or as a > +PCI device. > + > ISA Interface > ------------- > > @@ -24,6 +27,14 @@ bit 1: a guest panic has happened and will be handled by the guest; > the host should record it or report it, but should not affect > the execution of the guest. > > +PCI Interface > +------------- > + > +The PCI interface is similar to the ISA interface except that it uses an MMIO > +address space provided by its BAR0, 1 byte long. Any machine with a PCI device > +can enable a pvpanic device by adding '-device pvpanic-pci' to the command > +line. > + Other than the s/device/bus/ that Philippe pointed out, Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 4/4] tests/qtest: add a test case for pvpanic-pci 2021-01-15 18:34 [PATCH v3] Add support for pvpanic pci device Mihai Carabas ` (2 preceding siblings ...) 2021-01-15 18:34 ` [PATCH 3/4] pvpanic : update pvpanic spec document Mihai Carabas @ 2021-01-15 18:34 ` Mihai Carabas 2021-01-18 7:42 ` Thomas Huth 2021-01-19 13:16 ` Peter Maydell 2021-01-19 13:29 ` [PATCH v3] Add support for pvpanic pci device Peter Maydell 4 siblings, 2 replies; 19+ messages in thread From: Mihai Carabas @ 2021-01-15 18:34 UTC (permalink / raw) To: qemu-devel; +Cc: Mihai Carabas, peter.maydell, kraxel Add a test case for pvpanic-pci device. The scenario is the same as pvpapnic ISA device, but is using the PCI bus. Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> --- tests/qtest/meson.build | 1 + tests/qtest/pvpanic-pci-test.c | 62 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 tests/qtest/pvpanic-pci-test.c diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index b050289..f689cad 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -20,6 +20,7 @@ endif qtests_pci = \ (config_all_devices.has_key('CONFIG_VGA') ? ['display-vga-test'] : []) + \ + (config_all_devices.has_key('CONFIG_PVPANIC_PCI') ? ['pvpanic-pci-test'] : []) + \ (config_all_devices.has_key('CONFIG_IVSHMEM_DEVICE') ? ['ivshmem-test'] : []) qtests_i386 = \ diff --git a/tests/qtest/pvpanic-pci-test.c b/tests/qtest/pvpanic-pci-test.c new file mode 100644 index 0000000..79b8065 --- /dev/null +++ b/tests/qtest/pvpanic-pci-test.c @@ -0,0 +1,62 @@ +/* + * QTest testcase for PV Panic PCI device + * + * Copyright (C) 2020 Oracle + * + * Authors: + * Mihai Carabas <mihai.carabas@oracle.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "libqos/libqtest.h" +#include "qapi/qmp/qdict.h" +#include "libqos/pci.h" +#include "libqos/pci-pc.h" +#include "hw/pci/pci_regs.h" + +static void test_panic(void) +{ + uint8_t val; + QDict *response, *data; + QTestState *qts; + QPCIBus *pcibus; + QPCIDevice *dev; + QPCIBar bar; + + qts = qtest_init("-device pvpanic-pci"); + pcibus = qpci_new_pc(qts, NULL); + dev = qpci_device_find(pcibus, QPCI_DEVFN(0x4, 0x0)); + qpci_device_enable(dev); + bar = qpci_iomap(dev, 0, NULL); + + qpci_memread(dev, bar, 0, &val, sizeof(val)); + g_assert_cmpuint(val, ==, 3); + + val = 1; + qpci_memwrite(dev, bar, 0, &val, sizeof(val)); + + response = qtest_qmp_eventwait_ref(qts, "GUEST_PANICKED"); + g_assert(qdict_haskey(response, "data")); + data = qdict_get_qdict(response, "data"); + g_assert(qdict_haskey(data, "action")); + g_assert_cmpstr(qdict_get_str(data, "action"), ==, "pause"); + qobject_unref(response); + + qtest_quit(qts); +} + +int main(int argc, char **argv) +{ + int ret; + + g_test_init(&argc, &argv, NULL); + qtest_add_func("/pvpanic-pci/panic", test_panic); + + ret = g_test_run(); + + return ret; +} -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 4/4] tests/qtest: add a test case for pvpanic-pci 2021-01-15 18:34 ` [PATCH 4/4] tests/qtest: add a test case for pvpanic-pci Mihai Carabas @ 2021-01-18 7:42 ` Thomas Huth 2021-01-19 13:16 ` Peter Maydell 1 sibling, 0 replies; 19+ messages in thread From: Thomas Huth @ 2021-01-18 7:42 UTC (permalink / raw) To: Mihai Carabas, qemu-devel; +Cc: peter.maydell, kraxel On 15/01/2021 19.34, Mihai Carabas wrote: > Add a test case for pvpanic-pci device. The scenario is the same as pvpapnic > ISA device, but is using the PCI bus. > > Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> > --- > tests/qtest/meson.build | 1 + > tests/qtest/pvpanic-pci-test.c | 62 ++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 63 insertions(+) > create mode 100644 tests/qtest/pvpanic-pci-test.c > > diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build > index b050289..f689cad 100644 > --- a/tests/qtest/meson.build > +++ b/tests/qtest/meson.build > @@ -20,6 +20,7 @@ endif > > qtests_pci = \ > (config_all_devices.has_key('CONFIG_VGA') ? ['display-vga-test'] : []) + \ > + (config_all_devices.has_key('CONFIG_PVPANIC_PCI') ? ['pvpanic-pci-test'] : []) + \ > (config_all_devices.has_key('CONFIG_IVSHMEM_DEVICE') ? ['ivshmem-test'] : []) > > qtests_i386 = \ > diff --git a/tests/qtest/pvpanic-pci-test.c b/tests/qtest/pvpanic-pci-test.c > new file mode 100644 > index 0000000..79b8065 > --- /dev/null > +++ b/tests/qtest/pvpanic-pci-test.c > @@ -0,0 +1,62 @@ > +/* > + * QTest testcase for PV Panic PCI device > + * > + * Copyright (C) 2020 Oracle > + * > + * Authors: > + * Mihai Carabas <mihai.carabas@oracle.com> > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + * > + */ > + > +#include "qemu/osdep.h" > +#include "libqos/libqtest.h" > +#include "qapi/qmp/qdict.h" > +#include "libqos/pci.h" > +#include "libqos/pci-pc.h" > +#include "hw/pci/pci_regs.h" > + > +static void test_panic(void) > +{ > + uint8_t val; > + QDict *response, *data; > + QTestState *qts; > + QPCIBus *pcibus; > + QPCIDevice *dev; > + QPCIBar bar; > + > + qts = qtest_init("-device pvpanic-pci"); > + pcibus = qpci_new_pc(qts, NULL); > + dev = qpci_device_find(pcibus, QPCI_DEVFN(0x4, 0x0)); > + qpci_device_enable(dev); > + bar = qpci_iomap(dev, 0, NULL); > + > + qpci_memread(dev, bar, 0, &val, sizeof(val)); > + g_assert_cmpuint(val, ==, 3); > + > + val = 1; > + qpci_memwrite(dev, bar, 0, &val, sizeof(val)); > + > + response = qtest_qmp_eventwait_ref(qts, "GUEST_PANICKED"); > + g_assert(qdict_haskey(response, "data")); > + data = qdict_get_qdict(response, "data"); > + g_assert(qdict_haskey(data, "action")); > + g_assert_cmpstr(qdict_get_str(data, "action"), ==, "pause"); > + qobject_unref(response); > + > + qtest_quit(qts); > +} > + > +int main(int argc, char **argv) > +{ > + int ret; > + > + g_test_init(&argc, &argv, NULL); > + qtest_add_func("/pvpanic-pci/panic", test_panic); > + > + ret = g_test_run(); > + > + return ret; > +} > Acked-by: Thomas Huth <thuth@redhat.com> ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 4/4] tests/qtest: add a test case for pvpanic-pci 2021-01-15 18:34 ` [PATCH 4/4] tests/qtest: add a test case for pvpanic-pci Mihai Carabas 2021-01-18 7:42 ` Thomas Huth @ 2021-01-19 13:16 ` Peter Maydell 1 sibling, 0 replies; 19+ messages in thread From: Peter Maydell @ 2021-01-19 13:16 UTC (permalink / raw) To: Mihai Carabas; +Cc: QEMU Developers, Gerd Hoffmann On Fri, 15 Jan 2021 at 19:23, Mihai Carabas <mihai.carabas@oracle.com> wrote: > > Add a test case for pvpanic-pci device. The scenario is the same as pvpapnic "pvpanic" > ISA device, but is using the PCI bus. > > Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com> Otherwise Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3] Add support for pvpanic pci device 2021-01-15 18:34 [PATCH v3] Add support for pvpanic pci device Mihai Carabas ` (3 preceding siblings ...) 2021-01-15 18:34 ` [PATCH 4/4] tests/qtest: add a test case for pvpanic-pci Mihai Carabas @ 2021-01-19 13:29 ` Peter Maydell 2021-01-19 15:44 ` Peter Maydell 4 siblings, 1 reply; 19+ messages in thread From: Peter Maydell @ 2021-01-19 13:29 UTC (permalink / raw) To: Mihai Carabas; +Cc: QEMU Developers, Gerd Hoffmann On Fri, 15 Jan 2021 at 19:21, Mihai Carabas <mihai.carabas@oracle.com> wrote: > > This patchset adds support for pvpanic pci device. > > v3 applied feedback: > > - patch 1: made pvpanic isa device available only for PC, compile pvpanic-test > only when isa device is present > > - patch 2: fixed device id to 0x0011, used OBJECT_DECLARE_TYPE, > PVPANIC_PCI_DEVICE, added VMSTATE_PCI_DEVICE, removed INTERFACE_PCIE_DEVICE > > - patch 3: fixed documentation > > - patch 4: add a qtest for pvpanic-pci > > Mihai Carabas (4): > hw/misc/pvpanic: split-out generic and bus dependent code > hw/misc/pvpanic: add PCI interface support > pvpanic : update pvpanic spec document > tests/qtest: add a test case for pvpanic-pci Since the only issue in this version was a minor thinko in the docs, I'm going to apply this to target-arm.next and make that s/device/bus/ docs fix there. (target-arm seems like a reasonable queue to use since the main reason for having this device is for the virt board.) thanks -- PMM ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3] Add support for pvpanic pci device 2021-01-19 13:29 ` [PATCH v3] Add support for pvpanic pci device Peter Maydell @ 2021-01-19 15:44 ` Peter Maydell 0 siblings, 0 replies; 19+ messages in thread From: Peter Maydell @ 2021-01-19 15:44 UTC (permalink / raw) To: Mihai Carabas; +Cc: QEMU Developers, Gerd Hoffmann On Tue, 19 Jan 2021 at 13:29, Peter Maydell <peter.maydell@linaro.org> wrote: > > On Fri, 15 Jan 2021 at 19:21, Mihai Carabas <mihai.carabas@oracle.com> wrote: > > > > This patchset adds support for pvpanic pci device. > > > > v3 applied feedback: > > > > - patch 1: made pvpanic isa device available only for PC, compile pvpanic-test > > only when isa device is present > > > > - patch 2: fixed device id to 0x0011, used OBJECT_DECLARE_TYPE, > > PVPANIC_PCI_DEVICE, added VMSTATE_PCI_DEVICE, removed INTERFACE_PCIE_DEVICE > > > > - patch 3: fixed documentation > > > > - patch 4: add a qtest for pvpanic-pci > > > > Mihai Carabas (4): > > hw/misc/pvpanic: split-out generic and bus dependent code > > hw/misc/pvpanic: add PCI interface support > > pvpanic : update pvpanic spec document > > tests/qtest: add a test case for pvpanic-pci > > Since the only issue in this version was a minor thinko in > the docs, I'm going to apply this to target-arm.next and > make that s/device/bus/ docs fix there. (target-arm seems like > a reasonable queue to use since the main reason for having > this device is for the virt board.) It turns out that the new pvpanic-pci-test fails for i386 targets: Running test qtest-i386/pvpanic-pci-test ** ERROR:../../tests/qtest/pvpanic-pci-test.c:46:test_panic: assertion failed (qdict_get_str(data, "action") == "pause"): ("poweroff" == "pause") ERROR qtest-i386/pvpanic-pci-test - Bail out! ERROR:../../tests/qtest/pvpanic-pci-test.c:46:test_panic: assertion failed (qdict_get_str(data, "action") == "pause"): ("poweroff" == "pause") So I'm dropping it from my target-arm.next queue; could you investigate the issue, please? thanks -- PMM ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2021-01-20 14:09 UTC | newest] Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-01-15 18:34 [PATCH v3] Add support for pvpanic pci device Mihai Carabas 2021-01-15 18:34 ` [PATCH 1/4] hw/misc/pvpanic: split-out generic and bus dependent code Mihai Carabas 2021-01-19 13:12 ` Peter Maydell 2021-01-15 18:34 ` [PATCH 2/4] hw/misc/pvpanic: add PCI interface support Mihai Carabas 2021-01-18 10:00 ` Gerd Hoffmann 2021-01-19 13:14 ` Peter Maydell 2021-01-20 11:57 ` Yan Vugenfirer 2021-01-20 12:49 ` Mihai Carabas 2021-01-20 13:43 ` Gerd Hoffmann 2021-01-20 14:05 ` Mihai Carabas 2021-01-15 18:34 ` [PATCH 3/4] pvpanic : update pvpanic spec document Mihai Carabas 2021-01-18 10:32 ` Philippe Mathieu-Daudé 2021-01-18 14:36 ` Mihai Carabas 2021-01-19 13:17 ` Peter Maydell 2021-01-15 18:34 ` [PATCH 4/4] tests/qtest: add a test case for pvpanic-pci Mihai Carabas 2021-01-18 7:42 ` Thomas Huth 2021-01-19 13:16 ` Peter Maydell 2021-01-19 13:29 ` [PATCH v3] Add support for pvpanic pci device Peter Maydell 2021-01-19 15:44 ` Peter Maydell
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).