diff options
| -rw-r--r-- | fs/pstore/ram.c | 16 | ||||
| -rw-r--r-- | fs/pstore/ram_core.c | 11 | ||||
| -rw-r--r-- | include/linux/pstore_ram.h | 3 |
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 | ||
| 435 | static void *persistent_ram_iomap(phys_addr_t start, size_t size, | 435 | static 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 | ||
| 536 | struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size, | 538 | struct 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 | ||
| 66 | struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size, | 67 | struct 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); |
| 69 | void persistent_ram_free(struct persistent_ram_zone *prz); | 70 | void persistent_ram_free(struct persistent_ram_zone *prz); |
| 70 | void persistent_ram_zap(struct persistent_ram_zone *prz); | 71 | void persistent_ram_zap(struct persistent_ram_zone *prz); |
| 71 | 72 | ||
