]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/suse-2.6.27.31/patches.suse/SoN-02-mm-setup_per_zone_pages_min.patch
Merge branch 'master' of git://git.ipfire.org/ipfire-2.x
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / SoN-02-mm-setup_per_zone_pages_min.patch
1 From: Peter Zijlstra <a.p.zijlstra@chello.nl>
2 Subject: mm: serialize access to min_free_kbytes
3 Patch-mainline: No
4 References: FATE#303834
5
6 There is a small race between the procfs caller and the memory hotplug caller
7 of setup_per_zone_pages_min(). Not a big deal, but the next patch will add yet
8 another caller. Time to close the gap.
9
10 Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
11 Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi>
12 Acked-by: Neil Brown <neilb@suse.de>
13 Acked-by: Suresh Jayaraman <sjayaraman@suse.de>
14
15 ---
16 mm/page_alloc.c | 16 +++++++++++++---
17 1 file changed, 13 insertions(+), 3 deletions(-)
18
19 --- a/mm/page_alloc.c
20 +++ b/mm/page_alloc.c
21 @@ -120,6 +120,7 @@ static char * const zone_names[MAX_NR_ZO
22 "Movable",
23 };
24
25 +static DEFINE_SPINLOCK(min_free_lock);
26 int min_free_kbytes = 1024;
27
28 unsigned long __meminitdata nr_kernel_pages;
29 @@ -4265,12 +4266,12 @@ static void setup_per_zone_lowmem_reserv
30 }
31
32 /**
33 - * setup_per_zone_pages_min - called when min_free_kbytes changes.
34 + * __setup_per_zone_pages_min - called when min_free_kbytes changes.
35 *
36 * Ensures that the pages_{min,low,high} values for each zone are set correctly
37 * with respect to min_free_kbytes.
38 */
39 -void setup_per_zone_pages_min(void)
40 +static void __setup_per_zone_pages_min(void)
41 {
42 unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10);
43 unsigned long lowmem_pages = 0;
44 @@ -4325,6 +4326,15 @@ void setup_per_zone_pages_min(void)
45 calculate_totalreserve_pages();
46 }
47
48 +void setup_per_zone_pages_min(void)
49 +{
50 + unsigned long flags;
51 +
52 + spin_lock_irqsave(&min_free_lock, flags);
53 + __setup_per_zone_pages_min();
54 + spin_unlock_irqrestore(&min_free_lock, flags);
55 +}
56 +
57 /*
58 * Initialise min_free_kbytes.
59 *
60 @@ -4360,7 +4370,7 @@ static int __init init_per_zone_pages_mi
61 min_free_kbytes = 128;
62 if (min_free_kbytes > 65536)
63 min_free_kbytes = 65536;
64 - setup_per_zone_pages_min();
65 + __setup_per_zone_pages_min();
66 setup_per_zone_lowmem_reserve();
67 return 0;
68 }