aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/broadcom
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2016-09-12 18:52:44 -0400
committerDavid S. Miller <davem@davemloft.net>2016-09-12 18:52:44 -0400
commitb20b378d49926b82c0a131492fa8842156e0e8a9 (patch)
tree7196847eea049a46442b05f99aee1dc571019381 /drivers/net/wireless/broadcom
parent02154927c115c7599677df57203988e05b576346 (diff)
parentda499f8f5385c181e29978fdaab15a58de185302 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/mediatek/mtk_eth_soc.c drivers/net/ethernet/qlogic/qed/qed_dcbx.c drivers/net/phy/Kconfig All conflicts were cases of overlapping commits. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless/broadcom')
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c28
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h2
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c2
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c8
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h2
5 files changed, 22 insertions, 20 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 2628d5e12c64..b8aec5e5ef93 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -4527,7 +4527,7 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
4527 (u8 *)&settings->beacon.head[ie_offset], 4527 (u8 *)&settings->beacon.head[ie_offset],
4528 settings->beacon.head_len - ie_offset, 4528 settings->beacon.head_len - ie_offset,
4529 WLAN_EID_SSID); 4529 WLAN_EID_SSID);
4530 if (!ssid_ie) 4530 if (!ssid_ie || ssid_ie->len > IEEE80211_MAX_SSID_LEN)
4531 return -EINVAL; 4531 return -EINVAL;
4532 4532
4533 memcpy(ssid_le.SSID, ssid_ie->data, ssid_ie->len); 4533 memcpy(ssid_le.SSID, ssid_ie->data, ssid_ie->len);
@@ -5635,7 +5635,7 @@ static s32 brcmf_notify_vif_event(struct brcmf_if *ifp,
5635 ifevent->action, ifevent->flags, ifevent->ifidx, 5635 ifevent->action, ifevent->flags, ifevent->ifidx,
5636 ifevent->bsscfgidx); 5636 ifevent->bsscfgidx);
5637 5637
5638 mutex_lock(&event->vif_event_lock); 5638 spin_lock(&event->vif_event_lock);
5639 event->action = ifevent->action; 5639 event->action = ifevent->action;
5640 vif = event->vif; 5640 vif = event->vif;
5641 5641
@@ -5643,7 +5643,7 @@ static s32 brcmf_notify_vif_event(struct brcmf_if *ifp,
5643 case BRCMF_E_IF_ADD: 5643 case BRCMF_E_IF_ADD:
5644 /* waiting process may have timed out */ 5644 /* waiting process may have timed out */
5645 if (!cfg->vif_event.vif) { 5645 if (!cfg->vif_event.vif) {
5646 mutex_unlock(&event->vif_event_lock); 5646 spin_unlock(&event->vif_event_lock);
5647 return -EBADF; 5647 return -EBADF;
5648 } 5648 }
5649 5649
@@ -5654,24 +5654,24 @@ static s32 brcmf_notify_vif_event(struct brcmf_if *ifp,
5654 ifp->ndev->ieee80211_ptr = &vif->wdev; 5654 ifp->ndev->ieee80211_ptr = &vif->wdev;
5655 SET_NETDEV_DEV(ifp->ndev, wiphy_dev(cfg->wiphy)); 5655 SET_NETDEV_DEV(ifp->ndev, wiphy_dev(cfg->wiphy));
5656 } 5656 }
5657 mutex_unlock(&event->vif_event_lock); 5657 spin_unlock(&event->vif_event_lock);
5658 wake_up(&event->vif_wq); 5658 wake_up(&event->vif_wq);
5659 return 0; 5659 return 0;
5660 5660
5661 case BRCMF_E_IF_DEL: 5661 case BRCMF_E_IF_DEL:
5662 mutex_unlock(&event->vif_event_lock); 5662 spin_unlock(&event->vif_event_lock);
5663 /* event may not be upon user request */ 5663 /* event may not be upon user request */
5664 if (brcmf_cfg80211_vif_event_armed(cfg)) 5664 if (brcmf_cfg80211_vif_event_armed(cfg))
5665 wake_up(&event->vif_wq); 5665 wake_up(&event->vif_wq);
5666 return 0; 5666 return 0;
5667 5667
5668 case BRCMF_E_IF_CHANGE: 5668 case BRCMF_E_IF_CHANGE:
5669 mutex_unlock(&event->vif_event_lock); 5669 spin_unlock(&event->vif_event_lock);
5670 wake_up(&event->vif_wq); 5670 wake_up(&event->vif_wq);
5671 return 0; 5671 return 0;
5672 5672
5673 default: 5673 default:
5674 mutex_unlock(&event->vif_event_lock); 5674 spin_unlock(&event->vif_event_lock);
5675 break; 5675 break;
5676 } 5676 }
5677 return -EINVAL; 5677 return -EINVAL;
@@ -5792,7 +5792,7 @@ static void wl_deinit_priv(struct brcmf_cfg80211_info *cfg)
5792static void init_vif_event(struct brcmf_cfg80211_vif_event *event) 5792static void init_vif_event(struct brcmf_cfg80211_vif_event *event)
5793{ 5793{
5794 init_waitqueue_head(&event->vif_wq); 5794 init_waitqueue_head(&event->vif_wq);
5795 mutex_init(&event->vif_event_lock); 5795 spin_lock_init(&event->vif_event_lock);
5796} 5796}
5797 5797
5798static s32 brcmf_dongle_roam(struct brcmf_if *ifp) 5798static s32 brcmf_dongle_roam(struct brcmf_if *ifp)
@@ -6691,9 +6691,9 @@ static inline bool vif_event_equals(struct brcmf_cfg80211_vif_event *event,
6691{ 6691{
6692 u8 evt_action; 6692 u8 evt_action;
6693 6693
6694 mutex_lock(&event->vif_event_lock); 6694 spin_lock(&event->vif_event_lock);
6695 evt_action = event->action; 6695 evt_action = event->action;
6696 mutex_unlock(&event->vif_event_lock); 6696 spin_unlock(&event->vif_event_lock);
6697 return evt_action == action; 6697 return evt_action == action;
6698} 6698}
6699 6699
@@ -6702,10 +6702,10 @@ void brcmf_cfg80211_arm_vif_event(struct brcmf_cfg80211_info *cfg,
6702{ 6702{
6703 struct brcmf_cfg80211_vif_event *event = &cfg->vif_event; 6703 struct brcmf_cfg80211_vif_event *event = &cfg->vif_event;
6704 6704
6705 mutex_lock(&event->vif_event_lock); 6705 spin_lock(&event->vif_event_lock);
6706 event->vif = vif; 6706 event->vif = vif;
6707 event->action = 0; 6707 event->action = 0;
6708 mutex_unlock(&event->vif_event_lock); 6708 spin_unlock(&event->vif_event_lock);
6709} 6709}
6710 6710
6711bool brcmf_cfg80211_vif_event_armed(struct brcmf_cfg80211_info *cfg) 6711bool brcmf_cfg80211_vif_event_armed(struct brcmf_cfg80211_info *cfg)
@@ -6713,9 +6713,9 @@ bool brcmf_cfg80211_vif_event_armed(struct brcmf_cfg80211_info *cfg)
6713 struct brcmf_cfg80211_vif_event *event = &cfg->vif_event; 6713 struct brcmf_cfg80211_vif_event *event = &cfg->vif_event;
6714 bool armed; 6714 bool armed;
6715 6715
6716 mutex_lock(&event->vif_event_lock); 6716 spin_lock(&event->vif_event_lock);
6717 armed = event->vif != NULL; 6717 armed = event->vif != NULL;
6718 mutex_unlock(&event->vif_event_lock); 6718 spin_unlock(&event->vif_event_lock);
6719 6719
6720 return armed; 6720 return armed;
6721} 6721}
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
index 7d77f869b7f1..8889832c17e0 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
@@ -227,7 +227,7 @@ struct escan_info {
227 */ 227 */
228struct brcmf_cfg80211_vif_event { 228struct brcmf_cfg80211_vif_event {
229 wait_queue_head_t vif_wq; 229 wait_queue_head_t vif_wq;
230 struct mutex vif_event_lock; 230 spinlock_t vif_event_lock;
231 u8 action; 231 u8 action;
232 struct brcmf_cfg80211_vif *vif; 232 struct brcmf_cfg80211_vif *vif;
233}; 233};
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index 8d16f0204985..65e8c8766441 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -743,7 +743,7 @@ static void brcmf_del_if(struct brcmf_pub *drvr, s32 bsscfgidx,
743 * serious troublesome side effects. The p2p module will clean 743 * serious troublesome side effects. The p2p module will clean
744 * up the ifp if needed. 744 * up the ifp if needed.
745 */ 745 */
746 brcmf_p2p_ifp_removed(ifp); 746 brcmf_p2p_ifp_removed(ifp, rtnl_locked);
747 kfree(ifp); 747 kfree(ifp);
748 } 748 }
749} 749}
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
index 66f942f7448e..de19c7c92bc6 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
@@ -2297,7 +2297,7 @@ int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev)
2297 return err; 2297 return err;
2298} 2298}
2299 2299
2300void brcmf_p2p_ifp_removed(struct brcmf_if *ifp) 2300void brcmf_p2p_ifp_removed(struct brcmf_if *ifp, bool rtnl_locked)
2301{ 2301{
2302 struct brcmf_cfg80211_info *cfg; 2302 struct brcmf_cfg80211_info *cfg;
2303 struct brcmf_cfg80211_vif *vif; 2303 struct brcmf_cfg80211_vif *vif;
@@ -2306,9 +2306,11 @@ void brcmf_p2p_ifp_removed(struct brcmf_if *ifp)
2306 vif = ifp->vif; 2306 vif = ifp->vif;
2307 cfg = wdev_to_cfg(&vif->wdev); 2307 cfg = wdev_to_cfg(&vif->wdev);
2308 cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif = NULL; 2308 cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif = NULL;
2309 rtnl_lock(); 2309 if (!rtnl_locked)
2310 rtnl_lock();
2310 cfg80211_unregister_wdev(&vif->wdev); 2311 cfg80211_unregister_wdev(&vif->wdev);
2311 rtnl_unlock(); 2312 if (!rtnl_locked)
2313 rtnl_unlock();
2312 brcmf_free_vif(vif); 2314 brcmf_free_vif(vif);
2313} 2315}
2314 2316
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
index a3bd18c2360b..8ce9447533ef 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
@@ -155,7 +155,7 @@ struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name,
155int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev); 155int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev);
156int brcmf_p2p_ifchange(struct brcmf_cfg80211_info *cfg, 156int brcmf_p2p_ifchange(struct brcmf_cfg80211_info *cfg,
157 enum brcmf_fil_p2p_if_types if_type); 157 enum brcmf_fil_p2p_if_types if_type);
158void brcmf_p2p_ifp_removed(struct brcmf_if *ifp); 158void brcmf_p2p_ifp_removed(struct brcmf_if *ifp, bool rtnl_locked);
159int brcmf_p2p_start_device(struct wiphy *wiphy, struct wireless_dev *wdev); 159int brcmf_p2p_start_device(struct wiphy *wiphy, struct wireless_dev *wdev);
160void brcmf_p2p_stop_device(struct wiphy *wiphy, struct wireless_dev *wdev); 160void brcmf_p2p_stop_device(struct wiphy *wiphy, struct wireless_dev *wdev);
161int brcmf_p2p_scan_prep(struct wiphy *wiphy, 161int brcmf_p2p_scan_prep(struct wiphy *wiphy,