PERFORCE change 96678 for review
Kip Macy
kmacy at FreeBSD.org
Fri May 5 03:38:44 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=96678
Change 96678 by kmacy at kmacy_storage:sun4v_rwbuf on 2006/05/05 03:38:34
atomically clear and set active bits
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/swtch.S#20 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/swtch.S#20 (text+ko) ====
@@ -40,6 +40,22 @@
#define PCB_REG %g6
+#define ATOMIC_CLEAR_INT_BIT(addr, old, bit, new, label) \
+ lduw [addr], old ; \
+label: andn old, bit, new ; \
+ cas [addr], old, new ; \
+ cmp old, new ; \
+ bne,pn %icc, label ## b ; \
+ mov new, old
+
+#define ATOMIC_SET_INT_BIT(addr, old, bit, new, label) \
+ lduw [addr], old ; \
+label: or old, bit, new ; \
+ cas [addr], old, new ; \
+ cmp old, new ; \
+ bne,pn %icc, label ## b ; \
+ mov new, old
+
/*
* void cpu_throw(struct thread *old, struct thread *new)
*/
@@ -127,9 +143,7 @@
ldx [PCB_REG + PCB_PC], %i7
sub %fp, CCFSZ, %sp
-
-
- /*
+ /*
* Point to the pmaps of the new process, and of the last non-kernel
* process to run.
*/
@@ -164,30 +178,14 @@
* Mark the old pmap as no longer active on this CPU
*/
add %l2, PM_ACTIVE, %l2
- lduw [%l2], %l3
-8: andn %l3, %l4, %l6
- cas [%l2], %l3, %l6
- cmp %l3, %l6
- bne,pn %icc, 8b
- mov %l3, %l6
+ ATOMIC_CLEAR_INT_BIT(%l2, %l3, %l4, %l6, 8)
- /*
- * Mark the new pmap as active on this CPU
- * XXX need to CAS
- */
10:
- lduw [%i2 + PM_ACTIVE], %l3
- or %l3, %l4, %l3
- stw %l3, [%i2 + PM_ACTIVE]
+ add %i2, PM_ACTIVE, %i3
+ ATOMIC_SET_INT_BIT(%i3, %l3, %l4, %l6, 11)
- /*
- * Mark the new pmap as possibly having TLB entries on this CPU
- * XXX need to CAS
- */
- lduw [%i2 + PM_TLBACTIVE], %l3
- or %l3, %l4, %l3
- stw %l3, [%i2 + PM_TLBACTIVE]
-
+ add %i2, PM_TLBACTIVE, %i3
+ ATOMIC_SET_INT_BIT(%i3, %l3, %l4, %l6, 12)
mov SCRATCH_REG_HASH_USER, %l6
mov SCRATCH_REG_TSB_USER, %l7
More information about the p4-projects
mailing list