Message ID | 20240611215801.605742243@goodmis.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v4,1/2] mm/memblock: Add "reserve_mem" to reserved named memory at boot up | expand |
On 6/11/24 14:56, Steven Rostedt wrote: > From: "Steven Rostedt (Google)" <rostedt@goodmis.org> > > Add a method to find a region specified by reserve_mem=nn:align:name for > ramoops. Adding a kernel command line parameter: > > reserve_mem=12M:4096:oops ramoops.mem_name=oops > > Will use the size and location defined by the memmap parameter where it > finds the memory and labels it "oops". The "oops" in the ramoops option > is used to search for it. > > This allows for arbitrary RAM to be used for ramoops if it is known that > the memory is not cleared on kernel crashes or soft reboots. > > Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > Changes since v3: https://lore.kernel.org/linux-trace-kernel/20240606150316.916395285@goodmis.org > > - Change type of start and size to phys_addr_t > > fs/pstore/ram.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c > index b1a455f42e93..4311fcbc84f2 100644 > --- a/fs/pstore/ram.c > +++ b/fs/pstore/ram.c > @@ -50,6 +50,10 @@ module_param_hw(mem_address, ullong, other, 0400); > MODULE_PARM_DESC(mem_address, > "start of reserved RAM used to store oops/panic logs"); > > +static char *mem_name; > +module_param_named(mem_name, mem_name, charp, 0400); > +MODULE_PARM_DESC(mem_name, "name of kernel param that holds addr"); > + > static ulong mem_size; > module_param(mem_size, ulong, 0400); > MODULE_PARM_DESC(mem_size, > @@ -914,6 +918,16 @@ static void __init ramoops_register_dummy(void) > { > struct ramoops_platform_data pdata; > > + if (mem_name) { > + phys_addr_t start; > + phys_addr_t size; > + > + if (reserve_mem_find_by_name(mem_name, &start, &size)) { > + mem_address = start; > + mem_size = size; > + } > + } > + > /* > * Prepare a dummy platform data structure to carry the module > * parameters. If mem_size isn't set, then there are no module
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c index b1a455f42e93..4311fcbc84f2 100644 --- a/fs/pstore/ram.c +++ b/fs/pstore/ram.c @@ -50,6 +50,10 @@ module_param_hw(mem_address, ullong, other, 0400); MODULE_PARM_DESC(mem_address, "start of reserved RAM used to store oops/panic logs"); +static char *mem_name; +module_param_named(mem_name, mem_name, charp, 0400); +MODULE_PARM_DESC(mem_name, "name of kernel param that holds addr"); + static ulong mem_size; module_param(mem_size, ulong, 0400); MODULE_PARM_DESC(mem_size, @@ -914,6 +918,16 @@ static void __init ramoops_register_dummy(void) { struct ramoops_platform_data pdata; + if (mem_name) { + phys_addr_t start; + phys_addr_t size; + + if (reserve_mem_find_by_name(mem_name, &start, &size)) { + mem_address = start; + mem_size = size; + } + } + /* * Prepare a dummy platform data structure to carry the module * parameters. If mem_size isn't set, then there are no module