linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
To: Nicholas Piggin <npiggin@gmail.com>
Cc: benh@kernel.crashing.org, mpe@ellerman.id.au, anton@samba.org,
	paulus@samba.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [RFC PATCH 7/9] powerpc: Add support to mask perf interrupts
Date: Tue, 26 Jul 2016 12:52:02 +0530	[thread overview]
Message-ID: <bd3a1e2c-4da3-9cf5-4e94-757048f6ceb9@linux.vnet.ibm.com> (raw)
In-Reply-To: <20160726171002.196ab142@roar.ozlabs.ibm.com>



On Tuesday 26 July 2016 12:40 PM, Nicholas Piggin wrote:
> On Tue, 26 Jul 2016 12:16:32 +0530
> Madhavan Srinivasan <maddy@linux.vnet.ibm.com> wrote:
>
>> On Tuesday 26 July 2016 12:00 PM, Nicholas Piggin wrote:
>>> On Tue, 26 Jul 2016 11:55:51 +0530
>>> Madhavan Srinivasan <maddy@linux.vnet.ibm.com> wrote:
>>>   
>>>> On Tuesday 26 July 2016 11:16 AM, Nicholas Piggin wrote:
>>>>> On Mon, 25 Jul 2016 20:22:20 +0530
>>>>> Madhavan Srinivasan <maddy@linux.vnet.ibm.com> wrote:
>>>>>      
>>>>>> To support masking of the PMI interrupts, couple of new interrupt
>>>>>> handler macros are added MASKABLE_EXCEPTION_PSERIES_OOL and
>>>>>> MASKABLE_RELON_EXCEPTION_PSERIES_OOL. These are needed to include
>>>>>> the SOFTEN_TEST and implement the support at both host and guest
>>>>>> kernel.
>>>>>>
>>>>>> Couple of new irq #defs "PACA_IRQ_PMI" and "SOFTEN_VALUE_0xf0*"
>>>>>> added to use in the exception code to check for PMI interrupts.
>>>>>>
>>>>>> __SOFTEN_TEST macro is modified to support the PMI interrupt.
>>>>>> Present __SOFTEN_TEST code loads the soft_enabled from paca and
>>>>>> check to call masked_interrupt handler code. To support both
>>>>>> current behaviour and PMI masking, these changes are added,
>>>>>>
>>>>>> 1) Current LR register content are saved in R11
>>>>>> 2) "bge" branch operation is changed to "bgel".
>>>>>> 3) restore R11 to LR
>>>>>>
>>>>>> Reason:
>>>>>>
>>>>>> To retain PMI as NMI behaviour for flag state of 1, we save the
>>>>>> LR regsiter value in R11 and branch to "masked_interrupt"
>>>>>> handler with LR update. And in "masked_interrupt" handler, we
>>>>>> check for the "SOFTEN_VALUE_*" value in R10 for PMI and branch
>>>>>> back with "blr" if PMI.
>>>>>>
>>>>>> To mask PMI for a flag >1 value, masked_interrupt vaoid's the
>>>>>> above check and continue to execute the masked_interrupt code and
>>>>>> disabled MSR[EE] and updated the irq_happend with PMI info.
>>>>>>
>>>>>> Finally, saving of R11 is moved before calling SOFTEN_TEST in the
>>>>>> __EXCEPTION_PROLOG_1 macro to support saving of LR values in
>>>>>> SOFTEN_TEST.
>>>>>>
>>>>>> Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
>>>>>> ---
>>>>>>     arch/powerpc/include/asm/exception-64s.h | 22
>>>>>> ++++++++++++++++++++-- arch/powerpc/include/asm/hw_irq.h        |
>>>>>> 1 + arch/powerpc/kernel/exceptions-64s.S     | 27
>>>>>> ++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 5
>>>>>> deletions(-)
>>>>>>
>>>>>> diff --git a/arch/powerpc/include/asm/exception-64s.h
>>>>>> b/arch/powerpc/include/asm/exception-64s.h index
>>>>>> 44d3f539d8a5..c951b7ab5108 100644 ---
>>>>>> a/arch/powerpc/include/asm/exception-64s.h +++
>>>>>> b/arch/powerpc/include/asm/exception-64s.h @@ -166,8 +166,8 @@
>>>>>> END_FTR_SECTION_NESTED(ftr,ftr,943)
>>>>>> OPT_SAVE_REG_TO_PACA(area+EX_CFAR, r10, CPU_FTR_CFAR);
>>>>>> \ SAVE_CTR(r10, area);
>>>>>> \ mfcr
>>>>>> r9;							\
>>>>>> -
>>>>>> extra(vec);
>>>>>> \ std
>>>>>> r11,area+EX_R11(r13);					\
>>>>>> +
>>>>>> extra(vec);
>>>>>> \ std
>>>>>> r12,area+EX_R12(r13);					\
>>>>>> GET_SCRATCH0(r10);
>>>>>> \ std	r10,area+EX_R13(r13) @@ -403,12 +403,17 @@
>>>>>> label##_relon_hv:
>>>>>> \ #define SOFTEN_VALUE_0xe82	PACA_IRQ_DBELL #define
>>>>>> SOFTEN_VALUE_0xe60	PACA_IRQ_HMI #define
>>>>>> SOFTEN_VALUE_0xe62	PACA_IRQ_HMI +#define
>>>>>> SOFTEN_VALUE_0xf01	PACA_IRQ_PMI +#define
>>>>>> SOFTEN_VALUE_0xf00	PACA_IRQ_PMI
>>>>> #define __SOFTEN_TEST(h,
>>>>>> vec)						\ lbz
>>>>>> r10,PACASOFTIRQEN(r13);					\
>>>>>> cmpwi
>>>>>> r10,LAZY_INTERRUPT_DISABLED;				\
>>>>>> li
>>>>>> r10,SOFTEN_VALUE_##vec;					\
>>>>>> -	bge	masked_##h##interrupt
>>>>> At which point, can't we pass in the interrupt level we want to
>>>>> mask for to SOFTEN_TEST, and avoid all this extra code changes?
>>>> IIUC, we do pass the interrupt info to SOFTEN_TEST. Incase of
>>>> PMU interrupt we will have the value as PACA_IRQ_PMI.
>>>>
>>>>   
>>>>> PMU masked interrupt will compare with SOFTEN_LEVEL_PMU, existing
>>>>> interrupts will compare with SOFTEN_LEVEL_EE (or whatever suitable
>>>>> names there are).
>>>>>
>>>>>      
>>>>>> +	mflr
>>>>>> r11;							\
>>>>>> +	bgel
>>>>>> masked_##h##interrupt;					\
>>>>>> +	mtlr	r11;
>>>>> This might corrupt return prediction when masked_interrupt does
>>>>> not
>>>> Hmm this is a valid point.
>>>>   
>>>>> return. I guess that's uncommon case though.
>>>> No, it is. kernel mostly use irq_disable with (1) today and only in
>>>> specific case
>>>> we disable all the interrupts. So we are going to return almost
>>>> always when irqs are
>>>> soft diabled.
>>>>
>>>> Since we need to support the PMIs as NMI when irq disable level is
>>>> 1, we need to skip masked_interrupt.
>>>>
>>>> As you mentioned if we have a separate macro (SOFTEN_TEST_PMU),
>>>> these can be avoided, but then it is code replication and we may
>>>> need to change some more macros. But this interesting, let me work
>>>> on this.
>>> I would really prefer to do that, even if it means a little more
>>> code.
>>>
>>> Another option is to give an additional parameter to the MASKABLE
>>> variants of the exception handlers, which you can pass in the
>>> "mask level" into. I think it's not a bad idea to make it explicit
>>> even for the existing ones so it's clear which level they are masked
>>> at.
>> Issue here is that mask_interrupt function is not part of the
>> interrupt vector code (__EXCEPTION_PROLOG_1). So incase of PMI,
>> if we enter the mask_interrupt function, we need to know where
>> to return to continue incase of NMI.
> But if you test against the PMU disabled level, then you should
> not even branch to masked_interrupt handler at all if regular
> interrupts are soft disabled but PMU is enabled, no?

