i2c: Use rwsem instead of mutex for board info
By using rwsem we can easily manage recursive calls of i2c_scan_static_board_info() function without breaking the locking. Signed-off-by: Rodolfo Giometti <giometti@linux.it> Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
committed by
Jean Delvare
parent
99cd8e2587
commit
f18c41daea
@@ -18,6 +18,7 @@
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/rwsem.h>
|
||||
|
||||
#include "i2c-core.h"
|
||||
|
||||
@@ -25,7 +26,7 @@
|
||||
/* These symbols are exported ONLY FOR the i2c core.
|
||||
* No other users will be supported.
|
||||
*/
|
||||
DEFINE_MUTEX(__i2c_board_lock);
|
||||
DECLARE_RWSEM(__i2c_board_lock);
|
||||
EXPORT_SYMBOL_GPL(__i2c_board_lock);
|
||||
|
||||
LIST_HEAD(__i2c_board_list);
|
||||
@@ -63,7 +64,7 @@ i2c_register_board_info(int busnum,
|
||||
{
|
||||
int status;
|
||||
|
||||
mutex_lock(&__i2c_board_lock);
|
||||
down_write(&__i2c_board_lock);
|
||||
|
||||
/* dynamic bus numbers will be assigned after the last static one */
|
||||
if (busnum >= __i2c_first_dynamic_bus_num)
|
||||
@@ -84,7 +85,7 @@ i2c_register_board_info(int busnum,
|
||||
list_add_tail(&devinfo->list, &__i2c_board_list);
|
||||
}
|
||||
|
||||
mutex_unlock(&__i2c_board_lock);
|
||||
up_write(&__i2c_board_lock);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
Reference in New Issue
Block a user