diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2016-04-13 19:14:44 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-04-13 19:14:44 +0000 |
commit | ff39dc35d458da87b29d339cd35d9d4379f3a00b (patch) | |
tree | 4fb629fe758864ec7df05658f66d7997c9ec9823 | |
parent | bab98a0490770557c29136ba2d91e14ef096c45f (diff) | |
parent | 42f5dc2b5f632ce601d876fad18830de3ea38b89 (diff) | |
download | wlan-ff39dc35d458da87b29d339cd35d9d4379f3a00b.tar.gz |
Merge "WiFi-HAL: Protect packet fate stats resources with mutex" into nyc-dev
-rw-r--r-- | qcwcn/wifi_hal/common.h | 2 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wifi_hal.cpp | 2 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wifilogger.cpp | 14 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wifilogger_diag.cpp | 2 |
4 files changed, 18 insertions, 2 deletions
diff --git a/qcwcn/wifi_hal/common.h b/qcwcn/wifi_hal/common.h index 2601999..f0b8373 100644 --- a/qcwcn/wifi_hal/common.h +++ b/qcwcn/wifi_hal/common.h @@ -137,6 +137,8 @@ typedef struct hal_info_s { u32 firmware_bus_max_size; bool fate_monitoring_enabled; packet_fate_monitor_info *pkt_fate_stats; + /* mutex for the packet fate stats shared resource protection */ + pthread_mutex_t pkt_fate_stats_lock; } hal_info; wifi_error wifi_register_handler(wifi_handle handle, int cmd, nl_recvmsg_msg_cb_t func, void *arg); diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp index 27f297f..3541d87 100644 --- a/qcwcn/wifi_hal/wifi_hal.cpp +++ b/qcwcn/wifi_hal/wifi_hal.cpp @@ -462,6 +462,7 @@ wifi_error wifi_initialize(wifi_handle *handle) } pthread_mutex_init(&info->cb_lock, NULL); + pthread_mutex_init(&info->pkt_fate_stats_lock, NULL); *handle = (wifi_handle) info; @@ -654,6 +655,7 @@ static void internal_cleaned_up_handler(wifi_handle handle) (*cleaned_up_handler)(handle); pthread_mutex_destroy(&info->cb_lock); + pthread_mutex_destroy(&info->pkt_fate_stats_lock); free(info); ALOGI("Internal cleanup completed"); diff --git a/qcwcn/wifi_hal/wifilogger.cpp b/qcwcn/wifi_hal/wifilogger.cpp index 506e0df..6ea5eaf 100644 --- a/qcwcn/wifi_hal/wifilogger.cpp +++ b/qcwcn/wifi_hal/wifilogger.cpp @@ -625,7 +625,9 @@ wifi_error wifi_start_pkt_fate_monitoring(wifi_interface_handle iface) } memset(info->pkt_fate_stats, 0, sizeof(packet_fate_monitor_info)); + pthread_mutex_lock(&info->pkt_fate_stats_lock); info->fate_monitoring_enabled = true; + pthread_mutex_unlock(&info->pkt_fate_stats_lock); return WIFI_SUCCESS; } @@ -651,13 +653,16 @@ wifi_error wifi_get_tx_pkt_fates(wifi_interface_handle iface, { wifi_handle wifiHandle = getWifiHandle(iface); hal_info *info = getHalInfo(wifiHandle); - wifi_tx_report_i *tx_fate_stats = &info->pkt_fate_stats->tx_fate_stats[0]; + wifi_tx_report_i *tx_fate_stats; size_t i; if (info->fate_monitoring_enabled != true) { ALOGE("Packet monitoring is not yet triggered"); return WIFI_ERROR_UNINITIALIZED; } + pthread_mutex_lock(&info->pkt_fate_stats_lock); + + tx_fate_stats = &info->pkt_fate_stats->tx_fate_stats[0]; *n_provided_fates = min(n_requested_fates, info->pkt_fate_stats->n_tx_stats_collected); @@ -693,6 +698,7 @@ wifi_error wifi_get_tx_pkt_fates(wifi_interface_handle iface, * ignore the all other types of packets received from driver */ ALOGI("Unknown format packet"); } + pthread_mutex_unlock(&info->pkt_fate_stats_lock); return WIFI_SUCCESS; } @@ -717,13 +723,16 @@ wifi_error wifi_get_rx_pkt_fates(wifi_interface_handle iface, { wifi_handle wifiHandle = getWifiHandle(iface); hal_info *info = getHalInfo(wifiHandle); - wifi_rx_report_i *rx_fate_stats = &info->pkt_fate_stats->rx_fate_stats[0]; + wifi_rx_report_i *rx_fate_stats; size_t i; if (info->fate_monitoring_enabled != true) { ALOGE("Packet monitoring is not yet triggered"); return WIFI_ERROR_UNINITIALIZED; } + pthread_mutex_lock(&info->pkt_fate_stats_lock); + + rx_fate_stats = &info->pkt_fate_stats->rx_fate_stats[0]; *n_provided_fates = min(n_requested_fates, info->pkt_fate_stats->n_rx_stats_collected); @@ -759,6 +768,7 @@ wifi_error wifi_get_rx_pkt_fates(wifi_interface_handle iface, * ignore the all other types of packets received from driver */ ALOGI("Unknown format packet"); } + pthread_mutex_unlock(&info->pkt_fate_stats_lock); return WIFI_SUCCESS; } diff --git a/qcwcn/wifi_hal/wifilogger_diag.cpp b/qcwcn/wifi_hal/wifilogger_diag.cpp index 35fd2c9..2d29455 100644 --- a/qcwcn/wifi_hal/wifilogger_diag.cpp +++ b/qcwcn/wifi_hal/wifilogger_diag.cpp @@ -1954,6 +1954,7 @@ static wifi_error parse_stats_record(hal_info *info, else status = WIFI_SUCCESS; } else if (pkt_stats_header->log_type == PKTLOG_TYPE_PKT_DUMP) { + pthread_mutex_lock(&info->pkt_fate_stats_lock); if (info->fate_monitoring_enabled) { status = parse_pkt_fate_stats(info, (u8 *)(pkt_stats_header + 1), @@ -1962,6 +1963,7 @@ static wifi_error parse_stats_record(hal_info *info, ALOGD("Packet fate monitoring is not enabled"); status = WIFI_SUCCESS; } + pthread_mutex_unlock(&info->pkt_fate_stats_lock); } else { status = parse_tx_stats(info, (u8 *)(pkt_stats_header + 1), |