From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757789AbcGZSHG (ORCPT ); Tue, 26 Jul 2016 14:07:06 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:33384 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757644AbcGZSEJ (ORCPT ); Tue, 26 Jul 2016 14:04:09 -0400 From: Mathieu OTHACEHE To: johan@kernel.org, gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Mathieu OTHACEHE Subject: [PATCH v2 11/22] usb: serial: ti_usb_3410_5052: Do not modify interrupt context Date: Tue, 26 Jul 2016 19:59:51 +0200 Message-Id: <20160726180002.2398-12-m.othacehe@gmail.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160726180002.2398-1-m.othacehe@gmail.com> References: <20160726180002.2398-1-m.othacehe@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It is useless to pass a specific context (ti_device) to the interrupt callback. So use the default context (usb_serial_port). Remove useless variables in ti_interrupt_callback. Signed-off-by: Mathieu OTHACEHE --- drivers/usb/serial/ti_usb_3410_5052.c | 58 ++++++++++++++++------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 7f53432..ee8f08c 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c @@ -343,7 +343,7 @@ static int ti_get_serial_info(struct ti_port *tport, struct serial_struct __user *ret_arg); static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport, struct serial_struct __user *new_arg); -static void ti_handle_new_msr(struct ti_port *tport, u8 msr); +static void ti_handle_new_msr(struct usb_serial_port *port, u8 msr); static void ti_stop_read(struct ti_port *tport, struct tty_struct *tty); static int ti_restart_read(struct ti_port *tport, struct tty_struct *tty); @@ -735,7 +735,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port) status = -EINVAL; goto release_lock; } - urb->context = tdev; status = usb_submit_urb(urb, GFP_KERNEL); if (status) { dev_err(&port->dev, "%s - submit interrupt urb failed, %d\n", __func__, status); @@ -1204,17 +1203,12 @@ static int ti_get_func_from_code(unsigned char code) static void ti_interrupt_callback(struct urb *urb) { - struct ti_device *tdev = urb->context; - struct usb_serial_port *port; - struct usb_serial *serial = tdev->td_serial; - struct ti_port *tport; - struct device *dev = &urb->dev->dev; + struct usb_serial_port *port = urb->context; unsigned char *data = urb->transfer_buffer; int length = urb->actual_length; int port_number; int function; int status = urb->status; - int retval; u8 msr; switch (status) { @@ -1223,64 +1217,63 @@ static void ti_interrupt_callback(struct urb *urb) case -ECONNRESET: case -ENOENT: case -ESHUTDOWN: - dev_dbg(dev, "%s - urb shutting down, %d\n", __func__, status); + dev_dbg(&port->dev, "%s - urb shutting down, %d\n", + __func__, status); return; default: - dev_err(dev, "%s - nonzero urb status, %d\n", __func__, status); + dev_err(&port->dev, "%s - nonzero urb status, %d\n", + __func__, status); goto exit; } if (length != 2) { - dev_dbg(dev, "%s - bad packet size, %d\n", __func__, length); + dev_dbg(&port->dev, "%s - bad packet size, %d\n", + __func__, length); goto exit; } if (data[0] == TI_CODE_HARDWARE_ERROR) { - dev_err(dev, "%s - hardware error, %d\n", __func__, data[1]); + dev_err(&port->dev, "%s - hardware error, %d\n", + __func__, data[1]); goto exit; } port_number = ti_get_port_from_code(data[0]); function = ti_get_func_from_code(data[0]); - dev_dbg(dev, "%s - port_number %d, function %d, data 0x%02X\n", + dev_dbg(&port->dev, "%s - port_number %d, function %d, data 0x%02X\n", __func__, port_number, function, data[1]); - if (port_number >= serial->num_ports) { - dev_err(dev, "%s - bad port number, %d\n", + if (port_number >= port->serial->num_ports) { + dev_err(&port->dev, "%s - bad port number, %d\n", __func__, port_number); goto exit; } - port = serial->port[port_number]; - - tport = usb_get_serial_port_data(port); - if (!tport) - goto exit; - switch (function) { case TI_CODE_DATA_ERROR: - dev_err(dev, "%s - DATA ERROR, port %d, data 0x%02X\n", + dev_err(&port->dev, "%s - DATA ERROR, port %d, data 0x%02X\n", __func__, port_number, data[1]); break; case TI_CODE_MODEM_STATUS: msr = data[1]; - dev_dbg(dev, "%s - port %d, msr 0x%02X\n", __func__, port_number, msr); - ti_handle_new_msr(tport, msr); + dev_dbg(&port->dev, "%s - port %d, msr 0x%02X\n", + __func__, port_number, msr); + ti_handle_new_msr(port, msr); break; default: - dev_err(dev, "%s - unknown interrupt code, 0x%02X\n", + dev_err(&port->dev, "%s - unknown interrupt code, 0x%02X\n", __func__, data[1]); break; } exit: - retval = usb_submit_urb(urb, GFP_ATOMIC); - if (retval) - dev_err(dev, "%s - resubmit interrupt urb failed, %d\n", - __func__, retval); + status = usb_submit_urb(urb, GFP_ATOMIC); + if (status) + dev_err(&port->dev, "%s - resubmit interrupt urb failed, %d\n", + __func__, status); } @@ -1545,12 +1538,13 @@ static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport, } -static void ti_handle_new_msr(struct ti_port *tport, u8 msr) +static void ti_handle_new_msr(struct usb_serial_port *port, u8 msr) { + struct ti_port *tport = usb_get_serial_port_data(port); struct async_icount *icount; unsigned long flags; - dev_dbg(&tport->tp_port->dev, "%s - msr 0x%02X\n", __func__, msr); + dev_dbg(&port->dev, "%s - msr 0x%02X\n", __func__, msr); if (msr & TI_MSR_DELTA_MASK) { spin_lock_irqsave(&tport->tp_lock, flags); @@ -1563,7 +1557,7 @@ static void ti_handle_new_msr(struct ti_port *tport, u8 msr) icount->dcd++; if (msr & TI_MSR_DELTA_RI) icount->rng++; - wake_up_interruptible(&tport->tp_port->port.delta_msr_wait); + wake_up_interruptible(&port->port.delta_msr_wait); spin_unlock_irqrestore(&tport->tp_lock, flags); } -- 2.9.0