-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Sun, 29 Dec 2002 13:10, Anderson Lizardo wrote:
> > I have an idea why this occurs. I will do up a patch, and send to you
> > for
> > testing, if you are happy to apply such a patch.
>
> Patches are welcome.
Give this one a try. It isn't against 2.4.20, but I haven't changed things in
a long time. Please let me know what happens - success or failure, and logs.
d1ca3bb8fc7e5b6a3d365acdfb3b7e85 cdc-181002.patch
Brad
- --
http://linux.conf.au. 22-25Jan2003. Perth, Aust. I'm registered. Are you?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
iD8DBQE+DoARW6pHgIdAuOMRArEjAKC2cJIBunJnBIU98xTN/6j848ckiwCfcEC3
ovhHQIoeUhEm9qqjcWmfVLQ=
=aeDc
-----END PGP SIGNATURE-----
diff -Naur -X dontdiff linux-2.4.20-pre11-clean/drivers/usb/CDCEther.c linux-2.4.20-pre11/drivers/usb/CDCEther.c
--- linux-2.4.20-pre11-clean/drivers/usb/CDCEther.c 2002-10-18 09:57:03.000000000 +1000
+++ linux-2.4.20-pre11/drivers/usb/CDCEther.c 2002-10-18 09:23:48.000000000 +1000
@@ -306,22 +306,8 @@
static int CDCEther_start_xmit( struct sk_buff *skb, struct net_device *net )
{
ether_dev_t *ether_dev = net->priv;
- int count;
int res;
- // If we are told to transmit an ethernet frame that fits EXACTLY
- // into an integer number of USB packets, we force it to send one
- // more byte so the device will get a runt USB packet signalling the
- // end of the ethernet frame
- if ( (skb->len) ^ (ether_dev->data_ep_out_size) ) {
- // It was not an exact multiple
- // no need to add anything extra
- count = skb->len;
- } else {
- // Add one to make it NOT an exact multiple
- count = skb->len + 1;
- }
-
// Tell the kernel, "No more frames 'til we are done
// with this one.'
netif_stop_queue( net );
@@ -336,7 +322,10 @@
write_bulk_callback, ether_dev );
// Tell the URB how much it will be transporting today
- ether_dev->tx_urb.transfer_buffer_length = count;
+ ether_dev->tx_urb.transfer_buffer_length = skb->len;
+
+ /* Deal with the Zero Length packet problem, I hope */
+ ether_dev->tx_urb.transfer_flags |= USB_ZERO_PACKET;
// Send the URB on its merry way.
if ((res = usb_submit_urb(ðer_dev->tx_urb))) {