diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 2f64a398ac69..c834bd7979d1 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1223,6 +1223,8 @@ enum qdisc_filter_status { * @cache_sta_count: number of currently cached stations * @acs_complete_event: acs complete event * @latency_level: 0 - normal, 1 - moderate, 2 - low, 3 - ultralow + * @mc_addr_list: multicast address list + * @mc_list_lock: spin lock for multicast list * @last_disconnect_reason: Last disconnected internal reason code * as per enum qca_disconnect_reason_codes * @connect_req_status: Last disconnected internal status code @@ -1408,6 +1410,7 @@ struct hdd_adapter { #endif struct hdd_multicast_addr_list mc_addr_list; + qdf_spinlock_t mc_list_lock; uint8_t addr_filter_pattern; struct hdd_scan_info scan_info; diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index f85385bc2362..b7f2353b28e8 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4992,6 +4992,7 @@ static void __hdd_set_multicast_list(struct net_device *dev) if (!mc_list_request) return; + qdf_spin_lock_bh(&adapter->mc_list_lock); /* Delete already configured multicast address list */ if (adapter->mc_addr_list.mc_cnt > 0) hdd_disable_and_flush_mc_addr_list(adapter, @@ -5044,6 +5045,7 @@ static void __hdd_set_multicast_list(struct net_device *dev) hdd_enable_mc_addr_filtering(adapter, pmo_mc_list_change_notify); free_req: + qdf_spin_unlock_bh(&adapter->mc_list_lock); qdf_mem_free(mc_list_request); } @@ -6196,6 +6198,7 @@ static void hdd_cleanup_adapter(struct hdd_context *hdd_ctx, hdd_periodic_sta_stats_mutex_destroy(adapter); hdd_apf_context_destroy(adapter); qdf_spinlock_destroy(&adapter->vdev_lock); + qdf_spinlock_destroy(&adapter->mc_list_lock); hdd_sta_info_deinit(&adapter->sta_info_list); hdd_sta_info_deinit(&adapter->cache_sta_info_list); @@ -7023,6 +7026,7 @@ struct hdd_adapter *hdd_open_adapter(struct hdd_context *hdd_ctx, uint8_t sessio qdf_list_create(&adapter->blocked_scan_request_q, WLAN_MAX_SCAN_COUNT); qdf_mutex_create(&adapter->blocked_scan_request_q_lock); qdf_event_create(&adapter->acs_complete_event); + qdf_spinlock_create(&adapter->mc_list_lock); qdf_event_create(&adapter->peer_cleanup_done); hdd_sta_info_init(&adapter->sta_info_list); hdd_sta_info_init(&adapter->cache_sta_info_list);