From: Mel Gorman The sysctl handler for min_free_kbytes calls setup_per_zone_pages_min() on read or write. This function iterates through every zone and calls spin_lock_irqsave() on the zone LRU lock. When reading min_free_kbytes, this is a total waste of time that disables interrupts on the local processor. It might even be noticable machines with large numbers of zones if a process started constantly reading min_free_kbytes. This patch only calls setup_per_zone_pages_min() only on write. Tested on an x86 laptop and it did the right thing. Signed-off-by: Mel Gorman Acked-by: Christoph Lameter Signed-off-by: Andrew Morton --- mm/page_alloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff -puN mm/page_alloc.c~do-not-disable-interrupts-when-reading-min_free_kbytes mm/page_alloc.c --- a/mm/page_alloc.c~do-not-disable-interrupts-when-reading-min_free_kbytes +++ a/mm/page_alloc.c @@ -3199,7 +3199,8 @@ int min_free_kbytes_sysctl_handler(ctl_t struct file *file, void __user *buffer, size_t *length, loff_t *ppos) { proc_dointvec(table, write, file, buffer, length, ppos); - setup_per_zone_pages_min(); + if (write) + setup_per_zone_pages_min(); return 0; } _