treewide: remove redundant IS_ERR() before error code check
[linux/fpc-iii.git] / Documentation / admin-guide / kdump / vmcoreinfo.rst
blob007a6b86e0eedc6b164a5734bd2acc7c37e11916
1 ==========
2 VMCOREINFO
3 ==========
5 What is it?
6 ===========
8 VMCOREINFO is a special ELF note section. It contains various
9 information from the kernel like structure size, page size, symbol
10 values, field offsets, etc. These data are packed into an ELF note
11 section and used by user-space tools like crash and makedumpfile to
12 analyze a kernel's memory layout.
14 Common variables
15 ================
17 init_uts_ns.name.release
18 ------------------------
20 The version of the Linux kernel. Used to find the corresponding source
21 code from which the kernel has been built. For example, crash uses it to
22 find the corresponding vmlinux in order to process vmcore.
24 PAGE_SIZE
25 ---------
27 The size of a page. It is the smallest unit of data used by the memory
28 management facilities. It is usually 4096 bytes of size and a page is
29 aligned on 4096 bytes. Used for computing page addresses.
31 init_uts_ns
32 -----------
34 The UTS namespace which is used to isolate two specific elements of the
35 system that relate to the uname(2) system call. It is named after the
36 data structure used to store information returned by the uname(2) system
37 call.
39 User-space tools can get the kernel name, host name, kernel release
40 number, kernel version, architecture name and OS type from it.
42 node_online_map
43 ---------------
45 An array node_states[N_ONLINE] which represents the set of online nodes
46 in a system, one bit position per node number. Used to keep track of
47 which nodes are in the system and online.
49 swapper_pg_dir
50 --------------
52 The global page directory pointer of the kernel. Used to translate
53 virtual to physical addresses.
55 _stext
56 ------
58 Defines the beginning of the text section. In general, _stext indicates
59 the kernel start address. Used to convert a virtual address from the
60 direct kernel map to a physical address.
62 vmap_area_list
63 --------------
65 Stores the virtual area list. makedumpfile gets the vmalloc start value
66 from this variable and its value is necessary for vmalloc translation.
68 mem_map
69 -------
71 Physical addresses are translated to struct pages by treating them as
72 an index into the mem_map array. Right-shifting a physical address
73 PAGE_SHIFT bits converts it into a page frame number which is an index
74 into that mem_map array.
76 Used to map an address to the corresponding struct page.
78 contig_page_data
79 ----------------
81 Makedumpfile gets the pglist_data structure from this symbol, which is
82 used to describe the memory layout.
84 User-space tools use this to exclude free pages when dumping memory.
86 mem_section|(mem_section, NR_SECTION_ROOTS)|(mem_section, section_mem_map)
87 --------------------------------------------------------------------------
89 The address of the mem_section array, its length, structure size, and
90 the section_mem_map offset.
92 It exists in the sparse memory mapping model, and it is also somewhat
93 similar to the mem_map variable, both of them are used to translate an
94 address.
96 page
97 ----
99 The size of a page structure. struct page is an important data structure
100 and it is widely used to compute contiguous memory.
102 pglist_data
103 -----------
105 The size of a pglist_data structure. This value is used to check if the
106 pglist_data structure is valid. It is also used for checking the memory
107 type.
109 zone
110 ----
112 The size of a zone structure. This value is used to check if the zone
113 structure has been found. It is also used for excluding free pages.
115 free_area
116 ---------
118 The size of a free_area structure. It indicates whether the free_area
119 structure is valid or not. Useful when excluding free pages.
121 list_head
122 ---------
124 The size of a list_head structure. Used when iterating lists in a
125 post-mortem analysis session.
127 nodemask_t
128 ----------
130 The size of a nodemask_t type. Used to compute the number of online
131 nodes.
133 (page, flags|_refcount|mapping|lru|_mapcount|private|compound_dtor|compound_order|compound_head)
134 -------------------------------------------------------------------------------------------------
136 User-space tools compute their values based on the offset of these
137 variables. The variables are used when excluding unnecessary pages.
139 (pglist_data, node_zones|nr_zones|node_mem_map|node_start_pfn|node_spanned_pages|node_id)
140 -----------------------------------------------------------------------------------------
142 On NUMA machines, each NUMA node has a pg_data_t to describe its memory
143 layout. On UMA machines there is a single pglist_data which describes the
144 whole memory.
146 These values are used to check the memory type and to compute the
147 virtual address for memory map.
149 (zone, free_area|vm_stat|spanned_pages)
150 ---------------------------------------
152 Each node is divided into a number of blocks called zones which
153 represent ranges within memory. A zone is described by a structure zone.
155 User-space tools compute required values based on the offset of these
156 variables.
158 (free_area, free_list)
159 ----------------------
161 Offset of the free_list's member. This value is used to compute the number
162 of free pages.
164 Each zone has a free_area structure array called free_area[MAX_ORDER].
165 The free_list represents a linked list of free page blocks.
167 (list_head, next|prev)
168 ----------------------
170 Offsets of the list_head's members. list_head is used to define a
171 circular linked list. User-space tools need these in order to traverse
172 lists.
174 (vmap_area, va_start|list)
175 --------------------------
177 Offsets of the vmap_area's members. They carry vmalloc-specific
178 information. Makedumpfile gets the start address of the vmalloc region
179 from this.
181 (zone.free_area, MAX_ORDER)
182 ---------------------------
184 Free areas descriptor. User-space tools use this value to iterate the
185 free_area ranges. MAX_ORDER is used by the zone buddy allocator.
187 log_first_idx
188 -------------
190 Index of the first record stored in the buffer log_buf. Used by
191 user-space tools to read the strings in the log_buf.
193 log_buf
194 -------
196 Console output is written to the ring buffer log_buf at index
197 log_first_idx. Used to get the kernel log.
199 log_buf_len
200 -----------
202 log_buf's length.
204 clear_idx
205 ---------
207 The index that the next printk() record to read after the last clear
208 command. It indicates the first record after the last SYSLOG_ACTION
209 _CLEAR, like issued by 'dmesg -c'. Used by user-space tools to dump
210 the dmesg log.
212 log_next_idx
213 ------------
215 The index of the next record to store in the buffer log_buf. Used to
216 compute the index of the current buffer position.
218 printk_log
219 ----------
221 The size of a structure printk_log. Used to compute the size of
222 messages, and extract dmesg log. It encapsulates header information for
223 log_buf, such as timestamp, syslog level, etc.
225 (printk_log, ts_nsec|len|text_len|dict_len)
226 -------------------------------------------
228 It represents field offsets in struct printk_log. User space tools
229 parse it and check whether the values of printk_log's members have been
230 changed.
232 (free_area.free_list, MIGRATE_TYPES)
233 ------------------------------------
235 The number of migrate types for pages. The free_list is described by the
236 array. Used by tools to compute the number of free pages.
238 NR_FREE_PAGES
239 -------------
241 On linux-2.6.21 or later, the number of free pages is in
242 vm_stat[NR_FREE_PAGES]. Used to get the number of free pages.
244 PG_lru|PG_private|PG_swapcache|PG_swapbacked|PG_slab|PG_hwpoision|PG_head_mask
245 ------------------------------------------------------------------------------
247 Page attributes. These flags are used to filter various unnecessary for
248 dumping pages.
250 PAGE_BUDDY_MAPCOUNT_VALUE(~PG_buddy)|PAGE_OFFLINE_MAPCOUNT_VALUE(~PG_offline)
251 -----------------------------------------------------------------------------
253 More page attributes. These flags are used to filter various unnecessary for
254 dumping pages.
257 HUGETLB_PAGE_DTOR
258 -----------------
260 The HUGETLB_PAGE_DTOR flag denotes hugetlbfs pages. Makedumpfile
261 excludes these pages.
263 x86_64
264 ======
266 phys_base
267 ---------
269 Used to convert the virtual address of an exported kernel symbol to its
270 corresponding physical address.
272 init_top_pgt
273 ------------
275 Used to walk through the whole page table and convert virtual addresses
276 to physical addresses. The init_top_pgt is somewhat similar to
277 swapper_pg_dir, but it is only used in x86_64.
279 pgtable_l5_enabled
280 ------------------
282 User-space tools need to know whether the crash kernel was in 5-level
283 paging mode.
285 node_data
286 ---------
288 This is a struct pglist_data array and stores all NUMA nodes
289 information. Makedumpfile gets the pglist_data structure from it.
291 (node_data, MAX_NUMNODES)
292 -------------------------
294 The maximum number of nodes in system.
296 KERNELOFFSET
297 ------------
299 The kernel randomization offset. Used to compute the page offset. If
300 KASLR is disabled, this value is zero.
302 KERNEL_IMAGE_SIZE
303 -----------------
305 Currently unused by Makedumpfile. Used to compute the module virtual
306 address by Crash.
308 sme_mask
309 --------
311 AMD-specific with SME support: it indicates the secure memory encryption
312 mask. Makedumpfile tools need to know whether the crash kernel was
313 encrypted. If SME is enabled in the first kernel, the crash kernel's
314 page table entries (pgd/pud/pmd/pte) contain the memory encryption
315 mask. This is used to remove the SME mask and obtain the true physical
316 address.
318 Currently, sme_mask stores the value of the C-bit position. If needed,
319 additional SME-relevant info can be placed in that variable.
321 For example::
323   [ misc                ][ enc bit  ][ other misc SME info       ]
324   0000_0000_0000_0000_1000_0000_0000_0000_0000_0000_..._0000
325   63   59   55   51   47   43   39   35   31   27   ... 3
327 x86_32
328 ======
330 X86_PAE
331 -------
333 Denotes whether physical address extensions are enabled. It has the cost
334 of a higher page table lookup overhead, and also consumes more page
335 table space per process. Used to check whether PAE was enabled in the
336 crash kernel when converting virtual addresses to physical addresses.
338 ia64
339 ====
341 pgdat_list|(pgdat_list, MAX_NUMNODES)
342 -------------------------------------
344 pg_data_t array storing all NUMA nodes information. MAX_NUMNODES
345 indicates the number of the nodes.
347 node_memblk|(node_memblk, NR_NODE_MEMBLKS)
348 ------------------------------------------
350 List of node memory chunks. Filled when parsing the SRAT table to obtain
351 information about memory nodes. NR_NODE_MEMBLKS indicates the number of
352 node memory chunks.
354 These values are used to compute the number of nodes the crashed kernel used.
356 node_memblk_s|(node_memblk_s, start_paddr)|(node_memblk_s, size)
357 ----------------------------------------------------------------
359 The size of a struct node_memblk_s and the offsets of the
360 node_memblk_s's members. Used to compute the number of nodes.
362 PGTABLE_3|PGTABLE_4
363 -------------------
365 User-space tools need to know whether the crash kernel was in 3-level or
366 4-level paging mode. Used to distinguish the page table.
368 ARM64
369 =====
371 VA_BITS
372 -------
374 The maximum number of bits for virtual addresses. Used to compute the
375 virtual memory ranges.
377 kimage_voffset
378 --------------
380 The offset between the kernel virtual and physical mappings. Used to
381 translate virtual to physical addresses.
383 PHYS_OFFSET
384 -----------
386 Indicates the physical address of the start of memory. Similar to
387 kimage_voffset, which is used to translate virtual to physical
388 addresses.
390 KERNELOFFSET
391 ------------
393 The kernel randomization offset. Used to compute the page offset. If
394 KASLR is disabled, this value is zero.
399 ARM_LPAE
400 --------
402 It indicates whether the crash kernel supports large physical address
403 extensions. Used to translate virtual to physical addresses.
405 s390
406 ====
408 lowcore_ptr
409 -----------
411 An array with a pointer to the lowcore of every CPU. Used to print the
412 psw and all registers information.
414 high_memory
415 -----------
417 Used to get the vmalloc_start address from the high_memory symbol.
419 (lowcore_ptr, NR_CPUS)
420 ----------------------
422 The maximum number of CPUs.
424 powerpc
425 =======
428 node_data|(node_data, MAX_NUMNODES)
429 -----------------------------------
431 See above.
433 contig_page_data
434 ----------------
436 See above.
438 vmemmap_list
439 ------------
441 The vmemmap_list maintains the entire vmemmap physical mapping. Used
442 to get vmemmap list count and populated vmemmap regions info. If the
443 vmemmap address translation information is stored in the crash kernel,
444 it is used to translate vmemmap kernel virtual addresses.
446 mmu_vmemmap_psize
447 -----------------
449 The size of a page. Used to translate virtual to physical addresses.
451 mmu_psize_defs
452 --------------
454 Page size definitions, i.e. 4k, 64k, or 16M.
456 Used to make vtop translations.
458 vmemmap_backing|(vmemmap_backing, list)|(vmemmap_backing, phys)|(vmemmap_backing, virt_addr)
459 --------------------------------------------------------------------------------------------
461 The vmemmap virtual address space management does not have a traditional
462 page table to track which virtual struct pages are backed by a physical
463 mapping. The virtual to physical mappings are tracked in a simple linked
464 list format.
466 User-space tools need to know the offset of list, phys and virt_addr
467 when computing the count of vmemmap regions.
469 mmu_psize_def|(mmu_psize_def, shift)
470 ------------------------------------
472 The size of a struct mmu_psize_def and the offset of mmu_psize_def's
473 member.
475 Used in vtop translations.
480 node_data|(node_data, MAX_NUMNODES)
481 -----------------------------------
483 See above.
485 X2TLB
486 -----
488 Indicates whether the crashed kernel enabled SH extended mode.