* [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