linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4] add support for pci in the pvpanic driver
@ 2021-02-13 19:44 Mihai Carabas
  2021-02-13 19:44 ` [PATCH v4 1/3] misc/pvpanic: split-up generic and platform dependent code Mihai Carabas
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Mihai Carabas @ 2021-02-13 19:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: gregkh, arnd, rdunlap, bobo.shaobowang, Mihai Carabas

This patchset adds support for PCI in the pvpanic driver. The device already
got in qemu [1].

v2:
- mmio -> MMIO, pci -> PCI suggested by Randy Dunlap.
- group pvpanic-common.c and mmio.c in the same module. The intention was to
  have only one module and the common code splitted up to be re-used by the
  pvpanic-pci module in the next patch.
- add a new patch where add the licenses for the new files (when I moved the
  code to mmio.c I preserved the original licenses there)
- properly clean-up PCI device when driver removed.

v3:
- drop patch 3 with licenses and add them when creating files
- create a new patch (2/3) which allowes multiple pvpanic instances

v4:
- fix Makefile in patch 1/3 and 3/3 for pvpanic.o as suggested by Arnd

How to test:

Run a VM with latest qemu which has the pvpanic-pci device:
qemu-system-aarch64  -device pvpanic-pci

Generate a panic in the guest:
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

Observe in the QMP console the panic events received by the device:

{"timestamp": {"seconds": 1613122186, "microseconds": 141729}, "event":
"GUEST_PANICKED", "data": {"action": "pause"}}

{"timestamp": {"seconds": 1613122186, "microseconds": 141833}, "event":
"GUEST_PANICKED", "data": {"action": "poweroff"}}

{"timestamp": {"seconds": 1613122186, "microseconds": 141896}, "event":
"SHUTDOWN", "data": {"guest": true, "reason": "guest-panic"}}


[1] https://github.com/qemu/qemu/commit/9df52f58e76e904fb141b10318362d718f470db2



Mihai Carabas (3):
  misc/pvpanic: split-up generic and platform dependent code
  misc/pvpanic: probe multiple instances
  misc/pvpanic: add PCI driver

 drivers/misc/Kconfig                               |   9 +-
 drivers/misc/Makefile                              |   2 +-
 drivers/misc/pvpanic/Kconfig                       |  25 +++++
 drivers/misc/pvpanic/Makefile                      |   8 ++
 drivers/misc/{pvpanic.c => pvpanic/pvpanic-mmio.c} |  43 ++------
 drivers/misc/pvpanic/pvpanic-pci.c                 |  54 ++++++++++
 drivers/misc/pvpanic/pvpanic.c                     | 120 +++++++++++++++++++++
 drivers/misc/pvpanic/pvpanic.h                     |  16 +++
 8 files changed, 232 insertions(+), 45 deletions(-)
 create mode 100644 drivers/misc/pvpanic/Kconfig
 create mode 100644 drivers/misc/pvpanic/Makefile
 rename drivers/misc/{pvpanic.c => pvpanic/pvpanic-mmio.c} (67%)
 create mode 100644 drivers/misc/pvpanic/pvpanic-pci.c
 create mode 100644 drivers/misc/pvpanic/pvpanic.c
 create mode 100644 drivers/misc/pvpanic/pvpanic.h

-- 
1.8.3.1


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

* [PATCH v4 1/3] misc/pvpanic: split-up generic and platform dependent code
  2021-02-13 19:44 [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
@ 2021-02-13 19:44 ` Mihai Carabas
  2021-02-14  4:39   ` kernel test robot
  2021-02-13 19:44 ` [PATCH v4 2/3] misc/pvpanic: probe multiple instances Mihai Carabas
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Mihai Carabas @ 2021-02-13 19:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: gregkh, arnd, rdunlap, bobo.shaobowang, Mihai Carabas

Split-up generic and platform dependent code in order to be able to re-use
generic event handling code in pvpanic PCI device driver in the next patches.

