Remove a redundant spinlock from struct rc_map. Signed-off-by: David Härdeman <david@xxxxxxxxxxx> --- drivers/media/rc/rc-keytable.c | 43 +++++++++++++++++----------------------- include/media/rc-core.h | 4 ++-- include/media/rc-map.h | 1 - 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/drivers/media/rc/rc-keytable.c b/drivers/media/rc/rc-keytable.c index 6d04b8f..f4d03d2 100644 --- a/drivers/media/rc/rc-keytable.c +++ b/drivers/media/rc/rc-keytable.c @@ -381,7 +381,7 @@ static int ir_setkeycode(struct input_dev *idev, entry.keycode = ke->keycode; - spin_lock_irqsave(&rc_map->lock, flags); + spin_lock_irqsave(&kt->lock, flags); if (ke->flags & INPUT_KEYMAP_BY_INDEX) { index = ke->index; @@ -430,7 +430,7 @@ static int ir_setkeycode(struct input_dev *idev, *old_keycode = ir_update_mapping(kt, rc_map, index, ke->keycode); out: - spin_unlock_irqrestore(&rc_map->lock, flags); + spin_unlock_irqrestore(&kt->lock, flags); return retval; } @@ -537,7 +537,7 @@ int ir_getkeycode(struct input_dev *idev, unsigned int index; int retval; - spin_lock_irqsave(&rc_map->lock, flags); + spin_lock_irqsave(&kt->lock, flags); if (ke->flags & INPUT_KEYMAP_BY_INDEX) { index = ke->index; @@ -600,7 +600,7 @@ int ir_getkeycode(struct input_dev *idev, retval = 0; out: - spin_unlock_irqrestore(&rc_map->lock, flags); + spin_unlock_irqrestore(&kt->lock, flags); return retval; } @@ -610,25 +610,15 @@ static u32 rc_get_keycode(struct rc_keytable *kt, struct rc_map *rc_map; unsigned int keycode = KEY_RESERVED; unsigned int index; - unsigned long flags; rc_map = &kt->rc_map; if (!rc_map) return KEY_RESERVED; - spin_lock_irqsave(&rc_map->lock, flags); - index = ir_lookup_by_scancode(rc_map, protocol, scancode); if (index < rc_map->len) keycode = rc_map->scan[index].keycode; - spin_unlock_irqrestore(&rc_map->lock, flags); - - if (keycode != KEY_RESERVED) - IR_dprintk(1, "%s: protocol 0x%04x scancode 0x%08llx keycode 0x%02x\n", - kt->dev->input_name, protocol, - (unsigned long long)scancode, keycode); - return keycode; } @@ -649,13 +639,17 @@ u32 rc_g_keycode_from_table(struct rc_dev *dev, { struct rc_keytable *kt; unsigned int keycode = KEY_RESERVED; + unsigned long flags; /* FIXME: This entire function is a hack. Remove it */ rcu_read_lock(); kt = rcu_dereference(dev->keytables[0]); if (!kt) goto out; + + spin_lock_irqsave(&kt->lock, flags); keycode = rc_get_keycode(kt, protocol, scancode); + spin_unlock_irqrestore(&kt->lock, flags); out: rcu_read_unlock(); @@ -669,7 +663,7 @@ EXPORT_SYMBOL_GPL(rc_g_keycode_from_table); * @sync: whether or not to call input_sync * * This function is used internally to release a keypress, it must be - * called with keylock held. + * called with kt->lock held. */ static void rc_do_keyup(struct rc_keytable *kt, bool sync) { @@ -694,9 +688,9 @@ void rc_keytable_keyup(struct rc_keytable *kt) { unsigned long flags; - spin_lock_irqsave(&kt->keylock, flags); + spin_lock_irqsave(&kt->lock, flags); rc_do_keyup(kt, true); - spin_unlock_irqrestore(&kt->keylock, flags); + spin_unlock_irqrestore(&kt->lock, flags); } /** @@ -721,10 +715,10 @@ static void rc_timer_keyup(unsigned long cookie) * to allow the input subsystem to do its auto-repeat magic or * a keyup event might follow immediately after the keydown. */ - spin_lock_irqsave(&kt->keylock, flags); + spin_lock_irqsave(&kt->lock, flags); if (time_is_before_eq_jiffies(kt->keyup_jiffies)) rc_do_keyup(kt, true); - spin_unlock_irqrestore(&kt->keylock, flags); + spin_unlock_irqrestore(&kt->lock, flags); } /** @@ -739,7 +733,7 @@ void rc_keytable_repeat(struct rc_keytable *kt) { unsigned long flags; - spin_lock_irqsave(&kt->keylock, flags); + spin_lock_irqsave(&kt->lock, flags); input_event(kt->idev, EV_MSC, MSC_SCAN, kt->last_scancode); input_sync(kt->idev); @@ -751,7 +745,7 @@ void rc_keytable_repeat(struct rc_keytable *kt) mod_timer(&kt->timer_keyup, kt->keyup_jiffies); out: - spin_unlock_irqrestore(&kt->keylock, flags); + spin_unlock_irqrestore(&kt->lock, flags); } /** @@ -772,7 +766,7 @@ void rc_keytable_keydown(struct rc_keytable *kt, enum rc_type protocol, u32 keycode; bool new_event; - spin_lock_irqsave(&kt->keylock, flags); + spin_lock_irqsave(&kt->lock, flags); keycode = rc_get_keycode(kt, protocol, scancode); new_event = (!kt->keypressed || @@ -805,7 +799,7 @@ void rc_keytable_keydown(struct rc_keytable *kt, enum rc_type protocol, kt->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT); mod_timer(&kt->timer_keyup, kt->keyup_jiffies); } - spin_unlock_irqrestore(&kt->keylock, flags); + spin_unlock_irqrestore(&kt->lock, flags); } static int rc_input_open(struct input_dev *idev) @@ -854,8 +848,7 @@ struct rc_keytable *rc_keytable_create(struct rc_dev *dev, const char *name, kt->idev = idev; kt->dev = dev; - spin_lock_init(&kt->keylock); - spin_lock_init(&kt->rc_map.lock); + spin_lock_init(&kt->lock); snprintf(kt->name, sizeof(*kt->name), name ? name : "undefined"); idev->getkeycode = ir_getkeycode; idev->setkeycode = ir_setkeycode; diff --git a/include/media/rc-core.h b/include/media/rc-core.h index 6f282e6..af63188 100644 --- a/include/media/rc-core.h +++ b/include/media/rc-core.h @@ -395,7 +395,7 @@ struct rc_dev { * @keypressed: whether a key is currently pressed or not * @keyup_jiffies: when the key should be auto-released * @timer_keyup: responsible for the auto-release of keys - * @keylock: protects the key state + * @lock: protects the key state * @last_keycode: keycode of the last keypress * @last_protocol: protocol of the last keypress * @last_scancode: scancode of the last keypress @@ -410,7 +410,7 @@ struct rc_keytable { bool keypressed; unsigned long keyup_jiffies; struct timer_list timer_keyup; - spinlock_t keylock; + spinlock_t lock; u32 last_keycode; enum rc_type last_protocol; u32 last_scancode; diff --git a/include/media/rc-map.h b/include/media/rc-map.h index bfa27fc..34c192f 100644 --- a/include/media/rc-map.h +++ b/include/media/rc-map.h @@ -94,7 +94,6 @@ struct rc_map { unsigned int alloc; /* Size of *scan in bytes */ enum rc_type rc_type; /* For in-kernel keymaps */ const char *name; - spinlock_t lock; }; struct rc_map_list { -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html