return 1;
 }
 
-static inline bool free_pages_prezeroed(bool poisoned)
+static inline bool free_pages_prezeroed(void)
 {
        return IS_ENABLED(CONFIG_PAGE_POISONING_ZERO) &&
-               page_poisoning_enabled() && poisoned;
+               page_poisoning_enabled();
 }
 
 #ifdef CONFIG_DEBUG_VM
                                                        unsigned int alloc_flags)
 {
        int i;
-       bool poisoned = true;
-
-       for (i = 0; i < (1 << order); i++) {
-               struct page *p = page + i;
-               if (poisoned)
-                       poisoned &= page_is_poisoned(p);
-       }
 
        post_alloc_hook(page, order, gfp_flags);
 
-       if (!free_pages_prezeroed(poisoned) && (gfp_flags & __GFP_ZERO))
+       if (!free_pages_prezeroed() && (gfp_flags & __GFP_ZERO))
                for (i = 0; i < (1 << order); i++)
                        clear_highpage(page + i);
 
 
 
 static struct page_ext_operations *page_ext_ops[] = {
        &debug_guardpage_ops,
-#ifdef CONFIG_PAGE_POISONING
-       &page_poisoning_ops,
-#endif
 #ifdef CONFIG_PAGE_OWNER
        &page_owner_ops,
 #endif
        struct page_ext *base;
 
        base = NODE_DATA(page_to_nid(page))->node_page_ext;
-#if defined(CONFIG_DEBUG_VM) || defined(CONFIG_PAGE_POISONING)
+#if defined(CONFIG_DEBUG_VM)
        /*
         * The sanity checks the page allocator does upon freeing a
         * page can reach here before the page_ext arrays are
         * allocated when feeding a range of pages to the allocator
         * for the first time during bootup or memory hotplug.
-        *
-        * This check is also necessary for ensuring page poisoning
-        * works as expected when enabled
         */
        if (unlikely(!base))
                return NULL;
 {
        unsigned long pfn = page_to_pfn(page);
        struct mem_section *section = __pfn_to_section(pfn);
-#if defined(CONFIG_DEBUG_VM) || defined(CONFIG_PAGE_POISONING)
+#if defined(CONFIG_DEBUG_VM)
        /*
         * The sanity checks the page allocator does upon freeing a
         * page can reach here before the page_ext arrays are
         * allocated when feeding a range of pages to the allocator
         * for the first time during bootup or memory hotplug.
-        *
-        * This check is also necessary for ensuring page poisoning
-        * works as expected when enabled
         */
        if (!section->page_ext)
                return NULL;
 
 #include <linux/poison.h>
 #include <linux/ratelimit.h>
 
-static bool __page_poisoning_enabled __read_mostly;
 static bool want_page_poisoning __read_mostly;
 
 static int early_page_poison_param(char *buf)
 early_param("page_poison", early_page_poison_param);
 
 bool page_poisoning_enabled(void)
-{
-       return __page_poisoning_enabled;
-}
-
-static bool need_page_poisoning(void)
-{
-       return want_page_poisoning;
-}
-
-static void init_page_poisoning(void)
 {
        /*
-        * page poisoning is debug page alloc for some arches. If either
-        * of those options are enabled, enable poisoning
+        * Assumes that debug_pagealloc_enabled is set before
+        * free_all_bootmem.
+        * Page poisoning is debug page alloc for some arches. If
+        * either of those options are enabled, enable poisoning.
         */
-       if (!IS_ENABLED(CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC)) {
-               if (!want_page_poisoning && !debug_pagealloc_enabled())
-                       return;
-       } else {
-               if (!want_page_poisoning)
-                       return;
-       }
-
-       __page_poisoning_enabled = true;
-}
-
-struct page_ext_operations page_poisoning_ops = {
-       .need = need_page_poisoning,
-       .init = init_page_poisoning,
-};
-
-static inline void set_page_poison(struct page *page)
-{
-       struct page_ext *page_ext;
-
-       page_ext = lookup_page_ext(page);
-       if (unlikely(!page_ext))
-               return;
-
-       __set_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
-}
-
-static inline void clear_page_poison(struct page *page)
-{
-       struct page_ext *page_ext;
-
-       page_ext = lookup_page_ext(page);
-       if (unlikely(!page_ext))
-               return;
-
-       __clear_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
-}
-
-bool page_is_poisoned(struct page *page)
-{
-       struct page_ext *page_ext;
-
-       page_ext = lookup_page_ext(page);
-       if (unlikely(!page_ext))
-               return false;
-
-       return test_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
+       return (want_page_poisoning ||
+               (!IS_ENABLED(CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC) &&
+               debug_pagealloc_enabled()));
 }
 
 static void poison_page(struct page *page)
 {
        void *addr = kmap_atomic(page);
 
-       set_page_poison(page);
        memset(addr, PAGE_POISON, PAGE_SIZE);
        kunmap_atomic(addr);
 }
 {
        void *addr;
 
-       if (!page_is_poisoned(page))
-               return;
-
        addr = kmap_atomic(page);
+       /*
+        * Page poisoning when enabled poisons each and every page
+        * that is freed to buddy. Thus no extra check is done to
+        * see if a page was posioned.
+        */
        check_poison_mem(addr, PAGE_SIZE);
-       clear_page_poison(page);
        kunmap_atomic(addr);
 }