The code from pvpanic.c was split in two new files:
- pvpanic.c: generic code that handles pvpanic events
- pvpanic-mmio.c: platform/bus dependent code

Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com>
---
 drivers/misc/Kconfig                               |  9 +---
 drivers/misc/Makefile                              |  2 +-
 drivers/misc/pvpanic/Kconfig                       | 19 +++++++
 drivers/misc/pvpanic/Makefile                      |  7 +++
 drivers/misc/{pvpanic.c => pvpanic/pvpanic-mmio.c} | 42 +++------------
 drivers/misc/pvpanic/pvpanic.c                     | 62 ++++++++++++++++++++++
 drivers/misc/pvpanic/pvpanic.h                     | 17 ++++++
 7 files changed, 114 insertions(+), 44 deletions(-)
 create mode 100644 drivers/misc/pvpanic/Kconfig
 create mode 100644 drivers/misc/pvpanic/Makefile
 rename drivers/misc/{pvpanic.c => pvpanic/pvpanic-mmio.c} (67%)
 create mode 100644 drivers/misc/pvpanic/pvpanic.c
 create mode 100644 drivers/misc/pvpanic/pvpanic.h

diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index fafa8b0..0273ecb 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -448,14 +448,6 @@ config MISC_RTSX
 	tristate
 	default MISC_RTSX_PCI || MISC_RTSX_USB
 
-config PVPANIC
-	tristate "pvpanic device support"
-	depends on HAS_IOMEM && (ACPI || OF)
-	help
-	  This driver provides support for the pvpanic device.  pvpanic is
-	  a paravirtualized device provided by QEMU; it lets a virtual machine
-	  (guest) communicate panic events to the host.
-
 config HISI_HIKEY_USB
 	tristate "USB GPIO Hub on HiSilicon Hikey 960/970 Platform"
 	depends on (OF && GPIOLIB) || COMPILE_TEST
@@ -481,4 +473,5 @@ source "drivers/misc/ocxl/Kconfig"
 source "drivers/misc/cardreader/Kconfig"
 source "drivers/misc/habanalabs/Kconfig"
 source "drivers/misc/uacce/Kconfig"
+source "drivers/misc/pvpanic/Kconfig"
 endmenu
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index d23231e..9f411b8 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -52,7 +52,7 @@ obj-$(CONFIG_CXL_BASE)		+= cxl/
 obj-$(CONFIG_PCI_ENDPOINT_TEST)	+= pci_endpoint_test.o
 obj-$(CONFIG_OCXL)		+= ocxl/
 obj-y				+= cardreader/
-obj-$(CONFIG_PVPANIC)   	+= pvpanic.o
+obj-$(CONFIG_PVPANIC)   	+= pvpanic/
 obj-$(CONFIG_HABANA_AI)		+= habanalabs/
 obj-$(CONFIG_UACCE)		+= uacce/
 obj-$(CONFIG_XILINX_SDFEC)	+= xilinx_sdfec.o
diff --git a/drivers/misc/pvpanic/Kconfig b/drivers/misc/pvpanic/Kconfig
new file mode 100644
index 00000000..454f1ee
--- /dev/null
+++ b/drivers/misc/pvpanic/Kconfig
@@ -0,0 +1,19 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Pvpanic Kconfig
+#
+# Copyright (C) 2021 Oracle.
+#
+
+config PVPANIC
+	bool "pvpanic device support"
+	help
+	  This option allows to select a specific pvpanic device driver.
+	  pvpanic is a paravirtualized device provided by QEMU; it lets
+	  a virtual machine (guest) communicate panic events to the host.
+
+config PVPANIC_MMIO
+	tristate "pvpanic MMIO device support"
+	depends on HAS_IOMEM && (ACPI || OF) && PVPANIC
+	help
+	  This driver provides support for the MMIO pvpanic device.
diff --git a/drivers/misc/pvpanic/Makefile b/drivers/misc/pvpanic/Makefile
new file mode 100644
index 00000000..e12a2dc
--- /dev/null
+++ b/drivers/misc/pvpanic/Makefile
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Pvpanic Makefile
+#
+# Copyright (C) 2021 Oracle.
+#
+obj-$(CONFIG_PVPANIC_MMIO)	+= pvpanic.o pvpanic-mmio.o
diff --git a/drivers/misc/pvpanic.c b/drivers/misc/pvpanic/pvpanic-mmio.c
similarity index 67%
rename from drivers/misc/pvpanic.c
rename to drivers/misc/pvpanic/pvpanic-mmio.c
index 41cab29..7454eeb 100644
--- a/drivers/misc/pvpanic.c
+++ b/drivers/misc/pvpanic/pvpanic-mmio.c
@@ -1,12 +1,11 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  Pvpanic Device Support
+ *  Pvpanic MMIO Device Support
  *
  *  Copyright (C) 2013 Fujitsu.
  *  Copyright (C) 2018 ZTE.
