Re: cpufreq.c:(.text+0xaf178): undefined reference to `cpufreq_gov_performance'

Previous thread: [PATCH]hpet and rtc max_user_freq predefine in Kconfig by Ni@m on Wednesday, August 1, 2007 - 7:27 pm. (1 message)

Next thread: [PATCH] Fix two potential mem leaks in MPT Fusion (mpt_attach()) by Jesper Juhl on Wednesday, August 1, 2007 - 7:55 pm. (11 messages)
To: LKML <linux-kernel@...>, Andrew Morton <akpm@...>
Date: Wednesday, August 1, 2007 - 7:31 pm

LD .tmp_vmlinux1
drivers/built-in.o: In function `__cpufreq_governor':
cpufreq.c:(.text+0xaf178): undefined reference to `cpufreq_gov_performance'
cpufreq.c:(.text+0xaf18a): undefined reference to `cpufreq_gov_performance'
make: *** [.tmp_vmlinux1] Error 1

# Automatically generated make config: don't edit
# Linux kernel version: 2.6.23-rc1-mm2
# Wed Aug 1 15:46:12 2007
#
CONFIG_X86_32=y
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_NONIRQ_WAKEUP=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_SEMAPHORE_SLEEPERS=y
CONFIG_X86=y
CONFIG_MMU=y
CONFIG_ZONE_DMA=y
CONFIG_QUICKLIST=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_DMI=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"

#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SWAP_PREFETCH=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
CONFIG_USER_NS=y
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=18
CONFIG_CONTAINERS=y
# CONFIG_CONTAINER_DEBUG is not set
CONFIG_CONTAINER_NS=y
CONFIG_CONTAINER_CPUACCT=y
# CONFIG_CPUSETS is not set
# CONFIG_SYSFS_DEPRECATED is not set
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
# CONFIG_EMBEDDED is not set
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CON...

To: Miles Lane <miles.lane@...>
Cc: LKML <linux-kernel@...>, Thomas Renninger <trenn@...>
Date: Wednesday, August 1, 2007 - 7:57 pm

On Wed, 1 Aug 2007 16:31:46 -0700

<useful thanks. But snipped>
-

To: Andrew Morton <akpm@...>
Cc: Miles Lane <miles.lane@...>, LKML <linux-kernel@...>
Date: Thursday, August 2, 2007 - 7:15 am

Miles, could you send me or point me to the offending .config file.

Thanks,

Thomas

-

To: <trenn@...>
Cc: Andrew Morton <akpm@...>, Miles Lane <miles.lane@...>, LKML <linux-kernel@...>
Date: Thursday, August 2, 2007 - 8:04 am

Gabriel
-

To: Andrew Morton <akpm@...>
Cc: Miles Lane <miles.lane@...>, LKML <linux-kernel@...>, Thomas Renninger <trenn@...>
Date: Wednesday, August 1, 2007 - 8:28 pm

Is this patch :

cpufreq-allow-ondemand-and-conservative-cpufreq-governors-to-be-used-as-default.patch

Reverting it here fixes the error.

Gabriel
-

To: Gabriel C <nix.or.die@...>, <davej@...>
Cc: Andrew Morton <akpm@...>, Miles Lane <miles.lane@...>, LKML <linux-kernel@...>, Thomas Renninger <trenn@...>, <cpufreq@...>
Date: Thursday, August 2, 2007 - 9:48 am

cu
Adrian

<-- snip -->

With the 'performance' governor always as a fallback it must always be
compiled into the kernel.

Signed-off-by: Adrian Bunk <bunk@stusta.de>

---

drivers/cpufreq/Kconfig | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

d7418849ec236338ec5ac74c0d66e5aaae466ffe
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
index 721f86f..91f7cfd 100644
--- a/drivers/cpufreq/Kconfig
+++ b/drivers/cpufreq/Kconfig
@@ -84,7 +84,6 @@ config CPU_FREQ_DEFAULT_GOV_USERSPACE
config CPU_FREQ_DEFAULT_GOV_ONDEMAND
bool "ondemand"
select CPU_FREQ_GOV_ONDEMAND
- select CPU_FREQ_GOV_PERFORMANCE
help
Use the CPUFreq governor 'ondemand' as default. This allows
you to get a full dynamic frequency capable system by simply
@@ -96,7 +95,6 @@ config CPU_FREQ_DEFAULT_GOV_ONDEMAND
config CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
bool "conservative"
select CPU_FREQ_GOV_CONSERVATIVE
- select CPU_FREQ_GOV_PERFORMANCE
help
Use the CPUFreq governor 'conservative' as default. This allows
you to get a full dynamic frequency capable system by simply
@@ -107,7 +105,8 @@ config CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
endchoice

config CPU_FREQ_GOV_PERFORMANCE
- tristate "'performance' governor"
+ tristate
+ default y
help
This cpufreq governor sets the frequency statically to the
highest available CPU frequency.

-

To: Adrian Bunk <bunk@...>
Cc: Gabriel C <nix.or.die@...>, <davej@...>, Andrew Morton <akpm@...>, Miles Lane <miles.lane@...>, LKML <linux-kernel@...>, <cpufreq@...>, Pallipadi, Venkatesh <venkatesh.pallipadi@...>
Date: Thursday, August 2, 2007 - 10:38 am

