Commit Graph

402 Commits

Author SHA1 Message Date
Dustin Brown
100201ecca qcacld-3.0: Avoid recovery trigger while recovering
Currently, cds_trigger_recovery is unconditional. Instead, avoid
triggering recovery if recovery is already in progress.

Change-Id: I5c77048701930591e0e520e07275e6f8631108a0
CRs-Fixed: 2070845
2017-08-30 10:43:49 -07:00
Zhu Jianmin
f7ffe94567 qcacld-3.0: Change log level in ol_txrx_get_tx_resource
In SAP mode, during data transfer, ifconfig down, then up in 1-5s,
Tx queue is enabled before SAP reconnect. can't find peer in
hdd_softap_hard_start_xmit, much following log in prink will lead
to watchdog timeout.
R0: wlan: [0:E :TRX] PEER [1] not found
R0: wlan: [0:E :TRX] ol_txrx_get_tx_resource: Invalid sta_id 1

Change-Id: I4b6635ac71f3bff95db67791e557cafd539f9ca4
CRS-Fixed: 2088402
2017-08-30 10:43:45 -07:00
Orhan K AKYILDIZ
a4f58e9824 qcacld-3.0: Add logs for target attach procedure
During target attach procedure, there are a number of messages sent
to the FW. Some of these sends did not check return codes. Add
return code checks and treat the codes accordingly.

Change-Id: Ib515e040b6c7e2ecc23d2d422bb359e83342fcfa
CRs-Fixed: 2064904
2017-08-30 10:42:45 -07:00
Houston Hoffman
0022711004 qcacld-3.0: Reduce log flooding in __hdd_tx_timeout
Reduce log flooding in __hdd_tx_timeout.  The single __hdd_tx_timeout
error log printed by TX_TIMEOUT_TRACE should be sufficient to
identify the error.  The debugging effort should use the driver logs.
This will ease debugging of other subsystems in the case that
the root cause is a system instability.

Change-Id: Iee3ba3c7d8d7dcd72a3a71ea4f8e4ae8d3bc17b6
CRs-Fixed: 2092183
2017-08-30 10:40:53 -07:00
bings
284f8be176 qcacld-3.0: Fix race condition that Tx is paused by flow control forever
When hdd_get_tx_resource is called, if free Tx desc is lower than low water
mark, vdev->os_q_paused will be set as 1 and WLAN_STOP_ALL_NETIF_QUEUE will
be triggered after a while. Before WLAN_STOP_ALL_NETIF_QUEUE is triggered,
if ol_tx_flow_ct_unpause_os_q is called, WLAN_WAKE_ALL_NETIF_QUEUE will be
triggered and vdev->os_q_paused will be set as 0. In such case There will
be no flow control unpaused forever.

Tx should be paused by flow control when Tx desc is lower than low water
mark, and unpaused when Tx desc is bigger than high water mark or Tx is
already paused by flow control.

Change-Id: Ib60139fd94a4fb88c92a7f8aaf886ae9d3ca4c75
CRs-Fixed: 2089149
2017-08-23 22:07:30 -07:00
Govind Singh
c701c4d9d2 qcacld-3.0: Add mb before updating the write index of remote ring
When replenishing Rx buffers driver updates the address of the
buffer and the index of rx buffer in rx ring to the firmware.

Make sure alloc index write is reflected in the memory before
FW polls the remote ring write index as compiler can reorder
the instructions based on optimizations.

Disable compile time reorder by adding a write memory barrier.

Change-Id: Icb37598e6c36b4a128b1bcd91bfb9d643bf083e2
CRs-Fixed: 2084210
2017-08-16 17:36:59 -07:00
Himanshu Agarwal
dd2196a8f5 qcacld-3.0: Do netif_rx_ni() for frames received before peer assoc
While processing of frames received before peer is registered in process
context, tcp_v4_rcv() is called which takes a spinlock and in between the
processing before spinlock can be released, it is getting preempted by
hif_napi_poll() as it gets executed in softirq context. It tries to take
the same spinlock in tcp_v4_rcv() resulting in deadlock.
Do netif_rx_ni() for frames received before peer is registered.

