linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/2] printk: Add function to return log buffer address and size
@ 2014-08-09  5:45 Vasant Hegde
  2014-08-09  5:45 ` [PATCH v3 2/2] powerpc/powernv: Interface to register/unregister opal dump region Vasant Hegde
  2014-08-11  1:13 ` [PATCH v3 1/2] printk: Add function to return log buffer address and size Benjamin Herrenschmidt
  0 siblings, 2 replies; 4+ messages in thread
From: Vasant Hegde @ 2014-08-09  5:45 UTC (permalink / raw)
  To: linuxppc-dev
  Cc: Benjamin Herrenschmidt, Andrew Morton, Linus Torvalds, linux-kernel

Platforms like IBM Power Systems supports service processor
assisted dump. It provides interface to add memory region to
be captured when system is crashed.

During initialization/running we can add kernel memory region
to be collected.

Presently we don't have a way to get the log buffer base address
and size. This patch adds support to return log buffer address
and size.

Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

---
Next patch extends arch specific code to add log buffer to platform
dump.

Changes in v3:
  As Andrew suggested changed function names and return type.
  (https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/119802.html).

Ben,
  - This patchset applies cleanly on powerpc next branch.
  - Andrew Morton suggested to include this patch in powerpc tree.
    (https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/119802.html)


 include/linux/printk.h |    3 +++
 kernel/printk/printk.c |   12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/include/linux/printk.h b/include/linux/printk.h
index 319ff7e..b8c0316 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -10,6 +10,9 @@
 extern const char linux_banner[];
 extern const char linux_proc_banner[];
 
