|
@@ -14,7 +14,9 @@
|
|
#include <linux/list.h>
|
|
#include <linux/list.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/atomic.h>
|
|
#include <linux/atomic.h>
|
|
|
|
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
|
|
#include <linux/osq_lock.h>
|
|
#include <linux/osq_lock.h>
|
|
|
|
+#endif
|
|
|
|
|
|
struct rw_semaphore;
|
|
struct rw_semaphore;
|
|
|
|
|
|
@@ -26,7 +28,7 @@ struct rw_semaphore {
|
|
long count;
|
|
long count;
|
|
struct list_head wait_list;
|
|
struct list_head wait_list;
|
|
raw_spinlock_t wait_lock;
|
|
raw_spinlock_t wait_lock;
|
|
-#ifdef CONFIG_SMP
|
|
|
|
|
|
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
|
|
struct optimistic_spin_queue osq; /* spinner MCS lock */
|
|
struct optimistic_spin_queue osq; /* spinner MCS lock */
|
|
/*
|
|
/*
|
|
* Write owner. Used as a speculative check to see
|
|
* Write owner. Used as a speculative check to see
|
|
@@ -63,7 +65,7 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem)
|
|
# define __RWSEM_DEP_MAP_INIT(lockname)
|
|
# define __RWSEM_DEP_MAP_INIT(lockname)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-#if defined(CONFIG_SMP) && !defined(CONFIG_RWSEM_GENERIC_SPINLOCK)
|
|
|
|
|
|
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
|
|
#define __RWSEM_OPT_INIT(lockname) , .osq = OSQ_LOCK_UNLOCKED, .owner = NULL
|
|
#define __RWSEM_OPT_INIT(lockname) , .osq = OSQ_LOCK_UNLOCKED, .owner = NULL
|
|
#else
|
|
#else
|
|
#define __RWSEM_OPT_INIT(lockname)
|
|
#define __RWSEM_OPT_INIT(lockname)
|