Skip to content

Commit

Permalink
isapnp driver semaphore to mutex
Browse files Browse the repository at this point in the history
Changed the isapnp semaphore to a mutex.

[[email protected]: no externs-in-c]
[[email protected]: build fix]
Signed-off-by: Daniel Walker <[email protected]>
Cc: Bjorn Helgaas <[email protected]>
Cc: Ingo Molnar <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Daniel Walker authored and Linus Torvalds committed Feb 6, 2008
1 parent 2bb9a6b commit b3bd86e
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 15 deletions.
13 changes: 7 additions & 6 deletions drivers/pnp/interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,12 @@
#include <linux/errno.h>
#include <linux/list.h>
#include <linux/types.h>
#include <linux/pnp.h>
#include <linux/stat.h>
#include <linux/ctype.h>
#include <linux/slab.h>
#include <linux/mutex.h>

#include <asm/uaccess.h>

#include "base.h"
Expand Down Expand Up @@ -315,8 +318,6 @@ static ssize_t pnp_show_current_resources(struct device *dmdev,
return ret;
}

extern struct semaphore pnp_res_mutex;

static ssize_t
pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
const char *ubuf, size_t count)
Expand Down Expand Up @@ -361,10 +362,10 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
goto done;
}
if (!strnicmp(buf, "get", 3)) {
down(&pnp_res_mutex);
mutex_lock(&pnp_res_mutex);
if (pnp_can_read(dev))
dev->protocol->get(dev, &dev->res);
up(&pnp_res_mutex);
mutex_unlock(&pnp_res_mutex);
goto done;
}
if (!strnicmp(buf, "set", 3)) {
Expand All @@ -373,7 +374,7 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
goto done;
buf += 3;
pnp_init_resource_table(&dev->res);
down(&pnp_res_mutex);
mutex_lock(&pnp_res_mutex);
while (1) {
while (isspace(*buf))
++buf;
Expand Down Expand Up @@ -455,7 +456,7 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
}
break;
}
up(&pnp_res_mutex);
mutex_unlock(&pnp_res_mutex);
goto done;
}

Expand Down
19 changes: 10 additions & 9 deletions drivers/pnp/manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@
#include <linux/pnp.h>
#include <linux/slab.h>
#include <linux/bitmap.h>
#include <linux/mutex.h>
#include "base.h"

DECLARE_MUTEX(pnp_res_mutex);
DEFINE_MUTEX(pnp_res_mutex);

static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx)
{
Expand Down Expand Up @@ -297,7 +298,7 @@ static int pnp_assign_resources(struct pnp_dev *dev, int depnum)
if (!pnp_can_configure(dev))
return -ENODEV;

down(&pnp_res_mutex);
mutex_lock(&pnp_res_mutex);
pnp_clean_resource_table(&dev->res); /* start with a fresh slate */
if (dev->independent) {
port = dev->independent->port;
Expand Down Expand Up @@ -366,12 +367,12 @@ static int pnp_assign_resources(struct pnp_dev *dev, int depnum)
} else if (dev->dependent)
goto fail;

up(&pnp_res_mutex);
mutex_unlock(&pnp_res_mutex);
return 1;

fail:
pnp_clean_resource_table(&dev->res);
up(&pnp_res_mutex);
mutex_unlock(&pnp_res_mutex);
return 0;
}

Expand All @@ -396,7 +397,7 @@ int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
return -ENOMEM;
*bak = dev->res;

down(&pnp_res_mutex);
mutex_lock(&pnp_res_mutex);
dev->res = *res;
if (!(mode & PNP_CONFIG_FORCE)) {
for (i = 0; i < PNP_MAX_PORT; i++) {
Expand All @@ -416,14 +417,14 @@ int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
goto fail;
}
}
up(&pnp_res_mutex);
mutex_unlock(&pnp_res_mutex);

kfree(bak);
return 0;

fail:
dev->res = *bak;
up(&pnp_res_mutex);
mutex_unlock(&pnp_res_mutex);
kfree(bak);
return -EINVAL;
}
Expand Down Expand Up @@ -547,9 +548,9 @@ int pnp_disable_dev(struct pnp_dev *dev)
dev->active = 0;

/* release the resources so that other devices can use them */
down(&pnp_res_mutex);
mutex_lock(&pnp_res_mutex);
pnp_clean_resource_table(&dev->res);
up(&pnp_res_mutex);
mutex_unlock(&pnp_res_mutex);

return 0;
}
Expand Down
1 change: 1 addition & 0 deletions include/linux/pnp.h
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ extern struct pnp_protocol isapnp_protocol;
#else
#define pnp_device_is_isapnp(dev) 0
#endif
extern struct mutex pnp_res_mutex;

#ifdef CONFIG_PNPBIOS
extern struct pnp_protocol pnpbios_protocol;
Expand Down

0 comments on commit b3bd86e

Please sign in to comment.