cpufreq are the only remaining bit to be solved for me to have a modpost
clean build for sparc64 - so I took one more look at it.
changelog entry:
Fix section mismatch warnings in cpufreq:
WARNING: drivers/cpufreq/cpufreq_stats.o - Section mismatch: reference to .init.text: from .data between 'cpufreq_stat_cpu_notifier' (at offset 0xa8) and 'notifier_policy_block'
WARNING: drivers/cpufreq/cpufreq_stats.o - Section mismatch: reference to .init.text: from .exit.text after 'cleanup_module' (at offset 0x30)
The culprint is the function: cpufreq_stat_cpu_callback
It is marked __cpuinit which get's redefined to __init in case
HOTPLUG_CPU is not enabled as per. init.h:
#ifdef CONFIG_HOTPLUG_CPU
#define __cpuinit
#else
#define __cpuinit __init
#endif
$> grep HOTPLUG .config
CONFIG_HOTPLUG=y
But cpufreq_stat_cpu_callback() is used in:
__exit cpufreq_stats_exit()
static struct notifier_block cpufreq_stat_cpu_notifier
cpufreq_stat_cpu_notifier is again used in:
__init cpufreq_stats_init()
__exit cpufreq_stats_exit()
So in both cases used from both __init and __exit context.
Only solution seems to drop __cpuinit tag.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Dave Jones <davej@redhat.com>
return 0;
}
-static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,
+static int cpufreq_stat_cpu_callback(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;