* [PATCH v3 0/4] hw/misc/pvpanic: add support for normal shutdowns
@ 2023-11-29 17:47 Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 1/4] linux-headers: drop pvpanic.h Thomas Weißschuh
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Thomas Weißschuh @ 2023-11-29 17:47 UTC (permalink / raw)
To: Michael S. Tsirkin, Cornelia Huck, Paolo Bonzini, Thomas Huth,
Laurent Vivier
Cc: qemu-devel, Thomas Weißschuh
Shutdown requests are normally hardware dependent.
By extending pvpanic to also handle shutdown requests, guests can
submit such requests with an easily implementable and cross-platform
mechanism.
The background is the usage of minimal Linux kernels with different
architectures for testing purposes.
Poweroff support varies highly per architecture and requires a bunch of
code to be compiled to work.
pvpanic on the other hand is very small and uniform.
I sent an RFC[0] for this before to qemu-devel and lkml which didn't
generate feedback, so let's discuss the concrete proposal.
Patch 1 and 2 are general cleanups, that seems useful even without this
proposal being implemented.
A corresponding patch has been submitted for Linux [1].
This is also where the request was voiced to drop move away from a
pvpanic uapi header in Linux.
[0] https://lore.kernel.org/all/984794aa-4af0-4c68-a74e-7420ec3151a5@t-8ch.de/
[1] https://lore.kernel.org/lkml/20231104-pvpanic-shutdown-v1-1-5ee7c9b3e301@weissschuh.net/
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
---
Changes in v3:
- Drop from Linux imported pvpanic header as discussed with Cornelia and
requested by Greg
- Link to v2: https://lore.kernel.org/r/20231128-pvpanic-shutdown-v2-0-830393b45cb6@t-8ch.de
Changes in v2:
- Remove RFC status
- Add Ack from Thomas to 2nd patch
- Fix typo in title of 2nd patch
- Link to v1: https://lore.kernel.org/r/20231104-pvpanic-shutdown-v1-0-02353157891b@t-8ch.de
---
Thomas Weißschuh (4):
linux-headers: drop pvpanic.h
hw/misc/pvpanic: centralize definition of supported events
tests/qtest/pvpanic: use centralized definition of supported events
hw/misc/pvpanic: add support for normal shutdowns
docs/specs/pvpanic.rst | 2 ++
hw/misc/pvpanic-isa.c | 3 +--
hw/misc/pvpanic-pci.c | 3 +--
hw/misc/pvpanic.c | 8 ++++++--
include/hw/misc/pvpanic.h | 5 +++++
include/standard-headers/linux/pvpanic.h | 9 ---------
scripts/update-linux-headers.sh | 3 +--
tests/qtest/pvpanic-pci-test.c | 5 +++--
tests/qtest/pvpanic-test.c | 5 +++--
9 files changed, 22 insertions(+), 21 deletions(-)
---
base-commit: abf635ddfe3242df907f58967f3c1e6763bbca2d
change-id: 20231104-pvpanic-shutdown-02e4b4cb4949
Best regards,
--
Thomas Weißschuh <thomas@t-8ch.de>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/4] linux-headers: drop pvpanic.h
2023-11-29 17:47 [PATCH v3 0/4] hw/misc/pvpanic: add support for normal shutdowns Thomas Weißschuh
@ 2023-11-29 17:47 ` Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 2/4] hw/misc/pvpanic: centralize definition of supported events Thomas Weißschuh
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Weißschuh @ 2023-11-29 17:47 UTC (permalink / raw)
To: Michael S. Tsirkin, Cornelia Huck, Paolo Bonzini, Thomas Huth,
Laurent Vivier
Cc: qemu-devel, Thomas Weißschuh
misc/pvpanic.h from the Linux UAPI does not define a Linux UAPI but a
qemu device API.
This leads to a weird process when updates to the interface are needed:
1) Change to the specification in the qemu tree
2) Change to the header in the Linux tree
3) Re-import of the header into Qemu.
The kernel prefers to drop the header anyways.
Prepare for the removal from the Linux UAPI headers by moving the
contents to the existing pvpanic.h header.
Link: https://lore.kernel.org/lkml/2023110431-pacemaker-pruning-0e4c@gregkh/
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
---
hw/misc/pvpanic-isa.c | 1 -
hw/misc/pvpanic-pci.c | 1 -
hw/misc/pvpanic.c | 1 -
include/hw/misc/pvpanic.h | 3 +++
include/standard-headers/linux/pvpanic.h | 9 ---------
| 3 +--
6 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/hw/misc/pvpanic-isa.c b/hw/misc/pvpanic-isa.c
index ccec50f61bbd..ef438a31fbe9 100644
--- a/hw/misc/pvpanic-isa.c
+++ b/hw/misc/pvpanic-isa.c
@@ -21,7 +21,6 @@
#include "hw/misc/pvpanic.h"
#include "qom/object.h"
#include "hw/isa/isa.h"
-#include "standard-headers/linux/pvpanic.h"
#include "hw/acpi/acpi_aml_interface.h"
OBJECT_DECLARE_SIMPLE_TYPE(PVPanicISAState, PVPANIC_ISA_DEVICE)
diff --git a/hw/misc/pvpanic-pci.c b/hw/misc/pvpanic-pci.c
index fbcaa50731b3..1de138357b95 100644
--- a/hw/misc/pvpanic-pci.c
+++ b/hw/misc/pvpanic-pci.c
@@ -21,7 +21,6 @@
#include "hw/misc/pvpanic.h"
#include "qom/object.h"
#include "hw/pci/pci_device.h"
-#include "standard-headers/linux/pvpanic.h"
OBJECT_DECLARE_SIMPLE_TYPE(PVPanicPCIState, PVPANIC_PCI_DEVICE)
diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c
index 1540e9091a45..4915ef256e74 100644
--- a/hw/misc/pvpanic.c
+++ b/hw/misc/pvpanic.c
@@ -21,7 +21,6 @@
#include "hw/qdev-properties.h"
#include "hw/misc/pvpanic.h"
#include "qom/object.h"
-#include "standard-headers/linux/pvpanic.h"
static void handle_event(int event)
{
diff --git a/include/hw/misc/pvpanic.h b/include/hw/misc/pvpanic.h
index fab94165d03d..dffca827f77a 100644
--- a/include/hw/misc/pvpanic.h
+++ b/include/hw/misc/pvpanic.h
@@ -18,6 +18,9 @@
#include "exec/memory.h"
#include "qom/object.h"
+#define PVPANIC_PANICKED (1 << 0)
+#define PVPANIC_CRASH_LOADED (1 << 1)
+
#define TYPE_PVPANIC_ISA_DEVICE "pvpanic"
#define TYPE_PVPANIC_PCI_DEVICE "pvpanic-pci"
diff --git a/include/standard-headers/linux/pvpanic.h b/include/standard-headers/linux/pvpanic.h
deleted file mode 100644
index 54b7485390d3..000000000000
--- a/include/standard-headers/linux/pvpanic.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-
-#ifndef __PVPANIC_H__
-#define __PVPANIC_H__
-
-#define PVPANIC_PANICKED (1 << 0)
-#define PVPANIC_CRASH_LOADED (1 << 1)
-
-#endif /* __PVPANIC_H__ */
--git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
index 34295c0fe55b..555bdc8af2eb 100755
--- a/scripts/update-linux-headers.sh
+++ b/scripts/update-linux-headers.sh
@@ -215,8 +215,7 @@ for i in "$tmpdir"/include/linux/*virtio*.h \
"$tmpdir/include/linux/const.h" \
"$tmpdir/include/linux/kernel.h" \
"$tmpdir/include/linux/vhost_types.h" \
- "$tmpdir/include/linux/sysinfo.h" \
- "$tmpdir/include/misc/pvpanic.h"; do
+ "$tmpdir/include/linux/sysinfo.h"; do
cp_portable "$i" "$output/include/standard-headers/linux"
done
mkdir -p "$output/include/standard-headers/drm"
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/4] hw/misc/pvpanic: centralize definition of supported events
2023-11-29 17:47 [PATCH v3 0/4] hw/misc/pvpanic: add support for normal shutdowns Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 1/4] linux-headers: drop pvpanic.h Thomas Weißschuh
@ 2023-11-29 17:47 ` Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 3/4] tests/qtest/pvpanic: use centralized " Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 4/4] hw/misc/pvpanic: add support for normal shutdowns Thomas Weißschuh
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Weißschuh @ 2023-11-29 17:47 UTC (permalink / raw)
To: Michael S. Tsirkin, Cornelia Huck, Paolo Bonzini, Thomas Huth,
Laurent Vivier
Cc: qemu-devel, Thomas Weißschuh
The different components of pvpanic duplicate the list of supported
events. Move it to the shared header file to minimize changes when new
events are added.
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
---
hw/misc/pvpanic-isa.c | 2 +-
hw/misc/pvpanic-pci.c | 2 +-
hw/misc/pvpanic.c | 2 +-
include/hw/misc/pvpanic.h | 1 +
4 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/hw/misc/pvpanic-isa.c b/hw/misc/pvpanic-isa.c
index ef438a31fbe9..9a923b786907 100644
--- a/hw/misc/pvpanic-isa.c
+++ b/hw/misc/pvpanic-isa.c
@@ -101,7 +101,7 @@ static void build_pvpanic_isa_aml(AcpiDevAmlIf *adev, Aml *scope)
static Property pvpanic_isa_properties[] = {
DEFINE_PROP_UINT16(PVPANIC_IOPORT_PROP, PVPanicISAState, ioport, 0x505),
DEFINE_PROP_UINT8("events", PVPanicISAState, pvpanic.events,
- PVPANIC_PANICKED | PVPANIC_CRASH_LOADED),
+ PVPANIC_EVENTS),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/hw/misc/pvpanic-pci.c b/hw/misc/pvpanic-pci.c
index 1de138357b95..8898d280d2ef 100644
--- a/hw/misc/pvpanic-pci.c
+++ b/hw/misc/pvpanic-pci.c
@@ -54,7 +54,7 @@ static void pvpanic_pci_realizefn(PCIDevice *dev, Error **errp)
static Property pvpanic_pci_properties[] = {
DEFINE_PROP_UINT8("events", PVPanicPCIState, pvpanic.events,
- PVPANIC_PANICKED | PVPANIC_CRASH_LOADED),
+ PVPANIC_EVENTS),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c
index 4915ef256e74..a4982cc5928e 100644
--- a/hw/misc/pvpanic.c
+++ b/hw/misc/pvpanic.c
@@ -26,7 +26,7 @@ static void handle_event(int event)
{
static bool logged;
- if (event & ~(PVPANIC_PANICKED | PVPANIC_CRASH_LOADED) && !logged) {
+ if (event & ~PVPANIC_EVENTS && !logged) {
qemu_log_mask(LOG_GUEST_ERROR, "pvpanic: unknown event %#x.\n", event);
logged = true;
}
diff --git a/include/hw/misc/pvpanic.h b/include/hw/misc/pvpanic.h
index dffca827f77a..48f2ec4c86a1 100644
--- a/include/hw/misc/pvpanic.h
+++ b/include/hw/misc/pvpanic.h
@@ -20,6 +20,7 @@
#define PVPANIC_PANICKED (1 << 0)
#define PVPANIC_CRASH_LOADED (1 << 1)
+#define PVPANIC_EVENTS (PVPANIC_PANICKED | PVPANIC_CRASH_LOADED)
#define TYPE_PVPANIC_ISA_DEVICE "pvpanic"
#define TYPE_PVPANIC_PCI_DEVICE "pvpanic-pci"
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 3/4] tests/qtest/pvpanic: use centralized definition of supported events
2023-11-29 17:47 [PATCH v3 0/4] hw/misc/pvpanic: add support for normal shutdowns Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 1/4] linux-headers: drop pvpanic.h Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 2/4] hw/misc/pvpanic: centralize definition of supported events Thomas Weißschuh
@ 2023-11-29 17:47 ` Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 4/4] hw/misc/pvpanic: add support for normal shutdowns Thomas Weißschuh
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Weißschuh @ 2023-11-29 17:47 UTC (permalink / raw)
To: Michael S. Tsirkin, Cornelia Huck, Paolo Bonzini, Thomas Huth,
Laurent Vivier
Cc: qemu-devel, Thomas Weißschuh
Avoid the necessity to update all tests when new events are added
to the device.
Acked-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
---
tests/qtest/pvpanic-pci-test.c | 5 +++--
tests/qtest/pvpanic-test.c | 5 +++--
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/tests/qtest/pvpanic-pci-test.c b/tests/qtest/pvpanic-pci-test.c
index 2c05b376ba72..b372caf41dc0 100644
--- a/tests/qtest/pvpanic-pci-test.c
+++ b/tests/qtest/pvpanic-pci-test.c
@@ -16,6 +16,7 @@
#include "qapi/qmp/qdict.h"
#include "libqos/pci.h"
#include "libqos/pci-pc.h"
+#include "hw/misc/pvpanic.h"
#include "hw/pci/pci_regs.h"
static void test_panic_nopause(void)
@@ -34,7 +35,7 @@ static void test_panic_nopause(void)
bar = qpci_iomap(dev, 0, NULL);
qpci_memread(dev, bar, 0, &val, sizeof(val));
- g_assert_cmpuint(val, ==, 3);
+ g_assert_cmpuint(val, ==, PVPANIC_EVENTS);
val = 1;
qpci_memwrite(dev, bar, 0, &val, sizeof(val));
@@ -67,7 +68,7 @@ static void test_panic(void)
bar = qpci_iomap(dev, 0, NULL);
qpci_memread(dev, bar, 0, &val, sizeof(val));
- g_assert_cmpuint(val, ==, 3);
+ g_assert_cmpuint(val, ==, PVPANIC_EVENTS);
val = 1;
qpci_memwrite(dev, bar, 0, &val, sizeof(val));
diff --git a/tests/qtest/pvpanic-test.c b/tests/qtest/pvpanic-test.c
index 78f1cf8186b0..ccc603472f5d 100644
--- a/tests/qtest/pvpanic-test.c
+++ b/tests/qtest/pvpanic-test.c
@@ -10,6 +10,7 @@
#include "qemu/osdep.h"
#include "libqtest.h"
#include "qapi/qmp/qdict.h"
+#include "hw/misc/pvpanic.h"
static void test_panic_nopause(void)
{
@@ -20,7 +21,7 @@ static void test_panic_nopause(void)
qts = qtest_init("-device pvpanic -action panic=none");
val = qtest_inb(qts, 0x505);
- g_assert_cmpuint(val, ==, 3);
+ g_assert_cmpuint(val, ==, PVPANIC_EVENTS);
qtest_outb(qts, 0x505, 0x1);
@@ -43,7 +44,7 @@ static void test_panic(void)
qts = qtest_init("-device pvpanic -action panic=pause");
val = qtest_inb(qts, 0x505);
- g_assert_cmpuint(val, ==, 3);
+ g_assert_cmpuint(val, ==, PVPANIC_EVENTS);
qtest_outb(qts, 0x505, 0x1);
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 4/4] hw/misc/pvpanic: add support for normal shutdowns
2023-11-29 17:47 [PATCH v3 0/4] hw/misc/pvpanic: add support for normal shutdowns Thomas Weißschuh
` (2 preceding siblings ...)
2023-11-29 17:47 ` [PATCH v3 3/4] tests/qtest/pvpanic: use centralized " Thomas Weißschuh
@ 2023-11-29 17:47 ` Thomas Weißschuh
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Weißschuh @ 2023-11-29 17:47 UTC (permalink / raw)
To: Michael S. Tsirkin, Cornelia Huck, Paolo Bonzini, Thomas Huth,
Laurent Vivier
Cc: qemu-devel, Thomas Weißschuh
Shutdown requests are normally hardware dependent.
By extending pvpanic to also handle shutdown requests, guests can
submit such requests with an easily implementable and cross-platform
mechanism.
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
---
docs/specs/pvpanic.rst | 2 ++
hw/misc/pvpanic.c | 5 +++++
include/hw/misc/pvpanic.h | 3 ++-
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/docs/specs/pvpanic.rst b/docs/specs/pvpanic.rst
index f894bc19555f..796cc0348a38 100644
--- a/docs/specs/pvpanic.rst
+++ b/docs/specs/pvpanic.rst
@@ -29,6 +29,8 @@ 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.
+bit 2
+ a guest shutdown has happened and should be processed by the host
PCI Interface
-------------
diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c
index a4982cc5928e..246f9ae4e992 100644
--- a/hw/misc/pvpanic.c
+++ b/hw/misc/pvpanic.c
@@ -40,6 +40,11 @@ static void handle_event(int event)
qemu_system_guest_crashloaded(NULL);
return;
}
+
+ if (event & PVPANIC_SHUTDOWN) {
+ qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
+ return;
+ }
}
/* return supported events on read */
diff --git a/include/hw/misc/pvpanic.h b/include/hw/misc/pvpanic.h
index 48f2ec4c86a1..9e36a02d5a4f 100644
--- a/include/hw/misc/pvpanic.h
+++ b/include/hw/misc/pvpanic.h
@@ -20,7 +20,8 @@
#define PVPANIC_PANICKED (1 << 0)
#define PVPANIC_CRASH_LOADED (1 << 1)
-#define PVPANIC_EVENTS (PVPANIC_PANICKED | PVPANIC_CRASH_LOADED)
+#define PVPANIC_SHUTDOWN (1 << 2)
+#define PVPANIC_EVENTS (PVPANIC_PANICKED | PVPANIC_CRASH_LOADED | PVPANIC_SHUTDOWN)
#define TYPE_PVPANIC_ISA_DEVICE "pvpanic"
#define TYPE_PVPANIC_PCI_DEVICE "pvpanic-pci"
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-11-29 17:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-29 17:47 [PATCH v3 0/4] hw/misc/pvpanic: add support for normal shutdowns Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 1/4] linux-headers: drop pvpanic.h Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 2/4] hw/misc/pvpanic: centralize definition of supported events Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 3/4] tests/qtest/pvpanic: use centralized " Thomas Weißschuh
2023-11-29 17:47 ` [PATCH v3 4/4] hw/misc/pvpanic: add support for normal shutdowns Thomas Weißschuh
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).