svn commit: r228928 - in projects/armv6/sys/arm: arm include
Grzegorz Bernacki
gber at FreeBSD.org
Wed Dec 28 14:48:34 UTC 2011
Author: gber
Date: Wed Dec 28 14:48:33 2011
New Revision: 228928
URL: http://svn.freebsd.org/changeset/base/228928
Log:
arm: Implement separate per-cpu structures.
It's still needs some cleanup. Accessors for pcpu and tls should be
moved to some armv6 generic file.
Obtained from: Marvell, Semihalf
Modified:
projects/armv6/sys/arm/arm/bcopyinout.S
projects/armv6/sys/arm/arm/bcopyinout_xscale.S
projects/armv6/sys/arm/arm/copystr.S
projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S
projects/armv6/sys/arm/arm/fusu.S
projects/armv6/sys/arm/arm/machdep.c
projects/armv6/sys/arm/arm/swtch.S
projects/armv6/sys/arm/include/asmacros.h
projects/armv6/sys/arm/include/cpufunc.h
Modified: projects/armv6/sys/arm/arm/bcopyinout.S
==============================================================================
--- projects/armv6/sys/arm/arm/bcopyinout.S Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/arm/bcopyinout.S Wed Dec 28 14:48:33 2011 (r228928)
@@ -53,14 +53,19 @@ __FBSDID("$FreeBSD$");
.text
.align 0
-#ifdef MULTIPROCESSOR
-.Lcpu_info:
- .word _C_LABEL(cpu_info)
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+ mrc p15, 0, tmp, c13, c0, 4; \
+ add tmp, tmp, #(PC_CURPCB)
#else
.Lcurpcb:
- .word _C_LABEL(__pcpu) + PC_CURPCB
+ .word _C_LABEL(__pcpu) + PC_CURPCB
+
+#define GET_PCB(tmp) \
+ ldr tmp, .Lcurpcb
#endif
+
#define SAVE_REGS stmfd sp!, {r4-r11}
#define RESTORE_REGS ldmfd sp!, {r4-r11}
@@ -110,18 +115,9 @@ ENTRY(copyin)
.Lnormal:
SAVE_REGS
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r2, r14}
- bl _C_LABEL(cpu_number)
- ldr r4, .Lcpu_info
- ldr r4, [r4, r0, lsl #2]
- ldr r4, [r4, #CI_CURPCB]
- ldmfd sp!, {r0-r2, r14}
-#else
- ldr r4, .Lcurpcb
+ GET_PCB(r4)
ldr r4, [r4]
-#endif
+
ldr r5, [r4, #PCB_ONFAULT]
adr r3, .Lcopyfault
@@ -356,18 +352,8 @@ ENTRY(copyout)
.Lnormale:
SAVE_REGS
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r2, r14}
- bl _C_LABEL(cpu_number)
- ldr r4, .Lcpu_info
- ldr r4, [r4, r0, lsl #2]
- ldr r4, [r4, #CI_CURPCB]
- ldmfd sp!, {r0-r2, r14}
-#else
- ldr r4, .Lcurpcb
+ GET_PCB(r4)
ldr r4, [r4]
-#endif
ldr r5, [r4, #PCB_ONFAULT]
adr r3, .Lcopyfault
@@ -560,18 +546,9 @@ ENTRY(copyout)
* else EFAULT if a page fault occurred.
*/
ENTRY(badaddr_read_1)
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r1, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0-r1, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
+
ldr ip, [r2, #PCB_ONFAULT]
adr r3, 1f
str r3, [r2, #PCB_ONFAULT]
@@ -594,18 +571,9 @@ ENTRY(badaddr_read_1)
* else EFAULT if a page fault occurred.
*/
ENTRY(badaddr_read_2)
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r1, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0-r1, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
+
ldr ip, [r2, #PCB_ONFAULT]
adr r3, 1f
str r3, [r2, #PCB_ONFAULT]
@@ -628,18 +596,9 @@ ENTRY(badaddr_read_2)
* else EFAULT if a page fault occurred.
*/
ENTRY(badaddr_read_4)
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r1, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0-r1, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
+
ldr ip, [r2, #PCB_ONFAULT]
adr r3, 1f
str r3, [r2, #PCB_ONFAULT]
Modified: projects/armv6/sys/arm/arm/bcopyinout_xscale.S
==============================================================================
--- projects/armv6/sys/arm/arm/bcopyinout_xscale.S Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/arm/bcopyinout_xscale.S Wed Dec 28 14:48:33 2011 (r228928)
@@ -41,12 +41,15 @@ __FBSDID("$FreeBSD$");
.text
.align 0
-#ifdef MULTIPROCESSOR
-.Lcpu_info:
- .word _C_LABEL(cpu_info)
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+ mrc p15, 0, tmp, c13, c0, 4; \
+ add tmp, tmp, #(PC_CURPCB)
#else
.Lcurpcb:
.word _C_LABEL(__pcpu) + PC_CURPCB
+#define GET_PCB(tmp) \
+ ldr tmp, .Lcurpcb
#endif
/*
@@ -85,18 +88,8 @@ ENTRY(copyin)
.Lnormal:
stmfd sp!, {r10-r11, lr}
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r2}
- bl _C_LABEL(cpu_number)
- ldr r10, .Lcpu_info
- ldmfd sp!, {r0-r2}
- ldr r10, [r10, r0, lsl #2]
- ldr r10, [r10, #CI_CURPCB]
-#else
- ldr r10, .Lcurpcb
+ GET_PCB(r10)
ldr r10, [r10]
-#endif
mov r3, #0x00
adr ip, .Lcopyin_fault
@@ -536,18 +529,8 @@ ENTRY(copyout)
.Lnormale:
stmfd sp!, {r10-r11, lr}
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r2}
- bl _C_LABEL(cpu_number)
- ldr r10, .Lcpu_info
- ldmfd sp!, {r0-r2}
- ldr r10, [r10, r0, lsl #2]
- ldr r10, [r10, #CI_CURPCB]
-#else
- ldr r10, .Lcurpcb
+ GET_PCB(r10)
ldr r10, [r10]
-#endif
mov r3, #0x00
adr ip, .Lcopyout_fault
Modified: projects/armv6/sys/arm/arm/copystr.S
==============================================================================
--- projects/armv6/sys/arm/arm/copystr.S Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/arm/copystr.S Wed Dec 28 14:48:33 2011 (r228928)
@@ -49,12 +49,17 @@ __FBSDID("$FreeBSD$");
.text
.align 0
-#ifdef MULTIPROCESSOR
-.Lcpu_info:
- .word _C_LABEL(cpu_info)
+
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+ mrc p15, 0, tmp, c13, c0, 4; \
+ add tmp, tmp, #(PC_CURPCB)
#else
.Lpcb:
.word _C_LABEL(__pcpu) + PC_CURPCB
+
+#define GET_PCB(tmp) \
+ ldr tmp, .Lpcb
#endif
/*
@@ -108,18 +113,8 @@ ENTRY(copyinstr)
moveq r0, #ENAMETOOLONG
beq 2f
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r3, r14}
- bl _C_LABEL(cpu_number)
- ldr r4, .Lcpu_info
- ldr r4, [r4, r0, lsl #2]
- ldr r4, [r4, #CI_CURPCB]
- ldmfd sp!, {r0-r3, r14}
-#else
- ldr r4, .Lpcb
+ GET_PCB(r4)
ldr r4, [r4]
-#endif
#ifdef DIAGNOSTIC
teq r4, #0x00000000
@@ -165,18 +160,8 @@ ENTRY(copyoutstr)
moveq r0, #ENAMETOOLONG
beq 2f
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r3, r14}
- bl _C_LABEL(cpu_number)
- ldr r4, .Lcpu_info
- ldr r4, [r4, r0, lsl #2]
- ldr r4, [r4, #CI_CURPCB]
- ldmfd sp!, {r0-r3, r14}
-#else
- ldr r4, .Lpcb
+ GET_PCB(r4)
ldr r4, [r4]
-#endif
#ifdef DIAGNOSTIC
teq r4, #0x00000000
Modified: projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S
==============================================================================
--- projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/arm/cpufunc_asm_pj4b.S Wed Dec 28 14:48:33 2011 (r228928)
@@ -177,6 +177,28 @@ ENTRY(pj4b_sleep)
mcr p15, 0, r0, c7, c0, 4 /* wait for interrupt */
RET
+ENTRY(get_core_id)
+ mrc p15, 0, r0, c0, c0, 5
+ RET
+
+/* Use Privileged Thread Id register as a holder for pcpu pointer */
+ENTRY(get_pcpu)
+ mrc p15, 0, r0, c13, c0, 4
+ RET
+
+ENTRY(set_pcpu)
+ mcr p15, 0, r0, c13, c0, 4
+ RET
+
+/* Use Privileged Thread Id register as a holder for tls pointer */
+ENTRY(get_tls)
+ mrc p15, 0, r0, c13, c0, 3
+ RET
+
+ENTRY(set_tls)
+ mcr p15, 0, r0, c13, c0, 3
+ RET
+
ENTRY(pj4b_config)
/* Set Auxiliary Debug Modes Control 2 register */
mrc p15, 1, r0, c15, c1, 2
Modified: projects/armv6/sys/arm/arm/fusu.S
==============================================================================
--- projects/armv6/sys/arm/arm/fusu.S Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/arm/fusu.S Wed Dec 28 14:48:33 2011 (r228928)
@@ -39,12 +39,15 @@
#include "assym.s"
__FBSDID("$FreeBSD$");
-#ifdef MULTIPROCESSOR
-.Lcpu_info:
- .word _C_LABEL(cpu_info)
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+ mrc p15, 0, tmp, c13, c0, 4; \
+ add tmp, tmp, #(PC_CURPCB)
#else
.Lcurpcb:
.word _C_LABEL(__pcpu) + PC_CURPCB
+#define GET_PCB(tmp) \
+ ldr tmp, .Lcurpcb
#endif
/*
@@ -54,18 +57,8 @@ __FBSDID("$FreeBSD$");
ENTRY_NP(casuword32)
ENTRY(casuword)
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r14}
-#else
- ldr r3, .Lcurpcb
+ GET_PCB(r3)
ldr r3, [r3]
-#endif
#ifdef DIAGNOSTIC
teq r3, #0x00000000
@@ -101,18 +94,8 @@ ENTRY(casuword)
ENTRY_NP(fuword32)
ENTRY(fuword)
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
#ifdef DIAGNOSTIC
teq r2, #0x00000000
@@ -135,18 +118,8 @@ ENTRY(fuword)
*/
ENTRY(fusword)
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
#ifdef DIAGNOSTIC
teq r2, #0x00000000
@@ -180,18 +153,8 @@ ENTRY(fuswintr)
mvnne r0, #0x00000000
RETne
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
#ifdef DIAGNOSTIC
teq r2, #0x00000000
@@ -229,18 +192,8 @@ _C_LABEL(block_userspace_access):
*/
ENTRY(fubyte)
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
#ifdef DIAGNOSTIC
teq r2, #0x00000000
@@ -303,18 +256,8 @@ fusupcbfaulttext:
ENTRY_NP(suword32)
ENTRY(suword)
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0, r1, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r1, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
#ifdef DIAGNOSTIC
teq r2, #0x00000000
@@ -343,17 +286,8 @@ ENTRY(suswintr)
mvnne r0, #0x00000000
RETne
-#ifdef MULTIPROCESSOR
- stmfd sp!, {r0, r1, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r1, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
#ifdef DIAGNOSTIC
teq r2, #0x00000000
@@ -382,17 +316,8 @@ ENTRY(suswintr)
*/
ENTRY(susword)
-#ifdef MULTIPROCESSOR
- stmfd sp!, {r0, r1, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r1, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
#ifdef DIAGNOSTIC
teq r2, #0x00000000
@@ -421,17 +346,8 @@ ENTRY(susword)
*/
ENTRY(subyte)
-#ifdef MULTIPROCESSOR
- stmfd sp!, {r0, r1, r14}
- bl _C_LABEL(cpu_number)
- ldr r2, .Lcpu_info
- ldr r2, [r2, r0, lsl #2]
- ldr r2, [r2, #CI_CURPCB]
- ldmfd sp!, {r0, r1, r14}
-#else
- ldr r2, .Lcurpcb
+ GET_PCB(r2)
ldr r2, [r2]
-#endif
#ifdef DIAGNOSTIC
Modified: projects/armv6/sys/arm/arm/machdep.c
==============================================================================
--- projects/armv6/sys/arm/arm/machdep.c Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/arm/machdep.c Wed Dec 28 14:48:33 2011 (r228928)
@@ -717,6 +717,7 @@ void
pcpu0_init(void)
{
+ set_pcpu(pcpup);
pcpu_init(pcpup, 0, sizeof(struct pcpu));
PCPU_SET(curthread, &thread0);
}
Modified: projects/armv6/sys/arm/arm/swtch.S
==============================================================================
--- projects/armv6/sys/arm/arm/swtch.S Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/arm/swtch.S Wed Dec 28 14:48:33 2011 (r228928)
@@ -92,41 +92,21 @@ __FBSDID("$FreeBSD$");
*/
#define DOMAIN_CLIENT 0x01
-#define IRQdisable \
- mrs r14, cpsr ; \
- orr r14, r14, #(I32_bit) ; \
- msr cpsr_c, r14 ; \
-
-#define IRQenable \
- mrs r14, cpsr ; \
- bic r14, r14, #(I32_bit) ; \
- msr cpsr_c, r14 ; \
-
-/*
- * These are used for switching the translation table/DACR.
- * Since the vector page can be invalid for a short time, we must
- * disable both regular IRQs *and* FIQs.
- *
- * XXX: This is not necessary if the vector table is relocated.
- */
-#define IRQdisableALL \
- mrs r14, cpsr ; \
- orr r14, r14, #(I32_bit | F32_bit) ; \
- msr cpsr_c, r14
-
-#define IRQenableALL \
- mrs r14, cpsr ; \
- bic r14, r14, #(I32_bit | F32_bit) ; \
- msr cpsr_c, r14
-
+
+#ifdef _ARM_ARCH_6
+#define GET_PCB(tmp) \
+ mrc p15, 0, tmp, c13, c0, 4; \
+ add tmp, tmp, #(PC_CURPCB)
+#else
.Lcurpcb:
.word _C_LABEL(__pcpu) + PC_CURPCB
+
+#define GET_PCB(tmp) \
+ ldr tmp, .Lcurpcb
+#endif
+
.Lcpufuncs:
.word _C_LABEL(cpufuncs)
-.Lblock_userspace_access:
- .word _C_LABEL(block_userspace_access)
-.Lcpu_do_powersave:
- .word _C_LABEL(cpu_do_powersave)
.Lblocked_lock:
.word _C_LABEL(blocked_lock)
ENTRY(cpu_throw)
@@ -202,7 +182,7 @@ ENTRY(cpu_throw)
#endif
/* We have a new curthread now so make a note it */
- ldr r6, .Lcurthread
+ GET_CURTHREAD_PTR(r6)
str r5, [r6]
/* Set the new tp */
@@ -215,7 +195,7 @@ ENTRY(cpu_throw)
str r6, [r4, #8] /* ARM_RAS_END */
/* Hook in a new pcb */
- ldr r6, .Lcurpcb
+ GET_PCB(r6)
str r7, [r6]
ldmfd sp!, {r4-r7, pc}
@@ -228,20 +208,13 @@ ENTRY(cpu_switch)
/* rem: r0 = old lwp */
/* rem: interrupts are disabled */
-#ifdef MULTIPROCESSOR
- /* XXX use curcpu() */
- ldr r2, .Lcpu_info_store
- str r2, [r6, #(L_CPU)]
-#endif
-
/* Process is now on a processor. */
-
/* We have a new curthread now so make a note it */
- ldr r7, .Lcurthread
+ GET_CURTHREAD_PTR(r7)
str r1, [r7]
/* Hook in a new pcb */
- ldr r7, .Lcurpcb
+ GET_PCB(r7)
ldr r2, [r1, #TD_PCB]
str r2, [r7]
@@ -414,7 +387,7 @@ ENTRY(cpu_switch)
/* Release the old thread */
str r6, [r4, #TD_LOCK]
ldr r6, .Lblocked_lock
- ldr r3, .Lcurthread
+ GET_CURTHREAD_PTR(r3)
ldr r3, [r3]
1:
@@ -452,15 +425,6 @@ ENTRY(cpu_switch)
ldr r13, [r7, #(PCB_SP)]
#endif
- /* rem: r6 = lock */
- /* rem: r7 = new pcb */
-
-#ifdef ARMFPE
- add r0, r7, #(USER_SIZE) & 0x00ff
- add r0, r0, #(USER_SIZE) & 0xff00
- bl _C_LABEL(arm_fpe_core_changecontext)
-#endif
-
/* rem: r5 = new lwp's proc */
/* rem: r6 = lock */
/* rem: r7 = new PCB */
Modified: projects/armv6/sys/arm/include/asmacros.h
==============================================================================
--- projects/armv6/sys/arm/include/asmacros.h Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/include/asmacros.h Wed Dec 28 14:48:33 2011 (r228928)
@@ -43,6 +43,7 @@
#ifdef _KERNEL
#ifdef LOCORE
+#include "opt_global.h"
/*
* ASM macros for pushing and pulling trapframes from the stack
@@ -155,9 +156,20 @@
.type name, %object ; \
name:
-#define EMPTY
+#ifdef _ARM_ARCH_6
+#define AST_LOCALS
+#define GET_CURTHREAD_PTR(tmp) \
+ mrc p15, 0, tmp, c13, c0, 4; \
+ add tmp, tmp, #(PC_CURTHREAD)
+#else
+#define AST_LOCALS ;\
+.Lcurthread: ;\
+ .word _C_LABEL(__pcpu) + PC_CURTHREAD
+
+#define GET_CURTHREAD_PTR(tmp) \
+ ldr tmp, .Lcurthread
+#endif
-
#define DO_AST \
ldr r0, [sp] /* Get the SPSR from stack */ ;\
mrs r4, cpsr /* save CPSR */ ;\
@@ -167,7 +179,7 @@ name:
teq r0, #(PSR_USR32_MODE) ;\
bne 2f /* Nope, get out now */ ;\
bic r4, r4, #(I32_bit|F32_bit) ;\
-1: ldr r5, .Lcurthread ;\
+1: GET_CURTHREAD_PTR(r5) ;\
ldr r5, [r5] ;\
ldr r1, [r5, #(TD_FLAGS)] ;\
and r1, r1, #(TDF_ASTPENDING|TDF_NEEDRESCHED) ;\
@@ -181,11 +193,6 @@ name:
b 1b ;\
2:
-
-#define AST_LOCALS ;\
-.Lcurthread: ;\
- .word _C_LABEL(__pcpu) + PC_CURTHREAD
-
#endif /* LOCORE */
#endif /* _KERNEL */
Modified: projects/armv6/sys/arm/include/cpufunc.h
==============================================================================
--- projects/armv6/sys/arm/include/cpufunc.h Wed Dec 28 13:01:12 2011 (r228927)
+++ projects/armv6/sys/arm/include/cpufunc.h Wed Dec 28 14:48:33 2011 (r228928)
@@ -474,6 +474,11 @@ void pj4bv7_setup (char *string);
void pj4bv6_setup (char *string);
void pj4b_config (void);
+int get_core_id (void);
+void set_pcpu (void *);
+void set_tls (void *);
+void *get_tls (void);
+
void armadaxp_idcache_wbinv_all (void);
void cortexa_setup (char *);
More information about the svn-src-projects
mailing list