use mutex instead of semaphore in RocketPort driver v2
PATCH 1/1 use mutex instead of semaphore in RocketPort driver v2
the RocketPort driver uses a semaphore as mutex. use the mutex API instead of the (binary) semaphore
--
drivers/char/rocket.c +6 -5
@@ -702,7 +702,7 @@ static void init_r_port(int board, int aiop, int chan, struct pci_dev *pci_dev) } }spin_lock_init (&info->slock); -sema_init (&info->write_sem,1 ); +mutex_init (&info->write_mtx); rp_table[line] = info;if (pci_dev)tty_register_device (rocket_driver, line, &pci_dev->dev);
@@ -1662,7 +1662,7 @@ static void rp_put_char(struct tty_struct *tty, unsigned char ch)return ;/* Grab the port write semaphore, locking out other processes that try to write to this port */ -down (&info->write_sem); +mutex_lock (&info->write_mtx);#ifdef ROCKET_DEBUG_WRITE printk (KERN_INFO "rp_put_char %c..." , ch);
@@ -1684,7 +1684,7 @@ static void rp_put_char(struct tty_struct *tty, unsigned char ch) info->xmit_fifo_room--; }spin_unlock_irqrestore (&info->slock, flags); -up (&info->write_sem); +mutex_unlock (&info->write_mtx); }/*
@@ -1706,7 +1706,8 @@ static int rp_write(struct tty_struct *tty,if (count <=0 ||rocket_paranoia_check (info,"rp_write" ))return 0 ; -down_interruptible (&info->write_sem); +if (mutex_lock_interruptible (&info->write_mtx)) +return -EINTR ;#ifdef ROCKET_DEBUG_WRITE printk (KERN_INFO "rp_write %d chars..." , count);
@@ -1777,7 +1778,7 @@ end:wake_up_interruptible (&tty->poll_wait);#endif } -up (&info->write_sem); +mutex_unlock (&info->write_mtx);return retval; }
drivers/char/rocket_int.h +1 -1
@@ -1171,7 +1171,7 @@ struct r_port {struct wait_queue *close_wait;#endif spinlock_t slock; -struct semaphore write_sem; +struct mutex write_mtx; };#define RPORT_MAGIC 0x525001
Signature · 12 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
Usually when people are sad, they don't do anything. They just cry over
their condition. But when they get angry, they bring about a change
(Malcolm X)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-Matthias Kaehlcke napsal(a):
Quoted 39 lines
the RocketPort driver uses a semaphore as mutex. use the mutex API instead of the (binary) semaphore
Signed-off-by Matthias Kaehlcke <[email protected]>--
drivers/char/rocket.c +3
-3@@ -702,7 +702,7 @@ static void init_r_port(int board, int aiop, int chan, struct pci_dev *pci_dev) } }spin_lock_init (&info->slock); -sema_init (&info->write_sem,1 ); +mutex_init (&info->write_mtx); rp_table[line] = info;if (pci_dev)tty_register_device (rocket_driver, line, &pci_dev->dev);@@ -1662,7 +1662,7 @@ static void rp_put_char(struct tty_struct *tty, unsigned char ch)return ;/* Grab the port write semaphore, locking out other processes that try to write to this port */ -down (&info->write_sem); +mutex_lock (&info->write_mtx);#ifdef ROCKET_DEBUG_WRITE printk (KERN_INFO "rp_put_char %c..." , ch);@@ -1684,7 +1684,7 @@ static void rp_put_char(struct tty_struct *tty, unsigned char ch) info->xmit_fifo_room--; }spin_unlock_irqrestore (&info->slock, flags); -up (&info->write_sem); +mutex_unlock (&info->write_mtx); }/*
drivers/char/rocket.c static int rp_write(struct tty_struct *tty, · line 1710
Quoted 6 lines
drivers/char/rocket.c +2
-1@@ -1706,7 +1706,8 @@ static int rp_write(struct tty_struct *tty,if (count <=0 ||rocket_paranoia_check (info,"rp_write" ))return 0 ; -down_interruptible (&info->write_sem); +if (mutex_lock_interruptible (&info->write_mtx)) +return -EINTR ;
I think that ERESTARTSYS is appropriate here.
reagrds,
Signature · 4 lines
http://www.fi.muni.cz/~xslaby/ Jiri Slaby faculty of informatics, masaryk university, brno, cz e-mail: jirislaby gmail com, gpg pubkey fingerprint: B674 9967 0407 CE62 ACC8 22A0 32CC 55C3 39D4 7A7E
El Wed, Apr 25, 2007 at 03:54:36PM +0200 Jiri Slaby ha dit:
Quoted 8 lines
Matthias Kaehlcke napsal(a):
Quoted 5 lines
the RocketPort driver uses a semaphore as mutex. use the mutex API instead of the (binary) semaphore
Signed-off-by Matthias Kaehlcke <[email protected]>I think that ERESTARTSYS is appropriate here.
thanks for your remark, i'll take it into account
Signature · 10 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
Nothing is more despicable than respect based on fear
(Albert Camus)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-Matthias Kaehlcke napsal(a):
Quoted 39 lines
the RocketPort driver uses a semaphore as mutex. use the mutex API instead of the (binary) semaphore
Signed-off-by Matthias Kaehlcke <[email protected]>--
drivers/char/rocket.c +3
-3@@ -702,7 +702,7 @@ static void init_r_port(int board, int aiop, int chan, struct pci_dev *pci_dev) } }spin_lock_init (&info->slock); -sema_init (&info->write_sem,1 ); +mutex_init (&info->write_mtx); rp_table[line] = info;if (pci_dev)tty_register_device (rocket_driver, line, &pci_dev->dev);@@ -1662,7 +1662,7 @@ static void rp_put_char(struct tty_struct *tty, unsigned char ch)return ;/* Grab the port write semaphore, locking out other processes that try to write to this port */ -down (&info->write_sem); +mutex_lock (&info->write_mtx);#ifdef ROCKET_DEBUG_WRITE printk (KERN_INFO "rp_put_char %c..." , ch);@@ -1684,7 +1684,7 @@ static void rp_put_char(struct tty_struct *tty, unsigned char ch) info->xmit_fifo_room--; }spin_unlock_irqrestore (&info->slock, flags); -up (&info->write_sem); +mutex_unlock (&info->write_mtx); }/*
drivers/char/rocket.c static int rp_write(struct tty_struct *tty, · line 1709
Quoted 5 lines
drivers/char/rocket.c +1
-1@@ -1706,7 +1706,8 @@ static int rp_write(struct tty_struct *tty,if (count <=0 ||rocket_paranoia_check (info,"rp_write" ))return 0 ; -down_interruptible (&info->write_sem); +if (mutex_lock_interruptible (&info->write_mtx))
^
and put a space here "if (".
regards,
Signature · 4 lines
http://www.fi.muni.cz/~xslaby/ Jiri Slaby faculty of informatics, masaryk university, brno, cz e-mail: jirislaby gmail com, gpg pubkey fingerprint: B674 9967 0407 CE62 ACC8 22A0 32CC 55C3 39D4 7A7E