All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicholas Piggin <npiggin@gmail.com>
To: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Cc: benh@kernel.crashing.org, mpe@ellerman.id.au, anton@samba.org,
	paulus@samba.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH 12/13] powerpc: Add a Kconfig and a functions to set new soft_enabled mask
Date: Fri, 16 Sep 2016 20:34:11 +1000	[thread overview]
Message-ID: <20160916203411.5f0cab34@roar.ozlabs.ibm.com> (raw)
In-Reply-To: <1473944523-624-13-git-send-email-maddy@linux.vnet.ibm.com>

On Thu, 15 Sep 2016 18:32:02 +0530
Madhavan Srinivasan <maddy@linux.vnet.ibm.com> wrote:

> New Kconfig is added "CONFIG_IRQ_DEBUG_SUPPORT" to add warn_on
> to alert the invalid transitions. Have also moved the code under
> the CONFIG_TRACE_IRQFLAGS in arch_local_irq_restore() to new Kconfig
> as suggested.

I can't tempt you to put the Kconfig changes into their own patch? :)


> To support disabling and enabling of irq with PMI, set of
> new powerpc_local_irq_pmu_save() and powerpc_local_irq_restore()
> functions are added. And powerpc_local_irq_save() implemented,
> by adding a new soft_enabled manipulation function soft_enabled_or_return().
> Local_irq_pmu_* macros are provided to access these powerpc_local_irq_pmu*
> functions which includes trace_hardirqs_on|off() to match what we
> have in include/linux/irqflags.h.
> 
> Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>

> @@ -81,6 +81,20 @@ static inline notrace unsigned long soft_enabled_set_return(unsigned long enable
>  	return flags;
>  }
>  
> +static inline notrace unsigned long soft_enabled_or_return(unsigned long enable)
> +{
> +	unsigned long flags, zero;
> +
> +	asm volatile(
> +		"mr %1,%3; lbz %0,%2(13); or %1,%0,%1; stb %1,%2(13)"
> +		: "=r" (flags), "=&r"(zero)
> +		: "i" (offsetof(struct paca_struct, soft_enabled)),\
> +		  "r" (enable)
> +		: "memory");
> +
> +	return flags;
> +}

Another candidate for builtin_constification using immediates. And do you
actually need the initial mr instruction there?


> @@ -105,7 +119,7 @@ static inline unsigned long arch_local_irq_save(void)
>  
>  static inline bool arch_irqs_disabled_flags(unsigned long flags)
>  {
> -	return flags == IRQ_DISABLE_MASK_LINUX;
> +	return (flags);
>  }
>  
>  static inline bool arch_irqs_disabled(void)

This part logically belongs in patch 11, but it also needs to be changed,
I think? Keep in mind it's the generic kernel asking whether it has "Linux
interrupts" disabled.

    return flags & IRQ_DISABLE_MASK_LINUX;

> @@ -113,6 +127,59 @@ static inline bool arch_irqs_disabled(void)
>  	return arch_irqs_disabled_flags(arch_local_save_flags());
>  }
>  
> +static inline void powerpc_local_irq_pmu_restore(unsigned long flags)
> +{
> +	arch_local_irq_restore(flags);
> +}
> +
> +static inline unsigned long powerpc_local_irq_pmu_disable(void)
> +{
> +	return soft_enabled_or_return(IRQ_DISABLE_MASK_LINUX | IRQ_DISABLE_MASK_PMU);
> +}
> +
> +static inline unsigned long powerpc_local_irq_pmu_save(void)
> +{
> +	return powerpc_local_irq_pmu_disable();
> +}
> +
> +#define raw_local_irq_pmu_save(flags)					\
> +	do {								\
> +		typecheck(unsigned long, flags);			\
> +		flags = powerpc_local_irq_pmu_save();			\
> +	} while(0)
> +
> +#define raw_local_irq_pmu_restore(flags)				\
> +	do {								\
> +		typecheck(unsigned long, flags);			\
> +		powerpc_local_irq_pmu_restore(flags);			\
> +	} while(0)
> +
> +#ifdef CONFIG_TRACE_IRQFLAGS
> +#define local_irq_pmu_save(flags)		\
> +	do {					\
> +		raw_local_irq_pmu_save(flags);	\
> +		trace_hardirqs_off();		\
> +	} while(0)
> +#define local_irq_pmu_restore(flags)			\
> +	do {						\
> +		if (raw_irqs_disabled_flags(flags)) {   \
> +			raw_local_irq_pmu_restore(flags);\
> +			trace_hardirqs_off();		\
> +		} else {				\
> +			trace_hardirqs_on();		\
> +			raw_local_irq_pmu_restore(flags);\
> +		}					\
> +	} while(0)
> +#else
> +#define local_irq_pmu_save(flags)		\
> +	do {					\
> +		raw_local_irq_pmu_save(flags);	\
> +	} while(0)
> +#define local_irq_pmu_restore(flags)			\
> +	do { raw_local_irq_pmu_restore(flags); } while (0)
> +#endif /* CONFIG_TRACE_IRQFLAGS */
> +
> +

