mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Juergen Borleis <jbe@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Kees Cook <keescook@chromium.org>
Subject: [PATCH 07/15] pstore/ram: Clarify resource reservation labels
Date: Fri, 15 Mar 2019 10:14:45 +0100	[thread overview]
Message-ID: <20190315091453.22393-7-jbe@pengutronix.de> (raw)
In-Reply-To: <20190315091453.22393-1-jbe@pengutronix.de>

From: Kees Cook <keescook@chromium.org>

When ramoops reserved a memory region in the kernel, it had an unhelpful
label of "persistent ram". When reading iomem, it would be repeated many
times, did not hint that it was ramoops in particular, and didn't
clarify very much about what each was used for:

    0x4fdd4000 - 0x4fdf3fff (size 0x00020000) persistent ram
    0x4fdf4000 - 0x4fe13fff (size 0x00020000) persistent ram
    ...
    0x4ff74000 - 0x4ff93fff (size 0x00020000) persistent ram
    0x4ff94000 - 0x4ffb3fff (size 0x00020000) persistent ram
    0x4ffb4000 - 0x4ffd3fff (size 0x00020000) persistent ram

Instead, this adds meaningful labels for how the various regions are
being used:

    0x4fdd4000 - 0x4fdf3fff (size 0x00020000) ramoops:dump(0/12)
    0x4fdf4000 - 0x4fe13fff (size 0x00020000) ramoops:dump(1/12)
    ...
    0x4ff74000 - 0x4ff93fff (size 0x00020000) ramoops:console
    0x4ff94000 - 0x4ffb3fff (size 0x00020000) ramoops:ftrace
    0x4ffb4000 - 0x4ffd3fff (size 0x00020000) ramoops:pmsg

Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
[p.zabel@pengutronix.de: ported to Barebox from Linux commit 1227daa43bce]
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 Documentation/filesystems/pstore.rst | 44 ++++++++++++++++--------------------
 fs/pstore/ram.c                      | 15 ++++++++++--
 fs/pstore/ram_core.c                 |  8 +++++--
 include/linux/pstore_ram.h           |  3 ++-
 4 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/Documentation/filesystems/pstore.rst b/Documentation/filesystems/pstore.rst
index 22e89b3f1f..6215f2296c 100644
--- a/Documentation/filesystems/pstore.rst
+++ b/Documentation/filesystems/pstore.rst
@@ -47,35 +47,29 @@ generated by Barebox. You can change these parameters in Barebox menuconfig. The
 RAMOOPS parameters for the Kernel are stored in the variable
 global.linux.bootargs.ramoops.
 
-To see where the RAMOOPS area is located, you can execute iomem in Barebox. The
-RAMOOPS area is listed as 'persistent ram':
+You can adapt the *pstore* parameters in Barebox menuconfig.
+
+To see where the RAMOOPS area is located, you can execute the ``iomem`` command
+in the Barebox shell. The RAMOOPS area is listed as 'persistent ram':
 
 .. code-block:: none
 
   0x10000000 - 0x1fffffff (size 0x10000000) ram0
