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

Commit 7f2eed2d authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "wil6210: rename p2p_wdev_mutex to vif_mutex" into msm-4.14

parents 17e360fa 6b4a9d37
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -484,10 +484,10 @@ static void wil_cfg80211_stop_p2p_device(struct wiphy *wiphy,

	wil_dbg_misc(wil, "stop_p2p_device: entered\n");
	mutex_lock(&wil->mutex);
	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	wil_p2p_stop_radio_operations(wil);
	wil->p2p_dev_started = 0;
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
	mutex_unlock(&wil->mutex);
}

@@ -778,14 +778,14 @@ static int wil_cfg80211_scan(struct wiphy *wiphy,

	mutex_lock(&wil->mutex);

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	if (vif->scan_request || vif->p2p.discovery_started) {
		wil_err(wil, "Already scanning\n");
		mutex_unlock(&wil->p2p_wdev_mutex);
		mutex_unlock(&wil->vif_mutex);
		rc = -EAGAIN;
		goto out;
	}
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);

	if (wdev->iftype == NL80211_IFTYPE_P2P_DEVICE) {
		if (!wil->p2p_dev_started) {
@@ -897,7 +897,7 @@ static void wil_cfg80211_abort_scan(struct wiphy *wiphy,
	wil_dbg_misc(wil, "wdev=0x%p iftype=%d\n", wdev, wdev->iftype);

	mutex_lock(&wil->mutex);
	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);

	if (!vif->scan_request)
		goto out;
@@ -913,7 +913,7 @@ static void wil_cfg80211_abort_scan(struct wiphy *wiphy,
		wil_abort_scan(vif, true);

out:
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
	mutex_unlock(&wil->mutex);
}

@@ -2015,10 +2015,10 @@ static int wil_cfg80211_suspend(struct wiphy *wiphy,
	wil_dbg_pm(wil, "suspending\n");

	mutex_lock(&wil->mutex);
	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	wil_p2p_stop_radio_operations(wil);
	wil_abort_scan(ndev_to_vif(wil->main_ndev), true);
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
	mutex_unlock(&wil->mutex);

out:
@@ -2314,11 +2314,11 @@ void wil_p2p_wdev_free(struct wil6210_priv *wil)
	struct wireless_dev *p2p_wdev;
	struct wil6210_vif *vif;

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	p2p_wdev = wil->p2p_wdev;
	wil->p2p_wdev = NULL;
	wil->radio_wdev = wil->main_ndev->ieee80211_ptr;
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
	if (p2p_wdev) {
		cfg80211_unregister_wdev(p2p_wdev);
		vif = wdev_to_vif(wil, p2p_wdev);
+8 −8
Original line number Diff line number Diff line
@@ -539,8 +539,8 @@ int wil_priv_init(struct wil6210_priv *wil)
		spin_lock_init(&wil->vring_tx_data[i].lock);

	mutex_init(&wil->mutex);
	mutex_init(&wil->vif_mutex);
	mutex_init(&wil->wmi_mutex);
	mutex_init(&wil->p2p_wdev_mutex);
	mutex_init(&wil->halp.lock);

	init_completion(&wil->wmi_ready);
@@ -1075,21 +1075,21 @@ void wil_abort_scan(struct wil6210_vif *vif, bool sync)
		.aborted = true,
	};

	lockdep_assert_held(&wil->p2p_wdev_mutex);
	lockdep_assert_held(&wil->vif_mutex);

	if (!vif->scan_request)
		return;

	wil_dbg_misc(wil, "Abort scan_request 0x%p\n", vif->scan_request);
	del_timer_sync(&vif->scan_timer);
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
	rc = wmi_abort_scan(vif);
	if (!rc && sync)
		wait_event_interruptible_timeout(wil->wq, !vif->scan_request,
						 msecs_to_jiffies(
						 WAIT_FOR_SCAN_ABORT_MS));

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	if (vif->scan_request) {
		cfg80211_scan_done(vif->scan_request, &info);
		vif->scan_request = NULL;
@@ -1233,9 +1233,9 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
	/* Disable device led before reset*/
	wmi_led_cfg(wil, false);

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	wil_abort_scan(vif, false);
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);

	/* prevent NAPI from being scheduled and prevent wmi commands */
	mutex_lock(&wil->wmi_mutex);
@@ -1465,10 +1465,10 @@ int __wil_down(struct wil6210_priv *wil)

	wil_ftm_stop_operations(wil);

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	wil_p2p_stop_radio_operations(wil);
	wil_abort_scan(ndev_to_vif(wil->main_ndev), false);
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);

	return wil_reset(wil, false);
}
+17 −17
Original line number Diff line number Diff line
@@ -158,16 +158,16 @@ int wil_p2p_listen(struct wil6210_priv *wil, struct wireless_dev *wdev,
	*cookie = ++p2p->cookie;
	p2p->listen_duration = duration;

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	if (vif->scan_request) {
		wil_dbg_misc(wil, "Delaying p2p listen until scan done\n");
		p2p->pending_listen_wdev = wdev;
		p2p->discovery_started = 1;
		rc = 0;
		mutex_unlock(&wil->p2p_wdev_mutex);
		mutex_unlock(&wil->vif_mutex);
		goto out;
	}
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);

	rc = wil_p2p_start_listen(vif);
	if (rc)
@@ -228,14 +228,14 @@ int wil_p2p_cancel_listen(struct wil6210_vif *vif, u64 cookie)
		return -ENOENT;
	}

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	cfg80211_remain_on_channel_expired(vif_to_radio_wdev(wil, vif),
					   p2p->cookie,
					   &p2p->listen_chan,
					   GFP_KERNEL);
	if (vif->mid == 0)
		wil->radio_wdev = wil->main_ndev->ieee80211_ptr;
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
	return 0;
}

