ARM: 8018/1: Add {inc,dec}_preempt_count asm macros
authorCatalin Marinas <catalin.marinas@arm.com>
Wed, 2 Apr 2014 09:57:49 +0000 (10:57 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 9 Apr 2014 12:08:08 +0000 (13:08 +0100)
The patch adds asm macros for inc_preempt_count and dec_preempt_count_ti
(which also gets the current thread_info) instead of open-coding them in
arch/arm/vfp/*.S files.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Arun KS <getarunks@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/include/asm/assembler.h
arch/arm/vfp/entry.S
arch/arm/vfp/vfphw.S

index 9a4965ad6867d52bd191cb03aa593ee15a40752a..b974184f9941883339c0480df1290a6a6f66a4ae 100644 (file)
@@ -23,6 +23,7 @@
 #include <asm/ptrace.h>
 #include <asm/domain.h>
 #include <asm/opcodes-virt.h>
+#include <asm/asm-offsets.h>
 
 #define IOMEM(x)       (x)
 
        mov     \rd, \rd, lsl #13
        .endm
 
+/*
+ * Increment/decrement the preempt count.
+ */
+#ifdef CONFIG_PREEMPT_COUNT
+       .macro  inc_preempt_count, ti, tmp
+       ldr     \tmp, [\ti, #TI_PREEMPT]        @ get preempt count
+       add     \tmp, \tmp, #1                  @ increment it
+       str     \tmp, [\ti, #TI_PREEMPT]
+       .endm
+
+       .macro  dec_preempt_count, ti, tmp
+       ldr     \tmp, [\ti, #TI_PREEMPT]        @ get preempt count
+       sub     \tmp, \tmp, #1                  @ decrement it
+       str     \tmp, [\ti, #TI_PREEMPT]
+       .endm
+
+       .macro  dec_preempt_count_ti, ti, tmp
+       get_thread_info \ti
+       dec_preempt_count \ti, \tmp
+       .endm
+#else
+       .macro  inc_preempt_count, ti, tmp
+       .endm
+
+       .macro  dec_preempt_count, ti, tmp
+       .endm
+
+       .macro  dec_preempt_count_ti, ti, tmp
+       .endm
+#endif
+
 #define USER(x...)                             \
 9999:  x;                                      \
        .pushsection __ex_table,"a";            \
index 9cc290ae4e3be2e13e2a61005b2bfc8230f71333..f0759e70fb865b4d24370a46b58b37564e49f871 100644 (file)
 @  IRQs disabled.
 @
 ENTRY(do_vfp)
-#ifdef CONFIG_PREEMPT_COUNT
-       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
-       add     r11, r4, #1             @ increment it
-       str     r11, [r10, #TI_PREEMPT]
-#endif
+       inc_preempt_count r10, r4
        enable_irq
        ldr     r4, .LCvfp
        ldr     r11, [r10, #TI_CPU]     @ CPU number
@@ -38,12 +34,7 @@ ENTRY(do_vfp)
 ENDPROC(do_vfp)
 
 ENTRY(vfp_null_entry)
-#ifdef CONFIG_PREEMPT_COUNT
-       get_thread_info r10
-       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
-       sub     r11, r4, #1             @ decrement it
-       str     r11, [r10, #TI_PREEMPT]
-#endif
+       dec_preempt_count_ti r10, r4
        mov     pc, lr
 ENDPROC(vfp_null_entry)
 
@@ -56,12 +47,7 @@ ENDPROC(vfp_null_entry)
 
        __INIT
 ENTRY(vfp_testing_entry)
-#ifdef CONFIG_PREEMPT_COUNT
-       get_thread_info r10
-       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
-       sub     r11, r4, #1             @ decrement it
-       str     r11, [r10, #TI_PREEMPT]
-#endif
+       dec_preempt_count_ti r10, r4
        ldr     r0, VFP_arch_address
        str     r0, [r0]                @ set to non-zero value
        mov     pc, r9                  @ we have handled the fault
index 98f6246c90025ba060b1374a740b75c7bbdd9326..be807625ed8c23dead72282fc9ff5b9babbfe1f6 100644 (file)
@@ -182,12 +182,7 @@ vfp_hw_state_valid:
                                        @ else it's one 32-bit instruction, so
                                        @ always subtract 4 from the following
                                        @ instruction address.
-#ifdef CONFIG_PREEMPT_COUNT
-       get_thread_info r10
-       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
-       sub     r11, r4, #1             @ decrement it
-       str     r11, [r10, #TI_PREEMPT]
-#endif
+       dec_preempt_count_ti r10, r4
        mov     pc, r9                  @ we think we have handled things
 
 
@@ -206,12 +201,7 @@ look_for_VFP_exceptions:
        @ not recognised by VFP
 
        DBGSTR  "not VFP"
-#ifdef CONFIG_PREEMPT_COUNT
-       get_thread_info r10
-       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
-       sub     r11, r4, #1             @ decrement it
-       str     r11, [r10, #TI_PREEMPT]
-#endif
+       dec_preempt_count_ti r10, r4
        mov     pc, lr
 
 process_exception: