Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753723AbZF2BrQ (ORCPT ); Sun, 28 Jun 2009 21:47:16 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751936AbZF2BrD (ORCPT ); Sun, 28 Jun 2009 21:47:03 -0400 Received: from mga01.intel.com ([192.55.52.88]:31022 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751585AbZF2BrC (ORCPT ); Sun, 28 Jun 2009 21:47:02 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.42,305,1243839600"; d="scan'208";a="703277769" Subject: [PATCH 1/5]memhp: update zone pcp at memory online From: Shaohua Li To: lkml , linux-mm Cc: Andrew Morton , cl@linux-foundation.org Content-Type: text/plain Date: Mon, 29 Jun 2009 09:47:03 +0800 Message-Id: <1246240023.26292.17.camel@sli10-desk.sh.intel.com> Mime-Version: 1.0 X-Mailer: Evolution 2.26.1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2508 Lines: 79 In my test, 128M memory is hot add, but zone's pcp batch is 0, which is an obvious error. When pages are onlined, zone pcp should be updated accordingly. Signed-off-by: Shaohua Li --- include/linux/mm.h | 2 ++ mm/memory_hotplug.c | 1 + mm/page_alloc.c | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+) Index: linux/include/linux/mm.h =================================================================== --- linux.orig/include/linux/mm.h 2009-06-26 09:41:08.000000000 +0800 +++ linux/include/linux/mm.h 2009-06-26 09:41:10.000000000 +0800 @@ -1073,6 +1073,8 @@ extern void setup_per_cpu_pageset(void); static inline void setup_per_cpu_pageset(void) {} #endif +extern void zone_pcp_update(struct zone *zone); + /* nommu.c */ extern atomic_long_t mmap_pages_allocated; Index: linux/mm/memory_hotplug.c =================================================================== --- linux.orig/mm/memory_hotplug.c 2009-06-26 09:41:08.000000000 +0800 +++ linux/mm/memory_hotplug.c 2009-06-26 09:41:10.000000000 +0800 @@ -422,6 +422,7 @@ int online_pages(unsigned long pfn, unsi zone->present_pages += onlined_pages; zone->zone_pgdat->node_present_pages += onlined_pages; + zone_pcp_update(zone); setup_per_zone_wmarks(); calculate_zone_inactive_ratio(zone); if (onlined_pages) { Index: linux/mm/page_alloc.c =================================================================== --- linux.orig/mm/page_alloc.c 2009-06-26 09:41:08.000000000 +0800 +++ linux/mm/page_alloc.c 2009-06-26 09:41:10.000000000 +0800 @@ -3131,6 +3131,31 @@ int zone_wait_table_init(struct zone *zo return 0; } +static int __zone_pcp_update(void *data) +{ + struct zone *zone = data; + int cpu; + unsigned long batch = zone_batchsize(zone), flags; + + for (cpu = 0; cpu < NR_CPUS; cpu++) { + struct per_cpu_pageset *pset; + struct per_cpu_pages *pcp; + + pset = zone_pcp(zone, cpu); + pcp = &pset->pcp; + + local_irq_save(flags); + free_pages_bulk(zone, pcp->count, &pcp->list, 0); + setup_pageset(pset, batch); + local_irq_restore(flags); + } +} + +void zone_pcp_update(struct zone *zone) +{ + stop_machine(__zone_pcp_update, zone, NULL); +} + static __meminit void zone_pcp_init(struct zone *zone) { int cpu; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/