WMI RX event processing is very critical for WLAN driver and today
we are using kernel's shared event work queue. Shared event work
queue is used by many drivers and if any work submitted in shared
work queue takes longer time to finish then it directly impacts WLAN
control path processing.
Define a dedicated work queue for WMI RX event processing and use
it for WMI RX event handling.
Change-Id: I8ee6ca5b4b20c3357d46f8b56943078a0a76977f
CRs-Fixed: 2029775
qdf_create_work is not returning any status hence modify it
to return proper QDF status to know proper status of work creation.
Change-Id: I8fc84933cc85ba628363638d7567b083ecbf4f34
CRs-Fixed: 2026441
In the error-path execution stream where number of tso segments
in a tso_descriptor, there was an assumption that the number would
be > 0 (normal case is 2). When it is zero, a segment at a wrong
index (-1=> (4M-1)) was being unmapped, which was a bad access.
Add code to make sure that the index in question is in the range.
Need still to understand the reason why num_segs were smaller (0)
then expected (2).
Change-Id: I5d6e16f48f29c98cfb2191cf497f4203ea56a78f
CRs-Fixed: 2028808
Implement hif_dummy_map_ce_to_irq to prevent runtime errors on new
platforms that do not use hif_map_ce_to_irq.
Change-Id: I9e3da22e237c351ecc9919e69d8d68a656ef7cc9
CRs-Fixed: 2028145
Instead of calling and defining the same function from different files,
have a common function in a header file and call it from different files.
The function retrieves the dfs rx_ops from the psoc context.
Change-Id: I1c9089c2508faa9ee7a5bf6645dcf02659923bc3
CRs-Fixed: 2001106
In hif_napi.c, we are calling this kernel API core_ctl_set_boost. This
API is only present in the kernel if the feature CONFIG_SCHED_CORE_CTL
is present. In case the feature is not present in the kernel, it will
result in a compilation error.
Create a new internal API hif_napi_core_ctl_set_boost as a wrapper
around the kernel API. The new API is stubbed in case the kernel feature
is not present.
Change-Id: Ia52f1110304816670efe3480da3aa78d7b2ecb9e
CRs-Fixed: 2018089
The existing HIF NAPI blacklist feature uses irq_blacklist_on(off) APIs
which make a call to the userspace irq_balancer.
Replace these APIs with kernel API irq_modify_status to mark (or unmark) the
individual interrupts with IRQ_NO_BALANCING flag. Once marked, the
msm-irq-balancer will not be able to move the CE interrupts around.
Change-Id: I4d780fa8780b42a668006e13a49eb1299304e633
CRs-Fixed: 1114161
Interrupt blacklisting in kernel 4.4 happens through a user-space
entity. The kernel APIs irq_blacklist_on(off) essentially send
a message to the user space service(irq balancer) and
therefore are not synchronous and do not guarantee that blacklisting
has actually taken effect. It will be granted with some latency
(userspace entity's processing delay).
Make blacklisting more robust by:
a) move irq (if it has been moved around after blacklist_on call
has been made and not yet honored) to the designated CPU
on IRQ reception
b) stop cpu_isolation in blacklisting mode boost API
c) modify NAPI stats to indicate blacklisting mode
Change-Id: I13e478adbed1a6a66d320f69acdb012bee3dc1e8
CRs-Fixed: 1093770
NAPI bucket calculation was resulting in bucket number which was out of
bounds for the number of buckets.
Calculate bucket index correctly and check for out of bound
condition.
CRs-Fixed: 1091483
Change-Id: Ieb81b2eeec546a6128c6b878db4c65ccb8b62bda
The current implementation uses jiffies to calculate the yield time and
yields after 2 jiffies. The problem with this is that we end up yielding
anywhere between 1 - 2 jiffies as each jiffies are incremented by 10 ms
intervals. Sometimes we are taking more than 2 jiffies to yield. This
prevents the update of deferrable_timer if its being done at the same
CPU where hif_napi_poll is executing. This may result in the CPU
frequencies not being updated resulting in some fluctuations.
Use sched_clock kernel API to calculate the precise yield time.
Reduce the yield time to 10ms.
Some stats here
- How many times did we have to yield because of time
(%)0.670391061
Total Number of completes 1790
Total Number of complete 0 12
- When we yielded, how much did we exceed the time limit(10ms) by (ms)
Average 1.327444
Max 3.381667
Min 0.037709
- How many HTT Messages did we process when we had to yield
Average 22.41667
Max 33
Min 18
- How much time did we take when we had to yield 10ms + delta above
- How much time did we take when we did not yield (ms)
Average 0.907641
Max 8.649
Min 0
- How many HTT Messages did we process when we did not have to yield
Average 2.193476
Max 24
Min 1
Change-Id: I0d42c716ab8941b1de22a456447797c9ba5475c8
CRs-Fixed: 1089902
Currently NAPI stats are retrieved as a part of iwpriv getStats command.
The buffer available for this command is limited and NAPI stats get
trucncated.
Add a new dumpStats parameter (9) to dump NAPI stats.
Change-Id: Iaf52a3dcecac2f7b24fde2f8220fbfddc767965b
CRs-Fixed: 1076563
Currently the config ini "wlanLoggingFEToConsole" specifically talks
about enabling the logs to kmsg for FATAL and ERROR logs.
This cfg.ini item should not be specific to any log level, instead
it should just depict whether logging to console should be enabled
or not. Hence change wlanLoggingFEToConsole to wlanLoggingToConsole.
Change-Id: I54e340ed58891175b53ac2d0137d15a2baea1c9f
CRs-Fixed: 2017427
In serialization timeout timer, do not free memory before removing the
cmd from serialization queue. Free only if command is not found in the
queue.
Change-Id: I775b4230f2cb558142a13cfe0a339f3a20a04a33
CRs-Fixed: 2029599
Intrabss forwarding logic turns around bcast (ARP) pkts on the
SAP with peer source addr. So a AST lookup on AddrY results will
route the pkt to HW and not FW which is not the design. Fix is to
enable lookup only on AddrX in SAP mode.
Change-Id: Iea41c53fd818acfb8dbfd9ad1582e43ba1c4bc83
CRs-Fixed: 2029656
Create output agnostic log print APIs for WMI and Credit History to
enhance the debugging experience.
Change-Id: Ie89a9cb3b54c373ac2610d62003e940da17696d8
CRs-Fixed: 2028762
Add NDP command execution framework:
1) Define UCFG apis, that will be called from OS_IF layer
2) Define request proccessing functions to post to scheduler and callback.
3) Define request proccessing functions to post to serializer and callback.
4) Define functions handling activated, cancelled and timed out NDP req.
Change-Id: Ibc6fe32c65f8de0c24e0537f2eb538f806cf5284
CRs-Fixed: 2014795
Add Invalid Peer stats on rx side
Add aggregation stats missing on Tx
API to update Rx Errors
Change-Id: Ib757ee7b89d9b9113e1a41b5a520faabb9ff28bb
CRs-Fixed: 1114641
Few components don't have vdev object but still they want to
receive scan envents on underlying pdev.
Change ucfg_scan_register_event_handler and
ucfg_scan_unregister_event_handler to accept pdev instead of vdev.
Change-Id: I5a7ea78b1470b89637d418de6b984e5d20007c9c
CRs-Fixed: 1095299
Fix passing NULL vdev object to object manager. Currently during unload
process, we are purging all the cmds in the cmd list. In this case
pointer vdev_id is passed as NULL since we wanted to clean up cmds
associated with all the vdevs. In wlan_serialization_purge_cmd_list()
vdev remains NULL in this scenario which results in an ASSERT in
wlan_objmgr_vdev_release_ref().
This change set will call wlan_objmgr_vdev_release_ref only if vdev is
not NULL.
Change-Id: I29a6114f4b5d9fcabe24b82f26defd8ab58cceec
CRs-Fixed: 2029580
Update correct format specifiers in ll_stats_get_req. req_id is an
unsigned integer, use %u instead of %d.
Change-Id: I06a1b571954dcf7392e41901bda51aeea99731de
CRs-Fixed: 2018087
Handle failure scenario for qdf_nbuf_map() API by freeing
allocated memory, returning failure/error etc.
Change-Id: I493fb063c8f57e38525e2dc1701a6e972d2ec0e6
CRs-Fixed: 2028524
The current iterate object API does not invoke operation on logically
deleted objects. The new API will invoke operation on all objects.
Change-Id: I7821dccf3ccb0c5d209e3bf27489fcb4bf99aef5
CRs-Fixed: 2028529
1) Implement lock free API for get peer
In DA UAPSD, get_peer API is invoked in ISR context, This is causing
system to get into deadlock, since the current get_peer() gets preempted
Lock acquire attempt is done in ISR context
2) Avoid invoking peer_release_ref() calls with peer_list_lock() acquired
as peer_release_ref can invoke peer destroy operation
Change-Id: I095ae12ced4201cdc68bda70c8e8dee6cfb2bb9d
CRs-Fixed: 2028529