[PATCH makedumpfile 5/9] Move page checks into makedumpfile.h
Stephen Brennan
stephen.s.brennan at oracle.com
Mon Jul 13 17:45:38 PDT 2026
Most checks are already macros in makedumpfile.h, but some are simple
helper functions in makedumpfile.c. They are not accessible to
extensions as a result.
It's helpful to keep as much of this logic available to extensions as
possible, so that they do not need to re-implement more than necessary.
Move isHugetlb, isSlab, isOffline, and is_cache_page to the header.
Signed-off-by: Stephen Brennan <stephen.s.brennan at oracle.com>
---
makedumpfile.c | 57 --------------------------------------------------
makedumpfile.h | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+), 57 deletions(-)
diff --git a/makedumpfile.c b/makedumpfile.c
index cf6a38f..3da68fa 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -266,63 +266,6 @@ is_in_same_page(unsigned long vaddr1, unsigned long vaddr2)
return FALSE;
}
-/* For Linux 6.6 and later */
-#define IS_HUGETLB ((unsigned long)-1)
-
-static inline int
-isHugetlb(unsigned long dtor)
-{
- return (dtor == IS_HUGETLB)
- || ((NUMBER(HUGETLB_PAGE_DTOR) != NOT_FOUND_NUMBER)
- && (NUMBER(HUGETLB_PAGE_DTOR) == dtor))
- || ((SYMBOL(free_huge_page) != NOT_FOUND_SYMBOL)
- && (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) {
- if (_mapcount == (int)NUMBER(PAGE_SLAB_MAPCOUNT_VALUE))
- 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 (isSlab(flags, _mapcount))
- 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))
- return TRUE;
-
- /* PG_swapcache is valid only if:
- * a. PG_swapbacked bit is set, or
- * b. PG_swapbacked did not exist (kernels before 4.10-rc1).
- */
- if ((NUMBER(PG_swapbacked) == NOT_FOUND_NUMBER || isSwapBacked(flags))
- && isSwapCache(flags))
- return TRUE;
-
- return FALSE;
-}
-
static inline unsigned long
calculate_len_buf_out(long page_size)
{
diff --git a/makedumpfile.h b/makedumpfile.h
index 87f973d..3d64677 100644
--- a/makedumpfile.h
+++ b/makedumpfile.h
@@ -2644,6 +2644,63 @@ is_zero_page(unsigned char *buf, long page_size)
return TRUE;
}
+/* For Linux 6.6 and later */
+#define IS_HUGETLB ((unsigned long)-1)
+
+static inline int
+isHugetlb(unsigned long dtor)
+{
+ return (dtor == IS_HUGETLB)
+ || ((NUMBER(HUGETLB_PAGE_DTOR) != NOT_FOUND_NUMBER)
+ && (NUMBER(HUGETLB_PAGE_DTOR) == dtor))
+ || ((SYMBOL(free_huge_page) != NOT_FOUND_SYMBOL)
+ && (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) {
+ if (_mapcount == (int)NUMBER(PAGE_SLAB_MAPCOUNT_VALUE))
+ return TRUE;
+ }
+
+ return flags & (1UL << NUMBER(PG_slab));
+}
+
+static inline int
+isOffline(unsigned long flags, unsigned int _mapcount)
+{
+ if (NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE) == NOT_FOUND_NUMBER)
+ return FALSE;
+
+ if (isSlab(flags, _mapcount))
+ return FALSE;
+
+ if (_mapcount == (int)NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE))
+ return TRUE;
+
+ return FALSE;
+}
+
+static inline int
+is_cache_page(unsigned long flags)
+{
+ if (isLRU(flags))
+ return TRUE;
+
+ /* PG_swapcache is valid only if:
+ * a. PG_swapbacked bit is set, or
+ * b. PG_swapbacked did not exist (kernels before 4.10-rc1).
+ */
+ if ((NUMBER(PG_swapbacked) == NOT_FOUND_NUMBER || isSwapBacked(flags))
+ && isSwapCache(flags))
+ return TRUE;
+
+ return FALSE;
+}
+
void write_vmcoreinfo_data(void);
int set_bit_on_1st_bitmap(mdf_pfn_t pfn, struct cycle *cycle);
int clear_bit_on_1st_bitmap(mdf_pfn_t pfn, struct cycle *cycle);
--
2.47.3
More information about the kexec
mailing list