+++ /dev/null
-From: Peter Zijlstra <a.p.zijlstra@chello.nl>
-Subject: mm: serialize access to min_free_kbytes
-Patch-mainline: No
-References: FATE#303834
-
-There is a small race between the procfs caller and the memory hotplug caller
-of setup_per_zone_pages_min(). Not a big deal, but the next patch will add yet
-another caller. Time to close the gap.
-
-Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
-Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi>
-Acked-by: Neil Brown <neilb@suse.de>
-Acked-by: Suresh Jayaraman <sjayaraman@suse.de>
-
----
- mm/page_alloc.c | 16 +++++++++++++---
- 1 file changed, 13 insertions(+), 3 deletions(-)
-
---- a/mm/page_alloc.c
-+++ b/mm/page_alloc.c
-@@ -120,6 +120,7 @@ static char * const zone_names[MAX_NR_ZO
- "Movable",
- };
-
-+static DEFINE_SPINLOCK(min_free_lock);
- int min_free_kbytes = 1024;
-
- unsigned long __meminitdata nr_kernel_pages;
-@@ -4265,12 +4266,12 @@ static void setup_per_zone_lowmem_reserv
- }
-
- /**
-- * setup_per_zone_pages_min - called when min_free_kbytes changes.
-+ * __setup_per_zone_pages_min - called when min_free_kbytes changes.
- *
- * Ensures that the pages_{min,low,high} values for each zone are set correctly
- * with respect to min_free_kbytes.
- */
--void setup_per_zone_pages_min(void)
-+static void __setup_per_zone_pages_min(void)
- {
- unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10);
- unsigned long lowmem_pages = 0;
-@@ -4325,6 +4326,15 @@ void setup_per_zone_pages_min(void)
- calculate_totalreserve_pages();
- }
-
-+void setup_per_zone_pages_min(void)
-+{
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&min_free_lock, flags);
-+ __setup_per_zone_pages_min();
-+ spin_unlock_irqrestore(&min_free_lock, flags);
-+}
-+
- /*
- * Initialise min_free_kbytes.
- *
-@@ -4360,7 +4370,7 @@ static int __init init_per_zone_pages_mi
- min_free_kbytes = 128;
- if (min_free_kbytes > 65536)
- min_free_kbytes = 65536;
-- setup_per_zone_pages_min();
-+ __setup_per_zone_pages_min();
- setup_per_zone_lowmem_reserve();
- return 0;
- }