[RFC/PATCH 5/7] ARM: Move get_thread_info macro definition to <asm/assembler.h>
gdavis at mvista.com
gdavis at mvista.com
Wed Oct 12 02:04:33 EDT 2011
On Tue, Oct 11, 2011 at 10:56:39AM +0100, Catalin Marinas wrote:
> On Fri, Oct 07, 2011 at 03:38:39AM +0100, gdavis at mvista.com wrote:
> > diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h
> > index 29035e8..78397d0 100644
> > --- a/arch/arm/include/asm/assembler.h
> > +++ b/arch/arm/include/asm/assembler.h
> > @@ -23,6 +23,19 @@
> > #include <asm/ptrace.h>
> > #include <asm/domain.h>
> >
> > +#ifndef CONFIG_THUMB2_KERNEL
> > + .macro get_thread_info, rd
> > + mov \rd, sp, lsr #13
> > + mov \rd, \rd, lsl #13
> > + .endm
> > +#else /* CONFIG_THUMB2_KERNEL */
> > + .macro get_thread_info, rd
> > + mov \rd, sp
> > + lsr \rd, \rd, #13
> > + mov \rd, \rd, lsl #13
> > + .endm
> > +#endif /* !CONFIG_THUMB2_KERNEL */
>
> We could even write some preempt_enable and preempt_disable asm macros,
> I think it would simplify the code in the other files.
Like so (based on above patch and not even compile tested):
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h
index 78397d0..eaf4939 100644
--- a/arch/arm/include/asm/assembler.h
+++ b/arch/arm/include/asm/assembler.h
@@ -36,6 +36,20 @@
.endm
#endif /* !CONFIG_THUMB2_KERNEL */
+ .macro preempt_disable, tsk, cnt
+ get_thread_info \tsk
+ ldr \cnt, [\tsk, #TI_PREEMPT]
+ add \cnt, \cnt, #1
+ str \cnt, [\tsk, #TI_PREEMPT]
+ .endm
+
+ .macro preempt_enable, tsk, cnt
+ get_thread_info \tsk
+ ldr \cnt, [\tsk, #TI_PREEMPT]
+ sub \cnt, \cnt, #1
+ str \cnt, [\tsk, #TI_PREEMPT]
+ .endm
+
/*
* Endian independent macros for shifting bytes within registers.
*/
Not as efficient as it could be but I imagine the macros could
be written to support optional load of \tsk and/or optional \tmp
parameters to cover other common cases.
--
Regards,
George
>
> --
> Catalin
More information about the linux-arm-kernel
mailing list