summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.ninka.net>2003-10-27 16:24:23 -0800
committerDavid S. Miller <davem@nuts.ninka.net>2003-10-27 16:24:23 -0800
commit04c439f8ca4459de204892ec7eb67e095afc4291 (patch)
tree439fd82231657e649f435b2f55c71b534e398a75 /include
parent7bcacd881d191cb413c478e16ebe04e0ede19f72 (diff)
[SPARC64]: Get preempt building and working again.
- HAVE_DEC_LOCK depends on SMP - Trap return preemption check needs interrupt disabled check - Implement write_trylock - Fix in_atomic() definition when PREEMPT enabled
Diffstat (limited to 'include')
-rw-r--r--include/asm-sparc64/hardirq.h3
-rw-r--r--include/asm-sparc64/spinlock.h2
2 files changed, 4 insertions, 1 deletions
diff --git a/include/asm-sparc64/hardirq.h b/include/asm-sparc64/hardirq.h
index 97e43a160b3b..b57dd3df9965 100644
--- a/include/asm-sparc64/hardirq.h
+++ b/include/asm-sparc64/hardirq.h
@@ -79,7 +79,8 @@ typedef struct {
#define irq_enter() (preempt_count() += HARDIRQ_OFFSET)
#ifdef CONFIG_PREEMPT
-# define in_atomic() (preempt_count() != kernel_locked())
+# include <linux/smp_lock.h>
+# define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked())
# define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1)
#else
# define in_atomic() (preempt_count() != 0)
diff --git a/include/asm-sparc64/spinlock.h b/include/asm-sparc64/spinlock.h
index 8bdc07cfad6f..201472fc01bc 100644
--- a/include/asm-sparc64/spinlock.h
+++ b/include/asm-sparc64/spinlock.h
@@ -118,11 +118,13 @@ extern void __read_lock(rwlock_t *);
extern void __read_unlock(rwlock_t *);
extern void __write_lock(rwlock_t *);
extern void __write_unlock(rwlock_t *);
+extern int __write_trylock(rwlock_t *);
#define _raw_read_lock(p) __read_lock(p)
#define _raw_read_unlock(p) __read_unlock(p)
#define _raw_write_lock(p) __write_lock(p)
#define _raw_write_unlock(p) __write_unlock(p)
+#define _raw_write_trylock(p) __write_trylock(p)
#else /* !(CONFIG_DEBUG_SPINLOCK) */