All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event
@ 2013-04-05  6:36 Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED Hu Tao
                   ` (8 more replies)
  0 siblings, 9 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  6:36 UTC (permalink / raw)
  To: qemu-devel, Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka,
	Gleb Natapov, Blue Swirl, Eric Blake, Andrew Jones,
	Marcelo Tosatti, Sasha Levin, Luiz Capitulino, Anthony Liguori,
	Markus Armbruster, Paolo Bonzini, Stefan Hajnoczi, Juan Quintela,
	Orit Wasserman, Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

This series introduces a new simulated device, pvpanic, to notify
qemu when guest panic event happens.

Along with this series, there are two patches to add seabios ACPI
driver and kernel ACPI driver for the device, respectively.

Tested with:

  - qemu(kvm)/qemu(tcg)
  - qemu piix/q35
  - default ioport/custom ioport

Changes from v16:

  - create pvpanic device by default
  - change the way using fw-cfg in pvpanic suggested by Paolo

v16: http://lists.nongnu.org/archive/html/qemu-devel/2013-03/msg05297.html

Hu Tao (6):
  add a new runstate: RUN_STATE_GUEST_PANICKED
  add a new qevent: QEVENT_GUEST_PANICKED
  introduce a new qom device to deal with panicked event
  pvpanic: pass configurable ioport to seabios
  pvpanic: create pvpanic device by default
  pvpanic: add document of pvpanic

 QMP/qmp-events.txt        |  14 ++++
 docs/specs/pvpanic.txt    |  37 ++++++++++
 hw/Makefile.objs          |   1 +
 hw/fw_cfg.c               |   8 ++-
 hw/fw_cfg.h               |   2 +
 hw/i386/pc_piix.c         |   2 +
 hw/i386/pc_q35.c          |   1 +
 hw/pc.h                   |   4 ++
 hw/pvpanic.c              | 172 ++++++++++++++++++++++++++++++++++++++++++++++
 include/monitor/monitor.h |   1 +
 include/sysemu/sysemu.h   |   1 +
 monitor.c                 |   1 +
 qapi-schema.json          |   5 +-
 qmp.c                     |   3 +-
 vl.c                      |  15 +++-
 15 files changed, 261 insertions(+), 6 deletions(-)
 create mode 100644 docs/specs/pvpanic.txt
 create mode 100644 hw/pvpanic.c

-- 
1.8.1.4

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

* [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
@ 2013-04-05  6:36 ` Hu Tao
  2013-05-17  6:59   ` Christian Borntraeger
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 2/6] add a new qevent: QEVENT_GUEST_PANICKED Hu Tao
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 37+ messages in thread
From: Hu Tao @ 2013-04-05  6:36 UTC (permalink / raw)
  To: qemu-devel, Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka,
	Gleb Natapov, Blue Swirl, Eric Blake, Andrew Jones,
	Marcelo Tosatti, Sasha Levin, Luiz Capitulino, Anthony Liguori,
	Markus Armbruster, Paolo Bonzini, Stefan Hajnoczi, Juan Quintela,
	Orit Wasserman, Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

The guest will be in this state when it is panicked.

Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 include/sysemu/sysemu.h |  1 +
 qapi-schema.json        |  5 ++++-
 qmp.c                   |  3 +--
 vl.c                    | 13 +++++++++++--
 4 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 6578782..b6fffc8 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -22,6 +22,7 @@ int qemu_uuid_parse(const char *str, uint8_t *uuid);
 bool runstate_check(RunState state);
 void runstate_set(RunState new_state);
 int runstate_is_running(void);
+bool runstate_needs_reset(void);
 typedef struct vm_change_state_entry VMChangeStateEntry;
 typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
 
diff --git a/qapi-schema.json b/qapi-schema.json
index bfd7a8a..d6aa920 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -174,11 +174,14 @@
 # @suspended: guest is suspended (ACPI S3)
 #
 # @watchdog: the watchdog action is configured to pause and has been triggered
+#
+# @guest-panicked: guest has been panicked as a result of guest OS panic
 ##
 { 'enum': 'RunState',
   'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
             'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
-            'running', 'save-vm', 'shutdown', 'suspended', 'watchdog' ] }
+            'running', 'save-vm', 'shutdown', 'suspended', 'watchdog',
+            'guest-panicked' ] }
 
 ##
 # @SnapshotInfo
diff --git a/qmp.c b/qmp.c
index 55b056b..a1ebb5d 100644
--- a/qmp.c
+++ b/qmp.c
@@ -149,8 +149,7 @@ void qmp_cont(Error **errp)
 {
     Error *local_err = NULL;
 
-    if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
-               runstate_check(RUN_STATE_SHUTDOWN)) {
+    if (runstate_needs_reset()) {
         error_set(errp, QERR_RESET_REQUIRED);
         return;
     } else if (runstate_check(RUN_STATE_SUSPENDED)) {
diff --git a/vl.c b/vl.c
index e2c9706..c91fd4e 100644
--- a/vl.c
+++ b/vl.c
@@ -596,6 +596,7 @@ static const RunStateTransition runstate_transitions_def[] = {
     { RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
     { RUN_STATE_RUNNING, RUN_STATE_SHUTDOWN },
     { RUN_STATE_RUNNING, RUN_STATE_WATCHDOG },
+    { RUN_STATE_RUNNING, RUN_STATE_GUEST_PANICKED },
 
     { RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },
 
@@ -610,6 +611,8 @@ static const RunStateTransition runstate_transitions_def[] = {
     { RUN_STATE_WATCHDOG, RUN_STATE_RUNNING },
     { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
 
+    { RUN_STATE_GUEST_PANICKED, RUN_STATE_PAUSED },
+
     { RUN_STATE_MAX, RUN_STATE_MAX },
 };
 
@@ -651,6 +654,13 @@ int runstate_is_running(void)
     return runstate_check(RUN_STATE_RUNNING);
 }
 
+bool runstate_needs_reset(void)
+{
+    return runstate_check(RUN_STATE_INTERNAL_ERROR) ||
+        runstate_check(RUN_STATE_SHUTDOWN) ||
+        runstate_check(RUN_STATE_GUEST_PANICKED);
+}
+
 StatusInfo *qmp_query_status(Error **errp)
 {
     StatusInfo *info = g_malloc0(sizeof(*info));
@@ -2007,8 +2017,7 @@ static bool main_loop_should_exit(void)
         cpu_synchronize_all_states();
         qemu_system_reset(VMRESET_REPORT);
         resume_all_vcpus();
-        if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
-            runstate_check(RUN_STATE_SHUTDOWN)) {
+        if (runstate_needs_reset()) {
             runstate_set(RUN_STATE_PAUSED);
         }
     }
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH v17 2/6] add a new qevent: QEVENT_GUEST_PANICKED
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED Hu Tao
@ 2013-04-05  6:36 ` Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 3/6] introduce a new qom device to deal with panicked event Hu Tao
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  6:36 UTC (permalink / raw)
  To: qemu-devel, Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka,
	Gleb Natapov, Blue Swirl, Eric Blake, Andrew Jones,
	Marcelo Tosatti, Sasha Levin, Luiz Capitulino, Anthony Liguori,
	Markus Armbruster, Paolo Bonzini, Stefan Hajnoczi, Juan Quintela,
	Orit Wasserman, Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

This event will be emited when qemu detects guest panic.

Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 QMP/qmp-events.txt        | 14 ++++++++++++++
 include/monitor/monitor.h |  1 +
 monitor.c                 |  1 +
 3 files changed, 16 insertions(+)

diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt
index dcc826d..92fe5fb 100644
--- a/QMP/qmp-events.txt
+++ b/QMP/qmp-events.txt
@@ -446,3 +446,17 @@ Example:
 
 Note: If action is "reset", "shutdown", or "pause" the WATCHDOG event is
 followed respectively by the RESET, SHUTDOWN, or STOP events.
+
+GUEST_PANICKED
+--------------
+
+Emitted when guest OS panic is detected.
+
+Data:
+
+- "action": Action that has been taken (json-string, currently always "pause").
+
+Example:
+
+{ "event": "GUEST_PANICKED",
+     "data": { "action": "pause" } }
diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h
index b868760..1a6cfcf 100644
--- a/include/monitor/monitor.h
+++ b/include/monitor/monitor.h
@@ -46,6 +46,7 @@ typedef enum MonitorEvent {
     QEVENT_WAKEUP,
     QEVENT_BALLOON_CHANGE,
     QEVENT_SPICE_MIGRATE_COMPLETED,
+    QEVENT_GUEST_PANICKED,
 
     /* Add to 'monitor_event_names' array in monitor.c when
      * defining new events here */
diff --git a/monitor.c b/monitor.c
index 4ec1db9..a46d5ae 100644
--- a/monitor.c
+++ b/monitor.c
@@ -484,6 +484,7 @@ static const char *monitor_event_names[] = {
     [QEVENT_WAKEUP] = "WAKEUP",
     [QEVENT_BALLOON_CHANGE] = "BALLOON_CHANGE",
     [QEVENT_SPICE_MIGRATE_COMPLETED] = "SPICE_MIGRATE_COMPLETED",
+    [QEVENT_GUEST_PANICKED] = "GUEST_PANICKED",
 };
 QEMU_BUILD_BUG_ON(ARRAY_SIZE(monitor_event_names) != QEVENT_MAX)
 
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH v17 3/6] introduce a new qom device to deal with panicked event
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 2/6] add a new qevent: QEVENT_GUEST_PANICKED Hu Tao
@ 2013-04-05  6:36 ` Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 4/6] pvpanic: pass configurable ioport to seabios Hu Tao
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  6:36 UTC (permalink / raw)
  To: qemu-devel, Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka,
	Gleb Natapov, Blue Swirl, Eric Blake, Andrew Jones,
	Marcelo Tosatti, Sasha Levin, Luiz Capitulino, Anthony Liguori,
	Markus Armbruster, Paolo Bonzini, Stefan Hajnoczi, Juan Quintela,
	Orit Wasserman, Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

pvpanic device is used to send guest panic event from guest to qemu.

When guest panic happens, pvpanic device driver will write a event
number to IO port 0x505(which is the IO port occupied by pvpanic device,
by default). On receiving the event, pvpanic device will pause guest
cpu(s), and send a qmp event QEVENT_GUEST_PANICKED.

Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 hw/Makefile.objs |   1 +
 hw/pvpanic.c     | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 117 insertions(+)
 create mode 100644 hw/pvpanic.c

diff --git a/hw/Makefile.objs b/hw/Makefile.objs
index d0b2ecb..12ac32a 100644
--- a/hw/Makefile.objs
+++ b/hw/Makefile.objs
@@ -216,4 +216,5 @@ obj-$(CONFIG_KVM) += ivshmem.o
 obj-$(CONFIG_LINUX) += vfio_pci.o
 endif
 
+common-obj-y += pvpanic.o
 endif
diff --git a/hw/pvpanic.c b/hw/pvpanic.c
new file mode 100644
index 0000000..ff0a116
--- /dev/null
+++ b/hw/pvpanic.c
@@ -0,0 +1,116 @@
+/*
+ * 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 <qapi/qmp/qobject.h>
+#include <qapi/qmp/qjson.h>
+#include <monitor/monitor.h>
+#include <sysemu/sysemu.h>
+#include <sysemu/kvm.h>
+
+/* The bit of supported pv event */
+#define PVPANIC_F_PANICKED      0
+
+/* The pv event value */
+#define PVPANIC_PANICKED        (1 << PVPANIC_F_PANICKED)
+
+#define TYPE_ISA_PVPANIC_DEVICE    "pvpanic"
+#define ISA_PVPANIC_DEVICE(obj)    \
+    OBJECT_CHECK(PVPanicState, (obj), TYPE_ISA_PVPANIC_DEVICE)
+
+static void panicked_mon_event(const char *action)
+{
+    QObject *data;
+
+    data = qobject_from_jsonf("{ 'action': %s }", action);
+    monitor_protocol_event(QEVENT_GUEST_PANICKED, data);
+    qobject_decref(data);
+}
+
+static void handle_event(int event)
+{
+    if (event == PVPANIC_PANICKED) {
+        panicked_mon_event("pause");
+        vm_stop(RUN_STATE_GUEST_PANICKED);
+        return;
+    }
+}
+
+#include "hw/isa.h"
+
+typedef struct PVPanicState {
+    ISADevice parent_obj;
+
+    MemoryRegion io;
+    uint16_t ioport;
+} PVPanicState;
+
+/* return supported events on read */
+static uint64_t pvpanic_ioport_read(void *opaque, hwaddr addr, unsigned size)
+{
+    return PVPANIC_PANICKED;
+}
+
+static void pvpanic_ioport_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,
+    .impl = {
+        .min_access_size = 1,
+        .max_access_size = 1,
+    },
+};
+
+static int pvpanic_isa_initfn(ISADevice *dev)
+{
+    PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
+
+    memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
+    isa_register_ioport(dev, &s->io, s->ioport);
+
+    return 0;
+}
+
+static Property pvpanic_isa_properties[] = {
+    DEFINE_PROP_UINT16("ioport", PVPanicState, ioport, 0x505),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static void pvpanic_isa_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    ISADeviceClass *ic = ISA_DEVICE_CLASS(klass);
+
+    ic->init = pvpanic_isa_initfn;
+    dc->no_user = 1;
+    dc->props = pvpanic_isa_properties;
+}
+
+static TypeInfo pvpanic_isa_info = {
+    .name          = TYPE_ISA_PVPANIC_DEVICE,
+    .parent        = TYPE_ISA_DEVICE,
+    .instance_size = sizeof(PVPanicState),
+    .class_init    = pvpanic_isa_class_init,
+};
+
+static void pvpanic_register_types(void)
+{
+    type_register_static(&pvpanic_isa_info);
+}
+
+type_init(pvpanic_register_types)
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH v17 4/6] pvpanic: pass configurable ioport to seabios
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
                   ` (2 preceding siblings ...)
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 3/6] introduce a new qom device to deal with panicked event Hu Tao
@ 2013-04-05  6:36 ` Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default Hu Tao
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  6:36 UTC (permalink / raw)
  To: qemu-devel, Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka,
	Gleb Natapov, Blue Swirl, Eric Blake, Andrew Jones,
	Marcelo Tosatti, Sasha Levin, Luiz Capitulino, Anthony Liguori,
	Markus Armbruster, Paolo Bonzini, Stefan Hajnoczi, Juan Quintela,
	Orit Wasserman, Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

This lets seabios patch the corresponding SSDT entry.

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 hw/fw_cfg.c  |  8 +++++++-
 hw/fw_cfg.h  |  2 ++
 hw/pvpanic.c | 14 ++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c
index 63a1998..0bde436 100644
--- a/hw/fw_cfg.c
+++ b/hw/fw_cfg.c
@@ -489,11 +489,17 @@ FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
     dev = qdev_create(NULL, "fw_cfg");
     qdev_prop_set_uint32(dev, "ctl_iobase", ctl_port);
     qdev_prop_set_uint32(dev, "data_iobase", data_port);
-    qdev_init_nofail(dev);
     d = SYS_BUS_DEVICE(dev);
 
     s = DO_UPCAST(FWCfgState, busdev.qdev, dev);
 
+    if (!object_resolve_path("/machine/fw_cfg", NULL)) {
+        object_property_add_child(qdev_get_machine(), "fw_cfg", OBJECT(s),
+                                  NULL);
+    }
+
+    qdev_init_nofail(dev);
+
     if (ctl_addr) {
         sysbus_mmio_map(d, 0, ctl_addr);
     }
diff --git a/hw/fw_cfg.h b/hw/fw_cfg.h
index 05c8df1..07cc941 100644
--- a/hw/fw_cfg.h
+++ b/hw/fw_cfg.h
@@ -1,6 +1,8 @@
 #ifndef FW_CFG_H
 #define FW_CFG_H
 
+#include "exec/hwaddr.h"
+
 #define FW_CFG_SIGNATURE        0x00
 #define FW_CFG_ID               0x01
 #define FW_CFG_UUID             0x02
diff --git a/hw/pvpanic.c b/hw/pvpanic.c
index ff0a116..b3d10e2 100644
--- a/hw/pvpanic.c
+++ b/hw/pvpanic.c
@@ -18,6 +18,8 @@
 #include <sysemu/sysemu.h>
 #include <sysemu/kvm.h>
 
+#include "hw/fw_cfg.h"
+
 /* The bit of supported pv event */
 #define PVPANIC_F_PANICKED      0
 
@@ -79,10 +81,22 @@ static const MemoryRegionOps pvpanic_ops = {
 static int pvpanic_isa_initfn(ISADevice *dev)
 {
     PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
+    static bool port_configured;
+    void *fw_cfg;
 
     memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
     isa_register_ioport(dev, &s->io, s->ioport);
 
+    if (!port_configured) {
+        fw_cfg = object_resolve_path("/machine/fw_cfg", NULL);
+        if (fw_cfg) {
+            fw_cfg_add_file(fw_cfg, "etc/pvpanic-port",
+                            g_memdup(&s->ioport, sizeof(s->ioport)),
+                            sizeof(s->ioport));
+            port_configured = true;
+        }
+    }
+
     return 0;
 }
 
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
                   ` (3 preceding siblings ...)
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 4/6] pvpanic: pass configurable ioport to seabios Hu Tao
@ 2013-04-05  6:36 ` Hu Tao
  2013-04-05 11:14   ` Paolo Bonzini
  2013-04-09  9:06   ` [Qemu-devel] [PATCH] pvpanic: create pvpanic by default for machine 1.5 Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 6/6] pvpanic: add document of pvpanic Hu Tao
                   ` (3 subsequent siblings)
  8 siblings, 2 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  6:36 UTC (permalink / raw)
  To: qemu-devel, Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka,
	Gleb Natapov, Blue Swirl, Eric Blake, Andrew Jones,
	Marcelo Tosatti, Sasha Levin, Luiz Capitulino, Anthony Liguori,
	Markus Armbruster, Paolo Bonzini, Stefan Hajnoczi, Juan Quintela,
	Orit Wasserman, Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

