No description
  • C 98.2%
  • Assembly 1%
  • Makefile 0.3%
  • Shell 0.2%
  • Python 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Zhu Jianmin 959cb86f82 qcacmn: Fix stability caused by unwanted recursive calls in serialization
Issue description: When wlan_serialization_dequeue_cmd() gets called, it
will remove the command from active queue and try to move next pending
command from pending queue to active queue. But before it moves this
pending command to active queue completly, it calls the caller and
notify that command is activated through callback.
If that callback returns failure then serialization abandon the process
of moving it from pending to active. Now it again picks the same command
from pending and repeat the process. This creates unwanted recursion and
reference count mistakenly decremented multiple times.

Here is the recursion stack:
  (a) wlan_serialization_move_pending_to_active()
    (b) wlan_serialization_enqueue_cmd
      (c) wlan_serialization_add_cmd_to_given_queue
        (d) cmd_list->cmd.cmd_cb() fails
          (e) wlan_serialization_put_back_to_global_list
            (f) go back to (a) and repeat
Fix: Divide wlan_serialization_enqueue_cmd() API's logic in 2 parts.
1) Enqueue the command first through wlan_serialization_enqueue_cmd()
   This ensures that command has been put in to given queue.
2) Once command has been put in to given queue and if this queue happen
   to be active queue then activate the command through
   wlan_serialization_activate_cmd()
Here is the stack after the fix:
  (a) wlan_serialization_move_pending_to_active()
    (b) wlan_serialization_enqueue_cmd
      (c) wlan_serialization_add_cmd_to_given_queue
        (d) returns WLAN_SER_CMD_ACTIVE or !WLAN_SER_CMD_ACTIVE
  (a1) if (WLAN_SER_CMD_ACTIVE)
    (b1) wlan_serialization_put_back_to_global_list() for pending cmd
      (c1) wlan_serialization_activate_cmd()
        (d1) if fail
          (e1) wlan_serialization_put_back_to_global_list for active cmd
             (f1) then repeat from (a)
        (d2) if pass then return
  (a2) if (!WLAN_SER_CMD_ACTIVE) then nothing to be done.

Change-Id: I8c63dd15d7ab8612a87950a3c189e73d1436c26a
CRs-Fixed: 2132975
2017-11-01 14:39:17 -07:00
dp qcacmn: fix spinlock paring issue 2017-11-01 13:17:26 -07:00
global_lmac_if qcacmn: Move PMO from CMN to CLD 2017-07-14 17:36:04 -07:00
hal/wifi3.0 qcacmn: Fix IPA WDI3 Tx issues 2017-10-23 22:08:28 -07:00
hif qcacmn: Set the initial wake flag on MSI resume 2017-11-01 13:57:00 -07:00
htc qcacmn: Set the initial wake flag on MSI resume 2017-11-01 13:57:00 -07:00
init_deinit/dispatcher qcacmn: Free netbuf and release peer ref at driver unload time 2017-10-26 01:40:13 -07:00
os_if/linux qcacmn: Fix TDLS set state cmd sequence in concurrent TDLS connections 2017-10-23 08:06:24 -07:00
qdf qcacmn: Create roam debug log infrastructure 2017-10-31 17:39:09 -07:00
scheduler qcacmn: Use atomic set bit ops for mc thread 2017-10-17 21:49:24 -07:00
target_if qcacmn: Add support for bangradar for hawkeye 2017-10-15 15:48:09 -07:00
umac qcacmn: Fix stability caused by unwanted recursive calls in serialization 2017-11-01 14:39:17 -07:00
utils qcacmn: Separate TcpDelAck and TcpAdvWinScale 2017-10-31 17:39:11 -07:00
wlan_cfg qcacmn: Propagate config parameters to datapath 2017-10-23 16:30:16 -07:00
wmi qcacmn: Add support to query RCPI info 2017-11-01 13:56:58 -07:00
README.txt qcamain: Test changes 2017-09-15 21:45:35 +05:30
VERSION.txt

 This is CNSS WLAN Host Driver for products starting from iHelium