| From a67fedd788182764dc8ed59037c604b7e60349f1 Mon Sep 17 00:00:00 2001 |
| From: Tim Collier <osdevtc@gmail.com> |
| Date: Sat, 11 May 2019 18:40:46 +0100 |
| Subject: staging: wlan-ng: fix adapter initialization failure |
| |
| From: Tim Collier <osdevtc@gmail.com> |
| |
| commit a67fedd788182764dc8ed59037c604b7e60349f1 upstream. |
| |
| Commit e895f00a8496 ("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: Tim Collier <osdevtc@gmail.com> |
| Fixes: e895f00a8496 ("Staging: wlan-ng: hfa384x_usb.c Fixed too long code line warnings.") |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/staging/wlan-ng/hfa384x_usb.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/staging/wlan-ng/hfa384x_usb.c |
| +++ b/drivers/staging/wlan-ng/hfa384x_usb.c |
| @@ -3119,7 +3119,9 @@ static void hfa384x_usbin_callback(struc |
| break; |
| } |
| |
| + /* Save values from the RX URB before reposting overwrites it. */ |
| urb_status = urb->status; |
| + usbin = (union hfa384x_usbin *)urb->transfer_buffer; |
| |
| if (action != ABORT) { |
| /* Repost the RX URB */ |
| @@ -3136,7 +3138,6 @@ static void hfa384x_usbin_callback(struc |
| /* Note: the check of the sw_support field, the type field doesn't |
| * have bit 12 set like the docs suggest. |
| */ |
| - usbin = (union hfa384x_usbin *)urb->transfer_buffer; |
| type = le16_to_cpu(usbin->type); |
| if (HFA384x_USB_ISRXFRM(type)) { |
| if (action == HANDLE) { |