This looks pretty good. When I suggested powerpc_ prefix, I intended in these
functions here, so it wouldn't match with the local_irq_ namespace of generic
kernel. But that was just an idea. If you prefer to do it this way, could you
just drop the powerpc_ wrappers entirely?

A comment above that says it comes from the generic Linux local_irq code
might be an idea too.

Provided at least the arch_irqs_disabled_flags comment gets addressed:

Reviewed-by: Nicholas Piggin <npiggin@gmail.com>

  reply	other threads:[~2016-09-16 10:34 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-15 13:01 [PATCH 00/13] powerpc: "paca->soft_enabled" based local atomic operation implementation Madhavan Srinivasan
2016-09-15 13:01 ` [PATCH 01/13] powerpc: Add #defs for paca->soft_enabled flags Madhavan Srinivasan
2016-09-15 13:01 ` [PATCH 02/13] powerpc: Cleanup to use IRQ_DISABLE_MASK_* macros for paca->soft_enabled update Madhavan Srinivasan
2016-09-16  9:47   ` Nicholas Piggin
2016-09-19  4:04     ` Madhavan Srinivasan
2016-09-15 13:01 ` [PATCH 03/13] powerpc: move set_soft_enabled() and rename Madhavan Srinivasan
2016-09-16  9:50   ` Nicholas Piggin
2016-09-19  4:05     ` Madhavan Srinivasan
2016-09-15 13:01 ` [PATCH 04/13] powerpc: Use soft_enabled_set api to update paca->soft_enabled Madhavan Srinivasan
2016-09-16  9:53   ` Nicholas Piggin
2016-09-16 11:43     ` David Laight
2016-09-16 11:59       ` Nicholas Piggin
2016-09-16 13:22         ` David Laight
2016-09-19  2:52           ` Nicholas Piggin
2016-09-19  5:32             ` Madhavan Srinivasan
2016-09-19  5:05       ` Madhavan Srinivasan
2016-09-19  4:11     ` Madhavan Srinivasan
2016-09-15 13:01 ` [PATCH 05/13] powerpc: Add soft_enabled manipulation functions Madhavan Srinivasan
2016-09-16  9:57   ` Nicholas Piggin
2016-09-19  5:41     ` Madhavan Srinivasan
2016-09-15 13:01 ` [PATCH 06/13] powerpc: reverse the soft_enable logic Madhavan Srinivasan
2016-09-16 10:05   ` Nicholas Piggin
2016-09-19  5:45     ` Madhavan Srinivasan
2016-09-15 13:01 ` [PATCH 07/13] powerpc: Avoid using EXCEPTION_PROLOG_1 macro in MASKABLE_* Madhavan Srinivasan
2016-09-16 10:08   ` Nicholas Piggin
2016-09-15 13:01 ` [PATCH 08/13] powerpc: Add new _EXCEPTION_PROLOG_1 macro Madhavan Srinivasan
2016-09-16 10:12   ` Nicholas Piggin
2016-09-19  5:54     ` Madhavan Srinivasan
2016-09-15 13:01 ` [PATCH 09/13] powerpc: Introduce new mask bit for soft_enabled Madhavan Srinivasan
2016-09-16 10:16   ` Nicholas Piggin
2016-09-19  5:57     ` Madhavan Srinivasan
2016-09-15 13:02 ` [PATCH 10/13] powerpc: Add "bitmask" paramater to MASKABLE_* macros Madhavan Srinivasan
2016-09-16 11:03   ` Nicholas Piggin
2016-09-19  5:58     ` Madhavan Srinivasan
2016-09-15 13:02 ` [PATCH 11/13] powerpc: Add support to mask perf interrupts and replay them Madhavan Srinivasan
2016-09-16 10:47   ` Nicholas Piggin
2016-09-15 13:02 ` [PATCH 12/13] powerpc: Add a Kconfig and a functions to set new soft_enabled mask Madhavan Srinivasan
2016-09-16 10:34   ` Nicholas Piggin [this message]
2016-09-16 10:56   ` Nicholas Piggin
2016-09-19  6:03     ` Madhavan Srinivasan
2016-09-15 13:02 ` [PATCH 13/13] powerpc: rewrite local_t using soft_irq Madhavan Srinivasan
2016-09-15 16:55   ` kbuild test robot
2016-09-16 11:01   ` Nicholas Piggin
2016-09-16 11:08 ` [PATCH 00/13] powerpc: "paca->soft_enabled" based local atomic operation implementation 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=20160916203411.5f0cab34@roar.ozlabs.ibm.com \
    --to=npiggin@gmail.com \
    --cc=anton@samba.org \
    --cc=benh@kernel.crashing.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=maddy@linux.vnet.ibm.com \
    --cc=mpe@ellerman.id.au \
    --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 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.