Hello community, here is the log from the commit of package makedumpfile for openSUSE:Factory checked in at 2019-09-11 10:23:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/makedumpfile (Old) and /work/SRC/openSUSE:Factory/.makedumpfile.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "makedumpfile" Wed Sep 11 10:23:42 2019 rev:74 rq:729000 version:1.6.6 Changes: -------- --- /work/SRC/openSUSE:Factory/makedumpfile/makedumpfile.changes 2019-08-16 15:33:09.149917308 +0200 +++ /work/SRC/openSUSE:Factory/.makedumpfile.new.7948/makedumpfile.changes 2019-09-11 10:23:45.075485763 +0200 @@ -1,0 +2,15 @@ +Fri Sep 6 13:09:13 UTC 2019 - Petr Tesařík <[email protected]> + +- makedumpfile-Increase-SECTION_MAP_LAST_BIT-to-4.patch: Increase + SECTION_MAP_LAST_BIT to 4 (bsc#1144708). + +------------------------------------------------------------------- +Thu Sep 5 18:36:13 UTC 2019 - Petr Tesařík <[email protected]> + +- Update to 1.6.6 + * Support for AMD Secure Memory Encryption + * Exclude pages that are logically offline + * Support kernels up to 5.1.9 +- Drop makedumpfile-coptflags.diff. + +------------------------------------------------------------------- @@ -25,0 +41 @@ + * Support larger VA size with newer ppc64 kernels (bsc#1118445). Old: ---- makedumpfile-1.6.5.tar.gz makedumpfile-coptflags.diff New: ---- makedumpfile-1.6.6.tar.gz makedumpfile-Increase-SECTION_MAP_LAST_BIT-to-4.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ makedumpfile.spec ++++++ --- /var/tmp/diff_new_pack.v1qLJi/_old 2019-09-11 10:23:46.711485560 +0200 +++ /var/tmp/diff_new_pack.v1qLJi/_new 2019-09-11 10:23:46.755485555 +0200 @@ -32,7 +32,7 @@ # End of compatibility cruft Name: makedumpfile -Version: 1.6.5 +Version: 1.6.6 Release: 0 Summary: Partial kernel dump License: GPL-2.0-only @@ -40,9 +40,9 @@ Url: https://sourceforge.net/projects/makedumpfile/ Source: https://sourceforge.net/projects/makedumpfile/files/makedumpfile/%{version}/%{name}-%{version}.tar.gz Source99: %{name}-rpmlintrc -Patch0: %{name}-coptflags.diff Patch1: %{name}-override-libtinfo.patch Patch2: %{name}-ppc64-VA-range-SUSE.patch +Patch3: %{name}-Increase-SECTION_MAP_LAST_BIT-to-4.patch BuildRequires: libdw-devel BuildRequires: libebl-devel BuildRequires: libelf-devel @@ -70,18 +70,19 @@ %prep %setup -q -%patch0 -p1 %patch1 -p1 %patch2 -p1 +%patch3 -p1 %build +export CFLAGS="%{optflags}" %if %{have_snappy} export USESNAPPY=on %endif export USELZO=on export LINKTYPE=dynamic -make %{?_smp_mflags} COPTFLAGS="%{optflags}" LDFLAGS="-Wl,-rpath,%{_libdir}/%{name}-%{version}" -make %{?_smp_mflags} COPTFLAGS="%{optflags}" eppic_makedumpfile.so %{?ncurses_make_opts} +make %{?_smp_mflags} LDFLAGS="-Wl,-rpath,%{_libdir}/%{name}-%{version}" +make %{?_smp_mflags} eppic_makedumpfile.so %{?ncurses_make_opts} %install install -D -m 0755 makedumpfile %{buildroot}%{_bindir}/makedumpfile ++++++ makedumpfile-1.6.5.tar.gz -> makedumpfile-1.6.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/Makefile new/makedumpfile-1.6.6/Makefile --- old/makedumpfile-1.6.5/Makefile 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/Makefile 2019-06-27 14:42:40.000000000 +0200 @@ -1,18 +1,17 @@ # makedumpfile -VERSION=1.6.5 -DATE=5 Dec 2018 +VERSION=1.6.6 +DATE=27 Jun 2019 # Honour the environment variable CC ifeq ($(strip $CC),) CC = gcc endif -CFLAGS = -g -O2 -Wall -D_FILE_OFFSET_BITS=64 \ - -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE \ - -DVERSION='"$(VERSION)"' -DRELEASE_DATE='"$(DATE)"' -CFLAGS_ARCH = -g -O2 -Wall -D_FILE_OFFSET_BITS=64 \ - -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE +CFLAGS_BASE := $(CFLAGS) -g -O2 -Wall -D_FILE_OFFSET_BITS=64 \ + -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE +CFLAGS := $(CFLAGS_BASE) -DVERSION='"$(VERSION)"' -DRELEASE_DATE='"$(DATE)"' +CFLAGS_ARCH := $(CFLAGS_BASE) # LDFLAGS = -L/usr/local/lib -I/usr/local/include HOST_ARCH := $(shell uname -m) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/README new/makedumpfile-1.6.6/README --- old/makedumpfile-1.6.5/README 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/README 2019-06-27 14:42:40.000000000 +0200 @@ -127,6 +127,9 @@ 4.17 | OK | ** | | | | ** | | -- | OK | OK | | | 4.18 | OK | ** | | | | ** | | -- | OK | OK | | | 4.19 | OK | ** | | | | ** | | -- | OK | OK | | | + 4.20 | OK | ** | | | | ** | | -- | OK | OK | | | + 5.0 | OK | ** | | | | ** | | -- | OK | OK | | | + 5.1 | OK | ** | | | | ** | | -- | OK | OK | | | OK : Support. -- : Not support. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/arch/ppc64.c new/makedumpfile-1.6.6/arch/ppc64.c --- old/makedumpfile-1.6.5/arch/ppc64.c 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/arch/ppc64.c 2019-06-27 14:42:40.000000000 +0200 @@ -486,6 +486,11 @@ || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT()))) return TRUE; + info->max_physmem_bits = _MAX_PHYSMEM_BITS_4_20; + if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME())) + || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT()))) + return TRUE; + return FALSE; } @@ -652,7 +657,7 @@ return FALSE; } fpb = fopen(f_crashbase, "r"); - if (!fp) { + if (!fpb) { ERRMSG("Cannot open %s\n", f_crashbase); fclose(fp); return FALSE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/arch/x86_64.c new/makedumpfile-1.6.6/arch/x86_64.c --- old/makedumpfile-1.6.5/arch/x86_64.c 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/arch/x86_64.c 2019-06-27 14:42:40.000000000 +0200 @@ -48,6 +48,7 @@ { unsigned int i; char buf[BUFSIZE_FGETS], *endp; + unsigned long kernel_image_size; if (!info->kaslr_offset && info->file_vmcoreinfo) { if (fseek(info->file_vmcoreinfo, 0, SEEK_SET) < 0) { @@ -68,8 +69,16 @@ strtoul(buf+strlen(STR_KERNELOFFSET),&endp,16); } } + if (!info->kaslr_offset) + return 0; + + if (NUMBER(KERNEL_IMAGE_SIZE) != NOT_FOUND_NUMBER) + kernel_image_size = NUMBER(KERNEL_IMAGE_SIZE); + else + kernel_image_size = KERNEL_IMAGE_SIZE_KASLR_ORIG; + if (vaddr >= __START_KERNEL_map && - vaddr < __START_KERNEL_map + info->kaslr_offset) + vaddr < __START_KERNEL_map + kernel_image_size) return info->kaslr_offset; else /* @@ -149,6 +158,8 @@ info->phys_base = 0; /* default/traditional */ if (NUMBER(phys_base) != NOT_FOUND_NUMBER) { info->phys_base = NUMBER(phys_base); + DEBUG_MSG("phys_base : %lx (vmcoreinfo)\n", + info->phys_base); return TRUE; } @@ -156,6 +167,8 @@ if (!has_vmcoreinfo() && info->name_vmlinux) { SYMBOL_INIT(phys_base, "phys_base"); if (SYMBOL(phys_base) == NOT_FOUND_SYMBOL) { + DEBUG_MSG("phys_base : %lx (no phys_base)\n", + info->phys_base); return TRUE; } } @@ -167,6 +180,8 @@ info->phys_base = phys_start - (virt_start & ~(__START_KERNEL_map)); + DEBUG_MSG("phys_base : %lx (pt_load)\n", + info->phys_base); break; } } @@ -291,6 +306,7 @@ unsigned long page_dir, pgd, pud_paddr, pud_pte, pmd_paddr, pmd_pte; unsigned long pte_paddr, pte; unsigned long p4d_paddr, p4d_pte; + unsigned long entry_mask = ENTRY_MASK; /* * Get PGD. @@ -302,6 +318,9 @@ return NOT_PADDR; } + if (NUMBER(sme_mask) != NOT_FOUND_NUMBER) + entry_mask &= ~(NUMBER(sme_mask)); + if (check_5level_paging()) { page_dir += pgd5_index(vaddr) * sizeof(unsigned long); if (!readmem(PADDR, page_dir, &pgd, sizeof pgd)) { @@ -318,7 +337,7 @@ /* * Get P4D. */ - p4d_paddr = pgd & ENTRY_MASK; + p4d_paddr = pgd & entry_mask; p4d_paddr += p4d_index(vaddr) * sizeof(unsigned long); if (!readmem(PADDR, p4d_paddr, &p4d_pte, sizeof p4d_pte)) { ERRMSG("Can't get p4d_pte (p4d_paddr:%lx).\n", p4d_paddr); @@ -331,7 +350,7 @@ ERRMSG("Can't get a valid p4d_pte.\n"); return NOT_PADDR; } - pud_paddr = p4d_pte & ENTRY_MASK; + pud_paddr = p4d_pte & entry_mask; }else { page_dir += pgd_index(vaddr) * sizeof(unsigned long); if (!readmem(PADDR, page_dir, &pgd, sizeof pgd)) { @@ -345,7 +364,7 @@ ERRMSG("Can't get a valid pgd.\n"); return NOT_PADDR; } - pud_paddr = pgd & ENTRY_MASK; + pud_paddr = pgd & entry_mask; } /* @@ -364,13 +383,13 @@ return NOT_PADDR; } if (pud_pte & _PAGE_PSE) /* 1GB pages */ - return (pud_pte & ENTRY_MASK & PUD_MASK) + + return (pud_pte & entry_mask & PUD_MASK) + (vaddr & ~PUD_MASK); /* * Get PMD. */ - pmd_paddr = pud_pte & ENTRY_MASK; + pmd_paddr = pud_pte & entry_mask; pmd_paddr += pmd_index(vaddr) * sizeof(unsigned long); if (!readmem(PADDR, pmd_paddr, &pmd_pte, sizeof pmd_pte)) { ERRMSG("Can't get pmd_pte (pmd_paddr:%lx).\n", pmd_paddr); @@ -384,13 +403,13 @@ return NOT_PADDR; } if (pmd_pte & _PAGE_PSE) /* 2MB pages */ - return (pmd_pte & ENTRY_MASK & PMD_MASK) + + return (pmd_pte & entry_mask & PMD_MASK) + (vaddr & ~PMD_MASK); /* * Get PTE. */ - pte_paddr = pmd_pte & ENTRY_MASK; + pte_paddr = pmd_pte & entry_mask; pte_paddr += pte_index(vaddr) * sizeof(unsigned long); if (!readmem(PADDR, pte_paddr, &pte, sizeof pte)) { ERRMSG("Can't get pte (pte_paddr:%lx).\n", pte_paddr); @@ -403,7 +422,7 @@ ERRMSG("Can't get a valid pte.\n"); return NOT_PADDR; } - return (pte & ENTRY_MASK) + PAGEOFFSET(vaddr); + return (pte & entry_mask) + PAGEOFFSET(vaddr); } unsigned long long @@ -636,6 +655,7 @@ unsigned long pmd, tpfn; unsigned long pvaddr = 0; unsigned long data_addr = 0, last_data_addr = 0, start_data_addr = 0; + unsigned long pmask = PMASK; /* * data_addr is the paddr of the page holding the page structs. * We keep lists of contiguous pages and the pfn's that their @@ -656,6 +676,9 @@ return FAILED; } + if (NUMBER(sme_mask) != NOT_FOUND_NUMBER) + pmask &= ~(NUMBER(sme_mask)); + pagestructsize = size_table.page; hugepagesize = PTRS_PER_PMD * info->page_size; vaddr_base = info->vmemmap_start; @@ -686,7 +709,7 @@ } /* mask the pgd entry for the address of the pud page */ - pud_addr &= PMASK; + pud_addr &= pmask; if (pud_addr == 0) continue; /* read the entire pud page */ @@ -699,7 +722,7 @@ /* pudp points to an entry in the pud page */ for (pudp = (unsigned long *)pud_page, pudindex = 0; pudindex < PTRS_PER_PUD; pudindex++, pudp++) { - pmd_addr = *pudp & PMASK; + pmd_addr = *pudp & pmask; /* read the entire pmd page */ if (pmd_addr == 0) continue; @@ -741,7 +764,7 @@ * - we discontiguous page is a string of valids */ if (pmd) { - data_addr = (pmd & PMASK); + data_addr = (pmd & pmask); if (start_range) { /* first-time kludge */ start_data_addr = data_addr; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/elf_info.c new/makedumpfile-1.6.6/elf_info.c --- old/makedumpfile-1.6.5/elf_info.c 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/elf_info.c 2019-06-27 14:42:40.000000000 +0200 @@ -169,11 +169,12 @@ pls->file_offset = prog->p_offset; pls->file_size = prog->p_filesz; - DEBUG_MSG("LOAD (%d)\n", num_load); - DEBUG_MSG(" phys_start : %llx\n", pls->phys_start); - DEBUG_MSG(" phys_end : %llx\n", pls->phys_end); - DEBUG_MSG(" virt_start : %llx\n", pls->virt_start); - DEBUG_MSG(" virt_end : %llx\n", pls->virt_end); + if (num_load == 0) + DEBUG_MSG("%8s %16s %16s %16s %16s\n", "", + "phys_start", "phys_end", "virt_start", "virt_end"); + + DEBUG_MSG("LOAD[%2d] %16llx %16llx %16llx %16llx\n", num_load, + pls->phys_start, pls->phys_end, pls->virt_start, pls->virt_end); return TRUE; } @@ -928,13 +929,13 @@ p->file_offset + p->phys_end - p->phys_start); } + DEBUG_MSG("%8s %16s %16s %16s %16s\n", "", + "phys_start", "phys_end", "virt_start", "virt_end"); for (i = 0; i < num_pt_loads; ++i) { struct pt_load_segment *p = &pt_loads[i]; - DEBUG_MSG("LOAD (%d)\n", i); - DEBUG_MSG(" phys_start : %llx\n", p->phys_start); - DEBUG_MSG(" phys_end : %llx\n", p->phys_end); - DEBUG_MSG(" virt_start : %llx\n", p->virt_start); - DEBUG_MSG(" virt_end : %llx\n", p->virt_end); + + DEBUG_MSG("LOAD[%2d] %16llx %16llx %16llx %16llx\n", i, + p->phys_start, p->phys_end, p->virt_start, p->virt_end); } return TRUE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/makedumpfile.8 new/makedumpfile-1.6.6/makedumpfile.8 --- old/makedumpfile-1.6.5/makedumpfile.8 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/makedumpfile.8 2019-06-27 14:42:40.000000000 +0200 @@ -1,4 +1,4 @@ -.TH MAKEDUMPFILE 8 "5 Dec 2018" "makedumpfile v1.6.5" "Linux System Administrator's Manual" +.TH MAKEDUMPFILE 8 "27 Jun 2019" "makedumpfile v1.6.6" "Linux System Administrator's Manual" .SH NAME makedumpfile \- make a small dumpfile of kdump .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/makedumpfile.c new/makedumpfile-1.6.6/makedumpfile.c --- old/makedumpfile-1.6.5/makedumpfile.c 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/makedumpfile.c 2019-06-27 14:42:40.000000000 +0200 @@ -88,6 +88,7 @@ mdf_pfn_t pfn_user; mdf_pfn_t pfn_free; mdf_pfn_t pfn_hwpoison; +mdf_pfn_t pfn_offline; mdf_pfn_t num_dumped; @@ -250,6 +251,21 @@ } static int +isOffline(unsigned long flags, unsigned int _mapcount) +{ + if (NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE) == NOT_FOUND_NUMBER) + return FALSE; + + if (flags & (1UL << NUMBER(PG_slab))) + return FALSE; + + if (_mapcount == (int)NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE)) + return TRUE; + + return FALSE; +} + +static int is_cache_page(unsigned long flags) { if (isLRU(flags)) @@ -977,6 +993,8 @@ read_size = MIN(info->page_size - PAGEOFFSET(paddr), size); pgaddr = PAGEBASE(paddr); + if (NUMBER(sme_mask) != NOT_FOUND_NUMBER) + pgaddr = pgaddr & ~(NUMBER(sme_mask)); pgbuf = cache_search(pgaddr, read_size); if (!pgbuf) { ++cache_miss; @@ -2276,6 +2294,7 @@ WRITE_NUMBER("NR_FREE_PAGES", NR_FREE_PAGES); WRITE_NUMBER("N_ONLINE", N_ONLINE); WRITE_NUMBER("pgtable_l5_enabled", pgtable_l5_enabled); + WRITE_NUMBER("sme_mask", sme_mask); WRITE_NUMBER("PG_lru", PG_lru); WRITE_NUMBER("PG_private", PG_private); @@ -2287,7 +2306,10 @@ WRITE_NUMBER("PG_hwpoison", PG_hwpoison); WRITE_NUMBER("PAGE_BUDDY_MAPCOUNT_VALUE", PAGE_BUDDY_MAPCOUNT_VALUE); + WRITE_NUMBER("PAGE_OFFLINE_MAPCOUNT_VALUE", + PAGE_OFFLINE_MAPCOUNT_VALUE); WRITE_NUMBER("phys_base", phys_base); + WRITE_NUMBER("KERNEL_IMAGE_SIZE", KERNEL_IMAGE_SIZE); WRITE_NUMBER("HUGETLB_PAGE_DTOR", HUGETLB_PAGE_DTOR); #ifdef __aarch64__ @@ -2362,12 +2384,15 @@ return FALSE; } + DEBUG_MSG("VMCOREINFO :\n"); while (fgets(buf, BUFSIZE_FGETS, info->file_vmcoreinfo)) { i = strlen(buf); if (!i) break; if (buf[i - 1] == '\n') buf[i - 1] = '\0'; + + DEBUG_MSG(" %s\n", buf); if (strncmp(buf, STR_OSRELEASE, strlen(STR_OSRELEASE)) == 0) { get_release = TRUE; /* if the release have been stored, skip this time. */ @@ -2411,6 +2436,8 @@ strlen(STR_CONFIG_PGTABLE_4)) == 0) vt.mem_flags |= MEMORY_PAGETABLE_4L; } + DEBUG_MSG("\n"); + if (!get_release || !info->page_size) { ERRMSG("Invalid format in %s", info->name_vmcoreinfo); return FALSE; @@ -2672,6 +2699,7 @@ READ_NUMBER("NR_FREE_PAGES", NR_FREE_PAGES); READ_NUMBER("N_ONLINE", N_ONLINE); READ_NUMBER("pgtable_l5_enabled", pgtable_l5_enabled); + READ_NUMBER("sme_mask", sme_mask); READ_NUMBER("PG_lru", PG_lru); READ_NUMBER("PG_private", PG_private); @@ -2687,7 +2715,9 @@ READ_SRCFILE("pud_t", pud_t); READ_NUMBER("PAGE_BUDDY_MAPCOUNT_VALUE", PAGE_BUDDY_MAPCOUNT_VALUE); + READ_NUMBER("PAGE_OFFLINE_MAPCOUNT_VALUE", PAGE_OFFLINE_MAPCOUNT_VALUE); READ_NUMBER("phys_base", phys_base); + READ_NUMBER("KERNEL_IMAGE_SIZE", KERNEL_IMAGE_SIZE); #ifdef __aarch64__ READ_NUMBER("VA_BITS", VA_BITS); READ_NUMBER_UNSIGNED("PHYS_OFFSET", PHYS_OFFSET); @@ -2836,9 +2866,7 @@ if (!(vt.numnodes = get_nodes_online())) { vt.numnodes = 1; } - DEBUG_MSG("\n"); DEBUG_MSG("num of NODEs : %d\n", vt.numnodes); - DEBUG_MSG("\n"); return TRUE; } @@ -2968,10 +2996,12 @@ mmd->pfn_end = pfn_end; mmd->mem_map = mem_map; - DEBUG_MSG("mem_map (%d)\n", num_mm); - DEBUG_MSG(" mem_map : %lx\n", mem_map); - DEBUG_MSG(" pfn_start : %llx\n", pfn_start); - DEBUG_MSG(" pfn_end : %llx\n", pfn_end); + if (num_mm == 0) + DEBUG_MSG("%13s %16s %16s %16s\n", + "", "mem_map", "pfn_start", "pfn_end"); + + DEBUG_MSG("mem_map[%4d] %16lx %16llx %16llx\n", + num_mm, mem_map, pfn_start, pfn_end); return; } @@ -3561,27 +3591,19 @@ switch (get_mem_type()) { case SPARSEMEM: - DEBUG_MSG("\n"); - DEBUG_MSG("Memory type : SPARSEMEM\n"); - DEBUG_MSG("\n"); + DEBUG_MSG("Memory type : SPARSEMEM\n\n"); ret = get_mm_sparsemem(); break; case SPARSEMEM_EX: - DEBUG_MSG("\n"); - DEBUG_MSG("Memory type : SPARSEMEM_EX\n"); - DEBUG_MSG("\n"); + DEBUG_MSG("Memory type : SPARSEMEM_EX\n\n"); ret = get_mm_sparsemem(); break; case DISCONTIGMEM: - DEBUG_MSG("\n"); - DEBUG_MSG("Memory type : DISCONTIGMEM\n"); - DEBUG_MSG("\n"); + DEBUG_MSG("Memory type : DISCONTIGMEM\n\n"); ret = get_mm_discontigmem(); break; case FLATMEM: - DEBUG_MSG("\n"); - DEBUG_MSG("Memory type : FLATMEM\n"); - DEBUG_MSG("\n"); + DEBUG_MSG("Memory type : FLATMEM\n\n"); ret = get_mm_flatmem(); break; default: @@ -6042,6 +6064,12 @@ pfn_counter = &pfn_hwpoison; } /* + * Exclude pages that are logically offline. + */ + else if (isOffline(flags, _mapcount)) { + pfn_counter = &pfn_offline; + } + /* * Unexcludable page */ else @@ -7522,7 +7550,7 @@ */ if (info->flag_cyclic) { pfn_zero = pfn_cache = pfn_cache_private = 0; - pfn_user = pfn_free = pfn_hwpoison = 0; + pfn_user = pfn_free = pfn_hwpoison = pfn_offline = 0; pfn_memhole = info->max_mapnr; } @@ -8804,7 +8832,7 @@ * Reset counter for debug message. */ pfn_zero = pfn_cache = pfn_cache_private = 0; - pfn_user = pfn_free = pfn_hwpoison = 0; + pfn_user = pfn_free = pfn_hwpoison = pfn_offline = 0; pfn_memhole = info->max_mapnr; /* @@ -9749,7 +9777,7 @@ pfn_original = info->max_mapnr - pfn_memhole; pfn_excluded = pfn_zero + pfn_cache + pfn_cache_private - + pfn_user + pfn_free + pfn_hwpoison; + + pfn_user + pfn_free + pfn_hwpoison + pfn_offline; shrinking = (pfn_original - pfn_excluded) * 100; shrinking = shrinking / pfn_original; @@ -9763,6 +9791,7 @@ REPORT_MSG(" User process data pages : 0x%016llx\n", pfn_user); REPORT_MSG(" Free pages : 0x%016llx\n", pfn_free); REPORT_MSG(" Hwpoison pages : 0x%016llx\n", pfn_hwpoison); + REPORT_MSG(" Offline pages : 0x%016llx\n", pfn_offline); REPORT_MSG(" Remaining pages : 0x%016llx\n", pfn_original - pfn_excluded); REPORT_MSG(" (The number of pages is reduced to %lld%%.)\n", @@ -9790,7 +9819,7 @@ pfn_original = info->max_mapnr - pfn_memhole; pfn_excluded = pfn_zero + pfn_cache + pfn_cache_private - + pfn_user + pfn_free + pfn_hwpoison; + + pfn_user + pfn_free + pfn_hwpoison + pfn_offline; shrinking = (pfn_original - pfn_excluded) * 100; shrinking = shrinking / pfn_original; total_size = info->page_size * pfn_original; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/makedumpfile.conf.5 new/makedumpfile-1.6.6/makedumpfile.conf.5 --- old/makedumpfile-1.6.5/makedumpfile.conf.5 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/makedumpfile.conf.5 2019-06-27 14:42:40.000000000 +0200 @@ -1,4 +1,4 @@ -.TH MAKEDUMPFILE.CONF 5 "5 Dec 2018" "makedumpfile v1.6.5" "Linux System Administrator's Manual" +.TH MAKEDUMPFILE.CONF 5 "27 Jun 2019" "makedumpfile v1.6.6" "Linux System Administrator's Manual" .SH NAME makedumpfile.conf \- The filter configuration file for makedumpfile(8). .SH DESCRIPTION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/makedumpfile.h new/makedumpfile-1.6.6/makedumpfile.h --- old/makedumpfile-1.6.5/makedumpfile.h 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/makedumpfile.h 2019-06-27 14:42:40.000000000 +0200 @@ -495,7 +495,7 @@ #define KVER_MIN_SHIFT 16 #define KERNEL_VERSION(x,y,z) (((x) << KVER_MAJ_SHIFT) | ((y) << KVER_MIN_SHIFT) | (z)) #define OLDEST_VERSION KERNEL_VERSION(2, 6, 15) /* linux-2.6.15 */ -#define LATEST_VERSION KERNEL_VERSION(4, 19, 4) /* linux-4.19.4 */ +#define LATEST_VERSION KERNEL_VERSION(5, 1, 9) /* linux-5.1.9 */ /* * vmcoreinfo in /proc/vmcore @@ -617,6 +617,7 @@ #define VMEMMAP_END_5LEVEL (0xffd5ffffffffffff) /* 5-level page table */ #define __START_KERNEL_map (0xffffffff80000000) +#define KERNEL_IMAGE_SIZE_KASLR_ORIG (1024*1024*1024) /* 3.14, or later */ #define KVBASE PAGE_OFFSET #define _SECTION_SIZE_BITS (27) #define _MAX_PHYSMEM_BITS_ORIG (40) @@ -672,6 +673,7 @@ #define _MAX_PHYSMEM_BITS_ORIG (44) #define _MAX_PHYSMEM_BITS_3_7 (46) #define _MAX_PHYSMEM_BITS_4_19 (47) +#define _MAX_PHYSMEM_BITS_4_20 (51) #define REGION_SHIFT (60UL) #define VMEMMAP_REGION_ID (0xfUL) @@ -1912,6 +1914,7 @@ long NR_FREE_PAGES; long N_ONLINE; long pgtable_l5_enabled; + long sme_mask; /* * Page flags @@ -1927,10 +1930,12 @@ long PG_hwpoison; long PAGE_BUDDY_MAPCOUNT_VALUE; + long PAGE_OFFLINE_MAPCOUNT_VALUE; long SECTION_SIZE_BITS; long MAX_PHYSMEM_BITS; long HUGETLB_PAGE_DTOR; long phys_base; + long KERNEL_IMAGE_SIZE; #ifdef __aarch64__ long VA_BITS; unsigned long PHYS_OFFSET; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.6.5/makedumpfile.spec new/makedumpfile-1.6.6/makedumpfile.spec --- old/makedumpfile-1.6.5/makedumpfile.spec 2018-12-04 21:21:52.000000000 +0100 +++ new/makedumpfile-1.6.6/makedumpfile.spec 2019-06-27 14:42:40.000000000 +0200 @@ -1,6 +1,6 @@ Name: makedumpfile Summary: makedumpfile package -Version: 1.6.5 +Version: 1.6.6 Release: 1 Group: Applications/Text License: GPL ++++++ makedumpfile-Increase-SECTION_MAP_LAST_BIT-to-4.patch ++++++ >From 7bdb468c2c99dd780c9a5321f93c79cbfdce2527 Mon Sep 17 00:00:00 2001 From: Kazuhito Hagio <[email protected]> Date: Tue, 23 Jul 2019 12:24:47 -0400 Subject: [PATCH] Increase SECTION_MAP_LAST_BIT to 4 References: bsc#1144708 Git-commit: 7bdb468c2c99dd780c9a5321f93c79cbfdce2527 Upstream: merged kernel commit 326e1b8f83a4 ("mm/sparsemem: introduce a SECTION_IS_EARLY flag") added the flag to mem_section->section_mem_map value, and it caused makedumpfile an error like the following: readmem: Can't convert a virtual address(fffffc97d1000000) to physical address. readmem: type_addr: 0, addr:fffffc97d1000000, size:32768 __exclude_unnecessary_pages: Can't read the buffer of struct page. create_2nd_bitmap: Can't exclude unnecessary pages. To fix this, SECTION_MAP_LAST_BIT needs to be updated. The bit has not been used until the addition, so we can just increase the value. Signed-off-by: Kazuhito Hagio <[email protected]> Acked-by: Petr Tesarik <[email protected]> --- makedumpfile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/makedumpfile.h +++ b/makedumpfile.h @@ -195,7 +195,7 @@ isAnon(unsigned long mapping) * 2. it has been verified that (1UL<<2) was never set, so it is * safe to mask that bit off even in old kernels. */ -#define SECTION_MAP_LAST_BIT (1UL<<3) +#define SECTION_MAP_LAST_BIT (1UL<<4) #define SECTION_MAP_MASK (~(SECTION_MAP_LAST_BIT-1)) #define NR_SECTION_ROOTS() divideup(num_section, SECTIONS_PER_ROOT()) #define SECTION_NR_TO_PFN(sec) ((sec) << PFN_SECTION_SHIFT())
