public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RESEND] [PATCH 1/2] ipaq.c bugfixes
@ 2006-06-19  8:44 Frank Gevaerts
  2006-06-19  8:46 ` [RESEND] [PATCH 2/2] ipaq.c timing parameters Frank Gevaerts
  2006-06-19 16:35 ` [RESEND] [PATCH 1/2] ipaq.c bugfixes Luiz Fernando N. Capitulino
  0 siblings, 2 replies; 8+ messages in thread
From: Frank Gevaerts @ 2006-06-19  8:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg KH, Andrew Morton, Luiz Fernando N. Capitulino

This patch fixes several problems in the ipaq.c driver with connecting
and disconnecting pocketpc devices:
* The read urb stayed active if the connect failed, causing nullpointer
  dereferences later on.
* If a write failed, the driver continued as if nothing happened. Now it
  handles that case the same way as other usb serial devices (fix by
  Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>)

Signed-off-by: Frank Gevaerts <frank.gevaerts@fks.be>

diff -urp linux-2.6.17-rc6/drivers/usb/serial/ipaq.c linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c
--- linux-2.6.17-rc6/drivers/usb/serial/ipaq.c	2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c	2006-06-14 16:02:03.000000000 +0200
@@ -652,11 +652,6 @@ static int ipaq_open(struct usb_serial_p
 		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
 		      port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
 		      ipaq_read_bulk_callback, port);
-	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
-	if (result) {
-		err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
-		goto error;
-	}
 
 	/*
 	 * Send out control message observed in win98 sniffs. Not sure what
@@ -671,6 +666,11 @@ static int ipaq_open(struct usb_serial_p
 				usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
 				0x1, 0, NULL, 0, 100);
 		if (result == 0) {
+			result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+			if (result) {
+				err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
+				goto error;
+			}
 			return 0;
 		}
 	}
@@ -855,6 +855,7 @@ static void ipaq_write_bulk_callback(str
 	
 	if (urb->status) {
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
+		return;
 	}
 
 	spin_lock_irqsave(&write_list_lock, flags);

-- 
Frank Gevaerts                                 frank.gevaerts@fks.be
fks bvba - Formal and Knowledge Systems        http://www.fks.be/
Stationsstraat 108                             Tel:  ++32-(0)11-21 49 11
B-3570 ALKEN                                   Fax:  ++32-(0)11-22 04 19

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [RESEND] [PATCH 2/2] ipaq.c timing parameters
  2006-06-19  8:44 [RESEND] [PATCH 1/2] ipaq.c bugfixes Frank Gevaerts
@ 2006-06-19  8:46 ` Frank Gevaerts
  2006-06-19 16:42   ` Luiz Fernando N. Capitulino
  2006-06-20  6:54   ` Andrew Morton
  2006-06-19 16:35 ` [RESEND] [PATCH 1/2] ipaq.c bugfixes Luiz Fernando N. Capitulino
  1 sibling, 2 replies; 8+ messages in thread
From: Frank Gevaerts @ 2006-06-19  8:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg KH, Andrew Morton, Luiz Fernando N. Capitulino

Adds configurable waiting periods to the ipaq connection code. These are
not needed when the pocketpc device is running normally when plugged in,
but they need extra delays if they are physically connected while
rebooting.
There are two parameters :
* initial_wait : this is the delay before the driver attemts to start the
  connection. This is needed because the pocktpc device takes much
  longer to boot if the driver starts sending control packets too soon.
* connect_retries : this is the number of times the control urb is
  retried before finally giving up. The patch also adds a 1 second delay
  between retries.
I'm not sure if the cases where this patch is useful are general enough
to include this in the kernel.

Signed-off-by: Frank Gevaerts <frank.gevaerts@fks.be>

diff -urp linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c linux-2.6.17-rc6.b/drivers/usb/serial/ipaq.c
--- linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c	2006-06-14 16:02:03.000000000 +0200
+++ linux-2.6.17-rc6.b/drivers/usb/serial/ipaq.c	2006-06-14 16:06:44.000000000 +0200
@@ -71,6 +71,8 @@
 
 static __u16 product, vendor;
 static int debug;
+static int connect_retries = KP_RETRIES;
+static int initial_wait;
 
 /* Function prototypes for an ipaq */
 static int  ipaq_open (struct usb_serial_port *port, struct file *filp);
