Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd7c5e31 authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'mac80211-for-davem-2016-01-26' of...

Merge tag 'mac80211-for-davem-2016-01-26' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211



Johannes Berg says:

====================
Here's a first set of fixes for the 4.5-rc cycle:
 * make regulatory messages much less verbose by default
 * various remain-on-channel fixes
 * scheduled scanning fixes with hardware restart
 * a PS-Poll handling fix; was broken just recently
 * bugfix to avoid buffering non-bufferable MMPDUs
 * world regulatory domain data fix
 * a fix for scanning causing other work to get stuck
 * hwsim: revert an older problematic patch that caused some
   userspace tools to have issues - not that big a deal as
   it's a debug only driver though
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents c731f0e3 6736fde9
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -991,7 +991,8 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
		goto nla_put_failure;
		goto nla_put_failure;
	}
	}


	if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER, ETH_ALEN, hdr->addr2))
	if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER,
		    ETH_ALEN, data->addresses[1].addr))
		goto nla_put_failure;
		goto nla_put_failure;


	/* We get the skb->data */
	/* We get the skb->data */
@@ -2736,7 +2737,7 @@ static struct mac80211_hwsim_data *get_hwsim_data_ref_from_addr(const u8 *addr)


	spin_lock_bh(&hwsim_radio_lock);
	spin_lock_bh(&hwsim_radio_lock);
	list_for_each_entry(data, &hwsim_radios, list) {
	list_for_each_entry(data, &hwsim_radios, list) {
		if (mac80211_hwsim_addr_match(data, addr)) {
		if (memcmp(data->addresses[1].addr, addr, ETH_ALEN) == 0) {
			_found = true;
			_found = true;
			break;
			break;
		}
		}
+0 −1
Original line number Original line Diff line number Diff line
@@ -1733,7 +1733,6 @@ void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local)
		if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
		if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
			continue;
			continue;
		sdata->u.ibss.last_scan_completed = jiffies;
		sdata->u.ibss.last_scan_completed = jiffies;
		ieee80211_queue_work(&local->hw, &sdata->work);
	}
	}
	mutex_unlock(&local->iflist_mtx);
	mutex_unlock(&local->iflist_mtx);
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -248,6 +248,7 @@ static void ieee80211_restart_work(struct work_struct *work)


	/* wait for scan work complete */
	/* wait for scan work complete */
	flush_workqueue(local->workqueue);
	flush_workqueue(local->workqueue);
	flush_work(&local->sched_scan_stopped_work);


	WARN(test_bit(SCAN_HW_SCANNING, &local->scanning),
	WARN(test_bit(SCAN_HW_SCANNING, &local->scanning),
	     "%s called with hardware scan in progress\n", __func__);
	     "%s called with hardware scan in progress\n", __func__);
@@ -256,6 +257,11 @@ static void ieee80211_restart_work(struct work_struct *work)
	list_for_each_entry(sdata, &local->interfaces, list)
	list_for_each_entry(sdata, &local->interfaces, list)
		flush_delayed_work(&sdata->dec_tailroom_needed_wk);
		flush_delayed_work(&sdata->dec_tailroom_needed_wk);
	ieee80211_scan_cancel(local);
	ieee80211_scan_cancel(local);

	/* make sure any new ROC will consider local->in_reconfig */
	flush_delayed_work(&local->roc_work);
	flush_work(&local->hw_roc_done);

	ieee80211_reconfig(local);
	ieee80211_reconfig(local);
	rtnl_unlock();
	rtnl_unlock();
}
}
+0 −11
Original line number Original line Diff line number Diff line
@@ -1370,17 +1370,6 @@ void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata)
	sdata_unlock(sdata);
	sdata_unlock(sdata);
}
}


void ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local)
{
	struct ieee80211_sub_if_data *sdata;

	rcu_read_lock();
	list_for_each_entry_rcu(sdata, &local->interfaces, list)
		if (ieee80211_vif_is_mesh(&sdata->vif) &&
		    ieee80211_sdata_running(sdata))
			ieee80211_queue_work(&local->hw, &sdata->work);
	rcu_read_unlock();
}


void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)
void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)
{
{
+0 −4
Original line number Original line Diff line number Diff line
@@ -362,14 +362,10 @@ static inline bool mesh_path_sel_is_hwmp(struct ieee80211_sub_if_data *sdata)
	return sdata->u.mesh.mesh_pp_id == IEEE80211_PATH_PROTOCOL_HWMP;
	return sdata->u.mesh.mesh_pp_id == IEEE80211_PATH_PROTOCOL_HWMP;
}
}


void ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local);

void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata);
void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata);
void mesh_sync_adjust_tbtt(struct ieee80211_sub_if_data *sdata);
void mesh_sync_adjust_tbtt(struct ieee80211_sub_if_data *sdata);
void ieee80211s_stop(void);
void ieee80211s_stop(void);
#else
#else
static inline void
ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local) {}
static inline bool mesh_path_sel_is_hwmp(struct ieee80211_sub_if_data *sdata)
static inline bool mesh_path_sel_is_hwmp(struct ieee80211_sub_if_data *sdata)
{ return false; }
{ return false; }
static inline void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata)
static inline void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata)
Loading