Message ID | 5576D0FE.10900@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Daniel, 2015-06-09 13:41 GMT+02:00 Daniel Thompson <daniel.thompson@linaro.org>: > On 09/06/15 10:14, Maxime Coquelin wrote: >>> >>> The real solution is to provide a definition _in asm-generic_ for >>> arch_irqs_disabled(), rather than having almost every arch doing: >>> >>> static inline bool arch_irqs_disabled(void) >>> { >>> return arch_irqs_disabled_flags(arch_local_save_flags()); >>> } >>> >>> I'm personally refusing to take a patch for ARM which adds yet another >>> copy of the above. This is, after all, exactly the kind of stuff that >>> should be in asm-generic, or if not, in include/linux but overridable >>> by arch stuff. >>> >>> We keep going between the two extremes of "lets push lots of stuff into >>> arch stuff" and "lets try to extract the common bits out of arch code". >>> >>> Let's try and settle on one approach, and apply it universally. > > Does the following patch, which makes the arch_irqs_disabled() > implementation from asm-generic available on arm, fix the build for you? I confirm it fixes the build on Russell's for-next branch with efm32_defconfig. I have no efm32 HW to test it though. > > I've only done a real quick 'n dirty check for regression: > multi_v7_defconfig still works ;-) > > If the patch is useful I can test it a bit harder... I can also test it this evening with my stm32 config. Thanks, Maxime
On Tue, Jun 09, 2015 at 12:41:50PM +0100, Daniel Thompson wrote: > Does the following patch, which makes the arch_irqs_disabled() > implementation from asm-generic available on arm, fix the build for you? Yes, this is exactly the kind of fix for this I'm looking for. Once everyone's happy with it, it can find it's way to the patch system. Thanks.
On 09/06/15 16:01, Russell King - ARM Linux wrote: > On Tue, Jun 09, 2015 at 12:41:50PM +0100, Daniel Thompson wrote: >> Does the following patch, which makes the arch_irqs_disabled() >> implementation from asm-generic available on arm, fix the build for you? > > Yes, this is exactly the kind of fix for this I'm looking for. Once > everyone's happy with it, it can find it's way to the patch system. From my side, using v4.1-rc6 plus the patch, I can build all defconfigs and both versatile_defconfig and multi_v7_defconfig remain bootable (so both ways through the arch #ifdef in irqflag.h). Similarly working on linux-next-20150608 plus the patch I am able to build and boot Maxime's stm32 code (and show that without the patch it doesn't build). From my side I think that makes it good to go. So... in the absense of objections I will send it to the patch tracker tomorrow. Daniel.
2015-06-09 19:37 GMT+02:00 Daniel Thompson <daniel.thompson@linaro.org>: > On 09/06/15 16:01, Russell King - ARM Linux wrote: >> >> On Tue, Jun 09, 2015 at 12:41:50PM +0100, Daniel Thompson wrote: >>> >>> Does the following patch, which makes the arch_irqs_disabled() >>> implementation from asm-generic available on arm, fix the build for you? >> >> >> Yes, this is exactly the kind of fix for this I'm looking for. Once >> everyone's happy with it, it can find it's way to the patch system. > > > From my side, using v4.1-rc6 plus the patch, I can build all defconfigs and > both versatile_defconfig and multi_v7_defconfig remain bootable (so both > ways through the arch #ifdef in irqflag.h). > > Similarly working on linux-next-20150608 plus the patch I am able to build > and boot Maxime's stm32 code (and show that without the patch it doesn't > build). Ok, thanks for having tested on STM32. > > From my side I think that makes it good to go. > > So... in the absense of objections I will send it to the patch tracker > tomorrow. For what it is worth, you can add: Acked-by: Maxime Coquelin <maxime.coquelin@st.com> Regards, Maxime
Hi Daniel, On 9 June 2015 at 19:37, Daniel Thompson <daniel.thompson@linaro.org> wrote: > On 09/06/15 16:01, Russell King - ARM Linux wrote: >> >> On Tue, Jun 09, 2015 at 12:41:50PM +0100, Daniel Thompson wrote: >>> >>> Does the following patch, which makes the arch_irqs_disabled() >>> implementation from asm-generic available on arm, fix the build for you? >> >> >> Yes, this is exactly the kind of fix for this I'm looking for. Once >> everyone's happy with it, it can find it's way to the patch system. > > > From my side, using v4.1-rc6 plus the patch, I can build all defconfigs and > both versatile_defconfig and multi_v7_defconfig remain bootable (so both > ways through the arch #ifdef in irqflag.h). > > Similarly working on linux-next-20150608 plus the patch I am able to build > and boot Maxime's stm32 code (and show that without the patch it doesn't > build). > > From my side I think that makes it good to go. Since next didn't build for me either I applied this and it works for the LPC18xx (Cortex-M4) platform. Tested-by: Joachim Eastwood <manabian@gmail.com> regards, Joachim Eastwood
diff --git a/arch/arm/include/asm/irqflags.h b/arch/arm/include/asm/irqflags.h index 3b763d6652a0..43908146a5cf 100644 --- a/arch/arm/include/asm/irqflags.h +++ b/arch/arm/include/asm/irqflags.h @@ -20,6 +20,7 @@ #if __LINUX_ARM_ARCH__ >= 6 +#define arch_local_irq_save arch_local_irq_save static inline unsigned long arch_local_irq_save(void) { unsigned long flags; @@ -31,6 +32,7 @@ static inline unsigned long arch_local_irq_save(void) return flags; } +#define arch_local_irq_enable arch_local_irq_enable static inline void arch_local_irq_enable(void) { asm volatile( @@ -40,6 +42,7 @@ static inline void arch_local_irq_enable(void) : "memory", "cc"); } +#define arch_local_irq_disable arch_local_irq_disable static inline void arch_local_irq_disable(void) { asm volatile( @@ -56,6 +59,7 @@ static inline void arch_local_irq_disable(void) /* * Save the current interrupt enable state & disable IRQs */ +#define arch_local_irq_save arch_local_irq_save static inline unsigned long arch_local_irq_save(void) { unsigned long flags, temp; @@ -73,6 +77,7 @@ static inline unsigned long arch_local_irq_save(void) /* * Enable IRQs */ +#define arch_local_irq_enable arch_local_irq_enable static inline void arch_local_irq_enable(void) { unsigned long temp; @@ -88,6 +93,7 @@ static inline void arch_local_irq_enable(void) /* * Disable IRQs */ +#define arch_local_irq_disable arch_local_irq_disable static inline void arch_local_irq_disable(void) { unsigned long temp; @@ -135,6 +141,7 @@ static inline void arch_local_irq_disable(void) /* * Save the current interrupt enable state. */ +#define arch_local_save_flags arch_local_save_flags static inline unsigned long arch_local_save_flags(void) { unsigned long flags; @@ -147,6 +154,7 @@ static inline unsigned long arch_local_save_flags(void) /* * restore saved IRQ & FIQ state */ +#define arch_local_irq_restore arch_local_irq_restore static inline void arch_local_irq_restore(unsigned long flags) { asm volatile( @@ -156,10 +164,13 @@ static inline void arch_local_irq_restore(unsigned long flags) : "memory", "cc"); } +#define arch_irqs_disabled_flags arch_irqs_disabled_flags static inline int arch_irqs_disabled_flags(unsigned long flags) { return flags & IRQMASK_I_BIT; } +#include <asm-generic/irqflags.h> + #endif /* ifdef __KERNEL__ */