From 110e65ba9d9d320ed21a55717616a01820da21e7 Mon Sep 17 00:00:00 2001
From: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
Date: Thu, 8 Jun 2023 19:47:25 -0300
Subject: [PATCH 319/327] Revert "mm/page_alloc: fix potential deadlock on
 zonelist_update_seqseqlock"

This reverts commit a992c387b41186ab968fd176ca26b432b05c53ec.

The support for deferred printing was removed in v5.10-rc1-rt1 by commit
9153e3c5cb0c9 ("printk: remove deferred printing") because:

    Since printing occurs either atomically or from the printing
    kthread, there is no need for any deferring or tracking possible
    recursion paths. Remove all printk context tracking.

Also, disabling interrupts in __build_all_zonelists() should produce warnings
once that code path is hit.

Fixes: a992c387b4118 ("mm/page_alloc: fix potential deadlock on zonelist_update_seq seqlock")
Signed-off-by: Luis Claudio R. Goncalves <lgoncalv@redhat.com>
---
 mm/page_alloc.c | 16 ----------------
 1 file changed, 16 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 60f773311e02..45541ed5996d 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6046,21 +6046,7 @@ static void __build_all_zonelists(void *data)
 	int nid;
 	int __maybe_unused cpu;
 	pg_data_t *self = data;
-	unsigned long flags;
 
-	/*
-	 * Explicitly disable this CPU's interrupts before taking seqlock
-	 * to prevent any IRQ handler from calling into the page allocator
-	 * (e.g. GFP_ATOMIC) that could hit zonelist_iter_begin and livelock.
-	 */
-	local_irq_save(flags);
-	/*
-	 * Explicitly disable this CPU's synchronous printk() before taking
-	 * seqlock to prevent any printk() from trying to hold port->lock, for
-	 * tty_insert_flip_string_and_push_buffer() on other CPU might be
-	 * calling kmalloc(GFP_ATOMIC | __GFP_NOWARN) with port->lock held.
-	 */
-	printk_deferred_enter();
 	write_seqlock(&zonelist_update_seq);
 
 #ifdef CONFIG_NUMA
@@ -6095,8 +6081,6 @@ static void __build_all_zonelists(void *data)
 	}
 
 	write_sequnlock(&zonelist_update_seq);
-	printk_deferred_exit();
-	local_irq_restore(flags);
 }
 
 static noinline void __init
-- 
2.49.0

