Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit efe45ab1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'tty-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6:
  omap-serial: Allow IXON and IXOFF to be disabled.
  TTY: serial, document ignoring of uart->ops->startup error
  TTY: pty, fix pty counting
  8250: Fix race condition in serial8250_backup_timeout().
  serial/8250_pci: delete duplicate data definition
  8250_pci: add support for Rosewill RC-305 4x serial port card
  tty: Add "spi:" prefix for spi modalias
  atmel_serial: fix atmel_default_console_device
  serial: 8250_pnp: add Intermec CV60 touchscreen device
  drivers/serial/ucc_uart.c: Fix compiler warning
  pch_uart: Set PCIe bus number using probe parameter
  serial: samsung: Fix build error
parents 3ab47029 b280a97d
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -446,8 +446,19 @@ static inline void legacy_pty_init(void) { }
int pty_limit = NR_UNIX98_PTY_DEFAULT;
static int pty_limit_min;
static int pty_limit_max = NR_UNIX98_PTY_MAX;
static int tty_count;
static int pty_count;

static inline void pty_inc_count(void)
{
	pty_count = (++tty_count) / 2;
}

static inline void pty_dec_count(void)
{
	pty_count = (--tty_count) / 2;
}

static struct cdev ptmx_cdev;

static struct ctl_table pty_table[] = {
@@ -542,6 +553,7 @@ static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver,

static void pty_unix98_shutdown(struct tty_struct *tty)
{
	tty_driver_remove_tty(tty->driver, tty);
	/* We have our own method as we don't use the tty index */
	kfree(tty->termios);
}
@@ -588,7 +600,8 @@ static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty)
	 */
	tty_driver_kref_get(driver);
	tty->count++;
	pty_count++;
	pty_inc_count(); /* tty */
	pty_inc_count(); /* tty->link */
	return 0;
err_free_mem:
	deinitialize_tty_struct(o_tty);
@@ -602,7 +615,7 @@ static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty)

static void pty_unix98_remove(struct tty_driver *driver, struct tty_struct *tty)
{
	pty_count--;
	pty_dec_count();
}

static const struct tty_operations ptm_unix98_ops = {
+5 −3
Original line number Diff line number Diff line
@@ -1819,6 +1819,8 @@ static void serial8250_backup_timeout(unsigned long data)
	unsigned int iir, ier = 0, lsr;
	unsigned long flags;

	spin_lock_irqsave(&up->port.lock, flags);

	/*
	 * Must disable interrupts or else we risk racing with the interrupt
	 * based handler.
@@ -1836,10 +1838,8 @@ static void serial8250_backup_timeout(unsigned long data)
	 * the "Diva" UART used on the management processor on many HP
	 * ia64 and parisc boxes.
	 */
	spin_lock_irqsave(&up->port.lock, flags);
	lsr = serial_in(up, UART_LSR);
	up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
	spin_unlock_irqrestore(&up->port.lock, flags);
	if ((iir & UART_IIR_NO_INT) && (up->ier & UART_IER_THRI) &&
	    (!uart_circ_empty(&up->port.state->xmit) || up->port.x_char) &&
	    (lsr & UART_LSR_THRE)) {
@@ -1848,11 +1848,13 @@ static void serial8250_backup_timeout(unsigned long data)
	}

	if (!(iir & UART_IIR_NO_INT))
		serial8250_handle_port(up);
		transmit_chars(up);

	if (is_real_interrupt(up->port.irq))
		serial_out(up, UART_IER, ier);

	spin_unlock_irqrestore(&up->port.lock, flags);

	/* Standard timer interval plus 0.2s to keep the port running */
	mod_timer(&up->timer,
		jiffies + uart_poll_timeout(&up->port) + HZ / 5);
+5 −6
Original line number Diff line number Diff line
@@ -1599,11 +1599,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
		.device         = 0x800D,
		.init		= pci_eg20t_init,
	},
	{
		.vendor         = 0x10DB,
		.device         = 0x800D,
		.init		= pci_eg20t_init,
	},
	/*
	 * Cronyx Omega PCI (PLX-chip based)
	 */
@@ -4021,13 +4016,17 @@ static struct pci_device_id serial_pci_tbl[] = {
		0, 0, pbn_NETMOS9900_2s_115200 },

	/*
	 * Best Connectivity PCI Multi I/O cards
	 * Best Connectivity and Rosewill PCI Multi I/O cards
	 */

	{	PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
		0xA000, 0x1000,
		0, 0, pbn_b0_1_115200 },

	{	PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
		0xA000, 0x3002,
		0, 0, pbn_b0_bt_2_115200 },

	{	PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
		0xA000, 0x3004,
		0, 0, pbn_b0_bt_4_115200 },
+3 −0
Original line number Diff line number Diff line
@@ -109,6 +109,9 @@ static const struct pnp_device_id pnp_dev_table[] = {
	/* IBM */
	/* IBM Thinkpad 701 Internal Modem Voice */
	{	"IBM0033",		0	},
	/* Intermec */
	/* Intermec CV60 touchscreen port */
	{	"PNP4972",		0	},
	/* Intertex */
	/* Intertex 28k8 33k6 Voice EXT PnP */
	{	"IXDC801",		0	},
+5 −3
Original line number Diff line number Diff line
@@ -1609,9 +1609,11 @@ static struct console atmel_console = {
static int __init atmel_console_init(void)
{
	if (atmel_default_console_device) {
		add_preferred_console(ATMEL_DEVICENAME,
				      atmel_default_console_device->id, NULL);
		atmel_init_port(&atmel_ports[atmel_default_console_device->id],
		struct atmel_uart_data *pdata =
			atmel_default_console_device->dev.platform_data;

		add_preferred_console(ATMEL_DEVICENAME, pdata->num, NULL);
		atmel_init_port(&atmel_ports[pdata->num],
				atmel_default_console_device);
		register_console(&atmel_console);
	}
Loading