浏览代码

USB: aircable cleanup

- proper endianness macros
- scheduling in interrupt in error case

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Naranjo Manuel Francisco <naranjo.manuel@gmail.com>
Oliver Neukum 18 年之前
父节点
当前提交
b19d402a34
共有 1 个文件被更改,包括 4 次插入3 次删除
  1. 4 3
      drivers/usb/serial/aircable.c

+ 4 - 3
drivers/usb/serial/aircable.c

@@ -209,6 +209,7 @@ static void aircable_send(struct usb_serial_port *port)
 	int count, result;
 	int count, result;
 	struct aircable_private *priv = usb_get_serial_port_data(port);
 	struct aircable_private *priv = usb_get_serial_port_data(port);
 	unsigned char* buf;
 	unsigned char* buf;
+	u16 *dbuf;
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	if (port->write_urb_busy)
 	if (port->write_urb_busy)
 		return;
 		return;
@@ -226,8 +227,8 @@ static void aircable_send(struct usb_serial_port *port)
 
 
 	buf[0] = TX_HEADER_0;
 	buf[0] = TX_HEADER_0;
 	buf[1] = TX_HEADER_1;
 	buf[1] = TX_HEADER_1;
-	buf[2] = (unsigned char)count;
-	buf[3] = (unsigned char)(count >> 8);
+	dbuf = (u16 *)&buf[2];
+	*dbuf = cpu_to_le16((u16)count);
 	serial_buf_get(priv->tx_buf,buf + HCI_HEADER_LENGTH, MAX_HCI_FRAMESIZE);
 	serial_buf_get(priv->tx_buf,buf + HCI_HEADER_LENGTH, MAX_HCI_FRAMESIZE);
 
 
 	memcpy(port->write_urb->transfer_buffer, buf,
 	memcpy(port->write_urb->transfer_buffer, buf,
@@ -434,7 +435,7 @@ static void aircable_write_bulk_callback(struct urb *urb)
 			    __FUNCTION__, urb->status);
 			    __FUNCTION__, urb->status);
 			port->write_urb->transfer_buffer_length = 1;
 			port->write_urb->transfer_buffer_length = 1;
 			port->write_urb->dev = port->serial->dev;
 			port->write_urb->dev = port->serial->dev;
-			result = usb_submit_urb(port->write_urb, GFP_KERNEL);
+			result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
 			if (result)
 			if (result)
 				dev_err(&urb->dev->dev,
 				dev_err(&urb->dev->dev,
 					"%s - failed resubmitting write urb, error %d\n",
 					"%s - failed resubmitting write urb, error %d\n",