bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order);
 
+#ifdef CONFIG_FAIL_PAGE_ALLOC
+bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order);
+#else
+static inline bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
+{
+       return false;
+}
+#endif /* CONFIG_FAIL_PAGE_ALLOC */
+
 int should_failslab(struct kmem_cache *s, gfp_t gfpflags);
 #ifdef CONFIG_FAILSLAB
 extern bool __should_failslab(struct kmem_cache *s, gfp_t gfpflags);
 
 obj-$(CONFIG_KFENCE) += kfence/
 obj-$(CONFIG_KMSAN)    += kmsan/
 obj-$(CONFIG_FAILSLAB) += failslab.o
+obj-$(CONFIG_FAIL_PAGE_ALLOC) += fail_page_alloc.o
 obj-$(CONFIG_MEMTEST)          += memtest.o
 obj-$(CONFIG_MIGRATION) += migrate.o
 obj-$(CONFIG_NUMA) += memory-tiers.o
 
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0
+#include <linux/fault-inject.h>
+#include <linux/mm.h>
+
+static struct {
+       struct fault_attr attr;
+
+       bool ignore_gfp_highmem;
+       bool ignore_gfp_reclaim;
+       u32 min_order;
+} fail_page_alloc = {
+       .attr = FAULT_ATTR_INITIALIZER,
+       .ignore_gfp_reclaim = true,
+       .ignore_gfp_highmem = true,
+       .min_order = 1,
+};
+
+static int __init setup_fail_page_alloc(char *str)
+{
+       return setup_fault_attr(&fail_page_alloc.attr, str);
+}
+__setup("fail_page_alloc=", setup_fail_page_alloc);
+
+bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
+{
+       int flags = 0;
+
+       if (order < fail_page_alloc.min_order)
+               return false;
+       if (gfp_mask & __GFP_NOFAIL)
+               return false;
+       if (fail_page_alloc.ignore_gfp_highmem && (gfp_mask & __GFP_HIGHMEM))
+               return false;
+       if (fail_page_alloc.ignore_gfp_reclaim &&
+                       (gfp_mask & __GFP_DIRECT_RECLAIM))
+               return false;
+
+       /* See comment in __should_failslab() */
+       if (gfp_mask & __GFP_NOWARN)
+               flags |= FAULT_NOWARN;
+
+       return should_fail_ex(&fail_page_alloc.attr, 1 << order, flags);
+}
+
+#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
+
+static int __init fail_page_alloc_debugfs(void)
+{
+       umode_t mode = S_IFREG | 0600;
+       struct dentry *dir;
+
+       dir = fault_create_debugfs_attr("fail_page_alloc", NULL,
+                                       &fail_page_alloc.attr);
+
+       debugfs_create_bool("ignore-gfp-wait", mode, dir,
+                           &fail_page_alloc.ignore_gfp_reclaim);
+       debugfs_create_bool("ignore-gfp-highmem", mode, dir,
+                           &fail_page_alloc.ignore_gfp_highmem);
+       debugfs_create_u32("min-order", mode, dir, &fail_page_alloc.min_order);
+
+       return 0;
+}
+
+late_initcall(fail_page_alloc_debugfs);
+
+#endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */
 
        return page;
 }
 
-#ifdef CONFIG_FAIL_PAGE_ALLOC
-
-static struct {
-       struct fault_attr attr;
-
-       bool ignore_gfp_highmem;
-       bool ignore_gfp_reclaim;
-       u32 min_order;
-} fail_page_alloc = {
-       .attr = FAULT_ATTR_INITIALIZER,
-       .ignore_gfp_reclaim = true,
-       .ignore_gfp_highmem = true,
-       .min_order = 1,
-};
-
-static int __init setup_fail_page_alloc(char *str)
-{
-       return setup_fault_attr(&fail_page_alloc.attr, str);
-}
-__setup("fail_page_alloc=", setup_fail_page_alloc);
-
-static bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
-{
-       int flags = 0;
-
-       if (order < fail_page_alloc.min_order)
-               return false;
-       if (gfp_mask & __GFP_NOFAIL)
-               return false;
-       if (fail_page_alloc.ignore_gfp_highmem && (gfp_mask & __GFP_HIGHMEM))
-               return false;
-       if (fail_page_alloc.ignore_gfp_reclaim &&
-                       (gfp_mask & __GFP_DIRECT_RECLAIM))
-               return false;
-
-       /* See comment in __should_failslab() */
-       if (gfp_mask & __GFP_NOWARN)
-               flags |= FAULT_NOWARN;
-
-       return should_fail_ex(&fail_page_alloc.attr, 1 << order, flags);
-}
-
-#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
-
-static int __init fail_page_alloc_debugfs(void)
-{
-       umode_t mode = S_IFREG | 0600;
-       struct dentry *dir;
-
-       dir = fault_create_debugfs_attr("fail_page_alloc", NULL,
-                                       &fail_page_alloc.attr);
-
-       debugfs_create_bool("ignore-gfp-wait", mode, dir,
-                           &fail_page_alloc.ignore_gfp_reclaim);
-       debugfs_create_bool("ignore-gfp-highmem", mode, dir,
-                           &fail_page_alloc.ignore_gfp_highmem);
-       debugfs_create_u32("min-order", mode, dir, &fail_page_alloc.min_order);
-
-       return 0;
-}
-
-late_initcall(fail_page_alloc_debugfs);
-
-#endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */
-
-#else /* CONFIG_FAIL_PAGE_ALLOC */
-
-static inline bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
-{
-       return false;
-}
-
-#endif /* CONFIG_FAIL_PAGE_ALLOC */
-
 noinline bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
 {
        return __should_fail_alloc_page(gfp_mask, order);