|
@@ -35,6 +35,7 @@
|
|
#include <asm/pgtable.h>
|
|
#include <asm/pgtable.h>
|
|
#include <asm/signal.h>
|
|
#include <asm/signal.h>
|
|
#include <asm/unistd.h>
|
|
#include <asm/unistd.h>
|
|
|
|
+#include <asm/ldcw.h>
|
|
#include <asm/thread_info.h>
|
|
#include <asm/thread_info.h>
|
|
|
|
|
|
#include <linux/linkage.h>
|
|
#include <linux/linkage.h>
|
|
@@ -46,6 +47,14 @@
|
|
#endif
|
|
#endif
|
|
|
|
|
|
.import pa_tlb_lock,data
|
|
.import pa_tlb_lock,data
|
|
|
|
+ .macro load_pa_tlb_lock reg
|
|
|
|
+#if __PA_LDCW_ALIGNMENT > 4
|
|
|
|
+ load32 PA(pa_tlb_lock) + __PA_LDCW_ALIGNMENT-1, \reg
|
|
|
|
+ depi 0,31,__PA_LDCW_ALIGN_ORDER, \reg
|
|
|
|
+#else
|
|
|
|
+ load32 PA(pa_tlb_lock), \reg
|
|
|
|
+#endif
|
|
|
|
+ .endm
|
|
|
|
|
|
/* space_to_prot macro creates a prot id from a space id */
|
|
/* space_to_prot macro creates a prot id from a space id */
|
|
|
|
|
|
@@ -457,7 +466,7 @@
|
|
.macro tlb_lock spc,ptp,pte,tmp,tmp1,fault
|
|
.macro tlb_lock spc,ptp,pte,tmp,tmp1,fault
|
|
#ifdef CONFIG_SMP
|
|
#ifdef CONFIG_SMP
|
|
cmpib,COND(=),n 0,\spc,2f
|
|
cmpib,COND(=),n 0,\spc,2f
|
|
- load32 PA(pa_tlb_lock),\tmp
|
|
|
|
|
|
+ load_pa_tlb_lock \tmp
|
|
1: LDCW 0(\tmp),\tmp1
|
|
1: LDCW 0(\tmp),\tmp1
|
|
cmpib,COND(=) 0,\tmp1,1b
|
|
cmpib,COND(=) 0,\tmp1,1b
|
|
nop
|
|
nop
|
|
@@ -480,7 +489,7 @@
|
|
/* Release pa_tlb_lock lock. */
|
|
/* Release pa_tlb_lock lock. */
|
|
.macro tlb_unlock1 spc,tmp
|
|
.macro tlb_unlock1 spc,tmp
|
|
#ifdef CONFIG_SMP
|
|
#ifdef CONFIG_SMP
|
|
- load32 PA(pa_tlb_lock),\tmp
|
|
|
|
|
|
+ load_pa_tlb_lock \tmp
|
|
tlb_unlock0 \spc,\tmp
|
|
tlb_unlock0 \spc,\tmp
|
|
#endif
|
|
#endif
|
|
.endm
|
|
.endm
|