Commit b34939b9 authored by Arend Van Spriel's avatar Arend Van Spriel Committed by Johannes Berg

cfg80211: add request id to cfg80211_sched_scan_*() api

Have proper request id filled in the SCHED_SCAN_RESULTS and
SCHED_SCAN_STOPPED notifications toward user-space by having the
driver provide it through the api.
Reviewed-by: default avatarHante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: default avatarFranky Lin <franky.lin@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent e38a017b
...@@ -169,7 +169,7 @@ static void ath6kl_cfg80211_sscan_disable(struct ath6kl_vif *vif) ...@@ -169,7 +169,7 @@ static void ath6kl_cfg80211_sscan_disable(struct ath6kl_vif *vif)
if (!stopped) if (!stopped)
return; return;
cfg80211_sched_scan_stopped(ar->wiphy); cfg80211_sched_scan_stopped(ar->wiphy, 0);
} }
static int ath6kl_set_wpa_version(struct ath6kl_vif *vif, static int ath6kl_set_wpa_version(struct ath6kl_vif *vif,
......
...@@ -1082,7 +1082,7 @@ void ath6kl_wmi_sscan_timer(unsigned long ptr) ...@@ -1082,7 +1082,7 @@ void ath6kl_wmi_sscan_timer(unsigned long ptr)
{ {
struct ath6kl_vif *vif = (struct ath6kl_vif *) ptr; struct ath6kl_vif *vif = (struct ath6kl_vif *) ptr;
cfg80211_sched_scan_results(vif->ar->wiphy); cfg80211_sched_scan_results(vif->ar->wiphy, 0);
} }
static int ath6kl_wmi_bssinfo_event_rx(struct wmi *wmi, u8 *datap, int len, static int ath6kl_wmi_bssinfo_event_rx(struct wmi *wmi, u8 *datap, int len,
......
...@@ -762,7 +762,7 @@ s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg, ...@@ -762,7 +762,7 @@ s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg,
brcmf_dbg(SCAN, "scheduled scan completed\n"); brcmf_dbg(SCAN, "scheduled scan completed\n");
cfg->internal_escan = false; cfg->internal_escan = false;
if (!aborted) if (!aborted)
cfg80211_sched_scan_results(cfg_to_wiphy(cfg)); cfg80211_sched_scan_results(cfg_to_wiphy(cfg), 0);
} else if (scan_request) { } else if (scan_request) {
struct cfg80211_scan_info info = { struct cfg80211_scan_info info = {
.aborted = aborted, .aborted = aborted,
...@@ -3372,7 +3372,7 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp, ...@@ -3372,7 +3372,7 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
goto free_req; goto free_req;
out_err: out_err:
cfg80211_sched_scan_stopped(wiphy); cfg80211_sched_scan_stopped(wiphy, 0);
free_req: free_req:
kfree(request); kfree(request);
return err; return err;
......
...@@ -2053,7 +2053,7 @@ mwifiex_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *dev, ...@@ -2053,7 +2053,7 @@ mwifiex_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *dev,
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
if (!mwifiex_stop_bg_scan(priv)) if (!mwifiex_stop_bg_scan(priv))
cfg80211_sched_scan_stopped_rtnl(priv->wdev.wiphy); cfg80211_sched_scan_stopped_rtnl(priv->wdev.wiphy, 0);
if (mwifiex_deauthenticate(priv, NULL)) if (mwifiex_deauthenticate(priv, NULL))
return -EFAULT; return -EFAULT;
...@@ -2321,7 +2321,7 @@ mwifiex_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev, ...@@ -2321,7 +2321,7 @@ mwifiex_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
(int)sme->ssid_len, (char *)sme->ssid, sme->bssid); (int)sme->ssid_len, (char *)sme->ssid, sme->bssid);
if (!mwifiex_stop_bg_scan(priv)) if (!mwifiex_stop_bg_scan(priv))
cfg80211_sched_scan_stopped_rtnl(priv->wdev.wiphy); cfg80211_sched_scan_stopped_rtnl(priv->wdev.wiphy, 0);
ret = mwifiex_cfg80211_assoc(priv, sme->ssid_len, sme->ssid, sme->bssid, ret = mwifiex_cfg80211_assoc(priv, sme->ssid_len, sme->ssid, sme->bssid,
priv->bss_mode, sme->channel, sme, 0); priv->bss_mode, sme->channel, sme, 0);
...@@ -2530,7 +2530,7 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy, ...@@ -2530,7 +2530,7 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy,
priv->scan_block = false; priv->scan_block = false;
if (!mwifiex_stop_bg_scan(priv)) if (!mwifiex_stop_bg_scan(priv))
cfg80211_sched_scan_stopped_rtnl(priv->wdev.wiphy); cfg80211_sched_scan_stopped_rtnl(priv->wdev.wiphy, 0);
user_scan_cfg = kzalloc(sizeof(*user_scan_cfg), GFP_KERNEL); user_scan_cfg = kzalloc(sizeof(*user_scan_cfg), GFP_KERNEL);
if (!user_scan_cfg) if (!user_scan_cfg)
......
...@@ -748,7 +748,7 @@ mwifiex_close(struct net_device *dev) ...@@ -748,7 +748,7 @@ mwifiex_close(struct net_device *dev)
mwifiex_dbg(priv->adapter, INFO, mwifiex_dbg(priv->adapter, INFO,
"aborting bgscan on ndo_stop\n"); "aborting bgscan on ndo_stop\n");
mwifiex_stop_bg_scan(priv); mwifiex_stop_bg_scan(priv);
cfg80211_sched_scan_stopped(priv->wdev.wiphy); cfg80211_sched_scan_stopped(priv->wdev.wiphy, 0);
} }
return 0; return 0;
......
...@@ -1201,7 +1201,7 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no, ...@@ -1201,7 +1201,7 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no,
break; break;
case HostCmd_CMD_802_11_BG_SCAN_QUERY: case HostCmd_CMD_802_11_BG_SCAN_QUERY:
ret = mwifiex_ret_802_11_scan(priv, resp); ret = mwifiex_ret_802_11_scan(priv, resp);
cfg80211_sched_scan_results(priv->wdev.wiphy); cfg80211_sched_scan_results(priv->wdev.wiphy, 0);
mwifiex_dbg(adapter, CMD, mwifiex_dbg(adapter, CMD,
"info: CMD_RESP: BG_SCAN result is ready!\n"); "info: CMD_RESP: BG_SCAN result is ready!\n");
break; break;
......
...@@ -793,7 +793,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv) ...@@ -793,7 +793,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
case EVENT_BG_SCAN_STOPPED: case EVENT_BG_SCAN_STOPPED:
dev_dbg(adapter->dev, "event: BGS_STOPPED\n"); dev_dbg(adapter->dev, "event: BGS_STOPPED\n");
cfg80211_sched_scan_stopped(priv->wdev.wiphy); cfg80211_sched_scan_stopped(priv->wdev.wiphy, 0);
if (priv->sched_scanning) if (priv->sched_scanning)
priv->sched_scanning = false; priv->sched_scanning = false;
break; break;
......
...@@ -560,7 +560,7 @@ int mwifiex_enable_hs(struct mwifiex_adapter *adapter) ...@@ -560,7 +560,7 @@ int mwifiex_enable_hs(struct mwifiex_adapter *adapter)
#endif #endif
mwifiex_dbg(adapter, CMD, "aborting bgscan!\n"); mwifiex_dbg(adapter, CMD, "aborting bgscan!\n");
mwifiex_stop_bg_scan(priv); mwifiex_stop_bg_scan(priv);
cfg80211_sched_scan_stopped(priv->wdev.wiphy); cfg80211_sched_scan_stopped(priv->wdev.wiphy, 0);
#ifdef CONFIG_PM #ifdef CONFIG_PM
} }
#endif #endif
......
...@@ -1666,6 +1666,7 @@ struct cfg80211_bss_select_adjust { ...@@ -1666,6 +1666,7 @@ struct cfg80211_bss_select_adjust {
* (others are filtered out). * (others are filtered out).
* If ommited, all results are passed. * If ommited, all results are passed.
* @n_match_sets: number of match sets * @n_match_sets: number of match sets
* @results_wk: worker for processing results notification.
* @wiphy: the wiphy this was for * @wiphy: the wiphy this was for
* @dev: the interface * @dev: the interface
* @scan_start: start time of the scheduled scan * @scan_start: start time of the scheduled scan
...@@ -1726,6 +1727,7 @@ struct cfg80211_sched_scan_request { ...@@ -1726,6 +1727,7 @@ struct cfg80211_sched_scan_request {
struct wiphy *wiphy; struct wiphy *wiphy;
struct net_device *dev; struct net_device *dev;
unsigned long scan_start; unsigned long scan_start;
bool report_results;
struct rcu_head rcu_head; struct rcu_head rcu_head;
u32 owner_nlportid; u32 owner_nlportid;
bool nl_owner_dead; bool nl_owner_dead;
...@@ -4564,31 +4566,34 @@ void cfg80211_scan_done(struct cfg80211_scan_request *request, ...@@ -4564,31 +4566,34 @@ void cfg80211_scan_done(struct cfg80211_scan_request *request,
* cfg80211_sched_scan_results - notify that new scan results are available * cfg80211_sched_scan_results - notify that new scan results are available
* *
* @wiphy: the wiphy which got scheduled scan results * @wiphy: the wiphy which got scheduled scan results
* @reqid: identifier for the related scheduled scan request
*/ */
void cfg80211_sched_scan_results(struct wiphy *wiphy); void cfg80211_sched_scan_results(struct wiphy *wiphy, u64 reqid);
/** /**
* cfg80211_sched_scan_stopped - notify that the scheduled scan has stopped * cfg80211_sched_scan_stopped - notify that the scheduled scan has stopped
* *
* @wiphy: the wiphy on which the scheduled scan stopped * @wiphy: the wiphy on which the scheduled scan stopped
* @reqid: identifier for the related scheduled scan request
* *
* The driver can call this function to inform cfg80211 that the * The driver can call this function to inform cfg80211 that the
* scheduled scan had to be stopped, for whatever reason. The driver * scheduled scan had to be stopped, for whatever reason. The driver
* is then called back via the sched_scan_stop operation when done. * is then called back via the sched_scan_stop operation when done.
*/ */
void cfg80211_sched_scan_stopped(struct wiphy *wiphy); void cfg80211_sched_scan_stopped(struct wiphy *wiphy, u64 reqid);
/** /**
* cfg80211_sched_scan_stopped_rtnl - notify that the scheduled scan has stopped * cfg80211_sched_scan_stopped_rtnl - notify that the scheduled scan has stopped
* *
* @wiphy: the wiphy on which the scheduled scan stopped * @wiphy: the wiphy on which the scheduled scan stopped
* @reqid: identifier for the related scheduled scan request
* *
* The driver can call this function to inform cfg80211 that the * The driver can call this function to inform cfg80211 that the
* scheduled scan had to be stopped, for whatever reason. The driver * scheduled scan had to be stopped, for whatever reason. The driver
* is then called back via the sched_scan_stop operation when done. * is then called back via the sched_scan_stop operation when done.
* This function should be called with rtnl locked. * This function should be called with rtnl locked.
*/ */
void cfg80211_sched_scan_stopped_rtnl(struct wiphy *wiphy); void cfg80211_sched_scan_stopped_rtnl(struct wiphy *wiphy, u64 reqid);
/** /**
* cfg80211_inform_bss_frame_data - inform cfg80211 of a received BSS frame * cfg80211_inform_bss_frame_data - inform cfg80211 of a received BSS frame
......
...@@ -10,7 +10,7 @@ static void ieee80211_sched_scan_cancel(struct ieee80211_local *local) ...@@ -10,7 +10,7 @@ static void ieee80211_sched_scan_cancel(struct ieee80211_local *local)
{ {
if (ieee80211_request_sched_scan_stop(local)) if (ieee80211_request_sched_scan_stop(local))
return; return;
cfg80211_sched_scan_stopped_rtnl(local->hw.wiphy); cfg80211_sched_scan_stopped_rtnl(local->hw.wiphy, 0);
} }
int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
......
...@@ -1219,7 +1219,7 @@ void ieee80211_sched_scan_results(struct ieee80211_hw *hw) ...@@ -1219,7 +1219,7 @@ void ieee80211_sched_scan_results(struct ieee80211_hw *hw)
trace_api_sched_scan_results(local); trace_api_sched_scan_results(local);
cfg80211_sched_scan_results(hw->wiphy); cfg80211_sched_scan_results(hw->wiphy, 0);
} }
EXPORT_SYMBOL(ieee80211_sched_scan_results); EXPORT_SYMBOL(ieee80211_sched_scan_results);
...@@ -1239,7 +1239,7 @@ void ieee80211_sched_scan_end(struct ieee80211_local *local) ...@@ -1239,7 +1239,7 @@ void ieee80211_sched_scan_end(struct ieee80211_local *local)
mutex_unlock(&local->mtx); mutex_unlock(&local->mtx);
cfg80211_sched_scan_stopped(local->hw.wiphy); cfg80211_sched_scan_stopped(local->hw.wiphy, 0);
} }
void ieee80211_sched_scan_stopped_work(struct work_struct *work) void ieee80211_sched_scan_stopped_work(struct work_struct *work)
......
...@@ -2112,7 +2112,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) ...@@ -2112,7 +2112,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
mutex_unlock(&local->mtx); mutex_unlock(&local->mtx);
if (sched_scan_stopped) if (sched_scan_stopped)
cfg80211_sched_scan_stopped_rtnl(local->hw.wiphy); cfg80211_sched_scan_stopped_rtnl(local->hw.wiphy, 0);
wake_up: wake_up:
if (local->in_reconfig) { if (local->in_reconfig) {
......
...@@ -456,7 +456,6 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv, ...@@ -456,7 +456,6 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
INIT_LIST_HEAD(&rdev->bss_list); INIT_LIST_HEAD(&rdev->bss_list);
INIT_LIST_HEAD(&rdev->sched_scan_req_list); INIT_LIST_HEAD(&rdev->sched_scan_req_list);
INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done); INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done);
INIT_WORK(&rdev->sched_scan_results_wk, __cfg80211_sched_scan_results);
INIT_LIST_HEAD(&rdev->mlme_unreg); INIT_LIST_HEAD(&rdev->mlme_unreg);
spin_lock_init(&rdev->mlme_unreg_lock); spin_lock_init(&rdev->mlme_unreg_lock);
INIT_WORK(&rdev->mlme_unreg_wk, cfg80211_mlme_unreg_wk); INIT_WORK(&rdev->mlme_unreg_wk, cfg80211_mlme_unreg_wk);
...@@ -473,6 +472,7 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv, ...@@ -473,6 +472,7 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
INIT_WORK(&rdev->destroy_work, cfg80211_destroy_iface_wk); INIT_WORK(&rdev->destroy_work, cfg80211_destroy_iface_wk);
INIT_WORK(&rdev->sched_scan_stop_wk, cfg80211_sched_scan_stop_wk); INIT_WORK(&rdev->sched_scan_stop_wk, cfg80211_sched_scan_stop_wk);
INIT_WORK(&rdev->sched_scan_res_wk, cfg80211_sched_scan_results_wk);
INIT_WORK(&rdev->propagate_radar_detect_wk, INIT_WORK(&rdev->propagate_radar_detect_wk,
cfg80211_propagate_radar_detect_wk); cfg80211_propagate_radar_detect_wk);
INIT_WORK(&rdev->propagate_cac_done_wk, cfg80211_propagate_cac_done_wk); INIT_WORK(&rdev->propagate_cac_done_wk, cfg80211_propagate_cac_done_wk);
......
...@@ -77,7 +77,6 @@ struct cfg80211_registered_device { ...@@ -77,7 +77,6 @@ struct cfg80211_registered_device {
struct list_head sched_scan_req_list; struct list_head sched_scan_req_list;
unsigned long suspend_at; unsigned long suspend_at;
struct work_struct scan_done_wk; struct work_struct scan_done_wk;
struct work_struct sched_scan_results_wk;
struct genl_info *cur_cmd_info; struct genl_info *cur_cmd_info;
...@@ -93,6 +92,7 @@ struct cfg80211_registered_device { ...@@ -93,6 +92,7 @@ struct cfg80211_registered_device {
struct work_struct destroy_work; struct work_struct destroy_work;
struct work_struct sched_scan_stop_wk; struct work_struct sched_scan_stop_wk;
struct work_struct sched_scan_res_wk;
struct cfg80211_chan_def radar_chandef; struct cfg80211_chan_def radar_chandef;
struct work_struct propagate_radar_detect_wk; struct work_struct propagate_radar_detect_wk;
...@@ -412,7 +412,7 @@ void cfg80211_add_sched_scan_req(struct cfg80211_registered_device *rdev, ...@@ -412,7 +412,7 @@ void cfg80211_add_sched_scan_req(struct cfg80211_registered_device *rdev,
struct cfg80211_sched_scan_request *req); struct cfg80211_sched_scan_request *req);
int cfg80211_sched_scan_req_possible(struct cfg80211_registered_device *rdev, int cfg80211_sched_scan_req_possible(struct cfg80211_registered_device *rdev,
bool want_multi); bool want_multi);
void __cfg80211_sched_scan_results(struct work_struct *wk); void cfg80211_sched_scan_results_wk(struct work_struct *work);
int cfg80211_stop_sched_scan_req(struct cfg80211_registered_device *rdev, int cfg80211_stop_sched_scan_req(struct cfg80211_registered_device *rdev,
struct cfg80211_sched_scan_request *req, struct cfg80211_sched_scan_request *req,
bool driver_initiated); bool driver_initiated);
......
...@@ -328,7 +328,7 @@ cfg80211_find_sched_scan_req(struct cfg80211_registered_device *rdev, u64 reqid) ...@@ -328,7 +328,7 @@ cfg80211_find_sched_scan_req(struct cfg80211_registered_device *rdev, u64 reqid)
if (pos->reqid == reqid) if (pos->reqid == reqid)
return pos; return pos;
} }
return ERR_PTR(-ENOENT); return NULL;
} }
/* /*
...@@ -364,67 +364,66 @@ int cfg80211_sched_scan_req_possible(struct cfg80211_registered_device *rdev, ...@@ -364,67 +364,66 @@ int cfg80211_sched_scan_req_possible(struct cfg80211_registered_device *rdev,
return 0; return 0;
} }
void __cfg80211_sched_scan_results(struct work_struct *wk) void cfg80211_sched_scan_results_wk(struct work_struct *work)
{ {
struct cfg80211_registered_device *rdev; struct cfg80211_registered_device *rdev;
struct cfg80211_sched_scan_request *request; struct cfg80211_sched_scan_request *req, *tmp;
rdev = container_of(wk, struct cfg80211_registered_device, rdev = container_of(work, struct cfg80211_registered_device,
sched_scan_results_wk); sched_scan_res_wk);
rtnl_lock(); rtnl_lock();
list_for_each_entry_safe(req, tmp, &rdev->sched_scan_req_list, list) {
request = cfg80211_find_sched_scan_req(rdev, 0); if (req->report_results) {
req->report_results = false;
/* we don't have sched_scan_req anymore if the scan is stopping */ if (req->flags & NL80211_SCAN_FLAG_FLUSH) {
if (!IS_ERR(request)) {
if (request->flags & NL80211_SCAN_FLAG_FLUSH) {
/* flush entries from previous scans */ /* flush entries from previous scans */
spin_lock_bh(&rdev->bss_lock); spin_lock_bh(&rdev->bss_lock);
__cfg80211_bss_expire(rdev, request->scan_start); __cfg80211_bss_expire(rdev, req->scan_start);
spin_unlock_bh(&rdev->bss_lock); spin_unlock_bh(&rdev->bss_lock);
request->scan_start = jiffies; req->scan_start = jiffies;
}
nl80211_send_sched_scan(req,
NL80211_CMD_SCHED_SCAN_RESULTS);
} }
nl80211_send_sched_scan(request, NL80211_CMD_SCHED_SCAN_RESULTS);
} }
rtnl_unlock(); rtnl_unlock();
} }
void cfg80211_sched_scan_results(struct wiphy *wiphy) void cfg80211_sched_scan_results(struct wiphy *wiphy, u64 reqid)
{ {
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
struct cfg80211_sched_scan_request *request; struct cfg80211_sched_scan_request *request;
trace_cfg80211_sched_scan_results(wiphy); trace_cfg80211_sched_scan_results(wiphy, reqid);
/* ignore if we're not scanning */ /* ignore if we're not scanning */
rtnl_lock(); rtnl_lock();
request = cfg80211_find_sched_scan_req(rdev, 0); request = cfg80211_find_sched_scan_req(rdev, reqid);
if (request) {
request->report_results = true;
queue_work(cfg80211_wq, &rdev->sched_scan_res_wk);
}
rtnl_unlock(); rtnl_unlock();
if (!IS_ERR(request))
queue_work(cfg80211_wq,
&wiphy_to_rdev(wiphy)->sched_scan_results_wk);
} }
EXPORT_SYMBOL(cfg80211_sched_scan_results); EXPORT_SYMBOL(cfg80211_sched_scan_results);
void cfg80211_sched_scan_stopped_rtnl(struct wiphy *wiphy) void cfg80211_sched_scan_stopped_rtnl(struct wiphy *wiphy, u64 reqid)
{ {
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
ASSERT_RTNL(); ASSERT_RTNL();
trace_cfg80211_sched_scan_stopped(wiphy); trace_cfg80211_sched_scan_stopped(wiphy, reqid);
__cfg80211_stop_sched_scan(rdev, 0, true); __cfg80211_stop_sched_scan(rdev, reqid, true);
} }
EXPORT_SYMBOL(cfg80211_sched_scan_stopped_rtnl); EXPORT_SYMBOL(cfg80211_sched_scan_stopped_rtnl);
void cfg80211_sched_scan_stopped(struct wiphy *wiphy) void cfg80211_sched_scan_stopped(struct wiphy *wiphy, u64 reqid)
{ {
rtnl_lock(); rtnl_lock();
cfg80211_sched_scan_stopped_rtnl(wiphy); cfg80211_sched_scan_stopped_rtnl(wiphy, reqid);
rtnl_unlock(); rtnl_unlock();
} }
EXPORT_SYMBOL(cfg80211_sched_scan_stopped); EXPORT_SYMBOL(cfg80211_sched_scan_stopped);
...@@ -456,8 +455,8 @@ int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, ...@@ -456,8 +455,8 @@ int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev,
ASSERT_RTNL(); ASSERT_RTNL();
sched_scan_req = cfg80211_find_sched_scan_req(rdev, reqid); sched_scan_req = cfg80211_find_sched_scan_req(rdev, reqid);
if (IS_ERR(sched_scan_req)) if (!sched_scan_req)
return PTR_ERR(sched_scan_req); return -ENOENT;
return cfg80211_stop_sched_scan_req(rdev, sched_scan_req, return cfg80211_stop_sched_scan_req(rdev, sched_scan_req,
driver_initiated); driver_initiated);
......
...@@ -2820,14 +2820,28 @@ TRACE_EVENT(cfg80211_scan_done, ...@@ -2820,14 +2820,28 @@ TRACE_EVENT(cfg80211_scan_done,
MAC_PR_ARG(tsf_bssid)) MAC_PR_ARG(tsf_bssid))
); );
DEFINE_EVENT(wiphy_only_evt, cfg80211_sched_scan_results, DECLARE_EVENT_CLASS(wiphy_id_evt,
TP_PROTO(struct wiphy *wiphy), TP_PROTO(struct wiphy *wiphy, u64 id),
TP_ARGS(wiphy) TP_ARGS(wiphy, id),
TP_STRUCT__entry(
WIPHY_ENTRY
__field(u64, id)
),
TP_fast_assign(
WIPHY_ASSIGN;
__entry->id = id;
),
TP_printk(WIPHY_PR_FMT ", id: %llu", WIPHY_PR_ARG, __entry->id)
); );
DEFINE_EVENT(wiphy_only_evt, cfg80211_sched_scan_stopped, DEFINE_EVENT(wiphy_id_evt, cfg80211_sched_scan_stopped,
TP_PROTO(struct wiphy *wiphy), TP_PROTO(struct wiphy *wiphy, u64 id),
TP_ARGS(wiphy) TP_ARGS(wiphy, id)
);
DEFINE_EVENT(wiphy_id_evt, cfg80211_sched_scan_results,
TP_PROTO(struct wiphy *wiphy, u64 id),
TP_ARGS(wiphy, id)
); );
TRACE_EVENT(cfg80211_get_bss, TRACE_EVENT(cfg80211_get_bss,
......
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