Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 25052
b: refs/heads/master
c: 286295e
h: refs/heads/master
v: v3
  • Loading branch information
Arjan van de Ven authored and Dmitry Torokhov committed Feb 19, 2006
1 parent 75ad077 commit b8a6dee
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c4e32e9faaaa83340dbbc00e07c48d38f032b7dc
refs/heads/master: 286295eb936e76347173639c218134e6342440f9
27 changes: 14 additions & 13 deletions trunk/drivers/input/gameport/gameport.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/sched.h> /* HZ */
#include <linux/mutex.h>

/*#include <asm/io.h>*/

Expand All @@ -43,10 +44,10 @@ EXPORT_SYMBOL(gameport_start_polling);
EXPORT_SYMBOL(gameport_stop_polling);

/*
* gameport_sem protects entire gameport subsystem and is taken
* gameport_mutex protects entire gameport subsystem and is taken
* every time gameport port or driver registrered or unregistered.
*/
static DECLARE_MUTEX(gameport_sem);
static DEFINE_MUTEX(gameport_mutex);

static LIST_HEAD(gameport_list);

Expand Down Expand Up @@ -342,7 +343,7 @@ static void gameport_handle_event(void)
struct gameport_event *event;
struct gameport_driver *gameport_drv;

down(&gameport_sem);
mutex_lock(&gameport_mutex);

/*
* Note that we handle only one event here to give swsusp
Expand Down Expand Up @@ -379,7 +380,7 @@ static void gameport_handle_event(void)
gameport_free_event(event);
}

up(&gameport_sem);
mutex_unlock(&gameport_mutex);
}

/*
Expand Down Expand Up @@ -464,7 +465,7 @@ static ssize_t gameport_rebind_driver(struct device *dev, struct device_attribut
struct device_driver *drv;
int retval;

retval = down_interruptible(&gameport_sem);
retval = mutex_lock_interruptible(&gameport_mutex);
if (retval)
return retval;

Expand All @@ -484,7 +485,7 @@ static ssize_t gameport_rebind_driver(struct device *dev, struct device_attribut
retval = -EINVAL;
}

up(&gameport_sem);
mutex_unlock(&gameport_mutex);

return retval;
}
Expand Down Expand Up @@ -521,7 +522,7 @@ static void gameport_init_port(struct gameport *gameport)

__module_get(THIS_MODULE);

init_MUTEX(&gameport->drv_sem);
mutex_init(&gameport->drv_mutex);
device_initialize(&gameport->dev);
snprintf(gameport->dev.bus_id, sizeof(gameport->dev.bus_id),
"gameport%lu", (unsigned long)atomic_inc_return(&gameport_no) - 1);
Expand Down Expand Up @@ -661,10 +662,10 @@ void __gameport_register_port(struct gameport *gameport, struct module *owner)
*/
void gameport_unregister_port(struct gameport *gameport)
{
down(&gameport_sem);
mutex_lock(&gameport_mutex);
gameport_disconnect_port(gameport);
gameport_destroy_port(gameport);
up(&gameport_sem);
mutex_unlock(&gameport_mutex);
}


Expand Down Expand Up @@ -717,7 +718,7 @@ void gameport_unregister_driver(struct gameport_driver *drv)
{
struct gameport *gameport;

down(&gameport_sem);
mutex_lock(&gameport_mutex);
drv->ignore = 1; /* so gameport_find_driver ignores it */

start_over:
Expand All @@ -731,7 +732,7 @@ void gameport_unregister_driver(struct gameport_driver *drv)
}

driver_unregister(&drv->driver);
up(&gameport_sem);
mutex_unlock(&gameport_mutex);
}

static int gameport_bus_match(struct device *dev, struct device_driver *drv)
Expand All @@ -743,9 +744,9 @@ static int gameport_bus_match(struct device *dev, struct device_driver *drv)

static void gameport_set_drv(struct gameport *gameport, struct gameport_driver *drv)
{
down(&gameport->drv_sem);
mutex_lock(&gameport->drv_mutex);
gameport->drv = drv;
up(&gameport->drv_sem);
mutex_unlock(&gameport->drv_mutex);
}

int gameport_open(struct gameport *gameport, struct gameport_driver *drv, int mode)
Expand Down
7 changes: 4 additions & 3 deletions trunk/include/linux/gameport.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include <asm/io.h>
#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/device.h>
#include <linux/timer.h>

Expand Down Expand Up @@ -40,7 +41,7 @@ struct gameport {
struct gameport *parent, *child;

struct gameport_driver *drv;
struct semaphore drv_sem; /* protects serio->drv so attributes can pin driver */
struct mutex drv_mutex; /* protects serio->drv so attributes can pin driver */

struct device dev;
unsigned int registered; /* port has been fully registered with driver core */
Expand Down Expand Up @@ -137,12 +138,12 @@ static inline void gameport_set_drvdata(struct gameport *gameport, void *data)
*/
static inline int gameport_pin_driver(struct gameport *gameport)
{
return down_interruptible(&gameport->drv_sem);
return mutex_lock_interruptible(&gameport->drv_mutex);
}

static inline void gameport_unpin_driver(struct gameport *gameport)
{
up(&gameport->drv_sem);
mutex_unlock(&gameport->drv_mutex);
}

void __gameport_register_driver(struct gameport_driver *drv, struct module *owner);
Expand Down

0 comments on commit b8a6dee

Please sign in to comment.