Yes true. We can do this in SOFTEN_ itself and I did try that,
but then we have issue of space in the vector code. I will
try it again.

Maddy

>
> Thanks,
> Nick
>

  reply	other threads:[~2016-07-26  7:22 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-25 14:52 [RFC PATCH 0/9]powerpc: "paca->soft_enabled" based local atomic operation implementation Madhavan Srinivasan
2016-07-25 14:52 ` [RFC PATCH 1/9] Add #defs for paca->soft_enabled flags Madhavan Srinivasan
2016-07-26  5:27   ` Nicholas Piggin
2016-07-26  6:05     ` Madhavan Srinivasan
2016-07-26  6:13       ` Nicholas Piggin
2016-07-28 13:54       ` Nicholas Piggin
2016-07-25 14:52 ` [RFC PATCH 2/9] Cleanup to use LAZY_INTERRUPT_* macros for paca->soft_enabled update Madhavan Srinivasan
2016-07-25 14:52 ` [RFC PATCH 3/9] powerpc: move set_soft_enabled() Madhavan Srinivasan
2016-07-25 14:52 ` [RFC PATCH 4/9] powerpc: Use set_soft_enabled api to update paca->soft_enabled Madhavan Srinivasan
2016-07-25 14:52 ` [RFC PATCH 5/9] powerpc: reverse the soft_enable logic Madhavan Srinivasan
2016-07-26  5:31   ` Nicholas Piggin
2016-07-26  6:07     ` Madhavan Srinivasan
2016-07-25 14:52 ` [RFC PATCH 6/9] powerpc: modify __SOFTEN_TEST to support tri-state soft_enabled flag Madhavan Srinivasan
2016-07-26  5:41   ` Nicholas Piggin
2016-07-26  6:12     ` Madhavan Srinivasan
2016-07-25 14:52 ` [RFC PATCH 7/9] powerpc: Add support to mask perf interrupts Madhavan Srinivasan
2016-07-26  5:46   ` Nicholas Piggin
2016-07-26  6:25     ` Madhavan Srinivasan
2016-07-26  6:30       ` Nicholas Piggin
2016-07-26  6:46         ` Madhavan Srinivasan
2016-07-26  7:10           ` Nicholas Piggin
2016-07-26  7:22             ` Madhavan Srinivasan [this message]
2016-07-26  7:34               ` Nicholas Piggin
2016-07-25 14:52 ` [RFC PATCH 8/9] powerpc: Support to replay PMIs Madhavan Srinivasan
2016-07-26  5:50   ` Nicholas Piggin
2016-07-26  6:40     ` Madhavan Srinivasan
2016-07-25 14:52 ` [RFC PATCH 9/9] powerpc: rewrite local_t using soft_irq Madhavan Srinivasan
2016-07-26  5:53   ` Nicholas Piggin
2016-07-26  6:41     ` Madhavan Srinivasan
2016-07-26 12:21 ` [RFC PATCH 0/9]powerpc: "paca->soft_enabled" based local atomic operation implementation Benjamin Herrenschmidt
2016-07-26 13:42   ` Madhavan Srinivasan

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=bd3a1e2c-4da3-9cf5-4e94-757048f6ceb9@linux.vnet.ibm.com \
    --to=maddy@linux.vnet.ibm.com \
    --cc=anton@samba.org \
    --cc=benh@kernel.crashing.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=npiggin@gmail.com \
    --cc=paulus@samba.org \
    /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).