[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