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