linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code
@ 2019-08-28 13:05 Michael Ellerman
  2019-08-28 13:05 ` [PATCH v4 2/2] powerpc/powernv: Add ultravisor message log interface Michael Ellerman
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Michael Ellerman @ 2019-08-28 13:05 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: cclaudio

From: Claudio Carvalho <cclaudio@linux.ibm.com>

This patch refactors the code in opal-msglog that operates on the OPAL
memory console in order to make it cleaner and also allow the reuse of
the new memcons_* functions.

Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
v4: mpe: Rename memcons_load_from_dt() to memcons_init().
         Make memcons_init() and memcons_get_size() non-static.
	 Continue to use opal_msglog_copy() in opal_msglog_read().
---
 arch/powerpc/platforms/powernv/opal-msglog.c | 57 +++++++++++++-------
 1 file changed, 39 insertions(+), 18 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/opal-msglog.c b/arch/powerpc/platforms/powernv/opal-msglog.c
index dc51d03c6370..d26da19a611f 100644
--- a/arch/powerpc/platforms/powernv/opal-msglog.c
+++ b/arch/powerpc/platforms/powernv/opal-msglog.c
@@ -29,23 +29,23 @@ struct memcons {
 
 static struct memcons *opal_memcons = NULL;
 
-ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
+ssize_t memcons_copy(struct memcons *mc, char *to, loff_t pos, size_t count)
 {
 	const char *conbuf;
 	ssize_t ret;
 	size_t first_read = 0;
 	uint32_t out_pos, avail;
 
-	if (!opal_memcons)
+	if (!mc)
 		return -ENODEV;
 
-	out_pos = be32_to_cpu(READ_ONCE(opal_memcons->out_pos));
+	out_pos = be32_to_cpu(READ_ONCE(mc->out_pos));
 
 	/* Now we've read out_pos, put a barrier in before reading the new
 	 * data it points to in conbuf. */
 	smp_rmb();
 
-	conbuf = phys_to_virt(be64_to_cpu(opal_memcons->obuf_phys));
+	conbuf = phys_to_virt(be64_to_cpu(mc->obuf_phys));
 
 	/* When the buffer has wrapped, read from the out_pos marker to the end
 	 * of the buffer, and then read the remaining data as in the un-wrapped
@@ -53,7 +53,7 @@ ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
 	if (out_pos & MEMCONS_OUT_POS_WRAP) {
 
 		out_pos &= MEMCONS_OUT_POS_MASK;
-		avail = be32_to_cpu(opal_memcons->obuf_size) - out_pos;
+		avail = be32_to_cpu(mc->obuf_size) - out_pos;
 
 		ret = memory_read_from_buffer(to, count, &pos,
 				conbuf + out_pos, avail);
@@ -71,7 +71,7 @@ ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
 	}
 
 	/* Sanity check. The firmware should not do this to us. */
-	if (out_pos > be32_to_cpu(opal_memcons->obuf_size)) {
+	if (out_pos > be32_to_cpu(mc->obuf_size)) {
 		pr_err("OPAL: memory console corruption. Aborting read.\n");
 		return -EINVAL;
 	}
@@ -86,6 +86,11 @@ ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
 	return ret;
 }
 
+ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
+{
+	return memcons_copy(opal_memcons, to, pos, count);
+}
+
 static ssize_t opal_msglog_read(struct file *file, struct kobject *kobj,
 				struct bin_attribute *bin_attr, char *to,
 				loff_t pos, size_t count)
@@ -98,32 +103,48 @@ static struct bin_attribute opal_msglog_attr = {
 	.read = opal_msglog_read
 };
 
-void __init opal_msglog_init(void)
+struct memcons *memcons_init(struct device_node *node, const char *mc_prop_name)
 {
 	u64 mcaddr;
 	struct memcons *mc;
 
-	if (of_property_read_u64(opal_node, "ibm,opal-memcons", &mcaddr)) {
-		pr_warn("OPAL: Property ibm,opal-memcons not found, no message log\n");
-		return;
+	if (of_property_read_u64(node, mc_prop_name, &mcaddr)) {
+		pr_warn("%s property not found, no message log\n",
+			mc_prop_name);
+		goto out_err;
 	}
 
 	mc = phys_to_virt(mcaddr);
 	if (!mc) {
-		pr_warn("OPAL: memory console address is invalid\n");
-		return;
+		pr_warn("memory console address is invalid\n");
+		goto out_err;
 	}
 
 	if (be64_to_cpu(mc->magic) != MEMCONS_MAGIC) {
-		pr_warn("OPAL: memory console version is invalid\n");
-		return;
+		pr_warn("memory console version is invalid\n");
+		goto out_err;
 	}
 
-	/* Report maximum size */
-	opal_msglog_attr.size =  be32_to_cpu(mc->ibuf_size) +
-		be32_to_cpu(mc->obuf_size);
+	return mc;
+
+out_err:
+	return NULL;
+}
+
+u32 memcons_get_size(struct memcons *mc)
+{
+	return be32_to_cpu(mc->ibuf_size) + be32_to_cpu(mc->obuf_size);
+}
+
+void __init opal_msglog_init(void)
+{
+	opal_memcons = memcons_init(opal_node, "ibm,opal-memcons");
+	if (!opal_memcons) {
+		pr_warn("OPAL: memcons failed to load from ibm,opal-memcons\n");
+		return;
+	}
 
-	opal_memcons = mc;
+	opal_msglog_attr.size = memcons_get_size(opal_memcons);
 }
 
 void __init opal_msglog_sysfs_init(void)
-- 
2.21.0


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

* [PATCH v4 2/2] powerpc/powernv: Add ultravisor message log interface
  2019-08-28 13:05 [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code Michael Ellerman
@ 2019-08-28 13:05 ` Michael Ellerman
  2019-08-28 22:14   ` Claudio Carvalho
  2019-08-28 22:13 ` [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code Claudio Carvalho
  2019-09-02  3:06 ` Michael Ellerman
  2 siblings, 1 reply; 5+ messages in thread
From: Michael Ellerman @ 2019-08-28 13:05 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: cclaudio

From: Claudio Carvalho <cclaudio@linux.ibm.com>

The ultravisor (UV) provides an in-memory console which follows the
OPAL in-memory console structure.

This patch extends the OPAL msglog code to initialize the UV memory
console and provide the "/sys/firmware/ultravisor/msglog" interface
for userspace to view the UV message log.

Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
v4: mpe: Move all the code into ultravisor.c.
    Consistently use "uv_" as the prefix not "ultra_".
    Use powernv.h for routines that are shared within the platform.
    Rather than bloating the kernel with strings for every rare error
    case, return error codes from the init routine which can be
    seen with initcall_debug.
---
 arch/powerpc/platforms/powernv/powernv.h    |  5 +++
 arch/powerpc/platforms/powernv/ultravisor.c | 45 +++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/arch/powerpc/platforms/powernv/powernv.h b/arch/powerpc/platforms/powernv/powernv.h
index fd4a1c5a6369..1aa51c4fa904 100644
--- a/arch/powerpc/platforms/powernv/powernv.h
+++ b/arch/powerpc/platforms/powernv/powernv.h
@@ -30,4 +30,9 @@ extern void opal_event_shutdown(void);
 
 bool cpu_core_split_required(void);
 
+struct memcons;
+ssize_t memcons_copy(struct memcons *mc, char *to, loff_t pos, size_t count);
+u32 memcons_get_size(struct memcons *mc);
+struct memcons *memcons_init(struct device_node *node, const char *mc_prop_name);
+
 #endif /* _POWERNV_H */
diff --git a/arch/powerpc/platforms/powernv/ultravisor.c b/arch/powerpc/platforms/powernv/ultravisor.c
index 02ac57b4bded..e4a00ad06f9d 100644
--- a/arch/powerpc/platforms/powernv/ultravisor.c
+++ b/arch/powerpc/platforms/powernv/ultravisor.c
@@ -8,9 +8,15 @@
 #include <linux/init.h>
 #include <linux/printk.h>
 #include <linux/of_fdt.h>
+#include <linux/of.h>
 
 #include <asm/ultravisor.h>
 #include <asm/firmware.h>
+#include <asm/machdep.h>
+
+#include "powernv.h"
+
+static struct kobject *ultravisor_kobj;
 
 int __init early_init_dt_scan_ultravisor(unsigned long node, const char *uname,
 					 int depth, void *data)
@@ -22,3 +28,42 @@ int __init early_init_dt_scan_ultravisor(unsigned long node, const char *uname,
 	pr_debug("Ultravisor detected!\n");
 	return 1;
 }
+
+static struct memcons *uv_memcons;
+
+static ssize_t uv_msglog_read(struct file *file, struct kobject *kobj,
+			      struct bin_attribute *bin_attr, char *to,
+			      loff_t pos, size_t count)
+{
+	return memcons_copy(uv_memcons, to, pos, count);
+}
+
+static struct bin_attribute uv_msglog_attr = {
+	.attr = {.name = "msglog", .mode = 0400},
+	.read = uv_msglog_read
+};
+
+static int __init uv_init(void)
+{
+	struct device_node *node;
+
+	if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR))
+		return 0;
+
+	node = of_find_compatible_node(NULL, NULL, "ibm,uv-firmware");
+	if (!node)
+		return -ENODEV;
+
+	uv_memcons = memcons_init(node, "memcons");
+	if (!uv_memcons)
+		return -ENOENT;
+
+	uv_msglog_attr.size = memcons_get_size(uv_memcons);
+
+	ultravisor_kobj = kobject_create_and_add("ultravisor", firmware_kobj);
+	if (!ultravisor_kobj)
+		return -ENOMEM;
+
+	return sysfs_create_bin_file(ultravisor_kobj, &uv_msglog_attr);
+}
+machine_subsys_initcall(powernv, uv_init);
-- 
2.21.0


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

* Re: [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code
  2019-08-28 13:05 [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code Michael Ellerman
  2019-08-28 13:05 ` [PATCH v4 2/2] powerpc/powernv: Add ultravisor message log interface Michael Ellerman
@ 2019-08-28 22:13 ` Claudio Carvalho
  2019-09-02  3:06 ` Michael Ellerman
  2 siblings, 0 replies; 5+ messages in thread
From: Claudio Carvalho @ 2019-08-28 22:13 UTC (permalink / raw)
  To: Michael Ellerman, linuxppc-dev


On 8/28/19 10:05 AM, Michael Ellerman wrote:
> From: Claudio Carvalho <cclaudio@linux.ibm.com>
>
> This patch refactors the code in opal-msglog that operates on the OPAL
> memory console in order to make it cleaner and also allow the reuse of
> the new memcons_* functions.

Tested-by: Claudio Carvalho <cclaudio@linux.ibm.com>

Thanks,
Claudio

> Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> ---
> v4: mpe: Rename memcons_load_from_dt() to memcons_init().
>          Make memcons_init() and memcons_get_size() non-static.
> 	 Continue to use opal_msglog_copy() in opal_msglog_read().
> ---
>  arch/powerpc/platforms/powernv/opal-msglog.c | 57 +++++++++++++-------
>  1 file changed, 39 insertions(+), 18 deletions(-)
>
> diff --git a/arch/powerpc/platforms/powernv/opal-msglog.c b/arch/powerpc/platforms/powernv/opal-msglog.c
> index dc51d03c6370..d26da19a611f 100644
> --- a/arch/powerpc/platforms/powernv/opal-msglog.c
> +++ b/arch/powerpc/platforms/powernv/opal-msglog.c
> @@ -29,23 +29,23 @@ struct memcons {
>  
>  static struct memcons *opal_memcons = NULL;
>  
> -ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
> +ssize_t memcons_copy(struct memcons *mc, char *to, loff_t pos, size_t count)
>  {
>  	const char *conbuf;
>  	ssize_t ret;
>  	size_t first_read = 0;
>  	uint32_t out_pos, avail;
>  
> -	if (!opal_memcons)
> +	if (!mc)
>  		return -ENODEV;
>  
> -	out_pos = be32_to_cpu(READ_ONCE(opal_memcons->out_pos));
> +	out_pos = be32_to_cpu(READ_ONCE(mc->out_pos));
>  
>  	/* Now we've read out_pos, put a barrier in before reading the new
>  	 * data it points to in conbuf. */
>  	smp_rmb();
>  
> -	conbuf = phys_to_virt(be64_to_cpu(opal_memcons->obuf_phys));
> +	conbuf = phys_to_virt(be64_to_cpu(mc->obuf_phys));
>  
>  	/* When the buffer has wrapped, read from the out_pos marker to the end
>  	 * of the buffer, and then read the remaining data as in the un-wrapped
> @@ -53,7 +53,7 @@ ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
>  	if (out_pos & MEMCONS_OUT_POS_WRAP) {
>  
>  		out_pos &= MEMCONS_OUT_POS_MASK;
> -		avail = be32_to_cpu(opal_memcons->obuf_size) - out_pos;
> +		avail = be32_to_cpu(mc->obuf_size) - out_pos;
>  
>  		ret = memory_read_from_buffer(to, count, &pos,
>  				conbuf + out_pos, avail);
> @@ -71,7 +71,7 @@ ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
>  	}
>  
>  	/* Sanity check. The firmware should not do this to us. */
> -	if (out_pos > be32_to_cpu(opal_memcons->obuf_size)) {
> +	if (out_pos > be32_to_cpu(mc->obuf_size)) {
>  		pr_err("OPAL: memory console corruption. Aborting read.\n");
>  		return -EINVAL;
>  	}
> @@ -86,6 +86,11 @@ ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
>  	return ret;
>  }
>  
> +ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
> +{
> +	return memcons_copy(opal_memcons, to, pos, count);
> +}
> +
>  static ssize_t opal_msglog_read(struct file *file, struct kobject *kobj,
>  				struct bin_attribute *bin_attr, char *to,
>  				loff_t pos, size_t count)
> @@ -98,32 +103,48 @@ static struct bin_attribute opal_msglog_attr = {
>  	.read = opal_msglog_read
>  };
>  
> -void __init opal_msglog_init(void)
> +struct memcons *memcons_init(struct device_node *node, const char *mc_prop_name)
>  {
>  	u64 mcaddr;
>  	struct memcons *mc;
>  
> -	if (of_property_read_u64(opal_node, "ibm,opal-memcons", &mcaddr)) {
> -		pr_warn("OPAL: Property ibm,opal-memcons not found, no message log\n");
> -		return;
> +	if (of_property_read_u64(node, mc_prop_name, &mcaddr)) {
> +		pr_warn("%s property not found, no message log\n",
> +			mc_prop_name);
> +		goto out_err;
>  	}
>  
>  	mc = phys_to_virt(mcaddr);
>  	if (!mc) {
> -		pr_warn("OPAL: memory console address is invalid\n");
> -		return;
> +		pr_warn("memory console address is invalid\n");
> +		goto out_err;
>  	}
>  
>  	if (be64_to_cpu(mc->magic) != MEMCONS_MAGIC) {
> -		pr_warn("OPAL: memory console version is invalid\n");
> -		return;
> +		pr_warn("memory console version is invalid\n");
> +		goto out_err;
>  	}
>  
> -	/* Report maximum size */
> -	opal_msglog_attr.size =  be32_to_cpu(mc->ibuf_size) +
> -		be32_to_cpu(mc->obuf_size);
> +	return mc;
> +
> +out_err:
> +	return NULL;
> +}
> +
> +u32 memcons_get_size(struct memcons *mc)
> +{
> +	return be32_to_cpu(mc->ibuf_size) + be32_to_cpu(mc->obuf_size);
> +}
> +
> +void __init opal_msglog_init(void)
> +{
> +	opal_memcons = memcons_init(opal_node, "ibm,opal-memcons");
> +	if (!opal_memcons) {
> +		pr_warn("OPAL: memcons failed to load from ibm,opal-memcons\n");
> +		return;
> +	}
>  
> -	opal_memcons = mc;
> +	opal_msglog_attr.size = memcons_get_size(opal_memcons);
>  }
>  
>  void __init opal_msglog_sysfs_init(void)

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

* Re: [PATCH v4 2/2] powerpc/powernv: Add ultravisor message log interface
  2019-08-28 13:05 ` [PATCH v4 2/2] powerpc/powernv: Add ultravisor message log interface Michael Ellerman
@ 2019-08-28 22:14   ` Claudio Carvalho
  0 siblings, 0 replies; 5+ messages in thread
From: Claudio Carvalho @ 2019-08-28 22:14 UTC (permalink / raw)
  To: Michael Ellerman, linuxppc-dev


On 8/28/19 10:05 AM, Michael Ellerman wrote:
> From: Claudio Carvalho <cclaudio@linux.ibm.com>
>
> The ultravisor (UV) provides an in-memory console which follows the
> OPAL in-memory console structure.
>
> This patch extends the OPAL msglog code to initialize the UV memory
> console and provide the "/sys/firmware/ultravisor/msglog" interface
> for userspace to view the UV message log.

Tested-by: Claudio Carvalho <cclaudio@linux.ibm.com>

Thanks,
Claudio

>
> Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> ---
> v4: mpe: Move all the code into ultravisor.c.
>     Consistently use "uv_" as the prefix not "ultra_".
>     Use powernv.h for routines that are shared within the platform.
>     Rather than bloating the kernel with strings for every rare error
>     case, return error codes from the init routine which can be
>     seen with initcall_debug.
> ---
>  arch/powerpc/platforms/powernv/powernv.h    |  5 +++
>  arch/powerpc/platforms/powernv/ultravisor.c | 45 +++++++++++++++++++++
>  2 files changed, 50 insertions(+)
>
> diff --git a/arch/powerpc/platforms/powernv/powernv.h b/arch/powerpc/platforms/powernv/powernv.h
> index fd4a1c5a6369..1aa51c4fa904 100644
> --- a/arch/powerpc/platforms/powernv/powernv.h
> +++ b/arch/powerpc/platforms/powernv/powernv.h
> @@ -30,4 +30,9 @@ extern void opal_event_shutdown(void);
>  
>  bool cpu_core_split_required(void);
>  
> +struct memcons;
> +ssize_t memcons_copy(struct memcons *mc, char *to, loff_t pos, size_t count);
> +u32 memcons_get_size(struct memcons *mc);
> +struct memcons *memcons_init(struct device_node *node, const char *mc_prop_name);
> +
>  #endif /* _POWERNV_H */
> diff --git a/arch/powerpc/platforms/powernv/ultravisor.c b/arch/powerpc/platforms/powernv/ultravisor.c
> index 02ac57b4bded..e4a00ad06f9d 100644
> --- a/arch/powerpc/platforms/powernv/ultravisor.c
> +++ b/arch/powerpc/platforms/powernv/ultravisor.c
> @@ -8,9 +8,15 @@
>  #include <linux/init.h>
>  #include <linux/printk.h>
>  #include <linux/of_fdt.h>
> +#include <linux/of.h>
>  
>  #include <asm/ultravisor.h>
>  #include <asm/firmware.h>
> +#include <asm/machdep.h>
> +
> +#include "powernv.h"
> +
> +static struct kobject *ultravisor_kobj;
>  
>  int __init early_init_dt_scan_ultravisor(unsigned long node, const char *uname,
>  					 int depth, void *data)
> @@ -22,3 +28,42 @@ int __init early_init_dt_scan_ultravisor(unsigned long node, const char *uname,
>  	pr_debug("Ultravisor detected!\n");
>  	return 1;
>  }
> +
> +static struct memcons *uv_memcons;
> +
> +static ssize_t uv_msglog_read(struct file *file, struct kobject *kobj,
> +			      struct bin_attribute *bin_attr, char *to,
> +			      loff_t pos, size_t count)
> +{
> +	return memcons_copy(uv_memcons, to, pos, count);
> +}
> +
> +static struct bin_attribute uv_msglog_attr = {
> +	.attr = {.name = "msglog", .mode = 0400},
> +	.read = uv_msglog_read
> +};
> +
> +static int __init uv_init(void)
> +{
> +	struct device_node *node;
> +
> +	if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR))
> +		return 0;
> +
> +	node = of_find_compatible_node(NULL, NULL, "ibm,uv-firmware");
> +	if (!node)
> +		return -ENODEV;
> +
> +	uv_memcons = memcons_init(node, "memcons");
> +	if (!uv_memcons)
> +		return -ENOENT;
> +
> +	uv_msglog_attr.size = memcons_get_size(uv_memcons);
> +
> +	ultravisor_kobj = kobject_create_and_add("ultravisor", firmware_kobj);
> +	if (!ultravisor_kobj)
> +		return -ENOMEM;
> +
> +	return sysfs_create_bin_file(ultravisor_kobj, &uv_msglog_attr);
> +}
> +machine_subsys_initcall(powernv, uv_init);

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

* Re: [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code
  2019-08-28 13:05 [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code Michael Ellerman
  2019-08-28 13:05 ` [PATCH v4 2/2] powerpc/powernv: Add ultravisor message log interface Michael Ellerman
  2019-08-28 22:13 ` [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code Claudio Carvalho
@ 2019-09-02  3:06 ` Michael Ellerman
  2 siblings, 0 replies; 5+ messages in thread
From: Michael Ellerman @ 2019-09-02  3:06 UTC (permalink / raw)
  To: Michael Ellerman, linuxppc-dev; +Cc: cclaudio

On Wed, 2019-08-28 at 13:05:20 UTC, Michael Ellerman wrote:
> From: Claudio Carvalho <cclaudio@linux.ibm.com>
> 
> This patch refactors the code in opal-msglog that operates on the OPAL
> memory console in order to make it cleaner and also allow the reuse of
> the new memcons_* functions.
> 
> Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

Series applied to powerpc topic/ppc-kvm.

https://git.kernel.org/powerpc/c/dea45ea7775240047f70e2631e468f6b65d09493

cheers

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

end of thread, other threads:[~2019-09-02  3:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-28 13:05 [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code Michael Ellerman
2019-08-28 13:05 ` [PATCH v4 2/2] powerpc/powernv: Add ultravisor message log interface Michael Ellerman
2019-08-28 22:14   ` Claudio Carvalho
2019-08-28 22:13 ` [PATCH v4 1/2] powerpc/powernv/opal-msglog: Refactor memcons code Claudio Carvalho
2019-09-02  3:06 ` Michael Ellerman

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