Skip to content

Commit

Permalink
i2c: Add support for nested i2c bus locking
Browse files Browse the repository at this point in the history
This patch adds the 'level' field into the i2c_adapter structure, which is 
used to represent the 'logical' level of nesting for the purposes of 
lockdep. This field is then used in the i2c_transfer() function, to 
acquire the per-adapter bus_lock with correct nesting level.

Signed-off-by: Jiri Kosina <jikos@jikos.cz>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
  • Loading branch information
Jiri Kosina authored and Jean Delvare committed Dec 10, 2006
1 parent ad04d5c commit 6ea2303
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/i2c/i2c-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,7 @@ int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num)
}
#endif

mutex_lock(&adap->bus_lock);
mutex_lock_nested(&adap->bus_lock, adap->level);
ret = adap->algo->master_xfer(adap,msgs,num);
mutex_unlock(&adap->bus_lock);

Expand Down
1 change: 1 addition & 0 deletions include/linux/i2c.h
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ struct i2c_adapter {
int (*client_unregister)(struct i2c_client *);

/* data fields that are valid for all devices */
u8 level; /* nesting level for lockdep */
struct mutex bus_lock;
struct mutex clist_lock;

Expand Down

0 comments on commit 6ea2303

Please sign in to comment.