Skip to content

Commit a61ebdf

Browse files
committed
Merge tag 'master-2014-08-14' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
John W. Linville says: ==================== pull request: wireless 2014-08-14 Please pull this batch of fixes intended for the 3.17 stream... Arend van Spriel brings two brcmfmac fixes, one which fixes a memory leak and one which corrects some merge damage. Emmanuel Grumbach fixes Linus's iwlwifi firmware-related log spam. Rickard Strandqvist does some proper NULL termination after a call to strncpy. Ronald Wahl corrects a carl9170 problem with sending URBs with the wrong endpoint type (resulting in log spam). ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 9ce12eb + 77b2f28 commit a61ebdf

File tree

6 files changed

+37
-6
lines changed

6 files changed

+37
-6
lines changed

drivers/net/wireless/ath/carl9170/carl9170.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ struct ar9170 {
256256
atomic_t rx_work_urbs;
257257
atomic_t rx_pool_urbs;
258258
kernel_ulong_t features;
259+
bool usb_ep_cmd_is_bulk;
259260

260261
/* firmware settings */
261262
struct completion fw_load_wait;

drivers/net/wireless/ath/carl9170/usb.c

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -621,9 +621,16 @@ int __carl9170_exec_cmd(struct ar9170 *ar, struct carl9170_cmd *cmd,
621621
goto err_free;
622622
}
623623

624-
usb_fill_int_urb(urb, ar->udev, usb_sndintpipe(ar->udev,
625-
AR9170_USB_EP_CMD), cmd, cmd->hdr.len + 4,
626-
carl9170_usb_cmd_complete, ar, 1);
624+
if (ar->usb_ep_cmd_is_bulk)
625+
usb_fill_bulk_urb(urb, ar->udev,
626+
usb_sndbulkpipe(ar->udev, AR9170_USB_EP_CMD),
627+
cmd, cmd->hdr.len + 4,
628+
carl9170_usb_cmd_complete, ar);
629+
else
630+
usb_fill_int_urb(urb, ar->udev,
631+
usb_sndintpipe(ar->udev, AR9170_USB_EP_CMD),
632+
cmd, cmd->hdr.len + 4,
633+
carl9170_usb_cmd_complete, ar, 1);
627634

628635
if (free_buf)
629636
urb->transfer_flags |= URB_FREE_BUFFER;
@@ -1032,9 +1039,10 @@ static void carl9170_usb_firmware_step2(const struct firmware *fw,
10321039
static int carl9170_usb_probe(struct usb_interface *intf,
10331040
const struct usb_device_id *id)
10341041
{
1042+
struct usb_endpoint_descriptor *ep;
10351043
struct ar9170 *ar;
10361044
struct usb_device *udev;
1037-
int err;
1045+
int i, err;
10381046

10391047
err = usb_reset_device(interface_to_usbdev(intf));
10401048
if (err)
@@ -1050,6 +1058,21 @@ static int carl9170_usb_probe(struct usb_interface *intf,
10501058
ar->intf = intf;
10511059
ar->features = id->driver_info;
10521060

1061+
/* We need to remember the type of endpoint 4 because it differs
1062+
* between high- and full-speed configuration. The high-speed
1063+
* configuration specifies it as interrupt and the full-speed
1064+
* configuration as bulk endpoint. This information is required
1065+
* later when sending urbs to that endpoint.
1066+
*/
1067+
for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; ++i) {
1068+
ep = &intf->cur_altsetting->endpoint[i].desc;
1069+
1070+
if (usb_endpoint_num(ep) == AR9170_USB_EP_CMD &&
1071+
usb_endpoint_dir_out(ep) &&
1072+
usb_endpoint_type(ep) == USB_ENDPOINT_XFER_BULK)
1073+
ar->usb_ep_cmd_is_bulk = true;
1074+
}
1075+
10531076
usb_set_intfdata(intf, ar);
10541077
SET_IEEE80211_DEV(ar->hw, &intf->dev);
10551078

drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,6 +1318,8 @@ int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
13181318
msgbuf->nrof_flowrings = if_msgbuf->nrof_flowrings;
13191319
msgbuf->flowring_dma_handle = kzalloc(msgbuf->nrof_flowrings *
13201320
sizeof(*msgbuf->flowring_dma_handle), GFP_ATOMIC);
1321+
if (!msgbuf->flowring_dma_handle)
1322+
goto fail;
13211323

13221324
msgbuf->rx_dataoffset = if_msgbuf->rx_dataoffset;
13231325
msgbuf->max_rxbufpost = if_msgbuf->max_rxbufpost;
@@ -1362,6 +1364,7 @@ int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
13621364
kfree(msgbuf->flow_map);
13631365
kfree(msgbuf->txstatus_done_map);
13641366
brcmf_msgbuf_release_pktids(msgbuf);
1367+
kfree(msgbuf->flowring_dma_handle);
13651368
if (msgbuf->ioctbuf)
13661369
dma_free_coherent(drvr->bus_if->dev,
13671370
BRCMF_TX_IOCTL_MAX_MSG_SIZE,
@@ -1391,6 +1394,7 @@ void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr)
13911394
BRCMF_TX_IOCTL_MAX_MSG_SIZE,
13921395
msgbuf->ioctbuf, msgbuf->ioctbuf_handle);
13931396
brcmf_msgbuf_release_pktids(msgbuf);
1397+
kfree(msgbuf->flowring_dma_handle);
13941398
kfree(msgbuf);
13951399
drvr->proto->pd = NULL;
13961400
}

drivers/net/wireless/brcm80211/brcmfmac/pcie.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,12 +591,13 @@ static void brcmf_pcie_handle_mb_data(struct brcmf_pciedev_info *devinfo)
591591
}
592592
if (dtoh_mb_data & BRCMF_D2H_DEV_DS_EXIT_NOTE)
593593
brcmf_dbg(PCIE, "D2H_MB_DATA: DEEP SLEEP EXIT\n");
594-
if (dtoh_mb_data & BRCMF_D2H_DEV_D3_ACK)
594+
if (dtoh_mb_data & BRCMF_D2H_DEV_D3_ACK) {
595595
brcmf_dbg(PCIE, "D2H_MB_DATA: D3 ACK\n");
596596
if (waitqueue_active(&devinfo->mbdata_resp_wait)) {
597597
devinfo->mbdata_completed = true;
598598
wake_up(&devinfo->mbdata_resp_wait);
599599
}
600+
}
600601
}
601602

602603

drivers/net/wireless/ipw2x00/ipw2200.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9853,6 +9853,7 @@ static int ipw_wx_get_wireless_mode(struct net_device *dev,
98539853
strncpy(extra, "unknown", MAX_WX_STRING);
98549854
break;
98559855
}
9856+
extra[MAX_WX_STRING - 1] = '\0';
98569857

98579858
IPW_DEBUG_WX("PRIV GET MODE: %s\n", extra);
98589859

drivers/net/wireless/iwlwifi/mvm/mac80211.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,8 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
396396
else
397397
hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
398398

399-
hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
399+
/* TODO: enable that only for firmwares that don't crash */
400+
/* hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; */
400401
hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX;
401402
hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES;
402403
/* we create the 802.11 header and zero length SSID IE. */

0 commit comments

Comments
 (0)