From patchwork Wed Sep 25 23:17:50 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Srivatsa S. Bhat" X-Patchwork-Id: 2945901 Return-Path: X-Original-To: patchwork-linux-pm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 790889F288 for ; Wed, 25 Sep 2013 23:29:32 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9C26E20360 for ; Wed, 25 Sep 2013 23:29:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C39AA20373 for ; Wed, 25 Sep 2013 23:29:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754301Ab3IYXWK (ORCPT ); Wed, 25 Sep 2013 19:22:10 -0400 Received: from e23smtp01.au.ibm.com ([202.81.31.143]:42123 "EHLO e23smtp01.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750866Ab3IYXWI (ORCPT ); Wed, 25 Sep 2013 19:22:08 -0400 Received: from /spool/local by e23smtp01.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 26 Sep 2013 09:22:07 +1000 Received: from d23dlp01.au.ibm.com (202.81.31.203) by e23smtp01.au.ibm.com (202.81.31.207) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 26 Sep 2013 09:22:04 +1000 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [9.190.235.152]) by d23dlp01.au.ibm.com (Postfix) with ESMTP id 9011B2CE8054; Thu, 26 Sep 2013 09:22:03 +1000 (EST) Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r8PN5EWV10158376; Thu, 26 Sep 2013 09:05:14 +1000 Received: from d23av01.au.ibm.com (localhost [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id r8PNM05S030413; Thu, 26 Sep 2013 09:22:03 +1000 Received: from srivatsabhat.in.ibm.com ([9.79.250.85]) by d23av01.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id r8PNLqOs030292; Thu, 26 Sep 2013 09:21:53 +1000 From: "Srivatsa S. Bhat" Subject: [RFC PATCH v4 17/40] mm: Add a mechanism to add pages to buddy freelists in bulk To: akpm@linux-foundation.org, mgorman@suse.de, dave@sr71.net, hannes@cmpxchg.org, tony.luck@intel.com, matthew.garrett@nebula.com, riel@redhat.com, arjan@linux.intel.com, srinivas.pandruvada@linux.intel.com, willy@linux.intel.com, kamezawa.hiroyu@jp.fujitsu.com, lenb@kernel.org, rjw@sisk.pl Cc: gargankita@gmail.com, paulmck@linux.vnet.ibm.com, svaidy@linux.vnet.ibm.com, andi@firstfloor.org, isimatu.yasuaki@jp.fujitsu.com, santosh.shilimkar@ti.com, kosaki.motohiro@gmail.com, srivatsa.bhat@linux.vnet.ibm.com, linux-pm@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Date: Thu, 26 Sep 2013 04:47:50 +0530 Message-ID: <20130925231748.26184.78290.stgit@srivatsabhat.in.ibm.com> In-Reply-To: <20130925231250.26184.31438.stgit@srivatsabhat.in.ibm.com> References: <20130925231250.26184.31438.stgit@srivatsabhat.in.ibm.com> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13092523-1618-0000-0000-000004B0A1AB Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Spam-Status: No, score=-5.5 required=5.0 tests=BAYES_00,KHOP_BIG_TO_CC, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When the buddy page allocator requests the region allocator for memory, it gets all the freepages belonging to an entire region at once. So, in order to make it efficient, we need a way to add all those pages to the buddy freelists in one shot. Add this support, and also take care to update the nr-free statistics properly. Signed-off-by: Srivatsa S. Bhat --- mm/page_alloc.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 876c231..c3a2cda 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -693,6 +693,52 @@ out: set_region_bit(region_id, free_list); } +/* + * Add all the freepages contained in 'list' to the buddy freelist + * 'free_list'. Using suitable list-manipulation tricks, we move the + * pages between the lists in one shot. + */ +static void add_to_freelist_bulk(struct list_head *list, + struct free_list *free_list, int order, + int region_id) +{ + struct list_head *cur, *position; + struct mem_region_list *region; + unsigned long nr_pages = 0; + struct free_area *area; + struct page *page; + + if (list_empty(list)) + return; + + page = list_first_entry(list, struct page, lru); + list_del(&page->lru); + + /* + * Add one page using add_to_freelist() so that it sets up the + * region related data-structures of the freelist properly. + */ + add_to_freelist(page, free_list, order); + + /* Now add the rest of the pages in bulk */ + list_for_each(cur, list) + nr_pages++; + + position = free_list->mr_list[region_id].page_block; + list_splice_tail(list, position); + + + /* Update the statistics */ + region = &free_list->mr_list[region_id]; + region->nr_free += nr_pages; + + area = &(page_zone(page)->free_area[order]); + area->nr_free += nr_pages + 1; + + /* Fix up the zone region stats, since add_to_freelist() altered it */ + region->zone_region->nr_free -= 1 << order; +} + /** * __rmqueue_smallest() *always* deletes elements from the head of the * list. Use this knowledge to keep page allocation fast, despite being