- */
-
-#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+ *  Copyright (C) 2021 Oracle.
+*/
 
 #include <linux/io.h>
 #include <linux/kernel.h>
@@ -17,42 +16,17 @@
 #include <linux/types.h>
 
 #include <uapi/misc/pvpanic.h>
-
-static void __iomem *base;
+#include "pvpanic.h"
 
 MODULE_AUTHOR("Hu Tao <hutao@cn.fujitsu.com>");
 MODULE_DESCRIPTION("pvpanic device driver");
 MODULE_LICENSE("GPL");
 
-static void
-pvpanic_send_event(unsigned int event)
-{
-	iowrite8(event, base);
-}
-
-static int
-pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
-		     void *unused)
-{
-	unsigned int event = PVPANIC_PANICKED;
-
-	if (kexec_crash_loaded())
-		event = PVPANIC_CRASH_LOADED;
-
-	pvpanic_send_event(event);
-
-	return NOTIFY_DONE;
-}
-
-static struct notifier_block pvpanic_panic_nb = {
-	.notifier_call = pvpanic_panic_notify,
-	.priority = 1, /* let this called before broken drm_fb_helper */
-};
-
 static int pvpanic_mmio_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct resource *res;
+	void __iomem *base;
 
 	res = platform_get_mem_or_io(pdev, 0);
 	if (!res)
@@ -73,8 +47,7 @@ static int pvpanic_mmio_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
-	atomic_notifier_chain_register(&panic_notifier_list,
-				       &pvpanic_panic_nb);
+	pvpanic_probe(base);
 
 	return 0;
 }
@@ -82,8 +55,7 @@ static int pvpanic_mmio_probe(struct platform_device *pdev)
 static int pvpanic_mmio_remove(struct platform_device *pdev)
 {
 
-	atomic_notifier_chain_unregister(&panic_notifier_list,
-					 &pvpanic_panic_nb);
+	pvpanic_remove();
 
 	return 0;
 }
