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 <[email protected]>
Cc: stable <[email protected]>
---
Attached is the patch is for the stable series only.
Bugzilla reference: http://bugzilla.kernel.org/show_bug.cgi?id=12260
(wireless-testing needs a different one)

Rafael, I hope we can close this bug. Greg?
---
diff --git a/drivers/net/wireless/p54/p54usb.c 
b/drivers/net/wireless/p54/p54usb.c
index 75d749b..be40369 100644
--- a/drivers/net/wireless/p54/p54usb.c
+++ b/drivers/net/wireless/p54/p54usb.c
@@ -214,6 +214,8 @@ static void p54u_tx_3887(struct ieee80211_hw *dev, struct 
p54_control_hdr *data,
        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);
@@ -251,6 +253,7 @@ static void p54u_tx_lm87(struct ieee80211_hw *dev,
                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);
 }
@@ -293,11 +296,13 @@ static void p54u_tx_net2280(struct ieee80211_hw *dev, 
struct p54_control_hdr *da
        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);
 }
 
--
To unsubscribe from this list: send the line "unsubscribe kernel-testers" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to