Change-Id: I6228984f209bb9312ed9d8f3937d6036918ff750
CRs-Fixed: 2034244
2017-08-10 01:49:27 -07:00
Will Huang
03cb2ab6ff qcacld-3.0: Add TXRX_IEEE11_AX for enum tx_peer_level
It is reported by Static Analyze tool as buffer overflow when call
into function ol_txrx_bad_peer_txctl_update_threshold, because
WLAN_WMA_IEEE80211_MAX_LEVEL is defined as 5 but TXRX_IEEE11_MAX
defined as 4, so level 4 will pass as max index value which is buffer
overflow.

Add TXRX_IEEE11_AX so TXRX_IEEE11_MAX aligns with
WLAN_WMA_IEEE80211_MAX_LEVEL.

Change-Id: I49fe348f1071648d86e456c6df63738ec507dd6c
CRs-Fixed: 2058227
2017-08-09 20:50:31 -07:00
Chris Guo
9e293a9667 qcacld-3.0: Fix synchronization issue of credit number
The target_delta and bus_delta combined with target_tx_credit
to fulfil the credit function of host.
A global lock is needed to ensure reenterable.

Change-Id: I71c006ccfe05b442706283490cd7bba4cc8a6f5f
CRs-Fixed: 964530
2017-08-09 19:37:05 -07:00
jiad
b20627788b qcacld-3.0: enable pktlog support for HL project
qcacld-2.0 to qcacld-3.0 propagation

Currently for SDIO implementation, tx comp indication is
suppressed and tx_desc is freed when htt download is done.
This leads to invalid tx_desc being referenced when pktlog
indication handler wants to collect TX-ed tx_desc information.

Fix consists of two parts:
1. When pktlog is enabled in ini, enable tx comp indication
handler just like PCIe and USB. tx_desc is still valid when
pktlog indication comes.

2. Check vdev pointer embedded in tx_desc structure. vdev
pointer is set when tx_desc is allocated and set to NULL when
tx_desc is freed. This guards against invalid tx_desc_id
from firmware.

Note that performance drops should be expected when
pktlog is enabled on HL platforms.

Change-Id: Iba9b8323b4a6e2ae17e36768bda3511f52236a2c
CRs-Fixed: 2034996
2017-08-07 20:24:18 -07:00
Yun Park
b4f591d8aa qcacld-3.0: Enable WLAN host data path support for IPA WDI3.0
Change to support WLAN Napier host autonomy data path architecture.

Change-Id: I80e8f609587d0df85d2da9fb0f41cb49e02a9d2f
CRs-Fixed: 2033368
2017-08-07 17:47:45 -07:00
Deepak Dhamdhere
b0d2ddad4e qcacld-3.0: Remove peer from peer_id_to_obj map before delete
Run through the entire peer_id_to_obj_map array and if any peer_id's
peer entry points to a particular peer, change it to NULL. Calling
this routine before deleting the peer ensures that subsequent peer_unmap
events will not access a peer object that is deleted.

CRs-Fixed: 2027846
Change-Id: I05089bece20ea070694f243feb06d222f8e50ac6
2017-08-06 20:45:02 -07:00
Lin Bai
dc00fb8fa5 qcacld-3.0: Kernel crash as incorrect DMA buffer size
When HTT attached, driver allocates DMA buffer to record each RX ring
entry, with element size - target_paddr_t, which is bus size, and may be
different from kernel's physical address size.
While in htt_rx_detach, size of qdf_dma_addr_t used for buffer free.
In case kernel built as 64-bit, and bus size as default 32-bit,
it will crash when free.

Use same element size to avoid it.

CRs-Fixed: 2087592
Change-Id: Iabe95f92ea82b736213a8b81453163229b2a3a3b
2017-08-06 11:48:34 -07:00
Frank Liu
3717379f00 qcacld-3.0: Fix invalid tx_desc access
Wrong to pass parameter by value so caller doesn't get the real allocated
tx_desc. The fix is to let ol_tx_prepare_ll return the allocated tx_desc
or NULL if fail.

Change-Id: Ic3910e45c02290ebd74766aa8f88902044decaa6
CRs-Fixed: 2084824
2017-08-05 23:53:28 -07:00
Poddar, Siddarth
07eebf33bb qcacld-3.0: [TXRX] Reduce the log spam in Kmsg
Move the logs to appropriate log levels to avoid excessive
logging in kmsg.

