From 04c439f8ca4459de204892ec7eb67e095afc4291 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Mon, 27 Oct 2003 16:24:23 -0800 Subject: [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 --- include/asm-sparc64/hardirq.h | 3 ++- include/asm-sparc64/spinlock.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'include') 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 +# 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) */ -- cgit v1.2.3