diff --git a/drivers/misc/pvpanic/pvpanic.c b/drivers/misc/pvpanic/pvpanic.c
new file mode 100644
index 00000000..652ae01
--- /dev/null
+++ b/drivers/misc/pvpanic/pvpanic.c
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ *  Pvpanic Device Support
+ *
+ *  Copyright (C) 2013 Fujitsu.
+ *  Copyright (C) 2018 ZTE.
+ *  Copyright (C) 2021 Oracle.
+ */
+
+#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/kexec.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/types.h>
+
+#include <uapi/misc/pvpanic.h>
+
+static void __iomem *base;
+
+static void
+pvpanic_send_event(unsigned int event)
+{
+	iowrite8(event, base);
+}
+
+static int
+pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
+		     void *unused)
+{
+	unsigned int event = PVPANIC_PANICKED;
+
+	if (kexec_crash_loaded())
+		event = PVPANIC_CRASH_LOADED;
+
+	pvpanic_send_event(event);
+
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block pvpanic_panic_nb = {
+	.notifier_call = pvpanic_panic_notify,
+	.priority = 1, /* let this called before broken drm_fb_helper */
+};
+
+void pvpanic_probe(void __iomem *pbase)
+{
+	base = pbase;
+	atomic_notifier_chain_register(&panic_notifier_list,
+				       &pvpanic_panic_nb);
+}
+EXPORT_SYMBOL_GPL(pvpanic_probe);
+
+void pvpanic_remove(void)
+{
+
+	atomic_notifier_chain_unregister(&panic_notifier_list,
+					 &pvpanic_panic_nb);
+	base = NULL;
+}
+EXPORT_SYMBOL_GPL(pvpanic_remove);
diff --git a/drivers/misc/pvpanic/pvpanic.h b/drivers/misc/pvpanic/pvpanic.h
new file mode 100644
index 00000000..7e75dce
--- /dev/null
+++ b/drivers/misc/pvpanic/pvpanic.h
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ *  Pvpanic Device Support
+ *
+ *  Copyright (C) 2021 Oracle.
+*/
+
+#ifndef PVPANIC_H_
+#define PVPANIC_H_
+
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+void pvpanic_probe(void __iomem *base);
+void pvpanic_remove(void);
+
+#endif /* PVPANIC_H_ */
-- 
1.8.3.1


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

* [PATCH v4 2/3] misc/pvpanic: probe multiple instances
  2021-02-13 19:44 [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
  2021-02-13 19:44 ` [PATCH v4 1/3] misc/pvpanic: split-up generic and platform dependent code Mihai Carabas
@ 2021-02-13 19:44 ` Mihai Carabas
  2021-02-13 19:44 ` [PATCH v4 3/3] misc/pvpanic: add PCI driver Mihai Carabas
  2021-02-28 18:39 ` [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
  3 siblings, 0 replies; 8+ messages in thread
From: Mihai Carabas @ 2021-02-13 19:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: gregkh, arnd, rdunlap, bobo.shaobowang, Mihai Carabas

Create the mecahism that allows multiple pvpanic instances to call
pvpanic_probe and receive panic events. A global list will retain all the
mapped addresses where to write panic events.

Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com>
---
 drivers/misc/pvpanic/pvpanic-mmio.c |  9 ++---
 drivers/misc/pvpanic/pvpanic.c      | 76 ++++++++++++++++++++++++++++++++-----
 drivers/misc/pvpanic/pvpanic.h      |  5 +--
 3 files changed, 73 insertions(+), 17 deletions(-)

diff --git a/drivers/misc/pvpanic/pvpanic-mmio.c b/drivers/misc/pvpanic/pvpanic-mmio.c
index 7454eeb..5425369 100644
--- a/drivers/misc/pvpanic/pvpanic-mmio.c
+++ b/drivers/misc/pvpanic/pvpanic-mmio.c
@@ -22,11 +22,12 @@
 MODULE_DESCRIPTION("pvpanic device driver");
 MODULE_LICENSE("GPL");
 
+static void __iomem *base;
+
 static int pvpanic_mmio_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct resource *res;
-	void __iomem *base;
 
 	res = platform_get_mem_or_io(pdev, 0);
 	if (!res)
@@ -47,15 +48,13 @@ static int pvpanic_mmio_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
-	pvpanic_probe(base);
-
-	return 0;
+	return pvpanic_probe(base);
 }
 
 static int pvpanic_mmio_remove(struct platform_device *pdev)
 {
 
-	pvpanic_remove();
+	pvpanic_remove(base);
 
 	return 0;
 }
diff --git a/drivers/misc/pvpanic/pvpanic.c b/drivers/misc/pvpanic/pvpanic.c
index 652ae01..43b65a3 100644
--- a/drivers/misc/pvpanic/pvpanic.c
+++ b/drivers/misc/pvpanic/pvpanic.c
@@ -14,15 +14,30 @@
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/types.h>
+#include <linux/cdev.h>
+#include <linux/list.h>
+#include <linux/slab.h>
 
 #include <uapi/misc/pvpanic.h>
 
-static void __iomem *base;
+struct pvpanic_instance {
+	void __iomem *base;
+	struct list_head list;
+};
+
+struct list_head pvpanic_list;
+spinlock_t pvpanic_lock;
 
 static void
 pvpanic_send_event(unsigned int event)
 {
-	iowrite8(event, base);
+	struct pvpanic_instance *pi_cur;
+
+	spin_lock(&pvpanic_lock);
+	list_for_each_entry(pi_cur, &pvpanic_list, list) {
+		iowrite8(event, pi_cur->base);
+	}
+	spin_unlock(&pvpanic_lock);
 }
 
 static int
@@ -44,19 +59,62 @@
 	.priority = 1, /* let this called before broken drm_fb_helper */
 };
 
-void pvpanic_probe(void __iomem *pbase)
+int pvpanic_probe(void __iomem *pbase)
 {
-	base = pbase;
-	atomic_notifier_chain_register(&panic_notifier_list,
-				       &pvpanic_panic_nb);
+	struct pvpanic_instance *pi;
+
+	if(!pbase)
+		return -EINVAL;
+
+	pi = kmalloc(sizeof(*pi), GFP_ATOMIC);
+	if (!pi)
+		return -ENOMEM;
+
+	pi->base = pbase;
+	spin_lock(&pvpanic_lock);
+	list_add(&pi->list, &pvpanic_list);
+	spin_unlock(&pvpanic_lock);
+
+	return 0;
 }
 EXPORT_SYMBOL_GPL(pvpanic_probe);
 
-void pvpanic_remove(void)
+void pvpanic_remove(void __iomem *pbase)
+{
+	struct pvpanic_instance *pi_cur, *pi_next;
+
+	if(!pbase)
+		return -EINVAL;
+
+	spin_lock(&pvpanic_lock);
+	list_for_each_entry_safe(pi_cur, pi_next, &pvpanic_list, list) {
+		if (pi_cur->base == pbase) {
+			list_del(&pi_cur->list);
+			kfree(pi_cur);
+			break;
+		}
+	}
+	spin_unlock(&pvpanic_lock);
+}
+EXPORT_SYMBOL_GPL(pvpanic_remove);
+
+static int pvpanic_init(void)
 {
+	INIT_LIST_HEAD(&pvpanic_list);
+	spin_lock_init(&pvpanic_lock);
+
+	atomic_notifier_chain_register(&panic_notifier_list,
+				       &pvpanic_panic_nb);
 
+	return 0;
+}
+
+static void pvpanic_exit(void)
+{
 	atomic_notifier_chain_unregister(&panic_notifier_list,
 					 &pvpanic_panic_nb);
-	base = NULL;
+
 }
-EXPORT_SYMBOL_GPL(pvpanic_remove);
+
+module_init(pvpanic_init);
+module_exit(pvpanic_exit);
diff --git a/drivers/misc/pvpanic/pvpanic.h b/drivers/misc/pvpanic/pvpanic.h
index 7e75dce..02023d7 100644
--- a/drivers/misc/pvpanic/pvpanic.h
+++ b/drivers/misc/pvpanic/pvpanic.h
@@ -8,10 +8,9 @@
 #ifndef PVPANIC_H_
 #define PVPANIC_H_
 
-
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
-void pvpanic_probe(void __iomem *base);
-void pvpanic_remove(void);
+int pvpanic_probe(void __iomem *base);
+void pvpanic_remove(void __iomem *base);
 
 #endif /* PVPANIC_H_ */
-- 
1.8.3.1


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

* [PATCH v4 3/3] misc/pvpanic: add PCI driver
  2021-02-13 19:44 [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
  2021-02-13 19:44 ` [PATCH v4 1/3] misc/pvpanic: split-up generic and platform dependent code Mihai Carabas
  2021-02-13 19:44 ` [PATCH v4 2/3] misc/pvpanic: probe multiple instances Mihai Carabas
@ 2021-02-13 19:44 ` Mihai Carabas
  2021-02-28 18:39 ` [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
  3 siblings, 0 replies; 8+ messages in thread
From: Mihai Carabas @ 2021-02-13 19:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: gregkh, arnd, rdunlap, bobo.shaobowang, Mihai Carabas

Add support for pvpanic PCI device added in qemu [1]. At probe time, obtain the
address where to read/write pvpanic events and pass it to the generic handling
code. Will follow the same logic as pvpanic MMIO device driver. At remove time,
unmap base address and disable PCI device.

[1] https://github.com/qemu/qemu/commit/9df52f58e76e904fb141b10318362d718f470db2

Signed-off-by: Mihai Carabas <mihai.carabas@oracle.com>
---
 drivers/misc/pvpanic/Kconfig       |  6 +++++
 drivers/misc/pvpanic/Makefile      |  1 +
 drivers/misc/pvpanic/pvpanic-pci.c | 54 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+)
 create mode 100644 drivers/misc/pvpanic/pvpanic-pci.c

diff --git a/drivers/misc/pvpanic/Kconfig b/drivers/misc/pvpanic/Kconfig
index 454f1ee..9a081ed 100644
--- a/drivers/misc/pvpanic/Kconfig
+++ b/drivers/misc/pvpanic/Kconfig
@@ -17,3 +17,9 @@ config PVPANIC_MMIO
 	depends on HAS_IOMEM && (ACPI || OF) && PVPANIC
 	help
 	  This driver provides support for the MMIO pvpanic device.
+
+config PVPANIC_PCI
+	tristate "pvpanic PCI device support"
+	depends on PCI && PVPANIC
+	help
+	  This driver provides support for the PCI pvpanic device.
diff --git a/drivers/misc/pvpanic/Makefile b/drivers/misc/pvpanic/Makefile
index e12a2dc..9471df7 100644
--- a/drivers/misc/pvpanic/Makefile
+++ b/drivers/misc/pvpanic/Makefile
@@ -5,3 +5,4 @@
 # Copyright (C) 2021 Oracle.
 #
 obj-$(CONFIG_PVPANIC_MMIO)	+= pvpanic.o pvpanic-mmio.o
+obj-$(CONFIG_PVPANIC_PCI)	+= pvpanic.o pvpanic-pci.o
diff --git a/drivers/misc/pvpanic/pvpanic-pci.c b/drivers/misc/pvpanic/pvpanic-pci.c
new file mode 100644
index 00000000..af94ab8
--- /dev/null
+++ b/drivers/misc/pvpanic/pvpanic-pci.c
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ *  Pvpanic PCI Device Support
+ *
+ *  Copyright (C) 2021 Oracle.
+*/
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/types.h>
+#include "pvpanic.h"
+
+#define PCI_VENDOR_ID_REDHAT             0x1b36
+#define PCI_DEVICE_ID_REDHAT_PVPANIC     0x0011
+
+static void __iomem *base;
+static const struct pci_device_id pvpanic_pci_id_tbl[]  = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_REDHAT, PCI_DEVICE_ID_REDHAT_PVPANIC),},
+	{}
+};
+
+static int pvpanic_pci_probe(struct pci_dev *pdev,
+			     const struct pci_device_id *ent)
+{
+	int ret;
+	struct resource res;
+
+	ret = pci_enable_device(pdev);
+	if (ret < 0)
+		return ret;
+
+	base = pci_iomap(pdev, 0, 0);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
+
+	return pvpanic_probe(base);
+}
+
+static void pvpanic_pci_remove(struct pci_dev *pdev)
+{
+	pvpanic_remove(base);
+	iounmap(base);
+	pci_disable_device(pdev);
+}
+
+static struct pci_driver pvpanic_pci_driver = {
+	.name =         "pvpanic-pci",
+	.id_table =     pvpanic_pci_id_tbl,
+	.probe =        pvpanic_pci_probe,
+	.remove =       pvpanic_pci_remove,
+};
+
+module_pci_driver(pvpanic_pci_driver);
-- 
1.8.3.1


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

