Commit 0e866cfb authored by Ajay Singh's avatar Ajay Singh Committed by Greg Kroah-Hartman
Browse files

staging: wilc1000: moved last_scanned_shadow & last_scanned_cnt to wilc_priv struct



Avoid use of static variables and moved the varibles as part of private
data. last_scanned_shadow & last_scanned_cnt variable is moved to
'wilc_priv' to maintain for each interface. After moving static
variable, clear_shadow_scan() doesn't require check 'op_ifcs'
count as now for each interface the againg timer is initiated.

Signed-off-by: default avatarAjay Singh <ajay.kathat@microchip.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 009324da
Loading
Loading
Loading
Loading
+50 −55
Original line number Diff line number Diff line
@@ -82,8 +82,6 @@ static const struct wiphy_wowlan_support wowlan_support = {
	.flags = WIPHY_WOWLAN_ANY
};

static struct network_info last_scanned_shadow[MAX_NUM_SCANNED_NETWORKS_SHADOW];
static u32 last_scanned_cnt;
struct timer_list wilc_during_ip_timer;
static u8 op_ifcs;

@@ -157,21 +155,18 @@ static struct ieee80211_supported_band wilc_band_2ghz = {
#define AGING_TIME	(9 * 1000)
#define DURING_IP_TIME_OUT	15000

static void clear_shadow_scan(void)
static void clear_shadow_scan(struct wilc_priv *priv)
{
	int i;

	if (op_ifcs != 0)
		return;

	for (i = 0; i < last_scanned_cnt; i++) {
		kfree(last_scanned_shadow[i].ies);
		last_scanned_shadow[i].ies = NULL;
	for (i = 0; i < priv->scanned_cnt; i++) {
		kfree(priv->scanned_shadow[i].ies);
		priv->scanned_shadow[i].ies = NULL;

		kfree(last_scanned_shadow[i].join_params);
		last_scanned_shadow[i].join_params = NULL;
		kfree(priv->scanned_shadow[i].join_params);
		priv->scanned_shadow[i].join_params = NULL;
	}
	last_scanned_cnt = 0;
	priv->scanned_cnt = 0;
}

static u32 get_rssi_avg(struct network_info *network_info)
@@ -193,14 +188,14 @@ static void refresh_scan(struct wilc_priv *priv, bool direct_scan)
	struct wiphy *wiphy = priv->dev->ieee80211_ptr->wiphy;
	int i;

	for (i = 0; i < last_scanned_cnt; i++) {
	for (i = 0; i < priv->scanned_cnt; i++) {
		struct network_info *network_info;
		s32 freq;
		struct ieee80211_channel *channel;
		int rssi;
		struct cfg80211_bss *bss;

		network_info = &last_scanned_shadow[i];
		network_info = &priv->scanned_shadow[i];

		if (!memcmp("DIRECT-", network_info->ssid, 7) && !direct_scan)
			continue;
@@ -224,20 +219,20 @@ static void refresh_scan(struct wilc_priv *priv, bool direct_scan)
	}
}

static void reset_shadow_found(void)
static void reset_shadow_found(struct wilc_priv *priv)
{
	int i;

	for (i = 0; i < last_scanned_cnt; i++)
		last_scanned_shadow[i].found = 0;
	for (i = 0; i < priv->scanned_cnt; i++)
		priv->scanned_shadow[i].found = 0;
}

static void update_scan_time(void)
static void update_scan_time(struct wilc_priv *priv)
{
	int i;

	for (i = 0; i < last_scanned_cnt; i++)
		last_scanned_shadow[i].time_scan = jiffies;
	for (i = 0; i < priv->scanned_cnt; i++)
		priv->scanned_shadow[i].time_scan = jiffies;
}

static void remove_network_from_shadow(struct timer_list *t)
@@ -246,22 +241,22 @@ static void remove_network_from_shadow(struct timer_list *t)
	unsigned long now = jiffies;
	int i, j;

	for (i = 0; i < last_scanned_cnt; i++) {
		if (!time_after(now, last_scanned_shadow[i].time_scan +
	for (i = 0; i < priv->scanned_cnt; i++) {
		if (!time_after(now, priv->scanned_shadow[i].time_scan +
				(unsigned long)(SCAN_RESULT_EXPIRE)))
			continue;
		kfree(last_scanned_shadow[i].ies);
		last_scanned_shadow[i].ies = NULL;
		kfree(priv->scanned_shadow[i].ies);
		priv->scanned_shadow[i].ies = NULL;

		kfree(last_scanned_shadow[i].join_params);
		kfree(priv->scanned_shadow[i].join_params);

		for (j = i; (j < last_scanned_cnt - 1); j++)
			last_scanned_shadow[j] = last_scanned_shadow[j + 1];
		for (j = i; (j < priv->scanned_cnt - 1); j++)
			priv->scanned_shadow[j] = priv->scanned_shadow[j + 1];

		last_scanned_cnt--;
		priv->scanned_cnt--;
	}

	if (last_scanned_cnt != 0)
	if (priv->scanned_cnt != 0)
		mod_timer(&priv->aging_timer,
			  jiffies + msecs_to_jiffies(AGING_TIME));
}
@@ -277,13 +272,13 @@ static int is_network_in_shadow(struct network_info *nw_info,
	int state = -1;
	int i;

	if (last_scanned_cnt == 0) {
	if (priv->scanned_cnt == 0) {
		mod_timer(&priv->aging_timer,
			  jiffies + msecs_to_jiffies(AGING_TIME));
		state = -1;
	} else {
		for (i = 0; i < last_scanned_cnt; i++) {
			if (memcmp(last_scanned_shadow[i].bssid,
		for (i = 0; i < priv->scanned_cnt; i++) {
			if (memcmp(priv->scanned_shadow[i].bssid,
				   nw_info->bssid, 6) == 0) {
				state = i;
				break;
@@ -301,16 +296,16 @@ static void add_network_to_shadow(struct network_info *nw_info,
	u8 rssi_index = 0;
	struct network_info *shadow_nw_info;

	if (last_scanned_cnt >= MAX_NUM_SCANNED_NETWORKS_SHADOW)
	if (priv->scanned_cnt >= MAX_NUM_SCANNED_NETWORKS_SHADOW)
		return;

	if (ap_found == -1) {
		ap_index = last_scanned_cnt;
		last_scanned_cnt++;
		ap_index = priv->scanned_cnt;
		priv->scanned_cnt++;
	} else {
		ap_index = ap_found;
	}
	shadow_nw_info = &last_scanned_shadow[ap_index];
	shadow_nw_info = &priv->scanned_shadow[ap_index];
	rssi_index = shadow_nw_info->rssi_history.index;
	shadow_nw_info->rssi_history.samples[rssi_index++] = nw_info->rssi;
	if (rssi_index == NUM_RSSI) {
@@ -402,7 +397,7 @@ static void cfg_scan_result(enum scan_event scan_event,
			u32 i;

			for (i = 0; i < priv->rcvd_ch_cnt; i++) {
				if (memcmp(last_scanned_shadow[i].bssid,
				if (memcmp(priv->scanned_shadow[i].bssid,
					   network_info->bssid, 6) == 0)
					break;
			}
@@ -410,8 +405,8 @@ static void cfg_scan_result(enum scan_event scan_event,
			if (i >= priv->rcvd_ch_cnt)
				return;

			last_scanned_shadow[i].rssi = network_info->rssi;
			last_scanned_shadow[i].time_scan = jiffies;
			priv->scanned_shadow[i].rssi = network_info->rssi;
			priv->scanned_shadow[i].time_scan = jiffies;
		}
	} else if (scan_event == SCAN_EVENT_DONE) {
		refresh_scan(priv, false);
@@ -437,7 +432,7 @@ static void cfg_scan_result(enum scan_event scan_event,
				.aborted = false,
			};

			update_scan_time();
			update_scan_time(priv);
			refresh_scan(priv, false);

			cfg80211_scan_done(priv->scan_req, &info);
@@ -448,11 +443,11 @@ static void cfg_scan_result(enum scan_event scan_event,
	}
}

static inline bool wilc_wfi_cfg_scan_time_expired(int i)
static inline bool wilc_cfg_scan_time_expired(struct wilc_priv *priv, int i)
{
	unsigned long now = jiffies;

	if (time_after(now, last_scanned_shadow[i].time_scan_cached +
	if (time_after(now, priv->scanned_shadow[i].time_scan_cached +
		       (unsigned long)(nl80211_SCAN_RESULT_EXPIRE - (1 * HZ))))
		return true;
	else
@@ -501,11 +496,11 @@ static void cfg_connect_result(enum conn_event conn_disconn_evt,
			memcpy(priv->associated_bss, conn_info->bssid,
			       ETH_ALEN);

			for (i = 0; i < last_scanned_cnt; i++) {
				if (memcmp(last_scanned_shadow[i].bssid,
			for (i = 0; i < priv->scanned_cnt; i++) {
				if (memcmp(priv->scanned_shadow[i].bssid,
					   conn_info->bssid,
					   ETH_ALEN) == 0) {
					if (wilc_wfi_cfg_scan_time_expired(i))
					if (wilc_cfg_scan_time_expired(priv, i))
						scan_refresh = true;

					break;
@@ -619,7 +614,7 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)

	priv->rcvd_ch_cnt = 0;

	reset_shadow_found();
	reset_shadow_found(priv);

	priv->cfg_scanning = true;
	if (request->n_channels <= MAX_NUM_SCANNED_NETWORKS) {
@@ -679,18 +674,18 @@ static int connect(struct wiphy *wiphy, struct net_device *dev,
	else
		wfi_drv->p2p_connect = 0;

	for (i = 0; i < last_scanned_cnt; i++) {
		if (sme->ssid_len == last_scanned_shadow[i].ssid_len &&
		    memcmp(last_scanned_shadow[i].ssid,
	for (i = 0; i < priv->scanned_cnt; i++) {
		if (sme->ssid_len == priv->scanned_shadow[i].ssid_len &&
		    memcmp(priv->scanned_shadow[i].ssid,
			   sme->ssid,
			   sme->ssid_len) == 0) {
			if (!sme->bssid) {
				if (sel_bssi_idx == UINT_MAX ||
				    last_scanned_shadow[i].rssi >
				    last_scanned_shadow[sel_bssi_idx].rssi)
				    priv->scanned_shadow[i].rssi >
				    priv->scanned_shadow[sel_bssi_idx].rssi)
					sel_bssi_idx = i;
			} else {
				if (memcmp(last_scanned_shadow[i].bssid,
				if (memcmp(priv->scanned_shadow[i].bssid,
					   sme->bssid,
					   ETH_ALEN) == 0) {
					sel_bssi_idx = i;
@@ -700,8 +695,8 @@ static int connect(struct wiphy *wiphy, struct net_device *dev,
		}
	}

	if (sel_bssi_idx < last_scanned_cnt) {
		nw_info = &last_scanned_shadow[sel_bssi_idx];
	if (sel_bssi_idx < priv->scanned_cnt) {
		nw_info = &priv->scanned_shadow[sel_bssi_idx];
	} else {
		ret = -ENOENT;
		wilc_connecting = 0;
@@ -2194,7 +2189,7 @@ int wilc_deinit_host_int(struct net_device *net)
	ret = wilc_deinit(vif);

	del_timer_sync(&priv->aging_timer);
	clear_shadow_scan();
	clear_shadow_scan(priv);
	if (op_ifcs == 0)
		del_timer_sync(&wilc_during_ip_timer);

+2 −0
Original line number Diff line number Diff line
@@ -95,6 +95,8 @@ struct wilc_priv {
	struct mutex scan_req_lock;
	bool p2p_listen_state;
	struct timer_list aging_timer;
	struct network_info scanned_shadow[MAX_NUM_SCANNED_NETWORKS_SHADOW];
	int scanned_cnt;
};

struct frame_reg {