+extern char *log_buf_addr_get(void);
+extern u32 log_buf_len_get(void);
+
 static inline int printk_get_level(const char *buffer)
 {
 	if (buffer[0] == KERN_SOH_ASCII && buffer[1]) {
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index ea2d5f6..d6a984c 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -270,6 +270,18 @@ static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
 static char *log_buf = __log_buf;
 static u32 log_buf_len = __LOG_BUF_LEN;
 
+/* Return log buffer address */
+char *log_buf_addr_get(void)
+{
+	return log_buf;
+}
+
+/* Return log buffer size */
+u32 log_buf_len_get(void)
+{
+	return log_buf_len;
+}
+
 /* human readable text of the record */
 static char *log_text(const struct printk_log *msg)
 {


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

* [PATCH v3 2/2] powerpc/powernv: Interface to register/unregister opal dump region
  2014-08-09  5:45 [PATCH v3 1/2] printk: Add function to return log buffer address and size Vasant Hegde
@ 2014-08-09  5:45 ` Vasant Hegde
  2014-08-11  1:13 ` [PATCH v3 1/2] printk: Add function to return log buffer address and size Benjamin Herrenschmidt
  1 sibling, 0 replies; 4+ messages in thread
From: Vasant Hegde @ 2014-08-09  5:45 UTC (permalink / raw)
  To: linuxppc-dev
  Cc: Benjamin Herrenschmidt, Andrew Morton, Linus Torvalds, linux-kernel

PowerNV platform is capable of capturing host memory region when system
crashes (because of host/firmware). We have new OPAL API to register/
unregister memory region to be captured when system crashes.

This patch adds support for new API. Also during boot time we register
kernel log buffer and unregister before doing kexec.

Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
 arch/powerpc/include/asm/opal.h                |   11 +++++++++++
 arch/powerpc/platforms/powernv/opal-wrappers.S |    2 ++
 arch/powerpc/platforms/powernv/opal.c          |   23 +++++++++++++++++++++++
 3 files changed, 36 insertions(+)

diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h
index b2f8ce1..86055e5 100644
--- a/arch/powerpc/include/asm/opal.h
+++ b/arch/powerpc/include/asm/opal.h
@@ -149,6 +149,8 @@ struct opal_sg_list {
 #define OPAL_DUMP_INFO2				94
 #define OPAL_PCI_EEH_FREEZE_SET			97
 #define OPAL_HANDLE_HMI				98
+#define OPAL_REGISTER_DUMP_REGION		101
+#define OPAL_UNREGISTER_DUMP_REGION		102
 
 #ifndef __ASSEMBLY__
 
@@ -920,6 +922,8 @@ int64_t opal_set_param(uint64_t token, uint32_t param_id, uint64_t buffer,
 		uint64_t length);
 int64_t opal_sensor_read(uint32_t sensor_hndl, int token, __be32 *sensor_data);
 int64_t opal_handle_hmi(void);
+int64_t opal_register_dump_region(uint32_t id, uint64_t start, uint64_t end);
+int64_t opal_unregister_dump_region(uint32_t id);
 
 /* Internal functions */
 extern int early_init_dt_scan_opal(unsigned long node, const char *uname,
@@ -974,6 +978,13 @@ struct opal_sg_list *opal_vmalloc_to_sg_list(void *vmalloc_addr,
 					     unsigned long vmalloc_size);
 void opal_free_sg_list(struct opal_sg_list *sg);
 
+/*
+ * Dump region ID range usable by the OS
+ */
+#define OPAL_DUMP_REGION_HOST_START		0x80
+#define OPAL_DUMP_REGION_LOG_BUF		0x80
+#define OPAL_DUMP_REGION_HOST_END		0xFF
+
 #endif /* __ASSEMBLY__ */
 
 #endif /* __OPAL_H */
diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S
index a328be4..2e6ce1b 100644
--- a/arch/powerpc/platforms/powernv/opal-wrappers.S
+++ b/arch/powerpc/platforms/powernv/opal-wrappers.S
@@ -245,3 +245,5 @@ OPAL_CALL(opal_sensor_read,			OPAL_SENSOR_READ);
 OPAL_CALL(opal_get_param,			OPAL_GET_PARAM);
 OPAL_CALL(opal_set_param,			OPAL_SET_PARAM);
 OPAL_CALL(opal_handle_hmi,			OPAL_HANDLE_HMI);
+OPAL_CALL(opal_register_dump_region,		OPAL_REGISTER_DUMP_REGION);
+OPAL_CALL(opal_unregister_dump_region,		OPAL_UNREGISTER_DUMP_REGION);
diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
index f0a01a4..b44eec3 100644
--- a/arch/powerpc/platforms/powernv/opal.c
+++ b/arch/powerpc/platforms/powernv/opal.c
@@ -605,6 +605,24 @@ static int opal_sysfs_init(void)
 	return 0;
 }
 
+static void __init opal_dump_region_init(void)
+{
+	void *addr;
+	uint64_t size;
+	int rc;
+
+	/* Register kernel log buffer */
+	addr = log_buf_addr_get();
+	size = log_buf_len_get();
+	rc = opal_register_dump_region(OPAL_DUMP_REGION_LOG_BUF,
+				       __pa(addr), size);
+	/* Don't warn if this is just an older OPAL that doesn't
+	 * know about that call
+	 */
+	if (rc && rc != OPAL_UNSUPPORTED)
+		pr_warn("DUMP: Failed to register kernel log buffer. "
+			"rc = %d\n", rc);
+}
 static int __init opal_init(void)
 {
 	struct device_node *np, *consoles;
@@ -654,6 +672,8 @@ static int __init opal_init(void)
 	/* Create "opal" kobject under /sys/firmware */
 	rc = opal_sysfs_init();
 	if (rc == 0) {
+		/* Setup dump region interface */
+		opal_dump_region_init();
 		/* Setup error log interface */
 		rc = opal_elog_init();
 		/* Setup code update interface */
@@ -694,6 +714,9 @@ void opal_shutdown(void)
 		else
 			mdelay(10);
 	}
+
+	/* Unregister memory dump region */
+	opal_unregister_dump_region(OPAL_DUMP_REGION_LOG_BUF);
 }
 
 /* Export this so that test modules can use it */


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

* Re: [PATCH v3 1/2] printk: Add function to return log buffer address and size
  2014-08-09  5:45 [PATCH v3 1/2] printk: Add function to return log buffer address and size Vasant Hegde
  2014-08-09  5:45 ` [PATCH v3 2/2] powerpc/powernv: Interface to register/unregister opal dump region Vasant Hegde
@ 2014-08-11  1:13 ` Benjamin Herrenschmidt
  2014-08-12 21:47   ` Andrew Morton
  1 sibling, 1 reply; 4+ messages in thread
From: Benjamin Herrenschmidt @ 2014-08-11  1:13 UTC (permalink / raw)
  To: Vasant Hegde; +Cc: linuxppc-dev, Andrew Morton, Linus Torvalds, linux-kernel

On Sat, 2014-08-09 at 11:15 +0530, Vasant Hegde wrote:

> Ben,
>   - This patchset applies cleanly on powerpc next branch.
>   - Andrew Morton suggested to include this patch in powerpc tree.
>     (https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/119802.html)
> 

Ok, Andrew, can I have an Ack ?

Cheers,
Ben.

>  include/linux/printk.h |    3 +++
>  kernel/printk/printk.c |   12 ++++++++++++
>  2 files changed, 15 insertions(+)
> 
> diff --git a/include/linux/printk.h b/include/linux/printk.h
> index 319ff7e..b8c0316 100644
> --- a/include/linux/printk.h
> +++ b/include/linux/printk.h
> @@ -10,6 +10,9 @@
>  extern const char linux_banner[];
>  extern const char linux_proc_banner[];
>  
> +extern char *log_buf_addr_get(void);
> +extern u32 log_buf_len_get(void);
> +
>  static inline int printk_get_level(const char *buffer)
>  {
>  	if (buffer[0] == KERN_SOH_ASCII && buffer[1]) {
> diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> index ea2d5f6..d6a984c 100644
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -270,6 +270,18 @@ static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
>  static char *log_buf = __log_buf;
>  static u32 log_buf_len = __LOG_BUF_LEN;
>  
> +/* Return log buffer address */
> +char *log_buf_addr_get(void)
> +{
> +	return log_buf;
> +}
> +
> +/* Return log buffer size */
> +u32 log_buf_len_get(void)
> +{
> +	return log_buf_len;
> +}
> +
>  /* human readable text of the record */
>  static char *log_text(const struct printk_log *msg)
>  {



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

* Re: [PATCH v3 1/2] printk: Add function to return log buffer address and size
  2014-08-11  1:13 ` [PATCH v3 1/2] printk: Add function to return log buffer address and size Benjamin Herrenschmidt
@ 2014-08-12 21:47   ` Andrew Morton
  0 siblings, 0 replies; 4+ messages in thread
From: Andrew Morton @ 2014-08-12 21:47 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: Vasant Hegde, linuxppc-dev, Linus Torvalds, linux-kernel

On Mon, 11 Aug 2014 11:13:32 +1000 Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:

> On Sat, 2014-08-09 at 11:15 +0530, Vasant Hegde wrote:
> 
> > Ben,
> >   - This patchset applies cleanly on powerpc next branch.
> >   - Andrew Morton suggested to include this patch in powerpc tree.
> >     (https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/119802.html)
> > 
> 
> Ok, Andrew, can I have an Ack ?

Acked-by: Andrew Morton <akpm@linux-foundation.org>

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

end of thread, other threads:[~2014-08-12 21:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-09  5:45 [PATCH v3 1/2] printk: Add function to return log buffer address and size Vasant Hegde
2014-08-09  5:45 ` [PATCH v3 2/2] powerpc/powernv: Interface to register/unregister opal dump region Vasant Hegde
2014-08-11  1:13 ` [PATCH v3 1/2] printk: Add function to return log buffer address and size Benjamin Herrenschmidt
2014-08-12 21:47   ` Andrew Morton

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