1. 18 Dec, 2020 2 commits
  2. 17 Dec, 2020 8 commits
    • Wen Gong's avatar
      ath10k: prevent deinitializing NAPI twice · e2f8b74e
      Wen Gong authored
      It happened "Kernel panic - not syncing: hung_task: blocked tasks" when
      test simulate crash and ifconfig down/rmmod meanwhile.
      
      Test steps:
      
      1.Test commands, either can reproduce the hang for PCIe, SDIO and SNOC.
      echo soft > /sys/kernel/debug/ieee80211/phy0/ath10k/simulate_fw_crash;sleep 0.05;ifconfig wlan0 down
      echo soft > /sys/kernel/debug/ieee80211/phy0/ath10k/simulate_fw_crash;rmmod ath10k_sdio
      echo hw-restart > /sys/kernel/debug/ieee80211/phy0/ath10k/simulate_fw_crash;rmmod ath10k_pci
      
      2. dmesg:
      [ 5622.548630] ath10k_sdio mmc1:0001:1: simulating soft firmware crash
      [ 5622.655995] ieee80211 phy0: Hardware restart was requested
      [ 5776.355164] INFO: task shill:1572 blocked for more than 122 seconds.
      [ 5776.355687] INFO: task kworker/1:2:24437 blocked for more than 122 seconds.
      [ 5776.359812] Kernel panic - not syncing: hung_task: blocked tasks
      [ 5776.359836] CPU: 1 PID: 55 Comm: khungtaskd Tainted: G        W         4.19.86 #137
      [ 5776.359846] Hardware name: MediaTek krane sku176 board (DT)
      [ 5776.359855] Call trace:
      [ 5776.359868]  dump_backtrace+0x0/0x170
      [ 5776.359881]  show_stack+0x20/0x2c
      [ 5776.359896]  dump_stack+0xd4/0x10c
      [ 5776.359916]  panic+0x12c/0x29c
      [ 5776.359937]  hung_task_panic+0x0/0x50
      [ 5776.359953]  kthread+0x120/0x130
      [ 5776.359965]  ret_from_fork+0x10/0x18
      [ 5776.359986] SMP: stopping secondary CPUs
      [ 5776.360012] Kernel Offset: 0x141ea00000 from 0xffffff8008000000
      [ 5776.360026] CPU features: 0x0,2188200c
      [ 5776.360035] Memory Limit: none
      
      command "ifconfig wlan0 down" or "rmmod ath10k_sdio" will be blocked
      callstack of ifconfig:
      [<0>] __switch_to+0x120/0x13c
      [<0>] msleep+0x28/0x38
      [<0>] ath10k_sdio_hif_stop+0x24c/0x294 [ath10k_sdio]
      [<0>] ath10k_core_stop+0x50/0x78 [ath10k_core]
      [<0>] ath10k_halt+0x120/0x178 [ath10k_core]
      [<0>] ath10k_stop+0x4c/0x8c [ath10k_core]
      [<0>] drv_stop+0xe0/0x1e4 [mac80211]
      [<0>] ieee80211_stop_device+0x48/0x54 [mac80211]
      [<0>] ieee80211_do_stop+0x678/0x6f8 [mac80211]
      [<0>] ieee80211_stop+0x20/0x30 [mac80211]
      [<0>] __dev_close_many+0xb8/0x11c
      [<0>] __dev_change_flags+0xe0/0x1d0
      [<0>] dev_change_flags+0x30/0x6c
      [<0>] devinet_ioctl+0x370/0x564
      [<0>] inet_ioctl+0xdc/0x304
      [<0>] sock_do_ioctl+0x50/0x288
      [<0>] compat_sock_ioctl+0x1b4/0x1aac
      [<0>] __se_compat_sys_ioctl+0x100/0x26fc
      [<0>] __arm64_compat_sys_ioctl+0x20/0x2c
      [<0>] el0_svc_common+0xa4/0x154
      [<0>] el0_svc_compat_handler+0x2c/0x38
      [<0>] el0_svc_compat+0x8/0x18
      [<0>] 0xffffffffffffffff
      
      callstack of rmmod:
      [<0>] __switch_to+0x120/0x13c
      [<0>] msleep+0x28/0x38
      [<0>] ath10k_sdio_hif_stop+0x294/0x31c [ath10k_sdio]
      [<0>] ath10k_core_stop+0x50/0x78 [ath10k_core]
      [<0>] ath10k_halt+0x120/0x178 [ath10k_core]
      [<0>] ath10k_stop+0x4c/0x8c [ath10k_core]
      [<0>] drv_stop+0xe0/0x1e4 [mac80211]
      [<0>] ieee80211_stop_device+0x48/0x54 [mac80211]
      [<0>] ieee80211_do_stop+0x678/0x6f8 [mac80211]
      [<0>] ieee80211_stop+0x20/0x30 [mac80211]
      [<0>] __dev_close_many+0xb8/0x11c
      [<0>] dev_close_many+0x70/0x100
      [<0>] dev_close+0x4c/0x80
      [<0>] cfg80211_shutdown_all_interfaces+0x50/0xcc [cfg80211]
      [<0>] ieee80211_remove_interfaces+0x58/0x1a0 [mac80211]
      [<0>] ieee80211_unregister_hw+0x40/0x100 [mac80211]
      [<0>] ath10k_mac_unregister+0x1c/0x44 [ath10k_core]
      [<0>] ath10k_core_unregister+0x38/0x7c [ath10k_core]
      [<0>] ath10k_sdio_remove+0x8c/0xd0 [ath10k_sdio]
      [<0>] sdio_bus_remove+0x48/0x108
      [<0>] device_release_driver_internal+0x138/0x1ec
      [<0>] driver_detach+0x6c/0xa8
      [<0>] bus_remove_driver+0x78/0xa8
      [<0>] driver_unregister+0x30/0x50
      [<0>] sdio_unregister_driver+0x28/0x34
      [<0>] cleanup_module+0x14/0x6bc [ath10k_sdio]
      [<0>] __arm64_sys_delete_module+0x1e0/0x22c
      [<0>] el0_svc_common+0xa4/0x154
      [<0>] el0_svc_compat_handler+0x2c/0x38
      [<0>] el0_svc_compat+0x8/0x18
      [<0>] 0xffffffffffffffff
      
      SNOC:
      [  647.156863] Call trace:
      [  647.162166] [<ffffff80080855a4>] __switch_to+0x120/0x13c
      [  647.164512] [<ffffff800899d8b8>] __schedule+0x5ec/0x798
      [  647.170062] [<ffffff800899dad8>] schedule+0x74/0x94
      [  647.175050] [<ffffff80089a0848>] schedule_timeout+0x314/0x42c
      [  647.179874] [<ffffff80089a0a14>] schedule_timeout_uninterruptible+0x34/0x40
      [  647.185780] [<ffffff80082a494>] msleep+0x28/0x38
      [  647.192546] [<ffffff800117ec4c>] ath10k_snoc_hif_stop+0x4c/0x1e0 [ath10k_snoc]
      [  647.197439] [<ffffff80010dfbd8>] ath10k_core_stop+0x50/0x7c [ath10k_core]
      [  647.204652] [<ffffff80010c8f48>] ath10k_halt+0x114/0x16c [ath10k_core]
      [  647.211420] [<ffffff80010cad68>] ath10k_stop+0x4c/0x88 [ath10k_core]
      [  647.217865] [<ffffff8000fdbf54>] drv_stop+0x110/0x244 [mac80211]
      [  647.224367] [<ffffff80010147ac>] ieee80211_stop_device+0x48/0x54 [mac80211]
      [  647.230359] [<ffffff8000ff3eec>] ieee80211_do_stop+0x6a4/0x73c [mac80211]
      [  647.237033] [<ffffff8000ff4500>] ieee80211_stop+0x20/0x30 [mac80211]
      [  647.243942] [<ffffff80087e39b8>] __dev_close_many+0xa0/0xfc
      [  647.250435] [<ffffff80087e3888>] dev_close_many+0x70/0x100
      [  647.255651] [<ffffff80087e3a60>] dev_close+0x4c/0x80
      [  647.261244] [<ffffff8000f1ba54>] cfg80211_shutdown_all_interfaces+0x44/0xcc [cfg80211]
      [  647.266383] [<ffffff8000ff3fdc>] ieee80211_remove_interfaces+0x58/0x1b4 [mac80211]
      [  647.274128] [<ffffff8000fda540>] ieee80211_unregister_hw+0x50/0x120 [mac80211]
      [  647.281659] [<ffffff80010ca314>] ath10k_mac_unregister+0x1c/0x44 [ath10k_core]
      [  647.288839] [<ffffff80010dfc94>] ath10k_core_unregister+0x48/0x90 [ath10k_core]
      [  647.296027] [<ffffff800117e598>] ath10k_snoc_remove+0x5c/0x150 [ath10k_snoc]
      [  647.303229] [<ffffff80085625fc>] platform_drv_remove+0x28/0x50
      [  647.310517] [<ffffff80085601a4>] device_release_driver_internal+0x114/0x1b8
      [  647.316257] [<ffffff80085602e4>] driver_detach+0x6c/0xa8
      [  647.323021] [<ffffff800855e5b8>] bus_remove_driver+0x78/0xa8
      [  647.328571] [<ffffff800856107c>] driver_unregister+0x30/0x50
      [  647.334213] [<ffffff8008562674>] platform_driver_unregister+0x1c/0x28
      [  647.339876] [<ffffff800117fefc>] cleanup_module+0x1c/0x120 [ath10k_snoc]
      [  647.346196] [<ffffff8008143ab8>] SyS_delete_module+0x1dc/0x22c
      
      PCIe:
      [  615.392770] rmmod           D    0  3523   3458 0x00000080
      [  615.392777] Call Trace:
      [  615.392784]  __schedule+0x617/0x7d3
      [  615.392791]  ? __mod_timer+0x263/0x35c
      [  615.392797]  schedule+0x62/0x72
      [  615.392803]  schedule_timeout+0x8d/0xf3
      [  615.392809]  ? run_local_timers+0x6b/0x6b
      [  615.392814]  msleep+0x1b/0x22
      [  615.392824]  ath10k_pci_hif_stop+0x68/0xd6 [ath10k_pci]
      [  615.392844]  ath10k_core_stop+0x44/0x67 [ath10k_core]
      [  615.392859]  ath10k_halt+0x102/0x153 [ath10k_core]
      [  615.392873]  ath10k_stop+0x38/0x75 [ath10k_core]
      [  615.392893]  drv_stop+0x9a/0x13c [mac80211]
      [  615.392915]  ieee80211_do_stop+0x772/0x7cd [mac80211]
      [  615.392937]  ieee80211_stop+0x1a/0x1e [mac80211]
      [  615.392945]  __dev_close_many+0x9e/0xf0
      [  615.392952]  dev_close_many+0x62/0xe8
      [  615.392958]  dev_close+0x54/0x7d
      [  615.392975]  cfg80211_shutdown_all_interfaces+0x6e/0xa5 [cfg80211]
      [  615.393021]  ieee80211_remove_interfaces+0x52/0x1aa [mac80211]
      [  615.393049]  ieee80211_unregister_hw+0x54/0x136 [mac80211]
      [  615.393068]  ath10k_mac_unregister+0x19/0x4a [ath10k_core]
      [  615.393091]  ath10k_core_unregister+0x39/0x7e [ath10k_core]
      [  615.393104]  ath10k_pci_remove+0x3d/0x7f [ath10k_pci]
      [  615.393117]  pci_device_remove+0x41/0xa6
      [  615.393129]  device_release_driver_internal+0x123/0x1ec
      [  615.393140]  driver_detach+0x60/0x90
      [  615.393152]  bus_remove_driver+0x72/0x9f
      [  615.393164]  pci_unregister_driver+0x1e/0x87
      [  615.393177]  SyS_delete_module+0x1d7/0x277
      [  615.393188]  do_syscall_64+0x6b/0xf7
      [  615.393199]  entry_SYSCALL_64_after_hwframe+0x41/0xa6
      
      The test command run simulate_fw_crash firstly and it call into
      ath10k_sdio_hif_stop from ath10k_core_restart, then napi_disable
      is called and bit NAPI_STATE_SCHED is set. After that, function
      ath10k_sdio_hif_stop is called again from ath10k_stop by command
      "ifconfig wlan0 down" or "rmmod ath10k_sdio", then command blocked.
      
      It is blocked by napi_synchronize, napi_disable will set bit with
      NAPI_STATE_SCHED, and then napi_synchronize will enter dead loop
      becuase bit NAPI_STATE_SCHED is set by napi_disable.
      
      function of napi_synchronize
      static inline void napi_synchronize(const struct napi_struct *n)
      {
      	if (IS_ENABLED(CONFIG_SMP))
      		while (test_bit(NAPI_STATE_SCHED, &n->state))
      			msleep(1);
      	else
      		barrier();
      }
      
      function of napi_disable
      void napi_disable(struct napi_struct *n)
      {
      	might_sleep();
      	set_bit(NAPI_STATE_DISABLE, &n->state);
      
      	while (test_and_set_bit(NAPI_STATE_SCHED, &n->state))
      		msleep(1);
      	while (test_and_set_bit(NAPI_STATE_NPSVC, &n->state))
      		msleep(1);
      
      	hrtimer_cancel(&n->timer);
      
      	clear_bit(NAPI_STATE_DISABLE, &n->state);
      }
      
      Add flag for it avoid the hang and crash.
      
      Tested-on: QCA6174 hw3.2 SDIO WLAN.RMH.4.4.1-00049
      Tested-on: QCA6174 hw3.2 PCI WLAN.RM.4.4.1-00110-QCARMSWP-1
      Tested-on: WCN3990 hw1.0 SNOC hw1.0 WLAN.HL.3.1-01307.1-QCAHLSWMTPL-2
      Signed-off-by: default avatarWen Gong <wgong@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1598617348-2325-1-git-send-email-wgong@codeaurora.org
      e2f8b74e
    • Jouni Malinen's avatar
      ath9k: Postpone key cache entry deletion for TXQ frames reference it · ca284802
      Jouni Malinen authored
      Do not delete a key cache entry that is still being referenced by
      pending frames in TXQs. This avoids reuse of the key cache entry while a
      frame might still be transmitted using it.
      
      To avoid having to do any additional operations during the main TX path
      operations, track pending key cache entries in a new bitmap and check
      whether any pending entries can be deleted before every new key
      add/remove operation. Also clear any remaining entries when stopping the
      interface.
      Signed-off-by: default avatarJouni Malinen <jouni@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20201214172118.18100-6-jouni@codeaurora.org
      ca284802
    • Jouni Malinen's avatar
      ath: Modify ath_key_delete() to not need full key entry · 144cd24d
      Jouni Malinen authored
      tkip_keymap can be used internally to avoid the reference to key->cipher
      and with this, only the key index value itself is needed. This allows
      ath_key_delete() call to be postponed to be handled after the upper
      layer STA and key entry have already been removed. This is needed to
      make ath9k key cache management safer.
      Signed-off-by: default avatarJouni Malinen <jouni@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20201214172118.18100-5-jouni@codeaurora.org
      144cd24d
    • Jouni Malinen's avatar
      ath: Export ath_hw_keysetmac() · d2d3e364
      Jouni Malinen authored
      ath9k is going to use this for safer management of key cache entries.
      Signed-off-by: default avatarJouni Malinen <jouni@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20201214172118.18100-4-jouni@codeaurora.org
      d2d3e364
    • Jouni Malinen's avatar
      ath9k: Clear key cache explicitly on disabling hardware · 73488cb2
      Jouni Malinen authored
      Now that ath/key.c may not be explicitly clearing keys from the key
      cache, clear all key cache entries when disabling hardware to make sure
      no keys are left behind beyond this point.
      Signed-off-by: default avatarJouni Malinen <jouni@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20201214172118.18100-3-jouni@codeaurora.org
      73488cb2
    • Jouni Malinen's avatar
      ath: Use safer key clearing with key cache entries · 56c5485c
      Jouni Malinen authored
      It is possible for there to be pending frames in TXQs with a reference
      to the key cache entry that is being deleted. If such a key cache entry
      is cleared, those pending frame in TXQ might get transmitted without
      proper encryption. It is safer to leave the previously used key into the
      key cache in such cases. Instead, only clear the MAC address to prevent
      RX processing from using this key cache entry.
      
      This is needed in particularly in AP mode where the TXQs cannot be
      flushed on station disconnection. This change alone may not be able to
      address all cases where the key cache entry might get reused for other
      purposes immediately (the key cache entry should be released for reuse
      only once the TXQs do not have any remaining references to them), but
      this makes it less likely to get unprotected frames and the more
      complete changes may end up being significantly more complex.
      Signed-off-by: default avatarJouni Malinen <jouni@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20201214172118.18100-2-jouni@codeaurora.org
      56c5485c
    • Rakesh Pillai's avatar
      ath10k: Remove voltage regulator votes during wifi disable · 5f1aa93f
      Rakesh Pillai authored
      When the wlan is disabled, i.e when all the interfaces are
      deleted, voltage regulator votes are not removed. This leads
      to more power consumption even when wlan is disabled.
      
      Move the adding/removing of voltage regulator votes as part
      of hif power on/off in SNOC targets, so that these voltage
      regulator votes are there only when wlan is enabled.
      
      Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.1-01040-QCAHLSWMTPLZ-1
      Signed-off-by: default avatarRakesh Pillai <pillair@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1607713230-18382-1-git-send-email-pillair@codeaurora.org
      5f1aa93f
    • Rakesh Pillai's avatar
      ath10k: Fix error handling in case of CE pipe init failure · 31561e85
      Rakesh Pillai authored
      Currently if the copy engine pipe init fails for snoc based
      chipsets, the rri is not freed.
      
      Fix this error handling for copy engine pipe init
      failure.
      
      Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.1-01040-QCAHLSWMTPLZ-1
      
      Fixes: 4945af5b ("ath10k: enable SRRI/DRRI support on ddr for WCN3990")
      Signed-off-by: default avatarRakesh Pillai <pillair@codeaurora.org>
      Reviewed-by: default avatarBrian Norris <briannorris@chromium.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1607713210-18320-1-git-send-email-pillair@codeaurora.org
      31561e85
  3. 13 Dec, 2020 1 commit
  4. 12 Dec, 2020 27 commits
  5. 11 Dec, 2020 2 commits
    • Linus Torvalds's avatar
      Merge tag 'mtd/fixes-for-5.10-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux · 7f376f19
      Linus Torvalds authored
      Pull mtd fixes from Miquel Raynal:
       "Second series of fixes for raw NAND drivers initiated because of a
        rework of the ECC engine subsystem.
      
        The location of the DT parsing logic got moved, breaking several
        drivers which in fact were not doing the ECC engine initialization at
        the right place.
      
        These drivers have been fixed by enforcing a particular ECC engine
        type and algorithm, software Hamming, while the algorithm may be
        overwritten by a DT property. This merge request fixes this in the
        xway, socrates, plat_nand, pasemi, orion, mpc5121, gpio, au1550 and
        ams-delta controller drivers"
      
      * tag 'mtd/fixes-for-5.10-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux:
        mtd: rawnand: xway: Do not force a particular software ECC engine
        mtd: rawnand: socrates: Do not force a particular software ECC engine
        mtd: rawnand: plat_nand: Do not force a particular software ECC engine
        mtd: rawnand: pasemi: Do not force a particular software ECC engine
        mtd: rawnand: orion: Do not force a particular software ECC engine
        mtd: rawnand: mpc5121: Do not force a particular software ECC engine
        mtd: rawnand: gpio: Do not force a particular software ECC engine
        mtd: rawnand: au1550: Do not force a particular software ECC engine
        mtd: rawnand: ams-delta: Do not force a particular software ECC engine
      7f376f19
    • Linus Torvalds's avatar
      Merge tag 'mmc-v5.10-rc4-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc · 1de5d12b
      Linus Torvalds authored
      Pull MMC fixes from Ulf Hansson:
       "A couple of MMC fixes:
      
        MMC core:
         - Fixup condition for CMD13 polling for RPMB requests
      
        MMC host:
         - mtk-sd: Fix system suspend/resume support for CQHCI
         - mtd-sd: Extend SDIO IRQ fix to more variants
         - sdhci-of-arasan: Fix clock registration error for Keem Bay SOC
         - tmio: Bring HW to a sane state after a power off"
      
      * tag 'mmc-v5.10-rc4-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
        mmc: mediatek: mark PM functions as __maybe_unused
        mmc: block: Fixup condition for CMD13 polling for RPMB requests
        mmc: tmio: improve bringing HW to a sane state with MMC_POWER_OFF
        mmc: sdhci-of-arasan: Fix clock registration error for Keem Bay SOC
        mmc: mediatek: Extend recheck_sdio_irq fix to more variants
        mmc: mediatek: Fix system suspend/resume support for CQHCI
      1de5d12b