X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2FSMP.h;h=68f16905c6241b78efa72092e7c7415e6e90fb70;hb=6bf790bab31b9bb8791e2adc46c8ff511392419f;hp=5974c962add936413d76506066940fe06cf46224;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/includes/SMP.h b/includes/SMP.h index 5974c96..68f1690 100644 --- a/includes/SMP.h +++ b/includes/SMP.h @@ -96,7 +96,7 @@ cas(StgVolatilePtr p, StgWord o, StgWord n) * that require it (not x86 or x86_64). */ INLINE_HEADER void -wb(void) { +write_barrier(void) { #if i386_HOST_ARCH || x86_64_HOST_ARCH __asm__ __volatile__ ("" : : : "memory"); #elif powerpc_HOST_ARCH @@ -136,7 +136,7 @@ unlockClosure(StgClosure *p, StgInfoTable *info) { #if i386_HOST_ARCH || x86_64_HOST_ARCH || powerpc_HOST_ARCH // This is a strictly ordered write, so we need a wb(): - wb(); + write_barrier(); p->header.info = info; #else RELEASE_SM_LOCK; @@ -145,7 +145,7 @@ unlockClosure(StgClosure *p, StgInfoTable *info) #else /* !THREADED_RTS */ -#define wb() /* nothing */ +#define write_barrier() /* nothing */ INLINE_HEADER StgWord xchg(StgPtr p, StgWord w) @@ -155,6 +155,21 @@ xchg(StgPtr p, StgWord w) return old; } +INLINE_HEADER StgInfoTable * +lockClosure(StgClosure *p) +{ return (StgInfoTable *)p->header.info; } + +INLINE_HEADER void +unlockClosure(StgClosure *p STG_UNUSED, StgInfoTable *info STG_UNUSED) +{ /* nothing */ } + #endif /* !THREADED_RTS */ +// Handy specialised versions of lockClosure()/unlockClosure() +INLINE_HEADER void lockTSO(StgTSO *tso) +{ lockClosure((StgClosure *)tso); } + +INLINE_HEADER void unlockTSO(StgTSO *tso) +{ unlockClosure((StgClosure*)tso, (StgInfoTable*)&stg_TSO_info); } + #endif /* SMP_H */