Hi Tao attached split 2 patches.
Thanks Guanyou Tao Liu <[email protected]> 于2025年12月5日周五 11:31写道: > Hi Guanyou, > > On Fri, Dec 5, 2025 at 3:03 PM Guanyou Chen <[email protected]> > wrote: > > > > Hi Tao, > > > > Check swap_file_is_file from crash commit 3452fe802bf94 > > ("Fix "kmem -i" and "swap" commands on Linux 6.10-rc1 and later kernels") > > > > Thanks, > > Guanyou > > > > Tao Liu <[email protected]> 于2025年12月5日周五 06:40写道: > >> > >> Hi Guanyou, > >> > >> On Thu, Dec 4, 2025 at 11:33 PM Guanyou Chen <[email protected]> > wrote: > >> > > >> > Hi Lianbo > >> > > >> > Kernel commit 55564814a838 ("arm64/mm: Move PTE_PRESENT_INVALID > >> > to overlay PTE_NG"), which is contained in Linux 6.10 and > >> > later kernels, changed the format of swap entries on arm64. > >> > Without the patch, the "vtop" command cannot display swap information > >> > > >> > before: > >> > crash> vtop 2000000 > >> > VIRTUAL PHYSICAL > >> > 2000000 (not mapped) > >> > > >> > PAGE DIRECTORY: ffffff8106356000 > >> > PGD: ffffff8106356000 => 800000186355003 > >> > PMD: ffffff8106355080 => 8000001476f5003 > >> > PTE: ffffff80c76f5000 => 101a62004 > >> > > >> > PTE OFFSET: 1055330 > >> > vtop: cannot determine swap location > >> > > >> > without the patch: > >> > crash> vtop 2000000 > >> > VIRTUAL PHYSICAL > >> > 2000000 (not mapped) > >> > > >> > PAGE DIRECTORY: ffffff8106356000 > >> > PGD: ffffff8106356000 => 800000186355003 > >> > PMD: ffffff8106355080 => 8000001476f5003 > >> > PTE: ffffff80c76f5000 => 101a62004 > >> > > >> > PTE SWAP OFFSET > >> > 101a62004 /first_stage_ramdisk/dev/block/zram0 1055330 > >> > > >> > VMA START END FLAGS FILE > >> > ffffff81a06e8b00 2000000 22000000 100073 > >> > > >> > SWAP: /first_stage_ramdisk/dev/block/zram0 OFFSET: 1055330 > >> > > >> > Link: > https://lore.kernel.org/r/[email protected] > >> > Signed-off-by: Guanyou.Chen <[email protected]> > >> > --- > >> > arm64.c | 11 ++++++++++- > >> > memory.c | 5 ++++- > >> > 2 files changed, 14 insertions(+), 2 deletions(-) > >> > > >> > diff --git a/arm64.c b/arm64.c > >> > index 1723595..c125655 100644 > >> > --- a/arm64.c > >> > +++ b/arm64.c > >> > @@ -712,7 +712,16 @@ arm64_init(int when) > >> > } > >> > } > >> > > >> > - if (THIS_KERNEL_VERSION >= LINUX(5,19,0)) { > >> > + if (THIS_KERNEL_VERSION >= LINUX(6,10,0)) { > >> > + ms->__SWP_TYPE_BITS = 5; > >> > + ms->__SWP_TYPE_SHIFT = 6; > >> > + ms->__SWP_TYPE_MASK = ((1UL << ms->__SWP_TYPE_BITS) - 1); > >> > + ms->__SWP_OFFSET_SHIFT = 12; > >> > + ms->__SWP_OFFSET_BITS = 50; > >> > + ms->__SWP_OFFSET_MASK = ((1UL << ms->__SWP_OFFSET_BITS) - > 1); > >> > + ms->PTE_PROT_NONE = 0; /* unused */ > >> > + ms->PTE_FILE = 0; /* unused */ > >> > + } else if (THIS_KERNEL_VERSION >= LINUX(5,19,0)) { > > Sorry maybe I didn't make myself clear. What I mean is, the kernel > link, aka > https://lore.kernel.org/r/[email protected], > updated the information as you have addressed above, and this part is > OK to me. > > >> > ms->__SWP_TYPE_BITS = 5; > >> > ms->__SWP_TYPE_SHIFT = 3; > >> > ms->__SWP_TYPE_MASK = ((1UL << ms->__SWP_TYPE_BITS) - 1); > >> > diff --git a/memory.c b/memory.c > >> > index 400d31a..cbc8d2f 100644 > >> > --- a/memory.c > >> > +++ b/memory.c > >> > @@ -16415,6 +16415,8 @@ get_swapdev(ulong type, char *buf) > >> > ulong vfsmnt; > >> > char *devname; > >> > char buf1[BUFSIZE]; > >> > + int swap_file_is_file = > >> > + STREQ(MEMBER_TYPE_NAME("swap_info_struct", "swap_file"), > "file"); > >> > > >> > swap_info_init(); > >> > > >> > @@ -16474,7 +16476,8 @@ get_swapdev(ulong type, char *buf) > >> > vfsmnt = ULONG(vt->swap_info_struct + > >> > OFFSET(swap_info_struct_swap_vfsmnt)); > >> > get_pathname(swap_file, buf, BUFSIZE, 1, vfsmnt); > >> > - } else if (VALID_MEMBER > (swap_info_struct_old_block_size)) { > >> > + } else if (VALID_MEMBER > (swap_info_struct_old_block_size) > >> > + || swap_file_is_file) { > > But the link nor your commit log doesn't provide information for the > above swap_file_is_file code change. Like why do you need to add the > "|| swap_file_is_file" check here? Does it have any relations with the > previous __SWP_TYPE_XXX value updating? What I'm trying to figure out > is whether your __SWP_TYPE_XXX updating and swap_file_is_file > checking, are independent of each other and should go into 2 seperated > patches. > > >> > >> Any reason for the extra swap_file_is_file check? From the kernel > >> patch link you posted, only the __SWP_TYPE_XXX changes, which is > >> presented in (THIS_KERNEL_VERSION >= LINUX(6,10,0), but no info > >> related to swap_file_is_file check? > >> > >> Thanks, > >> Tao Liu > >> > >> > >> > devname = vfsmount_devname(file_to_vfsmnt(swap_file), > >> > buf1, BUFSIZE); > >> > get_pathname(file_to_dentry(swap_file), > >> > -- > >> > 2.34.1 > >> > > >> > Thanks. > >> > Guanyou > >> > >
From dd7572dabced347bfcd91249a25a262639fc60ba Mon Sep 17 00:00:00 2001 From: "Guanyou.Chen" <[email protected]> Date: Fri, 5 Dec 2025 13:56:38 +0800 Subject: [PATCH 2/2] [2/2]arm64: Fix "vtop" command to display swap information on Linux 6.10 and later Kernel commit 798cb7f9aec3 ("swapon(2)/swapoff(2): don't bother with block size") removed swap_info_struct.old_block_size member at Linux 6.10-rc1. The crash-utility has used this to determine whether a swap is a partition or file and to determine the way to get the swap path. before: crash> vtop 2000000 VIRTUAL PHYSICAL 2000000 (not mapped) PAGE DIRECTORY: ffffff8106356000 PGD: ffffff8106356000 => 800000186355003 PMD: ffffff8106355080 => 8000001476f5003 PTE: ffffff80c76f5000 => 101a62004 PTE OFFSET: 1055330 vtop: cannot determine swap location after: crash> vtop 2000000 VIRTUAL PHYSICAL 2000000 (not mapped) PAGE DIRECTORY: ffffff8106356000 PGD: ffffff8106356000 => 800000186355003 PMD: ffffff8106355080 => 8000001476f5003 PTE: ffffff80c76f5000 => 101a62004 PTE SWAP OFFSET 101a62004 /first_stage_ramdisk/dev/block/zram0 1055330 VMA START END FLAGS FILE ffffff81a06e8b00 2000000 22000000 100073 SWAP: /first_stage_ramdisk/dev/block/zram0 OFFSET: 1055330 Signed-off-by: Guanyou.Chen <[email protected]> --- memory.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/memory.c b/memory.c index 400d31a..cbc8d2f 100644 --- a/memory.c +++ b/memory.c @@ -16415,6 +16415,8 @@ get_swapdev(ulong type, char *buf) ulong vfsmnt; char *devname; char buf1[BUFSIZE]; + int swap_file_is_file = + STREQ(MEMBER_TYPE_NAME("swap_info_struct", "swap_file"), "file"); swap_info_init(); @@ -16474,7 +16476,8 @@ get_swapdev(ulong type, char *buf) vfsmnt = ULONG(vt->swap_info_struct + OFFSET(swap_info_struct_swap_vfsmnt)); get_pathname(swap_file, buf, BUFSIZE, 1, vfsmnt); - } else if (VALID_MEMBER (swap_info_struct_old_block_size)) { + } else if (VALID_MEMBER (swap_info_struct_old_block_size) + || swap_file_is_file) { devname = vfsmount_devname(file_to_vfsmnt(swap_file), buf1, BUFSIZE); get_pathname(file_to_dentry(swap_file), -- 2.34.1
From 129500be327786b8fc6cad558922112b418fc92b Mon Sep 17 00:00:00 2001 From: "Guanyou.Chen" <[email protected]> Date: Fri, 5 Dec 2025 13:55:30 +0800 Subject: [PATCH 1/2] [1/2]arm64: Fix "vtop" command to display swap information on Linux 6.10 and later Kernel commit 55564814a838 ("arm64/mm: Move PTE_PRESENT_INVALID to overlay PTE_NG"), which is contained in Linux 6.10 and later kernels, changed the format of swap entries on arm64. Without the patch, the "vtop" command cannot display swap information Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Guanyou.Chen <[email protected]> --- arm64.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/arm64.c b/arm64.c index 1723595..c125655 100644 --- a/arm64.c +++ b/arm64.c @@ -712,7 +712,16 @@ arm64_init(int when) } } - if (THIS_KERNEL_VERSION >= LINUX(5,19,0)) { + if (THIS_KERNEL_VERSION >= LINUX(6,10,0)) { + ms->__SWP_TYPE_BITS = 5; + ms->__SWP_TYPE_SHIFT = 6; + ms->__SWP_TYPE_MASK = ((1UL << ms->__SWP_TYPE_BITS) - 1); + ms->__SWP_OFFSET_SHIFT = 12; + ms->__SWP_OFFSET_BITS = 50; + ms->__SWP_OFFSET_MASK = ((1UL << ms->__SWP_OFFSET_BITS) - 1); + ms->PTE_PROT_NONE = 0; /* unused */ + ms->PTE_FILE = 0; /* unused */ + } else if (THIS_KERNEL_VERSION >= LINUX(5,19,0)) { ms->__SWP_TYPE_BITS = 5; ms->__SWP_TYPE_SHIFT = 3; ms->__SWP_TYPE_MASK = ((1UL << ms->__SWP_TYPE_BITS) - 1); -- 2.34.1
-- Crash-utility mailing list -- [email protected] To unsubscribe send an email to [email protected] https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/ Contribution Guidelines: https://github.com/crash-utility/crash/wiki
