diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index be9bc7419c..57408510ee 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1894,6 +1894,7 @@ struct hdd_context { qdf_mc_timer_t sar_safety_timer; qdf_mc_timer_t sar_safety_unsolicited_timer; qdf_event_t sar_safety_req_resp_event; + qdf_atomic_t sar_safety_req_resp_event_in_progress; #endif qdf_time_t runtime_resume_start_time_stamp; diff --git a/core/hdd/src/wlan_hdd_sar_limits.c b/core/hdd/src/wlan_hdd_sar_limits.c index 04866b694f..bec6d26f3a 100644 --- a/core/hdd/src/wlan_hdd_sar_limits.c +++ b/core/hdd/src/wlan_hdd_sar_limits.c @@ -502,6 +502,8 @@ static void hdd_sar_unsolicited_timer_cb(void *user_data) hdd_nofl_debug("Sar unsolicited timer expired"); + qdf_atomic_set(&hdd_ctx->sar_safety_req_resp_event_in_progress, 1); + for (i = 0; i < hdd_ctx->config->sar_safety_req_resp_retry; i++) { qdf_event_reset(&hdd_ctx->sar_safety_req_resp_event); hdd_send_sar_unsolicited_event(hdd_ctx); @@ -511,6 +513,7 @@ static void hdd_sar_unsolicited_timer_cb(void *user_data) if (QDF_IS_STATUS_SUCCESS(status)) break; } + qdf_atomic_set(&hdd_ctx->sar_safety_req_resp_event_in_progress, 0); if (i >= hdd_ctx->config->sar_safety_req_resp_retry) hdd_configure_sar_index(hdd_ctx, @@ -530,6 +533,10 @@ void wlan_hdd_sar_unsolicited_timer_start(struct hdd_context *hdd_ctx) if (!hdd_ctx->config->enable_sar_safety) return; + if (qdf_atomic_read( + &hdd_ctx->sar_safety_req_resp_event_in_progress) > 0) + return; + if (QDF_TIMER_STATE_RUNNING != qdf_mc_timer_get_current_state( &hdd_ctx->sar_safety_unsolicited_timer)) @@ -573,6 +580,7 @@ void wlan_hdd_sar_timers_init(struct hdd_context *hdd_ctx) QDF_TIMER_TYPE_SW, hdd_sar_unsolicited_timer_cb, hdd_ctx); + qdf_atomic_init(&hdd_ctx->sar_safety_req_resp_event_in_progress); qdf_event_create(&hdd_ctx->sar_safety_req_resp_event); }