リファクタリングの練習 (続)

ある意味朝練。一時間くらいハマッていました、端末不具合マターにて。
昨晩のハードルが異様に高かった、というか体調てきにへろへろだったのでしょうね。残りは楽だと思います。

qt_open() 手続きなんですが括りだしても以下な有様。

static void qt_submit_urb_from_open(struct usb_serial *serial,
				    struct usb_serial_port *port)
{
	int result;

	/* set up interrupt urb */
	usb_fill_int_urb(serial->port[0]->interrupt_in_urb,
			 serial->dev,
			 usb_rcvintpipe(serial->dev,
					serial->port[0]->interrupt_in_endpointAddress),
			 serial->port[0]->interrupt_in_buffer,
			 serial->port[0]->interrupt_in_urb->transfer_buffer_length,
			 qt_interrupt_callback, serial,
			 serial->port[0]->interrupt_in_urb->interval);

	result = usb_submit_urb(serial->port[0]->interrupt_in_urb,
				GFP_KERNEL);
	if (result) {
		dev_err(&port->dev,
			"%s - Error %d submitting interrupt urb\n",
			__func__, result);
	}
}

serial->port[0] て何だよ。てことで以下なカンジで commit 作成。

 
 }
 
+static void qt_submit_urb_from_open(struct usb_serial *serial,
+                                   struct usb_serial_port *port)
+{
+       int result;
+       struct usb_serial_port *port0 = serial->port[0];
+
+       /* set up interrupt urb */
+       usb_fill_int_urb(port0->interrupt_in_urb,
+                        serial->dev,
+                        usb_rcvintpipe(serial->dev,
+                                       port0->interrupt_in_endpointAddress),
+                        port0->interrupt_in_buffer,
+                        port0->interrupt_in_urb->transfer_buffer_length,
+                        qt_interrupt_callback, serial,
+                        port0->interrupt_in_urb->interval);
+
+       result = usb_submit_urb(port0->interrupt_in_urb,
+                               GFP_KERNEL);
+       if (result) {
+               dev_err(&port->dev,
+                       "%s - Error %d submitting interrupt urb\n",
+                       __func__, result);
+       }
+}
+
 static int qt_open(struct tty_struct *tty,
                   struct usb_serial_port *port)
 {
@@ -900,30 +925,8 @@ static int qt_open(struct tty_struct *tty,
 
        /*  Check to see if we've set up our endpoint info yet */
        if (port0->open_ports == 1) {
-               if (serial->port[0]->interrupt_in_buffer == NULL) {
-                       /* set up interrupt urb */
-                       usb_fill_int_urb(serial->port[0]->interrupt_in_urb,
-                                        serial->dev,
-                                        usb_rcvintpipe(serial->dev,
-                                                       serial->port[0]->interrupt_in_endpointAddress),
-                                        serial->port[0]->interrupt_in_buffer,
-                                        serial->port[0]->
-                                        interrupt_in_urb->transfer_buffer_length,
-                                        qt_interrupt_callback, serial,
-                                        serial->port[0]->
-                                        interrupt_in_urb->interval);
-
-                       result =
-                           usb_submit_urb(serial->port[0]->interrupt_in_urb,
-                                          GFP_KERNEL);
-                       if (result) {
-                               dev_err(&port->dev,
-                                       "%s - Error %d submitting "
-                                       "interrupt urb\n", __func__, result);
-                       }
-
-               }
-
+               if (serial->port[0]->interrupt_in_buffer == NULL)
+                       qt_submit_urb_from_open(serial, port);
        }
 
        dev_dbg(&port->dev, "port number is %d\n", port->number);

正に括りだしただけですね。レビュも楽でしょうということで。

もひとつ

これも上と同様ですね。diff のみ以下に。

        mutex_unlock(&qt_port->lock);
 }
 
+static void qt_submit_urb_from_unthrottle(struct usb_serial_port *port,
+                                         struct usb_serial *serial)
+{
+       int result;
+
+       /* Start reading from the device */
+       usb_fill_bulk_urb(port->read_urb, serial->dev,
+                         usb_rcvbulkpipe(serial->dev,
+                                         port->bulk_in_endpointAddress),
+                         port->read_urb->transfer_buffer,
+                         port->read_urb->transfer_buffer_length,
+                         qt_read_bulk_callback, port);
+
+       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
+
+       if (result)
+               dev_err(&port->dev,
+                       "%s - failed restarting read urb, error %d\n",
+                       __func__, result);
+}
+
 static void qt_unthrottle(struct tty_struct *tty)
 {
        struct usb_serial_port *port = tty->driver_data;
        struct usb_serial *serial = get_usb_serial(port, __func__);
        struct quatech_port *qt_port;
-       unsigned int result;
 
        if (!serial)
                return;
@@ -1494,21 +1514,8 @@ static void qt_unthrottle(struct tty_struct *tty)
                dev_dbg(&port->dev, "%s - qt_port->RxHolding = 0\n", __func__);
 
                /* if we have a bulk endpoint, start it up */
-               if ((serial->num_bulk_in) && (qt_port->ReadBulkStopped == 1)) {
-                       /* Start reading from the device */
-                       usb_fill_bulk_urb(port->read_urb, serial->dev,
-                                         usb_rcvbulkpipe(serial->dev,
-                                                         port->bulk_in_endpointAddress),
-                                         port->read_urb->transfer_buffer,
-                                         port->read_urb->
-                                         transfer_buffer_length,
-                                         qt_read_bulk_callback, port);
-                       result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
-                       if (result)
-                               dev_err(&port->dev,
-                                       "%s - failed restarting read urb, error %d\n",
-                                       __func__, result);
-               }
+               if ((serial->num_bulk_in) && (qt_port->ReadBulkStopped == 1))
+                       qt_submit_urb_from_unthrottle(port, serial);
        }
        mutex_unlock(&qt_port->lock);
 }

そしてこれから commit 作って云々。