Also parse command line options for ioport and set
it accordingly.

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 hw/i386/pc_piix.c |  2 ++
 hw/i386/pc_q35.c  |  1 +
 hw/pc.h           |  4 ++++
 hw/pvpanic.c      | 42 ++++++++++++++++++++++++++++++++++++++++++
 vl.c              |  2 ++
 5 files changed, 51 insertions(+)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 0abc9f1..897254a 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -217,6 +217,8 @@ static void pc_init1(MemoryRegion *system_memory,
     if (pci_enabled) {
         pc_pci_device_init(pci_bus);
     }
+
+    pvpanic_init(isa_bus);
 }
 
 static void pc_init_pci(QEMUMachineInitArgs *args)
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 4f5f347..fd9ab01 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -204,6 +204,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args)
     pc_vga_init(isa_bus, host_bus);
     audio_init(isa_bus, host_bus);
     pc_nic_init(isa_bus, host_bus);
+    pvpanic_init(isa_bus);
     if (pci_enabled) {
         pc_pci_device_init(host_bus);
     }
diff --git a/hw/pc.h b/hw/pc.h
index 8e1dd4c..1311037 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -178,6 +178,10 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
 /* pc_sysfw.c */
 void pc_system_firmware_init(MemoryRegion *rom_memory);
 
+/* pvpanic.c */
+int pvpanic_init(ISABus *bus);
+int pvpanic_ioport(QemuOpts *opts, void *opaque);
+
 /* e820 types */
 #define E820_RAM        1
 #define E820_RESERVED   2
diff --git a/hw/pvpanic.c b/hw/pvpanic.c
index b3d10e2..2e237a4 100644
--- a/hw/pvpanic.c
+++ b/hw/pvpanic.c
@@ -19,6 +19,8 @@
 #include <sysemu/kvm.h>
 
 #include "hw/fw_cfg.h"
+#include "hw/pc.h"
+#include "qapi/string-input-visitor.h"
 
 /* The bit of supported pv event */
 #define PVPANIC_F_PANICKED      0
@@ -57,6 +59,36 @@ typedef struct PVPanicState {
     uint16_t ioport;
 } PVPanicState;
 
+static uint16_t ioport;
+
+static int set_ioport(const char *name, const char *value, void *opaque)
+{
+    StringInputVisitor *mi;
+
+    if (strcmp(name, "ioport") == 0) {
+        mi = string_input_visitor_new(value);
+        visit_type_uint16(string_input_get_visitor(mi), &ioport, "ioport",
+                          NULL);
+        string_input_visitor_cleanup(mi);
+    }
+
+    return 0;
+}
+
+int pvpanic_ioport(QemuOpts *opts, void *opaque)
+{
+    const char *driver;
+
+    driver = qemu_opt_get(opts, "driver");
+    if (!driver || strcmp(driver, "pvpanic")) {
+        return 0;
+    }
+
+    qemu_opt_foreach(opts, set_ioport, NULL, 0);
+
+    return 0;
+}
+
 /* return supported events on read */
 static uint64_t pvpanic_ioport_read(void *opaque, hwaddr addr, unsigned size)
 {
@@ -84,6 +116,10 @@ static int pvpanic_isa_initfn(ISADevice *dev)
     static bool port_configured;
     void *fw_cfg;
 
+    if (ioport) {
+        s->ioport = ioport;
+    }
+
     memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
     isa_register_ioport(dev, &s->io, s->ioport);
 
@@ -115,6 +151,12 @@ static void pvpanic_isa_class_init(ObjectClass *klass, void *data)
     dc->props = pvpanic_isa_properties;
 }
 
+int pvpanic_init(ISABus *bus)
+{
+    isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
+    return 0;
+}
+
 static TypeInfo pvpanic_isa_info = {
     .name          = TYPE_ISA_PVPANIC_DEVICE,
     .parent        = TYPE_ISA_DEVICE,
diff --git a/vl.c b/vl.c
index c91fd4e..1a3ffa2 100644
--- a/vl.c
+++ b/vl.c
@@ -4302,6 +4302,8 @@ int main(int argc, char **argv, char **envp)
             exit (i == 1 ? 1 : 0);
     }
 
+    qemu_opts_foreach(qemu_find_opts("device"), pvpanic_ioport, NULL, 0);
+
     if (machine->compat_props) {
         qdev_prop_register_global_list(machine->compat_props);
     }
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH v17 6/6] pvpanic: add document of pvpanic
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
                   ` (4 preceding siblings ...)
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default Hu Tao
@ 2013-04-05  6:36 ` Hu Tao
  2013-04-05  7:10   ` [Qemu-devel] " Hu Tao
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  6:36 UTC (permalink / raw)
  To: qemu-devel, Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka,
	Gleb Natapov, Blue Swirl, Eric Blake, Andrew Jones,
	Marcelo Tosatti, Sasha Levin, Luiz Capitulino, Anthony Liguori,
	Markus Armbruster, Paolo Bonzini, Stefan Hajnoczi, Juan Quintela,
	Orit Wasserman, Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 docs/specs/pvpanic.txt | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)
 create mode 100644 docs/specs/pvpanic.txt

diff --git a/docs/specs/pvpanic.txt b/docs/specs/pvpanic.txt
new file mode 100644
index 0000000..d72d667
--- /dev/null
+++ b/docs/specs/pvpanic.txt
@@ -0,0 +1,37 @@
+PVPANIC DEVICE
+==============
+
+pvpanic device is a simulated ISA 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.
+
+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.
+
+ISA Interface
+-------------
+
+pvpanic uses port 0x505 to receive a panic event from the guest. On
+write, bit 0 is set to indicate guest panic has happened. On read, bit
+0 is set to indicate guest panic notification is supported. Remaining
+bits are reserved, and should be written as 0, and ignored on read.
+
+ACPI Interface
+--------------
+
+pvpanic device is defined with ACPI ID "QEMU0001". Custom methods:
+
+RDPT:       To determine whether guest panic notification is supported.
+Arguments:  None
+Return:     Returns a byte, bit 0 set to indicate guest panic
+            notification is supported. Other bits are reserved and
+            should be ignored.
+
+WRPT:       To send a guest panic event
+Arguments:  Arg0 is a byte, with bit 0 set to indicate guest panic has
+            happened. Other bits are reserved and should be cleared.
+Return:     None
+
+The ACPI device will automatically refer to the right port in case it
+is modified.
-- 
1.8.1.4

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

* [PATCH v17] pvpanic: pvpanic device driver
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
@ 2013-04-05  7:10   ` Hu Tao
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 2/6] add a new qevent: QEVENT_GUEST_PANICKED Hu Tao
                     ` (7 subsequent siblings)
  8 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  7:10 UTC (permalink / raw)
  To: Matthew Garrett, linux-kernel, platform-driver-x86, qemu-devel,
	Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka, Gleb Natapov,
	Blue Swirl, Eric Blake, Andrew Jones, Marcelo Tosatti,
	Sasha Levin, Luiz Capitulino, Anthony Liguori, Markus Armbruster,
	Paolo Bonzini, Stefan Hajnoczi, Juan Quintela, Orit Wasserman,
	Wen Congyang, Michael S. Tsirkin, Alexander Graf

pvpanic device is a qemu simulated device through which guest panic
event is sent to host.

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---

ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html

 drivers/platform/x86/Kconfig   |   7 +++
 drivers/platform/x86/Makefile  |   2 +
 drivers/platform/x86/pvpanic.c | 115 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 124 insertions(+)
 create mode 100644 drivers/platform/x86/pvpanic.c

diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 3338437..527ed04 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -781,4 +781,11 @@ config APPLE_GMUX
 	  graphics as well as the backlight. Currently only backlight
 	  control is supported by the driver.
 
+config PVPANIC
+	tristate "pvpanic device support"
+	depends on ACPI
+	---help---
+	  This driver provides support for pvpanic device, which is a qemu
+	  simulated device through which guest panic event is sent to host.
+
 endif # X86_PLATFORM_DEVICES
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index ace2b38..ef0ec74 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -51,3 +51,5 @@ obj-$(CONFIG_INTEL_OAKTRAIL)	+= intel_oaktrail.o
 obj-$(CONFIG_SAMSUNG_Q10)	+= samsung-q10.o
 obj-$(CONFIG_APPLE_GMUX)	+= apple-gmux.o
 obj-$(CONFIG_CHROMEOS_LAPTOP)	+= chromeos_laptop.o
+
+obj-$(CONFIG_PVPANIC)           += pvpanic.o
diff --git a/drivers/platform/x86/pvpanic.c b/drivers/platform/x86/pvpanic.c
new file mode 100644
index 0000000..81c95ec
--- /dev/null
+++ b/drivers/platform/x86/pvpanic.c
@@ -0,0 +1,115 @@
+/*
+ *  pvpanic.c - pvpanic Device Support
+ *
+ *  Copyright (C) 2013 Fujitsu.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <acpi/acpi_bus.h>
+#include <acpi/acpi_drivers.h>
+
+MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>");
+MODULE_DESCRIPTION("pvpanic device driver");
+MODULE_LICENSE("GPL");
+
+static int pvpanic_add(struct acpi_device *device);
+static int pvpanic_remove(struct acpi_device *device);
+
+static const struct acpi_device_id pvpanic_device_ids[] = {
+	{ "QEMU0001", 0},
+	{ "", 0},
+};
+MODULE_DEVICE_TABLE(acpi, pvpanic_device_ids);
+
+#define PVPANIC_PANICKED	(1 << 0)
+
+static acpi_handle handle;
+
+static struct acpi_driver pvpanic_driver = {
+	.name =		"pvpanic",
+	.class =	"QEMU",
+	.ids =		pvpanic_device_ids,
+	.ops =		{
+				.add =		pvpanic_add,
+				.remove =	pvpanic_remove,
+			},
+	.owner =	THIS_MODULE,
+};
+
+static void
+pvpanic_send_event(unsigned int event)
+{
+	union acpi_object arg;
+	struct acpi_object_list arg_list;
+
+	if (!handle)
+		return;
+
+	arg.type = ACPI_TYPE_INTEGER;
+	arg.integer.value = event;
+
+	arg_list.count = 1;
+	arg_list.pointer = &arg;
+
+	acpi_evaluate_object(handle, "WRPT", &arg_list, NULL);
+}
+
+static int
+pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
+		     void *unused)
+{
+	pvpanic_send_event(PVPANIC_PANICKED);
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block pvpanic_panic_nb = {
+	.notifier_call = pvpanic_panic_notify,
+};
+
+static int pvpanic_add(struct acpi_device *device)
+{
+	acpi_status status;
+	u64 ret;
+
+	status = acpi_evaluate_integer(device->handle, "_STA", NULL,
+				       &ret);
+
+	if (ACPI_FAILURE(status) || (ret & 0x0B) != 0x0B)
+		return -ENODEV;
+
+	handle = device->handle;
+	atomic_notifier_chain_register(&panic_notifier_list,
+				       &pvpanic_panic_nb);
+
+	return 0;
+}
+
+static int pvpanic_remove(struct acpi_device *device)
+{
+
+	atomic_notifier_chain_unregister(&panic_notifier_list,
+					 &pvpanic_panic_nb);
+	handle = NULL;
+	return 0;
+}
+
+module_acpi_driver(pvpanic_driver);
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH v17] pvpanic: pvpanic device driver
@ 2013-04-05  7:10   ` Hu Tao
  0 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  7:10 UTC (permalink / raw)
  To: Matthew Garrett, linux-kernel, platform-driver-x86, qemu-devel,
	Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka, Gleb Natapov,
	Blue Swirl, Eric Blake, Andrew Jones, Marcelo Tosatti,
	Sasha Levin, Luiz Capitulino, Anthony Liguori, Markus Armbruster,
	Paolo Bonzini, Stefan Hajnoczi, Juan Quintela, Orit Wasserman,
	Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

pvpanic device is a qemu simulated device through which guest panic
event is sent to host.

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---

ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html

 drivers/platform/x86/Kconfig   |   7 +++
 drivers/platform/x86/Makefile  |   2 +
 drivers/platform/x86/pvpanic.c | 115 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 124 insertions(+)
 create mode 100644 drivers/platform/x86/pvpanic.c

diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 3338437..527ed04 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -781,4 +781,11 @@ config APPLE_GMUX
 	  graphics as well as the backlight. Currently only backlight
 	  control is supported by the driver.
 
+config PVPANIC
+	tristate "pvpanic device support"
+	depends on ACPI
+	---help---
+	  This driver provides support for pvpanic device, which is a qemu
+	  simulated device through which guest panic event is sent to host.
+
 endif # X86_PLATFORM_DEVICES
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index ace2b38..ef0ec74 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -51,3 +51,5 @@ obj-$(CONFIG_INTEL_OAKTRAIL)	+= intel_oaktrail.o
 obj-$(CONFIG_SAMSUNG_Q10)	+= samsung-q10.o
 obj-$(CONFIG_APPLE_GMUX)	+= apple-gmux.o
 obj-$(CONFIG_CHROMEOS_LAPTOP)	+= chromeos_laptop.o
