linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Nicholas Piggin <npiggin@gmail.com>
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: [RFC PATCH 02/12] powerpc: remove arguments from interrupt handler functions
Date: Tue, 8 Sep 2020 10:50:14 +0200	[thread overview]
Message-ID: <08ed0a91-b231-1dbc-ba21-6247de03bcd2@csgroup.eu> (raw)
In-Reply-To: <a4eac9b0-da50-de8a-439e-173da7c20252@csgroup.eu>



Le 08/09/2020 à 10:29, Christophe Leroy a écrit :
> 
> 
> Le 08/09/2020 à 09:48, Nicholas Piggin a écrit :
>> Excerpts from Christophe Leroy's message of September 7, 2020 9:34 pm:
>>> On Mon, 2020-09-07 at 11:20 +0200, Christophe Leroy wrote:
>>>>
>>>> Le 05/09/2020 à 19:43, Nicholas Piggin a écrit :
>>>>> Make interrupt handlers all just take the pt_regs * argument and load
>>>>> DAR/DSISR etc from that. Make those that return a value return long.
>>>>
>>>> I like this, it will likely simplify a bit the VMAP_STACK mess.
>>>>
>>>> Not sure it is that easy. My board is stuck after the start of init.
>>>>
>>>>
>>>> On the 8xx, on Instruction TLB Error exception, we do
>>>>
>>>>     andis.    r5,r9,DSISR_SRR1_MATCH_32S@h /* Filter relevant SRR1 
>>>> bits */
>>>>
>>>> On book3s/32, on ISI exception we do:
>>>>     andis.    r5,r9,DSISR_SRR1_MATCH_32S@h /* Filter relevant SRR1 
>>>> bits */
>>>>
>>>> On 40x and bookE, on ISI exception we do:
>>>>     li    r5,0            /* Pass zero as arg3 */
>>>>
>>>>
>>>> And regs->dsisr will just contain nothing
>>>>
>>>> So it means we should at least write back r5 into regs->dsisr from 
>>>> there
>>>> ? The performance impact should be minimal as we already write _DAR so
>>>> the cache line should already be in the cache.
>>>>
>>>> A hacky 'stw r5, _DSISR(r1)' in handle_page_fault() does the trick,
>>>> allthough we don't want to do it for both ISI and DSI at the end, so
>>>> you'll have to do it in every head_xxx.S
>>>
>>> To get you series build and work, I did the following hacks:
>>
>> Great, thanks for this.
>>
>>> diff --git a/arch/powerpc/include/asm/interrupt.h
>>> b/arch/powerpc/include/asm/interrupt.h
>>> index acfcc7d5779b..c11045d3113a 100644
>>> --- a/arch/powerpc/include/asm/interrupt.h
>>> +++ b/arch/powerpc/include/asm/interrupt.h
>>> @@ -93,7 +93,9 @@ static inline void interrupt_nmi_exit_prepare(struct
>>> pt_regs *regs, struct inter
>>>   {
>>>       nmi_exit();
>>> +#ifdef CONFIG_PPC64
>>>       this_cpu_set_ftrace_enabled(state->ftrace_enabled);
>>> +#endif
>>
>> This seems okay, not a hack.
>>
>>>   #ifdef CONFIG_PPC_BOOK3S_64
>>>       /* Check we didn't change the pending interrupt mask. */
>>> diff --git a/arch/powerpc/kernel/entry_32.S
>>> b/arch/powerpc/kernel/entry_32.S
>>> index f4d0af8e1136..66f7adbe1076 100644
>>> --- a/arch/powerpc/kernel/entry_32.S
>>> +++ b/arch/powerpc/kernel/entry_32.S
>>> @@ -663,6 +663,7 @@ ppc_swapcontext:
>>>    */
>>>       .globl    handle_page_fault
>>>   handle_page_fault:
>>> +    stw    r5,_DSISR(r1)
>>>       addi    r3,r1,STACK_FRAME_OVERHEAD
>>>   #ifdef CONFIG_PPC_BOOK3S_32
>>>       andis.  r0,r5,DSISR_DABRMATCH@h
>>
>> Is this what you want to do for 32, or do you want to seperate
>> ISI and DSI sides?
>>
> 
> No I think we want to separate ISI and DSI sides.
> 
> And I think the specific filtering done in ISI could be done in 
> do_page_fault() in C. Ok, it would make a special handling for is_exec 
> but there are already several places where the behaviour differs based 
> on is_exec.
> The only thing we need to keep at ASM level is the DABR stuff for 
> calling do_break() in handle_page_fault(), because it is used to decide 
> whether full regs are saved or not. But it could be a test done earlier 
> in the prolog and the result being kept in one of the CR bits.

Looking at it once more, I'm wondering whether we really need a full regs.

Before commit 
https://github.com/linuxppc/linux/commit/d300627c6a53693fb01479b59b0cdd293761b1fa#diff-f9658f412252f3bb3093e0a95b37f3ac 
do_break() was called from do_page_fault() without a full regs set.

Christophe

  reply	other threads:[~2020-09-08  8:52 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-05 17:43 [RFC PATCH 00/12] interrupt entry wrappers Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 01/12] powerpc/64s: move the last of the page fault handling logic to C Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 02/12] powerpc: remove arguments from interrupt handler functions Nicholas Piggin
2020-09-07  9:20   ` Christophe Leroy
2020-09-07 11:34     ` Christophe Leroy
2020-09-08  7:48       ` Nicholas Piggin
2020-09-08  8:29         ` Christophe Leroy
2020-09-08  8:50           ` Christophe Leroy [this message]
2020-09-08  7:46     ` Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 03/12] powerpc: interrupt handler wrapper functions Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 04/12] powerpc: add interrupt_cond_local_irq_enable helper Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 05/12] powerpc/64s: Do context tracking in interrupt entry wrapper Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 06/12] powerpc/64s: reconcile interrupts in C Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 07/12] powerpc/64: move account_stolen_time into its own function Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 08/12] powerpc/64: entry cpu time accounting in C Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 09/12] powerpc: move NMI entry/exit code into wrapper Nicholas Piggin
2020-09-07  8:25   ` Christophe Leroy
2020-09-05 17:43 ` [RFC PATCH 10/12] powerpc/64s: move NMI soft-mask handling to C Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 11/12] powerpc/64s: runlatch interrupt handling in C Nicholas Piggin
2020-09-05 17:43 ` [RFC PATCH 12/12] powerpc/64s: power4 nap fixup " Nicholas Piggin
2020-09-06  7:32   ` Christophe Leroy
2020-09-07  4:02     ` Nicholas Piggin
2020-09-07  4:48       ` Christophe Leroy
2020-09-07 13:05         ` Nicholas Piggin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=08ed0a91-b231-1dbc-ba21-6247de03bcd2@csgroup.eu \
    --to=christophe.leroy@csgroup.eu \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=npiggin@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).