[patch 27/46] p54usb: fix traffic stalls / packet drop

Greg KH
2009-01-23T01:23:59Z

[-- Attachment #1: p54usb-fix-traffic-stalls-packet-drop.patch --]
[-- Type: text/plain, Size: 1853 bytes --]

2.6.28-stable review patch. If anyone has any objections, please let us know.

------------------

From: Christian Lamparter <chunkeey@web.de>

commit 00627f229c9807e4cb825a7ce36b886e2adf2229 upstream.

All p54usb devices need a explicit termination packet, in oder to finish the pending transfer properly.
Else, the firmware could freeze, or simply drop the frame.

Signed-off-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
drivers/net/wireless/p54/p54usb.c | 5 +++++
1 file changed, 5 insertions(+)

--- a/drivers/net/wireless/p54/p54usb.c
+++ b/drivers/net/wireless/p54/p54usb.c
@@ -215,6 +215,8 @@ static void p54u_tx_3887(struct ieee8021
usb_fill_bulk_urb(data_urb, priv->udev,
usb_sndbulkpipe(priv->udev, P54U_PIPE_DATA), data, len,
free_on_tx ? p54u_tx_free_cb : p54u_tx_cb, dev);
+ addr_urb->transfer_flags |= URB_ZERO_PACKET;
+ data_urb->transfer_flags |= URB_ZERO_PACKET;

usb_submit_urb(addr_urb, GFP_ATOMIC);
usb_submit_urb(data_urb, GFP_ATOMIC);
@@ -252,6 +254,7 @@ static void p54u_tx_lm87(struct ieee8021
usb_sndbulkpipe(priv->udev, P54U_PIPE_DATA), hdr,
len + sizeof(*hdr), free_on_tx ? p54u_tx_free_cb : p54u_tx_cb,
dev);
+ data_urb->transfer_flags |= URB_ZERO_PACKET;

usb_submit_urb(data_urb, GFP_ATOMIC);
}
@@ -294,11 +297,13 @@ static void p54u_tx_net2280(struct ieee8
usb_fill_bulk_urb(int_urb, priv->udev,
usb_sndbulkpipe(priv->udev, P54U_PIPE_DEV), reg, sizeof(*reg),
p54u_tx_free_cb, dev);
+ int_urb->transfer_flags |= URB_ZERO_PACKET;
usb_submit_urb(int_urb, GFP_ATOMIC);

usb_fill_bulk_urb(data_urb, priv->udev,
usb_sndbulkpipe(priv->udev, P54U_PIPE_DATA), hdr, len + sizeof(*hdr),
free_on_tx ? p54u_tx_free_cb : p54u_tx_cb, dev);
+ data_urb->transfer_flags |= URB_ZERO_PACKET;
usb_submit_urb(data_urb, GFP_ATOMIC);
}