Skip to contentSkip to conversation

rndis_host: Poll status channel before control channel

PATCH In review Ben Hutchings 2 participants 5 messages Apr 19, 2010 – May 16, 2010

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 rndis_host: Poll status channel before control channel

Some RNDIS devices don't respond on the control channel until polled on the status channel. In particular, this was reported to be the case for the 2Wire HomePortal 1000SW.

This is roughly based on a patch by John Carr <[email protected]> which is reported to be needed for use with some Windows Mobile devices and which is currently applied by Mandriva.

---
Note that this change hasn't yet been tested with any other RNDIS devices. John, can you confirm whether this also handles the WinMob devices?

Ben.

 drivers/net/usb/rndis_host.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)
drivers/net/usb/rndis_host.c +12 -6
index f56dec6..52faca1 100644
@@ -103,8 +103,10 @@ static void rndis_msg_indicate(struct usbnet *dev, struct rndis_indicate *msg,
 int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen)
 {
 	struct cdc_state	*info = (void *) &dev->data;
+	struct usb_cdc_notification notification;
 	int			master_ifnum;
 	int			retval;
+	int			partial;
 	unsigned		count;
 	__le32			rsp;
 	u32			xid = 0, msg_len, request_id;
@@ -132,13 +134,17 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen)
 	if (unlikely(retval < 0 || xid == 0))
 		return retval;
 
-	// FIXME Seems like some devices discard responses when
-	// we time out and cancel our "get response" requests...
-	// so, this is fragile.  Probably need to poll for status.
+	/* Some devices don't respond on the control channel until
+	 * polled on the status channel, so do that first. */
+	retval = usb_interrupt_msg(
+		dev->udev,
+		usb_rcvintpipe(dev->udev, dev->status->desc.bEndpointAddress),
+		&notification, sizeof(notification), &partial,
+		RNDIS_CONTROL_TIMEOUT_MS);
+	if (unlikely(retval < 0))
+		return retval;
 
-	/* ignore status endpoint, just poll the control channel;
-	 * the request probably completed immediately
-	 */
+	/* Poll the control channel; the request probably completed immediately */
 	rsp = buf->msg_type | RNDIS_MSG_COMPLETION;
 	for (count = 0; count < 10; count++) {
 		memset(buf, 0, CONTROL_BUFFER_SIZE);
Signature · 1 line
1.7.0.3
maintainer
#1 lore raw

From: Ben Hutchings <[email protected]>
Date: Tue, 20 Apr 2010 00:08:28 +0100

Quoted 8 lines

Some RNDIS devices don't respond on the control channel until polled on the status channel. In particular, this was reported to be the case for the 2Wire HomePortal 1000SW.

This is roughly based on a patch by John Carr <[email protected]> which is reported to be needed for use with some Windows Mobile devices and which is currently applied by Mandriva.

Quoted 7 lines

---
Note that this change hasn't yet been tested with any other RNDIS devices. John, can you confirm whether this also handles the WinMob devices?

I haven't seen any other testing for this patch and I'm real hesitant to apply something like this in that case.

maintainer
#2 lore raw
In reply to Ben Hutchings

From: Ben Hutchings <[email protected]>
Date: Tue, 20 Apr 2010 00:08:28 +0100

Quoted 8 lines

Some RNDIS devices don't respond on the control channel until polled on the status channel. In particular, this was reported to be the case for the 2Wire HomePortal 1000SW.

This is roughly based on a patch by John Carr <[email protected]> which is reported to be needed for use with some Windows Mobile devices and which is currently applied by Mandriva.

Quoted 7 lines

---
Note that this change hasn't yet been tested with any other RNDIS devices. John, can you confirm whether this also handles the WinMob devices?

Still waiting for this to get tested. Is there really nobody in the world with RNDIS devices who can test this patch? If so, maybe that's a good reason to not apply it :-))))

#3 lore raw
Quoted 19 lines · David Miller

From: Ben Hutchings <[email protected]>
Date: Tue, 20 Apr 2010 00:08:28 +0100

Quoted 8 lines

Some RNDIS devices don't respond on the control channel until polled on the status channel. In particular, this was reported to be the case for the 2Wire HomePortal 1000SW.

This is roughly based on a patch by John Carr <[email protected]> which is reported to be needed for use with some Windows Mobile devices and which is currently applied by Mandriva.

Quoted 7 lines

---
Note that this change hasn't yet been tested with any other RNDIS devices. John, can you confirm whether this also handles the WinMob devices?

Quoted 3 lines

Still waiting for this to get tested. Is there really nobody in the world with RNDIS devices who can test this patch? If so, maybe that's a good reason to not apply it :-))))

This has been in Debian unstable since 1 May and I haven't seen any fall-out yet. However I acknowledge that absence of evidence is not evidence of absence.

Ben.

Signature · 2 lines
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.
maintainer
#4 lore raw

From: Ben Hutchings <[email protected]>
Date: Sat, 15 May 2010 14:37:15 +0100

Quoted 20 lines · David Miller
Quoted 19 lines

From: Ben Hutchings <[email protected]>
Date: Tue, 20 Apr 2010 00:08:28 +0100

Quoted 15 lines

Some RNDIS devices don't respond on the control channel until polled on the status channel. In particular, this was reported to be the case for the 2Wire HomePortal 1000SW.

This is roughly based on a patch by John Carr <[email protected]> which is reported to be needed for use with some Windows Mobile devices and which is currently applied by Mandriva.

---
Note that this change hasn't yet been tested with any other RNDIS devices. John, can you confirm whether this also handles the WinMob devices?

Quoted 7 lines
Quoted 3 lines

Still waiting for this to get tested. Is there really nobody in the world with RNDIS devices who can test this patch? If so, maybe that's a good reason to not apply it :-))))

This has been in Debian unstable since 1 May and I haven't seen any fall-out yet. However I acknowledge that absence of evidence is not evidence of absence.

I think I'll toss it into net-next-2.6 and we'll see if any monsters come out of that.

Thanks.