xref: /OK3568_Linux_fs/kernel/Documentation/admin-guide/kdump/vmcoreinfo.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun==========
2*4882a593SmuzhiyunVMCOREINFO
3*4882a593Smuzhiyun==========
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunWhat is it?
6*4882a593Smuzhiyun===========
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunVMCOREINFO is a special ELF note section. It contains various
9*4882a593Smuzhiyuninformation from the kernel like structure size, page size, symbol
10*4882a593Smuzhiyunvalues, field offsets, etc. These data are packed into an ELF note
11*4882a593Smuzhiyunsection and used by user-space tools like crash and makedumpfile to
12*4882a593Smuzhiyunanalyze a kernel's memory layout.
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunCommon variables
15*4882a593Smuzhiyun================
16*4882a593Smuzhiyun
17*4882a593Smuzhiyuninit_uts_ns.name.release
18*4882a593Smuzhiyun------------------------
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunThe version of the Linux kernel. Used to find the corresponding source
21*4882a593Smuzhiyuncode from which the kernel has been built. For example, crash uses it to
22*4882a593Smuzhiyunfind the corresponding vmlinux in order to process vmcore.
23*4882a593Smuzhiyun
24*4882a593SmuzhiyunPAGE_SIZE
25*4882a593Smuzhiyun---------
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunThe size of a page. It is the smallest unit of data used by the memory
28*4882a593Smuzhiyunmanagement facilities. It is usually 4096 bytes of size and a page is
29*4882a593Smuzhiyunaligned on 4096 bytes. Used for computing page addresses.
30*4882a593Smuzhiyun
31*4882a593Smuzhiyuninit_uts_ns
32*4882a593Smuzhiyun-----------
33*4882a593Smuzhiyun
34*4882a593SmuzhiyunThe UTS namespace which is used to isolate two specific elements of the
35*4882a593Smuzhiyunsystem that relate to the uname(2) system call. It is named after the
36*4882a593Smuzhiyundata structure used to store information returned by the uname(2) system
37*4882a593Smuzhiyuncall.
38*4882a593Smuzhiyun
39*4882a593SmuzhiyunUser-space tools can get the kernel name, host name, kernel release
40*4882a593Smuzhiyunnumber, kernel version, architecture name and OS type from it.
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunnode_online_map
43*4882a593Smuzhiyun---------------
44*4882a593Smuzhiyun
45*4882a593SmuzhiyunAn array node_states[N_ONLINE] which represents the set of online nodes
46*4882a593Smuzhiyunin a system, one bit position per node number. Used to keep track of
47*4882a593Smuzhiyunwhich nodes are in the system and online.
48*4882a593Smuzhiyun
49*4882a593Smuzhiyunswapper_pg_dir
50*4882a593Smuzhiyun--------------
51*4882a593Smuzhiyun
52*4882a593SmuzhiyunThe global page directory pointer of the kernel. Used to translate
53*4882a593Smuzhiyunvirtual to physical addresses.
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun_stext
56*4882a593Smuzhiyun------
57*4882a593Smuzhiyun
58*4882a593SmuzhiyunDefines the beginning of the text section. In general, _stext indicates
59*4882a593Smuzhiyunthe kernel start address. Used to convert a virtual address from the
60*4882a593Smuzhiyundirect kernel map to a physical address.
61*4882a593Smuzhiyun
62*4882a593Smuzhiyunvmap_area_list
63*4882a593Smuzhiyun--------------
64*4882a593Smuzhiyun
65*4882a593SmuzhiyunStores the virtual area list. makedumpfile gets the vmalloc start value
66*4882a593Smuzhiyunfrom this variable and its value is necessary for vmalloc translation.
67*4882a593Smuzhiyun
68*4882a593Smuzhiyunmem_map
69*4882a593Smuzhiyun-------
70*4882a593Smuzhiyun
71*4882a593SmuzhiyunPhysical addresses are translated to struct pages by treating them as
72*4882a593Smuzhiyunan index into the mem_map array. Right-shifting a physical address
73*4882a593SmuzhiyunPAGE_SHIFT bits converts it into a page frame number which is an index
74*4882a593Smuzhiyuninto that mem_map array.
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunUsed to map an address to the corresponding struct page.
77*4882a593Smuzhiyun
78*4882a593Smuzhiyuncontig_page_data
79*4882a593Smuzhiyun----------------
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunMakedumpfile gets the pglist_data structure from this symbol, which is
82*4882a593Smuzhiyunused to describe the memory layout.
83*4882a593Smuzhiyun
84*4882a593SmuzhiyunUser-space tools use this to exclude free pages when dumping memory.
85*4882a593Smuzhiyun
86*4882a593Smuzhiyunmem_section|(mem_section, NR_SECTION_ROOTS)|(mem_section, section_mem_map)
87*4882a593Smuzhiyun--------------------------------------------------------------------------
88*4882a593Smuzhiyun
89*4882a593SmuzhiyunThe address of the mem_section array, its length, structure size, and
90*4882a593Smuzhiyunthe section_mem_map offset.
91*4882a593Smuzhiyun
92*4882a593SmuzhiyunIt exists in the sparse memory mapping model, and it is also somewhat
93*4882a593Smuzhiyunsimilar to the mem_map variable, both of them are used to translate an
94*4882a593Smuzhiyunaddress.
95*4882a593Smuzhiyun
96*4882a593SmuzhiyunMAX_PHYSMEM_BITS
97*4882a593Smuzhiyun----------------
98*4882a593Smuzhiyun
99*4882a593SmuzhiyunDefines the maximum supported physical address space memory.
100*4882a593Smuzhiyun
101*4882a593Smuzhiyunpage
102*4882a593Smuzhiyun----
103*4882a593Smuzhiyun
104*4882a593SmuzhiyunThe size of a page structure. struct page is an important data structure
105*4882a593Smuzhiyunand it is widely used to compute contiguous memory.
106*4882a593Smuzhiyun
107*4882a593Smuzhiyunpglist_data
108*4882a593Smuzhiyun-----------
109*4882a593Smuzhiyun
110*4882a593SmuzhiyunThe size of a pglist_data structure. This value is used to check if the
111*4882a593Smuzhiyunpglist_data structure is valid. It is also used for checking the memory
112*4882a593Smuzhiyuntype.
113*4882a593Smuzhiyun
114*4882a593Smuzhiyunzone
115*4882a593Smuzhiyun----
116*4882a593Smuzhiyun
117*4882a593SmuzhiyunThe size of a zone structure. This value is used to check if the zone
118*4882a593Smuzhiyunstructure has been found. It is also used for excluding free pages.
119*4882a593Smuzhiyun
120*4882a593Smuzhiyunfree_area
121*4882a593Smuzhiyun---------
122*4882a593Smuzhiyun
123*4882a593SmuzhiyunThe size of a free_area structure. It indicates whether the free_area
124*4882a593Smuzhiyunstructure is valid or not. Useful when excluding free pages.
125*4882a593Smuzhiyun
126*4882a593Smuzhiyunlist_head
127*4882a593Smuzhiyun---------
128*4882a593Smuzhiyun
129*4882a593SmuzhiyunThe size of a list_head structure. Used when iterating lists in a
130*4882a593Smuzhiyunpost-mortem analysis session.
131*4882a593Smuzhiyun
132*4882a593Smuzhiyunnodemask_t
133*4882a593Smuzhiyun----------
134*4882a593Smuzhiyun
135*4882a593SmuzhiyunThe size of a nodemask_t type. Used to compute the number of online
136*4882a593Smuzhiyunnodes.
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun(page, flags|_refcount|mapping|lru|_mapcount|private|compound_dtor|compound_order|compound_head)
139*4882a593Smuzhiyun-------------------------------------------------------------------------------------------------
140*4882a593Smuzhiyun
141*4882a593SmuzhiyunUser-space tools compute their values based on the offset of these
142*4882a593Smuzhiyunvariables. The variables are used when excluding unnecessary pages.
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun(pglist_data, node_zones|nr_zones|node_mem_map|node_start_pfn|node_spanned_pages|node_id)
145*4882a593Smuzhiyun-----------------------------------------------------------------------------------------
146*4882a593Smuzhiyun
147*4882a593SmuzhiyunOn NUMA machines, each NUMA node has a pg_data_t to describe its memory
148*4882a593Smuzhiyunlayout. On UMA machines there is a single pglist_data which describes the
149*4882a593Smuzhiyunwhole memory.
150*4882a593Smuzhiyun
151*4882a593SmuzhiyunThese values are used to check the memory type and to compute the
152*4882a593Smuzhiyunvirtual address for memory map.
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun(zone, free_area|vm_stat|spanned_pages)
155*4882a593Smuzhiyun---------------------------------------
156*4882a593Smuzhiyun
157*4882a593SmuzhiyunEach node is divided into a number of blocks called zones which
158*4882a593Smuzhiyunrepresent ranges within memory. A zone is described by a structure zone.
159*4882a593Smuzhiyun
160*4882a593SmuzhiyunUser-space tools compute required values based on the offset of these
161*4882a593Smuzhiyunvariables.
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun(free_area, free_list)
164*4882a593Smuzhiyun----------------------
165*4882a593Smuzhiyun
166*4882a593SmuzhiyunOffset of the free_list's member. This value is used to compute the number
167*4882a593Smuzhiyunof free pages.
168*4882a593Smuzhiyun
169*4882a593SmuzhiyunEach zone has a free_area structure array called free_area[MAX_ORDER].
170*4882a593SmuzhiyunThe free_list represents a linked list of free page blocks.
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun(list_head, next|prev)
173*4882a593Smuzhiyun----------------------
174*4882a593Smuzhiyun
175*4882a593SmuzhiyunOffsets of the list_head's members. list_head is used to define a
176*4882a593Smuzhiyuncircular linked list. User-space tools need these in order to traverse
177*4882a593Smuzhiyunlists.
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun(vmap_area, va_start|list)
180*4882a593Smuzhiyun--------------------------
181*4882a593Smuzhiyun
182*4882a593SmuzhiyunOffsets of the vmap_area's members. They carry vmalloc-specific
183*4882a593Smuzhiyuninformation. Makedumpfile gets the start address of the vmalloc region
184*4882a593Smuzhiyunfrom this.
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun(zone.free_area, MAX_ORDER)
187*4882a593Smuzhiyun---------------------------
188*4882a593Smuzhiyun
189*4882a593SmuzhiyunFree areas descriptor. User-space tools use this value to iterate the
190*4882a593Smuzhiyunfree_area ranges. MAX_ORDER is used by the zone buddy allocator.
191*4882a593Smuzhiyun
192*4882a593Smuzhiyunprb
193*4882a593Smuzhiyun---
194*4882a593Smuzhiyun
195*4882a593SmuzhiyunA pointer to the printk ringbuffer (struct printk_ringbuffer). This
196*4882a593Smuzhiyunmay be pointing to the static boot ringbuffer or the dynamically
197*4882a593Smuzhiyunallocated ringbuffer, depending on when the the core dump occurred.
198*4882a593SmuzhiyunUsed by user-space tools to read the active kernel log buffer.
199*4882a593Smuzhiyun
200*4882a593Smuzhiyunprintk_rb_static
201*4882a593Smuzhiyun----------------
202*4882a593Smuzhiyun
203*4882a593SmuzhiyunA pointer to the static boot printk ringbuffer. If @prb has a
204*4882a593Smuzhiyundifferent value, this is useful for viewing the initial boot messages,
205*4882a593Smuzhiyunwhich may have been overwritten in the dynamically allocated
206*4882a593Smuzhiyunringbuffer.
207*4882a593Smuzhiyun
208*4882a593Smuzhiyunclear_seq
209*4882a593Smuzhiyun---------
210*4882a593Smuzhiyun
211*4882a593SmuzhiyunThe sequence number of the printk() record after the last clear
212*4882a593Smuzhiyuncommand. It indicates the first record after the last
213*4882a593SmuzhiyunSYSLOG_ACTION_CLEAR, like issued by 'dmesg -c'. Used by user-space
214*4882a593Smuzhiyuntools to dump a subset of the dmesg log.
215*4882a593Smuzhiyun
216*4882a593Smuzhiyunprintk_ringbuffer
217*4882a593Smuzhiyun-----------------
218*4882a593Smuzhiyun
219*4882a593SmuzhiyunThe size of a printk_ringbuffer structure. This structure contains all
220*4882a593Smuzhiyuninformation required for accessing the various components of the
221*4882a593Smuzhiyunkernel log buffer.
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun(printk_ringbuffer, desc_ring|text_data_ring|dict_data_ring|fail)
224*4882a593Smuzhiyun-----------------------------------------------------------------
225*4882a593Smuzhiyun
226*4882a593SmuzhiyunOffsets for the various components of the printk ringbuffer. Used by
227*4882a593Smuzhiyunuser-space tools to view the kernel log buffer without requiring the
228*4882a593Smuzhiyundeclaration of the structure.
229*4882a593Smuzhiyun
230*4882a593Smuzhiyunprb_desc_ring
231*4882a593Smuzhiyun-------------
232*4882a593Smuzhiyun
233*4882a593SmuzhiyunThe size of the prb_desc_ring structure. This structure contains
234*4882a593Smuzhiyuninformation about the set of record descriptors.
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun(prb_desc_ring, count_bits|descs|head_id|tail_id)
237*4882a593Smuzhiyun-------------------------------------------------
238*4882a593Smuzhiyun
239*4882a593SmuzhiyunOffsets for the fields describing the set of record descriptors. Used
240*4882a593Smuzhiyunby user-space tools to be able to traverse the descriptors without
241*4882a593Smuzhiyunrequiring the declaration of the structure.
242*4882a593Smuzhiyun
243*4882a593Smuzhiyunprb_desc
244*4882a593Smuzhiyun--------
245*4882a593Smuzhiyun
246*4882a593SmuzhiyunThe size of the prb_desc structure. This structure contains
247*4882a593Smuzhiyuninformation about a single record descriptor.
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun(prb_desc, info|state_var|text_blk_lpos|dict_blk_lpos)
250*4882a593Smuzhiyun------------------------------------------------------
251*4882a593Smuzhiyun
252*4882a593SmuzhiyunOffsets for the fields describing a record descriptors. Used by
253*4882a593Smuzhiyunuser-space tools to be able to read descriptors without requiring
254*4882a593Smuzhiyunthe declaration of the structure.
255*4882a593Smuzhiyun
256*4882a593Smuzhiyunprb_data_blk_lpos
257*4882a593Smuzhiyun-----------------
258*4882a593Smuzhiyun
259*4882a593SmuzhiyunThe size of the prb_data_blk_lpos structure. This structure contains
260*4882a593Smuzhiyuninformation about where the text or dictionary data (data block) is
261*4882a593Smuzhiyunlocated within the respective data ring.
262*4882a593Smuzhiyun
263*4882a593Smuzhiyun(prb_data_blk_lpos, begin|next)
264*4882a593Smuzhiyun-------------------------------
265*4882a593Smuzhiyun
266*4882a593SmuzhiyunOffsets for the fields describing the location of a data block. Used
267*4882a593Smuzhiyunby user-space tools to be able to locate data blocks without
268*4882a593Smuzhiyunrequiring the declaration of the structure.
269*4882a593Smuzhiyun
270*4882a593Smuzhiyunprintk_info
271*4882a593Smuzhiyun-----------
272*4882a593Smuzhiyun
273*4882a593SmuzhiyunThe size of the printk_info structure. This structure contains all
274*4882a593Smuzhiyunthe meta-data for a record.
275*4882a593Smuzhiyun
276*4882a593Smuzhiyun(printk_info, seq|ts_nsec|text_len|dict_len|caller_id)
277*4882a593Smuzhiyun------------------------------------------------------
278*4882a593Smuzhiyun
279*4882a593SmuzhiyunOffsets for the fields providing the meta-data for a record. Used by
280*4882a593Smuzhiyunuser-space tools to be able to read the information without requiring
281*4882a593Smuzhiyunthe declaration of the structure.
282*4882a593Smuzhiyun
283*4882a593Smuzhiyunprb_data_ring
284*4882a593Smuzhiyun-------------
285*4882a593Smuzhiyun
286*4882a593SmuzhiyunThe size of the prb_data_ring structure. This structure contains
287*4882a593Smuzhiyuninformation about a set of data blocks.
288*4882a593Smuzhiyun
289*4882a593Smuzhiyun(prb_data_ring, size_bits|data|head_lpos|tail_lpos)
290*4882a593Smuzhiyun---------------------------------------------------
291*4882a593Smuzhiyun
292*4882a593SmuzhiyunOffsets for the fields describing a set of data blocks. Used by
293*4882a593Smuzhiyunuser-space tools to be able to access the data blocks without
294*4882a593Smuzhiyunrequiring the declaration of the structure.
295*4882a593Smuzhiyun
296*4882a593Smuzhiyunatomic_long_t
297*4882a593Smuzhiyun-------------
298*4882a593Smuzhiyun
299*4882a593SmuzhiyunThe size of the atomic_long_t structure. Used by user-space tools to
300*4882a593Smuzhiyunbe able to copy the full structure, regardless of its
301*4882a593Smuzhiyunarchitecture-specific implementation.
302*4882a593Smuzhiyun
303*4882a593Smuzhiyun(atomic_long_t, counter)
304*4882a593Smuzhiyun------------------------
305*4882a593Smuzhiyun
306*4882a593SmuzhiyunOffset for the long value of an atomic_long_t variable. Used by
307*4882a593Smuzhiyunuser-space tools to access the long value without requiring the
308*4882a593Smuzhiyunarchitecture-specific declaration.
309*4882a593Smuzhiyun
310*4882a593Smuzhiyun(free_area.free_list, MIGRATE_TYPES)
311*4882a593Smuzhiyun------------------------------------
312*4882a593Smuzhiyun
313*4882a593SmuzhiyunThe number of migrate types for pages. The free_list is described by the
314*4882a593Smuzhiyunarray. Used by tools to compute the number of free pages.
315*4882a593Smuzhiyun
316*4882a593SmuzhiyunNR_FREE_PAGES
317*4882a593Smuzhiyun-------------
318*4882a593Smuzhiyun
319*4882a593SmuzhiyunOn linux-2.6.21 or later, the number of free pages is in
320*4882a593Smuzhiyunvm_stat[NR_FREE_PAGES]. Used to get the number of free pages.
321*4882a593Smuzhiyun
322*4882a593SmuzhiyunPG_lru|PG_private|PG_swapcache|PG_swapbacked|PG_slab|PG_hwpoision|PG_head_mask
323*4882a593Smuzhiyun------------------------------------------------------------------------------
324*4882a593Smuzhiyun
325*4882a593SmuzhiyunPage attributes. These flags are used to filter various unnecessary for
326*4882a593Smuzhiyundumping pages.
327*4882a593Smuzhiyun
328*4882a593SmuzhiyunPAGE_BUDDY_MAPCOUNT_VALUE(~PG_buddy)|PAGE_OFFLINE_MAPCOUNT_VALUE(~PG_offline)
329*4882a593Smuzhiyun-----------------------------------------------------------------------------
330*4882a593Smuzhiyun
331*4882a593SmuzhiyunMore page attributes. These flags are used to filter various unnecessary for
332*4882a593Smuzhiyundumping pages.
333*4882a593Smuzhiyun
334*4882a593Smuzhiyun
335*4882a593SmuzhiyunHUGETLB_PAGE_DTOR
336*4882a593Smuzhiyun-----------------
337*4882a593Smuzhiyun
338*4882a593SmuzhiyunThe HUGETLB_PAGE_DTOR flag denotes hugetlbfs pages. Makedumpfile
339*4882a593Smuzhiyunexcludes these pages.
340*4882a593Smuzhiyun
341*4882a593Smuzhiyunx86_64
342*4882a593Smuzhiyun======
343*4882a593Smuzhiyun
344*4882a593Smuzhiyunphys_base
345*4882a593Smuzhiyun---------
346*4882a593Smuzhiyun
347*4882a593SmuzhiyunUsed to convert the virtual address of an exported kernel symbol to its
348*4882a593Smuzhiyuncorresponding physical address.
349*4882a593Smuzhiyun
350*4882a593Smuzhiyuninit_top_pgt
351*4882a593Smuzhiyun------------
352*4882a593Smuzhiyun
353*4882a593SmuzhiyunUsed to walk through the whole page table and convert virtual addresses
354*4882a593Smuzhiyunto physical addresses. The init_top_pgt is somewhat similar to
355*4882a593Smuzhiyunswapper_pg_dir, but it is only used in x86_64.
356*4882a593Smuzhiyun
357*4882a593Smuzhiyunpgtable_l5_enabled
358*4882a593Smuzhiyun------------------
359*4882a593Smuzhiyun
360*4882a593SmuzhiyunUser-space tools need to know whether the crash kernel was in 5-level
361*4882a593Smuzhiyunpaging mode.
362*4882a593Smuzhiyun
363*4882a593Smuzhiyunnode_data
364*4882a593Smuzhiyun---------
365*4882a593Smuzhiyun
366*4882a593SmuzhiyunThis is a struct pglist_data array and stores all NUMA nodes
367*4882a593Smuzhiyuninformation. Makedumpfile gets the pglist_data structure from it.
368*4882a593Smuzhiyun
369*4882a593Smuzhiyun(node_data, MAX_NUMNODES)
370*4882a593Smuzhiyun-------------------------
371*4882a593Smuzhiyun
372*4882a593SmuzhiyunThe maximum number of nodes in system.
373*4882a593Smuzhiyun
374*4882a593SmuzhiyunKERNELOFFSET
375*4882a593Smuzhiyun------------
376*4882a593Smuzhiyun
377*4882a593SmuzhiyunThe kernel randomization offset. Used to compute the page offset. If
378*4882a593SmuzhiyunKASLR is disabled, this value is zero.
379*4882a593Smuzhiyun
380*4882a593SmuzhiyunKERNEL_IMAGE_SIZE
381*4882a593Smuzhiyun-----------------
382*4882a593Smuzhiyun
383*4882a593SmuzhiyunCurrently unused by Makedumpfile. Used to compute the module virtual
384*4882a593Smuzhiyunaddress by Crash.
385*4882a593Smuzhiyun
386*4882a593Smuzhiyunsme_mask
387*4882a593Smuzhiyun--------
388*4882a593Smuzhiyun
389*4882a593SmuzhiyunAMD-specific with SME support: it indicates the secure memory encryption
390*4882a593Smuzhiyunmask. Makedumpfile tools need to know whether the crash kernel was
391*4882a593Smuzhiyunencrypted. If SME is enabled in the first kernel, the crash kernel's
392*4882a593Smuzhiyunpage table entries (pgd/pud/pmd/pte) contain the memory encryption
393*4882a593Smuzhiyunmask. This is used to remove the SME mask and obtain the true physical
394*4882a593Smuzhiyunaddress.
395*4882a593Smuzhiyun
396*4882a593SmuzhiyunCurrently, sme_mask stores the value of the C-bit position. If needed,
397*4882a593Smuzhiyunadditional SME-relevant info can be placed in that variable.
398*4882a593Smuzhiyun
399*4882a593SmuzhiyunFor example::
400*4882a593Smuzhiyun
401*4882a593Smuzhiyun  [ misc	        ][ enc bit  ][ other misc SME info       ]
402*4882a593Smuzhiyun  0000_0000_0000_0000_1000_0000_0000_0000_0000_0000_..._0000
403*4882a593Smuzhiyun  63   59   55   51   47   43   39   35   31   27   ... 3
404*4882a593Smuzhiyun
405*4882a593Smuzhiyunx86_32
406*4882a593Smuzhiyun======
407*4882a593Smuzhiyun
408*4882a593SmuzhiyunX86_PAE
409*4882a593Smuzhiyun-------
410*4882a593Smuzhiyun
411*4882a593SmuzhiyunDenotes whether physical address extensions are enabled. It has the cost
412*4882a593Smuzhiyunof a higher page table lookup overhead, and also consumes more page
413*4882a593Smuzhiyuntable space per process. Used to check whether PAE was enabled in the
414*4882a593Smuzhiyuncrash kernel when converting virtual addresses to physical addresses.
415*4882a593Smuzhiyun
416*4882a593Smuzhiyunia64
417*4882a593Smuzhiyun====
418*4882a593Smuzhiyun
419*4882a593Smuzhiyunpgdat_list|(pgdat_list, MAX_NUMNODES)
420*4882a593Smuzhiyun-------------------------------------
421*4882a593Smuzhiyun
422*4882a593Smuzhiyunpg_data_t array storing all NUMA nodes information. MAX_NUMNODES
423*4882a593Smuzhiyunindicates the number of the nodes.
424*4882a593Smuzhiyun
425*4882a593Smuzhiyunnode_memblk|(node_memblk, NR_NODE_MEMBLKS)
426*4882a593Smuzhiyun------------------------------------------
427*4882a593Smuzhiyun
428*4882a593SmuzhiyunList of node memory chunks. Filled when parsing the SRAT table to obtain
429*4882a593Smuzhiyuninformation about memory nodes. NR_NODE_MEMBLKS indicates the number of
430*4882a593Smuzhiyunnode memory chunks.
431*4882a593Smuzhiyun
432*4882a593SmuzhiyunThese values are used to compute the number of nodes the crashed kernel used.
433*4882a593Smuzhiyun
434*4882a593Smuzhiyunnode_memblk_s|(node_memblk_s, start_paddr)|(node_memblk_s, size)
435*4882a593Smuzhiyun----------------------------------------------------------------
436*4882a593Smuzhiyun
437*4882a593SmuzhiyunThe size of a struct node_memblk_s and the offsets of the
438*4882a593Smuzhiyunnode_memblk_s's members. Used to compute the number of nodes.
439*4882a593Smuzhiyun
440*4882a593SmuzhiyunPGTABLE_3|PGTABLE_4
441*4882a593Smuzhiyun-------------------
442*4882a593Smuzhiyun
443*4882a593SmuzhiyunUser-space tools need to know whether the crash kernel was in 3-level or
444*4882a593Smuzhiyun4-level paging mode. Used to distinguish the page table.
445*4882a593Smuzhiyun
446*4882a593SmuzhiyunARM64
447*4882a593Smuzhiyun=====
448*4882a593Smuzhiyun
449*4882a593SmuzhiyunVA_BITS
450*4882a593Smuzhiyun-------
451*4882a593Smuzhiyun
452*4882a593SmuzhiyunThe maximum number of bits for virtual addresses. Used to compute the
453*4882a593Smuzhiyunvirtual memory ranges.
454*4882a593Smuzhiyun
455*4882a593Smuzhiyunkimage_voffset
456*4882a593Smuzhiyun--------------
457*4882a593Smuzhiyun
458*4882a593SmuzhiyunThe offset between the kernel virtual and physical mappings. Used to
459*4882a593Smuzhiyuntranslate virtual to physical addresses.
460*4882a593Smuzhiyun
461*4882a593SmuzhiyunPHYS_OFFSET
462*4882a593Smuzhiyun-----------
463*4882a593Smuzhiyun
464*4882a593SmuzhiyunIndicates the physical address of the start of memory. Similar to
465*4882a593Smuzhiyunkimage_voffset, which is used to translate virtual to physical
466*4882a593Smuzhiyunaddresses.
467*4882a593Smuzhiyun
468*4882a593SmuzhiyunKERNELOFFSET
469*4882a593Smuzhiyun------------
470*4882a593Smuzhiyun
471*4882a593SmuzhiyunThe kernel randomization offset. Used to compute the page offset. If
472*4882a593SmuzhiyunKASLR is disabled, this value is zero.
473*4882a593Smuzhiyun
474*4882a593SmuzhiyunKERNELPACMASK
475*4882a593Smuzhiyun-------------
476*4882a593Smuzhiyun
477*4882a593SmuzhiyunThe mask to extract the Pointer Authentication Code from a kernel virtual
478*4882a593Smuzhiyunaddress.
479*4882a593Smuzhiyun
480*4882a593SmuzhiyunTCR_EL1.T1SZ
481*4882a593Smuzhiyun------------
482*4882a593Smuzhiyun
483*4882a593SmuzhiyunIndicates the size offset of the memory region addressed by TTBR1_EL1.
484*4882a593SmuzhiyunThe region size is 2^(64-T1SZ) bytes.
485*4882a593Smuzhiyun
486*4882a593SmuzhiyunTTBR1_EL1 is the table base address register specified by ARMv8-A
487*4882a593Smuzhiyunarchitecture which is used to lookup the page-tables for the Virtual
488*4882a593Smuzhiyunaddresses in the higher VA range (refer to ARMv8 ARM document for
489*4882a593Smuzhiyunmore details).
490*4882a593Smuzhiyun
491*4882a593Smuzhiyunarm
492*4882a593Smuzhiyun===
493*4882a593Smuzhiyun
494*4882a593SmuzhiyunARM_LPAE
495*4882a593Smuzhiyun--------
496*4882a593Smuzhiyun
497*4882a593SmuzhiyunIt indicates whether the crash kernel supports large physical address
498*4882a593Smuzhiyunextensions. Used to translate virtual to physical addresses.
499*4882a593Smuzhiyun
500*4882a593Smuzhiyuns390
501*4882a593Smuzhiyun====
502*4882a593Smuzhiyun
503*4882a593Smuzhiyunlowcore_ptr
504*4882a593Smuzhiyun-----------
505*4882a593Smuzhiyun
506*4882a593SmuzhiyunAn array with a pointer to the lowcore of every CPU. Used to print the
507*4882a593Smuzhiyunpsw and all registers information.
508*4882a593Smuzhiyun
509*4882a593Smuzhiyunhigh_memory
510*4882a593Smuzhiyun-----------
511*4882a593Smuzhiyun
512*4882a593SmuzhiyunUsed to get the vmalloc_start address from the high_memory symbol.
513*4882a593Smuzhiyun
514*4882a593Smuzhiyun(lowcore_ptr, NR_CPUS)
515*4882a593Smuzhiyun----------------------
516*4882a593Smuzhiyun
517*4882a593SmuzhiyunThe maximum number of CPUs.
518*4882a593Smuzhiyun
519*4882a593Smuzhiyunpowerpc
520*4882a593Smuzhiyun=======
521*4882a593Smuzhiyun
522*4882a593Smuzhiyun
523*4882a593Smuzhiyunnode_data|(node_data, MAX_NUMNODES)
524*4882a593Smuzhiyun-----------------------------------
525*4882a593Smuzhiyun
526*4882a593SmuzhiyunSee above.
527*4882a593Smuzhiyun
528*4882a593Smuzhiyuncontig_page_data
529*4882a593Smuzhiyun----------------
530*4882a593Smuzhiyun
531*4882a593SmuzhiyunSee above.
532*4882a593Smuzhiyun
533*4882a593Smuzhiyunvmemmap_list
534*4882a593Smuzhiyun------------
535*4882a593Smuzhiyun
536*4882a593SmuzhiyunThe vmemmap_list maintains the entire vmemmap physical mapping. Used
537*4882a593Smuzhiyunto get vmemmap list count and populated vmemmap regions info. If the
538*4882a593Smuzhiyunvmemmap address translation information is stored in the crash kernel,
539*4882a593Smuzhiyunit is used to translate vmemmap kernel virtual addresses.
540*4882a593Smuzhiyun
541*4882a593Smuzhiyunmmu_vmemmap_psize
542*4882a593Smuzhiyun-----------------
543*4882a593Smuzhiyun
544*4882a593SmuzhiyunThe size of a page. Used to translate virtual to physical addresses.
545*4882a593Smuzhiyun
546*4882a593Smuzhiyunmmu_psize_defs
547*4882a593Smuzhiyun--------------
548*4882a593Smuzhiyun
549*4882a593SmuzhiyunPage size definitions, i.e. 4k, 64k, or 16M.
550*4882a593Smuzhiyun
551*4882a593SmuzhiyunUsed to make vtop translations.
552*4882a593Smuzhiyun
553*4882a593Smuzhiyunvmemmap_backing|(vmemmap_backing, list)|(vmemmap_backing, phys)|(vmemmap_backing, virt_addr)
554*4882a593Smuzhiyun--------------------------------------------------------------------------------------------
555*4882a593Smuzhiyun
556*4882a593SmuzhiyunThe vmemmap virtual address space management does not have a traditional
557*4882a593Smuzhiyunpage table to track which virtual struct pages are backed by a physical
558*4882a593Smuzhiyunmapping. The virtual to physical mappings are tracked in a simple linked
559*4882a593Smuzhiyunlist format.
560*4882a593Smuzhiyun
561*4882a593SmuzhiyunUser-space tools need to know the offset of list, phys and virt_addr
562*4882a593Smuzhiyunwhen computing the count of vmemmap regions.
563*4882a593Smuzhiyun
564*4882a593Smuzhiyunmmu_psize_def|(mmu_psize_def, shift)
565*4882a593Smuzhiyun------------------------------------
566*4882a593Smuzhiyun
567*4882a593SmuzhiyunThe size of a struct mmu_psize_def and the offset of mmu_psize_def's
568*4882a593Smuzhiyunmember.
569*4882a593Smuzhiyun
570*4882a593SmuzhiyunUsed in vtop translations.
571*4882a593Smuzhiyun
572*4882a593Smuzhiyunsh
573*4882a593Smuzhiyun==
574*4882a593Smuzhiyun
575*4882a593Smuzhiyunnode_data|(node_data, MAX_NUMNODES)
576*4882a593Smuzhiyun-----------------------------------
577*4882a593Smuzhiyun
578*4882a593SmuzhiyunSee above.
579*4882a593Smuzhiyun
580*4882a593SmuzhiyunX2TLB
581*4882a593Smuzhiyun-----
582*4882a593Smuzhiyun
583*4882a593SmuzhiyunIndicates whether the crashed kernel enabled SH extended mode.
584