TTY and serial fixes for .35-git
PATCH 1/1 TTY and serial fixes for .35-git
Here are some tty and serial driver bugfixes and new device id patches for your .35-git tree.
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/gregkh/tty-2.6.git/
These patches have been in the linux-next tree and -mm tree.
Patches will be sent to the linux-kernel mailing list, if anyone wants to see them.
thanks,
greg k-h
------------
drivers/char/n_gsm.c | 9 +++-- drivers/char/vt.c | 2 +- drivers/char/vt_ioctl.c | 4 ++- drivers/serial/8250_pci.c | 71 ++++++++++++++++++++++++++++++++++++++++++ drivers/serial/altera_uart.c | 44 ++++++++------------------ drivers/serial/bfin_5xx.c | 9 ++++- drivers/serial/msm_serial.c | 21 ++---------- drivers/serial/msm_serial.h | 56 +++++++++++++++++++++++++++++++++ drivers/serial/serial_cs.c | 18 +++++++++- 9 files changed, 175 insertions(+), 59 deletions(-)
---------------
Abhijeet Dharmapurikar (1):
msm_serial: fix serial on trout
Alexander Kurz (1):
serial_cs: add and sort IDs for serial and modem cards
Dan Carpenter (2):
TTY/n_gsm: potential double lock
vt_ioctl: return -EFAULT on copy_from_user errors
Frank Pan (1):
tty: fix a little bug in scrup, vt.c
Graf Yang (1):
serial: bfin_5xx: IRDA is not affected by anomaly 05000230
Sonic Zhang (1):
serial: bfin_5xx: fix typo in IER check
Tobias Klauser (3):
altera_uart: Don't take spinlock in already protected functions
altera_uart: Simplify altera_uart_console_putc
serial: altera_uart: Proper section for altera_uart_remove
Yegor Yefremov (1):
serial: add support for various Titan PCI cards
PATCH 1/11 msm_serial: fix serial on trout
From: Abhijeet Dharmapurikar <[email protected]>
Set the mnd counter based on uartclk. This fixes a problem on 7x30 where the uartclk is 19.2Mhz rather than the usual 4.8Mhz.
Trout incorrectly reports uartclk to be running at 19.2Mhz It is actually running at 4.8Mhz. For trout force mnd counter values as if uartclk was fed by tcxo/4.
--- drivers/serial/msm_serial.c | 21 ++------------- drivers/serial/msm_serial.h | 56 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 18 deletions(-)
drivers/serial/msm_serial.c +3 -18
@@ -41,19 +41,6 @@ struct msm_port {unsigned int imr; }; -#define UART_TO_MSM (uart_port) ((struct msm_port *) uart_port) - -static inline void msm_write (struct uart_port *port,unsigned int val, -unsigned int off) -{ -__raw_writel (val, port->membase + off); -} - -static inline unsigned int msm_read (struct uart_port *port,unsigned int off) -{ -return __raw_readl (port->membase + off); -} -static void msm_stop_tx (struct uart_port *port) {struct msm_port *msm_port =UART_TO_MSM (port);
@@ -320,11 +307,7 @@ static void msm_init_clock(struct uart_port *port)struct msm_port *msm_port =UART_TO_MSM (port);clk_enable (msm_port->clk); - -msm_write (port,0xC0 ,UART_MREG ); -msm_write (port,0xB2 ,UART_NREG ); -msm_write (port,0x7D ,UART_DREG ); -msm_write (port,0x1C ,UART_MNDREG ); +msm_serial_set_mnd_regs (port); }static int msm_startup (struct uart_port *port)
@@ -706,6 +689,8 @@ static int __init msm_serial_probe(struct platform_device *pdev)if (unlikely (IS_ERR (msm_port->clk)))return PTR_ERR (msm_port->clk); port->uartclk =clk_get_rate (msm_port->clk); +printk (KERN_INFO "uartclk = %d\n" , port->uartclk); + resource =platform_get_resource (pdev,IORESOURCE_MEM ,0 );if (unlikely (!resource))
drivers/serial/msm_serial.h +56 -0
60 lines not on this page · raw message
Signature · 1 line
1.7.1
PATCH 2/11 serial_cs: add and sort IDs for serial and modem cards
In reply to Greg KHFrom: Alexander Kurz <[email protected]>
--- drivers/serial/serial_cs.c | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-)
drivers/serial/serial_cs.c +16 -2
@@ -715,6 +715,8 @@ static struct pcmcia_device_id serial_ids[] = {PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0057 ,0x0021 ),PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0089 ,0x110a ),PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0104 ,0x000a ), +PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0105 ,0x0d0a ), +PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0105 ,0x0e0a ),PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0105 ,0xea15 ),PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0109 ,0x0501 ), PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0138, 0x110a),
@@ -724,8 +726,6 @@ static struct pcmcia_device_id serial_ids[] = {PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x016c ,0x0081 ),PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x021b ,0x0101 ),PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x08a1 ,0xc0ab ), -PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0105 ,0x0d0a ), -PCMCIA_PFC_DEVICE_MANF_CARD (1 ,0x0105 ,0x0e0a ),PCMCIA_PFC_DEVICE_PROD_ID123 (1 ,"MEGAHERTZ" ,"CC/XJEM3288" ,"DATA/FAX/CELL ETHERNET MODEM" ,0xf510db04 ,0x04cd2988 ,0x46a52d63 ),PCMCIA_PFC_DEVICE_PROD_ID123 (1 ,"MEGAHERTZ" ,"CC/XJEM3336" ,"DATA/FAX/CELL ETHERNET MODEM" ,0xf510db04 ,0x0143b773 ,0x46a52d63 ), PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "EM1144T", "PCMCIA MODEM", 0xf510db04, 0x856d66c8, 0xbd6c43ef),
@@ -768,17 +768,26 @@ static struct pcmcia_device_id serial_ids[] = {PCMCIA_DEVICE_MANF_CARD (0x00a4 ,0x0276 ),PCMCIA_DEVICE_MANF_CARD (0x0101 ,0x0039 ),PCMCIA_DEVICE_MANF_CARD (0x0104 ,0x0006 ), +PCMCIA_DEVICE_MANF_CARD (0x0105 ,0x0101 ),/* TDK DF2814 */ +PCMCIA_DEVICE_MANF_CARD (0x0105 ,0x100a ),/* Xircom CM-56G */ +PCMCIA_DEVICE_MANF_CARD (0x0105 ,0x3e0a ),/* TDK DF5660 */ PCMCIA_DEVICE_MANF_CARD (0x0105 ,0x410a ), +PCMCIA_DEVICE_MANF_CARD (0x0107 ,0x0002 ),/* USRobotics 14,400 */ PCMCIA_DEVICE_MANF_CARD (0x010b ,0x0d50 ),PCMCIA_DEVICE_MANF_CARD (0x010b ,0x0d51 ),PCMCIA_DEVICE_MANF_CARD (0x010b ,0x0d52 ),PCMCIA_DEVICE_MANF_CARD (0x010b ,0x0d53 ),PCMCIA_DEVICE_MANF_CARD (0x010b ,0xd180 ), +PCMCIA_DEVICE_MANF_CARD (0x0115 ,0x3330 ),/* USRobotics/SUN 14,400 */ +PCMCIA_DEVICE_MANF_CARD (0x0124 ,0x0100 ),/* Nokia DTP-2 ver II */ +PCMCIA_DEVICE_MANF_CARD (0x0134 ,0x5600 ),/* LASAT COMMUNICATIONS A/S */ PCMCIA_DEVICE_MANF_CARD (0x0137 ,0x000e ),PCMCIA_DEVICE_MANF_CARD (0x0137 ,0x001b ),PCMCIA_DEVICE_MANF_CARD (0x0137 ,0x0025 ),PCMCIA_DEVICE_MANF_CARD (0x0137 ,0x0045 ),PCMCIA_DEVICE_MANF_CARD (0x0137 ,0x0052 ), +PCMCIA_DEVICE_MANF_CARD (0x016c ,0x0006 ),/* Psion 56K+Fax */ +PCMCIA_DEVICE_MANF_CARD (0x0200 ,0x0001 ),/* MultiMobile */ PCMCIA_DEVICE_PROD_ID134 ("ADV" ,"TECH" ,"COMpad-32/85" ,0x67459937 ,0x916d02ba ,0x8fbe92ae ),PCMCIA_DEVICE_PROD_ID124 ("GATEWAY2000" ,"CC3144" ,"PCMCIA MODEM" ,0x506bccae ,0xcb3685f1 ,0xbd6c43ef ), PCMCIA_DEVICE_PROD_ID14("MEGAHERTZ", "PCMCIA MODEM", 0xf510db04, 0xbd6c43ef),
@@ -792,16 +801,21 @@ static struct pcmcia_device_id serial_ids[] = {PCMCIA_DEVICE_PROD_ID12 ("COMPAQ" ,"PCMCIA 33600 FAX/DATA MODEM" ,0xa3a3062c ,0x5a00ce95 ),PCMCIA_DEVICE_PROD_ID12 ("Computerboards, Inc." ,"PCM-COM422" ,0xd0b78f51 ,0x7e2d49ed ),PCMCIA_DEVICE_PROD_ID12 ("Dr. Neuhaus" ,"FURY CARD 14K4" ,0x76942813 ,0x8b96ce65 ), +PCMCIA_DEVICE_PROD_ID12 ("IBM" ,"ISDN/56K/GSM" ,0xb569a6e5 ,0xfee5297b ),PCMCIA_DEVICE_PROD_ID12 ("Intelligent" ,"ANGIA FAX/MODEM" ,0xb496e65e ,0xf31602a6 ),PCMCIA_DEVICE_PROD_ID12 ("Intel" ,"MODEM 2400+" ,0x816cc815 ,0x412729fb ), +PCMCIA_DEVICE_PROD_ID12 ("Intertex" ,"IX34-PCMCIA" ,0xf8a097e3 ,0x97880447 ),PCMCIA_DEVICE_PROD_ID12 ("IOTech Inc " ,"PCMCIA Dual RS-232 Serial Port Card" ,0x3bd2d898 ,0x92abc92f ),PCMCIA_DEVICE_PROD_ID12 ("MACRONIX" ,"FAX/MODEM" ,0x668388b3 ,0x3f9bdf2f ),PCMCIA_DEVICE_PROD_ID12 ("Multi-Tech" ,"MT1432LT" ,0x5f73be51 ,0x0b3e2383 ),PCMCIA_DEVICE_PROD_ID12 ("Multi-Tech" ,"MT2834LT" ,0x5f73be51 ,0x4cd7c09e ),PCMCIA_DEVICE_PROD_ID12 ("OEM " ,"C288MX " ,0xb572d360 ,0xd2385b7a ), +PCMCIA_DEVICE_PROD_ID12 ("Option International" ,"V34bis GSM/PSTN Data/Fax Modem" ,0x9d7cd6f5 ,0x5cb8bf41 ),PCMCIA_DEVICE_PROD_ID12 ("PCMCIA " ,"C336MX " ,0x99bcafe9 ,0xaa25bcab ),PCMCIA_DEVICE_PROD_ID12 ("Quatech Inc" ,"PCMCIA Dual RS-232 Serial Port Card" ,0xc4420b35 ,0x92abc92f ),PCMCIA_DEVICE_PROD_ID12 ("Quatech Inc" ,"Dual RS-232 Serial Port PC Card" ,0xc4420b35 ,0x031a380d ), +PCMCIA_DEVICE_PROD_ID12 ("Telia" ,"SurfinBird 560P/A+" ,0xe2cdd5e ,0xc9314b38 ), +PCMCIA_DEVICE_PROD_ID1 ("Smart Serial Port" ,0x2d8ce292 ),PCMCIA_PFC_DEVICE_CIS_PROD_ID12 (1 ,"PCMCIA" ,"EN2218-LAN/MODEM" ,0x281f1c5d ,0x570f348e ,"cis/PCMLM28.cis" ),PCMCIA_PFC_DEVICE_CIS_PROD_ID12 (1 ,"PCMCIA" ,"UE2218-LAN/MODEM" ,0x281f1c5d ,0x6fdcacee ,"cis/PCMLM28.cis" ), PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"),
Signature · 1 line
1.7.1
PATCH 3/11 serial: bfin_5xx: IRDA is not affected by anomaly 05000230
In reply to Greg KHFrom: Graf Yang <[email protected]>
Anomaly 05000230 (over sampling of the UART STOP bit) applies only when the peripheral is operating in UART mode. So drop the anomaly handling when the UART is in IRDA mode.
--- drivers/serial/bfin_5xx.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-)
drivers/serial/bfin_5xx.c +6 -1
@@ -869,7 +869,12 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios, } baud =uart_get_baud_rate (port, termios, old,0 , port->uartclk/16 ); - quot =uart_get_divisor (port, baud) -ANOMALY_05000230 ; + quot =uart_get_divisor (port, baud); + +/* If discipline is not IRDA, apply ANOMALY_05000230 */ +if (termios->c_line !=N_IRDA ) + quot -=ANOMALY_05000230 ; +spin_lock_irqsave (&uart->port.lock, flags);UART_SET_ANOMALY_THRESHOLD (uart,USEC_PER_SEC / baud *15 );
Signature · 1 line
1.7.1
PATCH 4/11 serial: bfin_5xx: fix typo in IER check
In reply to Greg KHFrom: Sonic Zhang <[email protected]>
This most likely won't cause problems on systems as people don't typically enable GPIO RTS/CTS if they don't actually use it.
--- drivers/serial/bfin_5xx.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/serial/bfin_5xx.c +1 -1
@@ -797,7 +797,7 @@ static void bfin_serial_shutdown(struct uart_port *port)gpio_free (uart->rts_pin);#endif #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS -if (UART_GET_IER (uart) &&EDSSI ) +if (UART_GET_IER (uart) &EDSSI )free_irq (uart->status_irq, uart);#endif }
Signature · 1 line
1.7.1
PATCH 5/11 TTY/n_gsm: potential double lock
In reply to Greg KHFrom: Dan Carpenter <[email protected]>
In gsm_dlci_data_kick() we call gsm_dlci_data_sweep() with the "gsm->tx_lock" held so we can't lock it again inside gsm_dlci_data_sweep(). I removed that lock from and added one to gsmld_write_wakeup() instead. The sweep function is only called from those two places.
--- drivers/char/n_gsm.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-)
drivers/char/n_gsm.c +5 -4
@@ -904,9 +904,7 @@ static void gsm_dlci_data_sweep(struct gsm_mux *gsm)int len;/* Priority ordering: We should do priority with RR of the groups */ int i =1 ; -unsigned long flags; -spin_lock_irqsave (&gsm->tx_lock, flags);while (i <NUM_DLCI ) {struct gsm_dlci *dlci;
@@ -927,7 +925,6 @@ static void gsm_dlci_data_sweep(struct gsm_mux *gsm)if (len ==0 ) i++; } -spin_unlock_irqrestore (&gsm->tx_lock, flags); }/**
@@ -2230,12 +2227,16 @@ static int gsmld_open(struct tty_struct *tty)static void gsmld_write_wakeup (struct tty_struct *tty) {struct gsm_mux *gsm = tty->disc_data; +unsigned long flags;/* Queue poll */ clear_bit (TTY_DO_WRITE_WAKEUP , &tty->flags);gsm_data_kick (gsm); -if (gsm->tx_bytes <TX_THRESH_LO ) +if (gsm->tx_bytes <TX_THRESH_LO ) { +spin_lock_irqsave (&gsm->tx_lock, flags);gsm_dlci_data_sweep (gsm); +spin_unlock_irqrestore (&gsm->tx_lock, flags); + } }/**
Signature · 1 line
1.7.1
PATCH 6/11 altera_uart: Don't take spinlock in already protected functions
In reply to Greg KHFrom: Tobias Klauser <[email protected]>
Don't take the port spinlock in uart functions where the serial core already takes care of locking/unlocking them.
The code would actually lock up on architectures where spinlocks are implemented (not the case on nios2 where this driver is primarily used for now, thus this bug didn't trigger).
Also protect calling altera_uart_rx_chars/altera_uart_tx_chars in the interrupt handler by the port spinlock.
Thanks to Ian Abbott for pointing these issues out.
--- drivers/serial/altera_uart.c | 19 ++++--------------- 1 files changed, 4 insertions(+), 15 deletions(-)
drivers/serial/altera_uart.c +4 -15
@@ -89,15 +89,12 @@ static unsigned int altera_uart_tx_empty(struct uart_port *port)static unsigned int altera_uart_get_mctrl (struct uart_port *port) { struct altera_uart *pp = container_of(port, struct altera_uart, port); -unsigned long flags;unsigned int sigs; -spin_lock_irqsave (&port->lock, flags); sigs = (readl (port->membase +ALTERA_UART_STATUS_REG ) &ALTERA_UART_STATUS_CTS_MSK ) ?TIOCM_CTS :0 ; sigs |= (pp->sigs &TIOCM_RTS ); -spin_unlock_irqrestore (&port->lock, flags);return sigs; }
@@ -105,49 +102,37 @@ static unsigned int altera_uart_get_mctrl(struct uart_port *port)static void altera_uart_set_mctrl (struct uart_port *port,unsigned int sigs) { struct altera_uart *pp = container_of(port, struct altera_uart, port); -unsigned long flags; -spin_lock_irqsave (&port->lock, flags); pp->sigs = sigs;if (sigs &TIOCM_RTS ) pp->imr |=ALTERA_UART_CONTROL_RTS_MSK ;else pp->imr &= ~ALTERA_UART_CONTROL_RTS_MSK ;writel (pp->imr, port->membase +ALTERA_UART_CONTROL_REG ); -spin_unlock_irqrestore (&port->lock, flags); }static void altera_uart_start_tx (struct uart_port *port) { struct altera_uart *pp = container_of(port, struct altera_uart, port); -unsigned long flags; -spin_lock_irqsave (&port->lock, flags); pp->imr |=ALTERA_UART_CONTROL_TRDY_MSK ;writel (pp->imr, port->membase +ALTERA_UART_CONTROL_REG ); -spin_unlock_irqrestore (&port->lock, flags); }static void altera_uart_stop_tx (struct uart_port *port) { struct altera_uart *pp = container_of(port, struct altera_uart, port); -unsigned long flags; -spin_lock_irqsave (&port->lock, flags); pp->imr &= ~ALTERA_UART_CONTROL_TRDY_MSK ;writel (pp->imr, port->membase +ALTERA_UART_CONTROL_REG ); -spin_unlock_irqrestore (&port->lock, flags); }static void altera_uart_stop_rx (struct uart_port *port) { struct altera_uart *pp = container_of(port, struct altera_uart, port); -unsigned long flags; -spin_lock_irqsave (&port->lock, flags); pp->imr &= ~ALTERA_UART_CONTROL_RRDY_MSK ;writel (pp->imr, port->membase +ALTERA_UART_CONTROL_REG ); -spin_unlock_irqrestore (&port->lock, flags); }static void altera_uart_break_ctl (struct uart_port *port,int break_state)
@@ -272,10 +257,14 @@ static irqreturn_t altera_uart_interrupt(int irq, void *data)unsigned int isr; isr =readl (port->membase +ALTERA_UART_STATUS_REG ) & pp->imr; + +spin_lock (&port->lock);if (isr &ALTERA_UART_STATUS_RRDY_MSK )altera_uart_rx_chars (pp);if (isr &ALTERA_UART_STATUS_TRDY_MSK )altera_uart_tx_chars (pp); +spin_unlock (&port->lock); +return IRQ_RETVAL (isr); }
Signature · 1 line
1.7.1
PATCH 7/11 altera_uart: Simplify altera_uart_console_putc
In reply to Greg KHFrom: Tobias Klauser <[email protected]>
The check for the TRDY flag after writing the character is not needed. Also do a cpu_relax() inside the loop.
Pass a struct uart_port to altera_uart_console_putc, so we do not need to get it (and dereference pointers) for every character.
--- drivers/serial/altera_uart.c | 23 ++++++++--------------- 1 files changed, 8 insertions(+), 15 deletions(-)
drivers/serial/altera_uart.c +8 -15
@@ -391,31 +391,24 @@ int __init early_altera_uart_setup(struct altera_uart_platform_uart *platp)return 0 ; } -static void altera_uart_console_putc (struct console *co,const char c) +static void altera_uart_console_putc (struct uart_port *port,const char c) { -struct uart_port *port = &(altera_uart_ports + co->index)->port; -int i; +while (!(readl (port->membase +ALTERA_UART_STATUS_REG ) & +ALTERA_UART_STATUS_TRDY_MSK )) +cpu_relax (); -for (i =0 ; i <0x10000 ; i++) { -if (readl (port->membase +ALTERA_UART_STATUS_REG ) & -ALTERA_UART_STATUS_TRDY_MSK ) -break ; - }writel (c, port->membase +ALTERA_UART_TXDATA_REG ); -for (i =0 ; i <0x10000 ; i++) { -if (readl (port->membase +ALTERA_UART_STATUS_REG ) & -ALTERA_UART_STATUS_TRDY_MSK ) -break ; - } }static void altera_uart_console_write (struct console *co,const char *s,unsigned int count) { +struct uart_port *port = &(altera_uart_ports + co->index)->port; +for (; count; count--, s++) { -altera_uart_console_putc (co, *s); +altera_uart_console_putc (port, *s);if (*s =='\n' ) -altera_uart_console_putc (co,'\r' ); +altera_uart_console_putc (port,'\r' ); } }
Signature · 1 line
1.7.1
PATCH 8/11 tty: fix a little bug in scrup, vt.c
In reply to Greg KHFrom: Frank Pan <[email protected]>
The code uses vc->vc_cols instead of vc->vc_size_row by mistake, it will cause half of the region which is going to clear remain uncleared.
The issue happens in background consoles, so it's hard to observe.
Frank Pan
--- drivers/char/vt.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/char/vt.c +1 -1
@@ -304,7 +304,7 @@ static void scrup(struct vc_data *vc, unsigned int t, unsigned int b, int nr) d = (unsigned short *)(vc->vc_origin + vc->vc_size_row * t); s = (unsigned short *)(vc->vc_origin + vc->vc_size_row * (t + nr));scr_memmovew (d, s, (b - t - nr) * vc->vc_size_row); -scr_memsetw (d + (b - t - nr) * vc->vc_cols, vc->vc_video_erase_char, +scr_memsetw (d + (b - t - nr) * vc->vc_size_row, vc->vc_video_erase_char, vc->vc_size_row * nr); }
Signature · 1 line
1.7.1
PATCH 9/11 serial: altera_uart: Proper section for altera_uart_remove
In reply to Greg KHFrom: Tobias Klauser <[email protected]>
altera_uart_remove should be in .devexit.text
--- drivers/serial/altera_uart.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/serial/altera_uart.c +1 -1
@@ -498,7 +498,7 @@ static int __devinit altera_uart_probe(struct platform_device *pdev)return 0 ; } -static int altera_uart_remove (struct platform_device *pdev) +static int __devexit altera_uart_remove(struct platform_device *pdev) {struct uart_port *port;int i;
Signature · 1 line
1.7.1
PATCH 10/11 vt_ioctl: return -EFAULT on copy_from_user errors
In reply to Greg KHFrom: Dan Carpenter <[email protected]>
copy_from_user() returns the number of bytes remaining but we want to return a negative error code here.
--- drivers/char/vt_ioctl.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
drivers/char/vt_ioctl.c +3 -1
@@ -1303,7 +1303,9 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,if (!perm) goto eperm; ret =copy_from_user (&ui, up,sizeof (struct unimapinit )); -if (!ret) +if (ret) + ret = -EFAULT ; +else con_clear_unimap (vc, &ui);break ; }
Signature · 1 line
1.7.1
PATCH 11/11 serial: add support for various Titan PCI cards
In reply to Greg KHFrom: Yegor Yefremov <[email protected]>
serial: add support for various Titan PCI cards
Models: 200I, 400I, 800I, 400EH, 800EH, 800EHB,
100E, 200E, 400E, 800E, 200EI, 200EISI
--- drivers/serial/8250_pci.c | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 71 insertions(+), 0 deletions(-)
drivers/serial/8250_pci.c +71 -0
@@ -982,6 +982,18 @@ static int skip_tx_en_setup(struct serial_private *priv,#define PCI_SUBDEVICE_ID_POCTAL422 0x0408#define PCI_VENDOR_ID_ADVANTECH 0x13fe#define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620 +#define PCI_DEVICE_ID_TITAN_200I 0x8028 +#define PCI_DEVICE_ID_TITAN_400I 0x8048 +#define PCI_DEVICE_ID_TITAN_800I 0x8088 +#define PCI_DEVICE_ID_TITAN_800EH 0xA007 +#define PCI_DEVICE_ID_TITAN_800EHB 0xA008 +#define PCI_DEVICE_ID_TITAN_400EH 0xA009 +#define PCI_DEVICE_ID_TITAN_100E 0xA010 +#define PCI_DEVICE_ID_TITAN_200E 0xA012 +#define PCI_DEVICE_ID_TITAN_400E 0xA013 +#define PCI_DEVICE_ID_TITAN_800E 0xA014 +#define PCI_DEVICE_ID_TITAN_200EI 0xA016 +#define PCI_DEVICE_ID_TITAN_200EISI 0xA017/* Unknown vendors/cards - this should not be in linux/pci_ids.h */ #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
@@ -1541,6 +1553,10 @@ enum pci_board_num_t { pbn_b3_4_115200, pbn_b3_8_115200, + pbn_b4_bt_2_921600, + pbn_b4_bt_4_921600, + pbn_b4_bt_8_921600, +/* * Board-specific versions. */
@@ -1995,6 +2011,25 @@ static struct pciserial_board pci_boards[] __devinitdata = { .uart_offset = 8, }, + [pbn_b4_bt_2_921600] = { + .flags = FL_BASE4, + .num_ports = 2, + .base_baud = 921600, + .uart_offset = 8, + }, + [pbn_b4_bt_4_921600] = { + .flags = FL_BASE4, + .num_ports = 4, + .base_baud = 921600, + .uart_offset = 8, + }, + [pbn_b4_bt_8_921600] = { + .flags = FL_BASE4, + .num_ports = 8, + .base_baud = 921600, + .uart_offset = 8, + }, +/* * Entries following this are board-specific. */
@@ -3043,6 +3078,42 @@ static struct pci_device_id serial_pci_tbl[] = { {PCI_VENDOR_ID_TITAN ,PCI_DEVICE_ID_TITAN_800L ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , pbn_b0_bt_8_921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200I, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_b4_bt_2_921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400I, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_b4_bt_4_921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800I, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_b4_bt_8_921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400EH, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_b0_4_921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800EH, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_b0_4_921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800EHB, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_b0_4_921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100E, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_oxsemi_1_4000000 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200E, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_oxsemi_2_4000000 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400E, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_oxsemi_4_4000000 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800E, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_oxsemi_8_4000000 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EI, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_oxsemi_2_4000000 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EISI, +PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , + pbn_oxsemi_2_4000000 }, { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
Signature · 1 line
1.7.1