This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3351:CC3351:cc33xx_op_resume () 中可能存在未初始化的返回值、导致 WLAN 接口关闭

Guru**** 2864540 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1637091/cc3351-cc3351-potential-uninitialized-return-value-in-cc33xx_op_resume-leading-to-wlan-interface-shutdown

器件型号: CC3351

TI 团队大家好、
我来自 BSH、在 CVTE 团队工作、使用以下版本测试 WiFi image.png
我们注意到 cc33xx 驱动程序恢复路径中存在一个潜在问题:cc33xx_op_resume 返回 一个 未初始化的值、该值可被上层解释为恢复失败、并可能出现恢复失败
导致所有无线接口关闭。
 
 
以下是补丁“0001-cc33xx_kernel.patch"的“的代码
+static int __ themy_unused cc33xx_op_restore(结构 ieee80211_hw *hw)
+{
+ struct cc33xx *wl = hw->priv;
+ 结构 cc33xx_VIF *wlvif;
+ 无符号长标志;
+ bool run_irq_work = false、pending_recovery;
+ int ret;
+
+ cc33xx_debug (debug_mac80211、“mac80211 resume wow=%d“、
+       wl->keep_device_power);
+ warn_on(!wl->keep_device_power);
+
+/*  
+  *重新启用 IRQ_Work 排队、并在以下情况下直接调用 IRQ_Work
+  *有一个待处理的工作。
+  */
+ spin_loc_irqsave(&wl->wl_lock, flags);
+ CLEAR_BIT (CC33XX_FLAG_SUSPENED、&WL->FLAGS);
+ RUN_IRQ_WORK = TEST_AND_CLEAR_BIT (CC33XX_FLAG_PEND_WORK、&WL->FLAGS);
+ SPIN_UNLOCK_irqrestore (&WL->WL_LOCK、flags);
+
+ mutex_lock(&wl->mutex);
+
+ /*在调用任何 SDIO 函数之前测试恢复标志*/
+ PENDING_RECOVERY = TEST_BIT (CC33XX_FLAG_RECOVERY_IN_PROGRESS、
+          &WL->flags);
+
+ if (run_IRQ_work){
+   cc33xx_debug (debug_mac80211、“直接运行延迟的 IRQ_work);
+
+   /*如果恢复挂起、请勿与硬件通信*/
+   if(!pending_recovery){
+      RET = wlcore_irq_locked (WL);
+      IF (RET)
+        cc33xx_queue_recovery_work (wl);
+   }
+
+   wlcore_enable_interrupts (wl);
+ }
+
+ if (pending_recovery){
+   cc33xx_warning (“恢复时忘记恢复队列“);
+   ieee80211_queue_work(WL->HW,&WL->recovery_work);
+   转到外;
+ }
+
+ cc33xx_for_each_wlvif (wl、wlvif){
+   if (wlcore_is_p2p_mgmt (wlvif))
+      继续;
+
+   cc33xx_configure_reume (wl、wlvif);
+ }
+
+输出:
+ wl->keep_device_power = false;
+
+/*  
+  *设置一个标志以在恢复后的第一个 Tx 上重新初始化看门狗。
+  *这样我们就避免了 Tx 完成中断的可能情况
+  *到达失败、我们执行虚假恢复。
+  */
+ SET_BIT (CC33XX_FLAG_REINIT_TX_WDOG、&WL->flags);
+ mutex_unlock (&wl->mutex);
+
+ 返回 ret;
+}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    多亏了这个、那么是否应该将“int ret“更改为“int ret = 0“来解决这个问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的。 更改为“int ret = 0“可以解决这个问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我只想在此处确认此补丁已合并、并将在我们的下一个版本中提供。