Message ID | 20240613155527.591647061@goodmis.org (mailing list archive) |
---|---|
State | Accepted |
Commit | d9d814eebb1ae9742e7fd7f39730653b16326bd4 |
Headers | show |
Series | [v6,1/2] mm/memblock: Add "reserve_mem" to reserved named memory at boot up | expand |
Thanks Steve, re-tested in my VM and it's working fine. Just a minor below... On 13/06/2024 12:55, Steven Rostedt wrote: > [...] > + D. Using a region of memory reserved via ``reserve_mem`` command line > + parameter. The address and size will be defined by the ``reserve_mem`` > + parameter. Note, that ``reserve_mem`` may not always allocate memory > + in the same location, and cannot be relied upon. Testing will need > + to be done, and it may not work on every machine, nor every kernel. > + Consider this a "best effort" approach. The ``reserve_mem`` option > + takes a size, alignment and name as arguments. The name is used > + to map the memory to a label that can be retrieved by ramoops. > + > + reserver_mem=2M:4096:oops ramoops.mem_name=oops > + Likely this could be fixed on merge, to avoid another version, but... s/reserver_mem/reserve_mem Cheers!
On Thu, 13 Jun 2024 15:19:50 -0300 "Guilherme G. Piccoli" <gpiccoli@igalia.com> wrote: > > + > > + reserver_mem=2M:4096:oops ramoops.mem_name=oops > > + > > Likely this could be fixed on merge, to avoid another version, but... > > s/reserver_mem/reserve_mem That 'r' is my nemesis! Almost every time I type "reserve" I write it as "reserver" and have to go back and delete it. :-p Just to make patchwork work nicely, I'll send a v7. But I'll wait for other comments or acks and reviews. -- Steve
On 13/06/2024 15:42, Steven Rostedt wrote: > On Thu, 13 Jun 2024 15:19:50 -0300 > "Guilherme G. Piccoli" <gpiccoli@igalia.com> wrote: > >>> + >>> + reserver_mem=2M:4096:oops ramoops.mem_name=oops >>> + >> >> Likely this could be fixed on merge, to avoid another version, but... >> >> s/reserver_mem/reserve_mem > > That 'r' is my nemesis! Almost every time I type "reserve" I write it > as "reserver" and have to go back and delete it. :-p LOL, I thought the same! And I even wondered if you're not a vim user that makes use of 'r' for replacing text and double typed that - I do that all the time, with r and i. Anyway, thanks for fixing that. Cheers!
diff --git a/Documentation/admin-guide/ramoops.rst b/Documentation/admin-guide/ramoops.rst index e9f85142182d..6f534a707b2a 100644 --- a/Documentation/admin-guide/ramoops.rst +++ b/Documentation/admin-guide/ramoops.rst @@ -23,6 +23,8 @@ and type of the memory area are set using three variables: * ``mem_size`` for the size. The memory size will be rounded down to a power of two. * ``mem_type`` to specify if the memory type (default is pgprot_writecombine). + * ``mem_name`` to specify a memory region defined by ``reserve_mem`` command + line parameter. Typically the default value of ``mem_type=0`` should be used as that sets the pstore mapping to pgprot_writecombine. Setting ``mem_type=1`` attempts to use @@ -118,6 +120,17 @@ Setting the ramoops parameters can be done in several different manners: return ret; } + D. Using a region of memory reserved via ``reserve_mem`` command line + parameter. The address and size will be defined by the ``reserve_mem`` + parameter. Note, that ``reserve_mem`` may not always allocate memory + in the same location, and cannot be relied upon. Testing will need + to be done, and it may not work on every machine, nor every kernel. + Consider this a "best effort" approach. The ``reserve_mem`` option + takes a size, alignment and name as arguments. The name is used + to map the memory to a label that can be retrieved by ramoops. + + reserver_mem=2M:4096:oops ramoops.mem_name=oops + You can specify either RAM memory or peripheral devices' memory. However, when specifying RAM, be sure to reserve the memory by issuing memblock_reserve() very early in the architecture code, e.g.:: 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