Commit af3ce514 authored by Daniel Walker's avatar Daniel Walker Committed by Paul Mackerras

[POWERPC] macintosh: ADB driver: adb_handler_sem semaphore to mutex

Signed-off-by: default avatarDaniel Walker <dwalker@mvista.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Acked-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 56783c5e
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include <linux/device.h> #include <linux/device.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/semaphore.h> #include <linux/mutex.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#ifdef CONFIG_PPC #ifdef CONFIG_PPC
...@@ -102,7 +102,7 @@ static struct adb_handler { ...@@ -102,7 +102,7 @@ static struct adb_handler {
} adb_handler[16]; } adb_handler[16];
/* /*
* The adb_handler_sem mutex protects all accesses to the original_address * The adb_handler_mutex mutex protects all accesses to the original_address
* and handler_id fields of adb_handler[i] for all i, and changes to the * and handler_id fields of adb_handler[i] for all i, and changes to the
* handler field. * handler field.
* Accesses to the handler field are protected by the adb_handler_lock * Accesses to the handler field are protected by the adb_handler_lock
...@@ -110,7 +110,7 @@ static struct adb_handler { ...@@ -110,7 +110,7 @@ static struct adb_handler {
* time adb_unregister returns, we know that the old handler isn't being * time adb_unregister returns, we know that the old handler isn't being
* called. * called.
*/ */
static DECLARE_MUTEX(adb_handler_sem); static DEFINE_MUTEX(adb_handler_mutex);
static DEFINE_RWLOCK(adb_handler_lock); static DEFINE_RWLOCK(adb_handler_lock);
#if 0 #if 0
...@@ -355,7 +355,7 @@ do_adb_reset_bus(void) ...@@ -355,7 +355,7 @@ do_adb_reset_bus(void)
msleep(500); msleep(500);
} }
down(&adb_handler_sem); mutex_lock(&adb_handler_mutex);
write_lock_irq(&adb_handler_lock); write_lock_irq(&adb_handler_lock);
memset(adb_handler, 0, sizeof(adb_handler)); memset(adb_handler, 0, sizeof(adb_handler));
write_unlock_irq(&adb_handler_lock); write_unlock_irq(&adb_handler_lock);
...@@ -376,7 +376,7 @@ do_adb_reset_bus(void) ...@@ -376,7 +376,7 @@ do_adb_reset_bus(void)
if (adb_controller->autopoll) if (adb_controller->autopoll)
adb_controller->autopoll(autopoll_devs); adb_controller->autopoll(autopoll_devs);
} }
up(&adb_handler_sem); mutex_unlock(&adb_handler_mutex);
blocking_notifier_call_chain(&adb_client_list, blocking_notifier_call_chain(&adb_client_list,
ADB_MSG_POST_RESET, NULL); ADB_MSG_POST_RESET, NULL);
...@@ -454,7 +454,7 @@ adb_register(int default_id, int handler_id, struct adb_ids *ids, ...@@ -454,7 +454,7 @@ adb_register(int default_id, int handler_id, struct adb_ids *ids,
{ {
int i; int i;
down(&adb_handler_sem); mutex_lock(&adb_handler_mutex);
ids->nids = 0; ids->nids = 0;
for (i = 1; i < 16; i++) { for (i = 1; i < 16; i++) {
if ((adb_handler[i].original_address == default_id) && if ((adb_handler[i].original_address == default_id) &&
...@@ -472,7 +472,7 @@ adb_register(int default_id, int handler_id, struct adb_ids *ids, ...@@ -472,7 +472,7 @@ adb_register(int default_id, int handler_id, struct adb_ids *ids,
ids->id[ids->nids++] = i; ids->id[ids->nids++] = i;
} }
} }
up(&adb_handler_sem); mutex_unlock(&adb_handler_mutex);
return ids->nids; return ids->nids;
} }
...@@ -481,7 +481,7 @@ adb_unregister(int index) ...@@ -481,7 +481,7 @@ adb_unregister(int index)
{ {
int ret = -ENODEV; int ret = -ENODEV;
down(&adb_handler_sem); mutex_lock(&adb_handler_mutex);
write_lock_irq(&adb_handler_lock); write_lock_irq(&adb_handler_lock);
if (adb_handler[index].handler) { if (adb_handler[index].handler) {
while(adb_handler[index].busy) { while(adb_handler[index].busy) {
...@@ -493,7 +493,7 @@ adb_unregister(int index) ...@@ -493,7 +493,7 @@ adb_unregister(int index)
adb_handler[index].handler = NULL; adb_handler[index].handler = NULL;
} }
write_unlock_irq(&adb_handler_lock); write_unlock_irq(&adb_handler_lock);
up(&adb_handler_sem); mutex_unlock(&adb_handler_mutex);
return ret; return ret;
} }
...@@ -557,19 +557,19 @@ adb_try_handler_change(int address, int new_id) ...@@ -557,19 +557,19 @@ adb_try_handler_change(int address, int new_id)
{ {
int ret; int ret;
down(&adb_handler_sem); mutex_lock(&adb_handler_mutex);
ret = try_handler_change(address, new_id); ret = try_handler_change(address, new_id);
up(&adb_handler_sem); mutex_unlock(&adb_handler_mutex);
return ret; return ret;
} }
int int
adb_get_infos(int address, int *original_address, int *handler_id) adb_get_infos(int address, int *original_address, int *handler_id)
{ {
down(&adb_handler_sem); mutex_lock(&adb_handler_mutex);
*original_address = adb_handler[address].original_address; *original_address = adb_handler[address].original_address;
*handler_id = adb_handler[address].handler_id; *handler_id = adb_handler[address].handler_id;
up(&adb_handler_sem); mutex_unlock(&adb_handler_mutex);
return (*original_address != 0); return (*original_address != 0);
} }
...@@ -628,10 +628,10 @@ do_adb_query(struct adb_request *req) ...@@ -628,10 +628,10 @@ do_adb_query(struct adb_request *req)
case ADB_QUERY_GETDEVINFO: case ADB_QUERY_GETDEVINFO:
if (req->nbytes < 3) if (req->nbytes < 3)
break; break;
down(&adb_handler_sem); mutex_lock(&adb_handler_mutex);
req->reply[0] = adb_handler[req->data[2]].original_address; req->reply[0] = adb_handler[req->data[2]].original_address;
req->reply[1] = adb_handler[req->data[2]].handler_id; req->reply[1] = adb_handler[req->data[2]].handler_id;
up(&adb_handler_sem); mutex_unlock(&adb_handler_mutex);
req->complete = 1; req->complete = 1;
req->reply_len = 2; req->reply_len = 2;
adb_write_done(req); adb_write_done(req);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment