v5.10 and less needs a fix up for __build_all_zonelists()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

upstream landed commit
	a2ebb51575828 ("mm/page_alloc: use write_seqlock_irqsave() instead write_seqlock() + local_irq_save().")

a while ago after Luis pointed me at the actual issue. The v6.1-RT and
v5.15-RT received the proper backport via -stable and are good.
v5.10-RT has the commit
    7bdd3bd5143a4 ("Revert "mm/page_alloc: fix potential deadlock on zonelist_update_seqseqlock"")

which I may have suggested at the time but requires now something
proper. In reality it may not matter because nobody is using
memory-hotplug but is should be fixed properly. Also it (as in v5.10)
affects non-RT users. In less than v5.10 it affects possible RT users.

The fix for 5.10-RT is just the snippet which is the resolution if the
initial commit would be backported to the v5.10 which did not happen.
Everything less than v5.10 should apply commit a2ebb51575828 mentioned
earlier.

Sebastian

-----8<---

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 3760a06932a6e..f6b3a46ac87d5 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6043,8 +6043,9 @@ static void __build_all_zonelists(void *data)
 	int nid;
 	int __maybe_unused cpu;
 	pg_data_t *self = data;
+	unsigned long flags;
 
-	write_seqlock(&zonelist_update_seq);
+	write_seqlock_irqsave(&zonelist_update_seq, flags);
 
 #ifdef CONFIG_NUMA
 	memset(node_load, 0, sizeof(node_load));
@@ -6077,7 +6078,7 @@ static void __build_all_zonelists(void *data)
 #endif
 	}
 
-	write_sequnlock(&zonelist_update_seq);
+	write_sequnlock_irqrestore(&zonelist_update_seq, flags);
 }
 
 static noinline void __init



[Index of Archives]     [Linux USB Development]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux