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 <[EMAIL PROTECTED]>

---
commit 19a0196a97ed70efdc421b359e28684e058d7121
tree 1c65691920ac6efddc7d9e221ee302a0b32b2831
parent d0b01ce89a7b18ba37ea6192eea6a98cdc01d62e
author Jiri Slaby <[EMAIL PROTECTED]> Mon, 05 Nov 2007 13:53:39 +0100
committer Jiri Slaby <[EMAIL PROTECTED]> 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;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to