fixes to build the package w/ gcc-15 #1
@@ -1,102 +0,0 @@
|
||||
From: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||
Date: Thu, 30 May 2024 16:59:02 +0900
|
||||
Subject: [PATCH] Fix failure of hugetlb pages exclusion on Linux 6.9 and later
|
||||
Git-repo: https://github.com/makedumpfile/makedumpfile
|
||||
Git-commit: 985e575253f1c2de8d6876cfe685c68a24ee06e1
|
||||
Patch-mainline: 1.7.6
|
||||
References: bsc#1228388
|
||||
|
||||
* Required for kernel 6.9
|
||||
|
||||
Kernel commit d99e3140a4d3 ("mm: turn folio_test_hugetlb into a
|
||||
PageType") moved the PG_hugetlb flag from folio._flags_1 into
|
||||
page._mapcount and introduced NUMBER(PAGE_HUGETLB_MAPCOUNT_VALUE) entry
|
||||
into vmcoreinfo.
|
||||
|
||||
Without the patch, "makedumpfile -d 8" cannot exclude hugetlb pages.
|
||||
|
||||
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||
Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
|
||||
---
|
||||
makedumpfile.c | 22 ++++++++++++++++++++--
|
||||
makedumpfile.h | 3 +++
|
||||
2 files changed, 23 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/makedumpfile.c b/makedumpfile.c
|
||||
index d7f1dd41d2ca..437ad916f816 100644
|
||||
--- a/makedumpfile.c
|
||||
+++ b/makedumpfile.c
|
||||
@@ -2975,6 +2975,7 @@ read_vmcoreinfo(void)
|
||||
READ_SRCFILE("pud_t", pud_t);
|
||||
|
||||
READ_NUMBER("PAGE_BUDDY_MAPCOUNT_VALUE", PAGE_BUDDY_MAPCOUNT_VALUE);
|
||||
+ READ_NUMBER("PAGE_HUGETLB_MAPCOUNT_VALUE", PAGE_HUGETLB_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);
|
||||
@@ -6510,6 +6511,9 @@ __exclude_unnecessary_pages(unsigned long mem_map,
|
||||
_count = UINT(pcache + OFFSET(page._refcount));
|
||||
mapping = ULONG(pcache + OFFSET(page.mapping));
|
||||
|
||||
+ if (OFFSET(page._mapcount) != NOT_FOUND_STRUCTURE)
|
||||
+ _mapcount = UINT(pcache + OFFSET(page._mapcount));
|
||||
+
|
||||
compound_order = 0;
|
||||
compound_dtor = 0;
|
||||
/*
|
||||
@@ -6520,6 +6524,22 @@ __exclude_unnecessary_pages(unsigned long mem_map,
|
||||
if ((index_pg < PGMM_CACHED - 1) && isCompoundHead(flags)) {
|
||||
unsigned char *addr = pcache + SIZE(page);
|
||||
|
||||
+ /*
|
||||
+ * Linux 6.9 and later kernels use _mapcount value for hugetlb pages.
|
||||
+ * See kernel commit d99e3140a4d3.
|
||||
+ */
|
||||
+ if (NUMBER(PAGE_HUGETLB_MAPCOUNT_VALUE) != NOT_FOUND_NUMBER) {
|
||||
+ unsigned long _flags_1 = ULONG(addr + OFFSET(page.flags));
|
||||
+ unsigned int PG_hugetlb = ~NUMBER(PAGE_HUGETLB_MAPCOUNT_VALUE);
|
||||
+
|
||||
+ compound_order = _flags_1 & 0xff;
|
||||
+
|
||||
+ if ((_mapcount & (PAGE_TYPE_BASE | PG_hugetlb)) == PAGE_TYPE_BASE)
|
||||
+ compound_dtor = IS_HUGETLB;
|
||||
+
|
||||
+ goto check_order;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Linux 6.6 and later. Kernels that have PG_hugetlb should also
|
||||
* have the compound order in the low byte of folio._flags_1.
|
||||
@@ -6564,8 +6584,6 @@ check_order:
|
||||
if (OFFSET(page.compound_head) != NOT_FOUND_STRUCTURE)
|
||||
compound_head = ULONG(pcache + OFFSET(page.compound_head));
|
||||
|
||||
- if (OFFSET(page._mapcount) != NOT_FOUND_STRUCTURE)
|
||||
- _mapcount = UINT(pcache + OFFSET(page._mapcount));
|
||||
if (OFFSET(page.private) != NOT_FOUND_STRUCTURE)
|
||||
private = ULONG(pcache + OFFSET(page.private));
|
||||
|
||||
diff --git a/makedumpfile.h b/makedumpfile.h
|
||||
index 75b66ceaba21..f08c49fc73be 100644
|
||||
--- a/makedumpfile.h
|
||||
+++ b/makedumpfile.h
|
||||
@@ -165,6 +165,8 @@ test_bit(int nr, unsigned long addr)
|
||||
#define isAnon(mapping, flags) (((unsigned long)mapping & PAGE_MAPPING_ANON) != 0 \
|
||||
&& !isSlab(flags))
|
||||
|
||||
+#define PAGE_TYPE_BASE (0xf0000000)
|
||||
+
|
||||
#define PTOB(X) (((unsigned long long)(X)) << PAGESHIFT())
|
||||
#define BTOP(X) (((unsigned long long)(X)) >> PAGESHIFT())
|
||||
|
||||
@@ -2255,6 +2257,7 @@ struct number_table {
|
||||
long PG_hugetlb;
|
||||
|
||||
long PAGE_BUDDY_MAPCOUNT_VALUE;
|
||||
+ long PAGE_HUGETLB_MAPCOUNT_VALUE;
|
||||
long PAGE_OFFLINE_MAPCOUNT_VALUE;
|
||||
long SECTION_SIZE_BITS;
|
||||
long MAX_PHYSMEM_BITS;
|
||||
--
|
||||
2.45.2
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
From: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||
Date: Fri, 7 Jun 2024 15:34:05 +0900
|
||||
Subject: [PATCH] Fix wrong exclusion of Slab pages on Linux 6.10-rc1 and later
|
||||
Git-repo: https://github.com/makedumpfile/makedumpfile
|
||||
Git-commit: bad2a7c4fa75d37a41578441468584963028bdda
|
||||
Patch-mainline: 1.7.6
|
||||
References: bsc#1228388
|
||||
|
||||
* Required for kernel 6.10
|
||||
|
||||
Kernel commit 46df8e73a4a3 ("mm: free up PG_slab") moved the PG_slab
|
||||
flag from page.flags into page._mapcount (slab.__page_type), and
|
||||
introduced NUMBER(PAGE_SLAB_MAPCOUNT_VALUE) entry into vmcoreinfo.
|
||||
|
||||
Without the patch, "makedumpfile -d 8" option wrongly excludes Slab
|
||||
pages and crash cannot open the dumpfile with an error like this:
|
||||
|
||||
$ crash --kaslr auto vmlinux dumpfile
|
||||
...
|
||||
please wait... (gathering task table data)
|
||||
crash: page excluded: kernel virtual address: ffff909980440270 type: "xa_node.slots[off]"
|
||||
|
||||
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||
Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
|
||||
---
|
||||
makedumpfile.c | 24 +++++++++++++++++++-----
|
||||
makedumpfile.h | 6 +++---
|
||||
2 files changed, 22 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/makedumpfile.c b/makedumpfile.c
|
||||
index 437ad916f816..5b347126db76 100644
|
||||
--- a/makedumpfile.c
|
||||
+++ b/makedumpfile.c
|
||||
@@ -275,13 +275,26 @@ isHugetlb(unsigned long dtor)
|
||||
&& (SYMBOL(free_huge_page) == dtor));
|
||||
}
|
||||
|
||||
+static inline int
|
||||
+isSlab(unsigned long flags, unsigned int _mapcount)
|
||||
+{
|
||||
+ /* Linux 6.10 and later */
|
||||
+ if (NUMBER(PAGE_SLAB_MAPCOUNT_VALUE) != NOT_FOUND_NUMBER) {
|
||||
+ unsigned int PG_slab = ~NUMBER(PAGE_SLAB_MAPCOUNT_VALUE);
|
||||
+ if ((_mapcount & (PAGE_TYPE_BASE | PG_slab)) == PAGE_TYPE_BASE)
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
+ return flags & (1UL << NUMBER(PG_slab));
|
||||
+}
|
||||
+
|
||||
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)))
|
||||
+ if (isSlab(flags, _mapcount))
|
||||
return FALSE;
|
||||
|
||||
if (_mapcount == (int)NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE))
|
||||
@@ -2977,6 +2990,7 @@ read_vmcoreinfo(void)
|
||||
READ_NUMBER("PAGE_BUDDY_MAPCOUNT_VALUE", PAGE_BUDDY_MAPCOUNT_VALUE);
|
||||
READ_NUMBER("PAGE_HUGETLB_MAPCOUNT_VALUE", PAGE_HUGETLB_MAPCOUNT_VALUE);
|
||||
READ_NUMBER("PAGE_OFFLINE_MAPCOUNT_VALUE", PAGE_OFFLINE_MAPCOUNT_VALUE);
|
||||
+ READ_NUMBER("PAGE_SLAB_MAPCOUNT_VALUE", PAGE_SLAB_MAPCOUNT_VALUE);
|
||||
READ_NUMBER("phys_base", phys_base);
|
||||
READ_NUMBER("KERNEL_IMAGE_SIZE", KERNEL_IMAGE_SIZE);
|
||||
|
||||
@@ -6043,7 +6057,7 @@ static int
|
||||
page_is_buddy_v3(unsigned long flags, unsigned int _mapcount,
|
||||
unsigned long private, unsigned int _count)
|
||||
{
|
||||
- if (flags & (1UL << NUMBER(PG_slab)))
|
||||
+ if (isSlab(flags, _mapcount))
|
||||
return FALSE;
|
||||
|
||||
if (_mapcount == (int)NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE))
|
||||
@@ -6618,7 +6632,7 @@ check_order:
|
||||
*/
|
||||
else if ((info->dump_level & DL_EXCLUDE_CACHE)
|
||||
&& is_cache_page(flags)
|
||||
- && !isPrivate(flags) && !isAnon(mapping, flags)) {
|
||||
+ && !isPrivate(flags) && !isAnon(mapping, flags, _mapcount)) {
|
||||
pfn_counter = &pfn_cache;
|
||||
}
|
||||
/*
|
||||
@@ -6626,7 +6640,7 @@ check_order:
|
||||
*/
|
||||
else if ((info->dump_level & DL_EXCLUDE_CACHE_PRI)
|
||||
&& is_cache_page(flags)
|
||||
- && !isAnon(mapping, flags)) {
|
||||
+ && !isAnon(mapping, flags, _mapcount)) {
|
||||
if (isPrivate(flags))
|
||||
pfn_counter = &pfn_cache_private;
|
||||
else
|
||||
@@ -6638,7 +6652,7 @@ check_order:
|
||||
* - hugetlbfs pages
|
||||
*/
|
||||
else if ((info->dump_level & DL_EXCLUDE_USER_DATA)
|
||||
- && (isAnon(mapping, flags) || isHugetlb(compound_dtor))) {
|
||||
+ && (isAnon(mapping, flags, _mapcount) || isHugetlb(compound_dtor))) {
|
||||
pfn_counter = &pfn_user;
|
||||
}
|
||||
/*
|
||||
diff --git a/makedumpfile.h b/makedumpfile.h
|
||||
index f08c49fc73be..6b43a8b44f93 100644
|
||||
--- a/makedumpfile.h
|
||||
+++ b/makedumpfile.h
|
||||
@@ -161,9 +161,8 @@ test_bit(int nr, unsigned long addr)
|
||||
#define isSwapBacked(flags) test_bit(NUMBER(PG_swapbacked), flags)
|
||||
#define isHWPOISON(flags) (test_bit(NUMBER(PG_hwpoison), flags) \
|
||||
&& (NUMBER(PG_hwpoison) != NOT_FOUND_NUMBER))
|
||||
-#define isSlab(flags) test_bit(NUMBER(PG_slab), flags)
|
||||
-#define isAnon(mapping, flags) (((unsigned long)mapping & PAGE_MAPPING_ANON) != 0 \
|
||||
- && !isSlab(flags))
|
||||
+#define isAnon(mapping, flags, _mapcount) \
|
||||
+ (((unsigned long)mapping & PAGE_MAPPING_ANON) != 0 && !isSlab(flags, _mapcount))
|
||||
|
||||
#define PAGE_TYPE_BASE (0xf0000000)
|
||||
|
||||
@@ -2259,6 +2258,7 @@ struct number_table {
|
||||
long PAGE_BUDDY_MAPCOUNT_VALUE;
|
||||
long PAGE_HUGETLB_MAPCOUNT_VALUE;
|
||||
long PAGE_OFFLINE_MAPCOUNT_VALUE;
|
||||
+ long PAGE_SLAB_MAPCOUNT_VALUE;
|
||||
long SECTION_SIZE_BITS;
|
||||
long MAX_PHYSMEM_BITS;
|
||||
long HUGETLB_PAGE_DTOR;
|
||||
--
|
||||
2.45.2
|
||||
|
||||
Binary file not shown.
BIN
eppic-63c2a2072464d774097a1a6cc1d2e98290f89c49.tar.gz
LFS
Normal file
BIN
eppic-63c2a2072464d774097a1a6cc1d2e98290f89c49.tar.gz
LFS
Normal file
Binary file not shown.
@@ -1,42 +0,0 @@
|
||||
From: Jiri Bohac <jbohac@suse.cz>
|
||||
Subject: make reserve_diskspace do nothing for flattened format
|
||||
Git-commit: 0bcf67df2114ee932af7e0af3ccafa0b349e90c1
|
||||
References: bsc#1226183
|
||||
Acked-by: Jiri Bohac <jbohac@suse.cz>
|
||||
|
||||
reserve_diskspace() is called by write_elf_header() to make sure there is
|
||||
always space to write the program header, even if writing other data fails
|
||||
because of ENOSPC.
|
||||
|
||||
This is harmful when writing the flattened format to STDOUT for two reasons:
|
||||
|
||||
First, it actually wastes disk space, because first the block of zeroes is sent
|
||||
to STDOUT by reserve_diskspace() and then the actual program header is sent,
|
||||
meant to overwrite the zeroes when the flattened format is rearranged.
|
||||
|
||||
Second, the algorithm used to read flattened format directly by the crash
|
||||
program does not cope with the flattened file containing two chunks meant for
|
||||
the same offset. It uses a binary search on a sorted array of flat_data headers
|
||||
to find the data in the flat file. It may return the zeroed chunk written by
|
||||
reserve_diskspace() near the beginning of the file instead of the actual ELF
|
||||
header located near the end of the flattened file.
|
||||
|
||||
Fixes: e39216fce9f73759509ec158e39c289e6c211125 ("Make the incomplete dumpfile generated by ENOSPC error analyzable.")
|
||||
|
||||
diff --git a/makedumpfile.c b/makedumpfile.c
|
||||
index cadc596..9624c3f 100644
|
||||
--- a/makedumpfile.c
|
||||
+++ b/makedumpfile.c
|
||||
@@ -5206,6 +5206,9 @@ reserve_diskspace(int fd, off_t start_offset, off_t end_offset, char *file_name)
|
||||
|
||||
int ret = FALSE;
|
||||
|
||||
+ if (info->flag_flatten)
|
||||
+ return TRUE;
|
||||
+
|
||||
assert(start_offset < end_offset);
|
||||
buf_size = end_offset - start_offset;
|
||||
|
||||
--
|
||||
2.45.2
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0c53f1e5e11e75e4896197df795bee63b3d46b8821fbc3368f7a240861b543b5
|
||||
size 210893
|
||||
43
makedumpfile-gcc15.patch
Normal file
43
makedumpfile-gcc15.patch
Normal file
@@ -0,0 +1,43 @@
|
||||
|
||||
github.com/makedumpfile/makedumpfile/commit/73e62a0
|
||||
|
||||
|
||||
From 73e62a08022bf8e5edad250f8c1452f0be3771a3 Mon Sep 17 00:00:00 2001
|
||||
From: Coiby Xu <coxu@redhat.com>
|
||||
Date: Thu, 23 Jan 2025 17:47:10 +0800
|
||||
Subject: [PATCH] [PATCH] fix gcc-15 compiling error: too many arguments to
|
||||
function eppic_init
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2340813
|
||||
|
||||
When building makekdumpfile against gcc-15, the following error is
|
||||
shown,
|
||||
|
||||
erase_info.c: In function ‘process_eppic_file’:
|
||||
erase_info.c:2226:13: error: too many arguments to function ‘eppic_init’; expected 0, have 1
|
||||
2226 | if (eppic_init(&eppic_cb)) {
|
||||
| ^~~~~~~~~~ ~~~~~~~~~
|
||||
make: *** [Makefile:109: erase_info.o] Error 1
|
||||
|
||||
Signed-off-by: Coiby Xu <coxu@redhat.com>
|
||||
---
|
||||
erase_info.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/erase_info.c b/erase_info.c
|
||||
index cbe1681..af6bfae 100644
|
||||
--- a/erase_info.c
|
||||
+++ b/erase_info.c
|
||||
@@ -2192,7 +2192,7 @@ process_eppic_file(char *name_config)
|
||||
{
|
||||
void *handle;
|
||||
void (*eppic_load)(char *), (*eppic_unload)(char *);
|
||||
- int (*eppic_init)();
|
||||
+ int (*eppic_init)(struct call_back *);
|
||||
|
||||
/*
|
||||
* Dynamically load the eppic_makedumpfile.so library.
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
-------------------------------------------------------------------
|
||||
Sat Apr 12 16:08:52 UTC 2025 - Friedrich Haubensak <hsk17@mail.de>
|
||||
|
||||
- to fix gcc-15 compile time errors:
|
||||
* add makedumpfile-gcc15.patch from upstream
|
||||
* update eppic_commit, which adds syntax fixes for gcc-15
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Feb 27 10:09:29 UTC 2025 - Petr Tesařík <ptesarik@suse.com>
|
||||
|
||||
- Update to 1.7.5:
|
||||
- Update to 1.7.6:
|
||||
* Support for kernels up to v6.11 (x86_64)
|
||||
- Drop upstreamed patches:
|
||||
* 0001-PATCH-Fix-failure-of-hugetlb-pages-exclusion-on-Linu.patch
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
%define build_eppic 1
|
||||
%define eppic_commit 21808c78596d6d80c67eeaa08a618570ae0d886d
|
||||
%define eppic_commit 63c2a2072464d774097a1a6cc1d2e98290f89c49
|
||||
|
||||
%if 0%{!?have_zstd:1}
|
||||
%if 0%{?sle_version} >= 150200 || 0%{?suse_version} > 1500
|
||||
@@ -41,6 +41,7 @@ Patch0: %{name}-override-libtinfo.patch
|
||||
Patch1: %{name}-ppc64-VA-range-SUSE.patch
|
||||
Patch2: %{name}-PN_XNUM.patch
|
||||
Patch3: %{name}-fix-detection-of-typed-compound-pages-Linux-6.12.patch
|
||||
Patch4: makedumpfile-gcc15.patch
|
||||
BuildRequires: libbz2-devel
|
||||
BuildRequires: libdw-devel
|
||||
BuildRequires: libelf-devel
|
||||
|
||||
Reference in New Issue
Block a user