Or this one.
Advantage: You can still have cpufreq core without the performance
governor built.
Disadvantage: The logic whether transition latency checks are
needed/done is moved to Kconfig.
Means, if you write a governor that has transition
latency values above 0, you must let it depend on
the performance governor in Kconfig.

Hope I got all .config possibilities with that one now.
Attached is also a replacement patch for this one:
cpufreq-allow-ondemand-and-conservative-cpufreq-governors-to-be-used-as-default.patch

CPUfreq: Only check for transition latency on problematic governors

Signed-off-by: Thomas Renninger <trenn@suse.de>
--

--- linux-2.6.23-rc1-mm2/include/linux/cpufreq.h 2007-08-02 16:01:36.000000000 +0200
+++ linux-2.6.23-rc1-mm2_fixed/include/linux/cpufreq.h 2007-08-02 15:21:28.000000000 +0200
@@ -299,8 +299,10 @@ static inline unsigned int cpufreq_get(u
Performance governor is fallback governor if any other gov failed to
auto load due latency restrictions
*/
+#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
extern struct cpufreq_governor cpufreq_gov_performance;
#define CPUFREQ_PERFORMANCE_GOVERNOR (&cpufreq_gov_performance)
+#endif
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_performance)
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE)
--- linux-2.6.23-rc1-mm2/drivers/cpufreq/cpufreq.c 2007-08-02 16:01:35.000000000 +0200
+++ linux-2.6.23-rc1-mm2_fixed/drivers/cpufreq/cpufreq.c 2007-08-02 16:23:09.000000000 +0200
@@ -1484,17 +1484,30 @@ static int __cpufreq_governor(struct cpu
unsigned int event)
{
int ret;
+
+ /* Only must be defined when default governor is known to have latency
+ restrictions, like e.g. conservative or ondemand.
+ That this is the case is already ensured in Kconfig
+ */
+#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
struct cpufreq_governor *gov = CPUFREQ_PERFORMANCE_GOVERNOR;
+#else
+ ...

To: Thomas Renninger <trenn@...>
Cc: Gabriel C <nix.or.die@...>, <davej@...>, Andrew Morton <akpm@...>, Miles Lane <miles.lane@...>, LKML <linux-kernel@...>, <cpufreq@...>, Pallipadi, Venkatesh <venkatesh.pallipadi@...>
Date: Thursday, August 2, 2007 - 10:54 am

Looks good, but you could remove CPUFREQ_PERFORMANCE_GOVERNOR and
directly use cpufreq_gov_performance.

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed

-

To: Adrian Bunk <bunk@...>, akpm <akpm@...>
Cc: Gabriel C <nix.or.die@...>, <davej@...>, Miles Lane <miles.lane@...>, LKML <linux-kernel@...>, <cpufreq@...>, Pallipadi, Venkatesh <venkatesh.pallipadi@...>
Date: Thursday, August 2, 2007 - 11:24 am

Thanks.
I cut out the "#define CPUFREQ_PERFORMANCE_GOVERNOR (&cpufreq_gov_performance)"
in include/linux/cpufreq.h
and replaced CPUFREQ_PERFORMANCE_GOVERNOR with &cpufreq_gov_performance.

The old patch should revert cleanly, so a replacement patch is more
useful? Tell me if you need a new on top patch.
The patch that should get replaced is this one:
cpufreq-allow-ondemand-and-conservative-cpufreq-governors-to-be-used-as-default.patch

Thanks,

Thomas

--------

Allow ondemand and conservative cpufreq governors to be used as default

Depending on the transition latency of the HW for cpufreq switches, the
ondemand or conservative governor cannot be used with certain cpufreq drivers.
Still the ondemand should be the default governor on a wide range of systems.
This patch allows this and lets the governor fallback to the performance
governor at cpufreq driver load time, if the driver does not support fast
enough frequency switching.

Main benefit is that on e.g. installation or other systems without userspace
support a working dynamic cpufreq support can be achieved on most systems by
simply loading the cpufreq driver. This is especially essential for recent
x86(_64) laptop hardware which may rely on working dynamic cpufreq OS support.

Signed-off-by: Thomas Renninger <trenn@suse.de>

---
drivers/cpufreq/Kconfig | 27 +++++++++++++++++++++++----
drivers/cpufreq/cpufreq.c | 25 +++++++++++++++++++++++++
drivers/cpufreq/cpufreq_conservative.c | 19 +++++++++----------
drivers/cpufreq/cpufreq_ondemand.c | 22 +++++++++-------------
include/linux/cpufreq.h | 21 ++++++++++++++++++---
5 files changed, 84 insertions(+), 30 deletions(-)

Index: linux-2.6.23-rc1-mm2_fixed/drivers/cpufreq/cpufreq_ondemand.c
===================================================================
--- linux-2.6.23-rc1-mm2_fixed.orig/drivers/cpufreq/cpufreq_ondemand.c
+++ linux-2.6.23-rc1-mm2_fixed/drivers/cpufreq/cpufreq_ondemand...

Previous thread: [PATCH]hpet and rtc max_user_freq predefine in Kconfig by Ni@m on Wednesday, August 1, 2007 - 7:27 pm. (1 message)

Next thread: [PATCH] Fix two potential mem leaks in MPT Fusion (mpt_attach()) by Jesper Juhl on Wednesday, August 1, 2007 - 7:55 pm. (11 messages)