CRs-Fixed: 2035110
Change-Id: If0e1706dcc926875ab68b590abf4745f81356580
2017-08-04 07:04:03 -07:00
Deepak Dhamdhere
d40f4b1b62 qcacld-3.0: Fix peer ref count deletion during peer detach
Data path may be processing received packets while the peer is being
deleted. It may create an extra reference to peer. As a protection,
decrement peer->ref_cnt by the exact number of peer_id_ref_cnt
instead of resetting it to hardcoded value of 1. Peer object will be
freed only after the last reference count is decremented.

CRs-Fixed: 2023550
Change-Id: I457a0fdd9d0bea86d22139090afbd33bdc34f2ed
2017-08-03 22:08:11 -07:00
Himanshu Agarwal
4dc96c3a75 qcacld-3.0: Do not LRO aggregate if peer is not connected
We have race condition between lro flush of hif_napi_poll and MC thread
lro flush while flushing the ol_txrx_cached_bufq packets for peer. Avoid
the situation by simply marking the all the Rx packets as LRO ineligible
while enqueuing packets to ol_rx_cached_buf.

Change-Id: Ief0d7dd6c25cf45912820f0e237fd1179a57a5c7
CRs-Fixed: 2032674
2017-08-03 19:49:02 -07:00
Srinivas Girigowda
0517bfc356 qcacld-3.0: Fix clang warnings enum 'qdf_nbuf_l4_rx_cksum_result_t'
warning: implicit conversion from enumeration type
'qdf_nbuf_l4_rx_cksum_result_t' to different enumeration
type 'qdf_nbuf_l4_rx_cksum_type_t

Change-Id: If2b7ee179fa260c14cde450cc72272c41a9f4adb
CRs-Fixed: 2055487
2017-08-03 19:49:00 -07:00
jiad
c6f5184601 qcacld-3.0: fix tx_desc vdev null pointer derefernce
In module exit context, vdev handle could be destroyed but still we
need to free pending completion tx_desc. And accessing vdev handle
of tx_desc will lead to null pointer derefernce.

Fix is to check vdev handle against null pointer.

Change-Id: Ib4e3127803f7bb0035466ec639401d7f8163598e
CRs-Fixed: 2074184
2017-08-01 10:02:52 -07:00
Himanshu Agarwal
83a875798a qcacld-3.0: Reduce tx completion drain delay to 500 ms
Reduce tx completion drain delay to 500ms from 1sec to avoid
unwanted suspend delay.

Change-Id: I0fa49f8c754e5d6ad33bf0fec7b4e02154ef49bf
CRs-Fixed: 2047750
2017-07-31 23:52:56 -07:00
Himanshu Agarwal
d8cffb33bd qcacld-3.0: Check for peer validity before enqueueing frames
There can be a race condition happening where frames are being
enqueued in cached buf queue for a peer in one thread whereas
cached buf queue for that same peer is being flushed in another
thread at the same time. This could result in memory leak in buf
queue.

Check for peer validity before enqueueing frames in peer cached
buf queue.

Change-Id: Idfb190def2aabc4439cd551c50aa811bae818ea3
CRs-fixed: 2038457
2017-07-31 23:52:54 -07:00
Nachiket Kukade
a48fd7791b qcacld-3.0: Do not BUG_ON during peer unmap timeout if FW is down
During peer detach, driver starts a timer to track unmap events
when the sta peer gets deleted. During this duration SSR occurs
and BUG_ON or cds recovery is triggered. This should only happen
in non-recoverable situation, so this scenario should be avoided.

Allow driver to recover from the SSR by checking FW_DOWN bit.

Change-Id: Ieca407e5c9c30f3c4716b7d158a903add46b8bd6
CRs-Fixed: 2078395
2017-07-30 13:02:31 -07:00
Mohit Khanna
78cb6bbbcc qcacld-3.0: drop excess rx pkts if peer not registered
Currently if the peer is not registered, we add packets to a cached_bufq
(within a peer). In case the peer is not registered for quite a long
time, or if the  vdev->rx pointer is somehow not set (when the vdev is
associated), this will lead to large number of nbufs from the FW being
added to this list. Eventually, we will run out of memory trying to add
nbufs to this list.
Keep an upper threshold on the number of elements in the cached_bufq.
Drop elements once the threshold is reached.

