Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 22271
b: refs/heads/master
c: d4ccd08
h: refs/heads/master
i:
  22269: 787de6c
  22267: 2a79d8c
  22263: 81696c8
  22255: 914745e
  22239: b3e3f46
  22207: bfca510
  22143: 6f309b1
  22015: 0b2d1d1
v: v3
  • Loading branch information
Arjan van de Ven authored and David S. Miller committed Mar 21, 2006
1 parent 838b870 commit bf70158
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 19 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: 153330618691694af64f39fb56c9de051862380e
refs/heads/master: d4ccd08cdfa8d34f4d25b62041343c52fc79385f
19 changes: 10 additions & 9 deletions trunk/drivers/net/irda/irtty-sir.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include <asm/uaccess.h>
#include <linux/smp_lock.h>
#include <linux/delay.h>
#include <linux/mutex.h>

#include <net/irda/irda.h>
#include <net/irda/irda_device.h>
Expand Down Expand Up @@ -338,7 +339,7 @@ static inline void irtty_stop_receiver(struct tty_struct *tty, int stop)
/*****************************************************************/

/* serialize ldisc open/close with sir_dev */
static DECLARE_MUTEX(irtty_sem);
static DEFINE_MUTEX(irtty_mutex);

/* notifier from sir_dev when irda% device gets opened (ifup) */

Expand All @@ -348,11 +349,11 @@ static int irtty_start_dev(struct sir_dev *dev)
struct tty_struct *tty;

/* serialize with ldisc open/close */
down(&irtty_sem);
mutex_lock(&irtty_mutex);

priv = dev->priv;
if (unlikely(!priv || priv->magic!=IRTTY_MAGIC)) {
up(&irtty_sem);
mutex_unlock(&irtty_mutex);
return -ESTALE;
}

Expand All @@ -363,7 +364,7 @@ static int irtty_start_dev(struct sir_dev *dev)
/* Make sure we can receive more data */
irtty_stop_receiver(tty, FALSE);

up(&irtty_sem);
mutex_unlock(&irtty_mutex);
return 0;
}

Expand All @@ -375,11 +376,11 @@ static int irtty_stop_dev(struct sir_dev *dev)
struct tty_struct *tty;

/* serialize with ldisc open/close */
down(&irtty_sem);
mutex_lock(&irtty_mutex);

priv = dev->priv;
if (unlikely(!priv || priv->magic!=IRTTY_MAGIC)) {
up(&irtty_sem);
mutex_unlock(&irtty_mutex);
return -ESTALE;
}

Expand All @@ -390,7 +391,7 @@ static int irtty_stop_dev(struct sir_dev *dev)
if (tty->driver->stop)
tty->driver->stop(tty);

up(&irtty_sem);
mutex_unlock(&irtty_mutex);

return 0;
}
Expand Down Expand Up @@ -514,13 +515,13 @@ static int irtty_open(struct tty_struct *tty)
priv->dev = dev;

/* serialize with start_dev - in case we were racing with ifup */
down(&irtty_sem);
mutex_lock(&irtty_mutex);

dev->priv = priv;
tty->disc_data = priv;
tty->receive_room = 65536;

up(&irtty_sem);
mutex_unlock(&irtty_mutex);

IRDA_DEBUG(0, "%s - %s: irda line discipline opened\n", __FUNCTION__, tty->name);

Expand Down
19 changes: 10 additions & 9 deletions trunk/drivers/net/irda/sir_dongle.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/kmod.h>
#include <linux/mutex.h>

#include <net/irda/irda.h>

Expand All @@ -28,7 +29,7 @@
*/

static LIST_HEAD(dongle_list); /* list of registered dongle drivers */
static DECLARE_MUTEX(dongle_list_lock); /* protects the list */
static DEFINE_MUTEX(dongle_list_lock); /* protects the list */

int irda_register_dongle(struct dongle_driver *new)
{
Expand All @@ -38,25 +39,25 @@ int irda_register_dongle(struct dongle_driver *new)
IRDA_DEBUG(0, "%s : registering dongle \"%s\" (%d).\n",
__FUNCTION__, new->driver_name, new->type);

down(&dongle_list_lock);
mutex_lock(&dongle_list_lock);
list_for_each(entry, &dongle_list) {
drv = list_entry(entry, struct dongle_driver, dongle_list);
if (new->type == drv->type) {
up(&dongle_list_lock);
mutex_unlock(&dongle_list_lock);
return -EEXIST;
}
}
list_add(&new->dongle_list, &dongle_list);
up(&dongle_list_lock);
mutex_unlock(&dongle_list_lock);
return 0;
}
EXPORT_SYMBOL(irda_register_dongle);

int irda_unregister_dongle(struct dongle_driver *drv)
{
down(&dongle_list_lock);
mutex_lock(&dongle_list_lock);
list_del(&drv->dongle_list);
up(&dongle_list_lock);
mutex_unlock(&dongle_list_lock);
return 0;
}
EXPORT_SYMBOL(irda_unregister_dongle);
Expand All @@ -75,7 +76,7 @@ int sirdev_get_dongle(struct sir_dev *dev, IRDA_DONGLE type)
return -EBUSY;

/* serialize access to the list of registered dongles */
down(&dongle_list_lock);
mutex_lock(&dongle_list_lock);

list_for_each(entry, &dongle_list) {
drv = list_entry(entry, struct dongle_driver, dongle_list);
Expand Down Expand Up @@ -109,14 +110,14 @@ int sirdev_get_dongle(struct sir_dev *dev, IRDA_DONGLE type)
if (!drv->open || (err=drv->open(dev))!=0)
goto out_reject; /* failed to open driver */

up(&dongle_list_lock);
mutex_unlock(&dongle_list_lock);
return 0;

out_reject:
dev->dongle_drv = NULL;
module_put(drv->owner);
out_unlock:
up(&dongle_list_lock);
mutex_unlock(&dongle_list_lock);
return err;
}

Expand Down

0 comments on commit bf70158

Please sign in to comment.