All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yinghai Lu <yinghai@kernel.org>
To: Jiang Liu <jiang.liu@huawei.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mgorman@suse.de>, Tony Luck <tony.luck@intel.com>,
	Xishi Qiu <qiuxishi@huawei.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	David Rientjes <rientjes@google.com>,
	Minchan Kim <minchan@kernel.org>,
	Keping Chen <chenkeping@huawei.com>,
	linux-mm@kvack.org, stable@vger.kernel.org,
	linux-kernel@vger.kernel.org, Jiang Liu <liuj97@gmail.com>
Subject: Re: [PATCH] mm: setup pageblock_order before it's used by sparse
Date: Mon, 2 Jul 2012 13:43:22 -0700	[thread overview]
Message-ID: <CAE9FiQXpeGFfWvUHHW_GjgTg+4Op7agsht5coZbcmn2W=f9bqw@mail.gmail.com> (raw)
In-Reply-To: <4FF100F0.9050501@huawei.com>

[-- Attachment #1: Type: text/plain, Size: 742 bytes --]

On Sun, Jul 1, 2012 at 7:01 PM, Jiang Liu <jiang.liu@huawei.com> wrote:
> Hi Yinghai,
>         The patch fails compilation as below:
> mm/page_alloc.c:151: error: initializer element is not constant
> mm/page_alloc.c:151: error: expected ‘,’ or ‘;’ before ‘__attribute__’
>
> On IA64, HUGETLB_PAGE_ORDER has dependency on variable hpage_shift.
> # define HUGETLB_PAGE_ORDER        (HPAGE_SHIFT - PAGE_SHIFT)
> # define HPAGE_SHIFT               hpage_shift
>
> And hpage_shift could be changed by early parameter "hugepagesz".
> So seems will still need to keep function set_pageblock_order().

ah,  then use use _DEFAULT instead and later could update that in earlyparam.

So attached -v2 should  work.

Thanks

Yinghai

[-- Attachment #2: kill_set_pageblock_order_v2.patch --]
[-- Type: application/octet-stream, Size: 3159 bytes --]

Subject: [PATCH] mm: set pageblock_order in compiling time

That is initial setting, and could be override by command line.

-v2: use HPAGE_SHIFT_DEFAULT by default and set that again when hpage_shift
     get updated again.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/ia64/mm/hugetlbpage.c |    4 ++++
 mm/page_alloc.c            |   45 ++++++---------------------------------------
 2 files changed, 10 insertions(+), 39 deletions(-)

Index: linux-2.6/mm/page_alloc.c
===================================================================
--- linux-2.6.orig/mm/page_alloc.c
+++ linux-2.6/mm/page_alloc.c
@@ -147,7 +147,12 @@ bool pm_suspended_storage(void)
 #endif /* CONFIG_PM_SLEEP */
 
 #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
-int pageblock_order __read_mostly;
+/*
+ * Assume the largest contiguous order of interest is a huge page.
+ * This value may be variable depending on boot parameters on IA64 and
+ * powerpc.
+ */
+int pageblock_order = ((HPAGE_SHIFT_DEFAULT > PAGE_SHIFT) ? (HPAGE_SHIFT_DEFAULT - PAGE_SHIFT) : (MAX_ORDER - 1)) __read_mostly;
 #endif
 
 static void __free_pages_ok(struct page *page, unsigned int order);
@@ -4298,43 +4303,6 @@ static inline void setup_usemap(struct p
 				struct zone *zone, unsigned long zonesize) {}
 #endif /* CONFIG_SPARSEMEM */
 
-#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
-
-/* Initialise the number of pages represented by NR_PAGEBLOCK_BITS */
-static inline void __init set_pageblock_order(void)
-{
-	unsigned int order;
-
-	/* Check that pageblock_nr_pages has not already been setup */
-	if (pageblock_order)
-		return;
-
-	if (HPAGE_SHIFT > PAGE_SHIFT)
-		order = HUGETLB_PAGE_ORDER;
-	else
-		order = MAX_ORDER - 1;
-
-	/*
-	 * Assume the largest contiguous order of interest is a huge page.
-	 * This value may be variable depending on boot parameters on IA64 and
-	 * powerpc.
-	 */
-	pageblock_order = order;
-}
-#else /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */
-
-/*
- * When CONFIG_HUGETLB_PAGE_SIZE_VARIABLE is not set, set_pageblock_order()
- * is unused as pageblock_order is set at compile-time. See
- * include/linux/pageblock-flags.h for the values of pageblock_order based on
- * the kernel config
- */
-static inline void set_pageblock_order(void)
-{
-}
-
-#endif /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */
-
 /*
  * Set up the zone data structures:
  *   - mark all pages reserved
@@ -4413,7 +4381,6 @@ static void __paginginit free_area_init_
 		if (!size)
 			continue;
 
-		set_pageblock_order();
 		setup_usemap(pgdat, zone, size);
 		ret = init_currently_empty_zone(zone, zone_start_pfn,
 						size, MEMMAP_EARLY);
Index: linux-2.6/arch/ia64/mm/hugetlbpage.c
===================================================================
--- linux-2.6.orig/arch/ia64/mm/hugetlbpage.c
+++ linux-2.6/arch/ia64/mm/hugetlbpage.c
@@ -202,6 +202,10 @@ static int __init hugetlb_setup_sz(char
 	 * override here with new page shift.
 	 */
 	ia64_set_rr(HPAGE_REGION_BASE, hpage_shift << 2);
+
+	/* update pageblock_order accordingly */
+	pageblock_order = ((HPAGE_SHIFT > PAGE_SHIFT) ? HUGETLB_PAGE_ORDER : (MAX_ORDER - 1))
+
 	return 0;
 }
 early_param("hugepagesz", hugetlb_setup_sz);

  reply	other threads:[~2012-07-02 20:43 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-30  9:07 [PATCH] mm: setup pageblock_order before it's used by sparse Jiang Liu
2012-06-30  9:07 ` Jiang Liu
2012-06-30 20:15 ` Yinghai Lu
2012-07-02  2:01   ` Jiang Liu
2012-07-02  2:01     ` Jiang Liu
2012-07-02  2:01     ` Jiang Liu
2012-07-02 20:43     ` Yinghai Lu [this message]
2012-07-03  2:54       ` Jiang Liu
2012-07-03  2:54         ` Jiang Liu
2012-07-03  2:54         ` Jiang Liu
2012-07-03  2:54         ` Jiang Liu
2012-07-03  3:25         ` Yinghai Lu
2012-07-03  3:25           ` Yinghai Lu
2012-07-03  3:25           ` Yinghai Lu
2012-07-03  3:25           ` Yinghai Lu
2012-07-03  3:29           ` Jiang Liu
2012-07-03  3:29             ` Jiang Liu
2012-07-03  3:29             ` Jiang Liu
2012-07-18  7:17             ` Benjamin Herrenschmidt
2012-07-18  7:17               ` Benjamin Herrenschmidt
2012-07-18  7:17               ` Benjamin Herrenschmidt
2012-07-18  7:15           ` Benjamin Herrenschmidt
2012-07-18  7:15             ` Benjamin Herrenschmidt
2012-07-18  7:15             ` Benjamin Herrenschmidt
2012-06-30 20:46 ` Greg KH
2012-06-30 20:46   ` Greg KH
2012-07-02 12:41 ` Mel Gorman
2012-07-02 12:41   ` Mel Gorman
2012-07-03 21:07 ` Andrew Morton
2012-07-03 21:07   ` Andrew Morton
2012-07-04  1:40   ` Jiang Liu
2012-07-04  1:40     ` Jiang Liu
2012-07-04  9:20     ` Mel Gorman
2012-07-04  9:20       ` Mel Gorman
2012-07-06  1:00       ` Yinghai Lu
2012-07-06  1:00         ` Yinghai Lu
2012-07-06  1:24         ` Benjamin Herrenschmidt
2012-07-06  1:24           ` Benjamin Herrenschmidt
2012-07-17  9:31           ` Jiang Liu
2012-07-17  9:31             ` Jiang Liu
2012-07-18  7:01             ` Benjamin Herrenschmidt
2012-07-18  7:01               ` Benjamin Herrenschmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAE9FiQXpeGFfWvUHHW_GjgTg+4Op7agsht5coZbcmn2W=f9bqw@mail.gmail.com' \
    --to=yinghai@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=chenkeping@huawei.com \
    --cc=jiang.liu@huawei.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=liuj97@gmail.com \
    --cc=mgorman@suse.de \
    --cc=minchan@kernel.org \
    --cc=qiuxishi@huawei.com \
    --cc=rientjes@google.com \
    --cc=stable@vger.kernel.org \
    --cc=tony.luck@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.