From: "tiejun.chen" <tiejun.chen@windriver.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Scott Wood <scottwood@freescale.com>,
Mihai Caraman <mihai.caraman@freescale.com>,
linuxppc-dev@lists.ozlabs.org, kvm-ppc@vger.kernel.org
Subject: Re: [PATCH] powerpc: Make hard_irq_disable() do the right thing vs. irq tracing
Date: Tue, 07 May 2013 07:15:57 +0000 [thread overview]
Message-ID: <5188AA2D.1040802@windriver.com> (raw)
In-Reply-To: <1367910242.5769.11.camel@pasglop>
On 05/07/2013 03:04 PM, Benjamin Herrenschmidt wrote:
> If hard_irq_disable() is called while interrupts are already soft-disabled
> (which is the most common case) all is already well.
>
> However you can (and in some cases want) to call it while everything is
> enabled (to make sure you don't get a lazy even, for example before entry
> into KVM guests) and in this case we need to inform the irq tracer that
> the irqs are going off.
>
> We have to change the inline into a macro to avoid an include circular
> dependency hell hole.
>
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> ---
>
> Tested on pseries, Scott, I don't expect a problem with that patch especially
> since most callers already are soft disabled, so I'll merge it now along with
> my other pending stuff and you can simplify your KVM one.
>
> diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h
> index e45c494..d615b28 100644
> --- a/arch/powerpc/include/asm/hw_irq.h
> +++ b/arch/powerpc/include/asm/hw_irq.h
> @@ -95,15 +95,13 @@ static inline bool arch_irqs_disabled(void)
> #define __hard_irq_disable() __mtmsrd(local_paca->kernel_msr, 1)
> #endif
>
> -static inline void hard_irq_disable(void)
> -{
> - __hard_irq_disable();
> - get_paca()->soft_enabled = 0;
> - get_paca()->irq_happened |= PACA_IRQ_HARD_DIS;
> -}
> -
> -/* include/linux/interrupt.h needs hard_irq_disable to be a macro */
> -#define hard_irq_disable hard_irq_disable
> +#define hard_irq_disable() do { \
> + __hard_irq_disable(); \
> + if (local_paca->soft_enabled) \
> + trace_hardirqs_off(); \
> + get_paca()->soft_enabled = 0; \
Could we simplify this as follows:
+#define hard_irq_disable() do { \
+ __hard_irq_disable(); \
+ if (get_paca()->soft_enabled) { \
+ trace_hardirqs_off(); \
+ get_paca()->soft_enabled = 0; \
+ } \
+ get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \
+} while(0)
Tiejun
> + get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \
> +} while(0)
>
> static inline bool lazy_irq_pending(void)
> {
>
>
WARNING: multiple messages have this Message-ID (diff)
From: "tiejun.chen" <tiejun.chen@windriver.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Scott Wood <scottwood@freescale.com>,
Mihai Caraman <mihai.caraman@freescale.com>,
linuxppc-dev@lists.ozlabs.org, kvm-ppc@vger.kernel.org
Subject: Re: [PATCH] powerpc: Make hard_irq_disable() do the right thing vs. irq tracing
Date: Tue, 7 May 2013 15:15:57 +0800 [thread overview]
Message-ID: <5188AA2D.1040802@windriver.com> (raw)
In-Reply-To: <1367910242.5769.11.camel@pasglop>
On 05/07/2013 03:04 PM, Benjamin Herrenschmidt wrote:
> If hard_irq_disable() is called while interrupts are already soft-disabled
> (which is the most common case) all is already well.
>
> However you can (and in some cases want) to call it while everything is
> enabled (to make sure you don't get a lazy even, for example before entry
> into KVM guests) and in this case we need to inform the irq tracer that
> the irqs are going off.
>
> We have to change the inline into a macro to avoid an include circular
> dependency hell hole.
>
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> ---
>
> Tested on pseries, Scott, I don't expect a problem with that patch especially
> since most callers already are soft disabled, so I'll merge it now along with
> my other pending stuff and you can simplify your KVM one.
>
> diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h
> index e45c494..d615b28 100644
> --- a/arch/powerpc/include/asm/hw_irq.h
> +++ b/arch/powerpc/include/asm/hw_irq.h
> @@ -95,15 +95,13 @@ static inline bool arch_irqs_disabled(void)
> #define __hard_irq_disable() __mtmsrd(local_paca->kernel_msr, 1)
> #endif
>
> -static inline void hard_irq_disable(void)
> -{
> - __hard_irq_disable();
> - get_paca()->soft_enabled = 0;
> - get_paca()->irq_happened |= PACA_IRQ_HARD_DIS;
> -}
> -
> -/* include/linux/interrupt.h needs hard_irq_disable to be a macro */
> -#define hard_irq_disable hard_irq_disable
> +#define hard_irq_disable() do { \
> + __hard_irq_disable(); \
> + if (local_paca->soft_enabled) \
> + trace_hardirqs_off(); \
> + get_paca()->soft_enabled = 0; \
Could we simplify this as follows:
+#define hard_irq_disable() do { \
+ __hard_irq_disable(); \
+ if (get_paca()->soft_enabled) { \
+ trace_hardirqs_off(); \
+ get_paca()->soft_enabled = 0; \
+ } \
+ get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \
+} while(0)
Tiejun
> + get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \
> +} while(0)
>
> static inline bool lazy_irq_pending(void)
> {
>
>
next prev parent reply other threads:[~2013-05-07 7:15 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-07 7:04 [PATCH] powerpc: Make hard_irq_disable() do the right thing vs. irq tracing Benjamin Herrenschmidt
2013-05-07 7:04 ` Benjamin Herrenschmidt
2013-05-07 7:15 ` tiejun.chen [this message]
2013-05-07 7:15 ` tiejun.chen
2013-05-07 7:25 ` Benjamin Herrenschmidt
2013-05-07 7:25 ` Benjamin Herrenschmidt
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=5188AA2D.1040802@windriver.com \
--to=tiejun.chen@windriver.com \
--cc=benh@kernel.crashing.org \
--cc=kvm-ppc@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mihai.caraman@freescale.com \
--cc=scottwood@freescale.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.