aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/pstore/ram.c16
-rw-r--r--fs/pstore/ram_core.c11
-rw-r--r--include/linux/pstore_ram.h3
3 files changed, 22 insertions, 8 deletions
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index 98e48d1a9776..712960e117fe 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -587,9 +587,16 @@ static int ramoops_init_przs(const char *name,
587 goto fail; 587 goto fail;
588 588
589 for (i = 0; i < *cnt; i++) { 589 for (i = 0; i < *cnt; i++) {
590 char *label;
591
592 if (*cnt == 1)
593 label = kasprintf(GFP_KERNEL, "ramoops:%s", name);
594 else
595 label = kasprintf(GFP_KERNEL, "ramoops:%s(%d/%d)",
596 name, i, *cnt - 1);
590 prz_ar[i] = persistent_ram_new(*paddr, zone_sz, sig, 597 prz_ar[i] = persistent_ram_new(*paddr, zone_sz, sig,
591 &cxt->ecc_info, 598 &cxt->ecc_info,
592 cxt->memtype, flags); 599 cxt->memtype, flags, label);
593 if (IS_ERR(prz_ar[i])) { 600 if (IS_ERR(prz_ar[i])) {
594 err = PTR_ERR(prz_ar[i]); 601 err = PTR_ERR(prz_ar[i]);
595 dev_err(dev, "failed to request %s mem region (0x%zx@0x%llx): %d\n", 602 dev_err(dev, "failed to request %s mem region (0x%zx@0x%llx): %d\n",
@@ -619,6 +626,8 @@ static int ramoops_init_prz(const char *name,
619 struct persistent_ram_zone **prz, 626 struct persistent_ram_zone **prz,
620 phys_addr_t *paddr, size_t sz, u32 sig) 627 phys_addr_t *paddr, size_t sz, u32 sig)
621{ 628{
629 char *label;
630
622 if (!sz) 631 if (!sz)
623 return 0; 632 return 0;
624 633
@@ -629,8 +638,9 @@ static int ramoops_init_prz(const char *name,
629 return -ENOMEM; 638 return -ENOMEM;
630 } 639 }
631 640
641 label = kasprintf(GFP_KERNEL, "ramoops:%s", name);
632 *prz = persistent_ram_new(*paddr, sz, sig, &cxt->ecc_info, 642 *prz = persistent_ram_new(*paddr, sz, sig, &cxt->ecc_info,
633 cxt->memtype, 0); 643 cxt->memtype, 0, label);
634 if (IS_ERR(*prz)) { 644 if (IS_ERR(*prz)) {
635 int err = PTR_ERR(*prz); 645 int err = PTR_ERR(*prz);
636 646
diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
index 951a14edcf51..f200dcefb3b4 100644
--- a/fs/pstore/ram_core.c
+++ b/fs/pstore/ram_core.c
@@ -433,11 +433,11 @@ static void *persistent_ram_vmap(phys_addr_t start, size_t size,
433} 433}
434 434
435static void *persistent_ram_iomap(phys_addr_t start, size_t size, 435static void *persistent_ram_iomap(phys_addr_t start, size_t size,
436 unsigned int memtype) 436 unsigned int memtype, char *label)
437{ 437{
438 void *va; 438 void *va;
439 439
440 if (!request_mem_region(start, size, "persistent_ram")) { 440 if (!request_mem_region(start, size, label ?: "ramoops")) {
441 pr_err("request mem region (0x%llx@0x%llx) failed\n", 441 pr_err("request mem region (0x%llx@0x%llx) failed\n",
442 (unsigned long long)size, (unsigned long long)start); 442 (unsigned long long)size, (unsigned long long)start);
443 return NULL; 443 return NULL;
@@ -460,7 +460,8 @@ static int persistent_ram_buffer_map(phys_addr_t start, phys_addr_t size,
460 if (pfn_valid(start >> PAGE_SHIFT)) 460 if (pfn_valid(start >> PAGE_SHIFT))
461 prz->vaddr = persistent_ram_vmap(start, size, memtype); 461 prz->vaddr = persistent_ram_vmap(start, size, memtype);
462 else 462 else
463 prz->vaddr = persistent_ram_iomap(start, size, memtype); 463 prz->vaddr = persistent_ram_iomap(start, size, memtype,
464 prz->label);
464 465
465 if (!prz->vaddr) { 466 if (!prz->vaddr) {
466 pr_err("%s: Failed to map 0x%llx pages at 0x%llx\n", __func__, 467 pr_err("%s: Failed to map 0x%llx pages at 0x%llx\n", __func__,
@@ -530,12 +531,13 @@ void persistent_ram_free(struct persistent_ram_zone *prz)
530 prz->ecc_info.par = NULL; 531 prz->ecc_info.par = NULL;
531 532
532 persistent_ram_free_old(prz); 533 persistent_ram_free_old(prz);
534 kfree(prz->label);
533 kfree(prz); 535 kfree(prz);
534} 536}
535 537
536struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size, 538struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
537 u32 sig, struct persistent_ram_ecc_info *ecc_info, 539 u32 sig, struct persistent_ram_ecc_info *ecc_info,
538 unsigned int memtype, u32 flags) 540 unsigned int memtype, u32 flags, char *label)
539{ 541{
540 struct persistent_ram_zone *prz; 542 struct persistent_ram_zone *prz;
541 int ret = -ENOMEM; 543 int ret = -ENOMEM;
@@ -549,6 +551,7 @@ struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
549 /* Initialize general buffer state. */ 551 /* Initialize general buffer state. */
550 raw_spin_lock_init(&prz->buffer_lock); 552 raw_spin_lock_init(&prz->buffer_lock);
551 prz->flags = flags; 553 prz->flags = flags;
554 prz->label = label;
552 555
553 ret = persistent_ram_buffer_map(start, size, prz, memtype); 556 ret = persistent_ram_buffer_map(start, size, prz, memtype);
554 if (ret) 557 if (ret)
diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h
index e6d226464838..602d64725222 100644
--- a/include/linux/pstore_ram.h
+++ b/include/linux/pstore_ram.h
@@ -46,6 +46,7 @@ struct persistent_ram_zone {
46 phys_addr_t paddr; 46 phys_addr_t paddr;
47 size_t size; 47 size_t size;
48 void *vaddr; 48 void *vaddr;
49 char *label;
49 struct persistent_ram_buffer *buffer; 50 struct persistent_ram_buffer *buffer;
50 size_t buffer_size; 51 size_t buffer_size;
51 u32 flags; 52 u32 flags;
@@ -65,7 +66,7 @@ struct persistent_ram_zone {
65 66
66struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size, 67struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
67 u32 sig, struct persistent_ram_ecc_info *ecc_info, 68 u32 sig, struct persistent_ram_ecc_info *ecc_info,
68 unsigned int memtype, u32 flags); 69 unsigned int memtype, u32 flags, char *label);
69void persistent_ram_free(struct persistent_ram_zone *prz); 70void persistent_ram_free(struct persistent_ram_zone *prz);
70void persistent_ram_zap(struct persistent_ram_zone *prz); 71void persistent_ram_zap(struct persistent_ram_zone *prz);
71 72