Commit ab55570d authored by David S. Miller's avatar David S. Miller
parents eef9d90d 8713a7cc
...@@ -1640,6 +1640,11 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw, ...@@ -1640,6 +1640,11 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw,
return ret; return ret;
} }
static int ath9k_no_fragmentation(struct ieee80211_hw *hw, u32 value)
{
return -EOPNOTSUPP;
}
static struct ieee80211_ops ath9k_ops = { static struct ieee80211_ops ath9k_ops = {
.tx = ath9k_tx, .tx = ath9k_tx,
.start = ath9k_start, .start = ath9k_start,
...@@ -1664,7 +1669,8 @@ static struct ieee80211_ops ath9k_ops = { ...@@ -1664,7 +1669,8 @@ static struct ieee80211_ops ath9k_ops = {
.get_tsf = ath9k_get_tsf, .get_tsf = ath9k_get_tsf,
.reset_tsf = ath9k_reset_tsf, .reset_tsf = ath9k_reset_tsf,
.tx_last_beacon = NULL, .tx_last_beacon = NULL,
.ampdu_action = ath9k_ampdu_action .ampdu_action = ath9k_ampdu_action,
.set_frag_threshold = ath9k_no_fragmentation,
}; };
static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
......
...@@ -833,12 +833,12 @@ static int iwl5000_hw_set_hw_params(struct iwl_priv *priv) ...@@ -833,12 +833,12 @@ static int iwl5000_hw_set_hw_params(struct iwl_priv *priv)
switch (priv->hw_rev & CSR_HW_REV_TYPE_MSK) { switch (priv->hw_rev & CSR_HW_REV_TYPE_MSK) {
case CSR_HW_REV_TYPE_5100: case CSR_HW_REV_TYPE_5100:
case CSR_HW_REV_TYPE_5300: case CSR_HW_REV_TYPE_5300:
/* 5X00 wants in Celsius */ case CSR_HW_REV_TYPE_5350:
/* 5X00 and 5350 wants in Celsius */
priv->hw_params.ct_kill_threshold = CT_KILL_THRESHOLD; priv->hw_params.ct_kill_threshold = CT_KILL_THRESHOLD;
break; break;
case CSR_HW_REV_TYPE_5150: case CSR_HW_REV_TYPE_5150:
case CSR_HW_REV_TYPE_5350: /* 5150 wants in Kelvin */
/* 5X50 wants in Kelvin */
priv->hw_params.ct_kill_threshold = priv->hw_params.ct_kill_threshold =
CELSIUS_TO_KELVIN(CT_KILL_THRESHOLD); CELSIUS_TO_KELVIN(CT_KILL_THRESHOLD);
break; break;
......
...@@ -2422,7 +2422,7 @@ static void rs_free_sta(void *priv_r, struct ieee80211_sta *sta, ...@@ -2422,7 +2422,7 @@ static void rs_free_sta(void *priv_r, struct ieee80211_sta *sta,
void *priv_sta) void *priv_sta)
{ {
struct iwl_lq_sta *lq_sta = priv_sta; struct iwl_lq_sta *lq_sta = priv_sta;
struct iwl_priv *priv = priv_r; struct iwl_priv *priv __maybe_unused = priv_r;
IWL_DEBUG_RATE("enter\n"); IWL_DEBUG_RATE("enter\n");
kfree(lq_sta); kfree(lq_sta);
......
...@@ -823,7 +823,9 @@ int lbs_update_channel(struct lbs_private *priv) ...@@ -823,7 +823,9 @@ int lbs_update_channel(struct lbs_private *priv)
int lbs_set_channel(struct lbs_private *priv, u8 channel) int lbs_set_channel(struct lbs_private *priv, u8 channel)
{ {
struct cmd_ds_802_11_rf_channel cmd; struct cmd_ds_802_11_rf_channel cmd;
#ifdef DEBUG
u8 old_channel = priv->curbssparams.channel; u8 old_channel = priv->curbssparams.channel;
#endif
int ret = 0; int ret = 0;
lbs_deb_enter(LBS_DEB_CMD); lbs_deb_enter(LBS_DEB_CMD);
......
...@@ -403,6 +403,7 @@ static int orinoco_cs_resume(struct pcmcia_device *link) ...@@ -403,6 +403,7 @@ static int orinoco_cs_resume(struct pcmcia_device *link)
struct orinoco_private *priv = netdev_priv(dev); struct orinoco_private *priv = netdev_priv(dev);
struct orinoco_pccard *card = priv->card; struct orinoco_pccard *card = priv->card;
int err = 0; int err = 0;
unsigned long flags;
if (! test_bit(0, &card->hard_reset_in_progress)) { if (! test_bit(0, &card->hard_reset_in_progress)) {
err = orinoco_reinit_firmware(dev); err = orinoco_reinit_firmware(dev);
...@@ -412,7 +413,7 @@ static int orinoco_cs_resume(struct pcmcia_device *link) ...@@ -412,7 +413,7 @@ static int orinoco_cs_resume(struct pcmcia_device *link)
return -EIO; return -EIO;
} }
spin_lock(&priv->lock); spin_lock_irqsave(&priv->lock, flags);
netif_device_attach(dev); netif_device_attach(dev);
priv->hw_unavailable--; priv->hw_unavailable--;
...@@ -424,7 +425,7 @@ static int orinoco_cs_resume(struct pcmcia_device *link) ...@@ -424,7 +425,7 @@ static int orinoco_cs_resume(struct pcmcia_device *link)
dev->name, err); dev->name, err);
} }
spin_unlock(&priv->lock); spin_unlock_irqrestore(&priv->lock, flags);
} }
return err; return err;
......
...@@ -479,7 +479,6 @@ static int p54_parse_eeprom(struct ieee80211_hw *dev, void *eeprom, int len) ...@@ -479,7 +479,6 @@ static int p54_parse_eeprom(struct ieee80211_hw *dev, void *eeprom, int len)
printk(KERN_ERR "p54: eeprom parse failed!\n"); printk(KERN_ERR "p54: eeprom parse failed!\n");
return err; return err;
} }
EXPORT_SYMBOL_GPL(p54_parse_eeprom);
static int p54_rssi_to_dbm(struct ieee80211_hw *dev, int rssi) static int p54_rssi_to_dbm(struct ieee80211_hw *dev, int rssi)
{ {
......
...@@ -39,6 +39,7 @@ static struct usb_device_id p54u_table[] __devinitdata = { ...@@ -39,6 +39,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
{USB_DEVICE(0x0846, 0x4200)}, /* Netgear WG121 */ {USB_DEVICE(0x0846, 0x4200)}, /* Netgear WG121 */
{USB_DEVICE(0x0846, 0x4210)}, /* Netgear WG121 the second ? */ {USB_DEVICE(0x0846, 0x4210)}, /* Netgear WG121 the second ? */
{USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */ {USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */
{USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */
{USB_DEVICE(0x0cde, 0x0006)}, /* Medion 40900, Roper Europe */ {USB_DEVICE(0x0cde, 0x0006)}, /* Medion 40900, Roper Europe */
{USB_DEVICE(0x124a, 0x4023)}, /* Shuttle PN15, Airvast WM168g, IOGear GWU513 */ {USB_DEVICE(0x124a, 0x4023)}, /* Shuttle PN15, Airvast WM168g, IOGear GWU513 */
{USB_DEVICE(0x1915, 0x2234)}, /* Linksys WUSB54G OEM */ {USB_DEVICE(0x1915, 0x2234)}, /* Linksys WUSB54G OEM */
...@@ -63,8 +64,8 @@ static struct usb_device_id p54u_table[] __devinitdata = { ...@@ -63,8 +64,8 @@ static struct usb_device_id p54u_table[] __devinitdata = {
{USB_DEVICE(0x0cde, 0x0006)}, /* Medion MD40900 */ {USB_DEVICE(0x0cde, 0x0006)}, /* Medion MD40900 */
{USB_DEVICE(0x0cde, 0x0008)}, /* Sagem XG703A */ {USB_DEVICE(0x0cde, 0x0008)}, /* Sagem XG703A */
{USB_DEVICE(0x0d8e, 0x3762)}, /* DLink DWL-G120 Cohiba */ {USB_DEVICE(0x0d8e, 0x3762)}, /* DLink DWL-G120 Cohiba */
{USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */
{USB_DEVICE(0x124a, 0x4025)}, /* IOGear GWU513 (GW3887IK chip) */ {USB_DEVICE(0x124a, 0x4025)}, /* IOGear GWU513 (GW3887IK chip) */
{USB_DEVICE(0x1260, 0xee22)}, /* SMC 2862W-G version 2 */
{USB_DEVICE(0x13b1, 0x000a)}, /* Linksys WUSB54G ver 2 */ {USB_DEVICE(0x13b1, 0x000a)}, /* Linksys WUSB54G ver 2 */
{USB_DEVICE(0x13B1, 0x000C)}, /* Linksys WUSB54AG */ {USB_DEVICE(0x13B1, 0x000C)}, /* Linksys WUSB54AG */
{USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */ {USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */
......
...@@ -374,7 +374,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb) ...@@ -374,7 +374,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb)
struct queue_entry *entry = rt2x00queue_get_entry(queue, Q_INDEX); struct queue_entry *entry = rt2x00queue_get_entry(queue, Q_INDEX);
struct txentry_desc txdesc; struct txentry_desc txdesc;
struct skb_frame_desc *skbdesc; struct skb_frame_desc *skbdesc;
unsigned int iv_len; unsigned int iv_len = 0;
if (unlikely(rt2x00queue_full(queue))) if (unlikely(rt2x00queue_full(queue)))
return -EINVAL; return -EINVAL;
...@@ -395,6 +395,9 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb) ...@@ -395,6 +395,9 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb)
entry->skb = skb; entry->skb = skb;
rt2x00queue_create_tx_descriptor(entry, &txdesc); rt2x00queue_create_tx_descriptor(entry, &txdesc);
if (IEEE80211_SKB_CB(skb)->control.hw_key != NULL)
iv_len = IEEE80211_SKB_CB(skb)->control.hw_key->iv_len;
/* /*
* All information is retreived from the skb->cb array, * All information is retreived from the skb->cb array,
* now we should claim ownership of the driver part of that * now we should claim ownership of the driver part of that
...@@ -410,9 +413,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb) ...@@ -410,9 +413,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb)
* the frame so we can provide it to the driver seperately. * the frame so we can provide it to the driver seperately.
*/ */
if (test_bit(ENTRY_TXD_ENCRYPT, &txdesc.flags) && if (test_bit(ENTRY_TXD_ENCRYPT, &txdesc.flags) &&
!test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc.flags) && !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc.flags)) {
(IEEE80211_SKB_CB(skb)->control.hw_key != NULL)) {
iv_len = IEEE80211_SKB_CB(skb)->control.hw_key->iv_len;
rt2x00crypto_tx_remove_iv(skb, iv_len); rt2x00crypto_tx_remove_iv(skb, iv_len);
} }
......
...@@ -33,10 +33,13 @@ MODULE_LICENSE("GPL"); ...@@ -33,10 +33,13 @@ MODULE_LICENSE("GPL");
static struct usb_device_id rtl8187_table[] __devinitdata = { static struct usb_device_id rtl8187_table[] __devinitdata = {
/* Asus */ /* Asus */
{USB_DEVICE(0x0b05, 0x171d), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0b05, 0x171d), .driver_info = DEVICE_RTL8187},
/* Belkin */
{USB_DEVICE(0x050d, 0x705e), .driver_info = DEVICE_RTL8187B},
/* Realtek */ /* Realtek */
{USB_DEVICE(0x0bda, 0x8187), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0bda, 0x8187), .driver_info = DEVICE_RTL8187},
{USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B}, {USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B},
{USB_DEVICE(0x0bda, 0x8197), .driver_info = DEVICE_RTL8187B}, {USB_DEVICE(0x0bda, 0x8197), .driver_info = DEVICE_RTL8187B},
{USB_DEVICE(0x0bda, 0x8198), .driver_info = DEVICE_RTL8187B},
/* Netgear */ /* Netgear */
{USB_DEVICE(0x0846, 0x6100), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0846, 0x6100), .driver_info = DEVICE_RTL8187},
{USB_DEVICE(0x0846, 0x6a00), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0846, 0x6a00), .driver_info = DEVICE_RTL8187},
......
...@@ -450,10 +450,11 @@ spectrum_cs_suspend(struct pcmcia_device *link) ...@@ -450,10 +450,11 @@ spectrum_cs_suspend(struct pcmcia_device *link)
{ {
struct net_device *dev = link->priv; struct net_device *dev = link->priv;
struct orinoco_private *priv = netdev_priv(dev); struct orinoco_private *priv = netdev_priv(dev);
unsigned long flags;
int err = 0; int err = 0;
/* Mark the device as stopped, to block IO until later */ /* Mark the device as stopped, to block IO until later */
spin_lock(&priv->lock); spin_lock_irqsave(&priv->lock, flags);
err = __orinoco_down(dev); err = __orinoco_down(dev);
if (err) if (err)
...@@ -463,7 +464,7 @@ spectrum_cs_suspend(struct pcmcia_device *link) ...@@ -463,7 +464,7 @@ spectrum_cs_suspend(struct pcmcia_device *link)
netif_device_detach(dev); netif_device_detach(dev);
priv->hw_unavailable++; priv->hw_unavailable++;
spin_unlock(&priv->lock); spin_unlock_irqrestore(&priv->lock, flags);
return err; return err;
} }
......
...@@ -645,7 +645,8 @@ enum ieee80211_key_flags { ...@@ -645,7 +645,8 @@ enum ieee80211_key_flags {
* - Temporal Encryption Key (128 bits) * - Temporal Encryption Key (128 bits)
* - Temporal Authenticator Tx MIC Key (64 bits) * - Temporal Authenticator Tx MIC Key (64 bits)
* - Temporal Authenticator Rx MIC Key (64 bits) * - Temporal Authenticator Rx MIC Key (64 bits)
* * @icv_len: FIXME
* @iv_len: FIXME
*/ */
struct ieee80211_key_conf { struct ieee80211_key_conf {
enum ieee80211_key_alg alg; enum ieee80211_key_alg alg;
......
...@@ -545,8 +545,12 @@ static int netdev_notify(struct notifier_block *nb, ...@@ -545,8 +545,12 @@ static int netdev_notify(struct notifier_block *nb,
sdata = IEEE80211_DEV_TO_SUB_IF(dev); sdata = IEEE80211_DEV_TO_SUB_IF(dev);
sprintf(buf, "netdev:%s", dev->name);
dir = sdata->debugfsdir; dir = sdata->debugfsdir;
if (!dir)
return 0;
sprintf(buf, "netdev:%s", dev->name);
if (!debugfs_rename(dir->d_parent, dir, dir->d_parent, buf)) if (!debugfs_rename(dir->d_parent, dir, dir->d_parent, buf))
printk(KERN_ERR "mac80211: debugfs: failed to rename debugfs " printk(KERN_ERR "mac80211: debugfs: failed to rename debugfs "
"dir to %s\n", buf); "dir to %s\n", buf);
......
...@@ -249,11 +249,22 @@ void ieee80211_sta_debugfs_add(struct sta_info *sta) ...@@ -249,11 +249,22 @@ void ieee80211_sta_debugfs_add(struct sta_info *sta)
DECLARE_MAC_BUF(mbuf); DECLARE_MAC_BUF(mbuf);
u8 *mac; u8 *mac;
sta->debugfs.add_has_run = true;
if (!stations_dir) if (!stations_dir)
return; return;
mac = print_mac(mbuf, sta->sta.addr); mac = print_mac(mbuf, sta->sta.addr);
/*
* This might fail due to a race condition:
* When mac80211 unlinks a station, the debugfs entries
* remain, but it is already possible to link a new
* station with the same address which triggers adding
* it to debugfs; therefore, if the old station isn't
* destroyed quickly enough the old station's debugfs
* dir might still be around.
*/
sta->debugfs.dir = debugfs_create_dir(mac, stations_dir); sta->debugfs.dir = debugfs_create_dir(mac, stations_dir);
if (!sta->debugfs.dir) if (!sta->debugfs.dir)
return; return;
......
...@@ -816,8 +816,8 @@ struct ieee802_11_elems { ...@@ -816,8 +816,8 @@ struct ieee802_11_elems {
u8 *ext_supp_rates; u8 *ext_supp_rates;
u8 *wmm_info; u8 *wmm_info;
u8 *wmm_param; u8 *wmm_param;
u8 *ht_cap_elem; struct ieee80211_ht_cap *ht_cap_elem;
u8 *ht_info_elem; struct ieee80211_ht_addt_info *ht_info_elem;
u8 *mesh_config; u8 *mesh_config;
u8 *mesh_id; u8 *mesh_id;
u8 *peer_link; u8 *peer_link;
...@@ -844,8 +844,6 @@ struct ieee802_11_elems { ...@@ -844,8 +844,6 @@ struct ieee802_11_elems {
u8 ext_supp_rates_len; u8 ext_supp_rates_len;
u8 wmm_info_len; u8 wmm_info_len;
u8 wmm_param_len; u8 wmm_param_len;
u8 ht_cap_elem_len;
u8 ht_info_elem_len;
u8 mesh_config_len; u8 mesh_config_len;
u8 mesh_id_len; u8 mesh_id_len;
u8 peer_link_len; u8 peer_link_len;
......
...@@ -1348,10 +1348,8 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata, ...@@ -1348,10 +1348,8 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
(ifsta->flags & IEEE80211_STA_WMM_ENABLED)) { (ifsta->flags & IEEE80211_STA_WMM_ENABLED)) {
struct ieee80211_ht_bss_info bss_info; struct ieee80211_ht_bss_info bss_info;
ieee80211_ht_cap_ie_to_ht_info( ieee80211_ht_cap_ie_to_ht_info(
(struct ieee80211_ht_cap *)
elems.ht_cap_elem, &sta->sta.ht_info); elems.ht_cap_elem, &sta->sta.ht_info);
ieee80211_ht_addt_info_ie_to_ht_bss_info( ieee80211_ht_addt_info_ie_to_ht_bss_info(
(struct ieee80211_ht_addt_info *)
elems.ht_info_elem, &bss_info); elems.ht_info_elem, &bss_info);
ieee80211_handle_ht(local, 1, &sta->sta.ht_info, &bss_info); ieee80211_handle_ht(local, 1, &sta->sta.ht_info, &bss_info);
} }
...@@ -1709,7 +1707,6 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, ...@@ -1709,7 +1707,6 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
struct ieee80211_ht_bss_info bss_info; struct ieee80211_ht_bss_info bss_info;
ieee80211_ht_addt_info_ie_to_ht_bss_info( ieee80211_ht_addt_info_ie_to_ht_bss_info(
(struct ieee80211_ht_addt_info *)
elems.ht_info_elem, &bss_info); elems.ht_info_elem, &bss_info);
changed |= ieee80211_handle_ht(local, 1, &conf->ht_conf, changed |= ieee80211_handle_ht(local, 1, &conf->ht_conf,
&bss_info); &bss_info);
......
...@@ -388,7 +388,8 @@ ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb, ...@@ -388,7 +388,8 @@ ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb,
bss = ieee80211_bss_info_update(sdata->local, rx_status, bss = ieee80211_bss_info_update(sdata->local, rx_status,
mgmt, skb->len, &elems, mgmt, skb->len, &elems,
freq, beacon); freq, beacon);
ieee80211_rx_bss_put(sdata->local, bss); if (bss)
ieee80211_rx_bss_put(sdata->local, bss);
dev_kfree_skb(skb); dev_kfree_skb(skb);
return RX_QUEUED; return RX_QUEUED;
......
...@@ -635,7 +635,12 @@ static void sta_info_debugfs_add_work(struct work_struct *work) ...@@ -635,7 +635,12 @@ static void sta_info_debugfs_add_work(struct work_struct *work)
spin_lock_irqsave(&local->sta_lock, flags); spin_lock_irqsave(&local->sta_lock, flags);
list_for_each_entry(tmp, &local->sta_list, list) { list_for_each_entry(tmp, &local->sta_list, list) {
if (!tmp->debugfs.dir) { /*
* debugfs.add_has_run will be set by
* ieee80211_sta_debugfs_add regardless
* of what else it does.
*/
if (!tmp->debugfs.add_has_run) {
sta = tmp; sta = tmp;
__sta_info_pin(sta); __sta_info_pin(sta);
break; break;
......
...@@ -300,6 +300,7 @@ struct sta_info { ...@@ -300,6 +300,7 @@ struct sta_info {
struct dentry *inactive_ms; struct dentry *inactive_ms;
struct dentry *last_seq_ctrl; struct dentry *last_seq_ctrl;
struct dentry *agg_status; struct dentry *agg_status;
bool add_has_run;
} debugfs; } debugfs;
#endif #endif
......
...@@ -529,12 +529,12 @@ void ieee802_11_parse_elems(u8 *start, size_t len, ...@@ -529,12 +529,12 @@ void ieee802_11_parse_elems(u8 *start, size_t len,
elems->ext_supp_rates_len = elen; elems->ext_supp_rates_len = elen;
break; break;
case WLAN_EID_HT_CAPABILITY: case WLAN_EID_HT_CAPABILITY:
elems->ht_cap_elem = pos; if (elen >= sizeof(struct ieee80211_ht_cap))
elems->ht_cap_elem_len = elen; elems->ht_cap_elem = (void *)pos;
break; break;
case WLAN_EID_HT_EXTRA_INFO: case WLAN_EID_HT_EXTRA_INFO:
elems->ht_info_elem = pos; if (elen >= sizeof(struct ieee80211_ht_addt_info))
elems->ht_info_elem_len = elen; elems->ht_info_elem = (void *)pos;
break; break;
case WLAN_EID_MESH_ID: case WLAN_EID_MESH_ID:
elems->mesh_id = pos; elems->mesh_id = pos;
......
...@@ -775,7 +775,7 @@ static int ieee80211_ioctl_siwfrag(struct net_device *dev, ...@@ -775,7 +775,7 @@ static int ieee80211_ioctl_siwfrag(struct net_device *dev,
* configure it here */ * configure it here */
if (local->ops->set_frag_threshold) if (local->ops->set_frag_threshold)
local->ops->set_frag_threshold( return local->ops->set_frag_threshold(
local_to_hw(local), local_to_hw(local),
local->fragmentation_threshold); local->fragmentation_threshold);
......
...@@ -184,7 +184,8 @@ int cfg80211_dev_rename(struct cfg80211_registered_device *rdev, ...@@ -184,7 +184,8 @@ int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
if (result) if (result)
goto out_unlock; goto out_unlock;
if (!debugfs_rename(rdev->wiphy.debugfsdir->d_parent, if (rdev->wiphy.debugfsdir &&
!debugfs_rename(rdev->wiphy.debugfsdir->d_parent,
rdev->wiphy.debugfsdir, rdev->wiphy.debugfsdir,
rdev->wiphy.debugfsdir->d_parent, rdev->wiphy.debugfsdir->d_parent,
newname)) newname))
...@@ -317,6 +318,8 @@ int wiphy_register(struct wiphy *wiphy) ...@@ -317,6 +318,8 @@ int wiphy_register(struct wiphy *wiphy)
drv->wiphy.debugfsdir = drv->wiphy.debugfsdir =
debugfs_create_dir(wiphy_name(&drv->wiphy), debugfs_create_dir(wiphy_name(&drv->wiphy),
ieee80211_debugfs_dir); ieee80211_debugfs_dir);
if (IS_ERR(drv->wiphy.debugfsdir))
drv->wiphy.debugfsdir = NULL;
res = 0; res = 0;
out_unlock: out_unlock:
......
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