From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: Jiri Slaby <jirislaby@gmail.com>, Alan Cox <alan@linux.intel.com>,
Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 09/79] cyclades: remove block_til_ready
Date: Sat, 19 Sep 2009 14:36:14 -0700 [thread overview]
Message-ID: <1253396244-7885-9-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <20090919213345.GB7668@kroah.com>
From: Jiri Slaby <jirislaby@gmail.com>
Use a tty_port common instead. This saves lots of .text and makes the
code a lot more readable.
This involves separation of a dtr_rts handling, next patches will use
that to not duplicate the code all over the place.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/char/cyclades.c | 302 +++++++++++++++++------------------------------
1 files changed, 108 insertions(+), 194 deletions(-)
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
index e2f731b..9e0cd70 100644
--- a/drivers/char/cyclades.c
+++ b/drivers/char/cyclades.c
@@ -2172,199 +2172,6 @@ static void cy_shutdown(struct cyclades_port *info, struct tty_struct *tty)
* ------------------------------------------------------------
*/
-static int
-block_til_ready(struct tty_struct *tty, struct file *filp,
- struct cyclades_port *info)
-{
- DECLARE_WAITQUEUE(wait, current);
- struct cyclades_card *cinfo;
- unsigned long flags;
- int chip, channel, index;
- int retval;
- void __iomem *base_addr;
-
- cinfo = info->card;
- channel = info->line - cinfo->first_line;
-
- /*
- * If the device is in the middle of being closed, then block
- * until it's done, and then try again.
- */
- if (tty_hung_up_p(filp) || (info->port.flags & ASYNC_CLOSING)) {
- wait_event_interruptible(info->port.close_wait,
- !(info->port.flags & ASYNC_CLOSING));
- return (info->port.flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS;
- }
-
- /*
- * If non-blocking mode is set, then make the check up front
- * and then exit.
- */
- if ((filp->f_flags & O_NONBLOCK) ||
- (tty->flags & (1 << TTY_IO_ERROR))) {
- info->port.flags |= ASYNC_NORMAL_ACTIVE;
- return 0;
- }
-
- /*
- * Block waiting for the carrier detect and the line to become
- * free (i.e., not in use by the callout). While we are in
- * this loop, info->port.count is dropped by one, so that
- * cy_close() knows when to free things. We restore it upon
- * exit, either normal or abnormal.
- */
- retval = 0;
- add_wait_queue(&info->port.open_wait, &wait);
-#ifdef CY_DEBUG_OPEN
- printk(KERN_DEBUG "cyc block_til_ready before block: ttyC%d, "
- "count = %d\n", info->line, info->port.count);
-#endif
- spin_lock_irqsave(&cinfo->card_lock, flags);
- if (!tty_hung_up_p(filp))
- info->port.count--;
- spin_unlock_irqrestore(&cinfo->card_lock, flags);
-#ifdef CY_DEBUG_COUNT
- printk(KERN_DEBUG "cyc block_til_ready: (%d): decrementing count to "
- "%d\n", current->pid, info->port.count);
-#endif
- info->port.blocked_open++;
-
- if (!cy_is_Z(cinfo)) {
- chip = channel >> 2;
- channel &= 0x03;
- index = cinfo->bus_index;
- base_addr = cinfo->base_addr + (cy_chip_offset[chip] << index);
-
- while (1) {
- spin_lock_irqsave(&cinfo->card_lock, flags);
- if ((tty->termios->c_cflag & CBAUD)) {
- cy_writeb(base_addr + (CyCAR << index),
- (u_char) channel);
- cy_writeb(base_addr + (CyMSVR1 << index),
- CyRTS);
- cy_writeb(base_addr + (CyMSVR2 << index),
- CyDTR);
-#ifdef CY_DEBUG_DTR
- printk(KERN_DEBUG "cyc:block_til_ready raising "
- "DTR\n");
- printk(KERN_DEBUG " status: 0x%x, 0x%x\n",
- readb(base_addr + (CyMSVR1 << index)),
- readb(base_addr + (CyMSVR2 << index)));
-#endif
- }
- spin_unlock_irqrestore(&cinfo->card_lock, flags);
-
- set_current_state(TASK_INTERRUPTIBLE);
- if (tty_hung_up_p(filp) ||
- !(info->port.flags & ASYNC_INITIALIZED)) {
- retval = ((info->port.flags & ASYNC_HUP_NOTIFY) ?
- -EAGAIN : -ERESTARTSYS);
- break;
- }
-
- spin_lock_irqsave(&cinfo->card_lock, flags);
- cy_writeb(base_addr + (CyCAR << index),
- (u_char) channel);
- if (!(info->port.flags & ASYNC_CLOSING) && (C_CLOCAL(tty) ||
- (readb(base_addr +
- (CyMSVR1 << index)) & CyDCD))) {
- spin_unlock_irqrestore(&cinfo->card_lock, flags);
- break;
- }
- spin_unlock_irqrestore(&cinfo->card_lock, flags);
-
- if (signal_pending(current)) {
- retval = -ERESTARTSYS;
- break;
- }
-#ifdef CY_DEBUG_OPEN
- printk(KERN_DEBUG "cyc block_til_ready blocking: "
- "ttyC%d, count = %d\n",
- info->line, info->port.count);
-#endif
- schedule();
- }
- } else {
- struct FIRM_ID __iomem *firm_id;
- struct ZFW_CTRL __iomem *zfw_ctrl;
- struct BOARD_CTRL __iomem *board_ctrl;
- struct CH_CTRL __iomem *ch_ctrl;
-
- base_addr = cinfo->base_addr;
- firm_id = base_addr + ID_ADDRESS;
- if (!cyz_is_loaded(cinfo)) {
- __set_current_state(TASK_RUNNING);
- remove_wait_queue(&info->port.open_wait, &wait);
- return -EINVAL;
- }
-
- zfw_ctrl = base_addr + (readl(&firm_id->zfwctrl_addr)
- & 0xfffff);
- board_ctrl = &zfw_ctrl->board_ctrl;
- ch_ctrl = zfw_ctrl->ch_ctrl;
-
- while (1) {
- if ((tty->termios->c_cflag & CBAUD)) {
- cy_writel(&ch_ctrl[channel].rs_control,
- readl(&ch_ctrl[channel].rs_control) |
- C_RS_RTS | C_RS_DTR);
- retval = cyz_issue_cmd(cinfo,
- channel, C_CM_IOCTLM, 0L);
- if (retval != 0) {
- printk(KERN_ERR "cyc:block_til_ready "
- "retval on ttyC%d was %x\n",
- info->line, retval);
- }
-#ifdef CY_DEBUG_DTR
- printk(KERN_DEBUG "cyc:block_til_ready raising "
- "Z DTR\n");
-#endif
- }
-
- set_current_state(TASK_INTERRUPTIBLE);
- if (tty_hung_up_p(filp) ||
- !(info->port.flags & ASYNC_INITIALIZED)) {
- retval = ((info->port.flags & ASYNC_HUP_NOTIFY) ?
- -EAGAIN : -ERESTARTSYS);
- break;
- }
- if (!(info->port.flags & ASYNC_CLOSING) && (C_CLOCAL(tty) ||
- (readl(&ch_ctrl[channel].rs_status) &
- C_RS_DCD))) {
- break;
- }
- if (signal_pending(current)) {
- retval = -ERESTARTSYS;
- break;
- }
-#ifdef CY_DEBUG_OPEN
- printk(KERN_DEBUG "cyc block_til_ready blocking: "
- "ttyC%d, count = %d\n",
- info->line, info->port.count);
-#endif
- schedule();
- }
- }
- __set_current_state(TASK_RUNNING);
- remove_wait_queue(&info->port.open_wait, &wait);
- if (!tty_hung_up_p(filp)) {
- info->port.count++;
-#ifdef CY_DEBUG_COUNT
- printk(KERN_DEBUG "cyc:block_til_ready (%d): incrementing "
- "count to %d\n", current->pid, info->port.count);
-#endif
- }
- info->port.blocked_open--;
-#ifdef CY_DEBUG_OPEN
- printk(KERN_DEBUG "cyc:block_til_ready after blocking: ttyC%d, "
- "count = %d\n", info->line, info->port.count);
-#endif
- if (retval)
- return retval;
- info->port.flags |= ASYNC_NORMAL_ACTIVE;
- return 0;
-} /* block_til_ready */
-
/*
* This routine is called whenever a serial port is opened. It
* performs the serial-specific initialization for the tty structure.
@@ -2472,7 +2279,7 @@ static int cy_open(struct tty_struct *tty, struct file *filp)
if (retval)
return retval;
- retval = block_til_ready(tty, filp, info);
+ retval = tty_port_block_til_ready(&info->port, tty, filp);
if (retval) {
#ifdef CY_DEBUG_OPEN
printk(KERN_DEBUG "cyc:cy_open returning after block_til_ready "
@@ -4312,6 +4119,111 @@ static void cy_hangup(struct tty_struct *tty)
wake_up_interruptible(&info->port.open_wait);
} /* cy_hangup */
+static int cyy_carrier_raised(struct tty_port *port)
+{
+ struct cyclades_port *info = container_of(port, struct cyclades_port,
+ port);
+ struct cyclades_card *cinfo = info->card;
+ void __iomem *base = cinfo->base_addr;
+ unsigned long flags;
+ int channel = info->line - cinfo->first_line;
+ int chip = channel >> 2, index = cinfo->bus_index;
+ u32 cd;
+
+ channel &= 0x03;
+ base += cy_chip_offset[chip] << index;
+
+ spin_lock_irqsave(&cinfo->card_lock, flags);
+ cy_writeb(base + (CyCAR << index), (u8)channel);
+ cd = readb(base + (CyMSVR1 << index)) & CyDCD;
+ spin_unlock_irqrestore(&cinfo->card_lock, flags);
+
+ return cd;
+}
+
+static void cyy_dtr_rts(struct tty_port *port, int raise)
+{
+ struct cyclades_port *info = container_of(port, struct cyclades_port,
+ port);
+ struct cyclades_card *cinfo = info->card;
+ void __iomem *base = cinfo->base_addr;
+ unsigned long flags;
+ int channel = info->line - cinfo->first_line;
+ int chip = channel >> 2, index = cinfo->bus_index;
+
+ channel &= 0x03;
+ base += cy_chip_offset[chip] << index;
+
+ spin_lock_irqsave(&cinfo->card_lock, flags);
+ cy_writeb(base + (CyCAR << index), (u8)channel);
+ cy_writeb(base + (CyMSVR1 << index), raise ? CyRTS : ~CyRTS);
+ cy_writeb(base + (CyMSVR2 << index), raise ? CyDTR : ~CyDTR);
+#ifdef CY_DEBUG_DTR
+ printk(KERN_DEBUG "%s: raising DTR\n", __func__);
+ printk(KERN_DEBUG " status: 0x%x, 0x%x\n",
+ readb(base + (CyMSVR1 << index)),
+ readb(base + (CyMSVR2 << index)));
+#endif
+ spin_unlock_irqrestore(&cinfo->card_lock, flags);
+}
+
+static int cyz_carrier_raised(struct tty_port *port)
+{
+ struct cyclades_port *info = container_of(port, struct cyclades_port,
+ port);
+ struct cyclades_card *cinfo = info->card;
+ void __iomem *base = cinfo->base_addr;
+ struct FIRM_ID __iomem *firm_id = base + ID_ADDRESS;
+ struct ZFW_CTRL __iomem *zfw_ctrl;
+ struct CH_CTRL __iomem *ch_ctrl;
+ int channel = info->line - cinfo->first_line;
+
+ zfw_ctrl = base + (readl(&firm_id->zfwctrl_addr) & 0xfffff);
+ ch_ctrl = zfw_ctrl->ch_ctrl;
+
+ return readl(&ch_ctrl[channel].rs_status) & C_RS_DCD;
+}
+
+static void cyz_dtr_rts(struct tty_port *port, int raise)
+{
+ struct cyclades_port *info = container_of(port, struct cyclades_port,
+ port);
+ struct cyclades_card *cinfo = info->card;
+ void __iomem *base = cinfo->base_addr;
+ struct FIRM_ID __iomem *firm_id = base + ID_ADDRESS;
+ struct ZFW_CTRL __iomem *zfw_ctrl;
+ struct CH_CTRL __iomem *ch_ctrl;
+ int ret, channel = info->line - cinfo->first_line;
+ u32 rs;
+
+ zfw_ctrl = base + (readl(&firm_id->zfwctrl_addr) & 0xfffff);
+ ch_ctrl = zfw_ctrl->ch_ctrl;
+
+ rs = readl(&ch_ctrl[channel].rs_control);
+ if (raise)
+ rs |= C_RS_RTS | C_RS_DTR;
+ else
+ rs &= ~(C_RS_RTS | C_RS_DTR);
+ cy_writel(&ch_ctrl[channel].rs_control, rs);
+ ret = cyz_issue_cmd(cinfo, channel, C_CM_IOCTLM, 0L);
+ if (ret != 0)
+ printk(KERN_ERR "%s: retval on ttyC%d was %x\n",
+ __func__, info->line, ret);
+#ifdef CY_DEBUG_DTR
+ printk(KERN_DEBUG "%s: raising Z DTR\n", __func__);
+#endif
+}
+
+static const struct tty_port_operations cyy_port_ops = {
+ .carrier_raised = cyy_carrier_raised,
+ .dtr_rts = cyy_dtr_rts,
+};
+
+static const struct tty_port_operations cyz_port_ops = {
+ .carrier_raised = cyz_carrier_raised,
+ .dtr_rts = cyz_dtr_rts,
+};
+
/*
* ---------------------------------------------------------------------
* cy_init() and friends
@@ -4351,6 +4263,7 @@ static int __devinit cy_init_card(struct cyclades_card *cinfo)
init_waitqueue_head(&info->delta_msr_wait);
if (cy_is_Z(cinfo)) {
+ info->port.ops = &cyz_port_ops;
info->type = PORT_STARTECH;
if (cinfo->hw_ver == ZO_V1)
info->xmit_fifo_size = CYZ_FIFO_SIZE;
@@ -4362,6 +4275,7 @@ static int __devinit cy_init_card(struct cyclades_card *cinfo)
#endif
} else {
int index = cinfo->bus_index;
+ info->port.ops = &cyy_port_ops;
info->type = PORT_CIRRUS;
info->xmit_fifo_size = CyMAX_CHAR_FIFO;
info->cor1 = CyPARITY_NONE | Cy_1_STOP | Cy_8_BITS;
--
1.6.4.2
next prev parent reply other threads:[~2009-09-19 21:38 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-19 21:33 [GIT PATCH] TTY patches for 2.6.31-git Greg KH
2009-09-19 21:36 ` [PATCH 01/79] tty: gigaset: really fix chars_in_buffer Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 02/79] serial: bfin_5xx: fix building as module when early printk is enabled Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 03/79] tty: serial/pcmcia: add ID for Advantech card Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 04/79] tty-ldisc: make /proc/tty/ldiscs use ldisc_ops instead of ldiscs Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 05/79] tty-ldisc: get rid of tty_ldisc_try_get() helper function Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 06/79] tty: includecheck fix: drivers/char, vt.c Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 07/79] tty: icom: bit and/or confusion? Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 08/79] cyclades: add tty refcounting Greg Kroah-Hartman
2009-09-19 21:36 ` Greg Kroah-Hartman [this message]
2009-09-19 21:36 ` [PATCH 10/79] cyclades: avoid addresses recomputation Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 11/79] cyclades: switch to tty_port_hangup Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 12/79] cyclades: close cleanup Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 13/79] cyclades: overall cleanup Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 14/79] cyclades: sleep instead busy-wait Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 15/79] cyclades: use dtr_rts helpers Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 16/79] cyclades: merge cy_startup tails Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 17/79] cyclades: ioctls cleanup Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 18/79] cyclades: tiocm cleanup Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 19/79] cyclades: introduce cyy_readb/writeb Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 20/79] cyclades: remove more duplicated code Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 21/79] slip: Clean up create and destroy Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 22/79] kfifo: Use "const" definitions Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 23/79] MOS7720 has no tiocmget method Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 24/79] tty: usb_serial_mos7720: Fix get_lsr_info Greg Kroah-Hartman
2010-01-26 11:08 ` Kees Schoenmakers
2010-01-26 11:09 ` Kees Schoenmakers
2009-09-19 21:36 ` [PATCH 25/79] tty: Fix a typo noted in passing Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 26/79] mos7840: remove old dead modem logic Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 27/79] serial: 8250: add IRQ trigger support Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 28/79] 8250: Now honours baud rate lower bounds Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 29/79] tty: Add a full port_close function Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 30/79] riscom8: split open and close methods up Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 31/79] mxser: Split close ready for a standard tty_port_close method Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 32/79] isicom: Split the close hardware bits out Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 33/79] tty: riscom8 kref and tty_port_close Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 34/79] cyclades: use the full port_close function Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 35/79] tty: make the kref destructor occur asynchronously Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 36/79] cdc_acm: Fix to use modern speed interfaces Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 37/79] tty: USB hangup is racy Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 38/79] tty: remove dtr/rts use from the driver open methods Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 39/79] tty: USB can now use the shutdown method for kref based freeing of ports Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 40/79] vt: add an event interface Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 41/79] vt: remove power stuff from kernel/power Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 42/79] vt: move kernel stuff out of vt.h Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 43/79] vt: add an activate and lock Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 44/79] tty: USB does not need the filp argument in the drivers Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 45/79] isicom: split the open method for the isicom device Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 46/79] serial: kill off uart_info Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 47/79] serial: Fold closing_* fields into the tty_port ones Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 48/79] serial: use tty_port pointers in the core code Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 49/79] serial: move count into the tty_port version Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 50/79] serial: move the flags into the tty_port field Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 51/79] serial: kill off uif_t Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 52/79] serial: replace the state mutex with the tty port mutex Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 53/79] serial: move delta_msr_wait into the tty_port Greg Kroah-Hartman
2009-09-19 21:36 ` [PATCH 54/79] serial: move port users helper Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 55/79] serial: kill USF_CLOSING_* definitions Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 56/79] serial: introduce tty krefs Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 57/79] Set proper console speed on resume if console suspend is disabled Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 58/79] tty: USB serial termios bits Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 59/79] n_tty: honor opost flag for echoes Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 60/79] n_tty: move echoctl check and clean up logic Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 61/79] tty: handle VT specific compat ioctls in vt driver Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 62/79] tty: vt: use printk_once Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 63/79] tty: Power: fix suspend vt regression Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 64/79] TTY: fix typos Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 65/79] tty: riscom8, fix shutdown declaration Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 66/79] tty: riscom8, fix tty refcnt Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 67/79] tty: USB: serial/mct_u232, " Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 68/79] uartlite: support shared interrupt lines Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 69/79] tty: Char: mxser, add support for CP112UL Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 70/79] tty: Char: mxser, use THRE for ASPP_OQUEUE ioctl Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 71/79] usb-serial: change referencing of port and serial structures Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 72/79] usb-serial: put subroutines in logical order Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 73/79] usb-serial: change logic of serial lookups Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 74/79] usb-serial: acquire references when a new tty is installed Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 75/79] usb-serial: fix termios initialization logic Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 76/79] usb-serial: rename subroutines Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 77/79] usb-serial: add missing tests and debug lines Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 78/79] usb-serial: straighten out serial_open Greg Kroah-Hartman
2009-09-19 21:37 ` [PATCH 79/79] USB serial: update the console driver Greg Kroah-Hartman
2009-09-30 10:09 ` [origin tree boot crash] Re: [GIT PATCH] TTY patches for 2.6.31-git Ingo Molnar
2009-09-30 10:17 ` Alan Cox
2009-10-01 8:21 ` Ingo Molnar
2009-10-01 10:36 ` Alan Cox
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1253396244-7885-9-git-send-email-gregkh@suse.de \
--to=gregkh@suse.de \
--cc=alan@linux.intel.com \
--cc=jirislaby@gmail.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome