Applied: https://github.com/crash-utility/crash/commit/ebccb911c4a1aef7af6d72335531003fb6c9fb6d & https://github.com/crash-utility/crash/commit/d118315931634f32cd6ffb50e27e75b7a8ea489e
On Mon, Dec 8, 2025 at 3:12 PM Guanyou Chen <[email protected]> wrote: > > Hi tao, > > [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 > > [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 > > Thanks, > Guanyou > > > Tao Liu <[email protected]> 于2025年12月6日周六 03:24写道: >> >> Hi Guanyou, >> >> Just a reminder that please don't send the patches as the form of >> email attachments. Please send it via commands like: "git send-email >> --to=<...> HEAD~2", such that people can do inline commenting on your >> code. >> >> Other than that, the patch LGTM, so ack patch 1 & 2. >> >> Thanks, >> Tao Liu >> >> On Fri, Dec 5, 2025 at 7:02 PM Guanyou Chen <[email protected]> >> wrote: >> > >> > 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 >> >> >> >> >> >> -- 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
