Title: [7194] trunk/arch/blackfin: optimize fixed code handling for the most common case
Revision
7194
Author
vapier
Date
2009-08-17 15:05:07 -0400 (Mon, 17 Aug 2009)

Log Message

optimize fixed code handling for the most common case

Modified Paths


Diff

Modified: trunk/arch/blackfin/kernel/process.c (7193 => 7194)


--- trunk/arch/blackfin/kernel/process.c	2009-08-14 10:30:05 UTC (rev 7193)
+++ trunk/arch/blackfin/kernel/process.c	2009-08-17 19:05:07 UTC (rev 7194)
@@ -259,25 +259,19 @@
 {
 	int __user *up0 = (int __user *)regs->p0;
 
-	if (regs->pc < ATOMIC_SEQS_START || regs->pc >= ATOMIC_SEQS_END)
-		return;
-
 	switch (regs->pc) {
 	case ATOMIC_XCHG32 + 2:
 		put_user(regs->r1, up0);
-		regs->pc += 2;
+		regs->pc = ATOMIC_XCHG32 + 4;
 		break;
 
 	case ATOMIC_CAS32 + 2:
 	case ATOMIC_CAS32 + 4:
 		if (regs->r0 == regs->r1)
+	case ATOMIC_CAS32 + 6:
 			put_user(regs->r2, up0);
 		regs->pc = ATOMIC_CAS32 + 8;
 		break;
-	case ATOMIC_CAS32 + 6:
-		put_user(regs->r2, up0);
-		regs->pc += 2;
-		break;
 
 	case ATOMIC_ADD32 + 2:
 		regs->r0 = regs->r1 + regs->r0;

Modified: trunk/arch/blackfin/mach-common/entry.S (7193 => 7194)


--- trunk/arch/blackfin/mach-common/entry.S	2009-08-14 10:30:05 UTC (rev 7193)
+++ trunk/arch/blackfin/mach-common/entry.S	2009-08-17 19:05:07 UTC (rev 7194)
@@ -1025,6 +1025,12 @@
 #endif
 	sti r0;
 
+	/* finish the userspace "atomic" functions for it */
+	r1 = FIXED_CODE_END;
+	r2 = [sp + PT_PC];
+	cc = r1 <= r2;
+	if cc jump .Lresume_userspace (bp);
+
 	r0 = sp;
 	sp += -12;
 	call _finish_atomic_sections;
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to