Change-Id: I02db9347addd77976f1d84897eee20d1e6f9c4ec
CRs-Fixed: 2026991
2017-07-27 16:59:52 -07:00
Govind Singh
98b6255df6 qcacld-3.0: Remove QCA_WIFI_3_0_EMU flag from Kbuild
QCA_WIFI_3_0_EMU flag is introduced for IHelium emulation
platform, where wait/error timeouts are kept for larger values.
Remove this flag for production target.
Increase tx completion drain delay to 1sec from 500ms to avoid
unwanted suspend abort.

Change-Id: Ie0633b3a2bbc9e2237039311af7417952961aada
CRs-Fixed: 2047750
2017-07-27 16:59:14 -07:00
Govind Singh
9ad8414613 qcacld-3.0: Prevent rx hashlist access after rx hash deinit
Rx hash deinit sets hash_table to NULL, at the same time
there can be active tasklet context accessing the rx hash list.
Prevent rx hashlist access after rx hash deinit and set the netbuf
to NULL once netbuff is popped out of the list.

Change-Id: I4e30dd69ece33c3cc768842274d5307c0bf29a37
CRs-Fixed: 2049121
2017-07-27 16:58:57 -07:00
Mohit Khanna
c19888f4c5 qcacld-3.0: Fix compilation error due to htt_display_rx_buf_debug
The function is not present as inline in the non debug build, which will
cause a compilation error.
Fix issue by having an empty inline function in the header file.
Some counters need to be defined outside of DEBUG_RX_RING_BUFFER.

Change-Id: I755616aa55c2f38bca017137e91cc469de7fbdcf
CRs-Fixed: 2004927
2017-07-27 16:58:47 -07:00
CNSS_WLAN Service
db56436b78 Merge changes I98019171,I69fb67a4 into wlan-cld3.driver.lnx.2.0-dev
* changes:
  Release 5.2.0.35O
  qcacld-3.0: Fix peer poison overwritten issue
2017-07-25 21:20:46 -07:00
Mohit Khanna
babadb8bee qcacld-3.0: Fix peer poison overwritten issue
In the existing impementation, once wma_is_pkt_drop_candidate gets a
peer from ol_txrx_find_peer_by_addr, the peer can be deleted in the
SOFTIRQ path from the unmap handler. This would make the peer pointer
'stale' resulting in access to already freed memory.

- Use standard API OL_TXRX_PEER_UNREF_DELETE to decrement peer->ref_cnt
  instead of directly referencing it.
- Add a new API - ol_txrx_find_peer_by_addr_inc_ref which does not
  decrement the peer->ref_cnt until the usage of peer in the caller
  function is finished. The existing API ol_txrx_find_peer_by_addr
  can be replaced by the new API as and when the issues are seen.

Sample usage:
    {
	peer = ol_txrx_find_peer_by_addr_inc_ref
	/* This API gets the peer and increments its ref_cnt */
	...
	...
	/* Once peer usage is done */
	OL_TXRX_PEER_UNREF_DELETE(peer);
	/*
	 * This API deletes the reference to the peer or the peer itself
	 * if the peer->ref_cnt is 0. This way we no longer depend on
	 * peer unmaps to delete the peer.
	 */

    }

Change-Id: I69fb67a4b4c9e26344d2ed1a72c383be7ac62414
CRs-Fixed: 2008583
2017-07-25 03:45:26 -07:00
Linux Build Service Account
ec1af2c219 Merge "qcacld-3.0: time stamp msdu with precise rx/tx time" 2017-07-20 20:44:49 -07:00
Deepak Dhamdhere
64bfe97415 qcacld-3.0: Schedule work for peer_unmap_timer_handler actions
Mutex cannot be used when peer_unmap_timer_handler() calls
cds_trigger_recover() because it runs in soft_irq. Schedule work
to perform the recovery instead.

CRs-Fixed: 2060775
Change-Id: I9a9554ef0aa9288bf5abe22cd2513d8cc41c29d4
2017-07-17 17:38:55 -07:00
Manjunathappa Prakash
6c54736903 qcacld-3.0: Add changes for Napier flow control
Adds support for flow control on convergence branch.
We will have global pool and each vdev coming up will have the
descriptors allocated from global pool. Tx queue is paused and unpaused
internally in host based on the stop and start thresholds.
Changes are added under compilation flag QCA_LL_TX_FLOW_CONTROL_V2.

