diff options
| author | David S. Miller <davem@nuts.ninka.net> | 2003-10-27 16:24:23 -0800 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2003-10-27 16:24:23 -0800 |
| commit | 04c439f8ca4459de204892ec7eb67e095afc4291 (patch) | |
| tree | 439fd82231657e649f435b2f55c71b534e398a75 /include | |
| parent | 7bcacd881d191cb413c478e16ebe04e0ede19f72 (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.h | 3 | ||||
| -rw-r--r-- | include/asm-sparc64/spinlock.h | 2 |
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) */ |
