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

Commit 479bfa81 authored by Jianmin Zhu's avatar Jianmin Zhu Committed by Madan Koyyalamudi
Browse files

qcacld-3.0: Fix LFR3 roaming and NUD race condition issue

If data stall happens, both LFR3 roaming and NUD may happen,
if LFR3 happens first, updated connected bssid, NUD handler will
add new bssid to blacklist and trigger roaming again by mistake.

Fix: Once roaming succeed, reset NUD status to NUD_NONE to finish
current NUD cycle, but don't zero gw mac addr since roaming does't
update gateway.

Change-Id: I03685ca21348444d929e042f12dc3a837ca51940
CRs-Fixed: 2818785
parent 2d6070e1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3668,6 +3668,7 @@ hdd_association_completion_handler(struct hdd_adapter *adapter,
					      eCSR_BSS_TYPE_INFRASTRUCTURE);
			}

			hdd_nud_indicate_roam(adapter);
			/* Start the tx queues */
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
			if (roam_info->roamSynchInProgress)
+5 −0
Original line number Diff line number Diff line
@@ -575,3 +575,8 @@ void hdd_nud_unregister_netevent_notifier(struct hdd_context *hdd_ctx)
			hdd_debug("Unregistered netevent notifier");
	}
}

void hdd_nud_indicate_roam(struct hdd_adapter *adapter)
{
	hdd_nud_set_tracking(adapter, NUD_NONE, false);
}
+14 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2018, 2019 The Linux Foundation. All rights reserved.
 * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
@@ -149,6 +149,14 @@ void hdd_nud_unregister_netevent_notifier(struct hdd_context *hdd_ctx);
 */
void hdd_nud_flush_work(struct hdd_adapter *adapter);

/**
 * hdd_nud_indicate_roam() - reset NUD when roaming happens
 * @adapter: Pointer to hdd adapter
 *
 * Return: None
 */
void hdd_nud_indicate_roam(struct hdd_adapter *adapter);

#else
static inline void hdd_nud_set_gateway_addr(struct hdd_adapter *adapter,
					    struct qdf_mac_addr gw_mac_addr)
@@ -192,5 +200,10 @@ static inline void
hdd_nud_flush_work(struct hdd_adapter *adapter)
{
}

static inline void
hdd_nud_indicate_roam(struct hdd_adapter *adapter)
{
}
#endif /* WLAN_NUD_TRACKING */
#endif /* end  of _WLAN_NUD_TRACKING_H_ */