+
+obj-$(CONFIG_PVPANIC)           += pvpanic.o
diff --git a/drivers/platform/x86/pvpanic.c b/drivers/platform/x86/pvpanic.c
new file mode 100644
index 0000000..81c95ec
--- /dev/null
+++ b/drivers/platform/x86/pvpanic.c
@@ -0,0 +1,115 @@
+/*
+ *  pvpanic.c - pvpanic Device Support
+ *
+ *  Copyright (C) 2013 Fujitsu.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <acpi/acpi_bus.h>
+#include <acpi/acpi_drivers.h>
+
+MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>");
+MODULE_DESCRIPTION("pvpanic device driver");
+MODULE_LICENSE("GPL");
+
+static int pvpanic_add(struct acpi_device *device);
+static int pvpanic_remove(struct acpi_device *device);
+
+static const struct acpi_device_id pvpanic_device_ids[] = {
+	{ "QEMU0001", 0},
+	{ "", 0},
+};
+MODULE_DEVICE_TABLE(acpi, pvpanic_device_ids);
+
+#define PVPANIC_PANICKED	(1 << 0)
+
+static acpi_handle handle;
+
+static struct acpi_driver pvpanic_driver = {
+	.name =		"pvpanic",
+	.class =	"QEMU",
+	.ids =		pvpanic_device_ids,
+	.ops =		{
+				.add =		pvpanic_add,
+				.remove =	pvpanic_remove,
+			},
+	.owner =	THIS_MODULE,
+};
+
+static void
+pvpanic_send_event(unsigned int event)
+{
+	union acpi_object arg;
+	struct acpi_object_list arg_list;
+
+	if (!handle)
+		return;
+
+	arg.type = ACPI_TYPE_INTEGER;
+	arg.integer.value = event;
+
+	arg_list.count = 1;
+	arg_list.pointer = &arg;
+
+	acpi_evaluate_object(handle, "WRPT", &arg_list, NULL);
+}
+
+static int
+pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
+		     void *unused)
+{
+	pvpanic_send_event(PVPANIC_PANICKED);
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block pvpanic_panic_nb = {
+	.notifier_call = pvpanic_panic_notify,
+};
+
+static int pvpanic_add(struct acpi_device *device)
+{
+	acpi_status status;
+	u64 ret;
+
+	status = acpi_evaluate_integer(device->handle, "_STA", NULL,
+				       &ret);
+
+	if (ACPI_FAILURE(status) || (ret & 0x0B) != 0x0B)
+		return -ENODEV;
+
+	handle = device->handle;
+	atomic_notifier_chain_register(&panic_notifier_list,
+				       &pvpanic_panic_nb);
+
+	return 0;
+}
+
+static int pvpanic_remove(struct acpi_device *device)
+{
+
+	atomic_notifier_chain_unregister(&panic_notifier_list,
+					 &pvpanic_panic_nb);
+	handle = NULL;
+	return 0;
+}
+
+module_acpi_driver(pvpanic_driver);
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH v17] Add pvpanic device driver
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
                   ` (6 preceding siblings ...)
  2013-04-05  7:10   ` [Qemu-devel] " Hu Tao
@ 2013-04-05  7:17 ` Hu Tao
  2013-04-30 16:00   ` Paolo Bonzini
                     ` (2 more replies)
  2013-04-05  8:42 ` [Qemu-devel] [PATCH] [RFC] Wire up disabled wait a panicked event on s390 Christian Borntraeger
  8 siblings, 3 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-05  7:17 UTC (permalink / raw)
  To: Kevin O'Connor, seabios, qemu-devel, Daniel P. Berrange,
	KAMEZAWA Hiroyuki, Jan Kiszka, Gleb Natapov, Blue Swirl,
	Eric Blake, Andrew Jones, Marcelo Tosatti, Sasha Levin,
	Luiz Capitulino, Anthony Liguori, Markus Armbruster,
	Paolo Bonzini, Stefan Hajnoczi, Juan Quintela, Orit Wasserman,
	Wen Congyang, Michael S. Tsirkin, Alexander Graf,
	Alex Williamson, Peter Maydell, Christian Borntraeger

pvpanic device is used to notify host(qemu) when guest panic happens.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---

No change from v16. qemu patches at:

http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html

 src/acpi.c        |  3 +++
 src/ssdt-misc.dsl | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/src/acpi.c b/src/acpi.c
index bc4d8ea..fe504f0 100644
--- a/src/acpi.c
+++ b/src/acpi.c
@@ -534,6 +534,9 @@ build_ssdt(void)
         ssdt_ptr[acpi_pci64_valid[0]] = 0;
     }
 
+    int pvpanic_port = romfile_loadint("etc/pvpanic-port", 0x0);
+    *(u16 *)(ssdt_ptr + *ssdt_isa_pest) = pvpanic_port;
+
     ssdt_ptr += sizeof(ssdp_misc_aml);
 
     // build Scope(_SB_) header
diff --git a/src/ssdt-misc.dsl b/src/ssdt-misc.dsl
index 679422b..acc850e 100644
--- a/src/ssdt-misc.dsl
+++ b/src/ssdt-misc.dsl
@@ -55,4 +55,50 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1)
             Zero   /* reserved */
         })
     }
+
+    External(\_SB.PCI0, DeviceObj)
+    External(\_SB.PCI0.ISA, DeviceObj)
+
+    Scope(\_SB.PCI0.ISA) {
+        Device(PEVT) {
+            Name(_HID, "QEMU0001")
+            /* PEST will be patched to be Zero if no such device */
+            ACPI_EXTRACT_NAME_WORD_CONST ssdt_isa_pest
+            Name(PEST, 0xFFFF)
+            OperationRegion(PEOR, SystemIO, PEST, 0x01)
+            Field(PEOR, ByteAcc, NoLock, Preserve) {
+                PEPT,   8,
+            }
+
+            Method(_STA, 0, NotSerialized) {
+                Store(PEST, Local0)
+                If (LEqual(Local0, Zero)) {
+                    Return (0x00)
+                } Else {
+                    Return (0x0F)
+                }
+            }
+
+            Method(RDPT, 0, NotSerialized) {
+                Store(PEPT, Local0)
+                Return (Local0)
+            }
+
+            Method(WRPT, 1, NotSerialized) {
+                Store(Arg0, PEPT)
+            }
+
+            Name(_CRS, ResourceTemplate() {
+                IO(Decode16, 0x00, 0x00, 0x01, 0x01, IO)
+            })
+
+            CreateWordField(_CRS, IO._MIN, IOMN)
+            CreateWordField(_CRS, IO._MAX, IOMX)
+
+            Method(_INI, 0, NotSerialized) {
+                Store(PEST, IOMN)
+                Store(PEST, IOMX)
+            }
+        }
+    }
 }
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH] [RFC] Wire up disabled wait a panicked event on s390
  2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
                   ` (7 preceding siblings ...)
  2013-04-05  7:17 ` [Qemu-devel] [PATCH v17] Add " Hu Tao
@ 2013-04-05  8:42 ` Christian Borntraeger
  2013-04-05 13:15   ` Luiz Capitulino
  8 siblings, 1 reply; 37+ messages in thread
From: Christian Borntraeger @ 2013-04-05  8:42 UTC (permalink / raw)
  To: Hu Tao, Alexander Graf
  Cc: Peter Maydell, Andrew Jones, Anthony Liguori, Markus Armbruster,
	Gleb Natapov, Juan Quintela, Jan Kiszka, Marcelo Tosatti,
	qemu-devel, Luiz Capitulino, Blue Swirl, Orit Wasserman,
	Alex Williamson, Michael S. Tsirkin, Sasha Levin,
	Stefan Hajnoczi, Paolo Bonzini, KAMEZAWA Hiroyuki

On s390 the disabled wait state indicates a state of attention.
For example Linux uses that state after a panic. Lets
put the system into panicked state.

An alternative implementation would be to state
disabled-wait <address> instead of pause in the action field.
(e.g. z/OS, z/VM and other classic OSes use the address of the
disabled wait to indicate an error code).

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 644f484..0c111f0 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -34,6 +34,8 @@
 #include "sysemu/kvm.h"
 #include "cpu.h"
 #include "sysemu/device_tree.h"
+#include "qapi/qmp/qjson.h"
+#include "monitor/monitor.h"
 
 /* #define DEBUG_KVM */
 
@@ -705,9 +707,18 @@ static int handle_intercept(S390CPU *cpu)
             r = handle_instruction(cpu, run);
             break;
         case ICPT_WAITPSW:
