summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2008-04-03 23:10:25 +0000
committerkettenis <kettenis@openbsd.org>2008-04-03 23:10:25 +0000
commit08255d043f71b8765046969e35b5ab4e35adbae4 (patch)
treed96562b51f79b68635b1d479972803ddd3bc042a
parentClean up the DMA read/write control register setup code and add some (diff)
downloadwireguard-openbsd-08255d043f71b8765046969e35b5ab4e35adbae4.tar.xz
wireguard-openbsd-08255d043f71b8765046969e35b5ab4e35adbae4.zip
Use atomic operations to invalidate TSB entries.
-rw-r--r--sys/arch/sparc64/sparc64/pmap.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/arch/sparc64/sparc64/pmap.c b/sys/arch/sparc64/sparc64/pmap.c
index 1a518b7e8d5..b4ebb568355 100644
--- a/sys/arch/sparc64/sparc64/pmap.c
+++ b/sys/arch/sparc64/sparc64/pmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap.c,v 1.58 2008/04/02 20:23:22 kettenis Exp $ */
+/* $OpenBSD: pmap.c,v 1.59 2008/04/03 23:10:25 kettenis Exp $ */
/* $NetBSD: pmap.c,v 1.107 2001/08/31 16:47:41 eeh Exp $ */
#undef NO_VCACHE /* Don't forget the locked TLB in dostart */
/*
@@ -310,9 +310,11 @@ tsb_invalidate(int ctx, vaddr_t va)
i = ptelookup_va(va);
tag = TSB_TAG(0, ctx, va);
if (tsb_dmmu[i].tag == tag)
- tsb_dmmu[i].tag = TSB_TAG_INVALID;
+ sparc64_casx((volatile unsigned long *)&tsb_dmmu[i].tag,
+ tag, TSB_TAG_INVALID);
if (tsb_immu[i].tag == tag)
- tsb_immu[i].tag = TSB_TAG_INVALID;
+ sparc64_casx((volatile unsigned long *)&tsb_immu[i].tag,
+ tag, TSB_TAG_INVALID);
}
#if notyet