* Re: [PATCH v4 1/3] misc/pvpanic: split-up generic and platform dependent code
  2021-02-13 19:44 ` [PATCH v4 1/3] misc/pvpanic: split-up generic and platform dependent code Mihai Carabas
@ 2021-02-14  4:39   ` kernel test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2021-02-14  4:39 UTC (permalink / raw)
  To: Mihai Carabas, linux-kernel
  Cc: kbuild-all, clang-built-linux, gregkh, arnd, rdunlap,
	bobo.shaobowang, Mihai Carabas

[-- Attachment #1: Type: text/plain, Size: 2355 bytes --]

Hi Mihai,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linux/master]
[also build test WARNING on soc/for-next linus/master v5.11-rc7]
[cannot apply to char-misc/char-misc-testing next-20210212]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Mihai-Carabas/misc-pvpanic-split-up-generic-and-platform-dependent-code/20210214-044449
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 2ab38c17aac10bf55ab3efde4c4db3893d8691d2
config: arm-randconfig-r035-20210214 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/0day-ci/linux/commit/2014e17b0bb6fb0bbea9dfa9d4d04ad6352d77bf
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Mihai-Carabas/misc-pvpanic-split-up-generic-and-platform-dependent-code/20210214-044449
        git checkout 2014e17b0bb6fb0bbea9dfa9d4d04ad6352d77bf
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   In file included from drivers/misc/pvpanic/pvpanic-mmio.c:19:
>> drivers/misc/pvpanic/pvpanic.h:12:9: warning: 'pr_fmt' macro redefined [-Wmacro-redefined]
   #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
           ^
   include/linux/printk.h:301:9: note: previous definition is here
   #define pr_fmt(fmt) fmt
           ^
   1 warning generated.


