2005-04-04 18:12:44

by maximilian attems

[permalink] [raw]
Subject: [patch 3/3] efi eliminate bad section references

Randy please double check especially this one.
there may be a better solution.

Fix efi section references:
remove __initdata for struct efi efi_phys
and struct efi_memory_map memmap

Error: ./arch/i386/kernel/efi.o .text refers to 000000d3 R_386_32
.init.data
Error: ./arch/i386/kernel/efi.o .text refers to 000000ff R_386_32
.init.data

efi_memmap_walk (which is not __init nor static)
accesses both efi_phys and memmap.

Signed-off-by: maximilian attems <[email protected]>


--- linux-2.6.12-rc1-bk5/arch/i386/kernel/efi.c.orig 2005-04-04 19:41:13.109877906 +0200
+++ linux-2.6.12-rc1-bk5/arch/i386/kernel/efi.c 2005-04-04 19:34:23.886343763 +0200
@@ -46,8 +46,8 @@

struct efi efi;
EXPORT_SYMBOL(efi);
-static struct efi efi_phys __initdata;
-struct efi_memory_map memmap __initdata;
+static struct efi efi_phys;
+struct efi_memory_map memmap;

/*
* We require an early boot_ioremap mapping mechanism initially


2005-04-04 21:53:17

by Randy.Dunlap

[permalink] [raw]
Subject: Re: [patch 3/3] efi eliminate bad section references

(adding Matt Domsch to cc:)

maximilian attems wrote:
> Randy please double check especially this one.
> there may be a better solution.
>
> Fix efi section references:
> remove __initdata for struct efi efi_phys
> and struct efi_memory_map memmap

'memmap' can be used after init, so remove __initdata from it
certainly looks correct to me.

Regarding efi_phys:
'efi_get_time' can be called after init (that "inline ... _init"
on it is confusing to me), and it calls phys_efi_get_time(),
which uses 'efi_phys', so efi_phys should not be marked
as __initdata.

OTOH, phys_efi_set_virtual_address_map() can be marked as __init.
You could add that as an efficiency measure.

so
Acked-by: Randy Dunlap <[email protected]>

> Error: ./arch/i386/kernel/efi.o .text refers to 000000d3 R_386_32
> .init.data
> Error: ./arch/i386/kernel/efi.o .text refers to 000000ff R_386_32
> .init.data
>
> efi_memmap_walk (which is not __init nor static)
> accesses both efi_phys and memmap.
>
> Signed-off-by: maximilian attems <[email protected]>
>
>
> --- linux-2.6.12-rc1-bk5/arch/i386/kernel/efi.c.orig 2005-04-04 19:41:13.109877906 +0200
> +++ linux-2.6.12-rc1-bk5/arch/i386/kernel/efi.c 2005-04-04 19:34:23.886343763 +0200
> @@ -46,8 +46,8 @@
>
> struct efi efi;
> EXPORT_SYMBOL(efi);
> -static struct efi efi_phys __initdata;
> -struct efi_memory_map memmap __initdata;
> +static struct efi efi_phys;
> +struct efi_memory_map memmap;
>
> /*
> * We require an early boot_ioremap mapping mechanism initially


--
~Randy