-    0x17e7c0c0 - 0x1fcf817f (size 0x07e7c0c0) malloc space
-    0x1fcf8180 - 0x1fcfffff (size 0x00007e80) board data
-    0x1fd00000 - 0x1fd6eeff (size 0x0006ef00) barebox
-    0x1fd6ef00 - 0x1fd88dff (size 0x00019f00) barebox data
-    0x1fd88e00 - 0x1fd8c3db (size 0x000035dc) bss
-    0x1fdf4000 - 0x1fe13fff (size 0x00020000) persistent ram
-    0x1fe14000 - 0x1fe33fff (size 0x00020000) persistent ram
-    0x1fe34000 - 0x1fe53fff (size 0x00020000) persistent ram
-    0x1fe54000 - 0x1fe73fff (size 0x00020000) persistent ram
-    0x1fe74000 - 0x1fe93fff (size 0x00020000) persistent ram
-    0x1fe94000 - 0x1feb3fff (size 0x00020000) persistent ram
-    0x1feb4000 - 0x1fed3fff (size 0x00020000) persistent ram
-    0x1fed4000 - 0x1fef3fff (size 0x00020000) persistent ram
-    0x1fef4000 - 0x1ff13fff (size 0x00020000) persistent ram
-    0x1ff14000 - 0x1ff33fff (size 0x00020000) persistent ram
-    0x1ff34000 - 0x1ff53fff (size 0x00020000) persistent ram
-    0x1ff54000 - 0x1ff73fff (size 0x00020000) persistent ram
-    0x1ff74000 - 0x1ff93fff (size 0x00020000) persistent ram
-    0x1ff94000 - 0x1ffb3fff (size 0x00020000) persistent ram
-    0x1ffb4000 - 0x1ffd3fff (size 0x00020000) persistent ram
-    0x1ffd4000 - 0x1fff3fff (size 0x00020000) persistent ram
-    0x1fff4000 - 0x1fff7fff (size 0x00004000) ttb
-    0x1fff8000 - 0x1fffffff (size 0x00008000) stack
+    0x247f59c0 - 0x2fbf59bf (size 0x0b400000) malloc space
+    0x2fbf59c0 - 0x2fbffffe (size 0x0000a63f) board data
+    0x2fc00000 - 0x2fc8619f (size 0x000861a0) barebox
+    0x2fc861a0 - 0x2fca35ef (size 0x0001d450) barebox data
+    0x2fca35f0 - 0x2fca9007 (size 0x00005a18) bss
+    0x2fdd4000 - 0x2fdf3fff (size 0x00020000) ramoops:dump(0/4)
+    0x2fdf4000 - 0x2fe13fff (size 0x00020000) ramoops:dump(1/4)
+    0x2fe14000 - 0x2fe33fff (size 0x00020000) ramoops:dump(2/4)
+    0x2fe34000 - 0x2fe53fff (size 0x00020000) ramoops:dump(3/4)
+    0x2fe54000 - 0x2fe73fff (size 0x00020000) ramoops:dump(4/4)
+    0x2fe74000 - 0x2fe93fff (size 0x00020000) ramoops:console
+    0x2fe94000 - 0x2feb3fff (size 0x00020000) ramoops:ftrace
+    0x2feb4000 - 0x2fed3fff (size 0x00020000) ramoops:pmsg
+    0x2fee4000 - 0x2fee7fff (size 0x00004000) ttb
+    0x2fee8000 - 0x2feeffff (size 0x00008000) stack
 
 All pstore files that could be found are added to the /pstore directory. This is
 a read-only filesystem. If you disable the Kconfig option FS_PSTORE_RAMOOPS_RO,
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index d46612fbff..714755bd66 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -334,8 +334,16 @@ static int ramoops_init_przs(const char *name,
 		goto fail;
 
 	for (i = 0; i < *cnt; i++) {
+		char *label;
+
+		if (*cnt == 1)
+			label = basprintf("ramoops:%s", name);
+		else
+			label = basprintf("ramoops:%s(%d/%d)",
+					  name, i, *cnt - 1);
 		prz_ar[i] = persistent_ram_new(*paddr, zone_sz, sig,
-				&cxt->ecc_info, cxt->memtype);
+					       &cxt->ecc_info,
+					       cxt->memtype, label);
 		if (IS_ERR(prz_ar[i])) {
 			err = PTR_ERR(prz_ar[i]);
 			pr_err("failed to request %s mem region (0x%zx@0x%llx): %d\n",
@@ -365,6 +373,8 @@ static int ramoops_init_prz(const char *name,
 			    struct persistent_ram_zone **prz,
 			    phys_addr_t *paddr, size_t sz, u32 sig)
 {
+	char *label;
+
 	if (!sz)
 		return 0;
 
@@ -375,8 +385,9 @@ static int ramoops_init_prz(const char *name,
 		return -ENOMEM;
 	}
 
+	label = basprintf("ramoops:%s", name);
 	*prz = persistent_ram_new(*paddr, sz, sig, &cxt->ecc_info,
-				  cxt->memtype);
+				  cxt->memtype, label);
 	if (IS_ERR(*prz)) {
 		int err = PTR_ERR(*prz);
 
diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
index ed48dcddd5..0f7003f937 100644
--- a/fs/pstore/ram_core.c
+++ b/fs/pstore/ram_core.c
@@ -346,7 +346,7 @@ void persistent_ram_zap(struct persistent_ram_zone *prz)
 static int persistent_ram_buffer_map(phys_addr_t start, phys_addr_t size,
 		struct persistent_ram_zone *prz, int memtype)
 {
-	prz->res = request_sdram_region("persistent ram", start, size);
+	prz->res = request_sdram_region(prz->label ?: "ramoops", start, size);
 	if (!prz->res)
 		return -ENOMEM;
 
@@ -409,12 +409,13 @@ void persistent_ram_free(struct persistent_ram_zone *prz)
 	prz->ecc_info.par = NULL;
 
 	persistent_ram_free_old(prz);
+	kfree(prz->label);
 	kfree(prz);
 }
 
 struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
 			u32 sig, struct persistent_ram_ecc_info *ecc_info,
-			unsigned int memtype)
+			unsigned int memtype, char *label)
 {
 	struct persistent_ram_zone *prz;
 	int ret = -ENOMEM;
@@ -425,6 +426,9 @@ struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
 		goto err;
 	}
 
+	/* Initialize general buffer state. */
+	prz->label = label;
+
 	ret = persistent_ram_buffer_map(start, size, prz, memtype);
 	if (ret)
 		goto err;
diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h
index ecdd229dd4..de6eaa93f9 100644
--- a/include/linux/pstore_ram.h
+++ b/include/linux/pstore_ram.h
@@ -35,6 +35,7 @@ struct persistent_ram_ecc_info {
 struct persistent_ram_zone {
 	phys_addr_t paddr;
 	size_t size;
+	char *label;
 	struct persistent_ram_buffer *buffer;
 	size_t buffer_size;
 	struct resource *res;
@@ -53,7 +54,7 @@ struct persistent_ram_zone {
 
 struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
 			u32 sig, struct persistent_ram_ecc_info *ecc_info,
-			unsigned int memtype);
+			unsigned int memtype, char *label);
 void persistent_ram_free(struct persistent_ram_zone *prz);
 void persistent_ram_zap(struct persistent_ram_zone *prz);
 
-- 
2.11.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2019-03-15  9:15 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-15  9:14 [PATCH 01/15] ramoops: probe from device tree if OFTREE is enabled Juergen Borleis
2019-03-15  9:14 ` [PATCH 02/15] pstore/ram: add Device Tree bindings Juergen Borleis
2019-03-15  9:14 ` [PATCH 03/15] ramoops: use DT reserved-memory bindings Juergen Borleis
2019-03-15  9:14 ` [PATCH 04/15] pstore: Make ramoops_init_przs generic for other prz arrays Juergen Borleis
2019-03-15  9:14 ` [PATCH 05/15] pstore/ram: Do not use stack VLA for parity workspace Juergen Borleis
2019-03-15  9:14 ` [PATCH 06/15] pstore: improve error report for failed setup Juergen Borleis
2019-03-15  9:14 ` Juergen Borleis [this message]
2019-03-15  9:14 ` [PATCH 08/15] pstore: Extract common arguments into structure Juergen Borleis
2019-03-15  9:14 ` [PATCH 09/15] pstore: add console support Juergen Borleis
2019-03-15  9:14 ` [PATCH 10/15] pstore: Switch pstore_mkfile to pass record Juergen Borleis
2019-03-15  9:14 ` [PATCH 11/15] pstore: Replace arguments for read() API Juergen Borleis
2019-03-15  9:14 ` [PATCH 12/15] pstore: Replace arguments for write() API Juergen Borleis
2019-03-15  9:14 ` [PATCH 13/15] pstore: pass ramoops configuration to kernel via device tree Juergen Borleis
2019-03-15  9:14 ` [PATCH 14/15] pstore: ramoops: allow zapping invalid buffers in read-only mode Juergen Borleis
2019-03-15  9:14 ` [PATCH 15/15] pstore/doc: fix layout Juergen Borleis
2019-03-18  8:44 ` [PATCH 01/15] ramoops: probe from device tree if OFTREE is enabled Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190315091453.22393-7-jbe@pengutronix.de \
    --to=jbe@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=keescook@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox