Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 304753
b: refs/heads/master
c: 39eb7e9
h: refs/heads/master
i:
  304751: 709d040
v: v3
  • Loading branch information
Anton Vorontsov authored and Greg Kroah-Hartman committed May 17, 2012
1 parent a2a6d87 commit 14fa264
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 896fc1f0c4c6c19b270734f274be67cb0e8a24af
refs/heads/master: 39eb7e9791866973dbb7a3a6d2061d70356c7d90
6 changes: 6 additions & 0 deletions trunk/Documentation/ramoops.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ variable while setting 0 in that variable dumps only the panics.
The module uses a counter to record multiple dumps but the counter gets reset
on restart (i.e. new dumps after the restart will overwrite old ones).

Ramoops also supports software ECC protection of persistent memory regions.
This might be useful when a hardware reset was used to bring the machine back
to life (i.e. a watchdog triggered). In such cases, RAM may be somewhat
corrupt, but usually it is restorable.

2. Setting the parameters

Setting the ramoops parameters can be done in 2 different manners:
Expand All @@ -46,6 +51,7 @@ static struct ramoops_platform_data ramoops_data = {
.mem_address = <...>,
.record_size = <...>,
.dump_oops = <...>,
.ecc = <...>,
};

static struct platform_device ramoops_dev = {
Expand Down
15 changes: 12 additions & 3 deletions trunk/fs/pstore/ram.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,18 @@ module_param(dump_oops, int, 0600);
MODULE_PARM_DESC(dump_oops,
"set to 1 to dump oopses, 0 to only dump panics (default 1)");

static int ramoops_ecc;
module_param_named(ecc, ramoops_ecc, int, 0600);
MODULE_PARM_DESC(ramoops_ecc,
"set to 1 to enable ECC support");

struct ramoops_context {
struct persistent_ram_zone **przs;
phys_addr_t phys_addr;
unsigned long size;
size_t record_size;
int dump_oops;
bool ecc;
unsigned int count;
unsigned int max_count;
unsigned int read_count;
Expand Down Expand Up @@ -236,6 +242,7 @@ static int __init ramoops_probe(struct platform_device *pdev)
cxt->phys_addr = pdata->mem_address;
cxt->record_size = pdata->record_size;
cxt->dump_oops = pdata->dump_oops;
cxt->ecc = pdata->ecc;

cxt->przs = kzalloc(sizeof(*cxt->przs) * cxt->max_count, GFP_KERNEL);
if (!cxt->przs) {
Expand All @@ -248,7 +255,7 @@ static int __init ramoops_probe(struct platform_device *pdev)
size_t sz = cxt->record_size;
phys_addr_t start = cxt->phys_addr + sz * i;

cxt->przs[i] = persistent_ram_new(start, sz, 0);
cxt->przs[i] = persistent_ram_new(start, sz, cxt->ecc);
if (IS_ERR(cxt->przs[i])) {
err = PTR_ERR(cxt->przs[i]);
dev_err(dev, "failed to request mem region (0x%zx@0x%llx): %d\n",
Expand Down Expand Up @@ -281,9 +288,10 @@ static int __init ramoops_probe(struct platform_device *pdev)
record_size = pdata->record_size;
dump_oops = pdata->dump_oops;

pr_info("attached 0x%lx@0x%llx (%ux0x%zx)\n",
pr_info("attached 0x%lx@0x%llx (%ux0x%zx), ecc: %s\n",
cxt->size, (unsigned long long)cxt->phys_addr,
cxt->max_count, cxt->record_size);
cxt->max_count, cxt->record_size,
ramoops_ecc ? "on" : "off");

return 0;

Expand Down Expand Up @@ -347,6 +355,7 @@ static int __init ramoops_init(void)
dummy_data->mem_address = mem_address;
dummy_data->record_size = record_size;
dummy_data->dump_oops = dump_oops;
dummy_data->ecc = ramoops_ecc;
dummy = platform_create_bundle(&ramoops_driver, ramoops_probe,
NULL, 0, dummy_data,
sizeof(struct ramoops_platform_data));
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/pstore_ram.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ struct ramoops_platform_data {
unsigned long mem_address;
unsigned long record_size;
int dump_oops;
bool ecc;
};

#endif

0 comments on commit 14fa264

Please sign in to comment.