mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 07:30:53 +07:00
[POWERPC] macintosh: ADB driver: adb_handler_sem semaphore to mutex
Signed-off-by: Daniel Walker <dwalker@mvista.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
56783c5e4d
commit
af3ce514ad
@ -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 {
|
|||||||
} 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 {
|
|||||||
* 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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
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,
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user