ACK: [PATCH] powerpc/64: Fix HMI exception on LE with CONFIG_RELOCATABLE=y

Manoj Iyer manoj.iyer at canonical.com
Mon Jul 31 15:43:56 UTC 2017


Looks like this was acked, but I dont see any update to bugs wrt to fix 
commit etc on the bug. 
https://bugs.launchpad.net/ubuntu-power-systems/+bug/1684054

was this fixed-committed ?

On Fri, Jul 21, 2017 at 4:05 AM, Colin Ian King 
<colin.king at canonical.com> wrote:
> On 20/07/17 00:41, Manoj Iyer wrote:
>>  From: Michael Ellerman <mpe at ellerman.id.au>
>> 
>>  Prior to commit 2337d207288f ("powerpc/64: CONFIG_RELOCATABLE 
>> support for hmi
>>  interrupts"), the branch from hmi_exception_early() to 
>> hmi_exception_realmode()
>>  was just a bl hmi_exception_realmode, which the linker would turn 
>> into a bl to
>>  the local entry point of hmi_exception_realmode. This was broken 
>> when
>>  CONFIG_RELOCATABLE=y because hmi_exception_realmode() is not in the 
>> low part of
>>  the kernel text that is copied down to 0x0.
>> 
>>  But in fixing that, we added a new bug on little endian kernels. 
>> Because the
>>  branch is now a bctrl when CONFIG_RELOCATABLE=y, we branch to the 
>> global entry
>>  point of hmi_exception_realmode(). The global entry point must be 
>> called with
>>  r12 containing the address of hmi_exception_realmode(), because it 
>> uses that
>>  value to calculate the TOC value (r2).
>> 
>>  This may manifest as a checkstop, because we take a junk value from 
>> r12 which
>>  came from HSRR1, add a small constant to it and then use that as 
>> the TOC
>>  pointer. The HSRR1 value will have 0x9 as the top nibble, which 
>> puts it above
>>  RAM and somewhere in MMIO space.
>> 
>>  Fix it by changing the BRANCH_LINK_TO_FAR() macro to always use r12 
>> to load the
>>  label we're branching to. This means r12 will be setup correctly on 
>> LE, fixing
>>  this bug, and r12 is also volatile across function calls on BE so 
>> it's a good
>>  choice anyway.
>> 
>>  BugLink: https://launchpad.net/bugs/1684054
>> 
>>  Fixes: 2337d207288f ("powerpc/64: CONFIG_RELOCATABLE support for 
>> hmi interrupts")
>>  Reported-by: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
>>  Acked-by: Nicholas Piggin <npiggin at gmail.com>
>>  Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
>>  (cherry picked from commit be5c5e843c4afa1c8397cb740b6032bd4142f32d)
>>  Signed-off-by: Manoj Iyer <manoj.iyer at canonical.com>
>>  ---
>>   arch/powerpc/include/asm/exception-64s.h | 8 ++++----
>>   arch/powerpc/kernel/exceptions-64s.S     | 2 +-
>>   2 files changed, 5 insertions(+), 5 deletions(-)
>> 
>>  diff --git a/arch/powerpc/include/asm/exception-64s.h 
>> b/arch/powerpc/include/asm/exception-64s.h
>>  index 14752eee3d0c..ed3beadd2cc5 100644
>>  --- a/arch/powerpc/include/asm/exception-64s.h
>>  +++ b/arch/powerpc/include/asm/exception-64s.h
>>  @@ -236,9 +236,9 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
>>   	mtctr	reg;							\
>>   	bctr
>> 
>>  -#define BRANCH_LINK_TO_FAR(reg, label)					\
>>  -	__LOAD_FAR_HANDLER(reg, label);					\
>>  -	mtctr	reg;							\
>>  +#define BRANCH_LINK_TO_FAR(label)					\
>>  +	__LOAD_FAR_HANDLER(r12, label);					\
>>  +	mtctr	r12;							\
>>   	bctrl
>> 
>>   /*
>>  @@ -265,7 +265,7 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
>>   #define BRANCH_TO_COMMON(reg, label)					\
>>   	b	label
>> 
>>  -#define BRANCH_LINK_TO_FAR(reg, label)					\
>>  +#define BRANCH_LINK_TO_FAR(label)					\
>>   	bl	label
>> 
>>   #define BRANCH_TO_KVM(reg, label)					\
>>  diff --git a/arch/powerpc/kernel/exceptions-64s.S 
>> b/arch/powerpc/kernel/exceptions-64s.S
>>  index 79318275e507..78456131385d 100644
>>  --- a/arch/powerpc/kernel/exceptions-64s.S
>>  +++ b/arch/powerpc/kernel/exceptions-64s.S
>>  @@ -986,7 +986,7 @@ TRAMP_REAL_BEGIN(hmi_exception_early)
>>   	EXCEPTION_PROLOG_COMMON_2(PACA_EXGEN)
>>   	EXCEPTION_PROLOG_COMMON_3(0xe60)
>>   	addi	r3,r1,STACK_FRAME_OVERHEAD
>>  -	BRANCH_LINK_TO_FAR(r4, hmi_exception_realmode)
>>  +	BRANCH_LINK_TO_FAR(hmi_exception_realmode) /* Function call ABI */
>>   	/* Windup the stack. */
>>   	/* Move original HSRR0 and HSRR1 into the respective regs */
>>   	ld	r9,_MSR(r1)
>> 
> 
> Upstream cherry pick and has positive test results. Thanks Manoj.
> 
> Acked-by: Colin Ian King <colin.king at canonical.com>
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20170731/be17fc42/attachment.html>


More information about the kernel-team mailing list