diff options
| author | Daniel Walker <dwalker@mvista.com> | 2008-02-06 04:40:04 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-06 13:41:20 -0500 |
| commit | b3bd86e2fdce01d6b49271a553d2a18b3e0510f3 (patch) | |
| tree | f7282cbe7454a90a4b9b105c3c2e6d9734964791 | |
| parent | 2bb9a6b32f98873adf89a0de04c898681a2c5b8e (diff) | |
isapnp driver semaphore to mutex
Changed the isapnp semaphore to a mutex.
[akpm@linux-foundation.org: no externs-in-c]
[akpm@linux-foundation.org: build fix]
Signed-off-by: Daniel Walker <dwalker@mvista.com>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | drivers/pnp/interface.c | 13 | ||||
| -rw-r--r-- | drivers/pnp/manager.c | 19 | ||||
| -rw-r--r-- | include/linux/pnp.h | 1 |
3 files changed, 18 insertions, 15 deletions
diff --git a/drivers/pnp/interface.c b/drivers/pnp/interface.c index 31548044fdde..982658477a58 100644 --- a/drivers/pnp/interface.c +++ b/drivers/pnp/interface.c | |||
| @@ -10,9 +10,12 @@ | |||
| 10 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
| 11 | #include <linux/list.h> | 11 | #include <linux/list.h> |
| 12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
| 13 | #include <linux/pnp.h> | ||
| 13 | #include <linux/stat.h> | 14 | #include <linux/stat.h> |
| 14 | #include <linux/ctype.h> | 15 | #include <linux/ctype.h> |
| 15 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
| 17 | #include <linux/mutex.h> | ||
| 18 | |||
| 16 | #include <asm/uaccess.h> | 19 | #include <asm/uaccess.h> |
| 17 | 20 | ||
| 18 | #include "base.h" | 21 | #include "base.h" |
| @@ -315,8 +318,6 @@ static ssize_t pnp_show_current_resources(struct device *dmdev, | |||
| 315 | return ret; | 318 | return ret; |
| 316 | } | 319 | } |
| 317 | 320 | ||
| 318 | extern struct semaphore pnp_res_mutex; | ||
| 319 | |||
| 320 | static ssize_t | 321 | static ssize_t |
| 321 | pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr, | 322 | pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr, |
| 322 | const char *ubuf, size_t count) | 323 | const char *ubuf, size_t count) |
| @@ -361,10 +362,10 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr, | |||
| 361 | goto done; | 362 | goto done; |
| 362 | } | 363 | } |
| 363 | if (!strnicmp(buf, "get", 3)) { | 364 | if (!strnicmp(buf, "get", 3)) { |
| 364 | down(&pnp_res_mutex); | 365 | mutex_lock(&pnp_res_mutex); |
| 365 | if (pnp_can_read(dev)) | 366 | if (pnp_can_read(dev)) |
| 366 | dev->protocol->get(dev, &dev->res); | 367 | dev->protocol->get(dev, &dev->res); |
| 367 | up(&pnp_res_mutex); | 368 | mutex_unlock(&pnp_res_mutex); |
| 368 | goto done; | 369 | goto done; |
| 369 | } | 370 | } |
| 370 | if (!strnicmp(buf, "set", 3)) { | 371 | if (!strnicmp(buf, "set", 3)) { |
| @@ -373,7 +374,7 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr, | |||
| 373 | goto done; | 374 | goto done; |
| 374 | buf += 3; | 375 | buf += 3; |
| 375 | pnp_init_resource_table(&dev->res); | 376 | pnp_init_resource_table(&dev->res); |
| 376 | down(&pnp_res_mutex); | 377 | mutex_lock(&pnp_res_mutex); |
| 377 | while (1) { | 378 | while (1) { |
| 378 | while (isspace(*buf)) | 379 | while (isspace(*buf)) |
| 379 | ++buf; | 380 | ++buf; |
| @@ -455,7 +456,7 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr, | |||
| 455 | } | 456 | } |
| 456 | break; | 457 | break; |
| 457 | } | 458 | } |
| 458 | up(&pnp_res_mutex); | 459 | mutex_unlock(&pnp_res_mutex); |
| 459 | goto done; | 460 | goto done; |
| 460 | } | 461 | } |
| 461 | 462 | ||
diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c index 6f8f8ed95c67..c28caf272c11 100644 --- a/drivers/pnp/manager.c +++ b/drivers/pnp/manager.c | |||
| @@ -12,9 +12,10 @@ | |||
| 12 | #include <linux/pnp.h> | 12 | #include <linux/pnp.h> |
| 13 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
| 14 | #include <linux/bitmap.h> | 14 | #include <linux/bitmap.h> |
| 15 | #include <linux/mutex.h> | ||
| 15 | #include "base.h" | 16 | #include "base.h" |
| 16 | 17 | ||
| 17 | DECLARE_MUTEX(pnp_res_mutex); | 18 | DEFINE_MUTEX(pnp_res_mutex); |
| 18 | 19 | ||
| 19 | static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx) | 20 | static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx) |
| 20 | { | 21 | { |
| @@ -297,7 +298,7 @@ static int pnp_assign_resources(struct pnp_dev *dev, int depnum) | |||
| 297 | if (!pnp_can_configure(dev)) | 298 | if (!pnp_can_configure(dev)) |
| 298 | return -ENODEV; | 299 | return -ENODEV; |
| 299 | 300 | ||
| 300 | down(&pnp_res_mutex); | 301 | mutex_lock(&pnp_res_mutex); |
| 301 | pnp_clean_resource_table(&dev->res); /* start with a fresh slate */ | 302 | pnp_clean_resource_table(&dev->res); /* start with a fresh slate */ |
| 302 | if (dev->independent) { | 303 | if (dev->independent) { |
| 303 | port = dev->independent->port; | 304 | port = dev->independent->port; |
| @@ -366,12 +367,12 @@ static int pnp_assign_resources(struct pnp_dev *dev, int depnum) | |||
| 366 | } else if (dev->dependent) | 367 | } else if (dev->dependent) |
| 367 | goto fail; | 368 | goto fail; |
| 368 | 369 | ||
| 369 | up(&pnp_res_mutex); | 370 | mutex_unlock(&pnp_res_mutex); |
| 370 | return 1; | 371 | return 1; |
| 371 | 372 | ||
| 372 | fail: | 373 | fail: |
| 373 | pnp_clean_resource_table(&dev->res); | 374 | pnp_clean_resource_table(&dev->res); |
| 374 | up(&pnp_res_mutex); | 375 | mutex_unlock(&pnp_res_mutex); |
| 375 | return 0; | 376 | return 0; |
| 376 | } | 377 | } |
| 377 | 378 | ||
| @@ -396,7 +397,7 @@ int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, | |||
| 396 | return -ENOMEM; | 397 | return -ENOMEM; |
| 397 | *bak = dev->res; | 398 | *bak = dev->res; |
| 398 | 399 | ||
| 399 | down(&pnp_res_mutex); | 400 | mutex_lock(&pnp_res_mutex); |
| 400 | dev->res = *res; | 401 | dev->res = *res; |
| 401 | if (!(mode & PNP_CONFIG_FORCE)) { | 402 | if (!(mode & PNP_CONFIG_FORCE)) { |
| 402 | for (i = 0; i < PNP_MAX_PORT; i++) { | 403 | for (i = 0; i < PNP_MAX_PORT; i++) { |
| @@ -416,14 +417,14 @@ int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, | |||
| 416 | goto fail; | 417 | goto fail; |
| 417 | } | 418 | } |
| 418 | } | 419 | } |
| 419 | up(&pnp_res_mutex); | 420 | mutex_unlock(&pnp_res_mutex); |
| 420 | 421 | ||
| 421 | kfree(bak); | 422 | kfree(bak); |
| 422 | return 0; | 423 | return 0; |
| 423 | 424 | ||
| 424 | fail: | 425 | fail: |
| 425 | dev->res = *bak; | 426 | dev->res = *bak; |
| 426 | up(&pnp_res_mutex); | 427 | mutex_unlock(&pnp_res_mutex); |
| 427 | kfree(bak); | 428 | kfree(bak); |
| 428 | return -EINVAL; | 429 | return -EINVAL; |
| 429 | } | 430 | } |
| @@ -547,9 +548,9 @@ int pnp_disable_dev(struct pnp_dev *dev) | |||
| 547 | dev->active = 0; | 548 | dev->active = 0; |
| 548 | 549 | ||
| 549 | /* release the resources so that other devices can use them */ | 550 | /* release the resources so that other devices can use them */ |
| 550 | down(&pnp_res_mutex); | 551 | mutex_lock(&pnp_res_mutex); |
| 551 | pnp_clean_resource_table(&dev->res); | 552 | pnp_clean_resource_table(&dev->res); |
| 552 | up(&pnp_res_mutex); | 553 | mutex_unlock(&pnp_res_mutex); |
| 553 | 554 | ||
| 554 | return 0; | 555 | return 0; |
| 555 | } | 556 | } |
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index b9339d8b95bc..cd6332b88829 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
| @@ -258,6 +258,7 @@ extern struct pnp_protocol isapnp_protocol; | |||
| 258 | #else | 258 | #else |
| 259 | #define pnp_device_is_isapnp(dev) 0 | 259 | #define pnp_device_is_isapnp(dev) 0 |
| 260 | #endif | 260 | #endif |
| 261 | extern struct mutex pnp_res_mutex; | ||
| 261 | 262 | ||
| 262 | #ifdef CONFIG_PNPBIOS | 263 | #ifdef CONFIG_PNPBIOS |
| 263 | extern struct pnp_protocol pnpbios_protocol; | 264 | extern struct pnp_protocol pnpbios_protocol; |
