aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/mod
diff options
context:
space:
mode:
authorYasunori Goto <y-goto@jp.fujitsu.com>2007-05-08 03:23:10 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-08 14:14:57 -0400
commit72280ede316911fd5a82ef78d12a6705b1007d36 (patch)
treec6cdec169d300f6967c47771917d99035423bf91 /scripts/mod
parenta3142c8e1dd57ff48040bdb3478cff9312543dc3 (diff)
Add white list into modpost.c for memory hotplug code and ia64's machvec section
This patch is add white list into modpost.c for some functions and ia64's section to fix section mismatchs. sparse_index_alloc() and zone_wait_table_init() calls bootmem allocator at boot time, and kmalloc/vmalloc at hotplug time. If config memory hotplug is on, there are references of bootmem allocater(init text) from them (normal text). This is cause of section mismatch. Bootmem is called by many functions and it must be used only at boot time. I think __init of them should keep for section mismatch check. So, I would like to register sparse_index_alloc() and zone_wait_table_init() into white list. In addition, ia64's .machvec section is function table of some platform dependent code. It is mixture of .init.text and normal text. These reference of __init functions are valid too. Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com> Cc: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'scripts/mod')
-rw-r--r--scripts/mod/modpost.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 4ab36de45aa2..480e18b00aa6 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -642,6 +642,16 @@ static int strrcmp(const char *s, const char *sub)
642 * tosec = .init.text 642 * tosec = .init.text
643 * fromsec = .paravirtprobe 643 * fromsec = .paravirtprobe
644 * 644 *
645 * Pattern 9:
646 * Some of functions are common code between boot time and hotplug
647 * time. The bootmem allocater is called only boot time in its
648 * functions. So it's ok to reference.
649 * tosec = .init.text
650 *
651 * Pattern 10:
652 * ia64 has machvec table for each platform. It is mixture of function
653 * pointer of .init.text and .text.
654 * fromsec = .machvec
645 **/ 655 **/
646static int secref_whitelist(const char *modname, const char *tosec, 656static int secref_whitelist(const char *modname, const char *tosec,
647 const char *fromsec, const char *atsym, 657 const char *fromsec, const char *atsym,
@@ -668,6 +678,12 @@ static int secref_whitelist(const char *modname, const char *tosec,
668 NULL 678 NULL
669 }; 679 };
670 680
681 const char *pat4sym[] = {
682 "sparse_index_alloc",
683 "zone_wait_table_init",
684 NULL
685 };
686
671 /* Check for pattern 1 */ 687 /* Check for pattern 1 */
672 if (strcmp(tosec, ".init.data") != 0) 688 if (strcmp(tosec, ".init.data") != 0)
673 f1 = 0; 689 f1 = 0;
@@ -726,6 +742,17 @@ static int secref_whitelist(const char *modname, const char *tosec,
726 (strcmp(fromsec, ".paravirtprobe") == 0)) 742 (strcmp(fromsec, ".paravirtprobe") == 0))
727 return 1; 743 return 1;
728 744
745 /* Check for pattern 9 */
746 if ((strcmp(tosec, ".init.text") == 0) &&
747 (strcmp(fromsec, ".text") == 0))
748 for (s = pat4sym; *s; s++)
749 if (strcmp(atsym, *s) == 0)
750 return 1;
751
752 /* Check for pattern 10 */
753 if (strcmp(fromsec, ".machvec") == 0)
754 return 1;
755
729 return 0; 756 return 0;
730} 757}
731 758