Change-Id: I0ccb80b0099f39efad52ccd7d47f2709fdee2a93
CRs-Fixed: 2040457
2017-07-16 07:01:28 -07:00
Mohit Khanna
b04dfcd09a qcacld-3.0: Add macros to inc/dec peer->ref_cnt
Currently peer ref_cnt increments and decrements are done by the caller
function. Wrap peer->ref_cnt increment and decrement into MACRO calls so
they can be tracked.

Change-Id: I64d8b85d5898545bbc5a4b81101d1fd306de3fc9
CRs-Fixed: 2005652
2017-07-12 14:44:27 -07:00
Yu Wang
ceb357b964 qcacld-3.0: time stamp msdu with precise rx/tx time
Get tx/rx tsf time for each msdu, and then
time stamp the msdu with the corresponding
host time.

Change-Id: I7af80318b60c28d53e95fbe545e82da4191544b6
CRs-Fixed: 2057693
2017-07-12 15:21:47 +08:00
Sravan Kumar Kairam
3d5c118ec6 qcacld-3.0: At TSO segment free set owner TX desc to NULL
Currently at TSO segment free it's debug information is not
cleared. TSO segment TX descriptor owner is part of the debug
information. As a result even after segment free still its
point to stale TX descriptor as it's owner. In this change at
TSO segment free set TX desc owner to NULL.

Change-Id: I09f927d78c7b3aa4691aa69acbd4cef5002cf11d
CRs-Fixed: 2063433
2017-07-11 03:51:58 -07:00
Deepak Dhamdhere
be72e80caa qcacld-3.0: Fix error handling in peer creation
Return error instead of QDF_BUG(0) in ol_txrx_peer_attach() when it
times out on duplicate peer detection. Peer unmap events from firmware
may take more than 500 ms timeout observed by this routine.
wma_create_peer() should return error status on failure to create peer.

CRs-Fixed: 2004665
Change-Id: I8368c6320139f97584bd1647f1806a695d4a5929
2017-07-05 11:50:53 -07:00
Wu Gao
5f107a05ad qcacld-3.0: Free ipa uc tx buffer pool with adaptive method
If do not define QCA_WIFI_3_0, it alloc ipa uc tx buffer by
qdf_nbuf_alloc, but free by qdf_mem_free_consistent, which cause
memory leak. Solution is freeing with corresponding method.

Change-Id: I407712e545acfe5aeef8c8afa58785e42556ca02
CRs-Fixed: 2061922
2017-07-04 05:40:42 -07:00
jge
35cba62d45 qcacld-3.0: Correct NULL check when using ol_tx_dest_addr_find
Fix static analyze issues. add NULL pointer check.

Change-Id: Icc80211b945d1eaabfb6015ba93e0c3114f2c589
CRs-Fixed: 2059683
2017-07-04 04:29:56 -07:00
Rakesh Pillai
7fb7a1f850 qcacld-3.0: Fix CLANG warnings in Data path
implicit conversion from enumeration type 'QDF_STATUS' to different enumeration type 'A_STATUS'
implicit conversion from enumeration type 'A_STATUS' to different enumeration type 'QDF_STATUS'

CRs-Fixed: 2063339
Change-Id: Ib96a49f40ea581127405560087354e7fa9bf46ec
2017-06-30 22:50:40 -07:00
Poddar, Siddarth
37a302d35e qcacld-3.0: Make the packet LRO ineligible when tcp udp checksum fail
Send the packet to network stack with lro non-eligible
whenever tcp_udp_checksum fail.

Change-Id: I1c4d71fbc4cf7ce2e13d4e6c8dafbafdf76b0c2f
CRs-Fixed: 2068442
2017-06-30 08:19:57 -07:00
Kapil Gupta
53d9b575c5 qcacld-3.0: Remove unwanted error msgs
Add changes to remove unwanted error messages from peer create/
delete events.

Change-Id: Ic511b1799db36d1da4bda491792889db881de233
CRs-Fixed: 2040800
2017-06-30 04:50:24 -07:00
Abhishek Singh
217d978511 qcacld-3.0: Wait for all peer unmap events
Currently even though all peer unmaps events of last associated peer are
not received, driver still goes ahead for new connection with a diffrent peer.
Now if firmware uses same peer id for new peer also this causes synchronization
issue of peer ref counts and will eventually lead of kernel panic.

