From: Magnus Damm <magnus.damm@gmail.com>
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 04/08] ARM: Convert __irq_svc and __usr_svc to macros
Date: Wed, 06 Oct 2010 07:18:05 +0000 [thread overview]
Message-ID: <20101006071805.28048.37136.sendpatchset@t400s> (raw)
In-Reply-To: <20101006071731.28048.89938.sendpatchset@t400s>
From: Magnus Damm <damm@opensource.se>
Convert __irq_usr and __irq_svc to macros and
keep the existing code as default implementation.
The macros will keep global symbols with the
name prefexed with "__irq_svc_" and "__irq_usr_".
Signed-off-by: Magnus Damm <damm@opensource.se>
---
arch/arm/include/asm/entry-header.S | 78 +++++++++++++++++++++++++++++++++++
arch/arm/kernel/entry-armv.S | 77 +---------------------------------
2 files changed, 82 insertions(+), 73 deletions(-)
--- 0004/arch/arm/include/asm/entry-header.S
+++ work/arch/arm/include/asm/entry-header.S 2010-10-06 15:07:50.000000000 +0900
@@ -334,3 +334,81 @@ tsk .req r9 @ current thread_info
#endif
#endif
.endm
+
+ .macro __irq_svc, name
+ .align 5
+ .globl __irq_svc_\name
+__irq_svc_\name:
+ svc_entry
+
+#ifdef CONFIG_TRACE_IRQFLAGS
+ bl trace_hardirqs_off
+#endif
+#ifdef CONFIG_PREEMPT
+ get_thread_info tsk
+ ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
+ add r7, r8, #1 @ increment it
+ str r7, [tsk, #TI_PREEMPT]
+#endif
+
+ irq_handler
+#ifdef CONFIG_PREEMPT
+ str r8, [tsk, #TI_PREEMPT] @ restore preempt count
+ ldr r0, [tsk, #TI_FLAGS] @ get flags
+ teq r8, #0 @ if preempt count != 0
+ movne r0, #0 @ force flags to 0
+ tst r0, #_TIF_NEED_RESCHED
+ blne svc_preempt
+#endif
+ ldr r4, [sp, #S_PSR] @ irqs are already disabled
+#ifdef CONFIG_TRACE_IRQFLAGS
+ tst r4, #PSR_I_BIT
+ bleq trace_hardirqs_on
+#endif
+ svc_exit r4 @ return from exception
+ UNWIND(.fnend )
+ENDPROC(__irq_svc_\name)
+
+ .ltorg
+
+#ifdef CONFIG_PREEMPT
+svc_preempt:
+ mov r8, lr
+1: bl preempt_schedule_irq @ irq en/disable is done inside
+ ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS
+ tst r0, #_TIF_NEED_RESCHED
+ moveq pc, r8 @ go again
+ b 1b
+#endif
+ .endm
+
+ .macro __irq_usr, name
+ .align 5
+ .globl __irq_usr_\name
+__irq_usr_\name:
+ usr_entry
+ kuser_cmpxchg_check
+
+ get_thread_info tsk
+#ifdef CONFIG_PREEMPT
+ ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
+ add r7, r8, #1 @ increment it
+ str r7, [tsk, #TI_PREEMPT]
+#endif
+
+ irq_handler
+#ifdef CONFIG_PREEMPT
+ ldr r0, [tsk, #TI_PREEMPT]
+ str r8, [tsk, #TI_PREEMPT]
+ teq r0, r7
+ ARM( strne r0, [r0, -r0] )
+ THUMB( movne r0, #0 )
+ THUMB( strne r0, [r0] )
+#endif
+
+ mov why, #0
+ b ret_to_user
+ UNWIND(.fnend )
+ENDPROC(__irq_usr_\name)
+ .ltorg
+ .endm
--- 0004/arch/arm/kernel/entry-armv.S
+++ work/arch/arm/kernel/entry-armv.S 2010-10-06 15:07:23.000000000 +0900
@@ -128,49 +128,7 @@ __dabt_svc:
UNWIND(.fnend )
ENDPROC(__dabt_svc)
- .align 5
-__irq_svc:
- svc_entry
-
-#ifdef CONFIG_TRACE_IRQFLAGS
- bl trace_hardirqs_off
-#endif
-#ifdef CONFIG_PREEMPT
- get_thread_info tsk
- ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
- add r7, r8, #1 @ increment it
- str r7, [tsk, #TI_PREEMPT]
-#endif
-
- irq_handler
-#ifdef CONFIG_PREEMPT
- str r8, [tsk, #TI_PREEMPT] @ restore preempt count
- ldr r0, [tsk, #TI_FLAGS] @ get flags
- teq r8, #0 @ if preempt count != 0
- movne r0, #0 @ force flags to 0
- tst r0, #_TIF_NEED_RESCHED
- blne svc_preempt
-#endif
- ldr r4, [sp, #S_PSR] @ irqs are already disabled
-#ifdef CONFIG_TRACE_IRQFLAGS
- tst r4, #PSR_I_BIT
- bleq trace_hardirqs_on
-#endif
- svc_exit r4 @ return from exception
- UNWIND(.fnend )
-ENDPROC(__irq_svc)
-
- .ltorg
-
-#ifdef CONFIG_PREEMPT
-svc_preempt:
- mov r8, lr
-1: bl preempt_schedule_irq @ irq en/disable is done inside
- ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS
- tst r0, #_TIF_NEED_RESCHED
- moveq pc, r8 @ go again
- b 1b
-#endif
+ __irq_svc default
.align 5
__und_svc:
@@ -300,34 +258,7 @@ __dabt_usr:
UNWIND(.fnend )
ENDPROC(__dabt_usr)
- .align 5
-__irq_usr:
- usr_entry
- kuser_cmpxchg_check
-
- get_thread_info tsk
-#ifdef CONFIG_PREEMPT
- ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
- add r7, r8, #1 @ increment it
- str r7, [tsk, #TI_PREEMPT]
-#endif
-
- irq_handler
-#ifdef CONFIG_PREEMPT
- ldr r0, [tsk, #TI_PREEMPT]
- str r8, [tsk, #TI_PREEMPT]
- teq r0, r7
- ARM( strne r0, [r0, -r0] )
- THUMB( movne r0, #0 )
- THUMB( strne r0, [r0] )
-#endif
-
- mov why, #0
- b ret_to_user
- UNWIND(.fnend )
-ENDPROC(__irq_usr)
-
- .ltorg
+ __irq_usr default
.align 5
__und_usr:
@@ -952,10 +883,10 @@ __stubs_start:
*/
vector_stub irq, IRQ_MODE, 4
- .long __irq_usr @ 0 (USR_26 / USR_32)
+ .long __irq_usr_default @ 0 (USR_26 / USR_32)
.long __irq_invalid @ 1 (FIQ_26 / FIQ_32)
.long __irq_invalid @ 2 (IRQ_26 / IRQ_32)
- .long __irq_svc @ 3 (SVC_26 / SVC_32)
+ .long __irq_svc_default @ 3 (SVC_26 / SVC_32)
.long __irq_invalid @ 4
.long __irq_invalid @ 5
.long __irq_invalid @ 6
next prev parent reply other threads:[~2010-10-06 7:18 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-06 7:17 [PATCH 00/08] ARM: Dynamic IRQ demux support Magnus Damm
2010-10-06 7:17 ` [PATCH 01/08] ARM: Move entry-header.S to asm/ Magnus Damm
2010-10-06 7:17 ` [PATCH 02/08] ARM: Move macros from entry-armv.S Magnus Damm
2010-10-06 7:17 ` [PATCH 03/08] ARM: Make alignment_trap macro self-contained Magnus Damm
2010-10-06 7:18 ` Magnus Damm [this message]
2010-10-06 7:18 ` [PATCH 05/08] ARM: Move the unwind header to entry-header.S Magnus Damm
2010-10-06 7:18 ` [PATCH 06/08] ARM: Add setup_irq_stubs() function Magnus Damm
2010-10-06 7:18 ` [PATCH 07/08] ARM: Add CONFIG_DEFAULT_IRQ_DEMUX Magnus Damm
2010-10-06 7:18 ` [PATCH 08/08] ARM: Dynamic IRQ demux for SH-Mobile Magnus Damm
2010-10-06 13:06 ` [PATCH 00/08] ARM: Dynamic IRQ demux support Eric Miao
2010-10-06 14:58 ` Grant Likely
2010-10-06 15:06 ` Eric Miao
2010-10-06 15:11 ` Eric Miao
2010-10-06 15:26 ` Grant Likely
2010-10-06 15:38 ` Eric Miao
2010-10-07 6:39 ` Magnus Damm
2010-10-08 7:09 ` Eric Miao
2010-10-14 10:50 ` Magnus Damm
2010-10-16 3:53 ` Grant Likely
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=20101006071805.28048.37136.sendpatchset@t400s \
--to=magnus.damm@gmail.com \
--cc=linux-arm-kernel@lists.infradead.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