Complete() will be run with interrupt enabled, so change to
spin_lock_irqsave().

Cc: Johan Hovold <jhov...@gmail.com>
Signed-off-by: Ming Lei <ming....@canonical.com>
---
 drivers/usb/serial/io_ti.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index 60054e7..4943194 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -1615,6 +1615,7 @@ static void edge_bulk_in_callback(struct urb *urb)
        int retval = 0;
        int port_number;
        int status = urb->status;
+       unsigned long flags;
 
        switch (status) {
        case 0:
@@ -1663,13 +1664,13 @@ static void edge_bulk_in_callback(struct urb *urb)
 
 exit:
        /* continue read unless stopped */
-       spin_lock(&edge_port->ep_lock);
+       spin_lock_irqsave(&edge_port->ep_lock, flags);
        if (edge_port->ep_read_urb_state == EDGE_READ_URB_RUNNING)
                retval = usb_submit_urb(urb, GFP_ATOMIC);
        else if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPING)
                edge_port->ep_read_urb_state = EDGE_READ_URB_STOPPED;
 
-       spin_unlock(&edge_port->ep_lock);
+       spin_unlock_irqrestore(&edge_port->ep_lock, flags);
        if (retval)
                dev_err(dev, "%s - usb_submit_urb failed with result %d\n", 
__func__, retval);
 }
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to