qcacld-3.0: Initialize spinlocks used for STA and SAP information update

qcacld-2.0 to qcacld-3.0 propagation

Initialize spinlocks sap_update_info_lock and sta_update_info_lock which
are used during SAP and STA information update respectively. These
uninitialized spinlocks lead to crash during access due to bad magic
value of the spinlock.

Change-Id: I7d2df8337f9feed352430774907aa095affa5a69
CRs-Fixed: 1011996
This commit is contained in:
Manishekar Chandrasekaran 2016-05-07 09:54:00 +05:30 • committed by Akash Patel
commit 7f63d05a48
5 changed files with 22 additions and 13 deletions

View file

@ -1927,9 +1927,9 @@ bool cds_is_sta_connection_pending(void)
return false;
}
spin_lock(&hdd_ctx->sta_update_info_lock);
qdf_spin_lock(&hdd_ctx->sta_update_info_lock);
status = hdd_ctx->is_sta_connection_pending;
spin_unlock(&hdd_ctx->sta_update_info_lock);
qdf_spin_unlock(&hdd_ctx->sta_update_info_lock);
return status;
}
@ -1952,9 +1952,9 @@ void cds_change_sta_conn_pending_status(bool value)
return;
}
spin_lock(&hdd_ctx->sta_update_info_lock);
qdf_spin_lock(&hdd_ctx->sta_update_info_lock);
hdd_ctx->is_sta_connection_pending = value;
spin_unlock(&hdd_ctx->sta_update_info_lock);
qdf_spin_unlock(&hdd_ctx->sta_update_info_lock);
}
/**
@ -1976,9 +1976,9 @@ static bool cds_is_sap_restart_required(void)
return false;
}
spin_lock(&hdd_ctx->sap_update_info_lock);
qdf_spin_lock(&hdd_ctx->sap_update_info_lock);
status = hdd_ctx->is_sap_restart_required;
spin_unlock(&hdd_ctx->sap_update_info_lock);
qdf_spin_unlock(&hdd_ctx->sap_update_info_lock);
return status;
}
@ -2001,9 +2001,9 @@ void cds_change_sap_restart_required_status(bool value)
return;
}
spin_lock(&hdd_ctx->sap_update_info_lock);
qdf_spin_lock(&hdd_ctx->sap_update_info_lock);
hdd_ctx->is_sap_restart_required = value;
spin_unlock(&hdd_ctx->sap_update_info_lock);
qdf_spin_unlock(&hdd_ctx->sap_update_info_lock);
}
/**

View file

@ -1320,8 +1320,8 @@ struct hdd_context_s {
struct work_struct sap_start_work;
bool is_sap_restart_required;
bool is_sta_connection_pending;
spinlock_t sap_update_info_lock;
spinlock_t sta_update_info_lock;
qdf_spinlock_t sap_update_info_lock;
qdf_spinlock_t sta_update_info_lock;
uint8_t dev_dfs_cac_status;

View file

@ -116,6 +116,7 @@ int hdd_sap_context_init(hdd_context_t *hdd_ctx)
mutex_init(&hdd_ctx->sap_lock);
qdf_wake_lock_create(&hdd_ctx->sap_wake_lock, "qcom_sap_wakelock");
qdf_spinlock_create(&hdd_ctx->sap_update_info_lock);
mutex_init(&hdd_ctx->dfs_lock);
@ -220,6 +221,8 @@ void hdd_sap_context_destroy(hdd_context_t *hdd_ctx)
mutex_destroy(&hdd_ctx->dfs_lock);
qdf_spinlock_destroy(&hdd_ctx->sap_update_info_lock);
}
/**
@ -8161,9 +8164,9 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy,
(QDF_SAP_MODE == pAdapter->device_mode)) {
cds_flush_work(&pHddCtx->sap_start_work);
hddLog(LOGW, FL("Canceled the pending restart work"));
spin_lock(&pHddCtx->sap_update_info_lock);
qdf_spin_lock(&pHddCtx->sap_update_info_lock);
pHddCtx->is_sap_restart_required = false;
spin_unlock(&pHddCtx->sap_update_info_lock);
qdf_spin_unlock(&pHddCtx->sap_update_info_lock);
}
pAdapter->sessionCtx.ap.sapConfig.acs_cfg.acs_mode = false;
if (pAdapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list)

View file

@ -4183,6 +4183,10 @@ void hdd_wlan_exit(hdd_context_t *hdd_ctx)
QDF_ASSERT(QDF_IS_STATUS_SUCCESS(qdf_status));
}
qdf_spinlock_destroy(&hdd_ctx->hdd_adapter_lock);
qdf_spinlock_destroy(&hdd_ctx->sta_update_info_lock);
qdf_spinlock_destroy(&hdd_ctx->connection_status_lock);
/*
* Close CDS
* This frees pMac(HAL) context. There should not be any call
@ -5484,8 +5488,9 @@ static int hdd_context_init(hdd_context_t *hdd_ctx)
hdd_init_bpf_completion();
qdf_spinlock_create(&hdd_ctx->connection_status_lock);
qdf_spinlock_create(&hdd_ctx->sta_update_info_lock);
qdf_spinlock_create(&hdd_ctx->hdd_adapter_lock);
qdf_list_create(&hdd_ctx->hddAdapters, MAX_NUMBER_OF_ADAPTERS);
init_completion(&hdd_ctx->set_antenna_mode_cmpl);

View file

@ -2502,6 +2502,7 @@ void hdd_cleanup_scan_queue(hdd_context_t *hdd_ctx)
void hdd_scan_context_destroy(hdd_context_t *hdd_ctx)
{
qdf_list_destroy(&hdd_ctx->hdd_scan_req_q);
qdf_spinlock_destroy(&hdd_ctx->sched_scan_lock);
}
/**