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

Commit 24ff9f44 authored by Amruta Kulkarni's avatar Amruta Kulkarni Committed by Gerrit - the friendly Code Review server
Browse files

qcacld-3.0: Add Reject AP to BLM list after context change

In scenario, when ROAM HO failure is piggybacked on WOW wake up,
the blm reject AP addition fails as mutex can't be acquired in
interrupt context. With this change, the reject bssid blm
addition will happen after changing context to scheduler thread.

Change-Id: I685501b7ea48e4461922a7a50fb39c52d4d607f3
CRs-Fixed: 2880712
parent 3620aff9
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -3023,6 +3023,7 @@ struct roam_offload_synch_ind {
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
struct handoff_failure_ind {
struct handoff_failure_ind {
	uint8_t vdev_id;
	uint8_t vdev_id;
	struct qdf_mac_addr bssid;
};
};


struct roam_offload_synch_fail {
struct roam_offload_synch_fail {
+7 −0
Original line number Original line Diff line number Diff line
@@ -21195,6 +21195,7 @@ void csr_process_ho_fail_ind(struct mac_context *mac_ctx, void *msg_buf)
	struct handoff_failure_ind *pSmeHOFailInd = msg_buf;
	struct handoff_failure_ind *pSmeHOFailInd = msg_buf;
	struct mlme_roam_after_data_stall *vdev_roam_params;
	struct mlme_roam_after_data_stall *vdev_roam_params;
	struct wlan_objmgr_vdev *vdev;
	struct wlan_objmgr_vdev *vdev;
	struct reject_ap_info ap_info;
	uint32_t sessionId;
	uint32_t sessionId;
	if (!pSmeHOFailInd) {
	if (!pSmeHOFailInd) {
@@ -21203,6 +21204,12 @@ void csr_process_ho_fail_ind(struct mac_context *mac_ctx, void *msg_buf)
	}
	}
	sessionId = pSmeHOFailInd->vdev_id;
	sessionId = pSmeHOFailInd->vdev_id;
	ap_info.bssid = pSmeHOFailInd->bssid;
	ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
	ap_info.reject_reason = REASON_ROAM_HO_FAILURE;
	ap_info.source = ADDED_BY_DRIVER;
	wlan_blm_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info);
	/* Roaming is supported only on Infra STA Mode. */
	/* Roaming is supported only on Infra STA Mode. */
	if (!csr_roam_is_sta_mode(mac_ctx, sessionId)) {
	if (!csr_roam_is_sta_mode(mac_ctx, sessionId)) {
+2 −7
Original line number Original line Diff line number Diff line
@@ -4167,19 +4167,14 @@ wma_roam_ho_fail_handler(tp_wma_handle wma, uint32_t vdev_id,
	struct handoff_failure_ind *ho_failure_ind;
	struct handoff_failure_ind *ho_failure_ind;
	struct scheduler_msg sme_msg = { 0 };
	struct scheduler_msg sme_msg = { 0 };
	QDF_STATUS qdf_status;
	QDF_STATUS qdf_status;
	struct reject_ap_info ap_info;

	ap_info.bssid = bssid;
	ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
	ap_info.reject_reason = REASON_ROAM_HO_FAILURE;
	ap_info.source = ADDED_BY_DRIVER;
	wlan_blm_add_bssid_to_reject_list(wma->pdev, &ap_info);


	ho_failure_ind = qdf_mem_malloc(sizeof(*ho_failure_ind));
	ho_failure_ind = qdf_mem_malloc(sizeof(*ho_failure_ind));
	if (!ho_failure_ind)
	if (!ho_failure_ind)
		return;
		return;


	ho_failure_ind->vdev_id = vdev_id;
	ho_failure_ind->vdev_id = vdev_id;
	ho_failure_ind->bssid = bssid;

	sme_msg.type = eWNI_SME_HO_FAIL_IND;
	sme_msg.type = eWNI_SME_HO_FAIL_IND;
	sme_msg.bodyptr = ho_failure_ind;
	sme_msg.bodyptr = ho_failure_ind;
	sme_msg.bodyval = 0;
	sme_msg.bodyval = 0;