[PATCH 29/43] rc-core: remove redundant spinlock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 bdb60f4..eb48358 100644
--- a/drivers/media/rc/rc-keytable.c
+++ b/drivers/media/rc/rc-keytable.c
@@ -335,7 +335,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;
@@ -391,7 +391,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;
 }
 
@@ -495,7 +495,7 @@ static 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;
@@ -564,7 +564,7 @@ static 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;
 }
 
@@ -574,25 +574,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;
 }
 
@@ -613,13 +603,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();
@@ -633,7 +627,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)
 {
@@ -658,9 +652,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);
 }
 
 /**
@@ -685,10 +679,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);
 }
 
 /**
@@ -703,7 +697,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);
@@ -715,7 +709,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);
 }
 
 /**
@@ -736,7 +730,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 || kt->last_protocol != protocol ||
@@ -767,7 +761,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);
 }
 
 /**
@@ -891,8 +885,7 @@ struct rc_keytable *rc_keytable_create(struct rc_dev *dev,
 	 */
 	idev->rep[REP_PERIOD] = 125;
 
-	spin_lock_init(&kt->rc_map.lock);
-	spin_lock_init(&kt->keylock);
+	spin_lock_init(&kt->lock);
 	return kt;
 
 out:
diff --git a/include/media/rc-core.h b/include/media/rc-core.h
index 1852b47..cd93623 100644
--- a/include/media/rc-core.h
+++ b/include/media/rc-core.h
@@ -336,7 +336,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
@@ -351,7 +351,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;
 	u64				last_scancode;
diff --git a/include/media/rc-map.h b/include/media/rc-map.h
index 7de8215..5737c65 100644
--- a/include/media/rc-map.h
+++ b/include/media/rc-map.h
@@ -90,7 +90,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


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux