summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimanshu Agarwal <himanaga@qti.qualcomm.com>2016-04-11 22:09:22 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-04-22 10:23:13 +0530
commit0b51a767c817e4779651f621701350bf73ddf2bb (patch)
tree54abb804442b156306e7322c9a4bbeb356fde137
parent89c770ddd30c4fa0dcfd5bdf61c5191eb811bfb4 (diff)
qcacld-2.0: Add logic to log pause/unpause time
Add logic to calculate pause and unpause time for network queues to debug data path issues. Change-Id: I50c3f83f3bde9e3f2e7c7e4c003e967f00590049 CRs-Fixed: 988801
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h5
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c30
-rw-r--r--CORE/HDD/src/wlan_hdd_tx_rx.c48
-rw-r--r--CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h4
5 files changed, 77 insertions, 12 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index c038b7dbff45..10dfacec8248 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1218,6 +1218,11 @@ struct hdd_adapter_s
uint32_t pause_map;
spinlock_t pause_map_lock;
+ adf_os_time_t start_time;
+ adf_os_time_t last_time;
+ adf_os_time_t total_pause_time;
+ adf_os_time_t total_unpause_time;
+
uint8_t history_index;
struct hdd_netif_queue_history
queue_oper_history[WLAN_HDD_MAX_HISTORY_ENTRY];
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index af22e5d91f19..9a36dd29b738 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -7135,6 +7135,8 @@ hdd_adapter_t* hdd_wlan_create_ap_dev(hdd_context_t *pHddCtx,
spin_lock_init(&pHostapdAdapter->pause_map_lock);
pHostapdAdapter->last_tx_jiffies = jiffies;
pHostapdAdapter->bug_report_count = 0;
+ pHostapdAdapter->start_time =
+ pHostapdAdapter->last_time = vos_system_ticks();
}
return pHostapdAdapter;
}
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 2944b6ac054a..fd40d77bb854 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -10140,6 +10140,7 @@ static hdd_adapter_t* hdd_alloc_station_adapter(hdd_context_t *pHddCtx,
spin_lock_init(&pAdapter->pause_map_lock);
pAdapter->last_tx_jiffies = jiffies;
pAdapter->bug_report_count = 0;
+ pAdapter->start_time = pAdapter->last_time = vos_system_ticks();
}
return pAdapter;
@@ -13729,16 +13730,30 @@ static inline void
wlan_hdd_display_adapter_netif_queue_history(hdd_adapter_t *adapter)
{
int i;
+ adf_os_time_t total, pause, unpause, curr_time;
if (!adapter)
return;
-
- hddLog(LOGE, FL("Session_id %d device mode %d current index %d"),
- adapter->sessionId, adapter->device_mode,
- adapter->history_index);
+ hddLog(LOGE, FL("Session_id %d device mode %d"),
+ adapter->sessionId, adapter->device_mode);
hddLog(LOGE, "Netif queue operation statistics:");
hddLog(LOGE, "Current pause_map value %x", adapter->pause_map);
+ curr_time = vos_system_ticks();
+ total = curr_time - adapter->start_time;
+ if (adapter->pause_map) {
+ pause = adapter->total_pause_time +
+ curr_time - adapter->last_time;
+ unpause = adapter->total_unpause_time;
+ } else {
+ unpause = adapter->total_unpause_time +
+ curr_time - adapter->last_time;
+ pause = adapter->total_pause_time;
+ }
+ hddLog(LOGE, "Total: %ums Pause: %ums Unpause: %ums",
+ vos_system_ticks_to_msecs(total),
+ vos_system_ticks_to_msecs(pause),
+ vos_system_ticks_to_msecs(unpause));
hddLog(LOGE, " reason_type: pause_cnt: unpause_cnt");
for (i = 0; i < WLAN_REASON_TYPE_MAX; i++) {
@@ -13748,7 +13763,8 @@ wlan_hdd_display_adapter_netif_queue_history(hdd_adapter_t *adapter)
adapter->queue_oper_stats[i].unpause_count);
}
- hddLog(LOGE, "Netif queue operation history:");
+ hddLog(LOGE, "Netif queue operation history: current index %d",
+ adapter->history_index);
hddLog(LOGE, "index: time: action_type: reason_type: pause_map");
for (i = 0; i < WLAN_HDD_MAX_HISTORY_ENTRY; i++) {
@@ -13808,6 +13824,10 @@ void wlan_hdd_clear_netif_queue_history(hdd_context_t *hdd_ctx)
vos_mem_zero(adapter->queue_oper_history,
sizeof(adapter->queue_oper_history));
+ adapter->history_index = 0;
+ adapter->start_time = adapter->last_time = vos_system_ticks();
+ adapter->total_pause_time = 0;
+ adapter->total_unpause_time = 0;
status = hdd_get_next_adapter(hdd_ctx, adapter_node, &next);
adapter_node = next;
}
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index 09cbd4b1039f..66ab1d251c1a 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -1457,7 +1457,7 @@ const char *hdd_reason_type_to_string(enum netif_reason_type reason)
CASE_RETURN_STRING(WLAN_CONTROL_PATH);
CASE_RETURN_STRING(WLAN_DATA_FLOW_CONTROL);
default:
- return "Unknown";
+ return "Invalid";
}
}
@@ -1483,7 +1483,7 @@ const char *hdd_action_type_to_string(enum netif_action_type action)
CASE_RETURN_STRING(WLAN_NETIF_CARRIER_ON);
CASE_RETURN_STRING(WLAN_NETIF_CARRIER_OFF);
default:
- return "Unknown";
+ return "Invalid";
}
}
@@ -1535,6 +1535,34 @@ static void wlan_hdd_update_txq_timestamp(struct net_device *dev)
}
/**
+ * wlan_hdd_update_unpause_time() - update unpause time
+ * @adapter: hdd adapter handle
+ *
+ * Return: none
+ */
+static void wlan_hdd_update_unpause_time(hdd_adapter_t *adapter)
+{
+ adf_os_time_t curr_time = vos_system_ticks();
+
+ adapter->total_unpause_time += curr_time - adapter->last_time;
+ adapter->last_time = curr_time;
+}
+
+/**
+ * wlan_hdd_update_pause_time() - update pause time
+ * @adapter: hdd adapter handle
+ *
+ * Return: none
+ */
+static void wlan_hdd_update_pause_time(hdd_adapter_t *adapter)
+{
+ adf_os_time_t curr_time = vos_system_ticks();
+
+ adapter->total_pause_time += curr_time - adapter->last_time;
+ adapter->last_time = curr_time;
+}
+
+/**
* wlan_hdd_netif_queue_control() - Use for netif_queue related actions
* @adapter: adapter handle
* @action: action type
@@ -1569,6 +1597,7 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
if (!adapter->pause_map) {
netif_tx_stop_all_queues(adapter->dev);
wlan_hdd_update_txq_timestamp(adapter->dev);
+ wlan_hdd_update_unpause_time(adapter);
}
adapter->pause_map |= (1 << reason);
spin_unlock_bh(&adapter->pause_map_lock);
@@ -1577,16 +1606,20 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
case WLAN_START_ALL_NETIF_QUEUE:
spin_lock_bh(&adapter->pause_map_lock);
adapter->pause_map &= ~(1 << reason);
- if (!adapter->pause_map)
+ if (!adapter->pause_map) {
netif_tx_start_all_queues(adapter->dev);
+ wlan_hdd_update_pause_time(adapter);
+ }
spin_unlock_bh(&adapter->pause_map_lock);
break;
case WLAN_WAKE_ALL_NETIF_QUEUE:
spin_lock_bh(&adapter->pause_map_lock);
adapter->pause_map &= ~(1 << reason);
- if (!adapter->pause_map)
+ if (!adapter->pause_map) {
netif_tx_wake_all_queues(adapter->dev);
+ wlan_hdd_update_pause_time(adapter);
+ }
spin_unlock_bh(&adapter->pause_map_lock);
break;
@@ -1595,6 +1628,7 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
if (!adapter->pause_map) {
netif_tx_stop_all_queues(adapter->dev);
wlan_hdd_update_txq_timestamp(adapter->dev);
+ wlan_hdd_update_unpause_time(adapter);
}
adapter->pause_map |= (1 << reason);
netif_carrier_off(adapter->dev);
@@ -1605,8 +1639,10 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
spin_lock_bh(&adapter->pause_map_lock);
netif_carrier_on(adapter->dev);
adapter->pause_map &= ~(1 << reason);
- if (!adapter->pause_map)
+ if (!adapter->pause_map) {
netif_tx_start_all_queues(adapter->dev);
+ wlan_hdd_update_pause_time(adapter);
+ }
spin_unlock_bh(&adapter->pause_map_lock);
break;
@@ -1615,6 +1651,7 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
if (!adapter->pause_map) {
netif_tx_disable(adapter->dev);
wlan_hdd_update_txq_timestamp(adapter->dev);
+ wlan_hdd_update_unpause_time(adapter);
}
adapter->pause_map |= (1 << reason);
spin_unlock_bh(&adapter->pause_map_lock);
@@ -1625,6 +1662,7 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
if (!adapter->pause_map) {
netif_tx_disable(adapter->dev);
wlan_hdd_update_txq_timestamp(adapter->dev);
+ wlan_hdd_update_unpause_time(adapter);
}
adapter->pause_map |= (1 << reason);
netif_carrier_off(adapter->dev);
diff --git a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
index 69d8b4d5b9f1..5ee07f95bc05 100644
--- a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
+++ b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
@@ -80,7 +80,7 @@ enum wlan_op_mode {
* @WLAN_NETIF_CARRIER_OFF: off carrier
*/
enum netif_action_type {
- WLAN_STOP_ALL_NETIF_QUEUE,
+ WLAN_STOP_ALL_NETIF_QUEUE = 1,
WLAN_START_ALL_NETIF_QUEUE,
WLAN_WAKE_ALL_NETIF_QUEUE,
WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER,
@@ -99,7 +99,7 @@ enum netif_action_type {
* @WLAN_REASON_TYPE_MAX: max netif reason
*/
enum netif_reason_type {
- WLAN_CONTROL_PATH,
+ WLAN_CONTROL_PATH = 1,
WLAN_DATA_FLOW_CONTROL,
WLAN_REASON_TYPE_MAX,
};