diff options
| author | Wim Van Sebroeck <wim@iguana.be> | 2007-05-11 19:03:13 +0000 | 
|---|---|---|
| committer | Wim Van Sebroeck <wim@iguana.be> | 2007-05-11 19:03:13 +0000 | 
| commit | 5c34202b8bf942da411b6599668a76b07449bbfd (patch) | |
| tree | 5719c361321eaddc8e4f1b0c8a7994f0e9a6fdd3 /drivers/char/rocket.c | |
| parent | 0d4804b31f91cfbcff6d62af0bc09a893a1c8ae0 (diff) | |
| parent | 1f8a6b658a943b4f04a1fc7b3a420360202c86cd (diff) | |
Merge /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'drivers/char/rocket.c')
| -rw-r--r-- | drivers/char/rocket.c | 36 | 
1 files changed, 19 insertions, 17 deletions
diff --git a/drivers/char/rocket.c b/drivers/char/rocket.c index 76357c855ce..a3fd7e7ba5a 100644 --- a/drivers/char/rocket.c +++ b/drivers/char/rocket.c @@ -65,10 +65,6 @@  /****** Kernel includes ******/ -#ifdef MODVERSIONS -#include <config/modversions.h> -#endif				 -  #include <linux/module.h>  #include <linux/errno.h>  #include <linux/major.h> @@ -85,6 +81,7 @@  #include <linux/string.h>  #include <linux/fcntl.h>  #include <linux/ptrace.h> +#include <linux/mutex.h>  #include <linux/ioport.h>  #include <linux/delay.h>  #include <linux/wait.h> @@ -93,7 +90,6 @@  #include <asm/atomic.h>  #include <linux/bitops.h>  #include <linux/spinlock.h> -#include <asm/semaphore.h>  #include <linux/init.h>  /****** RocketPort includes ******/ @@ -702,7 +698,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); @@ -947,7 +943,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,  #endif  		schedule();	/*  Don't hold spinlock here, will hang PC */  	} -	current->state = TASK_RUNNING; +	__set_current_state(TASK_RUNNING);  	remove_wait_queue(&info->open_wait, &wait);  	spin_lock_irqsave(&info->slock, flags); @@ -1018,9 +1014,6 @@ static int rp_open(struct tty_struct *tty, struct file *filp)  	/*  	 * Info->count is now 1; so it's safe to sleep now.  	 */ -	info->session = process_session(current); -	info->pgrp = process_group(current); -  	if ((info->flags & ROCKET_INITIALIZED) == 0) {  		cp = &info->channel;  		sSetRxTrigger(cp, TRIG_1); @@ -1602,7 +1595,7 @@ static void rp_wait_until_sent(struct tty_struct *tty, int timeout)  		if (signal_pending(current))  			break;  	} -	current->state = TASK_RUNNING; +	__set_current_state(TASK_RUNNING);  #ifdef ROCKET_DEBUG_WAIT_UNTIL_SENT  	printk(KERN_INFO "txcnt = %d (jiff=%lu)...done\n", txcnt, jiffies);  #endif @@ -1661,8 +1654,11 @@ static void rp_put_char(struct tty_struct *tty, unsigned char ch)  	if (rocket_paranoia_check(info, "rp_put_char"))  		return; -	/*  Grab the port write semaphore, locking out other processes that try to write to this port */ -	down(&info->write_sem); +	/* +	 * Grab the port write mutex, locking out other processes that try to +	 * write to this port +	 */ +	mutex_lock(&info->write_mtx);  #ifdef ROCKET_DEBUG_WRITE  	printk(KERN_INFO "rp_put_char %c...", ch); @@ -1684,12 +1680,12 @@ 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);  }  /*   *  Exception handler - write routine, called when user app writes to the device. - *  A per port write semaphore is used to protect from another process writing to + *  A per port write mutex is used to protect from another process writing to   *  this port at the same time.  This other process could be running on the other CPU   *  or get control of the CPU if the copy_from_user() blocks due to a page fault (swapped out).    *  Spinlocks protect the info xmit members. @@ -1706,7 +1702,7 @@ static int rp_write(struct tty_struct *tty,  	if (count <= 0 || rocket_paranoia_check(info, "rp_write"))  		return 0; -	down_interruptible(&info->write_sem); +	mutex_lock_interruptible(&info->write_mtx);  #ifdef ROCKET_DEBUG_WRITE  	printk(KERN_INFO "rp_write %d chars...", count); @@ -1777,7 +1773,7 @@ end:  		wake_up_interruptible(&tty->poll_wait);  #endif  	} -	up(&info->write_sem); +	mutex_unlock(&info->write_mtx);  	return retval;  } @@ -1852,6 +1848,12 @@ static void rp_flush_buffer(struct tty_struct *tty)  #ifdef CONFIG_PCI +static struct pci_device_id __devinitdata rocket_pci_ids[] = { +	{ PCI_DEVICE(PCI_VENDOR_ID_RP, PCI_ANY_ID) }, +	{ } +}; +MODULE_DEVICE_TABLE(pci, rocket_pci_ids); +  /*   *  Called when a PCI card is found.  Retrieves and stores model information,   *  init's aiopic and serial port hardware.  | 
