Skip to contentSkip to conversation

longrun.

DISCUSSION Dave Jones 2 participants 2 messages Jul 3, 2004

lore
Share & tools
lore

Dave Jones

author
#0 lore raw

I was just looking into this..
Error: ./arch/i386/kernel/cpu/cpufreq/longrun.o .data refers to 00000018 R_386_32 .init.text

When I noticed that longrun_get_policy() is only called from longrun_cpu_init(). Is there a reason this driver doesn't have a .getpolicy method pointer pointing to this routine ?

Incidentally, I'm a bit puzzled by the error.
The only __init functions are ..

longrun_get_policy
longrun_determine_freqs
longrun_cpu_init
longrun_init

The first two are only called by the 3rd. and the 3rd/4th are only ever called at init time.

What do I miss here?

Dave

#1 lore raw
Quoted 6 lines · Dave Jones

I was just looking into this..
Error: ./arch/i386/kernel/cpu/cpufreq/longrun.o .data refers to 00000018 R_386_32 .init.text

When I noticed that longrun_get_policy() is only called from longrun_cpu_init(). Is there a reason this driver doesn't have a .getpolicy method pointer pointing to this routine ?

Because "policy" is/should be driver specific. Longrun CPUs can be set to a frequency range _and_ a "policy" (powersave or performance); even though we currently assume all such "range" CPUs support these two modes we should stop doing so soon. So, the core doesn't implement a "getpolicy" method -- only a "get" (==get current frequency) function. For Longrun CPUs, this is purely informational as neither the TSC nor any other part of the kernel needs to know the current frequency, and the frequency may and most likely will change "behind the kernel's back". And it is implemented in

static unsigned int longrun_get(unsigned int cpu)

Quoted 9 lines

Incidentally, I'm a bit puzzled by the error.
The only __init functions are ..

longrun_get_policy
longrun_determine_freqs
longrun_cpu_init
longrun_init

Quoted 4 lines

The first two are only called by the 3rd. and the 3rd/4th are only ever called at init time.

What do I miss here?

Sorry, don't know what's broken here. However, I might suspect these functions being __init() [*] -- could you change that to __devinit and/or remove it completely, and re-test, please?

Thanks,
Dominik

[*] ... I know, it was me ...