Documentation/powerpc: update fadump implementation details

The patch titled ("powerpc: make fadump resilient with memory add/remove
events") has made significant changes to the implementation of fadump,
particularly on elfcorehdr creation and fadump crash info header
structure. Therefore, updating the fadump implementation documentation
to reflect those changes.

Following updates are done to firmware assisted dump documentation:

1. The elfcorehdr is no longer stored after fadump HDR in the reserved
   dump area. Instead, the second kernel dynamically allocates memory
   for the elfcorehdr within the address range from 0 to the boot memory
   size. Therefore, update figures 1 and 2 of Memory Reservation during
   the first and second kernels to reflect this change.

2. A version field has been added to the fadump header to manage the
   future changes to fadump crash info header structure without changing
   the fadump header magic number in the future. Therefore, remove the
   corresponding TODO from the document.

Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240422195932.1583833-4-sourabhjain@linux.ibm.com
This commit is contained in:
Sourabh Jain 2024-04-23 01:29:32 +05:30 committed by Michael Ellerman
parent bc446c5aca
commit 57e6700145

View File

@ -134,12 +134,12 @@ that are run. If there is dump data, then the
memory is held. memory is held.
If there is no waiting dump data, then only the memory required to If there is no waiting dump data, then only the memory required to
hold CPU state, HPTE region, boot memory dump, FADump header and hold CPU state, HPTE region, boot memory dump, and FADump header is
elfcore header, is usually reserved at an offset greater than boot usually reserved at an offset greater than boot memory size (see Fig. 1).
memory size (see Fig. 1). This area is *not* released: this region This area is *not* released: this region will be kept permanently
will be kept permanently reserved, so that it can act as a receptacle reserved, so that it can act as a receptacle for a copy of the boot
for a copy of the boot memory content in addition to CPU state and memory content in addition to CPU state and HPTE region, in the case
HPTE region, in the case a crash does occur. a crash does occur.
Since this reserved memory area is used only after the system crash, Since this reserved memory area is used only after the system crash,
there is no point in blocking this significant chunk of memory from there is no point in blocking this significant chunk of memory from
@ -153,22 +153,22 @@ that were present in CMA region::
o Memory Reservation during first kernel o Memory Reservation during first kernel
Low memory Top of memory Low memory Top of memory
0 boot memory size |<--- Reserved dump area --->| | 0 boot memory size |<------ Reserved dump area ----->| |
| | | Permanent Reservation | | | | | Permanent Reservation | |
V V | | V V V | | V
+-----------+-----/ /---+---+----+-------+-----+-----+----+--+ +-----------+-----/ /---+---+----+-----------+-------+----+-----+
| | |///|////| DUMP | HDR | ELF |////| | | | |///|////| DUMP | HDR |////| |
+-----------+-----/ /---+---+----+-------+-----+-----+----+--+ +-----------+-----/ /---+---+----+-----------+-------+----+-----+
| ^ ^ ^ ^ ^ | ^ ^ ^ ^ ^
| | | | | | | | | | | |
\ CPU HPTE / | | \ CPU HPTE / | |
------------------------------ | | -------------------------------- | |
Boot memory content gets transferred | | Boot memory content gets transferred | |
to reserved area by firmware at the | | to reserved area by firmware at the | |
time of crash. | | time of crash. | |
FADump Header | FADump Header |
(meta area) | (meta area) |
| |
| |
Metadata: This area holds a metadata structure whose Metadata: This area holds a metadata structure whose
@ -186,13 +186,20 @@ that were present in CMA region::
0 boot memory size | 0 boot memory size |
| |<------------ Crash preserved area ------------>| | |<------------ Crash preserved area ------------>|
V V |<--- Reserved dump area --->| | V V |<--- Reserved dump area --->| |
+-----------+-----/ /---+---+----+-------+-----+-----+----+--+ +----+---+--+-----/ /---+---+----+-------+-----+-----+-------+
| | |///|////| DUMP | HDR | ELF |////| | | |ELF| | |///|////| DUMP | HDR |/////| |
+-----------+-----/ /---+---+----+-------+-----+-----+----+--+ +----+---+--+-----/ /---+---+----+-------+-----+-----+-------+
| | | | | | | |
V V ----- ------------------------------ ---------------
Used by second /proc/vmcore \ | |
kernel to boot \ | |
\ | |
\ | ----------------------------
\ | /
\ | /
\ | /
/proc/vmcore
+---+ +---+
|///| -> Regions (CPU, HPTE & Metadata) marked like this in the above |///| -> Regions (CPU, HPTE & Metadata) marked like this in the above
@ -200,6 +207,12 @@ that were present in CMA region::
does not have CPU & HPTE regions while Metadata region is does not have CPU & HPTE regions while Metadata region is
not supported on pSeries currently. not supported on pSeries currently.
+---+
|ELF| -> elfcorehdr, it is created in second kernel after crash.
+---+
Note: Memory from 0 to the boot memory size is used by second kernel
Fig. 2 Fig. 2
@ -353,26 +366,6 @@ TODO:
- Need to come up with the better approach to find out more - Need to come up with the better approach to find out more
accurate boot memory size that is required for a kernel to accurate boot memory size that is required for a kernel to
boot successfully when booted with restricted memory. boot successfully when booted with restricted memory.
- The FADump implementation introduces a FADump crash info structure
in the scratch area before the ELF core header. The idea of introducing
this structure is to pass some important crash info data to the second
kernel which will help second kernel to populate ELF core header with
correct data before it gets exported through /proc/vmcore. The current
design implementation does not address a possibility of introducing
additional fields (in future) to this structure without affecting
compatibility. Need to come up with the better approach to address this.
The possible approaches are:
1. Introduce version field for version tracking, bump up the version
whenever a new field is added to the structure in future. The version
field can be used to find out what fields are valid for the current
version of the structure.
2. Reserve the area of predefined size (say PAGE_SIZE) for this
structure and have unused area as reserved (initialized to zero)
for future field additions.
The advantage of approach 1 over 2 is we don't need to reserve extra space.
Author: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com> Author: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>