vim +/pr_fmt +12 drivers/misc/pvpanic/pvpanic.h

    10	
    11	
  > 12	#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
    13	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26707 bytes --]

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

* Re: [PATCH v4] add support for pci in the pvpanic driver
  2021-02-13 19:44 [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
                   ` (2 preceding siblings ...)
  2021-02-13 19:44 ` [PATCH v4 3/3] misc/pvpanic: add PCI driver Mihai Carabas
@ 2021-02-28 18:39 ` Mihai Carabas
  2021-03-10 16:08   ` Greg KH
  3 siblings, 1 reply; 8+ messages in thread
From: Mihai Carabas @ 2021-02-28 18:39 UTC (permalink / raw)
  To: linux-kernel; +Cc: gregkh, arnd, rdunlap, bobo.shaobowang

Hello,

Any feedback on this last series?

Thank you,
Mihai

> This patchset adds support for PCI in the pvpanic driver. The device already
> got in qemu [1].
>
> v2:
> - mmio -> MMIO, pci -> PCI suggested by Randy Dunlap.
> - group pvpanic-common.c and mmio.c in the same module. The intention was to
>    have only one module and the common code splitted up to be re-used by the
>    pvpanic-pci module in the next patch.
> - add a new patch where add the licenses for the new files (when I moved the
>    code to mmio.c I preserved the original licenses there)
> - properly clean-up PCI device when driver removed.
>
> v3:
> - drop patch 3 with licenses and add them when creating files
> - create a new patch (2/3) which allowes multiple pvpanic instances
>
> v4:
> - fix Makefile in patch 1/3 and 3/3 for pvpanic.o as suggested by Arnd
>
> How to test:
>
> Run a VM with latest qemu which has the pvpanic-pci device:
> qemu-system-aarch64  -device pvpanic-pci
>
> Generate a panic in the guest:
> echo 1 > /proc/sys/kernel/sysrq
> echo c > /proc/sysrq-trigger
>
> Observe in the QMP console the panic events received by the device:
>
> {"timestamp": {"seconds": 1613122186, "microseconds": 141729}, "event":
> "GUEST_PANICKED", "data": {"action": "pause"}}
>
> {"timestamp": {"seconds": 1613122186, "microseconds": 141833}, "event":
> "GUEST_PANICKED", "data": {"action": "poweroff"}}
>
> {"timestamp": {"seconds": 1613122186, "microseconds": 141896}, "event":
> "SHUTDOWN", "data": {"guest": true, "reason": "guest-panic"}}
>
>
> [1] https://github.com/qemu/qemu/commit/9df52f58e76e904fb141b10318362d718f470db2
>
>
>
> Mihai Carabas (3):
>    misc/pvpanic: split-up generic and platform dependent code
>    misc/pvpanic: probe multiple instances
>    misc/pvpanic: add PCI driver
>
>   drivers/misc/Kconfig                               |   9 +-
>   drivers/misc/Makefile                              |   2 +-
>   drivers/misc/pvpanic/Kconfig                       |  25 +++++
>   drivers/misc/pvpanic/Makefile                      |   8 ++
>   drivers/misc/{pvpanic.c => pvpanic/pvpanic-mmio.c} |  43 ++------
>   drivers/misc/pvpanic/pvpanic-pci.c                 |  54 ++++++++++
>   drivers/misc/pvpanic/pvpanic.c                     | 120 +++++++++++++++++++++
>   drivers/misc/pvpanic/pvpanic.h                     |  16 +++
>   8 files changed, 232 insertions(+), 45 deletions(-)
>   create mode 100644 drivers/misc/pvpanic/Kconfig
>   create mode 100644 drivers/misc/pvpanic/Makefile
>   rename drivers/misc/{pvpanic.c => pvpanic/pvpanic-mmio.c} (67%)
>   create mode 100644 drivers/misc/pvpanic/pvpanic-pci.c
>   create mode 100644 drivers/misc/pvpanic/pvpanic.c
>   create mode 100644 drivers/misc/pvpanic/pvpanic.h
>


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

* Re: [PATCH v4] add support for pci in the pvpanic driver
  2021-02-28 18:39 ` [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
@ 2021-03-10 16:08   ` Greg KH
  2021-03-10 16:09     ` Greg KH
  0 siblings, 1 reply; 8+ messages in thread
From: Greg KH @ 2021-03-10 16:08 UTC (permalink / raw)
  To: Mihai Carabas; +Cc: linux-kernel, arnd, rdunlap, bobo.shaobowang

On Sun, Feb 28, 2021 at 08:39:29PM +0200, Mihai Carabas wrote:
> Hello,
> 
> Any feedback on this last series?

Other than the "this breaks the build according to the kernel test
robot"?

I think that needs to be fixed before we can do anything here...

thnaks,

greg k-h

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

* Re: [PATCH v4] add support for pci in the pvpanic driver
  2021-03-10 16:08   ` Greg KH
@ 2021-03-10 16:09     ` Greg KH
  0 siblings, 0 replies; 8+ messages in thread
From: Greg KH @ 2021-03-10 16:09 UTC (permalink / raw)
  To: Mihai Carabas; +Cc: linux-kernel, arnd, rdunlap, bobo.shaobowang

On Wed, Mar 10, 2021 at 05:08:46PM +0100, Greg KH wrote:
> On Sun, Feb 28, 2021 at 08:39:29PM +0200, Mihai Carabas wrote:
> > Hello,
> > 
> > Any feedback on this last series?
> 
> Other than the "this breaks the build according to the kernel test
> robot"?
> 
> I think that needs to be fixed before we can do anything here...

Ok, it didn't break the build, it added a warning, which is still not
allowed, as you know.

thanks,

greg k-h

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

end of thread, other threads:[~2021-03-10 16:10 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-13 19:44 [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
2021-02-13 19:44 ` [PATCH v4 1/3] misc/pvpanic: split-up generic and platform dependent code Mihai Carabas
2021-02-14  4:39   ` kernel test robot
2021-02-13 19:44 ` [PATCH v4 2/3] misc/pvpanic: probe multiple instances Mihai Carabas
2021-02-13 19:44 ` [PATCH v4 3/3] misc/pvpanic: add PCI driver Mihai Carabas
2021-02-28 18:39 ` [PATCH v4] add support for pci in the pvpanic driver Mihai Carabas
2021-03-10 16:08   ` Greg KH
2021-03-10 16:09     ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).