1. 07 9月, 2018 13 次提交
  2. 06 9月, 2018 4 次提交
    • G
      ath10k: enable pktlog for WCN3990 target · 713358c3
      Govind Singh 提交于
      WCN3990 target uses separate htc service for pktlog.
      Add pktlog service request and support for pktlog
      rx path handling.
      
      Testing:
          Tested on WCN3990 and QCA6174 HW.
          Tested FW: WLAN.HL.2.0-01192-QCAHLSWMTPLZ-1,
                     WLAN.RM.4.4.1-00109-QCARMSWPZ-1
      Signed-off-by: NGovind Singh <govinds@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      713358c3
    • G
      ath10k: introduce CE_ATTR_POLL attribute for polling pipe · 9abcb937
      Govind Singh 提交于
      Existing copy engine interrupt enable logic assumes that last
      CE is using polling mode and due to this interrupt for last copy engine
      are always disabled. WCN3990 uses last CE for pktlog and
      interrupt remains disabled with existing logic.
      
      To mitigate this issue, introduce CE_ATTR_POLL flag and control
      the interrupt based on the flag which can be set in ce_attr.
      
      Testing:
          Tested on WCN3990 and QCA6174 HW.
          Tested FW: WLAN.HL.2.0-01192-QCAHLSWMTPLZ-1,
                     WLAN.RM.4.4.1-00109-QCARMSWPZ-1
      Signed-off-by: NGovind Singh <govinds@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      9abcb937
    • S
      ath10k: support extended board data download for dual-band QCA9984 · 31324d17
      Sathishkumar Muruganandam 提交于
      To support dual-band variant of QCA9984, new extended board data (eBDF)
      is introduced since existing board data ran out of space.
      
      Below is the brief implementation & design detail,
      ----------------------------------------------------
      
      1. New OTP changes to inform eBDF support in existing OTP download to
      fetch board ID and chip ID. This is backward compatible and older
      card sends 0 by default for eBDF support bit (bit 18 of OTP response) we
      check in ath10k driver.
      
      2. If eBDF is supported, then we need to fetch eBDF ID which is bundled
      in downloaded board data. So again OTP is executed for knowing the eBDF ID.
      This is done once we set 'board_data_initialized' bit. If eBDF ID
      returned is zero, we continue booting with previous board data downloaded.
      
      3. Based on the eBDF ID fetched, ath10k driver tries to download the
      extended board data to a new offset ahead of already downloaded board
      data address.
      
      4. A new BD IE type, ATH10K_BD_IE_BOARD_EXT is added to differentiate in
      bundling eBDF separately in board-2.bin and also to parse through
      board bundle for eBDF download in ath10k boot.
      
      5. If eBDF is not present in the board-2.bin bundle or when board ID is
      zero, we do a fallback boot to "eboard.bin" in the same QCA9984/hw1.0 dir.
      This is same as done to existing "board.bin" if board ID is not present
      in board-2.bin bundle.
      
      Current design is that eBDF size will be 2KB and eBDF ID will be
      byte value.
      
      Tested the above changes with dual-band variant of QCA9984 card. OTP
      update needed for the test will be part of next FW release 10.4-3.6-xxxx.
      
      Below are the logs with ath10k BOOT debugs enabled.
      
      First OTP response :
      ---------------------
      ..
      boot upload otp to 0x1234 len 9478 for board id
      boot get otp board id result 0x00040400 board_id 1 chip_id 0 ext_bid_support 1
      ..
      
      Second OTP response :
      ---------------------
      ..
      boot upload otp to 0x1234 len 9478 for ext board id
      boot get otp ext board id result 0x00000005 ext_board_id 5
      boot using eboard name 'bus=pci,bmi-chip-id=0,bmi-eboard-id=5'
      ..
      
      Extended board data download:
      ------------------------------
      ..
      board name
      00000000: 62 75 73 3d 70 63 69 2c 62 6d 69 2d 63 68 69 70  bus=pci,bmi-chip
      00000010: 2d 69 64 3d 30 2c 62 6d 69 2d 65 62 6f 61 72 64  -id=0,bmi-eboard
      00000020: 2d 69 64 3d 35                                   -id=5
      boot found match for name 'bus=pci,bmi-chip-id=0,bmi-eboard-id=5'
      boot found eboard data for 'bus=pci,bmi-chip-id=0,bmi-eboard-id=5'
      using board api 2
      boot writing ext board data to addr 0xc3000
      ..
      
      Fallback Extended board data download from "eboard.bin":
      ---------------------------------------------------------
      ..
      board name
      00000000: 62 75 73 3d 70 63 69 2c 62 6d 69 2d 63 68 69 70  bus=pci,bmi-chip
      00000010: 2d 69 64 3d 30 2c 62 6d 69 2d 62 6f 61 72 64 2d  -id=0,bmi-board-
      00000020: 69 64 3d 31 30                                   id=10
      failed to fetch board data for bus=pci,bmi-chip-id=0,bmi-eboard-id=5 from ath10k/QCA9984/hw1.0/board-2.bin
      boot fw request 'ath10k/QCA9984/hw1.0/eboard.bin': 0
      using board api 1
      boot writing ext board data to addr 0xc3000
      ..
      Signed-off-by: NSathishkumar Muruganandam <murugana@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      31324d17
    • S
      ath10k: refactoring needed for extended board data download · 5849ed48
      Sathishkumar Muruganandam 提交于
      Just moving functions down in the file, no functional changes.
      Signed-off-by: NSathishkumar Muruganandam <murugana@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      5849ed48
  3. 04 9月, 2018 3 次提交
  4. 28 8月, 2018 4 次提交
    • S
      ath10k: limit available channels via DT ieee80211-freq-limit · 34d5629d
      Sven Eckelmann 提交于
      Tri-band devices (1x 2.4GHz + 2x 5GHz) often incorporate special filters in
      the RX and TX path. These filtered channel can in theory still be used by
      the hardware but the signal strength is reduced so much that it makes no
      sense.
      
      There is already a DT property to limit the available channels but ath10k
      has to manually call this functionality to limit the currrently set wiphy
      channels further.
      Signed-off-by: NSven Eckelmann <sven.eckelmann@openmesh.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      34d5629d
    • G
      ath10k: use struct_size() in kzalloc() · 06ae8dc0
      Gustavo A. R. Silva 提交于
      One of the more common cases of allocation size calculations is finding
      the size of a structure that has a zero-sized array at the end, along
      with memory for some number of elements for that array. For example:
      
      struct foo {
      	int stuff;
              void *entry[];
      };
      
      instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);
      
      Instead of leaving these open-coded and prone to type mistakes, we can
      now use the new struct_size() helper:
      
      instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);
      
      This issue was detected with the help of Coccinelle.
      Signed-off-by: NGustavo A. R. Silva <gustavo@embeddedor.com>
      Reviewed-by: NKees Cook <keescook@chromium.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      06ae8dc0
    • M
      ath10k: schedule hardware restart if WMI command times out · a9911937
      Martin Willi 提交于
      When running in AP mode, ath10k sometimes suffers from TX credit
      starvation. The issue is hard to reproduce and shows up once in a
      few days, but has been repeatedly seen with QCA9882 and a large
      range of firmwares, including 10.2.4.70.67.
      
      Once the module is in this state, TX credits are never replenished,
      which results in "SWBA overrun" errors, as no beacons can be sent.
      Even worse, WMI commands run in a timeout while holding the conf
      mutex for three seconds each, making any further operations slow
      and the whole system unresponsive.
      
      The firmware/driver never recovers from that state automatically,
      and triggering TX flush or warm restarts won't work over WMI. So
      issue a hardware restart if a WMI command times out due to missing
      TX credits. This implies a connectivity outage of about 1.4s in AP
      mode, but brings back the interface and the whole system to a usable
      state. WMI command timeouts have not been seen in absent of this
      specific issue, so taking such drastic actions seems legitimate.
      Signed-off-by: NMartin Willi <martin@strongswan.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      a9911937
    • R
      ath10k: skip resetting rx filter for WCN3990 · 58da3b42
      Rakesh Pillai 提交于
      WCN3990 has the MAC_PCU_ADDR1 configured properly
      and hence it will not send spurious ack frames
      during boot up.
      
      Hence the reset_rx_filter workaround is not needed
      for WCN3990. Add a hw_param to indicate if hardware rx
      filter reset is needed and skip the reset_rx_filter for
      WCN3990.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
      Signed-off-by: NRakesh Pillai <pillair@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      58da3b42
  5. 24 8月, 2018 1 次提交
    • T
      ath10k: fix kernel panic by moving pci flush after napi_disable · bd1d3950
      Tamizh chelvam 提交于
      When continuously running wifi up/down sequence, the napi poll
      can be scheduled after the CE buffers being freed by ath10k_pci_flush
      
      Steps:
        In a certain condition, during wifi down below scenario might occur.
      
      ath10k_stop->ath10k_hif_stop->napi_schedule->ath10k_pci_flush->napi_poll(napi_synchronize).
      
      In the above scenario, CE buffer entries will be freed up and become NULL in
      ath10k_pci_flush. And the napi_poll has been invoked after the flush process
      and it will try to get the skb from the CE buffer entry and perform some action on that.
      Since the CE buffer already cleaned by pci flush this action will create NULL
      pointer dereference and trigger below kernel panic.
      
      Unable to handle kernel NULL pointer dereference at virtual address 0000005c
      PC is at ath10k_pci_htt_rx_cb+0x64/0x3ec [ath10k_pci]
      ath10k_pci_htt_rx_cb [ath10k_pci]
      ath10k_ce_per_engine_service+0x74/0xc4 [ath10k_pci]
      ath10k_ce_per_engine_service [ath10k_pci]
      ath10k_ce_per_engine_service_any+0x74/0x80 [ath10k_pci]
      ath10k_ce_per_engine_service_any [ath10k_pci]
      ath10k_pci_napi_poll+0x48/0xec [ath10k_pci]
      ath10k_pci_napi_poll [ath10k_pci]
      net_rx_action+0xac/0x160
      net_rx_action
      __do_softirq+0xdc/0x208
      __do_softirq
      irq_exit+0x84/0xe0
      irq_exit
      __handle_domain_irq+0x80/0xa0
      __handle_domain_irq
      gic_handle_irq+0x38/0x5c
      gic_handle_irq
      __irq_usr+0x44/0x60
      
      Tested on QCA4019 and firmware version 10.4.3.2.1.1-00010
      Signed-off-by: NTamizh chelvam <tamizhr@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      bd1d3950
  6. 31 7月, 2018 9 次提交
    • S
      ath10k: prevent active scans on potential unusable channels · 3f259111
      Sven Eckelmann 提交于
      The QCA4019 hw1.0 firmware 10.4-3.2.1-00050 and 10.4-3.5.3-00053 (and most
      likely all other) seem to ignore the WMI_CHAN_FLAG_DFS flag during the
      scan. This results in transmission (probe requests) on channels which are
      not "available" for transmissions.
      
      Since the firmware is closed source and nothing can be done from our side
      to fix the problem in it, the driver has to work around this problem. The
      WMI_CHAN_FLAG_PASSIVE seems to be interpreted by the firmware to not
      scan actively on a channel unless an AP was detected on it. Simple probe
      requests will then be transmitted by the STA on the channel.
      
      ath10k must therefore also use this flag when it queues a radar channel for
      scanning. This should reduce the chance of an active scan when the channel
      might be "unusable" for transmissions.
      
      Fixes: e8a50f8b ("ath10k: introduce DFS implementation")
      Signed-off-by: NSven Eckelmann <sven.eckelmann@openmesh.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      3f259111
    • K
      ath10k: fix parenthesis alignment · ebfac1d0
      Kalle Valo 提交于
      These were recently introduced and found by checkpatch:
      
      drivers/net/wireless/ath/ath10k/mac.c:6118: Alignment should match open parenthesis
      drivers/net/wireless/ath/ath10k/mac.c:6121: Alignment should match open parenthesis
      drivers/net/wireless/ath/ath10k/mac.c:6124: Alignment should match open parenthesis
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      ebfac1d0
    • M
      ath10k: add debugfs file warm_hw_reset · db251d7d
      Maharaja Kennadyrajan 提交于
      Debugfs support to do hardware warm reset with WMI command
      WMI_PDEV_PARAM_PDEV_RESET for 10.4 and 10.2.4(if wmi
      service is enabled in the firmware for backward compatibility).
      
      This change is purely for debugging purpose when hardware hangs/mutes.
      
      This hardware reset won't affect the connectivity but there will be small
      pause in data traffic. Here we are doing BB/MAC level reset and hence
      whenever the BB/MAC watchdog is triggered, it does a hardware_chip_reset.
      So the target will be in the active state.
      
      Below command used to warm reset the hardware.
      echo 1 > /sys/kernel/debug/ieee80211/phyX/ath10k/warm_hw_reset
      
      Tested in QCA988X with firmware ver 10.2.4.70.45
      Tested in QCA4019 with firmware ver 10.4-3.2.1.1-00011
      Signed-off-by: NMaharaja Kennadyrajan <mkenna@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      db251d7d
    • N
      ath10k: htt_tx: move lock into id_get function · e82f57c8
      Nicholas Mc Guire 提交于
      This is only code refactoring as all call sites of
      ath10k_htt_tx_alloc_msdu_id() take the same lock it can be moved into the
      id_get function and the assertion dropped.
      Signed-off-by: NNicholas Mc Guire <hofrat@osadl.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      e82f57c8
    • C
      ath10k: remove redundant pointers 'dev' and 'noa' · e6712aa1
      Colin Ian King 提交于
      Pointers dev and noa are being assigned but are never used hence they
      are redundant and can be removed.
      
      Cleans up clang warnings:
      warning: variable 'dev' set but not used [-Wunused-but-set-variable]
      warning: variable 'noa' set but not used [-Wunused-but-set-variable]
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      e6712aa1
    • R
      ath10k: handle mgmt tx completion event · dc405152
      Rakesh Pillai 提交于
      WCN3990 transmits management frames via WMI
      with reference. Currently, with the management
      tx completion not being handled, these frames are
      not getting freed even after the transmission status
      is returned by the firmware.
      
      The transmitted management frames should be freed
      when the firmware sends the over-the-air tx status of
      the corresponding management frames.
      
      Handle the wmi mgmt tx completion event and free
      the corresponding management frame.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
      Signed-off-by: NRakesh Pillai <pillair@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      dc405152
    • S
      ath10k: disable bundle mgmt tx completion event support · 673bc519
      Surabhi Vishnoi 提交于
      The tx completion of multiple mgmt frames can be bundled
      in a single event and sent by the firmware to host, if this
      capability is not disabled explicitly by the host. If the host
      cannot handle the bundled mgmt tx completion, this capability
      support needs to be disabled in the wmi init cmd, sent to the firmware.
      
      Add the host capability indication flag in the wmi ready command,
      to let firmware know the features supported by the host driver.
      This field is ignored if it is not supported by firmware.
      
      Set the host capability indication flag(i.e. host_capab) to zero,
      for disabling the support of bundle mgmt tx completion. This will
      indicate the firmware to send completion event for every mgmt tx
      completion, instead of bundling them together and sending in a single
      event.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
      Signed-off-by: NSurabhi Vishnoi <svishnoi@codeaurora.org>
      Signed-off-by: NRakesh Pillai <pillair@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      673bc519
    • P
      ath10k: support for multicast rate control · cd93b83a
      Pradeep Kumar Chitrapu 提交于
      Issues a wmi command to firmware when multicast rate change is received with the
      new BSS_CHANGED_MCAST_RATE flag.  Also fixes the incorrect fixed_rate setting
      for CCK rates which got introduced with addition of ath10k_rates_rev2 enum.
      
      Tested on QCA9984 with firmware ver 10.4-3.6-00104
      Signed-off-by: NPradeep Kumar Chitrapu <pradeepc@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      cd93b83a
    • K
      ath10k: fix open brace location in ath10k_wmi_tlv_op_gen_dbglog_cfg() · 1e3c43a7
      Kalle Valo 提交于
      Fixes a recently added checkpatch warning:
      
      wmi-tlv.c:2703: open brace '{' following function definitions go on the next line
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      1e3c43a7
  7. 02 7月, 2018 3 次提交
  8. 29 6月, 2018 1 次提交
    • B
      ath10k: use locked skb_dequeue for rx completions · 62652555
      Bob Copeland 提交于
      In our environment we are occasionally seeing the following stack trace
      in ath10k:
      
      Unable to handle kernel paging request at virtual address 0000a800
      pgd = c0204000
      [0000a800] *pgd=00000000
      Internal error: Oops: 17 [#1] SMP ARM
      Modules linked in: dwc3 dwc3_of_simple phy_qcom_dwc3 nf_nat xt_connmark
      CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.9.31 #2
      Hardware name: Generic DT based system
      task: c09f4f40 task.stack: c09ee000
      PC is at kfree_skb_list+0x1c/0x2c
      LR is at skb_release_data+0x6c/0x108
      pc : [<c065dcc4>]    lr : [<c065da5c>]    psr: 200f0113
      sp : c09efb68  ip : c09efb80  fp : c09efb7c
      r10: 00000000  r9 : 00000000  r8 : 043fddd1
      r7 : bf15d160  r6 : 00000000  r5 : d4ca2f00  r4 : ca7c6480
      r3 : 000000a0  r2 : 01000000  r1 : c0a57470  r0 : 0000a800
      Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
      Control: 10c5787d  Table: 56e6006a  DAC: 00000051
      Process swapper/0 (pid: 0, stack limit = 0xc09ee210)
      Stack: (0xc09efb68 to 0xc09f0000)
      fb60:                   ca7c6480 d4ca2f00 c09efb9c c09efb80 c065da5c c065dcb4
      fb80: d4ca2f00 00000000 dcbf8400 bf15d160 c09efbb4 c09efba0 c065db28 c065d9fc
      fba0: d4ca2f00 00000000 c09efbcc c09efbb8 c065db48 c065db04 d4ca2f00 00000000
      fbc0: c09efbe4 c09efbd0 c065ddd0 c065db38 d4ca2f00 00000000 c09efc64 c09efbe8
      fbe0: bf09bd00 c065dd10 00000003 7fffffff c09efc24 dcbfc9c0 01200000 00000000
      fc00: 00000000 00000000 ddb7e440 c09e9440 c09efc48 1d195000 c09efc7c c09efc28
      fc20: c027bb68 c028aa00 ddb7e4f8 bf13231c ddb7e454 0004091f bf154571 d4ca2f00
      fc40: dcbf8d00 ca7c5df6 bf154538 01200000 00000000 bf154538 c09efd1c c09efc68
      fc60: bf132458 bf09bbbc ca7c5dec 00000041 bf154538 bf154539 000007bf bf154545
      fc80: bf154538 bf154538 bf154538 bf154538 bf154538 00000000 00000000 000016c1
      fca0: 00000001 c09efcb0 01200000 00000000 00000000 00000000 00000000 00000001
      fcc0: bf154539 00000041 00000000 00000007 00000000 000000d0 ffffffff 3160ffff
      fce0: 9ad93e97 3e973160 7bf09ad9 0004091f d4ca2f00 c09efdb0 dcbf94e8 00000000
      fd00: dcbf8d00 01200000 00000000 dcbf8d00 c09efd44 c09efd20 bf132544 bf132130
      fd20: dcbf8d00 00000000 d4ca2f00 c09efdb0 00000001 d4ca2f00 c09efdec c09efd48
      fd40: bf133630 bf1324d0 ca7c5cc0 000007c0 c09efd88 c09efd70 c0764230 c02277d8
      fd60: 200f0113 ffffffff dcbf94c8 bf000000 dcbf93b0 dcbf8d00 00000040 dcbf945c
      fd80: dcbf94e8 00000000 c09efdcc 00000000 c09efd90 c09efd90 00000000 00000024
      fda0: dcbf8d00 00000000 00000005 dcbf8d00 c09efdb0 c09efdb0 00000000 00000040
      fdc0: c09efdec dcbf8d00 dcbfc9c0 c09ed140 00000040 00000000 00000100 00000040
      fde0: c09efe14 c09efdf0 bf1739b4 bf132840 dcbfc9c0 ddb82140 c09ed140 1d195000
      fe00: 00000001 00000100 c09efe64 c09efe18 c067136c bf173958 ddb7fac8 c09f0d00
      fe20: 001df678 0000012c c09efe28 c09efe28 c09efe30 c09efe30 c0a7fb28 ffffe000
      fe40: c09f008c 00000003 00000008 c0a598c0 00000100 c09f0080 c09efeb4 c09efe68
      fe60: c02096e0 c0671278 c0494584 00000080 dd5c3300 c09f0d00 00000004 001df677
      fe80: 0000000a 00200100 dd5c3300 00000000 00000000 c09eaa70 00000060 dd410800
      fea0: c09ee000 00000000 c09efecc c09efeb8 c0227944 c02094c4 00000000 00000000
      fec0: c09efef4 c09efed0 c0268b64 c02278ac de802000 c09f1b1c c09eff20 c0a16cc0
      fee0: de803000 c09ee000 c09eff1c c09efef8 c020947c c0268ae0 c02103dc 600f0013
      ff00: ffffffff c09eff54 ffffe000 c09ee000 c09eff7c c09eff20 c021448c c0209424
      ff20: 00000001 00000000 00000000 c021ddc0 00000000 00000000 c09f1024 00000001
      ff40: ffffe000 c09f1078 00000000 c09eff7c c09eff80 c09eff70 c02103ec c02103dc
      ff60: 600f0013 ffffffff 00000051 00000000 c09eff8c c09eff80 c0763cc4 c02103bc
      ff80: c09effa4 c09eff90 c025f0e4 c0763c98 c0a59040 c09f1000 c09effb4 c09effa8
      ffa0: c075efe0 c025efd4 c09efff4 c09effb8 c097dcac c075ef7c ffffffff ffffffff
      ffc0: 00000000 c097d6c4 00000000 c09c1a28 c0a59294 c09f101c c09c1a24 c09f61c0
      ffe0: 4220406a 512f04d0 00000000 c09efff8 4220807c c097d95c 00000000 00000000
      [<c065dcc4>] (kfree_skb_list) from [<c065da5c>] (skb_release_data+0x6c/0x108)
      [<c065da5c>] (skb_release_data) from [<c065db28>] (skb_release_all+0x30/0x34)
      [<c065db28>] (skb_release_all) from [<c065db48>] (__kfree_skb+0x1c/0x9c)
      [<c065db48>] (__kfree_skb) from [<c065ddd0>] (consume_skb+0xcc/0xd8)
      [<c065ddd0>] (consume_skb) from [<bf09bd00>] (ieee80211_rx_napi+0x150/0x82c [mac80211])
      [<bf09bd00>] (ieee80211_rx_napi [mac80211]) from [<bf132458>] (ath10k_htt_t2h_msg_handler+0x15e8/0x19c4 [ath10k_core])
      [<bf132458>] (ath10k_htt_t2h_msg_handler [ath10k_core]) from [<bf132544>] (ath10k_htt_t2h_msg_handler+0x16d4/0x19c4 [ath10k_core])
      [<bf132544>] (ath10k_htt_t2h_msg_handler [ath10k_core]) from [<bf133630>] (ath10k_htt_txrx_compl_task+0xdfc/0x12cc [ath10k_core])
      [<bf133630>] (ath10k_htt_txrx_compl_task [ath10k_core]) from [<bf1739b4>] (ath10k_pci_napi_poll+0x68/0xf4 [ath10k_pci])
      [<bf1739b4>] (ath10k_pci_napi_poll [ath10k_pci]) from [<c067136c>] (net_rx_action+0x100/0x33c)
      [<c067136c>] (net_rx_action) from [<c02096e0>] (__do_softirq+0x228/0x31c)
      [<c02096e0>] (__do_softirq) from [<c0227944>] (irq_exit+0xa4/0x114)
      
      The trace points to a corrupt skb inside kfree_skb(), seemingly because
      one of the shared skb queues is getting corrupted.  Most of the skb queues
      ath10k uses are local to a single call stack, but three are shared among
      multiple codepaths:
      
       - rx_msdus_q,
       - rx_in_ord_compl_q, and
       - tx_fetch_ind_q
      
      Of the three, the first two are manipulated using the unlocked skb_queue
      functions without any additional lock protecting them.  Use the locked
      variants of skb_queue_* functions to protect these manipulations.
      Signed-off-by: NBob Copeland <bobcopeland@fb.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      62652555
  9. 28 6月, 2018 2 次提交