diff options
| author | Jean Delvare <khali@linux-fr.org> | 2006-02-05 17:28:21 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-23 17:21:53 -0500 |
| commit | 7eebcb7c0f4d45168265bdca79cc3e609d68d436 (patch) | |
| tree | c8a46a299470731d0aab60e850cce4fc51a04657 /drivers/i2c | |
| parent | fabddcd49d8b4fca40ce346f701853888d98b5d2 (diff) | |
[PATCH] i2c: Optimize core_lists mutex usage
Stop holding the core_lists mutex when we don't actually need it.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/i2c')
| -rw-r--r-- | drivers/i2c/i2c-core.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index 975cb647da10..45e2cdf54736 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
| @@ -288,9 +288,7 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver) | |||
| 288 | { | 288 | { |
| 289 | struct list_head *item; | 289 | struct list_head *item; |
| 290 | struct i2c_adapter *adapter; | 290 | struct i2c_adapter *adapter; |
| 291 | int res = 0; | 291 | int res; |
| 292 | |||
| 293 | mutex_lock(&core_lists); | ||
| 294 | 292 | ||
| 295 | /* add the driver to the list of i2c drivers in the driver core */ | 293 | /* add the driver to the list of i2c drivers in the driver core */ |
| 296 | driver->driver.owner = owner; | 294 | driver->driver.owner = owner; |
| @@ -298,8 +296,10 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver) | |||
| 298 | 296 | ||
| 299 | res = driver_register(&driver->driver); | 297 | res = driver_register(&driver->driver); |
| 300 | if (res) | 298 | if (res) |
| 301 | goto out_unlock; | 299 | return res; |
| 302 | 300 | ||
| 301 | mutex_lock(&core_lists); | ||
| 302 | |||
| 303 | list_add_tail(&driver->list,&drivers); | 303 | list_add_tail(&driver->list,&drivers); |
| 304 | pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name); | 304 | pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name); |
| 305 | 305 | ||
| @@ -311,9 +311,8 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver) | |||
| 311 | } | 311 | } |
| 312 | } | 312 | } |
| 313 | 313 | ||
| 314 | out_unlock: | ||
| 315 | mutex_unlock(&core_lists); | 314 | mutex_unlock(&core_lists); |
| 316 | return res; | 315 | return 0; |
| 317 | } | 316 | } |
| 318 | EXPORT_SYMBOL(i2c_register_driver); | 317 | EXPORT_SYMBOL(i2c_register_driver); |
| 319 | 318 | ||
