Commit 31674975 authored by Tim Collier's avatar Tim Collier Committed by Greg Kroah-Hartman

staging: wlan-ng: fix adapter initialization failure

commit a67fedd7 upstream.

Commit e895f00a ("Staging: wlan-ng: hfa384x_usb.c Fixed too long
code line warnings.") moved the retrieval of the transfer buffer from
the URB from the top of function hfa384x_usbin_callback to a point
after reposting of the URB via a call to submit_rx_urb. The reposting
of the URB allocates a new transfer buffer so the new buffer is
retrieved instead of the buffer containing the response passed into
the callback. This results in failure to initialize the adapter with
an error reported in the system log (something like "CTLX[1] error:
state(Request failed)").

This change moves the retrieval to just before the point where the URB
is reposted so that the correct transfer buffer is retrieved and
initialization of the device succeeds.
Signed-off-by: default avatarTim Collier <osdevtc@gmail.com>
Fixes: e895f00a ("Staging: wlan-ng: hfa384x_usb.c Fixed too long code line warnings.")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 886c20bc
...@@ -3119,7 +3119,9 @@ static void hfa384x_usbin_callback(struct urb *urb) ...@@ -3119,7 +3119,9 @@ static void hfa384x_usbin_callback(struct urb *urb)
break; break;
} }
/* Save values from the RX URB before reposting overwrites it. */
urb_status = urb->status; urb_status = urb->status;
usbin = (union hfa384x_usbin *)urb->transfer_buffer;
if (action != ABORT) { if (action != ABORT) {
/* Repost the RX URB */ /* Repost the RX URB */
...@@ -3136,7 +3138,6 @@ static void hfa384x_usbin_callback(struct urb *urb) ...@@ -3136,7 +3138,6 @@ static void hfa384x_usbin_callback(struct urb *urb)
/* Note: the check of the sw_support field, the type field doesn't /* Note: the check of the sw_support field, the type field doesn't
* have bit 12 set like the docs suggest. * have bit 12 set like the docs suggest.
*/ */
usbin = (union hfa384x_usbin *)urb->transfer_buffer;
type = le16_to_cpu(usbin->type); type = le16_to_cpu(usbin->type);
if (HFA384x_USB_ISRXFRM(type)) { if (HFA384x_USB_ISRXFRM(type)) {
if (action == HANDLE) { if (action == HANDLE) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment