>> At this point ti->livepatch_sp points to the next CPUs thread_info for 
>> softirq_ctx?
> Sorry I'm not sure what you mean.
>
> None of this relates to the current CPUs thread info.
Oh! I meant that klp_init_thread_info points to the end of (struct thread_info 
{} + 1) in the stack of the thread/task, but with the irq_contexts they are a 
separate array and not on stack
>>> diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
>>> index 3807fb05b6de..1b6cabb8e715 100644
>>> --- a/arch/powerpc/kernel/setup_64.c
>>> +++ b/arch/powerpc/kernel/setup_64.c
>>> @@ -69,6 +69,7 @@
>>>  #include <asm/kvm_ppc.h>
>>>  #include <asm/hugetlb.h>
>>>  #include <asm/epapr_hcalls.h>
>>> +#include <asm/livepatch.h>
>>>  
>>>  #ifdef DEBUG
>>>  #define DBG(fmt...) udbg_printf(fmt)
>>> @@ -667,16 +668,16 @@ static void __init emergency_stack_init(void)
>>>     limit = min(safe_stack_limit(), ppc64_rma_size);
>>>  
>>>     for_each_possible_cpu(i) {
>>> -           unsigned long sp;
>>> -           sp  = memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit);
>>> -           sp += THREAD_SIZE;
>>> -           paca[i].emergency_sp = __va(sp);
>>> +           struct thread_info *ti;
>>> +           ti = __va(memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit));
>>> +           klp_init_thread_info(ti);
>>> +           paca[i].emergency_sp = (void *)ti + THREAD_SIZE;
>>  
>> Does emergency_sp still end up 128 byte aligned after this?
> It should end up THREAD_SIZE aligned as before, due to the 
> memblock_alloc_base().
Yep.. I missed it.. so where is the space for ti? The stack is going to go grow 
downwards from ti+THREAD_SIZE
>>>  #ifdef CONFIG_PPC_BOOK3S_64
>>>             /* emergency stack for machine check exception handling. */
>>> -           sp  = memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit);
>>> -           sp += THREAD_SIZE;
>>> -           paca[i].mc_emergency_sp = __va(sp);
>>> +           ti = __va(memblock_alloc_base(THREAD_SIZE, THREAD_SIZE, limit));
>>> +           klp_init_thread_info(ti);
>> Do we care about live-patching in this context? Are we mixing per-thread and 
>> per-cpu contexts?
> Well we probably don't want to be doing live patching when we're on the
> emergency stacks. But we have no control over whether that happens so we have
> to support it.
>

OK.. I was wondering if the code will even work.. I wonder if the ftrace data 
structures will work in real mode, including the hash/etc.

Balbir

Reply via email to