1. 01 Oct, 2020 9 commits
    • Wen Gong's avatar
      ath11k: Use GFP_ATOMIC instead of GFP_KERNEL in ath11k_dp_htt_get_ppdu_desc · 6a8be1ba
      Wen Gong authored
      With SLUB DEBUG CONFIG below crash is seen as kmem_cache_alloc
      is being called in non-atomic context.
      
      To fix this issue, use GFP_ATOMIC instead of GFP_KERNEL kzalloc.
      
      [  357.217088] BUG: sleeping function called from invalid context at mm/slab.h:498
      [  357.217091] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 0, name: swapper/0
      [  357.217092] INFO: lockdep is turned off.
      [  357.217095] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W         5.9.0-rc5-wt-ath+ #196
      [  357.217096] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0049.2018.0801.1601 08/01/2018
      [  357.217097] Call Trace:
      [  357.217098]  <IRQ>
      [  357.217107]  ? ath11k_dp_htt_get_ppdu_desc+0xa9/0x170 [ath11k]
      [  357.217110]  dump_stack+0x77/0xa0
      [  357.217113]  ___might_sleep.cold+0xa6/0xb6
      [  357.217116]  kmem_cache_alloc_trace+0x1f2/0x270
      [  357.217122]  ath11k_dp_htt_get_ppdu_desc+0xa9/0x170 [ath11k]
      [  357.217129]  ath11k_htt_pull_ppdu_stats.isra.0+0x96/0x270 [ath11k]
      [  357.217135]  ath11k_dp_htt_htc_t2h_msg_handler+0xe7/0x1d0 [ath11k]
      [  357.217137]  ? trace_hardirqs_on+0x1c/0x100
      [  357.217143]  ath11k_htc_rx_completion_handler+0x207/0x370 [ath11k]
      [  357.217149]  ath11k_ce_recv_process_cb+0x15e/0x1e0 [ath11k]
      [  357.217151]  ? handle_irq_event+0x70/0xa8
      [  357.217154]  ath11k_pci_ce_tasklet+0x10/0x30 [ath11k_pci]
      [  357.217157]  tasklet_action_common.constprop.0+0xd4/0xf0
      [  357.217160]  __do_softirq+0xc9/0x482
      [  357.217162]  asm_call_on_stack+0x12/0x20
      [  357.217163]  </IRQ>
      [  357.217166]  do_softirq_own_stack+0x49/0x60
      [  357.217167]  irq_exit_rcu+0x9a/0xd0
      [  357.217169]  common_interrupt+0xa1/0x190
      [  357.217171]  asm_common_interrupt+0x1e/0x40
      [  357.217173] RIP: 0010:cpu_idle_poll.isra.0+0x2e/0x60
      [  357.217175] Code: 8b 35 26 27 74 69 e8 11 c8 3d ff e8 bc fa 42 ff e8 e7 9f 4a ff fb 65 48 8b 1c 25 80 90 01 00 48 8b 03 a8 08 74 0b eb 1c f3 90 <48> 8b 03 a8 08 75 13 8b 0
      [  357.217177] RSP: 0018:ffffffff97403ee0 EFLAGS: 00000202
      [  357.217178] RAX: 0000000000000001 RBX: ffffffff9742b8c0 RCX: 0000000000b890ca
      [  357.217180] RDX: 0000000000b890ca RSI: 0000000000000001 RDI: ffffffff968d0c49
      [  357.217181] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001
      [  357.217182] R10: ffffffff9742b8c0 R11: 0000000000000046 R12: 0000000000000000
      [  357.217183] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000066fdf520
      [  357.217186]  ? cpu_idle_poll.isra.0+0x19/0x60
      [  357.217189]  do_idle+0x5f/0xe0
      [  357.217191]  cpu_startup_entry+0x14/0x20
      [  357.217193]  start_kernel+0x443/0x464
      [  357.217196]  secondary_startup_64+0xa4/0xb0
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarWen Gong <wgong@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-8-git-send-email-kvalo@codeaurora.org
      6a8be1ba
    • Wen Gong's avatar
      ath11k: change to disable softirqs for ath11k_regd_update to solve deadlock · df648808
      Wen Gong authored
      After base_lock which occupy by ath11k_regd_update, the softirq run for
      WMI_REG_CHAN_LIST_CC_EVENTID maybe arrived and it also need to accuire
      the spin lock, then deadlock happend, change to disable softirqis to solve it.
      
      [  235.576990] ================================
      [  235.576991] WARNING: inconsistent lock state
      [  235.576993] 5.9.0-rc5-wt-ath+ #196 Not tainted
      [  235.576994] --------------------------------
      [  235.576995] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
      [  235.576997] kworker/u16:1/98 [HC0[0]:SC0[0]:HE1:SE1] takes:
      [  235.576998] ffff9655f75cad98 (&ab->base_lock){+.?.}-{2:2}, at: ath11k_regd_update+0x28/0x1d0 [ath11k]
      [  235.577009] {IN-SOFTIRQ-W} state was registered at:
      [  235.577013]   __lock_acquire+0x219/0x6e0
      [  235.577015]   lock_acquire+0xb6/0x270
      [  235.577018]   _raw_spin_lock+0x2c/0x70
      [  235.577023]   ath11k_reg_chan_list_event.isra.0+0x10d/0x1e0 [ath11k]
      [  235.577028]   ath11k_wmi_tlv_op_rx+0x3c3/0x560 [ath11k]
      [  235.577033]   ath11k_htc_rx_completion_handler+0x207/0x370 [ath11k]
      [  235.577039]   ath11k_ce_recv_process_cb+0x15e/0x1e0 [ath11k]
      [  235.577041]   ath11k_pci_ce_tasklet+0x10/0x30 [ath11k_pci]
      [  235.577043]   tasklet_action_common.constprop.0+0xd4/0xf0
      [  235.577045]   __do_softirq+0xc9/0x482
      [  235.577046]   asm_call_on_stack+0x12/0x20
      [  235.577048]   do_softirq_own_stack+0x49/0x60
      [  235.577049]   irq_exit_rcu+0x9a/0xd0
      [  235.577050]   common_interrupt+0xa1/0x190
      [  235.577052]   asm_common_interrupt+0x1e/0x40
      [  235.577053]   cpu_idle_poll.isra.0+0x2e/0x60
      [  235.577055]   do_idle+0x5f/0xe0
      [  235.577056]   cpu_startup_entry+0x14/0x20
      [  235.577058]   start_kernel+0x443/0x464
      [  235.577060]   secondary_startup_64+0xa4/0xb0
      [  235.577061] irq event stamp: 432035
      [  235.577063] hardirqs last  enabled at (432035): [<ffffffff968d12b4>] _raw_spin_unlock_irqrestore+0x34/0x40
      [  235.577064] hardirqs last disabled at (432034): [<ffffffff968d10d3>] _raw_spin_lock_irqsave+0x63/0x80
      [  235.577066] softirqs last  enabled at (431998): [<ffffffff967115c1>] inet6_fill_ifla6_attrs+0x3f1/0x430
      [  235.577067] softirqs last disabled at (431996): [<ffffffff9671159f>] inet6_fill_ifla6_attrs+0x3cf/0x430
      [  235.577068]
      [  235.577068] other info that might help us debug this:
      [  235.577069]  Possible unsafe locking scenario:
      [  235.577069]
      [  235.577070]        CPU0
      [  235.577070]        ----
      [  235.577071]   lock(&ab->base_lock);
      [  235.577072]   <Interrupt>
      [  235.577073]     lock(&ab->base_lock);
      [  235.577074]
      [  235.577074]  *** DEADLOCK ***
      [  235.577074]
      [  235.577075] 3 locks held by kworker/u16:1/98:
      [  235.577076]  #0: ffff9655f75b1d48 ((wq_completion)ath11k_qmi_driver_event){+.+.}-{0:0}, at: process_one_work+0x1d3/0x5d0
      [  235.577079]  #1: ffffa33cc02f3e70 ((work_completion)(&ab->qmi.event_work)){+.+.}-{0:0}, at: process_one_work+0x1d3/0x5d0
      [  235.577081]  #2: ffff9655f75cad50 (&ab->core_lock){+.+.}-{3:3}, at: ath11k_core_qmi_firmware_ready.part.0+0x4e/0x160 [ath11k]
      [  235.577087]
      [  235.577087] stack backtrace:
      [  235.577088] CPU: 3 PID: 98 Comm: kworker/u16:1 Not tainted 5.9.0-rc5-wt-ath+ #196
      [  235.577089] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0049.2018.0801.1601 08/01/2018
      [  235.577095] Workqueue: ath11k_qmi_driver_event ath11k_qmi_driver_event_work [ath11k]
      [  235.577096] Call Trace:
      [  235.577100]  dump_stack+0x77/0xa0
      [  235.577102]  mark_lock_irq.cold+0x15/0x3c
      [  235.577104]  mark_lock+0x1d7/0x540
      [  235.577105]  mark_usage+0xc7/0x140
      [  235.577107]  __lock_acquire+0x219/0x6e0
      [  235.577108]  ? sched_clock_cpu+0xc/0xb0
      [  235.577110]  lock_acquire+0xb6/0x270
      [  235.577116]  ? ath11k_regd_update+0x28/0x1d0 [ath11k]
      [  235.577118]  ? atomic_notifier_chain_register+0x2d/0x40
      [  235.577120]  _raw_spin_lock+0x2c/0x70
      [  235.577125]  ? ath11k_regd_update+0x28/0x1d0 [ath11k]
      [  235.577130]  ath11k_regd_update+0x28/0x1d0 [ath11k]
      [  235.577136]  __ath11k_mac_register+0x3fb/0x480 [ath11k]
      [  235.577141]  ath11k_mac_register+0x119/0x180 [ath11k]
      [  235.577146]  ath11k_core_pdev_create+0x17/0xe0 [ath11k]
      [  235.577150]  ath11k_core_qmi_firmware_ready.part.0+0x65/0x160 [ath11k]
      [  235.577155]  ath11k_qmi_driver_event_work+0x1c5/0x230 [ath11k]
      [  235.577158]  process_one_work+0x265/0x5d0
      [  235.577160]  worker_thread+0x49/0x300
      [  235.577161]  ? process_one_work+0x5d0/0x5d0
      [  235.577163]  kthread+0x135/0x150
      [  235.577164]  ? kthread_create_worker_on_cpu+0x60/0x60
      [  235.577166]  ret_from_fork+0x22/0x30
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarWen Gong <wgong@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-7-git-send-email-kvalo@codeaurora.org
      df648808
    • Kalle Valo's avatar
      ath11k: disable monitor mode on QCA6390 · 3f6e6c32
      Kalle Valo authored
      QCA6390 does not support monitor mode at the moment so disable it altogether,
      using a hack as mac80211 does not support disabling it otherwise. Add a boolean
      to hw_params to know if hardware supports monitor mode.
      
      IPQ8074 continues to support monitor mode normally.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-6-git-send-email-kvalo@codeaurora.org
      3f6e6c32
    • Kalle Valo's avatar
      ath11k: pci: check TCSR_SOC_HW_VERSION · 18ac1665
      Kalle Valo authored
      There are different versions of QCA6390. Check TCSR_SOC_HW_VERSION to make sure
      that the device is hw2.0, all the rest are unsupported.
      
      This needs to be checked after ath11k_pci_claim() so move the whole switch choosing hw_ver.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-5-git-send-email-kvalo@codeaurora.org
      18ac1665
    • Kalle Valo's avatar
      ath11k: add interface_modes to hw_params · 2626c269
      Kalle Valo authored
      As QCA6390 does not support mesh interfaces, move the interface_modes to
      hw_params. Also create interface combinations dynamically so that it's easy to
      change the values.
      
      Now QCA6390 does not claim to support mesh interfaces to user space, but
      IPQ8074 continues to do that.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-4-git-send-email-kvalo@codeaurora.org
      2626c269
    • Carl Huang's avatar
      ath11k: fix AP mode for QCA6390 · b0919924
      Carl Huang authored
      For QCA6390, station vdev needs to delay startup but not for AP mode. On AP
      mode vdev starts up immediately after bss peer is created in chanctx assignment
      context.
      
      This patch does not affect IPQ8074 family of devices.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-3-git-send-email-kvalo@codeaurora.org
      b0919924
    • Ben Greear's avatar
      ath11k: support loading ELF board files · 616c16a4
      Ben Greear authored
      The QCA6390 board I have, model 8291M-PR comes with an ELF board file.  To get
      this to at least somewhat work, I renamed bdwlan.e04 to 'board.bin' and then
      added this patch to check for ELF magic string in the beginning of the file.
      If that is found, use type ELF.  After this the driver loads.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarBen Greear <greearb@candelatech.com>
      [kvalo@codeaurora.org: use elf.h, minor cleanup]
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-2-git-send-email-kvalo@codeaurora.org
      616c16a4
    • Alex Dewar's avatar
      ath11k: Correctly check errors for calls to debugfs_create_dir() · 476c1d3c
      Alex Dewar authored
      debugfs_create_dir() returns an ERR_PTR in case of error, but never a
      null pointer. There are a number of places where error-checking code can
      accordingly be simplified.
      
      Addresses-Coverity: CID 1497150: Memory - illegal accesses (USE_AFTER_FREE)
      Addresses-Coverity: CID 1497158: Memory - illegal accesses (USE_AFTER_FREE)
      Addresses-Coverity: CID 1497160: Memory - illegal accesses (USE_AFTER_FREE)
      Signed-off-by: default avatarAlex Dewar <alex.dewar90@gmail.com>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20200927132451.585473-1-alex.dewar90@gmail.com
      476c1d3c
    • Kalle Valo's avatar
      ath11k: mac: fix parenthesis alignment · cd19836a
      Kalle Valo authored
      Commit 6aea26ce ("mac80211: rework tx encapsulation offload API")
      introduced a new checkpatch warning:
      
      drivers/net/wireless/ath/ath11k/mac.c:4354: Alignment should match open parenthesis
      
      Fix that.
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601369160-1252-1-git-send-email-kvalo@codeaurora.org
      cd19836a
  2. 29 Sep, 2020 2 commits
  3. 28 Sep, 2020 1 commit
  4. 27 Sep, 2020 28 commits