@@ -257,14 +257,14 @@ void wil_p2p_listen_expired(struct work_struct *work)
	if (!started)
		return;

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	cfg80211_remain_on_channel_expired(vif_to_radio_wdev(wil, vif),
					   p2p->cookie,
					   &p2p->listen_chan,
					   GFP_KERNEL);
	if (vif->mid == 0)
		wil->radio_wdev = wil->main_ndev->ieee80211_ptr;
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
}

void wil_p2p_search_expired(struct work_struct *work)
@@ -287,7 +287,7 @@ void wil_p2p_search_expired(struct work_struct *work)
			.aborted = false,
		};

		mutex_lock(&wil->p2p_wdev_mutex);
		mutex_lock(&wil->vif_mutex);
		if (vif->scan_request) {
			cfg80211_scan_done(vif->scan_request, &info);
			vif->scan_request = NULL;
@@ -295,7 +295,7 @@ void wil_p2p_search_expired(struct work_struct *work)
				wil->radio_wdev =
					wil->main_ndev->ieee80211_ptr;
		}
		mutex_unlock(&wil->p2p_wdev_mutex);
		mutex_unlock(&wil->vif_mutex);
	}
}

@@ -314,17 +314,17 @@ void wil_p2p_delayed_listen_work(struct work_struct *work)
	if (!p2p->discovery_started || !p2p->pending_listen_wdev)
		goto out;

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	if (vif->scan_request) {
		/* another scan started, wait again... */
		mutex_unlock(&wil->p2p_wdev_mutex);
		mutex_unlock(&wil->vif_mutex);
		goto out;
	}
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);

	rc = wil_p2p_start_listen(vif);

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	if (rc) {
		cfg80211_remain_on_channel_expired(p2p->pending_listen_wdev,
						   p2p->cookie,
@@ -340,7 +340,7 @@ void wil_p2p_delayed_listen_work(struct work_struct *work)
			wil->radio_wdev = p2p->pending_listen_wdev;
	}
	p2p->pending_listen_wdev = NULL;
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);

out:
	mutex_unlock(&wil->mutex);
@@ -355,7 +355,7 @@ void wil_p2p_stop_radio_operations(struct wil6210_priv *wil)
	};

	lockdep_assert_held(&wil->mutex);
	lockdep_assert_held(&wil->p2p_wdev_mutex);
	lockdep_assert_held(&wil->vif_mutex);

	if (wil->radio_wdev != wil->p2p_wdev)
		goto out;
@@ -369,9 +369,9 @@ void wil_p2p_stop_radio_operations(struct wil6210_priv *wil)
	}

	/* Search or listen on p2p device */
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
	wil_p2p_stop_discovery(vif);
	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);

	if (vif->scan_request) {
		/* search */
+1 −1
Original line number Diff line number Diff line
@@ -729,6 +729,7 @@ struct wil6210_priv {
	wait_queue_head_t wq; /* for all wait_event() use */
	u8 max_vifs; /* maximum number of interfaces, including main */
	struct wil6210_vif *vifs[WIL_MAX_VIFS];
	struct mutex vif_mutex; /* protects access to VIF entries */
	/* profile */
	struct cfg80211_chan_def monitor_chandef;
	u32 monitor_flags;
@@ -797,7 +798,6 @@ struct wil6210_priv {

	/* P2P_DEVICE vif */
	struct wireless_dev *p2p_wdev;
	struct mutex p2p_wdev_mutex; /* protect @p2p_wdev and @scan_request */
	struct wireless_dev *radio_wdev;

	/* High Access Latency Policy voting */
+4 −4
Original line number Diff line number Diff line
@@ -772,10 +772,10 @@ static void wmi_evt_rx_mgmt(struct wil6210_vif *vif, int id, void *d, int len)
			wil_err(wil, "cfg80211_inform_bss_frame() failed\n");
		}
	} else {
		mutex_lock(&wil->p2p_wdev_mutex);
		mutex_lock(&wil->vif_mutex);
		cfg80211_rx_mgmt(vif_to_radio_wdev(wil, vif), freq, signal,
				 (void *)rx_mgmt_frame, d_len, 0);
		mutex_unlock(&wil->p2p_wdev_mutex);
		mutex_unlock(&wil->vif_mutex);
	}
}

@@ -795,7 +795,7 @@ static void wmi_evt_scan_complete(struct wil6210_vif *vif, int id,
{
	struct wil6210_priv *wil = vif_to_wil(vif);

	mutex_lock(&wil->p2p_wdev_mutex);
	mutex_lock(&wil->vif_mutex);
	if (vif->scan_request) {
		struct wmi_scan_complete_event *data = d;
		int status = le32_to_cpu(data->status);
@@ -820,7 +820,7 @@ static void wmi_evt_scan_complete(struct wil6210_vif *vif, int id,
	} else {
		wil_err(wil, "SCAN_COMPLETE while not scanning\n");
	}
	mutex_unlock(&wil->p2p_wdev_mutex);
	mutex_unlock(&wil->vif_mutex);
}

static void wmi_evt_connect(struct wil6210_vif *vif, int id, void *d, int len)