From f4b39f5adcdbe40bd6fe25a4f689dd0d9759b011 Mon Sep 17 00:00:00 2001 From: Yasunori Goto Date: Tue, 8 May 2007 00:23:10 -0700 Subject: [PATCH] --- yaml --- r: 54525 b: refs/heads/master c: 72280ede316911fd5a82ef78d12a6705b1007d36 h: refs/heads/master i: 54523: 79113d71db1b7ec6912cf240b11ca7ca24dfc262 v: v3 --- [refs] | 2 +- trunk/mm/page_alloc.c | 2 +- trunk/mm/sparse.c | 2 +- trunk/scripts/mod/modpost.c | 27 +++++++++++++++++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index f2124a1de510..00930186e43c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a3142c8e1dd57ff48040bdb3478cff9312543dc3 +refs/heads/master: 72280ede316911fd5a82ef78d12a6705b1007d36 diff --git a/trunk/mm/page_alloc.c b/trunk/mm/page_alloc.c index fd7745111e16..6fd0b7455b0b 100644 --- a/trunk/mm/page_alloc.c +++ b/trunk/mm/page_alloc.c @@ -2179,7 +2179,7 @@ void __init setup_per_cpu_pageset(void) #endif -static __meminit +static __meminit noinline int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages) { int i; diff --git a/trunk/mm/sparse.c b/trunk/mm/sparse.c index 9079afe8f457..6f3fff907bc2 100644 --- a/trunk/mm/sparse.c +++ b/trunk/mm/sparse.c @@ -44,7 +44,7 @@ EXPORT_SYMBOL(page_to_nid); #endif #ifdef CONFIG_SPARSEMEM_EXTREME -static struct mem_section *sparse_index_alloc(int nid) +static struct mem_section noinline *sparse_index_alloc(int nid) { struct mem_section *section = NULL; unsigned long array_size = SECTIONS_PER_ROOT * diff --git a/trunk/scripts/mod/modpost.c b/trunk/scripts/mod/modpost.c index 4ab36de45aa2..480e18b00aa6 100644 --- a/trunk/scripts/mod/modpost.c +++ b/trunk/scripts/mod/modpost.c @@ -642,6 +642,16 @@ static int strrcmp(const char *s, const char *sub) * tosec = .init.text * fromsec = .paravirtprobe * + * Pattern 9: + * Some of functions are common code between boot time and hotplug + * time. The bootmem allocater is called only boot time in its + * functions. So it's ok to reference. + * tosec = .init.text + * + * Pattern 10: + * ia64 has machvec table for each platform. It is mixture of function + * pointer of .init.text and .text. + * fromsec = .machvec **/ static int secref_whitelist(const char *modname, const char *tosec, const char *fromsec, const char *atsym, @@ -668,6 +678,12 @@ static int secref_whitelist(const char *modname, const char *tosec, NULL }; + const char *pat4sym[] = { + "sparse_index_alloc", + "zone_wait_table_init", + NULL + }; + /* Check for pattern 1 */ if (strcmp(tosec, ".init.data") != 0) f1 = 0; @@ -726,6 +742,17 @@ static int secref_whitelist(const char *modname, const char *tosec, (strcmp(fromsec, ".paravirtprobe") == 0)) return 1; + /* Check for pattern 9 */ + if ((strcmp(tosec, ".init.text") == 0) && + (strcmp(fromsec, ".text") == 0)) + for (s = pat4sym; *s; s++) + if (strcmp(atsym, *s) == 0) + return 1; + + /* Check for pattern 10 */ + if (strcmp(fromsec, ".machvec") == 0) + return 1; + return 0; }