From e63d674aa86234ac254f983f2ec81b5eba627cc8 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Tue, 5 May 2015 11:11:53 +0530 Subject: qcacld: Set the hdd state to not connected if disconnect timeout. If disconnect command is queued in SME and same time the connect is in progress which failed eventualy, driver will not call the disconnect handler leading to the wait for disconnect handler timeout. This timeout will leave the hdd state as disconneting and thus the next connect commands will always try to disconnect thinking that disconnect is still in progress leading to connect return with failure. With this fix hdd will set the hdd state from disconnecting to not connected even if disconnect timeout. Change-Id: I349bfe129d476894bc60615477818245cb131a9b CRs-Fixed: 832623 --- CORE/HDD/src/wlan_hdd_cfg80211.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index ca81036881ed..3d3c0e1f5345 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -14172,7 +14172,7 @@ static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy, */ int wlan_hdd_disconnect( hdd_adapter_t *pAdapter, u16 reason ) { - int status; + int status, result = 0; unsigned long rc; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); @@ -14209,7 +14209,8 @@ int wlan_hdd_disconnect( hdd_adapter_t *pAdapter, u16 reason ) "%s csrRoamDisconnect failure, returned %d", __func__, (int)status ); pHddStaCtx->staDebugState = status; - return -EINVAL; + result = -EINVAL; + goto disconnected; } rc = wait_for_completion_timeout( &pAdapter->disconnect_comp_var, @@ -14218,7 +14219,7 @@ int wlan_hdd_disconnect( hdd_adapter_t *pAdapter, u16 reason ) if (!rc) { hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failed to disconnect, timed out", __func__); - return -ETIMEDOUT; + result = -ETIMEDOUT; } disconnected: @@ -14227,7 +14228,7 @@ disconnected: hdd_connSetConnectionState(pAdapter, eConnectionState_NotConnected); - return 0; + return result; } -- cgit v1.2.3 From 77b23fae4c98da8fd9cbda8170ce409b25281bea Mon Sep 17 00:00:00 2001 From: Nirav Shah Date: Wed, 1 Apr 2015 11:19:03 +0530 Subject: qcacld: Add tx/rx packet histogram support Add support for tx/rx packets histogram as part of dumpStats command. CRs-Fixed: 826395 Change-Id: I08dc8022794b3773a6a840e769273002b5096322 --- CORE/CLD_TXRX/TXRX/ol_rx.c | 13 ++++++ CORE/CLD_TXRX/TXRX/ol_tx.c | 13 ++++++ CORE/CLD_TXRX/TXRX/ol_txrx.c | 83 +++++++++++++++++++++++++++++++++ CORE/CLD_TXRX/TXRX/ol_txrx_types.h | 11 +++++ CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h | 13 +++--- 5 files changed, 127 insertions(+), 6 deletions(-) diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c index 5a9df691f62e..065719b53a34 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx.c @@ -1018,6 +1018,13 @@ DONE: OL_RX_PEER_STATS_UPDATE(peer, msdu); OL_RX_ERR_STATISTICS_1(pdev, vdev, peer, rx_desc, OL_RX_ERR_NONE); TXRX_STATS_MSDU_INCR(vdev->pdev, rx.delivered, msdu); + + adf_os_spin_lock_bh(&pdev->txrx_histogram_lock); + if (pdev->txrx_histogram_count < + TXRX_DATA_HISTROGRAM_NUM_INTERVALS) + pdev->rx_pkt_histrogram[vdev->pdev->txrx_histogram_count]++; + adf_os_spin_unlock_bh(&pdev->txrx_histogram_lock); + OL_TXRX_LIST_APPEND(deliver_list_head, deliver_list_tail, msdu); } msdu = next; @@ -1207,6 +1214,12 @@ ol_rx_in_order_deliver( OL_RX_ERR_STATISTICS_1(vdev->pdev, vdev, peer, rx_desc, OL_RX_ERR_NONE); TXRX_STATS_MSDU_INCR(vdev->pdev, rx.delivered, msdu); + adf_os_spin_lock_bh(&vdev->pdev->txrx_histogram_lock); + if (vdev->pdev->txrx_histogram_count < + TXRX_DATA_HISTROGRAM_NUM_INTERVALS) + vdev->pdev->rx_pkt_histrogram[vdev->pdev->txrx_histogram_count]++; + adf_os_spin_unlock_bh(&vdev->pdev->txrx_histogram_lock); + msdu = next; } diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.c b/CORE/CLD_TXRX/TXRX/ol_tx.c index 3b4ef4987864..593c2aaf3970 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx.c +++ b/CORE/CLD_TXRX/TXRX/ol_tx.c @@ -91,6 +91,13 @@ ol_tx_ll(ol_txrx_vdev_handle vdev, adf_nbuf_t msdu_list) msdu_info.htt.info.ext_tid = adf_nbuf_get_tid(msdu); msdu_info.peer = NULL; + + adf_os_spin_lock_bh(&vdev->pdev->txrx_histogram_lock); + if (vdev->pdev->txrx_histogram_count < + TXRX_DATA_HISTROGRAM_NUM_INTERVALS) + vdev->pdev->tx_pkt_histrogram[vdev->pdev->txrx_histogram_count]++; + adf_os_spin_unlock_bh(&vdev->pdev->txrx_histogram_lock); + ol_tx_prepare_ll(tx_desc, vdev, msdu, &msdu_info); /* @@ -579,6 +586,12 @@ ol_tx_hl_base( */ next = adf_nbuf_next(msdu); + adf_os_spin_lock_bh(&pdev->txrx_histogram_lock); + if (pdev->txrx_histogram_count < + TXRX_DATA_HISTROGRAM_NUM_INTERVALS) + pdev->tx_pkt_histrogram[vdev->pdev->txrx_histogram_count]++; + adf_os_spin_unlock_bh(&pdev->txrx_histogram_lock); + #if defined(CONFIG_TX_DESC_HI_PRIO_RESERVE) if (adf_os_atomic_read(&pdev->tx_queue.rsrc_cnt) > TXRX_HL_TX_DESC_HI_PRIO_RESERVED) { diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c index ff85ca21b600..664d545c0442 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c @@ -315,6 +315,20 @@ credit_update: } #endif +void ol_txrx_pdev_histogram_timer(void *context) +{ + struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)context; + + adf_os_spin_lock_bh(&pdev->txrx_histogram_lock); + pdev->txrx_histogram_count++; + adf_os_spin_unlock_bh(&pdev->txrx_histogram_lock); + + if (pdev->txrx_histogram_count < TXRX_DATA_HISTROGRAM_NUM_INTERVALS) { + adf_os_timer_start(&pdev->txrx_histogram_timer, + TXRX_DATA_HISTROGRAM_GRANULARITY); + } +} + ol_txrx_pdev_handle ol_txrx_pdev_attach( ol_pdev_handle ctrl_pdev, @@ -764,6 +778,18 @@ ol_txrx_pdev_attach( pdev->tid_to_ac[OL_TX_NUM_TIDS + OL_TX_VDEV_DEFAULT_MGMT] = OL_TX_SCHED_WRR_ADV_CAT_MCAST_MGMT; + + adf_os_spinlock_init(&pdev->txrx_histogram_lock); + pdev->txrx_histogram_count = 0; + adf_os_timer_init( + pdev->osdev, + &pdev->txrx_histogram_timer, + ol_txrx_pdev_histogram_timer, + pdev); + + adf_os_timer_start(&pdev->txrx_histogram_timer, + TXRX_DATA_HISTROGRAM_GRANULARITY); + return pdev; /* success */ fail8: @@ -839,6 +865,11 @@ ol_txrx_pdev_detach(ol_txrx_pdev_handle pdev, int force) adf_os_timer_free(&pdev->tx_throttle.tx_timer); #endif #endif + + adf_os_timer_cancel(&pdev->txrx_histogram_timer); + adf_os_timer_free(&pdev->txrx_histogram_timer); + adf_os_spinlock_destroy(&pdev->txrx_histogram_lock); + if (force) { /* * The assertion above confirms that all vdevs within this pdev @@ -2199,6 +2230,52 @@ ol_txrx_stats_publish(ol_txrx_pdev_handle pdev, struct ol_txrx_stats *buf) } #endif /* TXRX_STATS_LEVEL */ +void +ol_txrx_histogram_display(ol_txrx_pdev_handle pdev) +{ + u_int16_t i; + u_int16_t rx_pkt_histrogram[TXRX_DATA_HISTROGRAM_NUM_INTERVALS]; + u_int16_t tx_pkt_histrogram[TXRX_DATA_HISTROGRAM_NUM_INTERVALS]; + + adf_os_spin_lock_bh(&pdev->txrx_histogram_lock); + adf_os_mem_copy(&rx_pkt_histrogram, &pdev->rx_pkt_histrogram, + sizeof(rx_pkt_histrogram)); + adf_os_mem_copy(&tx_pkt_histrogram, &pdev->tx_pkt_histrogram, + sizeof(tx_pkt_histrogram)); + adf_os_spin_unlock_bh(&pdev->txrx_histogram_lock); + + for (i=0; i < TXRX_DATA_HISTROGRAM_NUM_INTERVALS; i++) { + if (i % 10 == 0) { + adf_os_print("\n: rx_packet_histrogram[%d...%d]: ", i, i+10); + } + adf_os_print("%d,", rx_pkt_histrogram[i]); + } + adf_os_print("\n"); + for (i=0; i < TXRX_DATA_HISTROGRAM_NUM_INTERVALS; i++) { + if (i % 10 == 0) { + adf_os_print("\n: tx_packet_histrogram[%d...%d]: ", i, i+10); + } + adf_os_print("%d,", tx_pkt_histrogram[i]); + } + adf_os_print("\n"); +} + +void +ol_txrx_histogram_clear(ol_txrx_pdev_handle pdev) +{ + + adf_os_timer_cancel(&pdev->txrx_histogram_timer); + adf_os_spin_lock_bh(&pdev->txrx_histogram_lock); + pdev->txrx_histogram_count = 0; + adf_os_mem_zero(&pdev->rx_pkt_histrogram, sizeof(pdev->rx_pkt_histrogram)); + adf_os_mem_zero(&pdev->tx_pkt_histrogram, sizeof(pdev->tx_pkt_histrogram)); + adf_os_spin_unlock_bh(&pdev->txrx_histogram_lock); + + adf_os_timer_start(&pdev->txrx_histogram_timer, + TXRX_DATA_HISTROGRAM_GRANULARITY); + +} + #if defined(ENABLE_TXRX_PROT_ANALYZE) void @@ -2413,6 +2490,9 @@ void ol_txrx_display_stats(struct ol_txrx_pdev_t *pdev, uint16_t value) case WLAN_TXRX_STATS: ol_txrx_stats_display(pdev); break; + case WLAN_TXRX_HIST_STATS: + ol_txrx_histogram_display(pdev); + break; #ifdef CONFIG_HL_SUPPORT case WLAN_SCHEDULER_STATS: ol_tx_sched_cur_state_display(pdev); @@ -2448,6 +2528,9 @@ void ol_txrx_clear_stats(struct ol_txrx_pdev_t *pdev, uint16_t value) case WLAN_TXRX_STATS: ol_txrx_stats_clear(pdev); break; + case WLAN_TXRX_HIST_STATS: + ol_txrx_histogram_clear(pdev); + break; #ifdef CONFIG_HL_SUPPORT case WLAN_SCHEDULER_STATS: ol_tx_sched_stats_clear(pdev); diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h index f4689f29257f..d4b526d9aed1 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h @@ -48,6 +48,7 @@ #include "ol_htt_rx_api.h" #include "wlan_qct_tl.h" #include + /* * The target may allocate multiple IDs for a peer. * In particular, the target may allocate one ID to represent the @@ -80,6 +81,10 @@ #define OL_TX_MUTEX_TYPE adf_os_spinlock_t #define OL_RX_MUTEX_TYPE adf_os_spinlock_t +/* TXRX Histogram defines */ +#define TXRX_DATA_HISTROGRAM_GRANULARITY 1000 +#define TXRX_DATA_HISTROGRAM_NUM_INTERVALS 100 + struct ol_txrx_pdev_t; struct ol_txrx_vdev_t; struct ol_txrx_peer_t; @@ -762,6 +767,12 @@ struct ol_txrx_pdev_t { u_int8_t ocb_peer_valid; struct ol_txrx_peer_t *ocb_peer; int tid_to_ac[OL_TX_NUM_TIDS + OL_TX_VDEV_NUM_QUEUES]; + + adf_os_spinlock_t txrx_histogram_lock; + adf_os_timer_t txrx_histogram_timer; + u_int16_t txrx_histogram_count; + u_int16_t rx_pkt_histrogram[TXRX_DATA_HISTROGRAM_NUM_INTERVALS]; + u_int16_t tx_pkt_histrogram[TXRX_DATA_HISTROGRAM_NUM_INTERVALS]; }; struct ol_txrx_vdev_t { diff --git a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h index 79550877bc04..7c73a8916fee 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h +++ b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h @@ -65,13 +65,14 @@ enum wlan_op_mode { #define OL_TXQ_PAUSE_REASON_VDEV_SUSPEND (1 << 4) /* command options for dumpStats*/ -#define WLAN_HDD_STATS 0 -#define WLAN_TXRX_STATS 1 +#define WLAN_HDD_STATS 0 +#define WLAN_TXRX_STATS 1 +#define WLAN_TXRX_HIST_STATS 2 #ifdef CONFIG_HL_SUPPORT -#define WLAN_SCHEDULER_STATS 2 -#define WLAN_TX_QUEUE_STATS 3 -#define WLAN_BUNDLE_STATS 4 -#define WLAN_CREDIT_STATS 5 +#define WLAN_SCHEDULER_STATS 21 +#define WLAN_TX_QUEUE_STATS 22 +#define WLAN_BUNDLE_STATS 23 +#define WLAN_CREDIT_STATS 24 #endif /** -- cgit v1.2.3 From 056c6be57e2188aa98e110a13be6c90f0c03054c Mon Sep 17 00:00:00 2001 From: Nirav Shah Date: Thu, 26 Mar 2015 17:54:00 +0530 Subject: qcacld: Add packets recieved per completion histogram Add statistics for packets received per tx completion interrupt and provide histogram as part of txrx statistics. CRs-Fixed: 826395 Change-Id: Ifae24942e2cc6904fea7ac023530362b376f3e8e --- CORE/CLD_TXRX/TXRX/ol_txrx.c | 18 ++++++++++ CORE/CLD_TXRX/TXRX/ol_txrx_internal.h | 67 +++++++++++++++++++++++------------ CORE/SERVICES/COMMON/ol_txrx_stats.h | 11 ++++++ 3 files changed, 74 insertions(+), 22 deletions(-) diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c index 664d545c0442..66ab7a74b926 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c @@ -2188,6 +2188,24 @@ ol_txrx_stats_display(ol_txrx_pdev_handle pdev) pdev->stats.pub.tx.dropped.target_discard.bytes, pdev->stats.pub.tx.dropped.no_ack.pkts, pdev->stats.pub.tx.dropped.no_ack.bytes); + adf_os_print( + "Tx completion per interrupt:\n" + "Single Packet %d\n" + " 2-10 Packets %d\n" + "11-20 Packets %d\n" + "21-30 Packets %d\n" + "31-40 Packets %d\n" + "41-50 Packets %d\n" + "51-60 Packets %d\n" + " 60+ Packets %d\n", + pdev->stats.pub.tx.comp_histogram.pkts_1, + pdev->stats.pub.tx.comp_histogram.pkts_2_10, + pdev->stats.pub.tx.comp_histogram.pkts_11_20, + pdev->stats.pub.tx.comp_histogram.pkts_21_30, + pdev->stats.pub.tx.comp_histogram.pkts_31_40, + pdev->stats.pub.tx.comp_histogram.pkts_41_50, + pdev->stats.pub.tx.comp_histogram.pkts_51_60, + pdev->stats.pub.tx.comp_histogram.pkts_61_plus); } VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_ERROR, " rx: %lld ppdus, %lld mpdus, %lld msdus, %lld bytes, %lld errs", diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_internal.h b/CORE/CLD_TXRX/TXRX/ol_txrx_internal.h index bbe5c38e439d..f09db5ce9901 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_internal.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_internal.h @@ -245,28 +245,51 @@ ol_rx_mpdu_list_next( break; \ } -#define TXRX_STATS_UPDATE_TX_STATS(_pdev, _status, _p_cntrs, _b_cntrs) \ -do { \ - switch (status) { \ - case htt_tx_status_ok: \ - TXRX_STATS_ADD(_pdev, pub.tx.delivered.pkts, _p_cntrs); \ - TXRX_STATS_ADD(_pdev, pub.tx.delivered.bytes, _b_cntrs); \ - break; \ - case htt_tx_status_discard: \ - TXRX_STATS_ADD(_pdev, pub.tx.dropped.target_discard.pkts, _p_cntrs); \ - TXRX_STATS_ADD(_pdev, pub.tx.dropped.target_discard.bytes, _b_cntrs); \ - break; \ - case htt_tx_status_no_ack: \ - TXRX_STATS_ADD(_pdev, pub.tx.dropped.no_ack.pkts, _p_cntrs); \ - TXRX_STATS_ADD(_pdev, pub.tx.dropped.no_ack.bytes, _b_cntrs); \ - break; \ - case htt_tx_status_download_fail: \ - TXRX_STATS_ADD(_pdev, pub.tx.dropped.download_fail.pkts, _p_cntrs); \ - TXRX_STATS_ADD(_pdev, pub.tx.dropped.download_fail.bytes, _b_cntrs); \ - break; \ - default: \ - break; \ - } \ +#define TXRX_STATS_UPDATE_TX_COMP_HISTOGRAM(_pdev, _p_cntrs) \ +do { \ + if (_p_cntrs > 60) \ + TXRX_STATS_ADD(_pdev,pub.tx.comp_histogram.pkts_61_plus,1); \ + else if (_p_cntrs > 50) \ + TXRX_STATS_ADD(_pdev,pub.tx.comp_histogram.pkts_51_60,1); \ + else if (_p_cntrs > 40) \ + TXRX_STATS_ADD(_pdev,pub.tx.comp_histogram.pkts_41_50,1); \ + else if (_p_cntrs > 30) \ + TXRX_STATS_ADD(_pdev,pub.tx.comp_histogram.pkts_31_40,1); \ + else if (_p_cntrs > 20) \ + TXRX_STATS_ADD(_pdev,pub.tx.comp_histogram.pkts_21_30,1); \ + else if (_p_cntrs > 10) \ + TXRX_STATS_ADD(_pdev,pub.tx.comp_histogram.pkts_11_20,1); \ + else if (_p_cntrs > 2) \ + TXRX_STATS_ADD(_pdev,pub.tx.comp_histogram.pkts_2_10,1); \ + else \ + TXRX_STATS_ADD(_pdev,pub.tx.comp_histogram.pkts_1,1); \ + \ +} while (0) + + +#define TXRX_STATS_UPDATE_TX_STATS(_pdev, _status, _p_cntrs, _b_cntrs) \ +do { \ + switch (status) { \ + case htt_tx_status_ok: \ + TXRX_STATS_ADD(_pdev, pub.tx.delivered.pkts, _p_cntrs); \ + TXRX_STATS_ADD(_pdev, pub.tx.delivered.bytes, _b_cntrs); \ + break; \ + case htt_tx_status_discard: \ + TXRX_STATS_ADD(_pdev, pub.tx.dropped.target_discard.pkts, _p_cntrs); \ + TXRX_STATS_ADD(_pdev, pub.tx.dropped.target_discard.bytes, _b_cntrs); \ + break; \ + case htt_tx_status_no_ack: \ + TXRX_STATS_ADD(_pdev, pub.tx.dropped.no_ack.pkts, _p_cntrs); \ + TXRX_STATS_ADD(_pdev, pub.tx.dropped.no_ack.bytes, _b_cntrs); \ + break; \ + case htt_tx_status_download_fail: \ + TXRX_STATS_ADD(_pdev, pub.tx.dropped.download_fail.pkts, _p_cntrs); \ + TXRX_STATS_ADD(_pdev, pub.tx.dropped.download_fail.bytes, _b_cntrs); \ + break; \ + default: \ + break; \ + } \ + TXRX_STATS_UPDATE_TX_COMP_HISTOGRAM(_pdev, _p_cntrs); \ } while (0) #elif /*---*/ TXRX_STATS_LEVEL == TXRX_STATS_LEVEL_BASIC diff --git a/CORE/SERVICES/COMMON/ol_txrx_stats.h b/CORE/SERVICES/COMMON/ol_txrx_stats.h index 1e2b78dde248..bd64f5ce921e 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_stats.h +++ b/CORE/SERVICES/COMMON/ol_txrx_stats.h @@ -68,6 +68,17 @@ struct ol_txrx_stats { /* MSDUs which the target sent but couldn't get an ack for */ ol_txrx_stats_elem no_ack; } dropped; + /* contains information of packets recevied per tx completion*/ + struct { + u_int32_t pkts_1; + u_int32_t pkts_2_10; + u_int32_t pkts_11_20; + u_int32_t pkts_21_30; + u_int32_t pkts_31_40; + u_int32_t pkts_41_50; + u_int32_t pkts_51_60; + u_int32_t pkts_61_plus; + } comp_histogram; } tx; struct { /* MSDUs given to the OS shim */ -- cgit v1.2.3 From 2948afce0d868f52c8ba4b002c3d5cf73a620c8c Mon Sep 17 00:00:00 2001 From: Nirav Shah Date: Thu, 26 Mar 2015 16:38:14 +0530 Subject: qcacld: Add rx forward stats in txrx stats Add statistics for packets received for intra bss forward as part of txrx stats. CRs-Fixed: 826395 Change-Id: Id5016dc891c67c7823954556c97014271a71de83 --- CORE/CLD_TXRX/TXRX/ol_rx_fwd.c | 11 +++++++---- CORE/CLD_TXRX/TXRX/ol_txrx.c | 34 +++++++++++++++++----------------- CORE/SERVICES/COMMON/ol_txrx_stats.h | 14 ++++++++++++-- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c index 7a71fe01d92a..f37f302d632e 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c @@ -130,7 +130,6 @@ ol_rx_fwd_to_tx(struct ol_txrx_vdev_t *vdev, adf_nbuf_t msdu) */ adf_nbuf_map_single(pdev->osdev, msdu, ADF_OS_DMA_TO_DEVICE); adf_nbuf_set_next(msdu, NULL); /* add NULL terminator */ - TXRX_STATS_MSDU_INCR(vdev->pdev, rx.forwarded, msdu); /* for HL, point to payload before send to tx again.*/ if (pdev->cfg.is_high_latency) { @@ -217,13 +216,17 @@ ol_rx_fwd_check( htt_rx_msdu_desc_free(pdev->htt_pdev, msdu); ol_rx_fwd_to_tx(tx_vdev, msdu); msdu = NULL; /* already handled this MSDU */ + TXRX_STATS_ADD(pdev, pub.rx.intra_bss_fwd.packets_fwd, 1); } else { - adf_nbuf_t copy; - copy = adf_nbuf_copy(msdu); + adf_nbuf_t copy; + copy = adf_nbuf_copy(msdu); if (copy) { - ol_rx_fwd_to_tx(tx_vdev, copy); + ol_rx_fwd_to_tx(tx_vdev, copy); } + TXRX_STATS_ADD(pdev, pub.rx.intra_bss_fwd.packets_stack_n_fwd, 1); } + } else { + TXRX_STATS_ADD(pdev, pub.rx.intra_bss_fwd.packets_stack, 1); } if (msdu) { /* send this frame to the OS */ diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c index 66ab7a74b926..b92cf8089491 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c @@ -2156,18 +2156,18 @@ void ol_txrx_stats_display(ol_txrx_pdev_handle pdev) { - VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_ERROR, "TXRX Stats:"); + adf_os_print("TXRX Stats:\n"); if (TXRX_STATS_LEVEL == TXRX_STATS_LEVEL_BASIC) { - VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_ERROR, - " tx: %lld msdus (%lld B) rejected %lld (%lld B)", + adf_os_print( + " tx: %lld msdus (%lld B) rejected %lld (%lld B) \n", pdev->stats.pub.tx.delivered.pkts, pdev->stats.pub.tx.delivered.bytes, pdev->stats.pub.tx.dropped.host_reject.pkts, pdev->stats.pub.tx.dropped.host_reject.bytes); } else { /* full */ - VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_INFO, - " tx: sent %lld msdus (%lld B), rejected %lld (%lld B)" - " dropped %lld (%lld B)\n", + adf_os_print( + " tx: sent %lld msdus (%lld B), rejected %lld (%lld B)\n" + " dropped %lld (%lld B)\n", pdev->stats.pub.tx.delivered.pkts, pdev->stats.pub.tx.delivered.bytes, pdev->stats.pub.tx.dropped.host_reject.pkts, @@ -2178,7 +2178,7 @@ ol_txrx_stats_display(ol_txrx_pdev_handle pdev) pdev->stats.pub.tx.dropped.download_fail.bytes + pdev->stats.pub.tx.dropped.target_discard.bytes + pdev->stats.pub.tx.dropped.no_ack.bytes); - VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_INFO, + adf_os_print( " download fail: %lld (%lld B), " "target discard: %lld (%lld B), " "no ack: %lld (%lld B)\n", @@ -2207,19 +2207,19 @@ ol_txrx_stats_display(ol_txrx_pdev_handle pdev) pdev->stats.pub.tx.comp_histogram.pkts_51_60, pdev->stats.pub.tx.comp_histogram.pkts_61_plus); } - VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_ERROR, - " rx: %lld ppdus, %lld mpdus, %lld msdus, %lld bytes, %lld errs", + adf_os_print( + " rx: %lld ppdus, %lld mpdus, %lld msdus, %lld bytes, %lld errs\n", pdev->stats.priv.rx.normal.ppdus, pdev->stats.priv.rx.normal.mpdus, pdev->stats.pub.rx.delivered.pkts, pdev->stats.pub.rx.delivered.bytes, pdev->stats.priv.rx.err.mpdu_bad); - if (TXRX_STATS_LEVEL == TXRX_STATS_LEVEL_FULL) { - VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_INFO, - " forwarded %lld msdus, %lld bytes\n", - pdev->stats.pub.rx.forwarded.pkts, - pdev->stats.pub.rx.forwarded.bytes); - } + + adf_os_print( + " fwd to stack %d, fwd to fw %d, fwd to stack & fw %d\n", + pdev->stats.pub.rx.intra_bss_fwd.packets_stack, + pdev->stats.pub.rx.intra_bss_fwd.packets_fwd, + pdev->stats.pub.rx.intra_bss_fwd.packets_stack_n_fwd); } void @@ -2230,8 +2230,8 @@ ol_txrx_stats_clear(ol_txrx_pdev_handle pdev) pdev->stats.pub.tx.delivered.bytes = 0; pdev->stats.pub.tx.dropped.host_reject.pkts = 0; pdev->stats.pub.tx.dropped.host_reject.bytes = 0; - adf_os_mem_zero(&pdev->stats.pub.rx.delivered, - sizeof(pdev->stats.pub.rx.delivered)); + adf_os_mem_zero(&pdev->stats.pub.rx, + sizeof(pdev->stats.pub.rx)); adf_os_mem_zero(&pdev->stats.priv.rx, sizeof(pdev->stats.priv.rx)); } else { /* Full */ adf_os_mem_zero(&pdev->stats, sizeof(pdev->stats)); diff --git a/CORE/SERVICES/COMMON/ol_txrx_stats.h b/CORE/SERVICES/COMMON/ol_txrx_stats.h index bd64f5ce921e..afc67d543d7f 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_stats.h +++ b/CORE/SERVICES/COMMON/ol_txrx_stats.h @@ -41,7 +41,11 @@ #define TXRX_STATS_LEVEL_FULL 2 #ifndef TXRX_STATS_LEVEL +#ifdef CONFIG_HL_SUPPORT #define TXRX_STATS_LEVEL TXRX_STATS_LEVEL_BASIC +#else +#define TXRX_STATS_LEVEL TXRX_STATS_LEVEL_FULL +#endif #endif typedef struct { @@ -83,8 +87,14 @@ struct ol_txrx_stats { struct { /* MSDUs given to the OS shim */ ol_txrx_stats_elem delivered; - /* MSDUs forwarded from the rx path to the tx path */ - ol_txrx_stats_elem forwarded; + struct { + /* MSDUs forwarded to network stack */ + u_int32_t packets_stack; + /* MSDUs forwarded from the rx path to the tx path */ + u_int32_t packets_fwd; + /* MSDUs forwarded to stack and tx path */ + u_int32_t packets_stack_n_fwd; + } intra_bss_fwd; } rx; }; -- cgit v1.2.3 From 3d6fb1f36fbf5f8e78e33d7e0243df7abd78e93a Mon Sep 17 00:00:00 2001 From: Karthick S Date: Mon, 4 May 2015 12:46:36 +0530 Subject: qcacld-2.0: Stop HIF service before HTC cleanup HIFStart is called from HTCWaitTarget in the vos_open function. If vos_open fails later, the HIFStop is not called to cleanup what is done in the HIFStart. This change fixes this issue. Change-Id: Id30f41d953e4582db57a98fff14e3f68447239f1 CRs-Fixed: 831608 --- CORE/SERVICES/HTC/htc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/CORE/SERVICES/HTC/htc.c b/CORE/SERVICES/HTC/htc.c index bdbd2fb92f8e..b48a90492a9b 100644 --- a/CORE/SERVICES/HTC/htc.c +++ b/CORE/SERVICES/HTC/htc.c @@ -291,6 +291,7 @@ void HTCDestroy(HTC_HANDLE HTCHandle) { HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle); AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+HTCDestroy .. Destroying :0x%p \n",target)); + HIFStop(HTCGetHifDevice(HTCHandle)); HTCCleanup(target); AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-HTCDestroy \n")); } -- cgit v1.2.3 From dfa6e1e74062bde4bb0667609a1927a3a74327b2 Mon Sep 17 00:00:00 2001 From: Leo Chang Date: Thu, 7 May 2015 16:18:05 -0700 Subject: qca_cld: rx packet processing optimization-kw fix kw fix for some PL WLAN kernel driver generating rx softirq per each single packet. Then application will be woken up per every packet. For high throughput use case, application should keep running state since very frequent small cycle excution. To make application make less schedule and longer sleep, rx sirq should aggregated as many as possible. underlying driver already give packet as a list, then only last packet delivered to network stack, rx sirq should be generated. Then network stack and application wake up could be optimized. Change-Id: If9fb386b8bb3e5534b168e012edf8b420978c1e2 CRs-fixed: 832552 --- CORE/HDD/src/wlan_hdd_softap_tx_rx.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c index 318e574dc31b..d3b95226066e 100644 --- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c @@ -1093,6 +1093,12 @@ VOS_STATUS hdd_softap_rx_packet_cbk(v_VOID_t *vosContext, return VOS_STATUS_E_FAILURE; } + if (!pAdapter->dev) { + VOS_TRACE(VOS_MODULE_ID_HDD_DATA, VOS_TRACE_LEVEL_FATAL, + "Invalid DEV(NULL) Drop packets"); + return VOS_STATUS_E_FAILURE; + } + ++pAdapter->hdd_stats.hddTxRxStats.rxChains; // walk the chain until all are processed @@ -1101,13 +1107,6 @@ VOS_STATUS hdd_softap_rx_packet_cbk(v_VOID_t *vosContext, while (NULL != skb) { skb_next = skb->next; skb->dev = pAdapter->dev; - if (skb->dev == NULL) { - VOS_TRACE( VOS_MODULE_ID_HDD_SAP_DATA, VOS_TRACE_LEVEL_ERROR, - "%s: ERROR!!Invalid netdevice", __func__); - kfree_skb(skb); - skb = skb_next; - continue; - } ++pAdapter->hdd_stats.hddTxRxStats.rxPackets; ++pAdapter->stats.rx_packets; -- cgit v1.2.3 From d61f8c5d516faf331bf4601e3ba2c0c967cf5f3a Mon Sep 17 00:00:00 2001 From: Krishna Kumaar Natarajan Date: Thu, 7 May 2015 17:47:52 -0700 Subject: qcacld: Fix crash while connecting to 5G AP Fix corrupted BSS descriptor to avoid crash while connecting to 5G access point. Change-Id: Ia47250901c971c081b61bb9e765bc8e4780089d2 CRs-Fixed: 833884 --- CORE/MAC/src/pe/lim/limSerDesUtils.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c index 702c371ac098..571612006145 100644 --- a/CORE/MAC/src/pe/lim/limSerDesUtils.c +++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c @@ -284,6 +284,12 @@ limGetBssDescription( tpAniSirGlobal pMac, tSirBssDescription *pBssDescription, /* 1 reserved byte padding */ pBuf += (WSCIE_PROBE_RSP_LEN + 1); len -= (WSCIE_PROBE_RSP_LEN + 1); + if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) + return eSIR_FAILURE; + + pBssDescription->tsf_delta = limGetU32(pBuf); + pBuf += sizeof(tANI_U32); + len -= sizeof(tANI_U32); if (len > 0) { -- cgit v1.2.3 From 8b4bc7b6b3ebac307b7d09432b8c8621cd768f63 Mon Sep 17 00:00:00 2001 From: "Chandrasekaran, Manishekar" Date: Thu, 7 May 2015 18:26:10 +0530 Subject: qcacld: Check wmm inactivity timer before stop and destroy Add a flag to check whether the wmm inactivity timer is initialized and started. Based on this flag, decide if we need to stop/destroy the timer or both. Change-Id: I4b9677927c085280418029140749411fe698018c CRs-Fixed: 833588 --- CORE/HDD/inc/wlan_hdd_wmm.h | 1 + CORE/HDD/src/wlan_hdd_wmm.c | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CORE/HDD/inc/wlan_hdd_wmm.h b/CORE/HDD/inc/wlan_hdd_wmm.h index 0b94fd977ae9..5e992866b94c 100644 --- a/CORE/HDD/inc/wlan_hdd_wmm.h +++ b/CORE/HDD/inc/wlan_hdd_wmm.h @@ -139,6 +139,7 @@ typedef struct hdd_wlan_wmm_status_e lastStatus; struct work_struct wmmAcSetupImplicitQos; v_U32_t magic; + bool is_inactivity_timer_running; } hdd_wmm_qos_context_t; /*! @brief WMM related per-AC state & status info diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c index 9cc5e9ed05b9..a9a595841589 100644 --- a/CORE/HDD/src/wlan_hdd_wmm.c +++ b/CORE/HDD/src/wlan_hdd_wmm.c @@ -488,12 +488,19 @@ VOS_STATUS hdd_wmm_enable_inactivity_timer(hdd_wmm_qos_context_t* pQosContext, v { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, FL("Starting inactivity timer failed on AC %d"), acType); + vos_status = vos_timer_destroy(&pAc->wmmInactivityTimer); + if (VOS_STATUS_SUCCESS != vos_status) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("Failed to destroy inactivity timer")); + } return vos_status; } pAc->wmmInactivityTime = inactivityTime; // Initialize the current tx traffic count on this AC pAc->wmmPrevTrafficCnt = pAdapter->hdd_stats.hddTxRxStats.txXmitClassifiedAC[pQosContext->acType]; + pQosContext->is_inactivity_timer_running = true; + return vos_status; } @@ -517,10 +524,23 @@ VOS_STATUS hdd_wmm_disable_inactivity_timer(hdd_wmm_qos_context_t* pQosContext) // Clear the timer and the counter pAc->wmmInactivityTime = 0; pAc->wmmPrevTrafficCnt = 0; - vos_timer_stop(&pAc->wmmInactivityTimer); - vos_status = vos_timer_destroy(&pAc->wmmInactivityTimer); - return vos_status; + if (pQosContext->is_inactivity_timer_running == true) { + pQosContext->is_inactivity_timer_running = false; + vos_status = vos_timer_stop(&pAc->wmmInactivityTimer); + if (VOS_STATUS_SUCCESS != vos_status) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("Failed to stop inactivity timer")); + return vos_status; + } + vos_status = vos_timer_destroy(&pAc->wmmInactivityTimer); + if (VOS_STATUS_SUCCESS != vos_status) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("Failed to destroy inactivity timer:Timer started")); + } + } + + return vos_status; } #endif // FEATURE_WLAN_ESE @@ -2028,6 +2048,7 @@ VOS_STATUS hdd_wmm_acquire_access( hdd_adapter_t* pAdapter, pQosContext->qosFlowId = 0; pQosContext->handle = HDD_WMM_HANDLE_IMPLICIT; pQosContext->magic = HDD_WMM_CTX_MAGIC; + pQosContext->is_inactivity_timer_running = false; #ifdef CONFIG_CNSS cnss_init_work(&pQosContext->wmmAcSetupImplicitQos, -- cgit v1.2.3 From f1154e740855dd4389c64210b336ac84dea1ff89 Mon Sep 17 00:00:00 2001 From: Girish Gowli Date: Tue, 5 May 2015 15:44:22 -0700 Subject: qcacld-2.0: Add compat changes for __iw_set_var_ints_getnone This is a prima to qcacld-2.0 propagation. Ioctl command handler function __iw_set_var_ints_getnone does not require compat handling for SAP interface, but the compat handling is required for STA interface. Adding function iw_hdd_set_var_ints_getnone in STA interface for compat handling before calling __iw_set_var_ints_getnone function. Change-Id: Ifecc552c2509cfa298435f50f1aa6e096a52214a CRs-Fixed: 759255 --- CORE/HDD/src/wlan_hdd_wext.c | 81 +++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index f8f0b862ae3e..847fcc7f221e 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -7446,29 +7446,23 @@ static int __iw_set_var_ints_getnone(struct net_device *dev, hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); int sub_cmd; - int apps_args[MAX_VAR_ARGS] = {0}; - int num_args; + int *apps_args = (int *) extra; hdd_station_ctx_t *pStaCtx = NULL ; hdd_ap_ctx_t *pAPCtx = NULL; int cmd = 0; int staId = 0; - struct iw_point s_priv_data; hdd_context_t *pHddCtx = NULL; - int ret = 0; - - /* helper function to get iwreq_data with compat handling. */ - if (hdd_priv_get_data(&s_priv_data, wrqu)) { - return -EINVAL; - } + int ret = 0, num_args; - if (NULL == s_priv_data.pointer) { - return -EINVAL; + if (extra == NULL) { + hddLog(LOGE, FL("NULL extra buffer pointer")); + return -EINVAL; } - sub_cmd = s_priv_data.flags; - num_args = s_priv_data.length; + sub_cmd = wrqu->data.flags; + num_args = wrqu->data.length; - hddLog(LOG1, FL("Received length %d"), s_priv_data.length); + hddLog(LOG1, FL("Received length %d"), wrqu->data.length); pHddCtx = WLAN_HDD_GET_CTX(pAdapter); ret = wlan_hdd_validate_context(pHddCtx); @@ -7477,19 +7471,6 @@ static int __iw_set_var_ints_getnone(struct net_device *dev, return ret; } - if (num_args > MAX_VAR_ARGS) - { - num_args = MAX_VAR_ARGS; - } - - /* ODD number is used for set, copy data using copy_from_user */ - if (copy_from_user(apps_args, s_priv_data.pointer, - (sizeof(int)) * num_args)) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: failed to copy data to user buffer", __func__); - return -EFAULT; - } - if(( sub_cmd == WE_MCC_CONFIG_CREDENTIAL ) || (sub_cmd == WE_MCC_CONFIG_PARAMS )) { @@ -7695,6 +7676,50 @@ static int __iw_set_var_ints_getnone(struct net_device *dev, return 0; } +/** + * iw_hdd_set_var_ints_getnone() - set var ints getnone callback + * @dev: pointer to net_device structure + * @info: pointer to iw_request_info structure + * @wrqu: pointer to iwreq_data + * @extra; extra + * + * Return: 0 on success, error number otherwise + * + */ +static int iw_hdd_set_var_ints_getnone(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + union iwreq_data u_priv_wrqu; + int apps_args[MAX_VAR_ARGS] = {0}; + int ret, num_args; + + /* Helper function to get iwreq_data with compat handling. */ + if (hdd_priv_get_data(&u_priv_wrqu.data, wrqu)) + return -EINVAL; + + if (NULL == u_priv_wrqu.data.pointer) { + hddLog(LOGE, FL("NULL data pointer")); + return -EINVAL; + } + + num_args = u_priv_wrqu.data.length; + if (num_args > MAX_VAR_ARGS) + num_args = MAX_VAR_ARGS; + + if (copy_from_user(apps_args, u_priv_wrqu.data.pointer, + (sizeof(int)) * num_args)) { + hddLog(LOGE, FL("failed to copy data from user buffer")); + return -EFAULT; + } + + vos_ssr_protect(__func__); + ret = __iw_set_var_ints_getnone(dev, info, &u_priv_wrqu, + (char *)&apps_args); + vos_ssr_unprotect(__func__); + return ret; +} + int iw_set_var_ints_getnone(struct net_device *dev, struct iw_request_info *info, @@ -9888,7 +9913,7 @@ static const iw_handler we_private[] = { [WLAN_PRIV_SET_THREE_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_three_ints_getnone, [WLAN_PRIV_GET_CHAR_SET_NONE - SIOCIWFIRSTPRIV] = iw_get_char_setnone, [WLAN_PRIV_SET_NONE_GET_NONE - SIOCIWFIRSTPRIV] = iw_setnone_getnone, //action priv ioctl - [WLAN_PRIV_SET_VAR_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_var_ints_getnone, + [WLAN_PRIV_SET_VAR_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_hdd_set_var_ints_getnone, [WLAN_PRIV_SET_NONE_GET_THREE_INT - SIOCIWFIRSTPRIV] = iw_setnone_get_threeint, [WLAN_PRIV_ADD_TSPEC - SIOCIWFIRSTPRIV] = iw_add_tspec, [WLAN_PRIV_DEL_TSPEC - SIOCIWFIRSTPRIV] = iw_del_tspec, -- cgit v1.2.3 From 970ab3632cc502233e0b03ea077ed260202f5abb Mon Sep 17 00:00:00 2001 From: Nirav Shah Date: Mon, 27 Apr 2015 14:05:06 +0530 Subject: qcacld: Reducing severity of debug print to avoid watchdog bark Reducing severity of debug print to avoid watchdog bark in ol_rx_in_order_indication_handler function. CRs-Fixed: 828313 Change-Id: Ic33bfa5293bd8139b17e93c3df73db2f80cfb83d --- CORE/CLD_TXRX/TXRX/ol_rx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c index 065719b53a34..67d17a140ac8 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx.c @@ -1174,7 +1174,7 @@ ol_rx_in_order_indication_handler( if (peer) { vdev = peer->vdev; } else { - TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, + TXRX_PRINT(TXRX_PRINT_LEVEL_INFO2, "%s: Couldn't find peer from ID 0x%x\n", __FUNCTION__, peer_id); while (head_msdu) { -- cgit v1.2.3 From c04dfd0691f97fb2cb111fb71ea016dab7ae2a20 Mon Sep 17 00:00:00 2001 From: Mahesh A Saptasagar Date: Wed, 6 May 2015 12:03:07 +0530 Subject: wlan: Correct the condition which validates size of ACL MAC list. Correct the condition which validates size of ACL MAC Address list. CRs-Fixed: 833397 Change-Id: Iec255bf6e55cf75e4523ad143669a1d03e5c9536 --- CORE/SAP/src/sapFsm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index ace582e3c755..b4a8acdd6822 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -4115,7 +4115,7 @@ sapAddMacToACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t *peerMac) v_SINT_t nRes = -1; int i; - if (NULL == macList || *size == 0 || *size > MAX_ACL_MAC_ADDRESS) { + if ((NULL == macList) || (*size > MAX_ACL_MAC_ADDRESS)) { VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, FL("either buffer is NULL or size = %d is incorrect."), *size); -- cgit v1.2.3 From fc4c5005009fb0130ac6da030dd1a84264c1122b Mon Sep 17 00:00:00 2001 From: AnjaneeDevi Kapparapu Date: Fri, 8 May 2015 12:49:42 +0530 Subject: Cafstaging Release 4.0.10.94 Cafstaging Release 4.0.10.94 Change-Id: I8429ec9429723bad80aab866b63e21160c799267 CRs-Fixed: 688141 --- CORE/MAC/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 77e577a3db56..75a335e5ba63 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 10 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 93 +#define QWLAN_VERSION_BUILD 94 -#define QWLAN_VERSIONSTR "4.0.10.93" +#define QWLAN_VERSIONSTR "4.0.10.94" #define AR6320_REV1_VERSION 0x5000000 -- cgit v1.2.3