ALSA: asihpi: incorrect range check
[safe/jmp/linux-2.6] / drivers / i2c / i2c-boardinfo.c
index ffb35f0..7e6a63b 100644 (file)
@@ -18,6 +18,8 @@
 
 #include <linux/kernel.h>
 #include <linux/i2c.h>
+#include <linux/slab.h>
+#include <linux/rwsem.h>
 
 #include "i2c-core.h"
 
@@ -25,7 +27,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 +65,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 +86,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;
 }