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