mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-22 20:20:05 +07:00
Merge rsync://rsync.kernel.org/pub/linux/kernel/people/davem/sparc-2.6.git
This commit is contained in:
commit
6d9c5d94d3
@ -31,15 +31,20 @@
|
|||||||
|
|
||||||
#ifndef CONFIG_DEBUG_SPINLOCK
|
#ifndef CONFIG_DEBUG_SPINLOCK
|
||||||
|
|
||||||
typedef unsigned char spinlock_t;
|
typedef struct {
|
||||||
#define SPIN_LOCK_UNLOCKED 0
|
volatile unsigned char lock;
|
||||||
|
#ifdef CONFIG_PREEMPT
|
||||||
|
unsigned int break_lock;
|
||||||
|
#endif
|
||||||
|
} spinlock_t;
|
||||||
|
#define SPIN_LOCK_UNLOCKED (spinlock_t) {0,}
|
||||||
|
|
||||||
#define spin_lock_init(lock) (*((unsigned char *)(lock)) = 0)
|
#define spin_lock_init(lp) do { *(lp)= SPIN_LOCK_UNLOCKED; } while(0)
|
||||||
#define spin_is_locked(lock) (*((volatile unsigned char *)(lock)) != 0)
|
#define spin_is_locked(lp) ((lp)->lock != 0)
|
||||||
|
|
||||||
#define spin_unlock_wait(lock) \
|
#define spin_unlock_wait(lp) \
|
||||||
do { membar("#LoadLoad"); \
|
do { membar("#LoadLoad"); \
|
||||||
} while(*((volatile unsigned char *)lock))
|
} while(lp->lock)
|
||||||
|
|
||||||
static inline void _raw_spin_lock(spinlock_t *lock)
|
static inline void _raw_spin_lock(spinlock_t *lock)
|
||||||
{
|
{
|
||||||
@ -109,20 +114,19 @@ static inline void _raw_spin_lock_flags(spinlock_t *lock, unsigned long flags)
|
|||||||
#else /* !(CONFIG_DEBUG_SPINLOCK) */
|
#else /* !(CONFIG_DEBUG_SPINLOCK) */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned char lock;
|
volatile unsigned char lock;
|
||||||
unsigned int owner_pc, owner_cpu;
|
unsigned int owner_pc, owner_cpu;
|
||||||
|
#ifdef CONFIG_PREEMPT
|
||||||
|
unsigned int break_lock;
|
||||||
|
#endif
|
||||||
} spinlock_t;
|
} spinlock_t;
|
||||||
#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0, 0, 0xff }
|
#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0, 0, 0xff }
|
||||||
#define spin_lock_init(__lock) \
|
#define spin_lock_init(lp) do { *(lp)= SPIN_LOCK_UNLOCKED; } while(0)
|
||||||
do { (__lock)->lock = 0; \
|
#define spin_is_locked(__lock) ((__lock)->lock != 0)
|
||||||
(__lock)->owner_pc = 0; \
|
|
||||||
(__lock)->owner_cpu = 0xff; \
|
|
||||||
} while(0)
|
|
||||||
#define spin_is_locked(__lock) (*((volatile unsigned char *)(&((__lock)->lock))) != 0)
|
|
||||||
#define spin_unlock_wait(__lock) \
|
#define spin_unlock_wait(__lock) \
|
||||||
do { \
|
do { \
|
||||||
membar("#LoadLoad"); \
|
membar("#LoadLoad"); \
|
||||||
} while(*((volatile unsigned char *)(&((__lock)->lock))))
|
} while((__lock)->lock)
|
||||||
|
|
||||||
extern void _do_spin_lock (spinlock_t *lock, char *str);
|
extern void _do_spin_lock (spinlock_t *lock, char *str);
|
||||||
extern void _do_spin_unlock (spinlock_t *lock);
|
extern void _do_spin_unlock (spinlock_t *lock);
|
||||||
@ -139,8 +143,13 @@ extern int _do_spin_trylock (spinlock_t *lock);
|
|||||||
|
|
||||||
#ifndef CONFIG_DEBUG_SPINLOCK
|
#ifndef CONFIG_DEBUG_SPINLOCK
|
||||||
|
|
||||||
typedef unsigned int rwlock_t;
|
typedef struct {
|
||||||
#define RW_LOCK_UNLOCKED 0
|
volatile unsigned int lock;
|
||||||
|
#ifdef CONFIG_PREEMPT
|
||||||
|
unsigned int break_lock;
|
||||||
|
#endif
|
||||||
|
} rwlock_t;
|
||||||
|
#define RW_LOCK_UNLOCKED {0,}
|
||||||
#define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0)
|
#define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0)
|
||||||
|
|
||||||
static void inline __read_lock(rwlock_t *lock)
|
static void inline __read_lock(rwlock_t *lock)
|
||||||
@ -251,9 +260,12 @@ static int inline __write_trylock(rwlock_t *lock)
|
|||||||
#else /* !(CONFIG_DEBUG_SPINLOCK) */
|
#else /* !(CONFIG_DEBUG_SPINLOCK) */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned long lock;
|
volatile unsigned long lock;
|
||||||
unsigned int writer_pc, writer_cpu;
|
unsigned int writer_pc, writer_cpu;
|
||||||
unsigned int reader_pc[NR_CPUS];
|
unsigned int reader_pc[NR_CPUS];
|
||||||
|
#ifdef CONFIG_PREEMPT
|
||||||
|
unsigned int break_lock;
|
||||||
|
#endif
|
||||||
} rwlock_t;
|
} rwlock_t;
|
||||||
#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0xff, { } }
|
#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0xff, { } }
|
||||||
#define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0)
|
#define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0)
|
||||||
@ -304,6 +316,8 @@ do { unsigned long flags; \
|
|||||||
#endif /* CONFIG_DEBUG_SPINLOCK */
|
#endif /* CONFIG_DEBUG_SPINLOCK */
|
||||||
|
|
||||||
#define _raw_read_trylock(lock) generic_raw_read_trylock(lock)
|
#define _raw_read_trylock(lock) generic_raw_read_trylock(lock)
|
||||||
|
#define read_can_lock(rw) (!((rw)->lock & 0x80000000UL))
|
||||||
|
#define write_can_lock(rw) (!(rw)->lock)
|
||||||
|
|
||||||
#endif /* !(__ASSEMBLY__) */
|
#endif /* !(__ASSEMBLY__) */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user