patch "net: rtlwifi: properly check for alloc_workqueue() failure" added to char-misc-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
net: rtlwifi: properly check for alloc_workqueue() failure
to my char-misc git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
in the char-misc-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 30b0e0ee9d02b97b68705c46b41444786effc40c Mon Sep 17 00:00:00 2001
From: Greg Kroah-Hartman <[email protected]>
Date: Mon, 3 May 2021 13:56:40 +0200
Subject: net: rtlwifi: properly check for alloc_workqueue() failure
If alloc_workqueue() fails, properly catch this and propagate the error to the calling functions, so that the devuce initialization will properly error out.
--- drivers/net/wireless/realtek/rtlwifi/base.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
drivers/net/wireless/realtek/rtlwifi/base.c +10 -5
@@ -440,9 +440,14 @@ static void rtl_watchdog_wq_callback(struct work_struct *work);static void rtl_fwevt_wq_callback (struct work_struct *work);static void rtl_c2hcmd_wq_callback (struct work_struct *work); -static void _rtl_init_deferred_work (struct ieee80211_hw *hw) +static int _rtl_init_deferred_work (struct ieee80211_hw *hw) {struct rtl_priv *rtlpriv =rtl_priv (hw); +struct workqueue_struct *wq; + + wq =alloc_workqueue ("%s" ,0 ,0 , rtlpriv->cfg->name); +if (!wq) +return -ENOMEM ;/* <1> timer */ timer_setup(&rtlpriv->works.watchdog_timer,
@@ -451,7 +456,8 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw) rtl_easy_concurrent_retrytimer_callback, 0);/* <2> work queue */ rtlpriv->works.hw = hw; - rtlpriv->works.rtl_wq =alloc_workqueue ("%s" ,0 ,0 , rtlpriv->cfg->name); + rtlpriv->works.rtl_wq = wq; +INIT_DELAYED_WORK (&rtlpriv->works.watchdog_wq, rtl_watchdog_wq_callback); INIT_DELAYED_WORK(&rtlpriv->works.ips_nic_off_wq,
@@ -461,6 +467,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw) rtl_swlps_rfon_wq_callback);INIT_DELAYED_WORK (&rtlpriv->works.fwevt_wq, rtl_fwevt_wq_callback);INIT_DELAYED_WORK (&rtlpriv->works.c2hcmd_wq, rtl_c2hcmd_wq_callback); +return 0 ; }void rtl_deinit_deferred_work (struct ieee80211_hw *hw,bool ips_wq)
@@ -559,9 +566,7 @@ int rtl_init_core(struct ieee80211_hw *hw) rtlmac->link_state =MAC80211_NOLINK ;/* <6> init deferred work */ -_rtl_init_deferred_work (hw); - -return 0 ; +return _rtl_init_deferred_work (hw); }EXPORT_SYMBOL_GPL (rtl_init_core);
Signature · 1 line
2.31.1