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