diff options
author | Heiner Kallweit <hkallweit1@gmail.com> | 2016-09-27 16:48:47 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-10-24 18:16:06 -0200 |
commit | 37e90a220abc4c5dee1fc42382cbca595a0e95bd (patch) | |
tree | 65da02589cc8323f17290e74983cef08aba491d8 /drivers/media/rc | |
parent | 8a5d2acee6fa9ec5997335cc3ebdd47c7524d6d2 (diff) | |
download | linux-37e90a220abc4c5dee1fc42382cbca595a0e95bd.tar.bz2 |
[media] rc: ir-raw: change type of available_protocols to atomic64_t
Changing available_protocols to atomic64_t allows to get rid of the
mutex protecting access to the variable. This helps to simplify
the code.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/rc')
-rw-r--r-- | drivers/media/rc/rc-ir-raw.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/drivers/media/rc/rc-ir-raw.c b/drivers/media/rc/rc-ir-raw.c index 205ecc602e34..1c42a9f2f290 100644 --- a/drivers/media/rc/rc-ir-raw.c +++ b/drivers/media/rc/rc-ir-raw.c @@ -26,8 +26,7 @@ static LIST_HEAD(ir_raw_client_list); /* Used to handle IR raw handler extensions */ static DEFINE_MUTEX(ir_raw_handler_lock); static LIST_HEAD(ir_raw_handler_list); -static DEFINE_MUTEX(available_protocols_lock); -static u64 available_protocols; +static atomic64_t available_protocols = ATOMIC64_INIT(0); static int ir_raw_event_thread(void *data) { @@ -234,11 +233,7 @@ EXPORT_SYMBOL_GPL(ir_raw_event_handle); u64 ir_raw_get_allowed_protocols(void) { - u64 protocols; - mutex_lock(&available_protocols_lock); - protocols = available_protocols; - mutex_unlock(&available_protocols_lock); - return protocols; + return atomic64_read(&available_protocols); } static int change_protocol(struct rc_dev *dev, u64 *rc_type) @@ -331,9 +326,7 @@ int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler) if (ir_raw_handler->raw_register) list_for_each_entry(raw, &ir_raw_client_list, list) ir_raw_handler->raw_register(raw->dev); - mutex_lock(&available_protocols_lock); - available_protocols |= ir_raw_handler->protocols; - mutex_unlock(&available_protocols_lock); + atomic64_or(ir_raw_handler->protocols, &available_protocols); mutex_unlock(&ir_raw_handler_lock); return 0; @@ -352,9 +345,7 @@ void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler) if (ir_raw_handler->raw_unregister) ir_raw_handler->raw_unregister(raw->dev); } - mutex_lock(&available_protocols_lock); - available_protocols &= ~protocols; - mutex_unlock(&available_protocols_lock); + atomic64_andnot(protocols, &available_protocols); mutex_unlock(&ir_raw_handler_lock); } EXPORT_SYMBOL(ir_raw_handler_unregister); |