diff options
author | Yasunori Goto <y-goto@jp.fujitsu.com> | 2007-05-08 03:23:10 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-08 14:14:57 -0400 |
commit | 72280ede316911fd5a82ef78d12a6705b1007d36 (patch) | |
tree | c6cdec169d300f6967c47771917d99035423bf91 /scripts/mod | |
parent | a3142c8e1dd57ff48040bdb3478cff9312543dc3 (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.c | 27 |
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 | **/ |
646 | static int secref_whitelist(const char *modname, const char *tosec, | 656 | static 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 | ||