summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/filesystems/pstore.rst44
-rw-r--r--fs/pstore/ram.c15
-rw-r--r--fs/pstore/ram_core.c8
-rw-r--r--include/linux/pstore_ram.h3
4 files changed, 40 insertions, 30 deletions
diff --git a/Documentation/filesystems/pstore.rst b/Documentation/filesystems/pstore.rst
index 22e89b3..6215f22 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 d46612f..714755b 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 ed48dcd..0f7003f 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 ecdd229..de6eaa9 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);