|
@@ -438,17 +438,16 @@ static int rtl8187_init_urbs(struct ieee80211_hw *dev)
|
|
|
skb_queue_tail(&priv->rx_queue, skb);
|
|
|
usb_anchor_urb(entry, &priv->anchored);
|
|
|
ret = usb_submit_urb(entry, GFP_KERNEL);
|
|
|
+ usb_put_urb(entry);
|
|
|
if (ret) {
|
|
|
skb_unlink(skb, &priv->rx_queue);
|
|
|
usb_unanchor_urb(entry);
|
|
|
goto err;
|
|
|
}
|
|
|
- usb_free_urb(entry);
|
|
|
}
|
|
|
return ret;
|
|
|
|
|
|
err:
|
|
|
- usb_free_urb(entry);
|
|
|
kfree_skb(skb);
|
|
|
usb_kill_anchored_urbs(&priv->anchored);
|
|
|
return ret;
|
|
@@ -956,8 +955,12 @@ static int rtl8187_start(struct ieee80211_hw *dev)
|
|
|
(RETRY_COUNT << 8 /* short retry limit */) |
|
|
|
(RETRY_COUNT << 0 /* long retry limit */) |
|
|
|
(7 << 21 /* MAX TX DMA */));
|
|
|
- rtl8187_init_urbs(dev);
|
|
|
- rtl8187b_init_status_urb(dev);
|
|
|
+ ret = rtl8187_init_urbs(dev);
|
|
|
+ if (ret)
|
|
|
+ goto rtl8187_start_exit;
|
|
|
+ ret = rtl8187b_init_status_urb(dev);
|
|
|
+ if (ret)
|
|
|
+ usb_kill_anchored_urbs(&priv->anchored);
|
|
|
goto rtl8187_start_exit;
|
|
|
}
|
|
|
|
|
@@ -966,7 +969,9 @@ static int rtl8187_start(struct ieee80211_hw *dev)
|
|
|
rtl818x_iowrite32(priv, &priv->map->MAR[0], ~0);
|
|
|
rtl818x_iowrite32(priv, &priv->map->MAR[1], ~0);
|
|
|
|
|
|
- rtl8187_init_urbs(dev);
|
|
|
+ ret = rtl8187_init_urbs(dev);
|
|
|
+ if (ret)
|
|
|
+ goto rtl8187_start_exit;
|
|
|
|
|
|
reg = RTL818X_RX_CONF_ONLYERLPKT |
|
|
|
RTL818X_RX_CONF_RX_AUTORESETPHY |
|