68
71
* The following values are for linux-2.6.25 or former.
70
73
#define PG_lru_ORIGINAL (5)
74
#define PG_slab_ORIGINAL (7)
71
75
#define PG_private_ORIGINAL (11) /* Has something at ->private */
72
76
#define PG_swapcache_ORIGINAL (15) /* Swap page: swp_entry_t in private */
78
#define PAGE_BUDDY_MAPCOUNT_VALUE_v2_6_38 (-2)
79
#define PAGE_BUDDY_MAPCOUNT_VALUE_v2_6_39_to_latest_version (-128)
81
#define PAGE_FLAGS_SIZE_v2_6_27_to_latest_version (4)
74
83
#define PAGE_MAPPING_ANON (1)
76
85
#define LSEEKED_BITMAP (1)
78
87
#define LSEEKED_PDATA (3)
92
#define BITS_PER_LONG (BITPERBYTE * sizeof(long))
93
#define PG_shift(idx) (BITS_PER_LONG - (idx))
94
#define PG_mask(x, idx) (x ## UL << PG_shift(idx))
95
/* Cleared when the owning guest 'frees' this page. */
96
#define PGC_allocated PG_mask(1, 1)
97
/* Page is Xen heap? */
98
#define PGC_xen_heap PG_mask(1, 2)
100
#define PGC_broken PG_mask(1, 7)
101
/* Mutually-exclusive page states: { inuse, offlining, offlined, free }. */
102
#define PGC_state PG_mask(3, 9)
103
#define PGC_state_inuse PG_mask(0, 9)
104
#define PGC_state_offlining PG_mask(1, 9)
105
#define PGC_state_offlined PG_mask(2, 9)
106
#define PGC_state_free PG_mask(3, 9)
107
#define page_state_is(ci, st) (((ci)&PGC_state) == PGC_state_##st)
109
/* Count of references to this frame. */
110
#define PGC_count_width PG_shift(9)
111
#define PGC_count_mask ((1UL<<PGC_count_width)-1)
83
116
#define MEMORY_PAGETABLE_4L (1 << 0)
118
151
#define PAGESHIFT() (info->page_shift)
119
152
#define PAGEOFFSET(X) (((unsigned long)(X)) & (PAGESIZE() - 1))
120
153
#define PAGEBASE(X) (((unsigned long)(X)) & ~(PAGESIZE() - 1))
121
#define _2MB_PAGE_MASK (~((2*1048576)-1))
230
260
#define ARRAY_LENGTH(X) (array_table.X)
231
261
#define SIZE_INIT(X, Y) \
233
if ((SIZE(X) = get_structure_size(Y, 0)) == FAILED_DWARFINFO) \
263
if ((SIZE(X) = get_structure_size(Y, DWARF_INFO_GET_STRUCT_SIZE)) \
264
== FAILED_DWARFINFO) \
236
267
#define TYPEDEF_SIZE_INIT(X, Y) \
238
if ((SIZE(X) = get_structure_size(Y, 1)) == FAILED_DWARFINFO) \
269
if ((SIZE(X) = get_structure_size(Y, DWARF_INFO_GET_TYPEDEF_SIZE)) \
270
== FAILED_DWARFINFO) \
273
#define ENUM_TYPE_SIZE_INIT(X, Y) \
275
if ((SIZE(X) = get_structure_size(Y, \
276
DWARF_INFO_GET_ENUMERATION_TYPE_SIZE)) \
277
== FAILED_DWARFINFO) \
241
280
#define OFFSET_INIT(X, Y, Z) \
243
282
if ((OFFSET(X) = get_member_offset(Y, Z, DWARF_INFO_GET_MEMBER_OFFSET)) \
382
421
#define KVER_MIN_SHIFT 16
383
422
#define KERNEL_VERSION(x,y,z) (((x) << KVER_MAJ_SHIFT) | ((y) << KVER_MIN_SHIFT) | (z))
384
423
#define OLDEST_VERSION KERNEL_VERSION(2, 6, 15)/* linux-2.6.15 */
385
#define LATEST_VERSION KERNEL_VERSION(3, 4, 8)/* linux-3.4.8 */
424
#define LATEST_VERSION KERNEL_VERSION(3, 6, 7)/* linux-3.6.7 */
388
427
* vmcoreinfo in /proc/vmcore
470
507
#define _PAGE_PRESENT (0x001)
471
508
#define _PAGE_PSE (0x080)
473
#define ENTRY_MASK (~0x8000000000000fffULL)
510
/* Physical addresses are up to 52 bits (AMD64).
511
* Mask off bits 52-62 (reserved) and bit 63 (NX).
513
#define ENTRY_MASK (~0xfff0000000000fffULL)
503
543
#define PML4_SHIFT (39)
504
544
#define PTRS_PER_PML4 (512)
505
545
#define PGDIR_SHIFT (30)
546
#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
547
#define PGDIR_MASK (~(PGDIR_SIZE - 1))
506
548
#define PTRS_PER_PGD (512)
507
549
#define PMD_SHIFT (21)
550
#define PMD_SIZE (1UL << PMD_SHIFT)
551
#define PMD_MASK (~(PMD_SIZE - 1))
508
552
#define PTRS_PER_PMD (512)
509
553
#define PTRS_PER_PTE (512)
510
554
#define PTE_SHIFT (12)
515
559
#define pte_index(address) (((address) >> PTE_SHIFT) & (PTRS_PER_PTE - 1))
517
561
#define _PAGE_PRESENT (0x001)
518
#define _PAGE_PSE (0x080) /* 2MB page */
520
#define __PHYSICAL_MASK_SHIFT (40)
521
#define __PHYSICAL_MASK ((1UL << __PHYSICAL_MASK_SHIFT) - 1)
522
#define PHYSICAL_PAGE_MASK (~(PAGESIZE()-1) & (__PHYSICAL_MASK << PAGESHIFT()))
562
#define _PAGE_PSE (0x080) /* 2MB or 1GB page */
524
564
#endif /* x86_64 */
563
603
#define _REGION_ENTRY_TYPE_MASK 0x0c /* region table type mask */
564
604
#define _REGION_ENTRY_INVALID 0x20 /* invalid region table entry */
565
605
#define _REGION_ENTRY_LENGTH 0x03 /* region table length */
606
#define _REGION_ENTRY_LARGE 0x400
566
607
#define _REGION_OFFSET_MASK 0x7ffUL /* region/segment table offset mask */
568
609
#define RSG_TABLE_LEVEL(x) (((x) & _REGION_ENTRY_TYPE_MASK) >> 2)
718
759
#define pfn_to_paddr(X) \
719
760
(((unsigned long long)(X) + ARCH_PFN_OFFSET) << PAGESHIFT())
762
/* Format of Xen crash info ELF note */
764
unsigned long xen_major_version;
765
unsigned long xen_minor_version;
766
unsigned long xen_extra_version;
767
unsigned long xen_changeset;
768
unsigned long xen_compiler;
769
unsigned long xen_compile_date;
770
unsigned long xen_compile_time;
771
unsigned long tainted;
772
} xen_crash_info_com_t;
775
xen_crash_info_com_t com;
776
#if defined(__x86__) || defined(__x86_64__)
777
/* added by changeset 2b43fb3afb3e: */
778
unsigned long dom0_pfn_to_mfn_frame_list_list;
780
#if defined(__ia64__)
781
/* added by changeset d7c3b12014b3: */
782
unsigned long dom0_mm_pgd_mfn;
786
/* changeset 439a3e9459f2 added xen_phys_start
787
* to the middle of the struct... */
789
xen_crash_info_com_t com;
790
#if defined(__x86__) || defined(__x86_64__)
791
unsigned long xen_phys_start;
792
unsigned long dom0_pfn_to_mfn_frame_list_list;
794
#if defined(__ia64__)
795
unsigned long dom0_mm_pgd_mfn;
797
} xen_crash_info_v2_t;
721
799
struct mem_map_data {
722
800
unsigned long long pfn_start;
723
801
unsigned long long pfn_end;
903
983
* for Xen extraction
985
union { /* Both versions of Xen crash info: */
986
xen_crash_info_com_t *com; /* common fields */
987
xen_crash_info_t *v1; /* without xen_phys_start */
988
xen_crash_info_v2_t *v2; /* changeset 439a3e9459f2 */
990
int xen_crash_info_v; /* Xen crash info version:
991
* 0 .. xen_crash_info_com_t
992
* 1 .. xen_crash_info_t
993
* 2 .. xen_crash_info_v2_t */
905
995
unsigned long long dom0_mapnr; /* The number of page in domain-0.
906
996
* Different from max_mapnr.
907
997
* max_mapnr is the number of page
941
1035
int flag_sadump_diskset;
942
1036
enum sadump_format_type flag_sadump; /* sadump format type */
1038
* for filtering free pages managed by buddy system:
1040
int (*page_is_buddy)(unsigned long flags, unsigned int _mapcount,
1041
unsigned long private, unsigned int _count);
944
1043
extern struct DumpInfo *info;
996
1095
unsigned long long log_buf;
997
1096
unsigned long long log_buf_len;
998
1097
unsigned long long log_end;
1098
unsigned long long log_first_idx;
1099
unsigned long long log_next_idx;
999
1100
unsigned long long max_pfn;
1000
1101
unsigned long long node_remap_start_vaddr;
1001
1102
unsigned long long node_remap_end_vaddr;
1296
1414
#define HYPERVISOR_VIRT_END (0xFFFFFFFFUL)
1297
1415
#define DIRECTMAP_VIRT_START (0xFF000000UL)
1298
1416
#define DIRECTMAP_VIRT_END (0xFFC00000UL)
1417
#define FRAMETABLE_VIRT_START (0xF6800000UL)
1300
1419
#define is_xen_vaddr(x) \
1301
1420
((x) >= HYPERVISOR_VIRT_START_PAE && (x) < HYPERVISOR_VIRT_END)
1305
1424
unsigned long long kvtop_xen_x86(unsigned long kvaddr);
1306
1425
#define kvtop_xen(X) kvtop_xen_x86(X)
1427
int get_xen_basic_info_x86(void);
1428
#define get_xen_basic_info_arch(X) get_xen_basic_info_x86(X)
1308
1429
int get_xen_info_x86(void);
1309
1430
#define get_xen_info_arch(X) get_xen_info_x86(X)
1313
1434
#ifdef __x86_64__
1315
#define ENTRY_MASK (~0x8000000000000fffULL)
1436
/* The architectural limit for physical addresses is 52 bits.
1437
* Mask off bits 52-62 (available for OS use) and bit 63 (NX).
1439
#define ENTRY_MASK (~0xfff0000000000fffULL)
1316
1440
#define MAX_X86_64_FRAMES (info->page_size / sizeof(unsigned long))
1318
1442
#define PAGE_OFFSET_XEN_DOM0 (0xffff880000000000) /* different from linux */
1319
1443
#define HYPERVISOR_VIRT_START (0xffff800000000000)
1320
1444
#define HYPERVISOR_VIRT_END (0xffff880000000000)
1321
1445
#define DIRECTMAP_VIRT_START (0xffff830000000000)
1322
#define DIRECTMAP_VIRT_END (0xffff840000000000)
1323
#define XEN_VIRT_START (0xffff828c80000000)
1446
#define DIRECTMAP_VIRT_END_V3 (0xffff840000000000)
1447
#define DIRECTMAP_VIRT_END_V4 (0xffff880000000000)
1448
#define DIRECTMAP_VIRT_END (info->directmap_virt_end)
1449
#define XEN_VIRT_START_V3 (0xffff828c80000000)
1450
#define XEN_VIRT_START_V4 (0xffff82c480000000)
1451
#define XEN_VIRT_START (info->xen_virt_start)
1452
#define XEN_VIRT_END (XEN_VIRT_START + (1UL << 30))
1453
#define FRAMETABLE_VIRT_START 0xffff82f600000000
1325
1455
#define is_xen_vaddr(x) \
1326
1456
((x) >= HYPERVISOR_VIRT_START && (x) < HYPERVISOR_VIRT_END)
1327
1457
#define is_direct(x) \
1328
1458
((x) >= DIRECTMAP_VIRT_START && (x) < DIRECTMAP_VIRT_END)
1329
1459
#define is_xen_text(x) \
1330
((x) >= XEN_VIRT_START && (x) < DIRECTMAP_VIRT_START)
1460
((x) >= XEN_VIRT_START && (x) < XEN_VIRT_END)
1332
1462
unsigned long long kvtop_xen_x86_64(unsigned long kvaddr);
1333
1463
#define kvtop_xen(X) kvtop_xen_x86_64(X)
1465
int get_xen_basic_info_x86_64(void);
1466
#define get_xen_basic_info_arch(X) get_xen_basic_info_x86_64(X)
1335
1467
int get_xen_info_x86_64(void);
1336
1468
#define get_xen_info_arch(X) get_xen_info_x86_64(X)
1367
1499
unsigned long long kvtop_xen_ia64(unsigned long kvaddr);
1368
1500
#define kvtop_xen(X) kvtop_xen_ia64(X)
1502
int get_xen_basic_info_ia64(void);
1503
#define get_xen_basic_info_arch(X) get_xen_basic_info_ia64(X)
1370
1504
int get_xen_info_ia64(void);
1371
1505
#define get_xen_info_arch(X) get_xen_info_ia64(X)
1375
1509
#if defined(__powerpc64__) || defined(__powerpc32__) /* powerpcXX */
1376
1510
#define kvtop_xen(X) FALSE
1511
#define get_xen_basic_info_arch(X) FALSE
1377
1512
#define get_xen_info_arch(X) FALSE
1378
1513
#endif /* powerpcXX */
1380
1515
#ifdef __s390x__ /* s390x */
1381
1516
#define kvtop_xen(X) FALSE
1517
#define get_xen_basic_info_arch(X) FALSE
1382
1518
#define get_xen_info_arch(X) FALSE
1383
1519
#endif /* s390x */
1513
1649
unsigned long long get_num_dumpable_cyclic(void);
1514
1650
int get_loads_dumpfile_cyclic(void);
1651
int initial_xen(void);
1652
unsigned long long get_free_memory_size(void);
1653
int calculate_cyclic_buffer_size(void);
1517
1655
#endif /* MAKEDUMPFILE_H */