From e5f95c8b7700a7bf1c2d24eedc677954d9aa0285 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sat, 2 Feb 2008 18:57:18 +0100 Subject: [PATCH 01/13] kbuild: print only total number of section mismatces found We have too many section mismatches detected at the moment. So silence modpost and prevent the option from being set in a typical allyesconfig build. Tell the user how to see all the deteils in the summary message from modpost. Signed-off-by: Sam Ravnborg --- lib/Kconfig.debug | 2 +- scripts/mod/modpost.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 0d8a5a4a789d..d090d7201086 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -81,7 +81,7 @@ config HEADERS_CHECK config DEBUG_SECTION_MISMATCH bool "Enable full Section mismatch analysis" - default n + depends on UNDEFINED help The section mismatch analysis checks if there are illegal references from one section to another section. diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index f8efc93eb700..c2e918e2cef1 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1125,15 +1125,15 @@ static void report_sec_mismatch(const char *modname, enum mismatch mismatch, to = to_is_func ? "function" : "variable"; to_p = to_is_func ? "()" : ""; + sec_mismatch_count++; + if (!sec_mismatch_verbose) + return; + fprintf(stderr, "WARNING: %s(%s+0x%llx): Section mismatch in" " reference from the %s %s%s to the %s %s:%s%s\n", modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec, tosym, to_p); - sec_mismatch_count++; - if (!sec_mismatch_verbose) - return; - switch (mismatch) { case TEXT_TO_INIT: fprintf(stderr, @@ -1939,10 +1939,9 @@ int main(int argc, char **argv) write_dump(dump_write); if (sec_mismatch_count && !sec_mismatch_verbose) fprintf(stderr, "modpost: Found %d section mismatch(es).\n" - "To see additional details select \"Enable full " - "Section mismatch analysis\"\n" - "in the Kernel Hacking menu " - "(CONFIG_SECTION_MISMATCH).\n", sec_mismatch_count); + "To see full details build your kernel with:\n" + "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n", + sec_mismatch_count); return err; } From 470a81ae15ed8c037afa0466e2731566a111c134 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Wed, 30 Jan 2008 14:14:08 +0000 Subject: [PATCH 02/13] Remove __INIT_REFOK and __INITDATA_REFOK Commit 312b1485fb509c9bc32eda28ad29537896658cb8 made __INIT_REFOK expand into .section .section ".ref.text", "ax". Since the assembler doesn't tolerate stuttering in the source that broke all MIPS builds. Since with this change Sam downgraded __INIT_REFOK to just a backward compat thing and there being only a single use in the MIPS arch code the best solution is to delete both of __INIT_REFOK and __INITDATA_REFOK (which was equally broken) being unused anyway these can be deleted. Signed-off-by: Ralf Baechle Signed-off-by: Sam Ravnborg --- include/linux/init.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/include/linux/init.h b/include/linux/init.h index 2efbda016741..90cdbbbbe077 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -124,9 +124,6 @@ #define __REF .section ".ref.text", "ax" #define __REFDATA .section ".ref.data", "aw" #define __REFCONST .section ".ref.rodata", "aw" -/* backward compatibility */ -#define __INIT_REFOK .section __REF -#define __INITDATA_REFOK .section __REFDATA #ifndef __ASSEMBLY__ /* From d6fbfa4fce607254c081d7f58227281d08419d4c Mon Sep 17 00:00:00 2001 From: Geert Uytterhoeven Date: Wed, 30 Jan 2008 11:13:23 +0100 Subject: [PATCH 03/13] kbuild: Spelling/grammar fixes for config DEBUG_SECTION_MISMATCH Including additional fixes from Randy Dunlap Signed-off-by: Geert Uytterhoeven Signed-off-by: Sam Ravnborg --- lib/Kconfig.debug | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index d090d7201086..0d385be682db 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -90,19 +90,19 @@ config DEBUG_SECTION_MISMATCH most likely result in an oops. In the code functions and variables are annotated with __init, __devinit etc. (see full list in include/linux/init.h) - which result in the code/data being placed in specific sections. - The section mismatch anaylsis are always done after a full - kernel build but enabling this options will in addition + which results in the code/data being placed in specific sections. + The section mismatch analysis is always done after a full + kernel build but enabling this option will in addition do the following: - Add the option -fno-inline-functions-called-once to gcc When inlining a function annotated __init in a non-init - function we would loose the section information and thus + function we would lose the section information and thus the analysis would not catch the illegal reference. - This options tell gcc to inline less but will also + This option tells gcc to inline less but will also result in a larger kernel. - Run the section mismatch analysis for each module/built-in.o When we run the section mismatch analysis on vmlinux.o we - looses valueable information about where the mismatch was + lose valueble information about where the mismatch was introduced. Running the analysis for each module/built-in.o file will tell where the mismatch happens much closer to the From 36ef805bd51ef831aa6ed66a23ea0dfbc60d0c3e Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sat, 2 Feb 2008 20:44:09 +0100 Subject: [PATCH 04/13] kconfig: mark config as changed when loading an alternate config Michal Zachar reported that menuconfig did not save the new config when loading an alternate config unless he altered it manually. Mark config as changed upon load of alternate config fixed this. Signed-off-by: Sam Ravnborg Roman Zippel --- scripts/kconfig/mconf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index 50e61c411bc0..734cf4f3131e 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c @@ -821,6 +821,7 @@ static void conf_load(void) return; if (!conf_read(dialog_input_result)) { set_config_filename(dialog_input_result); + sym_set_change_count(1); return; } show_textbox(NULL, _("File does not exist!"), 5, 38); From 603d49885e023d1f68c627c2a2db599fb40eefec Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sat, 2 Feb 2008 21:09:57 +0100 Subject: [PATCH 05/13] kconfig: ignore select of unknown symbol We have had warnings for a long time about select of unknow symbol but the warnings does not really makes sense since we may select a symbol that is relevant and defined in one arch but not in another arch. And as long as we do not use a common set of Kconfig files for all archs lets just ignore this case. Previously we have used this to find bad uses of select but we need a more relaible method to do so. Signed-off-by: Sam Ravnborg Cc: Roman Zippel --- scripts/kconfig/menu.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index fdad17367f61..606ceb9e746e 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c @@ -203,12 +203,9 @@ void sym_check_prop(struct symbol *sym) prop_warn(prop, "config symbol '%s' uses select, but is " "not boolean or tristate", sym->name); - else if (sym2->type == S_UNKNOWN) - prop_warn(prop, - "'select' used by config symbol '%s' " - "refers to undefined symbol '%s'", - sym->name, sym2->name); - else if (sym2->type != S_BOOLEAN && sym2->type != S_TRISTATE) + else if (sym2->type != S_UNKNOWN && + sym2->type != S_BOOLEAN && + sym2->type != S_TRISTATE) prop_warn(prop, "'%s' has wrong type. 'select' only " "accept arguments of boolean and " From c0ffa3a951668734a635cd1e26bf7583795854c5 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sat, 2 Feb 2008 15:10:32 -0500 Subject: [PATCH 06/13] Fix ARM to play nicely with generic Instrumentation menu The conflicting commit for move-kconfiginstrumentation-to-arch-kconfig-and-init-kconfig.patch is the ARM fix from Linus : commit 38ad9aebe70dc72df08851bbd1620d89329129ba He just seemed to agree that my approach (just putting the missing ARM config options in arch/arm/Kconfig) works too. The main advantage it has is that it is smaller, does not need a cleanup in the future and does not break the following patches unnecessarily. It's just been discussed here http://lkml.org/lkml/2008/1/15/267 However, Linus might prefer to stay with his own patch and I would totally understand it that late in the release cycle. Therefore I submit this for the next release cycle. Signed-off-by: Mathieu Desnoyers Cc: Jeff Dike Cc: David Howells Cc: Ananth N Mavinakayanahalli CC: Russell King Signed-off-by: Sam Ravnborg --- arch/arm/Kconfig | 19 +++++++++- arch/arm/Kconfig.instrumentation | 62 -------------------------------- kernel/Kconfig.instrumentation | 2 +- 3 files changed, 19 insertions(+), 64 deletions(-) delete mode 100644 arch/arm/Kconfig.instrumentation diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4b1a8e3d292c..623eaa1f3080 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -135,6 +135,23 @@ config FIQ config ARCH_MTD_XIP bool +if OPROFILE + +config OPROFILE_ARMV6 + def_bool y + depends on CPU_V6 && !SMP + select OPROFILE_ARM11_CORE + +config OPROFILE_MPCORE + def_bool y + depends on CPU_V6 && SMP + select OPROFILE_ARM11_CORE + +config OPROFILE_ARM11_CORE + bool + +endif + config VECTORS_BASE hex default 0xffff0000 if MMU || CPU_HIGH_VECTOR @@ -1128,7 +1145,7 @@ endmenu source "fs/Kconfig" -source "arch/arm/Kconfig.instrumentation" +source "kernel/Kconfig.instrumentation" source "arch/arm/Kconfig.debug" diff --git a/arch/arm/Kconfig.instrumentation b/arch/arm/Kconfig.instrumentation deleted file mode 100644 index 453ad8e15d69..000000000000 --- a/arch/arm/Kconfig.instrumentation +++ /dev/null @@ -1,62 +0,0 @@ -menuconfig INSTRUMENTATION - bool "Instrumentation Support" - default y - ---help--- - Say Y here to get to see options related to performance measurement, - system-wide debugging, and testing. This option alone does not add any - kernel code. - - If you say N, all options in this submenu will be skipped and - disabled. If you're trying to debug the kernel itself, go see the - Kernel Hacking menu. - -if INSTRUMENTATION - -config PROFILING - bool "Profiling support (EXPERIMENTAL)" - help - Say Y here to enable the extended profiling support mechanisms used - by profilers such as OProfile. - -config OPROFILE - tristate "OProfile system profiling (EXPERIMENTAL)" - depends on PROFILING && !UML - help - OProfile is a profiling system capable of profiling the - whole system, include the kernel, kernel modules, libraries, - and applications. - - If unsure, say N. - -config OPROFILE_ARMV6 - bool - depends on OPROFILE && CPU_V6 && !SMP - default y - select OPROFILE_ARM11_CORE - -config OPROFILE_MPCORE - bool - depends on OPROFILE && CPU_V6 && SMP - default y - select OPROFILE_ARM11_CORE - -config OPROFILE_ARM11_CORE - bool - -config KPROBES - bool "Kprobes" - depends on KALLSYMS && MODULES && !UML && !XIP_KERNEL - help - Kprobes allows you to trap at almost any kernel address and - execute a callback function. register_kprobe() establishes - a probepoint and specifies the callback. Kprobes is useful - for kernel debugging, non-intrusive instrumentation and testing. - If in doubt, say "N". - -config MARKERS - bool "Activate markers" - help - Place an empty function call at each marker site. Can be - dynamically changed for a probe function. - -endif # INSTRUMENTATION diff --git a/kernel/Kconfig.instrumentation b/kernel/Kconfig.instrumentation index 468f47ad7503..a00dcb610233 100644 --- a/kernel/Kconfig.instrumentation +++ b/kernel/Kconfig.instrumentation @@ -32,7 +32,7 @@ config OPROFILE config KPROBES bool "Kprobes" depends on KALLSYMS && MODULES && !UML - depends on X86_32 || IA64 || PPC || S390 || SPARC64 || X86_64 || AVR32 + depends on X86_32 || IA64 || PPC || S390 || SPARC64 || X86_64 || AVR32 || (ARM && !XIP_KERNEL) help Kprobes allows you to trap at almost any kernel address and execute a callback function. register_kprobe() establishes From fb32e03fdc170251a381449a8d9b82cf7e811a6f Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sat, 2 Feb 2008 15:10:33 -0500 Subject: [PATCH 07/13] Create arch/Kconfig Puts the content of arch/Kconfig in the "General setup" menu. Linus: > Should it come with a re-duplication of it's content into each > architecture, which was the case previously ? The oprofile and kprobes > menu entries were litteraly cut and pasted from one architecture to > another. Should we put its content in init/Kconfig then ? I don't think it's a good idea to go back to making it per-architecture, although that extensive "depends on " might indicate that there certainly is room for cleanup there. And I don't think it's wrong keeping it in kernel/Kconfig.xyz per se, I just think it's wrong to (a) lump the code together when it really doesn't necessarily need to and (b) show it to users as some kind of choice that is tied together (whether it then has common code or not). On the per-architecture side, I do think it would be better to *not* have internal architecture knowledge in a generic file, and as such a line like depends on X86_32 || IA64 || PPC || S390 || SPARC64 || X86_64 || AVR32 really shouldn't exist in a file like kernel/Kconfig.instrumentation. It would be much better to do depends on ARCH_SUPPORTS_KPROBES in that generic file, and then architectures that do support it would just have a bool ARCH_SUPPORTS_KPROBES default y in *their* architecture files. That would seem to be much more logical, and is readable both for arch maintainers *and* for people who have no clue - and don't care - about which architecture is supposed to support which interface... Sam Ravnborg: Stuff it into a new file: arch/Kconfig We can then extend this file to include all the 'trailing' Kconfig things that are anyway equal for all ARCHs. But it should be kept clean - so if we introduce such a file then we should use ARCH_HAS_whatever in the arch specific Kconfig files to enable stuff that is not shared. [...] The above suggestion is actually not exactly the best way to do it... First the naming.. A quick grep shows following usage today (in Kconfig files) ARCH_HAS 51 ARCH_SUPPORTS 4 HAVE_ARCH 7 ARCH_HAS is the clear winner. In the common Kconfig file do: config FOO depends on ARCH_HAS_FOO bool "bla bla" config ARCH_HAS_FOO def_bool n In the arch specific Kconfig file in a suitable place do: config SUITABLE_OPTION select ARCH_HAS_FOO The naming of ARCH_HAS_ is fixed and shall be: ARCH_HAS_ Only a single line added pr. architecture. And we will end up with a (maybe even commented) list of trivial selects. - Yet another update : Moving to HAVE_* now. Signed-off-by: Mathieu Desnoyers Cc: Jeff Dike Cc: David Howells Cc: Ananth N Mavinakayanahalli Signed-off-by: Sam Ravnborg --- arch/Kconfig | 3 +++ init/Kconfig | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 arch/Kconfig diff --git a/arch/Kconfig b/arch/Kconfig new file mode 100644 index 000000000000..24917145058d --- /dev/null +++ b/arch/Kconfig @@ -0,0 +1,3 @@ +# +# General architecture dependent options +# diff --git a/init/Kconfig b/init/Kconfig index dcc96a8c8c69..8de6c48cfde0 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -665,6 +665,8 @@ config SLOB endchoice +source "arch/Kconfig" + endmenu # General setup config SLABINFO From 42d4b839c82fd7dd8e412145eb6d9752468478e2 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sat, 2 Feb 2008 15:10:34 -0500 Subject: [PATCH 08/13] Add HAVE_OPROFILE Linus: On the per-architecture side, I do think it would be better to *not* have internal architecture knowledge in a generic file, and as such a line like depends on X86_32 || IA64 || PPC || S390 || SPARC64 || X86_64 || AVR32 really shouldn't exist in a file like kernel/Kconfig.instrumentation. It would be much better to do depends on ARCH_SUPPORTS_KPROBES in that generic file, and then architectures that do support it would just have a bool ARCH_SUPPORTS_KPROBES default y in *their* architecture files. That would seem to be much more logical, and is readable both for arch maintainers *and* for people who have no clue - and don't care - about which architecture is supposed to support which interface... Changelog: Actually, I know I gave this as the magic incantation, but now that I see it, I realize that I should have told you to just use config ARCH_SUPPORTS_KPROBES def_bool y instead, which is a bit denser. We seem to use both kinds of syntax for these things, but this is really what "def_bool" is there for... Changelog : - Moving to HAVE_*. - Add AVR32 oprofile. Signed-off-by: Mathieu Desnoyers Cc: Andrew Morton Cc: Haavard Skinnemoen Cc: David Howells Cc: Jeff Dike Cc: Ananth N Mavinakayanahalli Signed-off-by: Sam Ravnborg --- arch/alpha/Kconfig | 1 + arch/arm/Kconfig | 1 + arch/avr32/Kconfig | 4 +--- arch/blackfin/Kconfig | 1 + arch/ia64/Kconfig | 1 + arch/m32r/Kconfig | 1 + arch/mips/Kconfig | 1 + arch/parisc/Kconfig | 1 + arch/powerpc/Kconfig | 1 + arch/ppc/Kconfig | 1 + arch/s390/Kconfig | 1 + arch/sh/Kconfig | 1 + arch/sparc/Kconfig | 1 + arch/sparc64/Kconfig | 1 + arch/x86/Kconfig | 5 +---- kernel/Kconfig.instrumentation | 5 ++++- 16 files changed, 19 insertions(+), 8 deletions(-) diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index c613d5fb0daa..0ff5572b3b07 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig @@ -5,6 +5,7 @@ config ALPHA bool default y + select HAVE_OPROFILE help The Alpha is a 64-bit general-purpose processor designed and marketed by the Digital Equipment Corporation of blessed memory, diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 623eaa1f3080..3b3eb4ec3189 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -10,6 +10,7 @@ config ARM default y select RTC_LIB select SYS_SUPPORTS_APM_EMULATION + select HAVE_OPROFILE help The ARM series is a line of low-power-consumption RISC chip designs licensed by ARM Ltd and targeted at embedded applications and diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig index e34e2c9c94cb..b46932c4f9f1 100644 --- a/arch/avr32/Kconfig +++ b/arch/avr32/Kconfig @@ -10,6 +10,7 @@ config AVR32 # With EMBEDDED=n, we get lots of stuff automatically selected # that we usually don't need on AVR32. select EMBEDDED + select HAVE_OPROFILE help AVR32 is a high-performance 32-bit RISC microprocessor core, designed for cost-sensitive embedded applications, with particular @@ -54,9 +55,6 @@ config ARCH_HAS_ILOG2_U32 config ARCH_HAS_ILOG2_U64 def_bool n -config ARCH_SUPPORTS_OPROFILE - def_bool y - config GENERIC_HWEIGHT def_bool y diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 4802eb767dc9..3ba89dc43297 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig @@ -24,6 +24,7 @@ config RWSEM_XCHGADD_ALGORITHM config BLACKFIN bool default y + select HAVE_OPROFILE config ZONE_DMA bool diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index c9307c99a1dc..5e410f200c04 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -15,6 +15,7 @@ config IA64 select ACPI if (!IA64_HP_SIM) select PM if (!IA64_HP_SIM) select ARCH_SUPPORTS_MSI + select HAVE_OPROFILE default y help The Itanium Processor Family is Intel's 64-bit successor to diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index 49326e9d4413..b93897d65aec 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig @@ -8,6 +8,7 @@ mainmenu "Linux/M32R Kernel Configuration" config M32R bool default y + select HAVE_OPROFILE config SBUS bool diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 36a4018f71d2..eb8be5491c13 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -1,6 +1,7 @@ config MIPS bool default y + select HAVE_OPROFILE # Horrible source of confusion. Die, die, die ... select EMBEDDED select RTC_LIB diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 2b649c46631c..e1a2f77d3986 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -7,6 +7,7 @@ mainmenu "Linux/PA-RISC Kernel Configuration" config PARISC def_bool y + select HAVE_OPROFILE help The PA-RISC microprocessor is designed by Hewlett-Packard and used in many of their workstations & servers (HP9000 700 and 800 series, diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 4a22c9928618..c3c29e7d281a 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -87,6 +87,7 @@ config ARCH_NO_VIRT_TO_BUS config PPC bool default y + select HAVE_OPROFILE config EARLY_PRINTK bool diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig index db5934cdafb3..ea9eb4891b23 100644 --- a/arch/ppc/Kconfig +++ b/arch/ppc/Kconfig @@ -42,6 +42,7 @@ config GENERIC_CALIBRATE_DELAY config PPC bool default y + select HAVE_OPROFILE config PPC32 bool diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 6ef54d27fc00..c561f6fc3d75 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -51,6 +51,7 @@ mainmenu "Linux Kernel Configuration" config S390 def_bool y + select HAVE_OPROFILE source "init/Kconfig" diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index b30c4c376a83..f868691801ba 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -8,6 +8,7 @@ mainmenu "Linux/SuperH Kernel Configuration" config SUPERH def_bool y select EMBEDDED + select HAVE_OPROFILE help The SuperH is a RISC processor targeted for use in embedded systems and consumer electronics; it was also used in the Sega Dreamcast diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 527adc808ad6..3d9bc2f0b471 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -63,6 +63,7 @@ config NR_CPUS config SPARC bool default y + select HAVE_OPROFILE # Identify this as a Sparc32 build config SPARC32 diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig index 158522f51d31..ca14d880d624 100644 --- a/arch/sparc64/Kconfig +++ b/arch/sparc64/Kconfig @@ -8,6 +8,7 @@ mainmenu "Linux/UltraSPARC Kernel Configuration" config SPARC bool default y + select HAVE_OPROFILE config SPARC64 bool diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 7109037bdf7c..65594884f32f 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -18,6 +18,7 @@ config X86_64 ### Arch settings config X86 def_bool y + select HAVE_OPROFILE config GENERIC_LOCKBREAK def_bool n @@ -106,10 +107,6 @@ config GENERIC_TIME_VSYSCALL config HAVE_SETUP_PER_CPU_AREA def_bool X86_64 -config ARCH_SUPPORTS_OPROFILE - bool - default y - select HAVE_KVM config ARCH_HIBERNATION_POSSIBLE diff --git a/kernel/Kconfig.instrumentation b/kernel/Kconfig.instrumentation index a00dcb610233..d9d010a271db 100644 --- a/kernel/Kconfig.instrumentation +++ b/kernel/Kconfig.instrumentation @@ -21,7 +21,7 @@ config PROFILING config OPROFILE tristate "OProfile system profiling (EXPERIMENTAL)" depends on PROFILING && !UML - depends on ARCH_SUPPORTS_OPROFILE || ALPHA || ARM || BLACKFIN || IA64 || M32R || PARISC || PPC || S390 || SUPERH || SPARC + depends on HAVE_OPROFILE help OProfile is a profiling system capable of profiling the whole system, include the kernel, kernel modules, libraries, @@ -29,6 +29,9 @@ config OPROFILE If unsure, say N. +config HAVE_OPROFILE + def_bool n + config KPROBES bool "Kprobes" depends on KALLSYMS && MODULES && !UML From 3f550096dede4430f83b16457da83bf429155ac2 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sat, 2 Feb 2008 15:10:35 -0500 Subject: [PATCH 09/13] Add HAVE_KPROBES Linus: On the per-architecture side, I do think it would be better to *not* have internal architecture knowledge in a generic file, and as such a line like depends on X86_32 || IA64 || PPC || S390 || SPARC64 || X86_64 || AVR32 really shouldn't exist in a file like kernel/Kconfig.instrumentation. It would be much better to do depends on ARCH_SUPPORTS_KPROBES in that generic file, and then architectures that do support it would just have a bool ARCH_SUPPORTS_KPROBES default y in *their* architecture files. That would seem to be much more logical, and is readable both for arch maintainers *and* for people who have no clue - and don't care - about which architecture is supposed to support which interface... Changelog: Actually, I know I gave this as the magic incantation, but now that I see it, I realize that I should have told you to just use config KPROBES_SUPPORT def_bool y instead, which is a bit denser. We seem to use both kinds of syntax for these things, but this is really what "def_bool" is there for... - Use HAVE_KPROBES - Use a select - Yet another update : Moving to HAVE_* now. - Update ARM for kprobes support. Signed-off-by: Mathieu Desnoyers Cc: Jeff Dike Cc: David Howells Cc: Ananth N Mavinakayanahalli Signed-off-by: Sam Ravnborg --- arch/arm/Kconfig | 1 + arch/avr32/Kconfig | 1 + arch/ia64/Kconfig | 1 + arch/powerpc/Kconfig | 1 + arch/ppc/Kconfig | 1 + arch/s390/Kconfig | 1 + arch/sparc64/Kconfig | 1 + arch/x86/Kconfig | 1 + kernel/Kconfig.instrumentation | 5 ++++- 9 files changed, 12 insertions(+), 1 deletion(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 3b3eb4ec3189..ea45eefbf832 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -11,6 +11,7 @@ config ARM select RTC_LIB select SYS_SUPPORTS_APM_EMULATION select HAVE_OPROFILE + select HAVE_KPROBES if (!XIP_KERNEL) help The ARM series is a line of low-power-consumption RISC chip designs licensed by ARM Ltd and targeted at embedded applications and diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig index b46932c4f9f1..0e56e96a17a7 100644 --- a/arch/avr32/Kconfig +++ b/arch/avr32/Kconfig @@ -11,6 +11,7 @@ config AVR32 # that we usually don't need on AVR32. select EMBEDDED select HAVE_OPROFILE + select HAVE_KPROBES help AVR32 is a high-performance 32-bit RISC microprocessor core, designed for cost-sensitive embedded applications, with particular diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 5e410f200c04..8db6324f7a83 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -16,6 +16,7 @@ config IA64 select PM if (!IA64_HP_SIM) select ARCH_SUPPORTS_MSI select HAVE_OPROFILE + select HAVE_KPROBES default y help The Itanium Processor Family is Intel's 64-bit successor to diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index c3c29e7d281a..c6f3eb58e4ed 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -88,6 +88,7 @@ config PPC bool default y select HAVE_OPROFILE + select HAVE_KPROBES config EARLY_PRINTK bool diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig index ea9eb4891b23..92e37f5b365b 100644 --- a/arch/ppc/Kconfig +++ b/arch/ppc/Kconfig @@ -43,6 +43,7 @@ config PPC bool default y select HAVE_OPROFILE + select HAVE_KPROBES config PPC32 bool diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index c561f6fc3d75..272c6c80fd7b 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -52,6 +52,7 @@ mainmenu "Linux Kernel Configuration" config S390 def_bool y select HAVE_OPROFILE + select HAVE_KPROBES source "init/Kconfig" diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig index ca14d880d624..cbdc80d74bcb 100644 --- a/arch/sparc64/Kconfig +++ b/arch/sparc64/Kconfig @@ -9,6 +9,7 @@ config SPARC bool default y select HAVE_OPROFILE + select HAVE_KPROBES config SPARC64 bool diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 65594884f32f..72db31c78666 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -19,6 +19,7 @@ config X86_64 config X86 def_bool y select HAVE_OPROFILE + select HAVE_KPROBES config GENERIC_LOCKBREAK def_bool n diff --git a/kernel/Kconfig.instrumentation b/kernel/Kconfig.instrumentation index d9d010a271db..2195b6544575 100644 --- a/kernel/Kconfig.instrumentation +++ b/kernel/Kconfig.instrumentation @@ -35,7 +35,7 @@ config HAVE_OPROFILE config KPROBES bool "Kprobes" depends on KALLSYMS && MODULES && !UML - depends on X86_32 || IA64 || PPC || S390 || SPARC64 || X86_64 || AVR32 || (ARM && !XIP_KERNEL) + depends on HAVE_KPROBES help Kprobes allows you to trap at almost any kernel address and execute a callback function. register_kprobe() establishes @@ -43,6 +43,9 @@ config KPROBES for kernel debugging, non-intrusive instrumentation and testing. If in doubt, say "N". +config HAVE_KPROBES + def_bool n + config MARKERS bool "Activate markers" help From 125e564582cbce6219397fc64556438420efae4c Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sat, 2 Feb 2008 15:10:36 -0500 Subject: [PATCH 10/13] Move Kconfig.instrumentation to arch/Kconfig and init/Kconfig Move the instrumentation Kconfig to arch/Kconfig for architecture dependent options - oprofile - kprobes and init/Kconfig for architecture independent options - profiling - markers Remove the "Instrumentation Support" menu. Everything moves to "General setup". Delete the kernel/Kconfig.instrumentation file. Signed-off-by: Mathieu Desnoyers Cc: Linus Torvalds Cc: Signed-off-by: Sam Ravnborg --- arch/Kconfig | 28 +++++++++++++++++ arch/alpha/Kconfig | 2 -- arch/arm/Kconfig | 2 -- arch/blackfin/Kconfig | 2 -- arch/cris/Kconfig | 2 -- arch/frv/Kconfig | 2 -- arch/h8300/Kconfig | 2 -- arch/ia64/Kconfig | 2 -- arch/m32r/Kconfig | 2 -- arch/m68k/Kconfig | 2 -- arch/m68knommu/Kconfig | 2 -- arch/mips/Kconfig | 2 -- arch/parisc/Kconfig | 2 -- arch/powerpc/Kconfig | 2 -- arch/ppc/Kconfig | 2 -- arch/s390/Kconfig | 2 -- arch/sh/Kconfig | 2 -- arch/sparc/Kconfig | 2 -- arch/sparc64/Kconfig | 2 -- arch/um/Kconfig | 2 -- arch/v850/Kconfig | 2 -- arch/x86/Kconfig | 2 -- arch/xtensa/Kconfig | 2 -- init/Kconfig | 12 ++++++++ kernel/Kconfig.instrumentation | 55 ---------------------------------- 25 files changed, 40 insertions(+), 99 deletions(-) delete mode 100644 kernel/Kconfig.instrumentation diff --git a/arch/Kconfig b/arch/Kconfig index 24917145058d..3d72dc3fc8f5 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -1,3 +1,31 @@ # # General architecture dependent options # + +config OPROFILE + tristate "OProfile system profiling (EXPERIMENTAL)" + depends on PROFILING + depends on HAVE_OPROFILE + help + OProfile is a profiling system capable of profiling the + whole system, include the kernel, kernel modules, libraries, + and applications. + + If unsure, say N. + +config HAVE_OPROFILE + def_bool n + +config KPROBES + bool "Kprobes" + depends on KALLSYMS && MODULES + depends on HAVE_KPROBES + help + Kprobes allows you to trap at almost any kernel address and + execute a callback function. register_kprobe() establishes + a probepoint and specifies the callback. Kprobes is useful + for kernel debugging, non-intrusive instrumentation and testing. + If in doubt, say "N". + +config HAVE_KPROBES + def_bool n diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 0ff5572b3b07..9abcd5fd8969 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig @@ -650,8 +650,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/alpha/Kconfig.debug" # DUMMY_CONSOLE may be defined in drivers/video/console/Kconfig diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ea45eefbf832..36176f40dfdf 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1147,8 +1147,6 @@ endmenu source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/arm/Kconfig.debug" source "security/Kconfig" diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 3ba89dc43297..ba21e33b8b1f 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig @@ -974,8 +974,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/blackfin/Kconfig.debug" source "security/Kconfig" diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig index 222da1501f47..7f0be4cd5e9a 100644 --- a/arch/cris/Kconfig +++ b/arch/cris/Kconfig @@ -213,8 +213,6 @@ source "drivers/pci/Kconfig" source "drivers/usb/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/cris/Kconfig.debug" source "security/Kconfig" diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index e3f965c91e22..68380cb2ff88 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig @@ -375,8 +375,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/frv/Kconfig.debug" source "security/Kconfig" diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig index ff6a8712bd6d..dc61222e1120 100644 --- a/arch/h8300/Kconfig +++ b/arch/h8300/Kconfig @@ -223,8 +223,6 @@ endmenu source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/h8300/Kconfig.debug" source "security/Kconfig" diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 8db6324f7a83..a0740fbd94d9 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -602,8 +602,6 @@ config IRQ_PER_CPU source "arch/ia64/hp/sim/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/ia64/Kconfig.debug" source "security/Kconfig" diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index b93897d65aec..12259759a2fe 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig @@ -427,8 +427,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/m32r/Kconfig.debug" source "security/Kconfig" diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 24e6bc09e7a7..8236e42ef711 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig @@ -678,8 +678,6 @@ endmenu source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/m68k/Kconfig.debug" source "security/Kconfig" diff --git a/arch/m68knommu/Kconfig b/arch/m68knommu/Kconfig index bd9213749ac2..6abbbb8aac5e 100644 --- a/arch/m68knommu/Kconfig +++ b/arch/m68knommu/Kconfig @@ -711,8 +711,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/m68knommu/Kconfig.debug" source "security/Kconfig" diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index eb8be5491c13..d38ebd3b1201 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -2096,8 +2096,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/mips/Kconfig.debug" source "security/Kconfig" diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index e1a2f77d3986..25c10fa69647 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -273,8 +273,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/parisc/Kconfig.debug" source "security/Kconfig" diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index c6f3eb58e4ed..b94d4502a477 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -715,8 +715,6 @@ source "arch/powerpc/sysdev/qe_lib/Kconfig" source "lib/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/powerpc/Kconfig.debug" source "security/Kconfig" diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig index 92e37f5b365b..531156f8919c 100644 --- a/arch/ppc/Kconfig +++ b/arch/ppc/Kconfig @@ -1258,8 +1258,6 @@ endmenu source "lib/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/ppc/Kconfig.debug" source "security/Kconfig" diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 272c6c80fd7b..974f9c3e89d9 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -528,8 +528,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/s390/Kconfig.debug" source "security/Kconfig" diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index f868691801ba..bfbd54a22bde 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -897,8 +897,6 @@ source "drivers/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/sh/Kconfig.debug" source "security/Kconfig" diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 3d9bc2f0b471..51008a2ba5b4 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -321,8 +321,6 @@ endmenu source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/sparc/Kconfig.debug" source "security/Kconfig" diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig index cbdc80d74bcb..a7739b507b74 100644 --- a/arch/sparc64/Kconfig +++ b/arch/sparc64/Kconfig @@ -467,8 +467,6 @@ source "drivers/sbus/char/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/sparc64/Kconfig.debug" source "security/Kconfig" diff --git a/arch/um/Kconfig b/arch/um/Kconfig index dd1689b814cb..55945db1313c 100644 --- a/arch/um/Kconfig +++ b/arch/um/Kconfig @@ -289,6 +289,4 @@ config INPUT bool default n -source "kernel/Kconfig.instrumentation" - source "arch/um/Kconfig.debug" diff --git a/arch/v850/Kconfig b/arch/v850/Kconfig index b6a50b8b38de..ace479ab273f 100644 --- a/arch/v850/Kconfig +++ b/arch/v850/Kconfig @@ -331,8 +331,6 @@ source "sound/Kconfig" source "drivers/usb/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/v850/Kconfig.debug" source "security/Kconfig" diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 72db31c78666..3162cb467ab3 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1595,8 +1595,6 @@ source "drivers/firmware/Kconfig" source "fs/Kconfig" -source "kernel/Kconfig.instrumentation" - source "arch/x86/Kconfig.debug" source "security/Kconfig" diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index 844721e8e3dd..5d5546ce88fe 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig @@ -246,8 +246,6 @@ config EMBEDDED_RAMDISK_IMAGE provide one yourself. endmenu -source "kernel/Kconfig.instrumentation" - source "arch/xtensa/Kconfig.debug" source "security/Kconfig" diff --git a/init/Kconfig b/init/Kconfig index 8de6c48cfde0..b2acdeb2d312 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -665,6 +665,18 @@ config SLOB endchoice +config PROFILING + bool "Profiling support (EXPERIMENTAL)" + help + Say Y here to enable the extended profiling support mechanisms used + by profilers such as OProfile. + +config MARKERS + bool "Activate markers" + help + Place an empty function call at each marker site. Can be + dynamically changed for a probe function. + source "arch/Kconfig" endmenu # General setup diff --git a/kernel/Kconfig.instrumentation b/kernel/Kconfig.instrumentation deleted file mode 100644 index 2195b6544575..000000000000 --- a/kernel/Kconfig.instrumentation +++ /dev/null @@ -1,55 +0,0 @@ -menuconfig INSTRUMENTATION - bool "Instrumentation Support" - default y - ---help--- - Say Y here to get to see options related to performance measurement, - system-wide debugging, and testing. This option alone does not add any - kernel code. - - If you say N, all options in this submenu will be skipped and - disabled. If you're trying to debug the kernel itself, go see the - Kernel Hacking menu. - -if INSTRUMENTATION - -config PROFILING - bool "Profiling support (EXPERIMENTAL)" - help - Say Y here to enable the extended profiling support mechanisms used - by profilers such as OProfile. - -config OPROFILE - tristate "OProfile system profiling (EXPERIMENTAL)" - depends on PROFILING && !UML - depends on HAVE_OPROFILE - help - OProfile is a profiling system capable of profiling the - whole system, include the kernel, kernel modules, libraries, - and applications. - - If unsure, say N. - -config HAVE_OPROFILE - def_bool n - -config KPROBES - bool "Kprobes" - depends on KALLSYMS && MODULES && !UML - depends on HAVE_KPROBES - help - Kprobes allows you to trap at almost any kernel address and - execute a callback function. register_kprobe() establishes - a probepoint and specifies the callback. Kprobes is useful - for kernel debugging, non-intrusive instrumentation and testing. - If in doubt, say "N". - -config HAVE_KPROBES - def_bool n - -config MARKERS - bool "Activate markers" - help - Place an empty function call at each marker site. Can be - dynamically changed for a probe function. - -endif # INSTRUMENTATION From fa95eb1f17a5fe7b3593cff4bf27dbe9ae6cac89 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sat, 2 Feb 2008 23:30:22 +0100 Subject: [PATCH 11/13] kbuild: do not warn about __*init/__*exit symbols being exported We have several legitimate uses where we export symbols annotated with one of: __devinit, __cpuinit, __meminit and their exit counterpart. So let's stop warning about those being exported in favour of adding all sorts of workaround to silence the warning. Signed-off-by: Sam Ravnborg --- scripts/mod/modpost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index c2e918e2cef1..5d546466e6b1 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -870,7 +870,7 @@ const struct sectioncheck sectioncheck[] = { /* Do not export init/exit functions or data */ { .fromsec = { "__ksymtab*", NULL }, - .tosec = { ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL }, + .tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL }, .mismatch = EXPORT_TO_INIT_EXIT } }; From ba3d05fb6369e617aee4f16bfce7ba5cbd30f26b Mon Sep 17 00:00:00 2001 From: Bryan Wu Date: Sun, 3 Feb 2008 14:13:26 +0800 Subject: [PATCH 12/13] kbuild: add svn revision information to setlocalversion follow git and mercurial style, include uncommitted changes detect Cc: Frans Pop Signed-off-by: Bryan Wu Signed-off-by: Sam Ravnborg --- scripts/setlocalversion | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) mode change 100644 => 100755 scripts/setlocalversion diff --git a/scripts/setlocalversion b/scripts/setlocalversion old mode 100644 new mode 100755 index 52f032e409a3..1c1bdaf7348a --- a/scripts/setlocalversion +++ b/scripts/setlocalversion @@ -45,3 +45,19 @@ if hgid=`hg id 2>/dev/null`; then # All done with mercurial exit fi + +# Check for svn and a svn repo. +if rev=`svn info 2>/dev/null | grep '^Revision'`; then + rev=`echo $rev | awk '{print $NF}'` + changes=`svn status 2>/dev/null | grep '^[AMD]' | wc -l` + + # Are there uncommitted changes? + if [ $changes != 0 ]; then + printf -- '-svn%s%s%s' "$rev" -dirty "$changes" + else + printf -- '-svn%s' "$rev" + fi + + # All done with svn + exit +fi From 8891fec65ac5b5a74b50c705e31b66c92c3eddeb Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sun, 3 Feb 2008 21:55:49 +0100 Subject: [PATCH 13/13] scsi: fix dependency bug in aic7 Makefile Building the aic7xxx driver includes the copy of an .h file from a _shipped file. In a highly parallel build Ingo saw that the build sometimes failed (included distcc usage). It was tracked down to a missing dependency from the .c source file to the generated .h file. We started to build the .c file before the copy (cat) operation of the .h file completed and we then only got half of the definitions from the copied .h file. Add an explicit dependency from the .c files to the generated .h files so make knows all dependencies and finsih the build of the .h files before it starts building the .o files. Ingo tested this fix and reported: good news: hundreds of successful kernel builds and no failures overnight. Signed-off-by: Sam Ravnborg Acked-by: Ingo Molnar Acked-by: James Bottomley --- drivers/scsi/aic7xxx/Makefile | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/drivers/scsi/aic7xxx/Makefile b/drivers/scsi/aic7xxx/Makefile index e4f70c563bc2..4c549540a35d 100644 --- a/drivers/scsi/aic7xxx/Makefile +++ b/drivers/scsi/aic7xxx/Makefile @@ -44,13 +44,8 @@ clean-files += aic79xx_seq.h aic79xx_reg.h aic79xx_reg_print.c # Dependencies for generated files need to be listed explicitly -$(obj)/aic7xxx_core.o: $(obj)/aic7xxx_seq.h -$(obj)/aic7xxx_core.o: $(obj)/aic7xxx_reg.h -$(obj)/aic79xx_core.o: $(obj)/aic79xx_seq.h -$(obj)/aic79xx_core.o: $(obj)/aic79xx_reg.h - -$(addprefix $(obj)/,$(aic7xxx-y)): $(obj)/aic7xxx_seq.h -$(addprefix $(obj)/,$(aic79xx-y)): $(obj)/aic79xx_seq.h +$(addprefix $(src)/,$(aic7xxx-y:.o=.c)): $(obj)/aic7xxx_seq.h $(obj)/aic7xxx_reg.h +$(addprefix $(src)/,$(aic79xx-y:.o=.c)): $(obj)/aic79xx_seq.h $(obj)/aic79xx_reg.h aic7xxx-gen-$(CONFIG_AIC7XXX_BUILD_FIRMWARE) := $(obj)/aic7xxx_reg.h aic7xxx-gen-$(CONFIG_AIC7XXX_REG_PRETTY_PRINT) += $(obj)/aic7xxx_reg_print.c