[PATCH] powerpc: Fix dynamic relocation

Alexander Graf agraf at suse.de
Sat Mar 9 21:12:24 EST 2013



Am 09.03.2013 um 08:29 schrieb Benjamin Herrenschmidt <benh at kernel.crashing.org>:

> On Sat, 2013-03-09 at 02:02 +0100, Alexander Graf wrote:
>> Commit 5ac47f7a introduced dynamic relocation of code by manually
>> relocating TOC entries. However, we need to access the TOC using
>> the physical address that we have for it, not the virtual address
>> that we can't even access yet.
>> 
>> Drop the offset from the TOC accessing pointer.
>> 
>> This fixes Linux 3.9 booting on OpenBIOS for me.
>> 
>> Signed-off-by: Alexander Graf <agraf at suse.de>
>> 
>> ---
>> 
>> I've also encountered breakage on a G5 Mac, not sure if it's related.
>> I'll have to test whether this is the culprit on that one too.
> 
> That might fix the mac too.. Anton's patch assumed OF ran in real mode
> in which case the top bits of the address are ignored, meaning we could
> use kernel virtual addresses but that isn't the case with Apple OF which
> has MMU enabled and maps memory 1:1. I suppose OpenBIOS has the same
> problem ? Or is this a 32-bit issue as well ?

That's exactly what OpenBIOS does, yes :).

Alex

> 
>> Ben, please make sure that this gets into 3.9.
>> ---
>> arch/powerpc/kernel/prom_init.c |    2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>> 
>> diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
>> index 7f7fb7f..2bf7cc3 100644
>> --- a/arch/powerpc/kernel/prom_init.c
>> +++ b/arch/powerpc/kernel/prom_init.c
>> @@ -2851,7 +2851,7 @@ static void reloc_toc(void)
>>        (__prom_init_toc_end - __prom_init_toc_start) / sizeof(long);
>> 
>>    /* Need to add offset to get at __prom_init_toc_start */
>> -    __reloc_toc(__prom_init_toc_start + offset, offset, nr_entries);
>> +    __reloc_toc(__prom_init_toc_start, offset, nr_entries);
>> 
>>    mb();
>> }
> 
> 


More information about the Linuxppc-dev mailing list