From nobody Sun Apr 12 06:07:41 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3921FC04A68 for ; Sat, 30 Jul 2022 14:40:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234870AbiG3OkB (ORCPT ); Sat, 30 Jul 2022 10:40:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233597AbiG3Oj7 (ORCPT ); Sat, 30 Jul 2022 10:39:59 -0400 Received: from viti.kaiser.cx (viti.kaiser.cx [IPv6:2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F11D617AA2 for ; Sat, 30 Jul 2022 07:39:56 -0700 (PDT) Received: from dslb-188-104-059-172.188.104.pools.vodafone-ip.de ([188.104.59.172] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1oHnd9-0004pM-KF; Sat, 30 Jul 2022 16:39:51 +0200 From: Martin Kaiser To: Greg Kroah-Hartman Cc: Larry Finger , Phillip Potter , Michael Straube , Pavel Skripkin , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH 1/3] staging: r8188eu: handle errors from ReadAdapterInfo8188EU Date: Sat, 30 Jul 2022 16:39:37 +0200 Message-Id: <20220730143939.671951-2-martin@kaiser.cx> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220730143939.671951-1-martin@kaiser.cx> References: <20220730143939.671951-1-martin@kaiser.cx> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Update ReadAdapterInfo8188EU to return 0 for success or a negative error code. If rtw_read8 fails, we can just relay the error it returns. Update rtw_usb_if1_init to check the return value from ReadAdapterInfo8188EU. For now, rtw_usb_if1_init does not yet pass errors from ReadAdapterInfo8188EU on to its caller. Suggested-by: Pavel Skripkin Signed-off-by: Martin Kaiser Tested-by: Philipp Hortmann # Edimax N150 --- drivers/staging/r8188eu/hal/usb_halinit.c | 7 ++++--- drivers/staging/r8188eu/include/hal_intf.h | 2 +- drivers/staging/r8188eu/os_dep/usb_intf.c | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/staging/r8188eu/hal/usb_halinit.c b/drivers/staging/r8= 188eu/hal/usb_halinit.c index ff074d246dab..efb529bb4c8a 100644 --- a/drivers/staging/r8188eu/hal/usb_halinit.c +++ b/drivers/staging/r8188eu/hal/usb_halinit.c @@ -922,7 +922,7 @@ static void Hal_EfuseParseMACAddr_8188EU(struct adapter= *adapt, u8 *hwinfo, bool } } =20 -void ReadAdapterInfo8188EU(struct adapter *Adapter) +int ReadAdapterInfo8188EU(struct adapter *Adapter) { struct eeprom_priv *eeprom =3D &Adapter->eeprompriv; struct led_priv *ledpriv =3D &Adapter->ledpriv; @@ -933,13 +933,13 @@ void ReadAdapterInfo8188EU(struct adapter *Adapter) /* check system boot selection */ res =3D rtw_read8(Adapter, REG_9346CR, &eeValue); if (res) - return; + return res; =20 eeprom->bautoload_fail_flag =3D !(eeValue & EEPROM_EN); =20 efuse_buf =3D kmalloc(EFUSE_MAP_LEN_88E, GFP_KERNEL); if (!efuse_buf) - return; + return -ENOMEM; memset(efuse_buf, 0xFF, EFUSE_MAP_LEN_88E); =20 if (!(eeValue & BOOT_FROM_EEPROM) && !eeprom->bautoload_fail_flag) { @@ -961,6 +961,7 @@ void ReadAdapterInfo8188EU(struct adapter *Adapter) =20 ledpriv->bRegUseLed =3D true; kfree(efuse_buf); + return 0; } =20 void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_le= vel) diff --git a/drivers/staging/r8188eu/include/hal_intf.h b/drivers/staging/r= 8188eu/include/hal_intf.h index ab6856d8a090..3ed5b7e031cd 100644 --- a/drivers/staging/r8188eu/include/hal_intf.h +++ b/drivers/staging/r8188eu/include/hal_intf.h @@ -11,7 +11,7 @@ typedef s32 (*c2h_id_filter)(u8 id); =20 void rtl8188eu_interface_configure(struct adapter *adapt); -void ReadAdapterInfo8188EU(struct adapter *Adapter); +int ReadAdapterInfo8188EU(struct adapter *Adapter); void rtl8188eu_init_default_value(struct adapter *adapt); void rtl8188e_SetHalODMVar(struct adapter *Adapter, void *pValue1, bool bS= et); u32 rtl8188eu_InitPowerOn(struct adapter *adapt); diff --git a/drivers/staging/r8188eu/os_dep/usb_intf.c b/drivers/staging/r8= 188eu/os_dep/usb_intf.c index cc2b44f60c46..e1a0447fd1e7 100644 --- a/drivers/staging/r8188eu/os_dep/usb_intf.c +++ b/drivers/staging/r8188eu/os_dep/usb_intf.c @@ -332,7 +332,8 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_pr= iv *dvobj, rtl8188eu_interface_configure(padapter); =20 /* step read efuse/eeprom data and get mac_addr */ - ReadAdapterInfo8188EU(padapter); + if (ReadAdapterInfo8188EU(padapter) < 0) + goto handle_dualmac; =20 /* step 5. */ if (rtw_init_drv_sw(padapter) =3D=3D _FAIL) --=20 2.30.2 From nobody Sun Apr 12 06:07:41 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E1E3C04A68 for ; Sat, 30 Jul 2022 14:40:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235003AbiG3OkG (ORCPT ); Sat, 30 Jul 2022 10:40:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54708 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234095AbiG3Oj7 (ORCPT ); Sat, 30 Jul 2022 10:39:59 -0400 Received: from viti.kaiser.cx (viti.kaiser.cx [IPv6:2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9141A17AAC for ; Sat, 30 Jul 2022 07:39:58 -0700 (PDT) Received: from dslb-188-104-059-172.188.104.pools.vodafone-ip.de ([188.104.59.172] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1oHndA-0004pM-LY; Sat, 30 Jul 2022 16:39:52 +0200 From: Martin Kaiser To: Greg Kroah-Hartman Cc: Larry Finger , Phillip Potter , Michael Straube , Pavel Skripkin , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH 2/3] staging: r8188eu: make rtw_handle_dualmac a void function Date: Sat, 30 Jul 2022 16:39:38 +0200 Message-Id: <20220730143939.671951-3-martin@kaiser.cx> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220730143939.671951-1-martin@kaiser.cx> References: <20220730143939.671951-1-martin@kaiser.cx> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The rtw_handle_dualmac function always returns _SUCCESS. Remove the return value and update the one caller that checks it. Signed-off-by: Martin Kaiser Tested-by: Philipp Hortmann # Edimax N150 --- drivers/staging/r8188eu/core/rtw_wlan_util.c | 5 +---- drivers/staging/r8188eu/include/drv_types.h | 2 +- drivers/staging/r8188eu/os_dep/usb_intf.c | 4 +--- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_wlan_util.c b/drivers/staging= /r8188eu/core/rtw_wlan_util.c index 3a002cb6834f..235dbf353802 100644 --- a/drivers/staging/r8188eu/core/rtw_wlan_util.c +++ b/drivers/staging/r8188eu/core/rtw_wlan_util.c @@ -1578,10 +1578,8 @@ void beacon_timing_control(struct adapter *padapter) =20 static struct adapter *pbuddy_padapter; =20 -int rtw_handle_dualmac(struct adapter *adapter, bool init) +void rtw_handle_dualmac(struct adapter *adapter, bool init) { - int status =3D _SUCCESS; - if (init) { if (!pbuddy_padapter) { pbuddy_padapter =3D adapter; @@ -1594,5 +1592,4 @@ int rtw_handle_dualmac(struct adapter *adapter, bool = init) } else { pbuddy_padapter =3D NULL; } - return status; } diff --git a/drivers/staging/r8188eu/include/drv_types.h b/drivers/staging/= r8188eu/include/drv_types.h index bba88a0ede61..9f8a8d3e8f77 100644 --- a/drivers/staging/r8188eu/include/drv_types.h +++ b/drivers/staging/r8188eu/include/drv_types.h @@ -222,7 +222,7 @@ struct adapter { =20 #define adapter_to_dvobj(adapter) (adapter->dvobj) =20 -int rtw_handle_dualmac(struct adapter *adapter, bool init); +void rtw_handle_dualmac(struct adapter *adapter, bool init); =20 static inline u8 *myid(struct eeprom_priv *peepriv) { diff --git a/drivers/staging/r8188eu/os_dep/usb_intf.c b/drivers/staging/r8= 188eu/os_dep/usb_intf.c index e1a0447fd1e7..4dbdffa4e293 100644 --- a/drivers/staging/r8188eu/os_dep/usb_intf.c +++ b/drivers/staging/r8188eu/os_dep/usb_intf.c @@ -306,8 +306,7 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_pr= iv *dvobj, =20 padapter->hw_init_mutex =3D &usb_drv->hw_init_mutex; =20 - if (rtw_handle_dualmac(padapter, 1) !=3D _SUCCESS) - goto free_adapter; + rtw_handle_dualmac(padapter, 1); =20 pnetdev =3D rtw_init_netdev(padapter); if (!pnetdev) @@ -370,7 +369,6 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_pr= iv *dvobj, rtw_free_drv_sw(padapter); handle_dualmac: rtw_handle_dualmac(padapter, 0); -free_adapter: if (pnetdev) rtw_free_netdev(pnetdev); else --=20 2.30.2 From nobody Sun Apr 12 06:07:41 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D105FC19F29 for ; Sat, 30 Jul 2022 14:40:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234961AbiG3OkJ (ORCPT ); Sat, 30 Jul 2022 10:40:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234758AbiG3OkA (ORCPT ); Sat, 30 Jul 2022 10:40:00 -0400 Received: from viti.kaiser.cx (viti.kaiser.cx [IPv6:2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B84F17AAF for ; Sat, 30 Jul 2022 07:39:59 -0700 (PDT) Received: from dslb-188-104-059-172.188.104.pools.vodafone-ip.de ([188.104.59.172] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1oHndB-0004pM-S2; Sat, 30 Jul 2022 16:39:53 +0200 From: Martin Kaiser To: Greg Kroah-Hartman Cc: Larry Finger , Phillip Potter , Michael Straube , Pavel Skripkin , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH 3/3] staging: r8188eu: return an error code in rtw_usb_if1_init Date: Sat, 30 Jul 2022 16:39:39 +0200 Message-Id: <20220730143939.671951-4-martin@kaiser.cx> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220730143939.671951-1-martin@kaiser.cx> References: <20220730143939.671951-1-martin@kaiser.cx> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" rtw_usb_if1_init returns a pointer that isn't used by the caller. Return an error code instead. We can then propagate errors from lower-level functions like ReadAdapterInfo8188EU and fail the initialisation of the driver with a proper error code. Signed-off-by: Martin Kaiser Tested-by: Philipp Hortmann # Edimax N150 --- drivers/staging/r8188eu/os_dep/usb_intf.c | 44 ++++++++++++----------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/drivers/staging/r8188eu/os_dep/usb_intf.c b/drivers/staging/r8= 188eu/os_dep/usb_intf.c index 4dbdffa4e293..db91f72dd40f 100644 --- a/drivers/staging/r8188eu/os_dep/usb_intf.c +++ b/drivers/staging/r8188eu/os_dep/usb_intf.c @@ -287,17 +287,17 @@ static int rtw_resume(struct usb_interface *pusb_intf) * We accept the new device by returning 0. */ =20 -static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj, - struct usb_interface *pusb_intf) +static int rtw_usb_if1_init(struct dvobj_priv *dvobj, struct usb_interface= *pusb_intf) { struct adapter *padapter =3D NULL; struct net_device *pnetdev =3D NULL; struct io_priv *piopriv; struct intf_hdl *pintf; + int ret; =20 padapter =3D vzalloc(sizeof(*padapter)); if (!padapter) - return NULL; + return -ENOMEM; =20 padapter->dvobj =3D dvobj; dvobj->if1 =3D padapter; @@ -309,8 +309,10 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_p= riv *dvobj, rtw_handle_dualmac(padapter, 1); =20 pnetdev =3D rtw_init_netdev(padapter); - if (!pnetdev) + if (!pnetdev) { + ret =3D -ENODEV; goto handle_dualmac; + } SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj)); padapter =3D rtw_netdev_priv(pnetdev); =20 @@ -331,12 +333,15 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_= priv *dvobj, rtl8188eu_interface_configure(padapter); =20 /* step read efuse/eeprom data and get mac_addr */ - if (ReadAdapterInfo8188EU(padapter) < 0) + ret =3D ReadAdapterInfo8188EU(padapter); + if (ret) goto handle_dualmac; =20 /* step 5. */ - if (rtw_init_drv_sw(padapter) =3D=3D _FAIL) + if (rtw_init_drv_sw(padapter) =3D=3D _FAIL) { + ret =3D -ENODEV; goto handle_dualmac; + } =20 #ifdef CONFIG_PM if (padapter->pwrctrlpriv.bSupportRemoteWakeup) { @@ -351,7 +356,8 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_pr= iv *dvobj, usb_autopm_get_interface(pusb_intf); =20 /* alloc dev name after read efuse. */ - if (rtw_init_netdev_name(pnetdev, padapter->registrypriv.ifname) < 0) + ret =3D rtw_init_netdev_name(pnetdev, padapter->registrypriv.ifname); + if (ret) goto free_drv_sw; rtw_macaddr_cfg(padapter->eeprompriv.mac_addr); rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, @@ -359,10 +365,11 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_= priv *dvobj, eth_hw_addr_set(pnetdev, padapter->eeprompriv.mac_addr); =20 /* step 6. Tell the network stack we exist */ - if (register_netdev(pnetdev) !=3D 0) + ret =3D register_netdev(pnetdev); + if (ret) goto free_drv_sw; =20 - return padapter; + return 0; =20 free_drv_sw: rtw_cancel_all_timer(padapter); @@ -374,7 +381,7 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_pr= iv *dvobj, else vfree(padapter); =20 - return NULL; + return ret; } =20 static void rtw_usb_if1_deinit(struct adapter *if1) @@ -402,27 +409,24 @@ static void rtw_usb_if1_deinit(struct adapter *if1) =20 static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_= device_id *pdid) { - struct adapter *if1 =3D NULL; struct dvobj_priv *dvobj; + int ret; =20 /* Initialize dvobj_priv */ dvobj =3D usb_dvobj_init(pusb_intf); if (!dvobj) - goto err; + return -ENODEV; =20 - if1 =3D rtw_usb_if1_init(dvobj, pusb_intf); - if (!if1) - goto free_dvobj; + ret =3D rtw_usb_if1_init(dvobj, pusb_intf); + if (ret) { + usb_dvobj_deinit(pusb_intf); + return ret; + } =20 if (ui_pid[1] !=3D 0) rtw_signal_process(ui_pid[1], SIGUSR2); =20 return 0; - -free_dvobj: - usb_dvobj_deinit(pusb_intf); -err: - return -ENODEV; } =20 /* --=20 2.30.2