-            if (s390_del_running_cpu(cpu) == 0 &&
-                is_special_wait_psw(cs)) {
-                qemu_system_shutdown_request();
+            /* disabled wait, since enabled wait is handled in kernel */
+            if (s390_del_running_cpu(cpu) == 0) {
+                if (is_special_wait_psw(cs)) {
+                    qemu_system_shutdown_request();
+                } else {
+                    QObject *data;
+
+                    data = qobject_from_jsonf("{ 'action': %s }", "pause");
+                    monitor_protocol_event(QEVENT_GUEST_PANICKED, data);
+                    qobject_decref(data);
+                    vm_stop(RUN_STATE_GUEST_PANICKED);
+                }
             }
             r = EXCP_HALTED;
             break;

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

* Re: [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default Hu Tao
@ 2013-04-05 11:14   ` Paolo Bonzini
  2013-04-08  2:50     ` Hu Tao
  2013-04-09  9:06   ` [Qemu-devel] [PATCH] pvpanic: create pvpanic by default for machine 1.5 Hu Tao
  1 sibling, 1 reply; 37+ messages in thread
From: Paolo Bonzini @ 2013-04-05 11:14 UTC (permalink / raw)
  To: Hu Tao
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	qemu-devel, Markus Armbruster, Blue Swirl, Orit Wasserman,
	Juan Quintela, Alexander Graf, Christian Borntraeger,
	Andrew Jones, Alex Williamson, Sasha Levin, Stefan Hajnoczi,
	Luiz Capitulino, KAMEZAWA Hiroyuki, Anthony Liguori,
	Marcelo Tosatti

Il 05/04/2013 08:36, Hu Tao ha scritto:
> Also parse command line options for ioport and set
> it accordingly.

This does not do the correct thing for versioned machine types like "-M
pc-1.4".  Also, adding stuff to vl.c is really something you cannot do.
 Please don't be afraid to ask!

See the attached patch, untested.  Feel free to take it with my S-o-b line.

Patches 1-4 and 6 are okay.

Paolo

> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> ---
>  hw/i386/pc_piix.c |  2 ++
>  hw/i386/pc_q35.c  |  1 +
>  hw/pc.h           |  4 ++++
>  hw/pvpanic.c      | 42 ++++++++++++++++++++++++++++++++++++++++++
>  vl.c              |  2 ++
>  5 files changed, 51 insertions(+)
> 
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 0abc9f1..897254a 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -217,6 +217,8 @@ static void pc_init1(MemoryRegion *system_memory,
>      if (pci_enabled) {
>          pc_pci_device_init(pci_bus);
>      }
> +
> +    pvpanic_init(isa_bus);
>  }
>  
>  static void pc_init_pci(QEMUMachineInitArgs *args)
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 4f5f347..fd9ab01 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -204,6 +204,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args)
>      pc_vga_init(isa_bus, host_bus);
>      audio_init(isa_bus, host_bus);
>      pc_nic_init(isa_bus, host_bus);
> +    pvpanic_init(isa_bus);
>      if (pci_enabled) {
>          pc_pci_device_init(host_bus);
>      }
> diff --git a/hw/pc.h b/hw/pc.h
> index 8e1dd4c..1311037 100644
> --- a/hw/pc.h
> +++ b/hw/pc.h
> @@ -178,6 +178,10 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
>  /* pc_sysfw.c */
>  void pc_system_firmware_init(MemoryRegion *rom_memory);
>  
> +/* pvpanic.c */
> +int pvpanic_init(ISABus *bus);
> +int pvpanic_ioport(QemuOpts *opts, void *opaque);
> +
>  /* e820 types */
>  #define E820_RAM        1
>  #define E820_RESERVED   2
> diff --git a/hw/pvpanic.c b/hw/pvpanic.c
> index b3d10e2..2e237a4 100644
> --- a/hw/pvpanic.c
> +++ b/hw/pvpanic.c
> @@ -19,6 +19,8 @@
>  #include <sysemu/kvm.h>
>  
>  #include "hw/fw_cfg.h"
> +#include "hw/pc.h"
> +#include "qapi/string-input-visitor.h"
>  
>  /* The bit of supported pv event */
>  #define PVPANIC_F_PANICKED      0
> @@ -57,6 +59,36 @@ typedef struct PVPanicState {
>      uint16_t ioport;
>  } PVPanicState;
>  
> +static uint16_t ioport;
> +
> +static int set_ioport(const char *name, const char *value, void *opaque)
> +{
> +    StringInputVisitor *mi;
> +
> +    if (strcmp(name, "ioport") == 0) {
> +        mi = string_input_visitor_new(value);
> +        visit_type_uint16(string_input_get_visitor(mi), &ioport, "ioport",
> +                          NULL);
> +        string_input_visitor_cleanup(mi);
> +    }
> +
> +    return 0;
> +}
> +
> +int pvpanic_ioport(QemuOpts *opts, void *opaque)
> +{
> +    const char *driver;
> +
> +    driver = qemu_opt_get(opts, "driver");
> +    if (!driver || strcmp(driver, "pvpanic")) {
> +        return 0;
> +    }
> +
> +    qemu_opt_foreach(opts, set_ioport, NULL, 0);
> +
> +    return 0;
> +}
> +
>  /* return supported events on read */
>  static uint64_t pvpanic_ioport_read(void *opaque, hwaddr addr, unsigned size)
>  {
> @@ -84,6 +116,10 @@ static int pvpanic_isa_initfn(ISADevice *dev)
>      static bool port_configured;
>      void *fw_cfg;
>  
> +    if (ioport) {
> +        s->ioport = ioport;
> +    }
> +
>      memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
>      isa_register_ioport(dev, &s->io, s->ioport);
>  
> @@ -115,6 +151,12 @@ static void pvpanic_isa_class_init(ObjectClass *klass, void *data)
>      dc->props = pvpanic_isa_properties;
>  }
>  
> +int pvpanic_init(ISABus *bus)
> +{
> +    isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
> +    return 0;
> +}
> +
>  static TypeInfo pvpanic_isa_info = {
>      .name          = TYPE_ISA_PVPANIC_DEVICE,
>      .parent        = TYPE_ISA_DEVICE,
> diff --git a/vl.c b/vl.c
> index c91fd4e..1a3ffa2 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4302,6 +4302,8 @@ int main(int argc, char **argv, char **envp)
>              exit (i == 1 ? 1 : 0);
>      }
>  
> +    qemu_opts_foreach(qemu_find_opts("device"), pvpanic_ioport, NULL, 0);
> +
>      if (machine->compat_props) {
>          qdev_prop_register_global_list(machine->compat_props);
>      }
> 

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

* Re: [PATCH v17] pvpanic: pvpanic device driver
  2013-04-05  7:10   ` [Qemu-devel] " Hu Tao
  (?)
@ 2013-04-05 11:45     ` Paolo Bonzini
  -1 siblings, 0 replies; 37+ messages in thread
From: Paolo Bonzini @ 2013-04-05 11:45 UTC (permalink / raw)
  To: Hu Tao
  Cc: Matthew Garrett, linux-kernel, platform-driver-x86, qemu-devel,
	Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka, Gleb Natapov,
	Blue Swirl, Eric Blake, Andrew Jones, Marcelo Tosatti,
	Sasha Levin, Luiz Capitulino, Anthony Liguori, Markus Armbruster,
	Stefan Hajnoczi, Juan Quintela, Orit Wasserman, Wen Congyang,
	Michael S. Tsirkin, Alexander Graf, Alex Williamson,
	Peter Maydell, Christian Borntraeger

Il 05/04/2013 09:10, Hu Tao ha scritto:
> pvpanic device is a qemu simulated device through which guest panic
> event is sent to host.
> 
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

Matthew, it would be nice to include this in 3.10.

The implementation of the device in QEMU is final, the only thing that
needs a respin is how it is enabled by default.

Paolo

> ---
> 
> ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html
> 
>  drivers/platform/x86/Kconfig   |   7 +++
>  drivers/platform/x86/Makefile  |   2 +
>  drivers/platform/x86/pvpanic.c | 115 +++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 124 insertions(+)
>  create mode 100644 drivers/platform/x86/pvpanic.c
> 
> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
> index 3338437..527ed04 100644
> --- a/drivers/platform/x86/Kconfig
> +++ b/drivers/platform/x86/Kconfig
> @@ -781,4 +781,11 @@ config APPLE_GMUX
>  	  graphics as well as the backlight. Currently only backlight
>  	  control is supported by the driver.
>  
> +config PVPANIC
> +	tristate "pvpanic device support"
> +	depends on ACPI
> +	---help---
> +	  This driver provides support for pvpanic device, which is a qemu
> +	  simulated device through which guest panic event is sent to host.
> +
>  endif # X86_PLATFORM_DEVICES
> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
> index ace2b38..ef0ec74 100644
> --- a/drivers/platform/x86/Makefile
> +++ b/drivers/platform/x86/Makefile
> @@ -51,3 +51,5 @@ obj-$(CONFIG_INTEL_OAKTRAIL)	+= intel_oaktrail.o
>  obj-$(CONFIG_SAMSUNG_Q10)	+= samsung-q10.o
>  obj-$(CONFIG_APPLE_GMUX)	+= apple-gmux.o
>  obj-$(CONFIG_CHROMEOS_LAPTOP)	+= chromeos_laptop.o
> +
> +obj-$(CONFIG_PVPANIC)           += pvpanic.o
> diff --git a/drivers/platform/x86/pvpanic.c b/drivers/platform/x86/pvpanic.c
> new file mode 100644
> index 0000000..81c95ec
> --- /dev/null
> +++ b/drivers/platform/x86/pvpanic.c
> @@ -0,0 +1,115 @@
> +/*
> + *  pvpanic.c - pvpanic Device Support
> + *
> + *  Copyright (C) 2013 Fujitsu.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 2 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/types.h>
> +#include <acpi/acpi_bus.h>
> +#include <acpi/acpi_drivers.h>
> +
> +MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>");
> +MODULE_DESCRIPTION("pvpanic device driver");
> +MODULE_LICENSE("GPL");
> +
> +static int pvpanic_add(struct acpi_device *device);
> +static int pvpanic_remove(struct acpi_device *device);
> +
> +static const struct acpi_device_id pvpanic_device_ids[] = {
> +	{ "QEMU0001", 0},
> +	{ "", 0},
> +};
> +MODULE_DEVICE_TABLE(acpi, pvpanic_device_ids);
> +
> +#define PVPANIC_PANICKED	(1 << 0)
> +
> +static acpi_handle handle;
> +
> +static struct acpi_driver pvpanic_driver = {
> +	.name =		"pvpanic",
> +	.class =	"QEMU",
> +	.ids =		pvpanic_device_ids,
> +	.ops =		{
> +				.add =		pvpanic_add,
> +				.remove =	pvpanic_remove,
> +			},
> +	.owner =	THIS_MODULE,
> +};
> +
> +static void
> +pvpanic_send_event(unsigned int event)
> +{
> +	union acpi_object arg;
> +	struct acpi_object_list arg_list;
> +
> +	if (!handle)
> +		return;
> +
> +	arg.type = ACPI_TYPE_INTEGER;
> +	arg.integer.value = event;
> +
> +	arg_list.count = 1;
> +	arg_list.pointer = &arg;
> +
> +	acpi_evaluate_object(handle, "WRPT", &arg_list, NULL);
> +}
> +
> +static int
> +pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
> +		     void *unused)
> +{
> +	pvpanic_send_event(PVPANIC_PANICKED);
> +	return NOTIFY_DONE;
> +}
> +
> +static struct notifier_block pvpanic_panic_nb = {
> +	.notifier_call = pvpanic_panic_notify,
> +};
> +
> +static int pvpanic_add(struct acpi_device *device)
> +{
> +	acpi_status status;
> +	u64 ret;
> +
> +	status = acpi_evaluate_integer(device->handle, "_STA", NULL,
> +				       &ret);
> +
> +	if (ACPI_FAILURE(status) || (ret & 0x0B) != 0x0B)
> +		return -ENODEV;
> +
> +	handle = device->handle;
> +	atomic_notifier_chain_register(&panic_notifier_list,
> +				       &pvpanic_panic_nb);
> +
> +	return 0;
> +}
> +
> +static int pvpanic_remove(struct acpi_device *device)
> +{
> +
> +	atomic_notifier_chain_unregister(&panic_notifier_list,
> +					 &pvpanic_panic_nb);
> +	handle = NULL;
> +	return 0;
> +}
> +
> +module_acpi_driver(pvpanic_driver);
> 


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

* Re: [PATCH v17] pvpanic: pvpanic device driver
@ 2013-04-05 11:45     ` Paolo Bonzini
  0 siblings, 0 replies; 37+ messages in thread
From: Paolo Bonzini @ 2013-04-05 11:45 UTC (permalink / raw)
  To: Hu Tao
  Cc: Matthew Garrett, linux-kernel, platform-driver-x86, qemu-devel,
	Daniel P. Berrange, KAMEZAWA Hiroyuki, Jan Kiszka, Gleb Natapov,
	Blue Swirl, Eric Blake, Andrew Jones, Marcelo Tosatti,
	Sasha Levin, Luiz Capitulino, Anthony Liguori, Markus Armbruster,
	Stefan Hajnoczi, Juan Quintela, Orit Wasserman, Wen Congyang,
	Michael S. Tsirkin, Alexander Graf, Alex Williamson

Il 05/04/2013 09:10, Hu Tao ha scritto:
> pvpanic device is a qemu simulated device through which guest panic
> event is sent to host.
> 
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

Matthew, it would be nice to include this in 3.10.

The implementation of the device in QEMU is final, the only thing that
needs a respin is how it is enabled by default.

Paolo

> ---
> 
> ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html
> 
>  drivers/platform/x86/Kconfig   |   7 +++
>  drivers/platform/x86/Makefile  |   2 +
>  drivers/platform/x86/pvpanic.c | 115 +++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 124 insertions(+)
>  create mode 100644 drivers/platform/x86/pvpanic.c
> 
> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
> index 3338437..527ed04 100644
> --- a/drivers/platform/x86/Kconfig
> +++ b/drivers/platform/x86/Kconfig
> @@ -781,4 +781,11 @@ config APPLE_GMUX
>  	  graphics as well as the backlight. Currently only backlight
>  	  control is supported by the driver.
>  
> +config PVPANIC
> +	tristate "pvpanic device support"
> +	depends on ACPI
> +	---help---
> +	  This driver provides support for pvpanic device, which is a qemu
> +	  simulated device through which guest panic event is sent to host.
> +
>  endif # X86_PLATFORM_DEVICES
> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
> index ace2b38..ef0ec74 100644
> --- a/drivers/platform/x86/Makefile
> +++ b/drivers/platform/x86/Makefile
> @@ -51,3 +51,5 @@ obj-$(CONFIG_INTEL_OAKTRAIL)	+= intel_oaktrail.o
>  obj-$(CONFIG_SAMSUNG_Q10)	+= samsung-q10.o
>  obj-$(CONFIG_APPLE_GMUX)	+= apple-gmux.o
>  obj-$(CONFIG_CHROMEOS_LAPTOP)	+= chromeos_laptop.o
> +
> +obj-$(CONFIG_PVPANIC)           += pvpanic.o
> diff --git a/drivers/platform/x86/pvpanic.c b/drivers/platform/x86/pvpanic.c
> new file mode 100644
> index 0000000..81c95ec
> --- /dev/null
> +++ b/drivers/platform/x86/pvpanic.c
> @@ -0,0 +1,115 @@
> +/*
> + *  pvpanic.c - pvpanic Device Support
> + *
> + *  Copyright (C) 2013 Fujitsu.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 2 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/types.h>
> +#include <acpi/acpi_bus.h>
> +#include <acpi/acpi_drivers.h>
> +
> +MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>");
> +MODULE_DESCRIPTION("pvpanic device driver");
> +MODULE_LICENSE("GPL");
> +
> +static int pvpanic_add(struct acpi_device *device);
> +static int pvpanic_remove(struct acpi_device *device);
> +
> +static const struct acpi_device_id pvpanic_device_ids[] = {
> +	{ "QEMU0001", 0},
> +	{ "", 0},
> +};
> +MODULE_DEVICE_TABLE(acpi, pvpanic_device_ids);
> +
> +#define PVPANIC_PANICKED	(1 << 0)
> +
> +static acpi_handle handle;
> +
> +static struct acpi_driver pvpanic_driver = {
> +	.name =		"pvpanic",
> +	.class =	"QEMU",
> +	.ids =		pvpanic_device_ids,
> +	.ops =		{
> +				.add =		pvpanic_add,
> +				.remove =	pvpanic_remove,
> +			},
> +	.owner =	THIS_MODULE,
> +};
> +
> +static void
> +pvpanic_send_event(unsigned int event)
> +{
> +	union acpi_object arg;
> +	struct acpi_object_list arg_list;
> +
> +	if (!handle)
> +		return;
> +
> +	arg.type = ACPI_TYPE_INTEGER;
> +	arg.integer.value = event;
> +
> +	arg_list.count = 1;
> +	arg_list.pointer = &arg;
> +
> +	acpi_evaluate_object(handle, "WRPT", &arg_list, NULL);
> +}
> +
> +static int
> +pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
> +		     void *unused)
> +{
> +	pvpanic_send_event(PVPANIC_PANICKED);
> +	return NOTIFY_DONE;
> +}
> +
> +static struct notifier_block pvpanic_panic_nb = {
> +	.notifier_call = pvpanic_panic_notify,
> +};
> +
> +static int pvpanic_add(struct acpi_device *device)
> +{
> +	acpi_status status;
> +	u64 ret;
> +
> +	status = acpi_evaluate_integer(device->handle, "_STA", NULL,
> +				       &ret);
> +
> +	if (ACPI_FAILURE(status) || (ret & 0x0B) != 0x0B)
> +		return -ENODEV;
> +
> +	handle = device->handle;
> +	atomic_notifier_chain_register(&panic_notifier_list,
> +				       &pvpanic_panic_nb);
> +
> +	return 0;
> +}
> +
> +static int pvpanic_remove(struct acpi_device *device)
> +{
> +
> +	atomic_notifier_chain_unregister(&panic_notifier_list,
> +					 &pvpanic_panic_nb);
> +	handle = NULL;
> +	return 0;
> +}
> +
> +module_acpi_driver(pvpanic_driver);
> 

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

* Re: [Qemu-devel] [PATCH v17] pvpanic: pvpanic device driver
@ 2013-04-05 11:45     ` Paolo Bonzini
  0 siblings, 0 replies; 37+ messages in thread
From: Paolo Bonzini @ 2013-04-05 11:45 UTC (permalink / raw)
  To: Hu Tao
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	qemu-devel, Alexander Graf, Blue Swirl, Orit Wasserman,
	Matthew Garrett, Juan Quintela, Markus Armbruster,
	Christian Borntraeger, platform-driver-x86, Andrew Jones,
	Alex Williamson, Sasha Levin, Stefan Hajnoczi, Luiz Capitulino,
	KAMEZAWA Hiroyuki, Anthony Liguori, Marcelo Tosatti,
	linux-kernel

Il 05/04/2013 09:10, Hu Tao ha scritto:
> pvpanic device is a qemu simulated device through which guest panic
> event is sent to host.
> 
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

Matthew, it would be nice to include this in 3.10.

The implementation of the device in QEMU is final, the only thing that
needs a respin is how it is enabled by default.

Paolo

> ---
> 
> ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html
> 
>  drivers/platform/x86/Kconfig   |   7 +++
>  drivers/platform/x86/Makefile  |   2 +
>  drivers/platform/x86/pvpanic.c | 115 +++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 124 insertions(+)
>  create mode 100644 drivers/platform/x86/pvpanic.c
> 
> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
> index 3338437..527ed04 100644
> --- a/drivers/platform/x86/Kconfig
> +++ b/drivers/platform/x86/Kconfig
> @@ -781,4 +781,11 @@ config APPLE_GMUX
>  	  graphics as well as the backlight. Currently only backlight
>  	  control is supported by the driver.
>  
> +config PVPANIC
> +	tristate "pvpanic device support"
> +	depends on ACPI
> +	---help---
> +	  This driver provides support for pvpanic device, which is a qemu
> +	  simulated device through which guest panic event is sent to host.
> +
>  endif # X86_PLATFORM_DEVICES
> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
> index ace2b38..ef0ec74 100644
> --- a/drivers/platform/x86/Makefile
> +++ b/drivers/platform/x86/Makefile
> @@ -51,3 +51,5 @@ obj-$(CONFIG_INTEL_OAKTRAIL)	+= intel_oaktrail.o
>  obj-$(CONFIG_SAMSUNG_Q10)	+= samsung-q10.o
>  obj-$(CONFIG_APPLE_GMUX)	+= apple-gmux.o
>  obj-$(CONFIG_CHROMEOS_LAPTOP)	+= chromeos_laptop.o
> +
> +obj-$(CONFIG_PVPANIC)           += pvpanic.o
> diff --git a/drivers/platform/x86/pvpanic.c b/drivers/platform/x86/pvpanic.c
> new file mode 100644
> index 0000000..81c95ec
> --- /dev/null
> +++ b/drivers/platform/x86/pvpanic.c
> @@ -0,0 +1,115 @@
> +/*
> + *  pvpanic.c - pvpanic Device Support
> + *
> + *  Copyright (C) 2013 Fujitsu.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 2 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/types.h>
> +#include <acpi/acpi_bus.h>
> +#include <acpi/acpi_drivers.h>
> +
> +MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>");
> +MODULE_DESCRIPTION("pvpanic device driver");
> +MODULE_LICENSE("GPL");
> +
> +static int pvpanic_add(struct acpi_device *device);
> +static int pvpanic_remove(struct acpi_device *device);
> +
> +static const struct acpi_device_id pvpanic_device_ids[] = {
> +	{ "QEMU0001", 0},
> +	{ "", 0},
> +};
> +MODULE_DEVICE_TABLE(acpi, pvpanic_device_ids);
> +
> +#define PVPANIC_PANICKED	(1 << 0)
> +
> +static acpi_handle handle;
> +
> +static struct acpi_driver pvpanic_driver = {
> +	.name =		"pvpanic",
> +	.class =	"QEMU",
> +	.ids =		pvpanic_device_ids,
> +	.ops =		{
> +				.add =		pvpanic_add,
> +				.remove =	pvpanic_remove,
> +			},
> +	.owner =	THIS_MODULE,
> +};
> +
> +static void
> +pvpanic_send_event(unsigned int event)
> +{
> +	union acpi_object arg;
> +	struct acpi_object_list arg_list;
> +
> +	if (!handle)
> +		return;
> +
> +	arg.type = ACPI_TYPE_INTEGER;
> +	arg.integer.value = event;
> +
> +	arg_list.count = 1;
> +	arg_list.pointer = &arg;
> +
> +	acpi_evaluate_object(handle, "WRPT", &arg_list, NULL);
> +}
> +
> +static int
> +pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
> +		     void *unused)
> +{
> +	pvpanic_send_event(PVPANIC_PANICKED);
> +	return NOTIFY_DONE;
> +}
> +
> +static struct notifier_block pvpanic_panic_nb = {
> +	.notifier_call = pvpanic_panic_notify,
> +};
> +
> +static int pvpanic_add(struct acpi_device *device)
> +{
> +	acpi_status status;
> +	u64 ret;
> +
> +	status = acpi_evaluate_integer(device->handle, "_STA", NULL,
> +				       &ret);
> +
> +	if (ACPI_FAILURE(status) || (ret & 0x0B) != 0x0B)
> +		return -ENODEV;
> +
> +	handle = device->handle;
> +	atomic_notifier_chain_register(&panic_notifier_list,
> +				       &pvpanic_panic_nb);
> +
> +	return 0;
> +}
> +
> +static int pvpanic_remove(struct acpi_device *device)
> +{
> +
> +	atomic_notifier_chain_unregister(&panic_notifier_list,
> +					 &pvpanic_panic_nb);
> +	handle = NULL;
> +	return 0;
> +}
> +
> +module_acpi_driver(pvpanic_driver);
> 

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

* Re: [Qemu-devel] [PATCH] [RFC] Wire up disabled wait a panicked event on s390
  2013-04-05  8:42 ` [Qemu-devel] [PATCH] [RFC] Wire up disabled wait a panicked event on s390 Christian Borntraeger
@ 2013-04-05 13:15   ` Luiz Capitulino
  0 siblings, 0 replies; 37+ messages in thread
From: Luiz Capitulino @ 2013-04-05 13:15 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Hu Tao,
	qemu-devel, Alexander Graf, Blue Swirl, Orit Wasserman,
	Juan Quintela, Markus Armbruster, Jan Kiszka, Andrew Jones,
	Alex Williamson, Sasha Levin, Stefan Hajnoczi, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti, Paolo Bonzini

On Fri, 05 Apr 2013 10:42:38 +0200
Christian Borntraeger <borntraeger@de.ibm.com> wrote:

> On s390 the disabled wait state indicates a state of attention.
> For example Linux uses that state after a panic. Lets
> put the system into panicked state.
> 
> An alternative implementation would be to state
> disabled-wait <address> instead of pause in the action field.
> (e.g. z/OS, z/VM and other classic OSes use the address of the
> disabled wait to indicate an error code).
> 
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
>  target-s390x/kvm.c | 17 ++++++++++++++---
>  1 file changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
> index 644f484..0c111f0 100644
> --- a/target-s390x/kvm.c
> +++ b/target-s390x/kvm.c
> @@ -34,6 +34,8 @@
>  #include "sysemu/kvm.h"
>  #include "cpu.h"
>  #include "sysemu/device_tree.h"
> +#include "qapi/qmp/qjson.h"
> +#include "monitor/monitor.h"
>  
>  /* #define DEBUG_KVM */
>  
> @@ -705,9 +707,18 @@ static int handle_intercept(S390CPU *cpu)
>              r = handle_instruction(cpu, run);
>              break;
>          case ICPT_WAITPSW:
> -            if (s390_del_running_cpu(cpu) == 0 &&
> -                is_special_wait_psw(cs)) {
> -                qemu_system_shutdown_request();
> +            /* disabled wait, since enabled wait is handled in kernel */
> +            if (s390_del_running_cpu(cpu) == 0) {
> +                if (is_special_wait_psw(cs)) {
> +                    qemu_system_shutdown_request();
> +                } else {
> +                    QObject *data;
> +
> +                    data = qobject_from_jsonf("{ 'action': %s }", "pause");
> +                    monitor_protocol_event(QEVENT_GUEST_PANICKED, data);
> +                    qobject_decref(data);
> +                    vm_stop(RUN_STATE_GUEST_PANICKED);

This is on top of the pvpanic device, right?

Seems good to me, although I don't remember the exact semantics of the
new event. Also, I think you could move this code to a function and
share it with the pvpanic device.

> +                }
>              }
>              r = EXCP_HALTED;
>              break;
> 

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

* Re: [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default
  2013-04-05 11:14   ` Paolo Bonzini
@ 2013-04-08  2:50     ` Hu Tao
  0 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-04-08  2:50 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	qemu-devel, Markus Armbruster, Blue Swirl, Orit Wasserman,
	Juan Quintela, Alexander Graf, Christian Borntraeger,
	Andrew Jones, Alex Williamson, Sasha Levin, Stefan Hajnoczi,
	Luiz Capitulino, KAMEZAWA Hiroyuki, Anthony Liguori,
	Marcelo Tosatti

On Fri, Apr 05, 2013 at 01:14:16PM +0200, Paolo Bonzini wrote:
> Il 05/04/2013 08:36, Hu Tao ha scritto:
> > Also parse command line options for ioport and set
> > it accordingly.
> 
> This does not do the correct thing for versioned machine types like "-M
> pc-1.4".  Also, adding stuff to vl.c is really something you cannot do.
>  Please don't be afraid to ask!
> 
> See the attached patch, untested.  Feel free to take it with my S-o-b line.

Thanks. But you forgot the attachment?

> 
> Patches 1-4 and 6 are okay.
> 
> Paolo
> 
> > Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> > ---
> >  hw/i386/pc_piix.c |  2 ++
> >  hw/i386/pc_q35.c  |  1 +
> >  hw/pc.h           |  4 ++++
> >  hw/pvpanic.c      | 42 ++++++++++++++++++++++++++++++++++++++++++
> >  vl.c              |  2 ++
> >  5 files changed, 51 insertions(+)
> > 
> > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> > index 0abc9f1..897254a 100644
> > --- a/hw/i386/pc_piix.c
> > +++ b/hw/i386/pc_piix.c
> > @@ -217,6 +217,8 @@ static void pc_init1(MemoryRegion *system_memory,
> >      if (pci_enabled) {
> >          pc_pci_device_init(pci_bus);
> >      }
> > +
> > +    pvpanic_init(isa_bus);
> >  }
> >  
> >  static void pc_init_pci(QEMUMachineInitArgs *args)
> > diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> > index 4f5f347..fd9ab01 100644
> > --- a/hw/i386/pc_q35.c
> > +++ b/hw/i386/pc_q35.c
> > @@ -204,6 +204,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args)
> >      pc_vga_init(isa_bus, host_bus);
> >      audio_init(isa_bus, host_bus);
> >      pc_nic_init(isa_bus, host_bus);
> > +    pvpanic_init(isa_bus);
> >      if (pci_enabled) {
> >          pc_pci_device_init(host_bus);
> >      }
> > diff --git a/hw/pc.h b/hw/pc.h
> > index 8e1dd4c..1311037 100644
> > --- a/hw/pc.h
> > +++ b/hw/pc.h
> > @@ -178,6 +178,10 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
> >  /* pc_sysfw.c */
> >  void pc_system_firmware_init(MemoryRegion *rom_memory);
> >  
> > +/* pvpanic.c */
> > +int pvpanic_init(ISABus *bus);
> > +int pvpanic_ioport(QemuOpts *opts, void *opaque);
> > +
> >  /* e820 types */
> >  #define E820_RAM        1
> >  #define E820_RESERVED   2
> > diff --git a/hw/pvpanic.c b/hw/pvpanic.c
> > index b3d10e2..2e237a4 100644
> > --- a/hw/pvpanic.c
> > +++ b/hw/pvpanic.c
> > @@ -19,6 +19,8 @@
> >  #include <sysemu/kvm.h>
> >  
> >  #include "hw/fw_cfg.h"
> > +#include "hw/pc.h"
> > +#include "qapi/string-input-visitor.h"
> >  
> >  /* The bit of supported pv event */
> >  #define PVPANIC_F_PANICKED      0
> > @@ -57,6 +59,36 @@ typedef struct PVPanicState {
> >      uint16_t ioport;
> >  } PVPanicState;
> >  
> > +static uint16_t ioport;
> > +
> > +static int set_ioport(const char *name, const char *value, void *opaque)
> > +{
> > +    StringInputVisitor *mi;
> > +
> > +    if (strcmp(name, "ioport") == 0) {
> > +        mi = string_input_visitor_new(value);
> > +        visit_type_uint16(string_input_get_visitor(mi), &ioport, "ioport",
> > +                          NULL);
> > +        string_input_visitor_cleanup(mi);
> > +    }
> > +
> > +    return 0;
> > +}
> > +
> > +int pvpanic_ioport(QemuOpts *opts, void *opaque)
> > +{
> > +    const char *driver;
> > +
> > +    driver = qemu_opt_get(opts, "driver");
> > +    if (!driver || strcmp(driver, "pvpanic")) {
> > +        return 0;
> > +    }
> > +
> > +    qemu_opt_foreach(opts, set_ioport, NULL, 0);
> > +
> > +    return 0;
> > +}
> > +
> >  /* return supported events on read */
> >  static uint64_t pvpanic_ioport_read(void *opaque, hwaddr addr, unsigned size)
> >  {
> > @@ -84,6 +116,10 @@ static int pvpanic_isa_initfn(ISADevice *dev)
> >      static bool port_configured;
> >      void *fw_cfg;
> >  
> > +    if (ioport) {
> > +        s->ioport = ioport;
> > +    }
> > +
> >      memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
> >      isa_register_ioport(dev, &s->io, s->ioport);
> >  
> > @@ -115,6 +151,12 @@ static void pvpanic_isa_class_init(ObjectClass *klass, void *data)
> >      dc->props = pvpanic_isa_properties;
> >  }
> >  
> > +int pvpanic_init(ISABus *bus)
> > +{
> > +    isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
> > +    return 0;
> > +}
> > +
> >  static TypeInfo pvpanic_isa_info = {
> >      .name          = TYPE_ISA_PVPANIC_DEVICE,
> >      .parent        = TYPE_ISA_DEVICE,
> > diff --git a/vl.c b/vl.c
> > index c91fd4e..1a3ffa2 100644
> > --- a/vl.c
> > +++ b/vl.c
> > @@ -4302,6 +4302,8 @@ int main(int argc, char **argv, char **envp)
> >              exit (i == 1 ? 1 : 0);
> >      }
> >  
> > +    qemu_opts_foreach(qemu_find_opts("device"), pvpanic_ioport, NULL, 0);
> > +
> >      if (machine->compat_props) {
> >          qdev_prop_register_global_list(machine->compat_props);
> >      }
> > 

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

* [Qemu-devel] [PATCH] pvpanic: create pvpanic by default for machine 1.5
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default Hu Tao
  2013-04-05 11:14   ` Paolo Bonzini
@ 2013-04-09  9:06   ` Hu Tao
  2013-04-09  9:34     ` Paolo Bonzini
  1 sibling, 1 reply; 37+ messages in thread
From: Hu Tao @ 2013-04-09  9:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 hw/i386/pc_piix.c | 16 ++++++++++++++--
 hw/i386/pc_q35.c  | 15 ++++++++++++++-
 hw/pc.h           |  3 +++
 hw/pvpanic.c      |  7 +++++++
 4 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 0abc9f1..384c95f 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -54,6 +54,8 @@ static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 };
 static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 };
 static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
 
+static bool has_pvpanic = true;
+
 /* PC hardware initialisation */
 static void pc_init1(MemoryRegion *system_memory,
                      MemoryRegion *system_io,
@@ -217,6 +219,10 @@ static void pc_init1(MemoryRegion *system_memory,
     if (pci_enabled) {
         pc_pci_device_init(pci_bus);
     }
+
+    if (has_pvpanic) {
+        pvpanic_init(isa_bus);
+    }
 }
 
 static void pc_init_pci(QEMUMachineInitArgs *args)
@@ -234,10 +240,16 @@ static void pc_init_pci(QEMUMachineInitArgs *args)
              initrd_filename, cpu_model, 1, 1);
 }
 
+static void pc_init_pci_1_4(QEMUMachineInitArgs *args)
+{
+    has_pvpanic = false;
+    pc_init_pci(args);
+}
+
 static void pc_init_pci_1_3(QEMUMachineInitArgs *args)
 {
     enable_compat_apic_id_mode();
-    pc_init_pci(args);
+    pc_init_pci_1_4(args);
 }
 
 /* PC machine init function for pc-0.14 to pc-1.2 */
@@ -308,7 +320,7 @@ static QEMUMachine pc_i440fx_machine_v1_5 = {
 static QEMUMachine pc_i440fx_machine_v1_4 = {
     .name = "pc-i440fx-1.4",
     .desc = "Standard PC (i440FX + PIIX, 1996)",
-    .init = pc_init_pci,
+    .init = pc_init_pci_1_4,
     .max_cpus = 255,
     .compat_props = (GlobalProperty[]) {
         PC_COMPAT_1_4,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 4f5f347..7f9b65f 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -45,6 +45,8 @@
 /* ICH9 AHCI has 6 ports */
 #define MAX_SATA_PORTS     6
 
+static bool has_pvpanic = true;
+
 /* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE)
  *    BIOS will read it and start S3 resume at POST Entry */
 static void pc_cmos_set_s3_resume(void *opaque, int irq, int level)
@@ -207,8 +209,19 @@ static void pc_q35_init(QEMUMachineInitArgs *args)
     if (pci_enabled) {
         pc_pci_device_init(host_bus);
     }
+
+    if (has_pvpanic) {
+        pvpanic_init(isa_bus);
+    }
+}
+
+static void pc_q35_init_1_4(QEMUMachineInitArgs *args)
+{
+    has_pvpanic = false;
+    pc_q35_init(args);
 }
 
+
 static QEMUMachine pc_q35_machine_v1_5 = {
     .name = "pc-q35-1.5",
     .alias = "q35",
@@ -221,7 +234,7 @@ static QEMUMachine pc_q35_machine_v1_5 = {
 static QEMUMachine pc_q35_machine_v1_4 = {
     .name = "pc-q35-1.4",
     .desc = "Standard PC (Q35 + ICH9, 2009)",
-    .init = pc_q35_init,
+    .init = pc_q35_init_1_4,
     .max_cpus = 255,
     .compat_props = (GlobalProperty[]) {
         PC_COMPAT_1_4,
diff --git a/hw/pc.h b/hw/pc.h
index 8e1dd4c..912baf5 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -178,6 +178,9 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
 /* pc_sysfw.c */
 void pc_system_firmware_init(MemoryRegion *rom_memory);
 
+/* pvpanic.c */
+int pvpanic_init(ISABus *bus);
+
 /* e820 types */
 #define E820_RAM        1
 #define E820_RESERVED   2
diff --git a/hw/pvpanic.c b/hw/pvpanic.c
index b3d10e2..bb30207 100644
--- a/hw/pvpanic.c
+++ b/hw/pvpanic.c
@@ -19,6 +19,7 @@
 #include <sysemu/kvm.h>
 
 #include "hw/fw_cfg.h"
+#include "hw/pc.h"
 
 /* The bit of supported pv event */
 #define PVPANIC_F_PANICKED      0
@@ -100,6 +101,12 @@ static int pvpanic_isa_initfn(ISADevice *dev)
     return 0;
 }
 
+int pvpanic_init(ISABus *bus)
+{
+    isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
+    return 0;
+}
+
 static Property pvpanic_isa_properties[] = {
     DEFINE_PROP_UINT16("ioport", PVPanicState, ioport, 0x505),
     DEFINE_PROP_END_OF_LIST(),
-- 
1.8.1.4

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

* Re: [Qemu-devel] [PATCH] pvpanic: create pvpanic by default for machine 1.5
  2013-04-09  9:06   ` [Qemu-devel] [PATCH] pvpanic: create pvpanic by default for machine 1.5 Hu Tao
@ 2013-04-09  9:34     ` Paolo Bonzini
  0 siblings, 0 replies; 37+ messages in thread
From: Paolo Bonzini @ 2013-04-09  9:34 UTC (permalink / raw)
  To: Hu Tao; +Cc: qemu-devel

Il 09/04/2013 11:06, Hu Tao ha scritto:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Thanks, seems like we're good.

Please resubmit, the new position for pvpanic.c should be in hw/misc.

Paolo

> ---
>  hw/i386/pc_piix.c | 16 ++++++++++++++--
>  hw/i386/pc_q35.c  | 15 ++++++++++++++-
>  hw/pc.h           |  3 +++
>  hw/pvpanic.c      |  7 +++++++
>  4 files changed, 38 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 0abc9f1..384c95f 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -54,6 +54,8 @@ static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 };
>  static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 };
>  static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
>  
> +static bool has_pvpanic = true;
> +
>  /* PC hardware initialisation */
>  static void pc_init1(MemoryRegion *system_memory,
>                       MemoryRegion *system_io,
> @@ -217,6 +219,10 @@ static void pc_init1(MemoryRegion *system_memory,
>      if (pci_enabled) {
>          pc_pci_device_init(pci_bus);
>      }
> +
> +    if (has_pvpanic) {
> +        pvpanic_init(isa_bus);
> +    }
>  }
>  
>  static void pc_init_pci(QEMUMachineInitArgs *args)
> @@ -234,10 +240,16 @@ static void pc_init_pci(QEMUMachineInitArgs *args)
>               initrd_filename, cpu_model, 1, 1);
>  }
>  
> +static void pc_init_pci_1_4(QEMUMachineInitArgs *args)
> +{
> +    has_pvpanic = false;
> +    pc_init_pci(args);
> +}
> +
>  static void pc_init_pci_1_3(QEMUMachineInitArgs *args)
>  {
>      enable_compat_apic_id_mode();
> -    pc_init_pci(args);
> +    pc_init_pci_1_4(args);
>  }
>  
>  /* PC machine init function for pc-0.14 to pc-1.2 */
> @@ -308,7 +320,7 @@ static QEMUMachine pc_i440fx_machine_v1_5 = {
>  static QEMUMachine pc_i440fx_machine_v1_4 = {
>      .name = "pc-i440fx-1.4",
>      .desc = "Standard PC (i440FX + PIIX, 1996)",
> -    .init = pc_init_pci,
> +    .init = pc_init_pci_1_4,
>      .max_cpus = 255,
>      .compat_props = (GlobalProperty[]) {
>          PC_COMPAT_1_4,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 4f5f347..7f9b65f 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -45,6 +45,8 @@
>  /* ICH9 AHCI has 6 ports */
>  #define MAX_SATA_PORTS     6
>  
> +static bool has_pvpanic = true;
> +
>  /* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE)
>   *    BIOS will read it and start S3 resume at POST Entry */
>  static void pc_cmos_set_s3_resume(void *opaque, int irq, int level)
> @@ -207,8 +209,19 @@ static void pc_q35_init(QEMUMachineInitArgs *args)
>      if (pci_enabled) {
>          pc_pci_device_init(host_bus);
>      }
> +
> +    if (has_pvpanic) {
> +        pvpanic_init(isa_bus);
> +    }
> +}
> +
> +static void pc_q35_init_1_4(QEMUMachineInitArgs *args)
> +{
> +    has_pvpanic = false;
> +    pc_q35_init(args);
>  }
>  
> +
>  static QEMUMachine pc_q35_machine_v1_5 = {
>      .name = "pc-q35-1.5",
>      .alias = "q35",
> @@ -221,7 +234,7 @@ static QEMUMachine pc_q35_machine_v1_5 = {
>  static QEMUMachine pc_q35_machine_v1_4 = {
>      .name = "pc-q35-1.4",
>      .desc = "Standard PC (Q35 + ICH9, 2009)",
> -    .init = pc_q35_init,
> +    .init = pc_q35_init_1_4,
>      .max_cpus = 255,
>      .compat_props = (GlobalProperty[]) {
>          PC_COMPAT_1_4,
> diff --git a/hw/pc.h b/hw/pc.h
> index 8e1dd4c..912baf5 100644
> --- a/hw/pc.h
> +++ b/hw/pc.h
> @@ -178,6 +178,9 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
>  /* pc_sysfw.c */
>  void pc_system_firmware_init(MemoryRegion *rom_memory);
>  
> +/* pvpanic.c */
> +int pvpanic_init(ISABus *bus);
> +
>  /* e820 types */
>  #define E820_RAM        1
>  #define E820_RESERVED   2
> diff --git a/hw/pvpanic.c b/hw/pvpanic.c
> index b3d10e2..bb30207 100644
> --- a/hw/pvpanic.c
> +++ b/hw/pvpanic.c
> @@ -19,6 +19,7 @@
>  #include <sysemu/kvm.h>
>  
>  #include "hw/fw_cfg.h"
> +#include "hw/pc.h"
>  
>  /* The bit of supported pv event */
>  #define PVPANIC_F_PANICKED      0
> @@ -100,6 +101,12 @@ static int pvpanic_isa_initfn(ISADevice *dev)
>      return 0;
>  }
>  
> +int pvpanic_init(ISABus *bus)
> +{
> +    isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
> +    return 0;
> +}
> +
>  static Property pvpanic_isa_properties[] = {
>      DEFINE_PROP_UINT16("ioport", PVPanicState, ioport, 0x505),
>      DEFINE_PROP_END_OF_LIST(),
> 

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

* Re: [PATCH v17] pvpanic: pvpanic device driver
  2013-04-05  7:10   ` [Qemu-devel] " Hu Tao
@ 2013-04-30 15:39     ` Paolo Bonzini
  -1 siblings, 0 replies; 37+ messages in thread
From: Paolo Bonzini @ 2013-04-30 15:39 UTC (permalink / raw)
  To: Matthew Garrett, platform-driver-x86
  Cc: Hu Tao, linux-kernel, qemu-devel, Daniel P. Berrange,
	KAMEZAWA Hiroyuki, Jan Kiszka, Gleb Natapov, Blue Swirl,
	Eric Blake, Andrew Jones, Marcelo Tosatti, Sasha Levin,
	Luiz Capitulino, Anthony Liguori, Markus Armbruster,
	Stefan Hajnoczi, Juan Quintela, Orit Wasserman, Wen Congyang,
	Michael S. Tsirkin, Alexander Graf

Il 05/04/2013 09:10, Hu Tao ha scritto:
> pvpanic device is a qemu simulated device through which guest panic
> event is sent to host.
> 
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Ping.  This will be in QEMU 1.5, is this on track for the 3.10 kernel?

Thanks,

Paolo

> ---
> 
> ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html
> 
>  drivers/platform/x86/Kconfig   |   7 +++
>  drivers/platform/x86/Makefile  |   2 +
>  drivers/platform/x86/pvpanic.c | 115 +++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 124 insertions(+)
>  create mode 100644 drivers/platform/x86/pvpanic.c
> 
> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
> index 3338437..527ed04 100644
> --- a/drivers/platform/x86/Kconfig
> +++ b/drivers/platform/x86/Kconfig
> @@ -781,4 +781,11 @@ config APPLE_GMUX
>  	  graphics as well as the backlight. Currently only backlight
>  	  control is supported by the driver.
>  
> +config PVPANIC
> +	tristate "pvpanic device support"
> +	depends on ACPI
> +	---help---
> +	  This driver provides support for pvpanic device, which is a qemu
> +	  simulated device through which guest panic event is sent to host.
> +
>  endif # X86_PLATFORM_DEVICES
> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
> index ace2b38..ef0ec74 100644
> --- a/drivers/platform/x86/Makefile
> +++ b/drivers/platform/x86/Makefile
> @@ -51,3 +51,5 @@ obj-$(CONFIG_INTEL_OAKTRAIL)	+= intel_oaktrail.o
>  obj-$(CONFIG_SAMSUNG_Q10)	+= samsung-q10.o
>  obj-$(CONFIG_APPLE_GMUX)	+= apple-gmux.o
>  obj-$(CONFIG_CHROMEOS_LAPTOP)	+= chromeos_laptop.o
> +
> +obj-$(CONFIG_PVPANIC)           += pvpanic.o
> diff --git a/drivers/platform/x86/pvpanic.c b/drivers/platform/x86/pvpanic.c
> new file mode 100644
> index 0000000..81c95ec
> --- /dev/null
> +++ b/drivers/platform/x86/pvpanic.c
> @@ -0,0 +1,115 @@
> +/*
> + *  pvpanic.c - pvpanic Device Support
> + *
> + *  Copyright (C) 2013 Fujitsu.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 2 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/types.h>
> +#include <acpi/acpi_bus.h>
> +#include <acpi/acpi_drivers.h>
> +
> +MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>");
> +MODULE_DESCRIPTION("pvpanic device driver");
> +MODULE_LICENSE("GPL");
> +
> +static int pvpanic_add(struct acpi_device *device);
> +static int pvpanic_remove(struct acpi_device *device);
> +
> +static const struct acpi_device_id pvpanic_device_ids[] = {
> +	{ "QEMU0001", 0},
> +	{ "", 0},
> +};
> +MODULE_DEVICE_TABLE(acpi, pvpanic_device_ids);
> +
> +#define PVPANIC_PANICKED	(1 << 0)
> +
> +static acpi_handle handle;
> +
> +static struct acpi_driver pvpanic_driver = {
> +	.name =		"pvpanic",
> +	.class =	"QEMU",
> +	.ids =		pvpanic_device_ids,
> +	.ops =		{
> +				.add =		pvpanic_add,
> +				.remove =	pvpanic_remove,
> +			},
> +	.owner =	THIS_MODULE,
> +};
> +
> +static void
> +pvpanic_send_event(unsigned int event)
> +{
> +	union acpi_object arg;
> +	struct acpi_object_list arg_list;
> +
> +	if (!handle)
> +		return;
> +
> +	arg.type = ACPI_TYPE_INTEGER;
> +	arg.integer.value = event;
> +
> +	arg_list.count = 1;
> +	arg_list.pointer = &arg;
> +
> +	acpi_evaluate_object(handle, "WRPT", &arg_list, NULL);
> +}
> +
> +static int
> +pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
> +		     void *unused)
> +{
> +	pvpanic_send_event(PVPANIC_PANICKED);
> +	return NOTIFY_DONE;
> +}
> +
> +static struct notifier_block pvpanic_panic_nb = {
> +	.notifier_call = pvpanic_panic_notify,
> +};
> +
> +static int pvpanic_add(struct acpi_device *device)
> +{
> +	acpi_status status;
> +	u64 ret;
> +
> +	status = acpi_evaluate_integer(device->handle, "_STA", NULL,
> +				       &ret);
> +
> +	if (ACPI_FAILURE(status) || (ret & 0x0B) != 0x0B)
> +		return -ENODEV;
> +
> +	handle = device->handle;
> +	atomic_notifier_chain_register(&panic_notifier_list,
> +				       &pvpanic_panic_nb);
> +
> +	return 0;
> +}
> +
> +static int pvpanic_remove(struct acpi_device *device)
> +{
> +
> +	atomic_notifier_chain_unregister(&panic_notifier_list,
> +					 &pvpanic_panic_nb);
> +	handle = NULL;
> +	return 0;
> +}
> +
> +module_acpi_driver(pvpanic_driver);
> 


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

* Re: [Qemu-devel] [PATCH v17] pvpanic: pvpanic device driver
@ 2013-04-30 15:39     ` Paolo Bonzini
  0 siblings, 0 replies; 37+ messages in thread
From: Paolo Bonzini @ 2013-04-30 15:39 UTC (permalink / raw)
  To: Matthew Garrett, platform-driver-x86
  Cc: Alexander Graf, Andrew Jones, Anthony Liguori, Markus Armbruster,
	Gleb Natapov, Juan Quintela, Hu Tao, Marcelo Tosatti,
	linux-kernel, qemu-devel, Blue Swirl, Orit Wasserman,
	Michael S. Tsirkin, Sasha Levin, Stefan Hajnoczi, Jan Kiszka,
	Luiz Capitulino, KAMEZAWA Hiroyuki

Il 05/04/2013 09:10, Hu Tao ha scritto:
> pvpanic device is a qemu simulated device through which guest panic
> event is sent to host.
> 
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Ping.  This will be in QEMU 1.5, is this on track for the 3.10 kernel?

Thanks,

Paolo

> ---
> 
> ref: http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html
> 
>  drivers/platform/x86/Kconfig   |   7 +++
>  drivers/platform/x86/Makefile  |   2 +
>  drivers/platform/x86/pvpanic.c | 115 +++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 124 insertions(+)
>  create mode 100644 drivers/platform/x86/pvpanic.c
> 
> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
> index 3338437..527ed04 100644
> --- a/drivers/platform/x86/Kconfig
> +++ b/drivers/platform/x86/Kconfig
> @@ -781,4 +781,11 @@ config APPLE_GMUX
>  	  graphics as well as the backlight. Currently only backlight
>  	  control is supported by the driver.
>  
> +config PVPANIC
> +	tristate "pvpanic device support"
> +	depends on ACPI
> +	---help---
> +	  This driver provides support for pvpanic device, which is a qemu
> +	  simulated device through which guest panic event is sent to host.
> +
>  endif # X86_PLATFORM_DEVICES
> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
> index ace2b38..ef0ec74 100644
> --- a/drivers/platform/x86/Makefile
> +++ b/drivers/platform/x86/Makefile
> @@ -51,3 +51,5 @@ obj-$(CONFIG_INTEL_OAKTRAIL)	+= intel_oaktrail.o
>  obj-$(CONFIG_SAMSUNG_Q10)	+= samsung-q10.o
>  obj-$(CONFIG_APPLE_GMUX)	+= apple-gmux.o
>  obj-$(CONFIG_CHROMEOS_LAPTOP)	+= chromeos_laptop.o
> +
> +obj-$(CONFIG_PVPANIC)           += pvpanic.o
> diff --git a/drivers/platform/x86/pvpanic.c b/drivers/platform/x86/pvpanic.c
> new file mode 100644
> index 0000000..81c95ec
> --- /dev/null
> +++ b/drivers/platform/x86/pvpanic.c
> @@ -0,0 +1,115 @@
> +/*
> + *  pvpanic.c - pvpanic Device Support
> + *
> + *  Copyright (C) 2013 Fujitsu.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as published by
> + *  the Free Software Foundation; either version 2 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/types.h>
> +#include <acpi/acpi_bus.h>
> +#include <acpi/acpi_drivers.h>
> +
> +MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>");
> +MODULE_DESCRIPTION("pvpanic device driver");
> +MODULE_LICENSE("GPL");
> +
> +static int pvpanic_add(struct acpi_device *device);
> +static int pvpanic_remove(struct acpi_device *device);
> +
> +static const struct acpi_device_id pvpanic_device_ids[] = {
> +	{ "QEMU0001", 0},
> +	{ "", 0},
> +};
> +MODULE_DEVICE_TABLE(acpi, pvpanic_device_ids);
> +
> +#define PVPANIC_PANICKED	(1 << 0)
> +
> +static acpi_handle handle;
> +
> +static struct acpi_driver pvpanic_driver = {
> +	.name =		"pvpanic",
> +	.class =	"QEMU",
> +	.ids =		pvpanic_device_ids,
> +	.ops =		{
> +				.add =		pvpanic_add,
> +				.remove =	pvpanic_remove,
> +			},
> +	.owner =	THIS_MODULE,
> +};
> +
> +static void
> +pvpanic_send_event(unsigned int event)
> +{
> +	union acpi_object arg;
> +	struct acpi_object_list arg_list;
> +
> +	if (!handle)
> +		return;
> +
> +	arg.type = ACPI_TYPE_INTEGER;
> +	arg.integer.value = event;
> +
> +	arg_list.count = 1;
> +	arg_list.pointer = &arg;
> +
> +	acpi_evaluate_object(handle, "WRPT", &arg_list, NULL);
> +}
> +
> +static int
> +pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
> +		     void *unused)
> +{
> +	pvpanic_send_event(PVPANIC_PANICKED);
> +	return NOTIFY_DONE;
> +}
> +
> +static struct notifier_block pvpanic_panic_nb = {
> +	.notifier_call = pvpanic_panic_notify,
> +};
> +
> +static int pvpanic_add(struct acpi_device *device)
> +{
> +	acpi_status status;
> +	u64 ret;
> +
> +	status = acpi_evaluate_integer(device->handle, "_STA", NULL,
> +				       &ret);
> +
> +	if (ACPI_FAILURE(status) || (ret & 0x0B) != 0x0B)
> +		return -ENODEV;
> +
> +	handle = device->handle;
> +	atomic_notifier_chain_register(&panic_notifier_list,
> +				       &pvpanic_panic_nb);
> +
> +	return 0;
> +}
> +
> +static int pvpanic_remove(struct acpi_device *device)
> +{
> +
> +	atomic_notifier_chain_unregister(&panic_notifier_list,
> +					 &pvpanic_panic_nb);
> +	handle = NULL;
> +	return 0;
> +}
> +
> +module_acpi_driver(pvpanic_driver);
> 

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

* Re: [Qemu-devel] [PATCH v17] Add pvpanic device driver
  2013-04-05  7:17 ` [Qemu-devel] [PATCH v17] Add " Hu Tao
@ 2013-04-30 16:00   ` Paolo Bonzini
  2013-05-01  1:07     ` Kevin O'Connor
  2013-05-15  7:21   ` [Qemu-devel] [SeaBIOS] " Laszlo Ersek
  2013-05-15  7:32   ` [Qemu-devel] " Christian Borntraeger
  2 siblings, 1 reply; 37+ messages in thread
From: Paolo Bonzini @ 2013-04-30 16:00 UTC (permalink / raw)
  To: Kevin O'Connor, seabios
  Cc: Alexander Graf, Andrew Jones, Anthony Liguori, Markus Armbruster,
	Gleb Natapov, Juan Quintela, Hu Tao, Marcelo Tosatti, qemu-devel,
	Luiz Capitulino, Blue Swirl, Orit Wasserman, Alex Williamson,
	Michael S. Tsirkin, Sasha Levin, Stefan Hajnoczi, Jan Kiszka,
	KAMEZAWA Hiroyuki

Il 05/04/2013 09:17, Hu Tao ha scritto:
> pvpanic device is used to notify host(qemu) when guest panic happens.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> ---
> 
> No change from v16. qemu patches at:
> 
> http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html

Ping.  The QEMU parts will be committed shortly.

Paolo

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

* Re: [Qemu-devel] [PATCH v17] Add pvpanic device driver
  2013-04-30 16:00   ` Paolo Bonzini
@ 2013-05-01  1:07     ` Kevin O'Connor
  0 siblings, 0 replies; 37+ messages in thread
From: Kevin O'Connor @ 2013-05-01  1:07 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Gleb Natapov, Michael S. Tsirkin, Hu Tao, seabios, qemu-devel,
	Markus Armbruster, Blue Swirl, Orit Wasserman, Juan Quintela,
	Alexander Graf, Jan Kiszka, Andrew Jones, Alex Williamson,
	Sasha Levin, Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti

On Tue, Apr 30, 2013 at 06:00:09PM +0200, Paolo Bonzini wrote:
> Il 05/04/2013 09:17, Hu Tao ha scritto:
> > pvpanic device is used to notify host(qemu) when guest panic happens.
> > 
> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> > Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> > ---
> > 
> > No change from v16. qemu patches at:
> > 
> > http://lists.nongnu.org/archive/html/qemu-devel/2013-04/msg01028.html
> 
> Ping.  The QEMU parts will be committed shortly.

Thanks.  I pushed this patch to SeaBIOS head.

-Kevin

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

* Re: [Qemu-devel] [SeaBIOS] [PATCH v17] Add pvpanic device driver
  2013-04-05  7:17 ` [Qemu-devel] [PATCH v17] Add " Hu Tao
  2013-04-30 16:00   ` Paolo Bonzini
@ 2013-05-15  7:21   ` Laszlo Ersek
  2013-05-15  7:27     ` Hu Tao
  2013-05-15  7:32   ` [Qemu-devel] " Christian Borntraeger
  2 siblings, 1 reply; 37+ messages in thread
From: Laszlo Ersek @ 2013-05-15  7:21 UTC (permalink / raw)
  To: Hu Tao
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	seabios, qemu-devel, Markus Armbruster, Blue Swirl,
	Orit Wasserman, Juan Quintela, Alexander Graf,
	Christian Borntraeger, Andrew Jones, Alex Williamson,
	Kevin O'Connor, Sasha Levin, Stefan Hajnoczi,
	Luiz Capitulino, KAMEZAWA Hiroyuki, Anthony Liguori,
	Marcelo Tosatti, Paolo Bonzini

On 04/05/13 09:17, Hu Tao wrote:

> +            Method(RDPT, 0, NotSerialized) {
> +                Store(PEPT, Local0)
> +                Return (Local0)
> +            }
> +
> +            Method(WRPT, 1, NotSerialized) {
> +                Store(Arg0, PEPT)
> +            }

Please excuse my asking, I haven't been following this -- who's supposed
to call these methods? The latest guest kernel patch I managed to find
([PATCH v7] kvm: notify host when the guest is panicked -- probably
obsolete by now) appears to do a direct outl().

Thanks,
Laszlo

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

* Re: [Qemu-devel] [SeaBIOS] [PATCH v17] Add pvpanic device driver
  2013-05-15  7:21   ` [Qemu-devel] [SeaBIOS] " Laszlo Ersek
@ 2013-05-15  7:27     ` Hu Tao
  2013-05-15  7:30       ` Hu Tao
                         ` (2 more replies)
  0 siblings, 3 replies; 37+ messages in thread
From: Hu Tao @ 2013-05-15  7:27 UTC (permalink / raw)
  To: Laszlo Ersek
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	seabios, qemu-devel, Markus Armbruster, Blue Swirl,
	Orit Wasserman, Juan Quintela, Alexander Graf,
	Christian Borntraeger, Andrew Jones, Alex Williamson,
	Kevin O'Connor, Sasha Levin, Stefan Hajnoczi,
	Luiz Capitulino, KAMEZAWA Hiroyuki, Anthony Liguori,
	Marcelo Tosatti, Paolo Bonzini

On Wed, May 15, 2013 at 09:21:54AM +0200, Laszlo Ersek wrote:
> On 04/05/13 09:17, Hu Tao wrote:
> 
> > +            Method(RDPT, 0, NotSerialized) {
> > +                Store(PEPT, Local0)
> > +                Return (Local0)
> > +            }
> > +
> > +            Method(WRPT, 1, NotSerialized) {
> > +                Store(Arg0, PEPT)
> > +            }
> 
> Please excuse my asking, I haven't been following this -- who's supposed
> to call these methods? The latest guest kernel patch I managed to find
> ([PATCH v7] kvm: notify host when the guest is panicked -- probably
> obsolete by now) appears to do a direct outl().

An old version calls WRPT but is buggy, so you see the outl version.
This patch is in seabios before the outl version. If you think these
methods are needless, feel free to send a patch.

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

* Re: [Qemu-devel] [SeaBIOS] [PATCH v17] Add pvpanic device driver
  2013-05-15  7:27     ` Hu Tao
@ 2013-05-15  7:30       ` Hu Tao
  2013-05-15  7:36       ` Laszlo Ersek
  2013-05-15 16:25       ` Laszlo Ersek
  2 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-05-15  7:30 UTC (permalink / raw)
  To: Laszlo Ersek
  Cc: Peter Maydell, Andrew Jones, Alex Williamson, Juan Quintela,
	Michael S. Tsirkin, Jan Kiszka, seabios, qemu-devel,
	Markus Armbruster, Blue Swirl, Orit Wasserman, Alexander Graf,
	Anthony Liguori, Stefan Hajnoczi, Paolo Bonzini, Luiz Capitulino,
	Christian Borntraeger, KAMEZAWA Hiroyuki

On Wed, May 15, 2013 at 03:27:39PM +0800, Hu Tao wrote:
> On Wed, May 15, 2013 at 09:21:54AM +0200, Laszlo Ersek wrote:
> > On 04/05/13 09:17, Hu Tao wrote:
> > 
> > > +            Method(RDPT, 0, NotSerialized) {
> > > +                Store(PEPT, Local0)
> > > +                Return (Local0)
> > > +            }
> > > +
> > > +            Method(WRPT, 1, NotSerialized) {
> > > +                Store(Arg0, PEPT)
> > > +            }
> > 
> > Please excuse my asking, I haven't been following this -- who's supposed
> > to call these methods? The latest guest kernel patch I managed to find
> > ([PATCH v7] kvm: notify host when the guest is panicked -- probably
> > obsolete by now) appears to do a direct outl().
> 
> An old version calls WRPT but is buggy, so you see the outl version.
> This patch is in seabios before the outl version. If you think these
> methods are needless, feel free to send a patch.

I mean v19 by outl verson. Sorry for confusing.

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

* Re: [Qemu-devel] [PATCH v17] Add pvpanic device driver
  2013-04-05  7:17 ` [Qemu-devel] [PATCH v17] Add " Hu Tao
  2013-04-30 16:00   ` Paolo Bonzini
  2013-05-15  7:21   ` [Qemu-devel] [SeaBIOS] " Laszlo Ersek
@ 2013-05-15  7:32   ` Christian Borntraeger
  2013-05-15  7:36     ` Hu Tao
  2 siblings, 1 reply; 37+ messages in thread
From: Christian Borntraeger @ 2013-05-15  7:32 UTC (permalink / raw)
  To: Hu Tao
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	seabios, qemu-devel, Markus Armbruster, Blue Swirl,
	Orit Wasserman, Juan Quintela, Alexander Graf, Andrew Jones,
	Alex Williamson, Kevin O'Connor, Sasha Levin,
	Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti, Paolo Bonzini

On 05/04/13 09:17, Hu Tao wrote:
> pvpanic device is used to notify host(qemu) when guest panic happens.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Another question: are you planning to provide libvirt support? Currently
I see the guest as paused after a crash. Since there is a crashed state in
libvirt it might make sense to use that. 

Christian

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

* Re: [Qemu-devel] [SeaBIOS] [PATCH v17] Add pvpanic device driver
  2013-05-15  7:27     ` Hu Tao
  2013-05-15  7:30       ` Hu Tao
@ 2013-05-15  7:36       ` Laszlo Ersek
  2013-05-15 16:25       ` Laszlo Ersek
  2 siblings, 0 replies; 37+ messages in thread
From: Laszlo Ersek @ 2013-05-15  7:36 UTC (permalink / raw)
  To: Hu Tao
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	seabios, qemu-devel, Alexander Graf, Blue Swirl, Orit Wasserman,
	Juan Quintela, Markus Armbruster, Christian Borntraeger,
	Andrew Jones, Alex Williamson, Kevin O'Connor, Sasha Levin,
	Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti, Paolo Bonzini

On 05/15/13 09:27, Hu Tao wrote:
> On Wed, May 15, 2013 at 09:21:54AM +0200, Laszlo Ersek wrote:
>> On 04/05/13 09:17, Hu Tao wrote:
>>
>>> +            Method(RDPT, 0, NotSerialized) {
>>> +                Store(PEPT, Local0)
>>> +                Return (Local0)
>>> +            }
>>> +
>>> +            Method(WRPT, 1, NotSerialized) {
>>> +                Store(Arg0, PEPT)
>>> +            }
>>
>> Please excuse my asking, I haven't been following this -- who's supposed
>> to call these methods? The latest guest kernel patch I managed to find
>> ([PATCH v7] kvm: notify host when the guest is panicked -- probably
>> obsolete by now) appears to do a direct outl().
> 
> An old version calls WRPT but is buggy, so you see the outl version.
> This patch is in seabios before the outl version. If you think these
> methods are needless, feel free to send a patch.

Oh no, that's not what I meant! I'm just rounding up backport candidates :)

Thanks!
Laszlo

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

* Re: [Qemu-devel] [PATCH v17] Add pvpanic device driver
  2013-05-15  7:32   ` [Qemu-devel] " Christian Borntraeger
@ 2013-05-15  7:36     ` Hu Tao
  0 siblings, 0 replies; 37+ messages in thread
From: Hu Tao @ 2013-05-15  7:36 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	seabios, qemu-devel, Markus Armbruster, Blue Swirl,
	Orit Wasserman, Juan Quintela, Alexander Graf, Andrew Jones,
	Alex Williamson, Kevin O'Connor, Sasha Levin,
	Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti, Paolo Bonzini

On Wed, May 15, 2013 at 09:32:40AM +0200, Christian Borntraeger wrote:
> On 05/04/13 09:17, Hu Tao wrote:
> > pvpanic device is used to notify host(qemu) when guest panic happens.
> > 
> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> > Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> 
> Another question: are you planning to provide libvirt support? Currently
> I see the guest as paused after a crash. Since there is a crashed state in
> libvirt it might make sense to use that. 

Yep, patch for libvirt is in progress.

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

* Re: [Qemu-devel] [SeaBIOS] [PATCH v17] Add pvpanic device driver
  2013-05-15 16:25       ` Laszlo Ersek
@ 2013-05-15 16:25         ` Paolo Bonzini
  2013-05-15 16:34           ` Laszlo Ersek
  0 siblings, 1 reply; 37+ messages in thread
From: Paolo Bonzini @ 2013-05-15 16:25 UTC (permalink / raw)
  To: Laszlo Ersek
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Hu Tao, seabios,
	qemu-devel, Markus Armbruster, Blue Swirl, Orit Wasserman,
	Juan Quintela, Alexander Graf, Christian Borntraeger, Jan Kiszka,
	Andrew Jones, Alex Williamson, Kevin O'Connor, Sasha Levin,
	Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti

Il 15/05/2013 18:25, Laszlo Ersek ha scritto:
> (Not sure why the CC list has grown this huge, but I'm adding Drew for
> good mesaure.)
> 
> On 05/15/13 09:27, Hu Tao wrote:
>> On Wed, May 15, 2013 at 09:21:54AM +0200, Laszlo Ersek wrote:
>>> On 04/05/13 09:17, Hu Tao wrote:
>>>
>>>> +            Method(RDPT, 0, NotSerialized) {
>>>> +                Store(PEPT, Local0)
>>>> +                Return (Local0)
>>>> +            }
>>>> +
>>>> +            Method(WRPT, 1, NotSerialized) {
>>>> +                Store(Arg0, PEPT)
>>>> +            }
>>>
>>> Please excuse my asking, I haven't been following this -- who's supposed
>>> to call these methods? The latest guest kernel patch I managed to find
>>> ([PATCH v7] kvm: notify host when the guest is panicked -- probably
>>> obsolete by now) appears to do a direct outl().
>>
>> An old version calls WRPT but is buggy, so you see the outl version.
>> This patch is in seabios before the outl version. If you think these
>> methods are needless, feel free to send a patch.
> 
> After Drew located the guest kernel commit for me,
> 
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=8b10acd7
> 
> I can see this SeaBIOS patch *is* necessary -- even though the RDPT /
> WRPT methods are not used for port access, the port number itself is
> available from ACPI (\_SB.PCI0.ISA.PEVT._CRS, identified by the
> "QEMU0001" HID) to the kernel.
> 
> Hu, can you (and are you willing to) relicense this commit (seabios
> commit e9725dd7) under the 2-clause BSDL so I can port it to OVMF?
> 
> (Actually I'm somewhat confused because the first S-o-b is from Paolo.
> Since I share an employer with Paolo, getting permission from Paolo
> would be either quite easy or even unnecessary. Anyway it's better to ask!)

I and Hu did half of the patch each. :)

But I think it's simpler to avoid OVMF and wait for the time when QEMU
will produce the ACPI tables.

Paolo

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

* Re: [Qemu-devel] [SeaBIOS] [PATCH v17] Add pvpanic device driver
  2013-05-15  7:27     ` Hu Tao
  2013-05-15  7:30       ` Hu Tao
  2013-05-15  7:36       ` Laszlo Ersek
@ 2013-05-15 16:25       ` Laszlo Ersek
  2013-05-15 16:25         ` Paolo Bonzini
  2 siblings, 1 reply; 37+ messages in thread
From: Laszlo Ersek @ 2013-05-15 16:25 UTC (permalink / raw)
  To: Hu Tao, Paolo Bonzini
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	seabios, qemu-devel, Markus Armbruster, Blue Swirl,
	Orit Wasserman, Juan Quintela, Alexander Graf,
	Christian Borntraeger, Drew Jones, Alex Williamson,
	Kevin O'Connor, Sasha Levin, Stefan Hajnoczi,
	Luiz Capitulino, KAMEZAWA Hiroyuki, Anthony Liguori,
	Marcelo Tosatti

(Not sure why the CC list has grown this huge, but I'm adding Drew for
good mesaure.)

On 05/15/13 09:27, Hu Tao wrote:
> On Wed, May 15, 2013 at 09:21:54AM +0200, Laszlo Ersek wrote:
>> On 04/05/13 09:17, Hu Tao wrote:
>>
>>> +            Method(RDPT, 0, NotSerialized) {
>>> +                Store(PEPT, Local0)
>>> +                Return (Local0)
>>> +            }
>>> +
>>> +            Method(WRPT, 1, NotSerialized) {
>>> +                Store(Arg0, PEPT)
>>> +            }
>>
>> Please excuse my asking, I haven't been following this -- who's supposed
>> to call these methods? The latest guest kernel patch I managed to find
>> ([PATCH v7] kvm: notify host when the guest is panicked -- probably
>> obsolete by now) appears to do a direct outl().
> 
> An old version calls WRPT but is buggy, so you see the outl version.
> This patch is in seabios before the outl version. If you think these
> methods are needless, feel free to send a patch.

After Drew located the guest kernel commit for me,

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=8b10acd7

I can see this SeaBIOS patch *is* necessary -- even though the RDPT /
WRPT methods are not used for port access, the port number itself is
available from ACPI (\_SB.PCI0.ISA.PEVT._CRS, identified by the
"QEMU0001" HID) to the kernel.

Hu, can you (and are you willing to) relicense this commit (seabios
commit e9725dd7) under the 2-clause BSDL so I can port it to OVMF?

(Actually I'm somewhat confused because the first S-o-b is from Paolo.
Since I share an employer with Paolo, getting permission from Paolo
would be either quite easy or even unnecessary. Anyway it's better to ask!)

Thanks,
Laszlo

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

* Re: [Qemu-devel] [SeaBIOS] [PATCH v17] Add pvpanic device driver
  2013-05-15 16:25         ` Paolo Bonzini
@ 2013-05-15 16:34           ` Laszlo Ersek
  0 siblings, 0 replies; 37+ messages in thread
From: Laszlo Ersek @ 2013-05-15 16:34 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Hu Tao, seabios,
	qemu-devel, Markus Armbruster, Blue Swirl, Orit Wasserman,
	Juan Quintela, Alexander Graf, Christian Borntraeger, Jan Kiszka,
	Andrew Jones, Alex Williamson, Kevin O'Connor, Sasha Levin,
	Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti

On 05/15/13 18:25, Paolo Bonzini wrote:
> Il 15/05/2013 18:25, Laszlo Ersek ha scritto:
>> (Not sure why the CC list has grown this huge, but I'm adding Drew for
>> good mesaure.)
>>
>> On 05/15/13 09:27, Hu Tao wrote:
>>> On Wed, May 15, 2013 at 09:21:54AM +0200, Laszlo Ersek wrote:
>>>> On 04/05/13 09:17, Hu Tao wrote:
>>>>
>>>>> +            Method(RDPT, 0, NotSerialized) {
>>>>> +                Store(PEPT, Local0)
>>>>> +                Return (Local0)
>>>>> +            }
>>>>> +
>>>>> +            Method(WRPT, 1, NotSerialized) {
>>>>> +                Store(Arg0, PEPT)
>>>>> +            }
>>>>
>>>> Please excuse my asking, I haven't been following this -- who's supposed
>>>> to call these methods? The latest guest kernel patch I managed to find
>>>> ([PATCH v7] kvm: notify host when the guest is panicked -- probably
>>>> obsolete by now) appears to do a direct outl().
>>>
>>> An old version calls WRPT but is buggy, so you see the outl version.
>>> This patch is in seabios before the outl version. If you think these
>>> methods are needless, feel free to send a patch.
>>
>> After Drew located the guest kernel commit for me,
>>
>> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=8b10acd7
>>
>> I can see this SeaBIOS patch *is* necessary -- even though the RDPT /
>> WRPT methods are not used for port access, the port number itself is
>> available from ACPI (\_SB.PCI0.ISA.PEVT._CRS, identified by the
>> "QEMU0001" HID) to the kernel.
>>
>> Hu, can you (and are you willing to) relicense this commit (seabios
>> commit e9725dd7) under the 2-clause BSDL so I can port it to OVMF?
>>
>> (Actually I'm somewhat confused because the first S-o-b is from Paolo.
>> Since I share an employer with Paolo, getting permission from Paolo
>> would be either quite easy or even unnecessary. Anyway it's better to ask!)
> 
> I and Hu did half of the patch each. :)
> 
> But I think it's simpler to avoid OVMF and wait for the time when QEMU
> will produce the ACPI tables.

That's fine by me; thanks.
Laszlo

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

* Re: [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED
  2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED Hu Tao
@ 2013-05-17  6:59   ` Christian Borntraeger
  2013-05-17  7:43     ` [Qemu-devel] [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED -> RUN_STATE_FINISH_MIGRATE Hu Tao
  2013-05-17  7:50     ` [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED Markus Armbruster
  0 siblings, 2 replies; 37+ messages in thread
From: Christian Borntraeger @ 2013-05-17  6:59 UTC (permalink / raw)
  To: Hu Tao
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	qemu-devel, Markus Armbruster, Blue Swirl, Orit Wasserman,
	Juan Quintela, Alexander Graf, Andrew Jones, Alex Williamson,
	Sasha Levin, Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti, Paolo Bonzini

On 05/04/13 08:36, Hu Tao wrote:
> The guest will be in this state when it is panicked.
> 
> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

This actually broken virsh dump without --memory-only:

ERROR: invalid runstate transition: 'guest-panicked' -> 'finish-migrate'


(virsh dump without memory-only falls back to migrate "exec: cat > dumpfile")

Christian

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

* [Qemu-devel] [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED -> RUN_STATE_FINISH_MIGRATE
  2013-05-17  6:59   ` Christian Borntraeger
@ 2013-05-17  7:43     ` Hu Tao
  2013-05-17  8:03       ` [Qemu-devel] [PATCH for-1.5] " Paolo Bonzini
  2013-05-17  8:22       ` [Qemu-devel] [PATCH] " Christian Borntraeger
  2013-05-17  7:50     ` [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED Markus Armbruster
  1 sibling, 2 replies; 37+ messages in thread
From: Hu Tao @ 2013-05-17  7:43 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	qemu-devel, Markus Armbruster, Blue Swirl, Orit Wasserman,
	Juan Quintela, Alexander Graf, Andrew Jones, Alex Williamson,
	Sasha Levin, Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti, Paolo Bonzini

On Fri, May 17, 2013 at 08:59:15AM +0200, Christian Borntraeger wrote:
> On 05/04/13 08:36, Hu Tao wrote:
> > The guest will be in this state when it is panicked.
> > 
> > Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> > Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> 
> This actually broken virsh dump without --memory-only:
> 
> ERROR: invalid runstate transition: 'guest-panicked' -> 'finish-migrate'
> 
> 
> (virsh dump without memory-only falls back to migrate "exec: cat > dumpfile")
> 
> Christian

This patch should fix the problem:

>From d470feefe3d320c43c1fb2eb43457a99b96cdc98 Mon Sep 17 00:00:00 2001
From: Hu Tao <hutao@cn.fujitsu.com>
Date: Fri, 17 May 2013 15:39:07 +0800
Subject: [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED ->
 RUN_STATE_FINISH_MIGRATE

This fixes a problem that after guest panic happens, virsh dump without
--memory-only fails:

ERROR: invalid runstate transition: 'guest-panicked' -> 'finish-migrate'

Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 vl.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/vl.c b/vl.c
index be0a93c..59dc0b4 100644
--- a/vl.c
+++ b/vl.c
@@ -609,6 +609,7 @@ static const RunStateTransition runstate_transitions_def[] = {
     { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
 
     { RUN_STATE_GUEST_PANICKED, RUN_STATE_PAUSED },
+    { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE },
 
     { RUN_STATE_MAX, RUN_STATE_MAX },
 };
-- 
1.8.1.4

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

* Re: [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED
  2013-05-17  6:59   ` Christian Borntraeger
  2013-05-17  7:43     ` [Qemu-devel] [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED -> RUN_STATE_FINISH_MIGRATE Hu Tao
@ 2013-05-17  7:50     ` Markus Armbruster
  1 sibling, 0 replies; 37+ messages in thread
From: Markus Armbruster @ 2013-05-17  7:50 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: Marcelo Tosatti, Peter Maydell, Andrew Jones, Anthony Liguori,
	Gleb Natapov, Michael S. Tsirkin, Hu Tao, Juan Quintela,
	qemu-devel, Alexander Graf, Blue Swirl, Orit Wasserman,
	Alex Williamson, Sasha Levin, Stefan Hajnoczi, Jan Kiszka,
	Paolo Bonzini, Luiz Capitulino, KAMEZAWA Hiroyuki

Christian Borntraeger <borntraeger@de.ibm.com> writes:

> On 05/04/13 08:36, Hu Tao wrote:
>> The guest will be in this state when it is panicked.
>> 
>> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
>> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
>
> This actually broken virsh dump without --memory-only:
>
> ERROR: invalid runstate transition: 'guest-panicked' -> 'finish-migrate'
>
>
> (virsh dump without memory-only falls back to migrate "exec: cat > dumpfile")
>
> Christian

See also
http://lists.nongnu.org/archive/html/qemu-devel/2013-03/msg03399.html

Should've dug deeper then.

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

* Re: [Qemu-devel] [PATCH for-1.5] vl: new runstate transition: RUN_STATE_GUEST_PANICKED -> RUN_STATE_FINISH_MIGRATE
  2013-05-17  7:43     ` [Qemu-devel] [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED -> RUN_STATE_FINISH_MIGRATE Hu Tao
@ 2013-05-17  8:03       ` Paolo Bonzini
  2013-05-17  8:22       ` [Qemu-devel] [PATCH] " Christian Borntraeger
  1 sibling, 0 replies; 37+ messages in thread
From: Paolo Bonzini @ 2013-05-17  8:03 UTC (permalink / raw)
  To: Hu Tao
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	qemu-devel, Markus Armbruster, Blue Swirl, Orit Wasserman,
	Juan Quintela, Alexander Graf, Christian Borntraeger,
	Andrew Jones, 1.3.x, Alex Williamson, Sasha Levin,
	Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti

Il 17/05/2013 09:43, Hu Tao ha scritto:
> On Fri, May 17, 2013 at 08:59:15AM +0200, Christian Borntraeger wrote:
>> On 05/04/13 08:36, Hu Tao wrote:
>>> The guest will be in this state when it is panicked.
>>>
>>> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
>>> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
>>
>> This actually broken virsh dump without --memory-only:
>>
>> ERROR: invalid runstate transition: 'guest-panicked' -> 'finish-migrate'
>>
>>
>> (virsh dump without memory-only falls back to migrate "exec: cat > dumpfile")
>>
>> Christian
> 
> This patch should fix the problem:
> 
> From d470feefe3d320c43c1fb2eb43457a99b96cdc98 Mon Sep 17 00:00:00 2001
> From: Hu Tao <hutao@cn.fujitsu.com>
> Date: Fri, 17 May 2013 15:39:07 +0800
> Subject: [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED ->
>  RUN_STATE_FINISH_MIGRATE
> 
> This fixes a problem that after guest panic happens, virsh dump without
> --memory-only fails:
> 
> ERROR: invalid runstate transition: 'guest-panicked' -> 'finish-migrate'
> 
> Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Adding qemu-stable, but perhaps we can get this into 1.5 as well.

Paolo

> ---
>  vl.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/vl.c b/vl.c
> index be0a93c..59dc0b4 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -609,6 +609,7 @@ static const RunStateTransition runstate_transitions_def[] = {
>      { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
>  
>      { RUN_STATE_GUEST_PANICKED, RUN_STATE_PAUSED },
> +    { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE },
>  
>      { RUN_STATE_MAX, RUN_STATE_MAX },
>  };
> 

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

* Re: [Qemu-devel] [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED -> RUN_STATE_FINISH_MIGRATE
  2013-05-17  7:43     ` [Qemu-devel] [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED -> RUN_STATE_FINISH_MIGRATE Hu Tao
  2013-05-17  8:03       ` [Qemu-devel] [PATCH for-1.5] " Paolo Bonzini
@ 2013-05-17  8:22       ` Christian Borntraeger
  1 sibling, 0 replies; 37+ messages in thread
From: Christian Borntraeger @ 2013-05-17  8:22 UTC (permalink / raw)
  To: Hu Tao
  Cc: Peter Maydell, Gleb Natapov, Michael S. Tsirkin, Jan Kiszka,
	qemu-devel, Markus Armbruster, Blue Swirl, Orit Wasserman,
	Juan Quintela, Alexander Graf, Andrew Jones, Alex Williamson,
	Sasha Levin, Stefan Hajnoczi, Luiz Capitulino, KAMEZAWA Hiroyuki,
	Anthony Liguori, Marcelo Tosatti, Paolo Bonzini

On 17/05/13 09:43, Hu Tao wrote:

> ERROR: invalid runstate transition: 'guest-panicked' -> 'finish-migrate'
> 
> Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>

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

end of thread, other threads:[~2013-05-17  8:22 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-05  6:36 [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event Hu Tao
2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED Hu Tao
2013-05-17  6:59   ` Christian Borntraeger
2013-05-17  7:43     ` [Qemu-devel] [PATCH] vl: new runstate transition: RUN_STATE_GUEST_PANICKED -> RUN_STATE_FINISH_MIGRATE Hu Tao
2013-05-17  8:03       ` [Qemu-devel] [PATCH for-1.5] " Paolo Bonzini
2013-05-17  8:22       ` [Qemu-devel] [PATCH] " Christian Borntraeger
2013-05-17  7:50     ` [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED Markus Armbruster
2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 2/6] add a new qevent: QEVENT_GUEST_PANICKED Hu Tao
2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 3/6] introduce a new qom device to deal with panicked event Hu Tao
2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 4/6] pvpanic: pass configurable ioport to seabios Hu Tao
2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default Hu Tao
2013-04-05 11:14   ` Paolo Bonzini
2013-04-08  2:50     ` Hu Tao
2013-04-09  9:06   ` [Qemu-devel] [PATCH] pvpanic: create pvpanic by default for machine 1.5 Hu Tao
2013-04-09  9:34     ` Paolo Bonzini
2013-04-05  6:36 ` [Qemu-devel] [PATCH v17 6/6] pvpanic: add document of pvpanic Hu Tao
2013-04-05  7:10 ` [PATCH v17] pvpanic: pvpanic device driver Hu Tao
2013-04-05  7:10   ` [Qemu-devel] " Hu Tao
2013-04-05 11:45   ` Paolo Bonzini
2013-04-05 11:45     ` [Qemu-devel] " Paolo Bonzini
2013-04-05 11:45     ` Paolo Bonzini
2013-04-30 15:39   ` Paolo Bonzini
2013-04-30 15:39     ` [Qemu-devel] " Paolo Bonzini
2013-04-05  7:17 ` [Qemu-devel] [PATCH v17] Add " Hu Tao
2013-04-30 16:00   ` Paolo Bonzini
2013-05-01  1:07     ` Kevin O'Connor
2013-05-15  7:21   ` [Qemu-devel] [SeaBIOS] " Laszlo Ersek
2013-05-15  7:27     ` Hu Tao
2013-05-15  7:30       ` Hu Tao
2013-05-15  7:36       ` Laszlo Ersek
2013-05-15 16:25       ` Laszlo Ersek
2013-05-15 16:25         ` Paolo Bonzini
2013-05-15 16:34           ` Laszlo Ersek
2013-05-15  7:32   ` [Qemu-devel] " Christian Borntraeger
2013-05-15  7:36     ` Hu Tao
2013-04-05  8:42 ` [Qemu-devel] [PATCH] [RFC] Wire up disabled wait a panicked event on s390 Christian Borntraeger
2013-04-05 13:15   ` Luiz Capitulino

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.