Commit a4e9e1f0 authored by Kent Overstreet's avatar Kent Overstreet

six locks: Single instance of six_lock_vals

Since we're not generating different versions of the lock functions for
each lock type, the constant propagation we were trying to do before is
no longer useful - this is now a small code size decrease.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 357c1261
...@@ -70,26 +70,26 @@ struct six_lock_vals { ...@@ -70,26 +70,26 @@ struct six_lock_vals {
enum six_lock_type unlock_wakeup; enum six_lock_type unlock_wakeup;
}; };
#define LOCK_VALS { \ static const struct six_lock_vals l[] = {
[SIX_LOCK_read] = { \ [SIX_LOCK_read] = {
.lock_val = 1ULL << SIX_STATE_READ_OFFSET, \ .lock_val = 1ULL << SIX_STATE_READ_OFFSET,
.lock_fail = SIX_LOCK_HELD_write, \ .lock_fail = SIX_LOCK_HELD_write,
.held_mask = SIX_LOCK_HELD_read, \ .held_mask = SIX_LOCK_HELD_read,
.unlock_wakeup = SIX_LOCK_write, \ .unlock_wakeup = SIX_LOCK_write,
}, \ },
[SIX_LOCK_intent] = { \ [SIX_LOCK_intent] = {
.lock_val = SIX_STATE_INTENT_HELD, \ .lock_val = SIX_STATE_INTENT_HELD,
.lock_fail = SIX_LOCK_HELD_intent, \ .lock_fail = SIX_LOCK_HELD_intent,
.held_mask = SIX_LOCK_HELD_intent, \ .held_mask = SIX_LOCK_HELD_intent,
.unlock_wakeup = SIX_LOCK_intent, \ .unlock_wakeup = SIX_LOCK_intent,
}, \ },
[SIX_LOCK_write] = { \ [SIX_LOCK_write] = {
.lock_val = SIX_LOCK_HELD_write, \ .lock_val = SIX_LOCK_HELD_write,
.lock_fail = SIX_LOCK_HELD_read, \ .lock_fail = SIX_LOCK_HELD_read,
.held_mask = SIX_LOCK_HELD_write, \ .held_mask = SIX_LOCK_HELD_write,
.unlock_wakeup = SIX_LOCK_read, \ .unlock_wakeup = SIX_LOCK_read,
}, \ },
} };
static inline u32 six_state_seq(u64 state) static inline u32 six_state_seq(u64 state)
{ {
...@@ -144,7 +144,6 @@ static inline unsigned pcpu_read_count(struct six_lock *lock) ...@@ -144,7 +144,6 @@ static inline unsigned pcpu_read_count(struct six_lock *lock)
static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type, static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type,
struct task_struct *task, bool try) struct task_struct *task, bool try)
{ {
const struct six_lock_vals l[] = LOCK_VALS;
int ret; int ret;
u64 old, new, v; u64 old, new, v;
...@@ -625,7 +624,6 @@ EXPORT_SYMBOL_GPL(six_lock_ip_waiter); ...@@ -625,7 +624,6 @@ EXPORT_SYMBOL_GPL(six_lock_ip_waiter);
__always_inline __always_inline
static void do_six_unlock_type(struct six_lock *lock, enum six_lock_type type) static void do_six_unlock_type(struct six_lock *lock, enum six_lock_type type)
{ {
const struct six_lock_vals l[] = LOCK_VALS;
u64 state; u64 state;
if (type == SIX_LOCK_intent) if (type == SIX_LOCK_intent)
...@@ -712,7 +710,6 @@ EXPORT_SYMBOL_GPL(six_lock_downgrade); ...@@ -712,7 +710,6 @@ EXPORT_SYMBOL_GPL(six_lock_downgrade);
*/ */
bool six_lock_tryupgrade(struct six_lock *lock) bool six_lock_tryupgrade(struct six_lock *lock)
{ {
const struct six_lock_vals l[] = LOCK_VALS;
u64 old, new, v = atomic64_read(&lock->state); u64 old, new, v = atomic64_read(&lock->state);
do { do {
...@@ -780,8 +777,6 @@ EXPORT_SYMBOL_GPL(six_trylock_convert); ...@@ -780,8 +777,6 @@ EXPORT_SYMBOL_GPL(six_trylock_convert);
*/ */
void six_lock_increment(struct six_lock *lock, enum six_lock_type type) void six_lock_increment(struct six_lock *lock, enum six_lock_type type)
{ {
const struct six_lock_vals l[] = LOCK_VALS;
six_acquire(&lock->dep_map, 0, type == SIX_LOCK_read, _RET_IP_); six_acquire(&lock->dep_map, 0, type == SIX_LOCK_read, _RET_IP_);
/* XXX: assert already locked, and that we don't overflow: */ /* XXX: assert already locked, and that we don't overflow: */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment