diff options
author | Andrew Waterman <waterman@eecs.berkeley.edu> | 2015-11-18 11:16:38 -0800 |
---|---|---|
committer | Andrew Waterman <waterman@eecs.berkeley.edu> | 2015-11-18 11:16:38 -0800 |
commit | e59b354ab42c18239e7e88939076bb7841aa205c (patch) | |
tree | 0acc3c8fb29bc9313263d8571497285e545c7ec7 /pk | |
parent | 83c8b2027fdbe695ba90f4a505a159767a885c1f (diff) | |
parent | b9961802ce2f774c884d6708beec5e8ac6f264ed (diff) | |
download | pk-e59b354ab42c18239e7e88939076bb7841aa205c.zip pk-e59b354ab42c18239e7e88939076bb7841aa205c.tar.gz pk-e59b354ab42c18239e7e88939076bb7841aa205c.tar.bz2 |
Merge pull request #14 from darius-bluespec/fix-disable-atomics
Fix macros for emulating atomic operations (--disable-atomics).
Diffstat (limited to 'pk')
-rw-r--r-- | pk/atomic.h | 6 | ||||
-rw-r--r-- | pk/file.c | 2 |
2 files changed, 4 insertions, 4 deletions
diff --git a/pk/atomic.h b/pk/atomic.h index c2adf00..2ec4a04 100644 --- a/pk/atomic.h +++ b/pk/atomic.h @@ -23,19 +23,19 @@ typedef struct { int lock; } spinlock_t; #else # define atomic_add(ptr, inc) ({ \ long flags = disable_irqsave(); \ - typeof(ptr) res = *(volatile typeof(ptr))(ptr); \ + typeof(*(ptr)) res = *(volatile typeof(*(ptr)) *)(ptr); \ *(volatile typeof(ptr))(ptr) = res + (inc); \ enable_irqrestore(flags); \ res; }) # define atomic_swap(ptr, swp) ({ \ long flags = disable_irqsave(); \ - typeof(ptr) res = *(volatile typeof(ptr))(ptr); \ + typeof(*(ptr)) res = *(volatile typeof(*(ptr)) *)(ptr); \ *(volatile typeof(ptr))(ptr) = (swp); \ enable_irqrestore(flags); \ res; }) # define atomic_cas(ptr, cmp, swp) ({ \ long flags = disable_irqsave(); \ - typeof(ptr) res = *(volatile typeof(ptr))(ptr); \ + typeof(*(ptr)) res = *(volatile typeof(*(ptr)) *)(ptr); \ if (res == (cmp)) *(volatile typeof(ptr))(ptr) = (swp); \ enable_irqrestore(flags); \ res; }) @@ -107,7 +107,7 @@ int fd_close(int fd) file_t* f = file_get(fd); if (!f) return -1; - file_t* old = atomic_cas(&fds[fd], (long)f, 0); + file_t* old = atomic_cas(&fds[fd], f, 0); file_decref(f); if (old != f) return -1; |