@@ -583,7 +585,7 @@ static int ipaq_open(struct usb_serial_p
 	struct ipaq_private	*priv;
 	struct ipaq_packet	*pkt;
 	int			i, result = 0;
-	int			retries = KP_RETRIES;
+	int			retries = connect_retries;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -647,6 +649,7 @@ static int ipaq_open(struct usb_serial_p
 	port->read_urb->transfer_buffer_length = URBDATA_SIZE;
 	port->bulk_out_size = port->write_urb->transfer_buffer_length = URBDATA_SIZE;
 	
+	msleep(1000*initial_wait);
 	/* Start reading from the device */
 	usb_fill_bulk_urb(port->read_urb, serial->dev, 
 		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
@@ -673,6 +676,7 @@ static int ipaq_open(struct usb_serial_p
 			}
 			return 0;
 		}
+		msleep(1000);
 	}
 	err("%s - failed doing control urb, error %d", __FUNCTION__, result);
 	goto error;
@@ -968,3 +972,9 @@ MODULE_PARM_DESC(vendor, "User specified
 
 module_param(product, ushort, 0);
 MODULE_PARM_DESC(product, "User specified USB idProduct");
+
+module_param(connect_retries, int, S_IRUGO|S_IWUSR);
+MODULE_PARM_DESC(connect_retries, "Maximum number of connect retries (100ms each)");
+
+module_param(initial_wait, int, S_IRUGO|S_IWUSR);
+MODULE_PARM_DESC(initial_wait, "Time to wait before attempting a connection (in seconds)");

-- 
Frank Gevaerts                                 frank.gevaerts@fks.be
fks bvba - Formal and Knowledge Systems        http://www.fks.be/
Stationsstraat 108                             Tel:  ++32-(0)11-21 49 11
B-3570 ALKEN                                   Fax:  ++32-(0)11-22 04 19

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RESEND] [PATCH 1/2] ipaq.c bugfixes
  2006-06-19  8:44 [RESEND] [PATCH 1/2] ipaq.c bugfixes Frank Gevaerts
  2006-06-19  8:46 ` [RESEND] [PATCH 2/2] ipaq.c timing parameters Frank Gevaerts
@ 2006-06-19 16:35 ` Luiz Fernando N. Capitulino
  2006-06-19 17:25   ` Frank Gevaerts
  1 sibling, 1 reply; 8+ messages in thread
From: Luiz Fernando N. Capitulino @ 2006-06-19 16:35 UTC (permalink / raw)
  To: Frank Gevaerts; +Cc: linux-kernel, Greg KH, Andrew Morton

On Mon, 19 Jun 2006 10:44:47 +0200
Frank Gevaerts <frank.gevaerts@fks.be> wrote:

| This patch fixes several problems in the ipaq.c driver with connecting
| and disconnecting pocketpc devices:
| * The read urb stayed active if the connect failed, causing nullpointer
|   dereferences later on.
| * If a write failed, the driver continued as if nothing happened. Now it
|   handles that case the same way as other usb serial devices (fix by
|   Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>)
| 
| Signed-off-by: Frank Gevaerts <frank.gevaerts@fks.be>
| 
| diff -urp linux-2.6.17-rc6/drivers/usb/serial/ipaq.c linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c
| --- linux-2.6.17-rc6/drivers/usb/serial/ipaq.c	2006-03-20 06:53:29.000000000 +0100
| +++ linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c	2006-06-14 16:02:03.000000000 +0200
| @@ -652,11 +652,6 @@ static int ipaq_open(struct usb_serial_p
|  		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
|  		      port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
|  		      ipaq_read_bulk_callback, port);
| -	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
| -	if (result) {
| -		err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
| -		goto error;
| -	}
|  
|  	/*
|  	 * Send out control message observed in win98 sniffs. Not sure what
| @@ -671,6 +666,11 @@ static int ipaq_open(struct usb_serial_p
|  				usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
|  				0x1, 0, NULL, 0, 100);
|  		if (result == 0) {
| +			result = usb_submit_urb(port->read_urb, GFP_KERNEL);
| +			if (result) {
| +				err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
| +				goto error;
| +			}
|  			return 0;
|  		}
|  	}

 What do you think about this (not compiled and may be wrong):

diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index 9a5c979..96a6550 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -646,17 +646,6 @@ static int ipaq_open(struct usb_serial_p
 	port->write_urb->transfer_buffer = port->bulk_out_buffer;
 	port->read_urb->transfer_buffer_length = URBDATA_SIZE;
 	port->bulk_out_size = port->write_urb->transfer_buffer_length = URBDATA_SIZE;
-	
-	/* 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,
-		      ipaq_read_bulk_callback, port);
-	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
-	if (result) {
-		err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
-		goto error;
-	}
 
 	/*
 	 * Send out control message observed in win98 sniffs. Not sure what
@@ -670,12 +659,27 @@ static int ipaq_open(struct usb_serial_p
 		result = usb_control_msg(serial->dev,
 				usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
 				0x1, 0, NULL, 0, 100);
-		if (result == 0) {
-			return 0;
-		}
+		if (!result)
+			break;
 	}
-	err("%s - failed doing control urb, error %d", __FUNCTION__, result);
-	goto error;
+	if (result) {
+		err("%s - failed doing control urb, error %d", __FUNCTION__,
+		    result);
+		goto error;
+	}
+
+	/* 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,
+		      ipaq_read_bulk_callback, port);
+	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+	if (result) {
+		err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
+		goto error;
+	}
+
+	return 0;
 
 enomem:
 	result = -ENOMEM;

 This makes the code more readable than your version, IMHO.

 Greg, what do you think about this patch? I think it makes sense
because besides Frank's tests there's a comment stating that the
device only starts the chat sequence after one of these control
messages gets through.

-- 
Luiz Fernando N. Capitulino

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [RESEND] [PATCH 2/2] ipaq.c timing parameters
  2006-06-19  8:46 ` [RESEND] [PATCH 2/2] ipaq.c timing parameters Frank Gevaerts
@ 2006-06-19 16:42   ` Luiz Fernando N. Capitulino
  2006-06-19 17:34     ` Frank Gevaerts
  2006-06-20  6:54   ` Andrew Morton
  1 sibling, 1 reply; 8+ messages in thread
From: Luiz Fernando N. Capitulino @ 2006-06-19 16:42 UTC (permalink / raw)
  To: Frank Gevaerts; +Cc: linux-kernel, Greg KH, Andrew Morton

On Mon, 19 Jun 2006 10:46:19 +0200
Frank Gevaerts <frank.gevaerts@fks.be> wrote:

| Adds configurable waiting periods to the ipaq connection code. These are
| not needed when the pocketpc device is running normally when plugged in,
| but they need extra delays if they are physically connected while
| rebooting.
| There are two parameters :
| * initial_wait : this is the delay before the driver attemts to start the
|   connection. This is needed because the pocktpc device takes much
|   longer to boot if the driver starts sending control packets too soon.
| * connect_retries : this is the number of times the control urb is
|   retried before finally giving up. The patch also adds a 1 second delay
|   between retries.
| I'm not sure if the cases where this patch is useful are general enough
| to include this in the kernel.
| 
| Signed-off-by: Frank Gevaerts <frank.gevaerts@fks.be>
| 
| diff -urp linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c linux-2.6.17-rc6.b/drivers/usb/serial/ipaq.c
| --- linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c	2006-06-14 16:02:03.000000000 +0200
| +++ linux-2.6.17-rc6.b/drivers/usb/serial/ipaq.c	2006-06-14 16:06:44.000000000 +0200
| @@ -71,6 +71,8 @@
|  
|  static __u16 product, vendor;
|  static int debug;
| +static int connect_retries = KP_RETRIES;
| +static int initial_wait;
|  
|  /* Function prototypes for an ipaq */
|  static int  ipaq_open (struct usb_serial_port *port, struct file *filp);
| @@ -583,7 +585,7 @@ static int ipaq_open(struct usb_serial_p
|  	struct ipaq_private	*priv;
|  	struct ipaq_packet	*pkt;
|  	int			i, result = 0;
| -	int			retries = KP_RETRIES;
| +	int			retries = connect_retries;
|  
|  	dbg("%s - port %d", __FUNCTION__, port->number);
|  
| @@ -647,6 +649,7 @@ static int ipaq_open(struct usb_serial_p
|  	port->read_urb->transfer_buffer_length = URBDATA_SIZE;
|  	port->bulk_out_size = port->write_urb->transfer_buffer_length = URBDATA_SIZE;
|  	
| +	msleep(1000*initial_wait);

 I was going to say you should use ssleep() here, but I can't find a
ssleep_interruptible(). Then either: use msleep_interruptible() or
creates a new ssleep_interruptible().

|  	/* Start reading from the device */
|  	usb_fill_bulk_urb(port->read_urb, serial->dev, 
|  		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
| @@ -673,6 +676,7 @@ static int ipaq_open(struct usb_serial_p
|  			}
|  			return 0;
|  		}
| +		msleep(1000);
|  	}

 Don't you want msleep(100); here?

-- 
Luiz Fernando N. Capitulino

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RESEND] [PATCH 1/2] ipaq.c bugfixes
  2006-06-19 16:35 ` [RESEND] [PATCH 1/2] ipaq.c bugfixes Luiz Fernando N. Capitulino
@ 2006-06-19 17:25   ` Frank Gevaerts
  0 siblings, 0 replies; 8+ messages in thread
From: Frank Gevaerts @ 2006-06-19 17:25 UTC (permalink / raw)
  To: Luiz Fernando N. Capitulino
  Cc: Frank Gevaerts, linux-kernel, Greg KH, Andrew Morton

On Mon, Jun 19, 2006 at 01:35:31PM -0300, Luiz Fernando N. Capitulino wrote:
> On Mon, 19 Jun 2006 10:44:47 +0200
> Frank Gevaerts <frank.gevaerts@fks.be> wrote:
> 
> | This patch fixes several problems in the ipaq.c driver with connecting
> | and disconnecting pocketpc devices:
> | * The read urb stayed active if the connect failed, causing nullpointer
> |   dereferences later on.
> | * If a write failed, the driver continued as if nothing happened. Now it
> |   handles that case the same way as other usb serial devices (fix by
> |   Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>)
> | 
> | Signed-off-by: Frank Gevaerts <frank.gevaerts@fks.be>
> | 
> | diff -urp linux-2.6.17-rc6/drivers/usb/serial/ipaq.c linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c
> | --- linux-2.6.17-rc6/drivers/usb/serial/ipaq.c	2006-03-20 06:53:29.000000000 +0100
> | +++ linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c	2006-06-14 16:02:03.000000000 +0200
> | @@ -652,11 +652,6 @@ static int ipaq_open(struct usb_serial_p
> |  		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
> |  		      port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
> |  		      ipaq_read_bulk_callback, port);
> | -	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
> | -	if (result) {
> | -		err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
> | -		goto error;
> | -	}
> |  
> |  	/*
> |  	 * Send out control message observed in win98 sniffs. Not sure what
> | @@ -671,6 +666,11 @@ static int ipaq_open(struct usb_serial_p
> |  				usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
> |  				0x1, 0, NULL, 0, 100);
> |  		if (result == 0) {
> | +			result = usb_submit_urb(port->read_urb, GFP_KERNEL);
> | +			if (result) {
> | +				err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
> | +				goto error;
> | +			}
> |  			return 0;
> |  		}
> |  	}
> 
>  What do you think about this (not compiled and may be wrong):
> 
> diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
> index 9a5c979..96a6550 100644
> --- a/drivers/usb/serial/ipaq.c
> +++ b/drivers/usb/serial/ipaq.c
> @@ -646,17 +646,6 @@ static int ipaq_open(struct usb_serial_p
>  	port->write_urb->transfer_buffer = port->bulk_out_buffer;
>  	port->read_urb->transfer_buffer_length = URBDATA_SIZE;
>  	port->bulk_out_size = port->write_urb->transfer_buffer_length = URBDATA_SIZE;
> -	
> -	/* 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,
> -		      ipaq_read_bulk_callback, port);
> -	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
> -	if (result) {
> -		err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
> -		goto error;
> -	}
>  
>  	/*
>  	 * Send out control message observed in win98 sniffs. Not sure what
> @@ -670,12 +659,27 @@ static int ipaq_open(struct usb_serial_p
>  		result = usb_control_msg(serial->dev,
>  				usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
>  				0x1, 0, NULL, 0, 100);
> -		if (result == 0) {
> -			return 0;
> -		}
> +		if (!result)
> +			break;
>  	}
> -	err("%s - failed doing control urb, error %d", __FUNCTION__, result);
> -	goto error;
> +	if (result) {
> +		err("%s - failed doing control urb, error %d", __FUNCTION__,
> +		    result);
> +		goto error;
> +	}
> +
> +	/* 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,
> +		      ipaq_read_bulk_callback, port);
> +	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
> +	if (result) {
> +		err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
> +		goto error;
> +	}
> +
> +	return 0;
>  
>  enomem:
>  	result = -ENOMEM;
> 
>  This makes the code more readable than your version, IMHO.

It is more readable. It compiles, and it looks equivalent to me.
Unfortunately, I don't have easy access to the test setup anymore
(everything is now at the customer site), so I'm not sure if I can test
this anytime soon.

Frank

>  Greg, what do you think about this patch? I think it makes sense
> because besides Frank's tests there's a comment stating that the
> device only starts the chat sequence after one of these control
> messages gets through.
> 
> -- 
> Luiz Fernando N. Capitulino

-- 
Frank Gevaerts                                 frank.gevaerts@fks.be
fks bvba - Formal and Knowledge Systems        http://www.fks.be/
Stationsstraat 108                             Tel:  ++32-(0)11-21 49 11
B-3570 ALKEN                                   Fax:  ++32-(0)11-22 04 19

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RESEND] [PATCH 2/2] ipaq.c timing parameters
  2006-06-19 16:42   ` Luiz Fernando N. Capitulino
@ 2006-06-19 17:34     ` Frank Gevaerts
  2006-06-19 18:27       ` Luiz Fernando N. Capitulino
  0 siblings, 1 reply; 8+ messages in thread
From: Frank Gevaerts @ 2006-06-19 17:34 UTC (permalink / raw)
  To: Luiz Fernando N. Capitulino
  Cc: Frank Gevaerts, linux-kernel, Greg KH, Andrew Morton

On Mon, Jun 19, 2006 at 01:42:40PM -0300, Luiz Fernando N. Capitulino wrote:
> On Mon, 19 Jun 2006 10:46:19 +0200
> Frank Gevaerts <frank.gevaerts@fks.be> wrote:
> 
> | Adds configurable waiting periods to the ipaq connection code. These are
> | not needed when the pocketpc device is running normally when plugged in,
> | but they need extra delays if they are physically connected while
> | rebooting.
> | There are two parameters :
> | * initial_wait : this is the delay before the driver attemts to start the
> |   connection. This is needed because the pocktpc device takes much
> |   longer to boot if the driver starts sending control packets too soon.
> | * connect_retries : this is the number of times the control urb is
> |   retried before finally giving up. The patch also adds a 1 second delay
> |   between retries.
> | I'm not sure if the cases where this patch is useful are general enough
> | to include this in the kernel.
> | 
> | Signed-off-by: Frank Gevaerts <frank.gevaerts@fks.be>
> | 
> | diff -urp linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c linux-2.6.17-rc6.b/drivers/usb/serial/ipaq.c
> | --- linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c	2006-06-14 16:02:03.000000000 +0200
> | +++ linux-2.6.17-rc6.b/drivers/usb/serial/ipaq.c	2006-06-14 16:06:44.000000000 +0200
> | @@ -71,6 +71,8 @@
> |  
> |  static __u16 product, vendor;
> |  static int debug;
> | +static int connect_retries = KP_RETRIES;
> | +static int initial_wait;
> |  
> |  /* Function prototypes for an ipaq */
> |  static int  ipaq_open (struct usb_serial_port *port, struct file *filp);
> | @@ -583,7 +585,7 @@ static int ipaq_open(struct usb_serial_p
> |  	struct ipaq_private	*priv;
> |  	struct ipaq_packet	*pkt;
> |  	int			i, result = 0;
> | -	int			retries = KP_RETRIES;
> | +	int			retries = connect_retries;
> |  
> |  	dbg("%s - port %d", __FUNCTION__, port->number);
> |  
> | @@ -647,6 +649,7 @@ static int ipaq_open(struct usb_serial_p
> |  	port->read_urb->transfer_buffer_length = URBDATA_SIZE;
> |  	port->bulk_out_size = port->write_urb->transfer_buffer_length = URBDATA_SIZE;
> |  	
> | +	msleep(1000*initial_wait);
> 
>  I was going to say you should use ssleep() here, but I can't find a
> ssleep_interruptible(). Then either: use msleep_interruptible() or
> creates a new ssleep_interruptible().

I wasn't sure if that was safe here, so I used the non-interruptible
version. I'll change it when I redo the patch.
Is it worth it creating ssleep_interruptible() just for this one call?

> |  	/* Start reading from the device */
> |  	usb_fill_bulk_urb(port->read_urb, serial->dev, 
> |  		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
> | @@ -673,6 +676,7 @@ static int ipaq_open(struct usb_serial_p
> |  			}
> |  			return 0;
> |  		}
> | +		msleep(1000);
> |  	}
> 
>  Don't you want msleep(100); here?

The currently running version has 1000. 100 is probably better.

I'll submit a new patch once it's clear which version of the first patch
goes in.

> 
> -- 
> Luiz Fernando N. Capitulino

-- 
Frank Gevaerts                                 frank.gevaerts@fks.be
fks bvba - Formal and Knowledge Systems        http://www.fks.be/
Stationsstraat 108                             Tel:  ++32-(0)11-21 49 11
B-3570 ALKEN                                   Fax:  ++32-(0)11-22 04 19

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RESEND] [PATCH 2/2] ipaq.c timing parameters
  2006-06-19 17:34     ` Frank Gevaerts
@ 2006-06-19 18:27       ` Luiz Fernando N. Capitulino
  0 siblings, 0 replies; 8+ messages in thread
From: Luiz Fernando N. Capitulino @ 2006-06-19 18:27 UTC (permalink / raw)
  To: Frank Gevaerts; +Cc: linux-kernel, Greg KH, Andrew Morton

On Mon, 19 Jun 2006 19:34:28 +0200
Frank Gevaerts <frank.gevaerts@fks.be> wrote:

| On Mon, Jun 19, 2006 at 01:42:40PM -0300, Luiz Fernando N. Capitulino wrote:
| > On Mon, 19 Jun 2006 10:46:19 +0200
| > Frank Gevaerts <frank.gevaerts@fks.be> wrote:
| > 
| > | Adds configurable waiting periods to the ipaq connection code. These are
| > | not needed when the pocketpc device is running normally when plugged in,
| > | but they need extra delays if they are physically connected while
| > | rebooting.
| > | There are two parameters :
| > | * initial_wait : this is the delay before the driver attemts to start the
| > |   connection. This is needed because the pocktpc device takes much
| > |   longer to boot if the driver starts sending control packets too soon.
| > | * connect_retries : this is the number of times the control urb is
| > |   retried before finally giving up. The patch also adds a 1 second delay
| > |   between retries.
| > | I'm not sure if the cases where this patch is useful are general enough
| > | to include this in the kernel.
| > | 
| > | Signed-off-by: Frank Gevaerts <frank.gevaerts@fks.be>
| > | 
| > | diff -urp linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c linux-2.6.17-rc6.b/drivers/usb/serial/ipaq.c
| > | --- linux-2.6.17-rc6.a/drivers/usb/serial/ipaq.c	2006-06-14 16:02:03.000000000 +0200
| > | +++ linux-2.6.17-rc6.b/drivers/usb/serial/ipaq.c	2006-06-14 16:06:44.000000000 +0200
| > | @@ -71,6 +71,8 @@
| > |  
| > |  static __u16 product, vendor;
| > |  static int debug;
| > | +static int connect_retries = KP_RETRIES;
| > | +static int initial_wait;
| > |  
| > |  /* Function prototypes for an ipaq */
| > |  static int  ipaq_open (struct usb_serial_port *port, struct file *filp);
| > | @@ -583,7 +585,7 @@ static int ipaq_open(struct usb_serial_p
| > |  	struct ipaq_private	*priv;
| > |  	struct ipaq_packet	*pkt;
| > |  	int			i, result = 0;
| > | -	int			retries = KP_RETRIES;
| > | +	int			retries = connect_retries;
| > |  
| > |  	dbg("%s - port %d", __FUNCTION__, port->number);
| > |  
| > | @@ -647,6 +649,7 @@ static int ipaq_open(struct usb_serial_p
| > |  	port->read_urb->transfer_buffer_length = URBDATA_SIZE;
| > |  	port->bulk_out_size = port->write_urb->transfer_buffer_length = URBDATA_SIZE;
| > |  	
| > | +	msleep(1000*initial_wait);
| > 
| >  I was going to say you should use ssleep() here, but I can't find a
| > ssleep_interruptible(). Then either: use msleep_interruptible() or
| > creates a new ssleep_interruptible().
| 
| I wasn't sure if that was safe here, so I used the non-interruptible
| version. I'll change it when I redo the patch.
| Is it worth it creating ssleep_interruptible() just for this one call?

 You could grep around to check it.

-- 
Luiz Fernando N. Capitulino

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RESEND] [PATCH 2/2] ipaq.c timing parameters
  2006-06-19  8:46 ` [RESEND] [PATCH 2/2] ipaq.c timing parameters Frank Gevaerts
  2006-06-19 16:42   ` Luiz Fernando N. Capitulino
@ 2006-06-20  6:54   ` Andrew Morton
  1 sibling, 0 replies; 8+ messages in thread
From: Andrew Morton @ 2006-06-20  6:54 UTC (permalink / raw)
  To: Frank Gevaerts; +Cc: linux-kernel, greg, lcapitulino

On Mon, 19 Jun 2006 10:46:19 +0200
Frank Gevaerts <frank.gevaerts@fks.be> wrote:

> Adds configurable waiting periods to the ipaq connection code. These are
> not needed when the pocketpc device is running normally when plugged in,
> but they need extra delays if they are physically connected while
> rebooting.
> There are two parameters :
> * initial_wait : this is the delay before the driver attemts to start the
>   connection. This is needed because the pocktpc device takes much
>   longer to boot if the driver starts sending control packets too soon.
> * connect_retries : this is the number of times the control urb is
>   retried before finally giving up. The patch also adds a 1 second delay
>   between retries.
> I'm not sure if the cases where this patch is useful are general enough
> to include this in the kernel.
> 
> ..
>
> +module_param(connect_retries, int, S_IRUGO|S_IWUSR);
> +MODULE_PARM_DESC(connect_retries, "Maximum number of connect retries (100ms each)");

1000ms, methinks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-06-20  6:54 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-19  8:44 [RESEND] [PATCH 1/2] ipaq.c bugfixes Frank Gevaerts
2006-06-19  8:46 ` [RESEND] [PATCH 2/2] ipaq.c timing parameters Frank Gevaerts
2006-06-19 16:42   ` Luiz Fernando N. Capitulino
2006-06-19 17:34     ` Frank Gevaerts
2006-06-19 18:27       ` Luiz Fernando N. Capitulino
2006-06-20  6:54   ` Andrew Morton
2006-06-19 16:35 ` [RESEND] [PATCH 1/2] ipaq.c bugfixes Luiz Fernando N. Capitulino
2006-06-19 17:25   ` Frank Gevaerts

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox