Re: linux-next-20090324: undefined reference to `__this_fixmap_does_not_exist\'

Wang Chen
2009-03-25T09:57:24Z

Wang Chen said the following on 2009-3-25 16:52:
> Wang Chen said the following on 2009-3-25 12:58:
>> Tetsuo Handa said the following on 2009-3-25 11:24:
>>> Hello.
>>>
>>> I encountered below error.
>>>
>>> arch/x86/mm/built-in.o(.init.text+0x1831): In function `early_ioremap_init':
>>> : undefined reference to `__this_fixmap_does_not_exist'
>>> make: *** [.tmp_vmlinux1] Error 1
>>>
>>> Config is at http://I-love.SAKURA.ne.jp/tmp/config-2.6.29-next-20090324
>>>
>> Tetsuo, I've tried the latest tip, it's OK.
>> I can't trigger the same problem as you do.
>> So I will try linux-next later.
>>
>
> Tetsuo
>
> I've "make" tested linux-next-20090324 with your config.
> Still can't trigger the error.
> It's strange :(
>

Maybe we use different gcc versions.
Please try following patch.

From: Wang Chen <wangchen@cn.fujitsu.com>
Subject: [PATCH] use __fix_to_virt(), because we are sure it's safe

Commit:8827247ffcc9e880cbe4705655065cf011265157 used a variable(which would be
optimized to constant) as fix_to_virt()'s parameter.
It's depended on gcc's optimization and maybe failed on old gcc.

We can use __fix_to_vir() insteadly, because we know it's safe and don't need
link time error reporting.

Signed-off-by: Wang Chen <wangchen@cn.fujitsu.com>
Reported-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
---
ioremap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- arch/x86/mm/ioremap.c.orig 2009-03-25 17:36:01.000000000 +0800
+++ arch/x86/mm/ioremap.c 2009-03-25 17:36:54.000000000 +0800
@@ -523,7 +523,7 @@ void __init early_ioremap_init(void)
printk(KERN_INFO "early_ioremap_init()\n");

for (i = 0; i < FIX_BTMAPS_SLOTS; i++)
- slot_virt[i] = fix_to_virt(FIX_BTMAP_BEGIN - NR_FIX_BTMAPS*i);
+ slot_virt[i] = __fix_to_virt(FIX_BTMAP_BEGIN - NR_FIX_BTMAPS*i);

pmd = early_ioremap_pmd(fix_to_virt(FIX_BTMAP_BEGIN));
if (sizeof(bm_pte)) {