Add changes to wait for last peer's all unmap events before proceeding with
new connection

CRs-Fixed: 2040627
Change-Id: I30e74d9bebe66fec55d7682d3cec581a078f5e75
2017-06-30 04:50:23 -07:00
jge
9bd51dd66b qcacld-3.0: Correct NULL check in ol_tx_bad_peer_update_tx_limit
Fix static analyze issues. add NULL pointer check.

Change-Id: If1380a23a87a50d50458d10f87a512fa87613b27
CRs-Fixed: 2059753
2017-06-29 20:30:39 -07:00
Varun Reddy Yeturu
dd51e8d67b qcacld-3.0: Fix logging levels - Part 2
Move the log messages to appropriate log levels so that
the console does not get a huge spam of unnecessary logs

Change-Id: Ie58b45078ad8b4732d7b84bfb77261396bd5862a
CRs-Fixed: 2043741
2017-06-29 20:30:36 -07:00
hqu
c7f560cb21 qcacld-3.0: Translate the AC enums defined in htt
The AC values used by htt and txrx module are mismatch. Assertion
is also added to confirm that the values are matching.

The change is also to sync with CLD2.0.

Change-Id: I011a6f2b78a6954863c99f9d3875b2c88d2b78b1
CRs-Fixed: 2065390
2017-06-29 03:44:37 -07:00
hqu
fd227fe3f8 qcacld-3.0: Initialize mapping from TIDs to category table
Add initialization for mapping from TIDs including extension TIDs
to category table.

The change is also to sync with CLD2.0.

Change-Id: Ie79e5420cc22f4cb3e34ceeb020f3fde8f170d4d
CRs-Fixed: 2065379
2017-06-29 01:49:50 -07:00
wadesong
1885d2c685 qcacld-3.0: Add ipa_uc_rx_ring_elem_t for 32-bit platform
ipa_uc_rx_ring_elem_t structure is platform specific and current
definition cannot be used on 32-bit ARM platform where IPA 3.5
is attached. Add IPA 3.5 and 32-bit ARM compatible structure to
avoid IPA crash when data traffic is running

Change-Id: Ia5c141c9405675a64f59ba4c09f1ffd911158c9b
CRs-Fixed: 2046905
2017-06-20 19:36:16 -07:00
Manjunathappa Prakash
70ea728fe9 qcacld-3.0: iHelium: Increase RX_HTT_HDR_STATUS_LEN from 64 to 256bytes
Increase packet header bytes to 256, HL1.0 target offload features on
iHelium FW requires header bytes to be increased from 64 to 256bytes.
And round up the HTT_RX_BUF_SIZE to CACHE_LINE_SZ.

Change-Id: Iec45f5747956d0797411f76c2fec1368a13e7d6d
CRs-Fixed: 1039073
2017-06-19 12:43:47 -07:00
Deepak Dhamdhere
d42ab7c3dc qcacld-3.0: Ignore peer_unmap_timer_handler during recovery
If the driver recovery is in progress, unmap events may not come
from firmware. Ignore the peer_unmap timeout in such case.

CRs-Fixed: 2033452
Change-Id: I284c57530a477953247ad325dfaddff72767aecf
2017-06-18 16:11:04 -07:00
Deepak Dhamdhere
2b283c6543 qcacld-3.0: Use qdf_timer_sync_cancel to stop peer_unmap_timer
Peer may get deleted between the time peer_unmap_timer fires and
the handler gets executed in mc thread context, causing memory
access error. Use qdf_timer_sync_cancel() to wait for the handler
to finish its job before freeing the peer object.

CRs-Fixed: 2026393
Change-Id: Ie60b5c300be529d529f7e836adc0e3be917fe2e8
2017-06-18 16:11:03 -07:00
Deepak Dhamdhere
fe55836608 qcacld-3.0: Initialize peer_unmap_timer during peer attach
Initialize peer_unmap_timer during peer attach instead of at the
time of peer detach. Then ol_txrx_unref_delete can destroy
the timer without peer detach getting called earlier.

CRs-Fixed: 2014183
Change-Id: Icebec27d5562350871a89b5cf71ae99f096feee8
2017-06-18 16:11:01 -07:00