nozomi, lock cleanup
- semaphore is deprecated, use mutex instead
- don't return -ERESTARTSYS when signal might not be pending since it's not
permitted (unknown retval mioght reach userspace)
- don't lock interruptible in close or the card might not be stopped on last
close
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
commit 19a0196a97ed70efdc421b359e28684e058d7121
tree 1c65691920ac6efddc7d9e221ee302a0b32b2831
parent d0b01ce89a7b18ba37ea6192eea6a98cdc01d62e
author Jiri Slaby <jirislaby@gmail.com> Mon, 05 Nov 2007 13:53:39 +0100
committer Jiri Slaby <jirislaby@gmail.com> Sat, 10 Nov 2007 00:13:46 +0100
drivers/char/nozomi.c | 25 ++++++++++++-------------
1 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c
index 4a3ab38..2c4d388 100644
--- a/drivers/char/nozomi.c
+++ b/drivers/char/nozomi.c
@@ -406,7 +406,7 @@ struct port {
struct tty_struct *tty;
int tty_open_count;
- struct semaphore tty_sem;
+ struct mutex tty_sem;
wait_queue_head_t tty_wait;
struct async_icount tty_icount;
};
@@ -1560,7 +1560,7 @@ static int __devinit nozomi_card_init(struct pci_dev *pdev,
dc->index_start = ndev_idx * NOZOMI_MAX_PORTS;
ndevs[ndev_idx] = dc;
for (i = 0; i < NOZOMI_MAX_PORTS; i++) {
- init_MUTEX(&dc->port[i].tty_sem);
+ mutex_init(&dc->port[i].tty_sem);
dc->port[i].tty_open_count = 0;
dc->port[i].tty = NULL;
tty_register_device(ntty_driver, dc->index_start + i,
@@ -1687,7 +1687,7 @@ static int ntty_open(struct tty_struct *tty, struct file *file)
if (!port || !dc)
return -ENODEV;
- if (down_interruptible(&port->tty_sem))
+ if (mutex_lock_interruptible(&port->tty_sem))
return -ERESTARTSYS;
port->tty_open_count++;
@@ -1706,7 +1706,7 @@ static int ntty_open(struct tty_struct *tty, struct file *file)
spin_unlock_irqrestore(&dc->spin_mutex, flags);
}
- up(&port->tty_sem);
+ mutex_unlock(&port->tty_sem);
return 0;
}
@@ -1721,8 +1721,7 @@ static void ntty_close(struct tty_struct *tty, struct file *file)
if (!dc || !port)
return;
- if (down_interruptible(&port->tty_sem))
- return;
+ mutex_lock(&port->tty_sem);
if (!port->tty_open_count)
goto exit;
@@ -1739,7 +1738,7 @@ static void ntty_close(struct tty_struct *tty, struct file *file)
}
exit:
- up(&port->tty_sem);
+ mutex_unlock(&port->tty_sem);
}
/*
@@ -1759,14 +1758,14 @@ static int ntty_write(struct tty_struct *tty, const unsigned char *buffer,
if (!dc || !port)
return -ENODEV;
- if (unlikely(down_trylock(&port->tty_sem))) {
+ if (unlikely(mutex_trylock(&port->tty_sem))) {
/*
* must test lock as tty layer wraps calls
* to this function with BKL
*/
dev_err(&dc->pdev->dev, "Would have deadlocked - "
- "return ERESTARTSYS\n");
- return -ERESTARTSYS;
+ "return EAGAIN\n");
+ return -EAGAIN;
}
if (unlikely(!port->tty_open_count)) {
@@ -1798,7 +1797,7 @@ static int ntty_write(struct tty_struct *tty, const unsigned char *buffer,
spin_unlock_irqrestore(&dc->spin_mutex, flags);
exit:
- up(&port->tty_sem);
+ mutex_unlock(&port->tty_sem);
return rval;
}
@@ -1816,7 +1815,7 @@ static int ntty_write_room(struct tty_struct *tty)
if (!dc || !port)
return 0;
- if (down_trylock(&port->tty_sem))
+ if (mutex_trylock(&port->tty_sem))
return 0;
if (!port->tty_open_count)
@@ -1825,7 +1824,7 @@ static int ntty_write_room(struct tty_struct *tty)
room = port->fifo_ul->size - __kfifo_len(port->fifo_ul);
exit:
- up(&port->tty_sem);
+ mutex_unlock(&port->tty_sem);
return room;
}
-
| Greg Kroah-Hartman | [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO |
| Linus Torvalds | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| David Newall | Re: Slow DOWN, please!!! |
| Ian Campbell | Re: [PATCH] x86: Construct 32 bit boot time page tables in native format. |
| Matthias Scheler | Re: HEADS UP: timecounters (branch simonb-timecounters) merged into -current |
| Greg Troxel | Re: Interface to change NFS exports |
| Thor Lancelot Simon | metadata cache and memory fragmentation |
| YAMAMOTO Takashi | amap memory allocation |
git: | |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 0/37] dccp: Feature negotiation - last call for comments |
| David Miller | [GIT]: Networking |
| Dushan Tcholich | Re: ksoftirqd high cpu load on kernels 2.6.24 to 2.6.27-rc1-mm1 |
