From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87BBE4C042B for ; Wed, 15 Jul 2026 12:51:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784119886; cv=none; b=duCduQC1q9kN4JomswHCRq4ooJwBmrlmbG4y/htUS5i8N+M3+AOWo0zos5I+6ZKp2BIN9PGlSAnOyt5XCP+Y/cpwN4UWsopuvOqvB1atafWKzShwFuiyGz6O5jSWGGsveKHKNMsjmcDWwUSkBRMEb7MhEu4/PAWHpQ+xSCK7aiI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784119886; c=relaxed/simple; bh=fISncI/RA4hTAB1pJnBoN0nB4uV7YsltXJ7Bvn3kBgM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nCUWV+JRayQwo0F1tcBgV7BfJfBbEwydSWoBTzFBUQsxK/O7h/nNPgav6Qc9WrBDdLLr4xPDyay2JNlst74Io0Cr8eeAJTkOTbhf4DCuVJPo1P1S4CS1skGAoOkEUQMYm8erFl0UNlREz4UXgCKQVhOGxATnCQloAoQ5GNrVnHs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AOd6mxSd; arc=none smtp.client-ip=209.85.167.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AOd6mxSd" Received: by mail-lf1-f49.google.com with SMTP id 2adb3069b0e04-5b0f19bea2fso2003202e87.1 for ; Wed, 15 Jul 2026 05:51:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784119866; x=1784724666; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=MHJFILJjmYuD0QyR36xdFL//pqzNWfMe1G6QhVxTjco=; b=AOd6mxSd8t2jKCDdYW+ksVZZnehBbDEjf1d4tkfyZFT+RdxHhWScYOndvVBSoh5t3F QIPBwISILgdDw5/TYQ/ywYLA7TiUQq3UfHEbX2FhrOjylbtv+L/SUSXDclhG/ZDfVu/m 4NatnqCwIdMvxxOkGnfG4NMwPi6kNC5FOM8ef5hMb4rtIM/wyHv9emmGXKEa+nikrv2h HOXZa2rCskmcJb09K39KgZIQyxD3S/ATyKz478xGFKJIaec3KeQsEDHZOsn4guAsoaqr c/V9cbdlmJk1AbbPtgTdC03a2Jidk9zYfUCpd5ZQuhymruGMYcymPH/Oi8C1EBnegMSx jKvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784119866; x=1784724666; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=MHJFILJjmYuD0QyR36xdFL//pqzNWfMe1G6QhVxTjco=; b=PcVUDSBLO8lwcp5Xv41+uYIZdWjf7C59htRqPBOhrrsHlZg2aNT1OvK8WNjobdIXcv Su6wynSnv/FAt1qTZQjP36VBJtn74HYSJ77kjl8igp5qJ09XafRqEr+sHpc0wsZ3VM4d +bWuA2VDuWxUVraYfI7syeQOwbLvCsB2KZcyBMfSrleOa8EiRkuAOKPcqKbcXSSAUbQq 0Aqt0pzM7BN/p/rc+kIbkfPz3wbNPhK5/BT9MXyRBPzV0ket5GdGlsbLsBRoi+bSE58B kpxSqSmInRnTf8FQ0aZ60NKelaUy7smqAGUtf2u84SyhNBjFB57L3HIeyidjiTMMjliD Cnwg== X-Forwarded-Encrypted: i=1; AHgh+RrA7ztCT97NmwOHlTDPDbf9bRqkZcotrn7aedddbhD8GvsUHt1ZNcQ6JFVhbbK4Bhkb7UOilyuhUMaJymE=@vger.kernel.org X-Gm-Message-State: AOJu0YxqIb/wMeSV/HmtiHiAEf2dLXgL9jFt2nH8YY/cCVhgfB9J01YJ n+JqyZ2woq+kzwVB9zDLgJdiFkLxKZ1SONMVqwOXiH44aTZAkUYouhJR X-Gm-Gg: AfdE7cm07YmEA0Izs0NV/yhx78HXu5PWMH/LTdPYY4Uu3zoiEObVNKb9Kkahuny0Ozd C/RWP89Qq8ebGp8G25trhaaOkRm1T86R+TrX08EMGeFRscfF+ZmRL7myhPgE8paZ8eRKpr1SDPE PDDQM793FSF4beF+24KRapOUgM3q1yAc21EI3gBcP6c73Rlc0gZRf7VmfTR/MUs0N+6aLPjsdBP 03KOSbWhUq98YjCsTxJa9zw12zUDYa1JYDu/aL0kMUSYK4DyvWy+/7AGmXla+mGizztY8yH5Wx0 yb3Zsrk/s+sbNG67ScjXYfzZ+ppWh+OYFS31Kg4na0ALj2LGV+yYO0XR+sNxLIe1Hph7pfXEQuU IYj5iyrxWZUKhys2Fi0QmtoL7BUW8j7b4n1/oZEqMfRNAxYJvLejixFQKOCsh0dGMNj/Xgj71S8 aXsXYWhPCUOIABxRxtPUPxbe8Ruc9sZT85vESf19V3vhu1wOOjfhWakxOuL8+XEyHvYrxVIWhi5 D91fAfK5gmzeqV50uct31Co X-Received: by 2002:ac2:5227:0:b0:5ae:be77:44bc with SMTP id 2adb3069b0e04-5b0235614f6mr3163533e87.4.1784119865564; Wed, 15 Jul 2026 05:51:05 -0700 (PDT) Received: from archlinux ([94.180.44.28]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b022fac999sm3404042e87.55.2026.07.15.05.51.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Jul 2026 05:51:05 -0700 (PDT) From: Arsenii Pashchenko To: Greg Kroah-Hartman Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, ulijg308@gmail.com Subject: [PATCH 59/61] staging: rtl8723bs: inline rtl8723bs_init_xmit_priv helper Date: Wed, 15 Jul 2026 19:48:27 +0700 Message-ID: <20260715124829.90290-60-ulijg308@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260715124829.90290-1-ulijg308@gmail.com> References: <20260715124829.90290-1-ulijg308@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Inline the xmit private initialization logic from the internal function directly into rtw_hal_init_xmit_priv. This eliminates an unnecessary redirection layer for initializing SDIO-specific completions and locks. Signed-off-by: Arsenii Pashchenko --- drivers/staging/rtl8723bs/hal/hal_intf.c | 118 +++++++++++++++++- .../staging/rtl8723bs/hal/rtl8723bs_recv.c | 88 +------------ .../staging/rtl8723bs/hal/rtl8723bs_xmit.c | 53 -------- .../staging/rtl8723bs/include/rtl8723b_hal.h | 2 + .../staging/rtl8723bs/include/rtl8723b_recv.h | 2 +- .../staging/rtl8723bs/include/rtl8723b_xmit.h | 3 +- 6 files changed, 121 insertions(+), 145 deletions(-) diff --git a/drivers/staging/rtl8723bs/hal/hal_intf.c b/drivers/staging/rtl8723bs/hal/hal_intf.c index 7cf5128e7..3244f121d 100644 --- a/drivers/staging/rtl8723bs/hal/hal_intf.c +++ b/drivers/staging/rtl8723bs/hal/hal_intf.c @@ -278,17 +278,129 @@ s32 rtw_hal_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe) s32 rtw_hal_init_xmit_priv(struct adapter *padapter) { - return rtl8723bs_init_xmit_priv(padapter); + struct xmit_priv *xmitpriv = &padapter->xmitpriv; + struct hal_com_data *phal; + + phal = GET_HAL_DATA(padapter); + + spin_lock_init(&phal->SdioTxFIFOFreePageLock); + init_completion(&xmitpriv->SdioXmitStart); + init_completion(&xmitpriv->SdioXmitTerminate); + + return _SUCCESS; } void rtw_hal_free_xmit_priv(struct adapter *padapter) { - rtl8723bs_free_xmit_priv(padapter); + struct xmit_priv *pxmitpriv = &padapter->xmitpriv; + struct xmit_buf *pxmitbuf; + struct __queue *pqueue = &pxmitpriv->pending_xmitbuf_queue; + struct list_head *plist, *phead; + struct list_head tmplist; + + phead = get_list_head(pqueue); + INIT_LIST_HEAD(&tmplist); + + spin_lock_bh(&pqueue->lock); + if (!list_empty(&pqueue->queue)) { + /* Insert tmplist to end of queue, and delete phead */ + /* then tmplist become head of queue. */ + list_add_tail(&tmplist, phead); + list_del_init(phead); + } + spin_unlock_bh(&pqueue->lock); + + phead = &tmplist; + while (!list_empty(phead)) { + plist = get_next(phead); + list_del_init(plist); + + pxmitbuf = container_of(plist, struct xmit_buf, list); + rtw_free_xmitframe(pxmitpriv, (struct xmit_frame *)pxmitbuf->priv_data); + pxmitbuf->priv_data = NULL; + rtw_free_xmitbuf(pxmitpriv, pxmitbuf); + } } s32 rtw_hal_init_recv_priv(struct adapter *padapter) { - return rtl8723bs_init_recv_priv(padapter); + s32 res; + u32 i, n; + struct recv_priv *precvpriv; + struct recv_buf *precvbuf; + + res = _SUCCESS; + precvpriv = &padapter->recvpriv; + + /* 3 1. init recv buffer */ + INIT_LIST_HEAD(&precvpriv->free_recv_buf_queue.queue); + spin_lock_init(&precvpriv->free_recv_buf_queue.lock); + INIT_LIST_HEAD(&precvpriv->recv_buf_pending_queue.queue); + spin_lock_init(&precvpriv->recv_buf_pending_queue.lock); + + n = NR_RECVBUFF * sizeof(struct recv_buf) + 4; + precvpriv->pallocated_recv_buf = kzalloc(n, GFP_KERNEL); + if (!precvpriv->pallocated_recv_buf) { + res = _FAIL; + goto exit; + } + + precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4); + + /* init each recv buffer */ + precvbuf = (struct recv_buf *)precvpriv->precv_buf; + for (i = 0; i < NR_RECVBUFF; i++) { + initrecvbuf(precvbuf, padapter); + + if (!precvbuf->pskb) { + SIZE_PTR tmpaddr = 0; + SIZE_PTR alignment = 0; + + precvbuf->pskb = __dev_alloc_skb( + MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, + GFP_ATOMIC); + if (precvbuf->pskb) { + precvbuf->pskb->dev = padapter->pnetdev; + + tmpaddr = (SIZE_PTR)precvbuf->pskb->data; + alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1); + skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment)); + } + } + + list_add_tail(&precvbuf->list, &precvpriv->free_recv_buf_queue.queue); + + precvbuf++; + } + precvpriv->free_recv_buf_queue_cnt = i; + + if (res == _FAIL) + goto initbuferror; + + /* 3 2. init tasklet */ + tasklet_setup(&precvpriv->recv_tasklet, rtl8723bs_recv_tasklet); + + goto exit; + +initbuferror: + precvbuf = (struct recv_buf *)precvpriv->precv_buf; + if (precvbuf) { + n = precvpriv->free_recv_buf_queue_cnt; + precvpriv->free_recv_buf_queue_cnt = 0; + for (i = 0; i < n ; i++) { + list_del_init(&precvbuf->list); + if (precvbuf->pskb) + dev_kfree_skb_any(precvbuf->pskb); + precvbuf++; + } + precvpriv->precv_buf = NULL; + } + + kfree(precvpriv->pallocated_recv_buf); + precvpriv->pallocated_recv_buf = NULL; + +exit: + return res; } void rtw_hal_free_recv_priv(struct adapter *padapter) diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c index 97dce28fd..384c5e643 100644 --- a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c +++ b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c @@ -8,7 +8,7 @@ #include #include -static void initrecvbuf(struct recv_buf *precvbuf, struct adapter *padapter) +void initrecvbuf(struct recv_buf *precvbuf, struct adapter *padapter) { INIT_LIST_HEAD(&precvbuf->list); spin_lock_init(&precvbuf->recvbuf_lock); @@ -213,7 +213,7 @@ static inline bool pkt_exceeds_tail(struct recv_priv *precvpriv, return false; } -static void rtl8723bs_recv_tasklet(struct tasklet_struct *t) +void rtl8723bs_recv_tasklet(struct tasklet_struct *t) { struct adapter *padapter = from_tasklet(padapter, t, recvpriv.recv_tasklet); @@ -357,90 +357,6 @@ static void rtl8723bs_recv_tasklet(struct tasklet_struct *t) } while (1); } -/* - * Initialize recv private variable for hardware dependent - * 1. recv buf - * 2. recv tasklet - * - */ -s32 rtl8723bs_init_recv_priv(struct adapter *padapter) -{ - s32 res; - u32 i, n; - struct recv_priv *precvpriv; - struct recv_buf *precvbuf; - - res = _SUCCESS; - precvpriv = &padapter->recvpriv; - - /* 3 1. init recv buffer */ - INIT_LIST_HEAD(&precvpriv->free_recv_buf_queue.queue); - spin_lock_init(&precvpriv->free_recv_buf_queue.lock); - INIT_LIST_HEAD(&precvpriv->recv_buf_pending_queue.queue); - spin_lock_init(&precvpriv->recv_buf_pending_queue.lock); - - n = NR_RECVBUFF * sizeof(struct recv_buf) + 4; - precvpriv->pallocated_recv_buf = kzalloc(n, GFP_KERNEL); - if (!precvpriv->pallocated_recv_buf) { - res = _FAIL; - goto exit; - } - - precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4); - - /* init each recv buffer */ - precvbuf = (struct recv_buf *)precvpriv->precv_buf; - for (i = 0; i < NR_RECVBUFF; i++) { - initrecvbuf(precvbuf, padapter); - - if (!precvbuf->pskb) { - SIZE_PTR tmpaddr = 0; - SIZE_PTR alignment = 0; - - precvbuf->pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_ATOMIC); - if (precvbuf->pskb) { - precvbuf->pskb->dev = padapter->pnetdev; - - tmpaddr = (SIZE_PTR)precvbuf->pskb->data; - alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1); - skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment)); - } - } - - list_add_tail(&precvbuf->list, &precvpriv->free_recv_buf_queue.queue); - - precvbuf++; - } - precvpriv->free_recv_buf_queue_cnt = i; - - if (res == _FAIL) - goto initbuferror; - - /* 3 2. init tasklet */ - tasklet_setup(&precvpriv->recv_tasklet, rtl8723bs_recv_tasklet); - - goto exit; - -initbuferror: - precvbuf = (struct recv_buf *)precvpriv->precv_buf; - if (precvbuf) { - n = precvpriv->free_recv_buf_queue_cnt; - precvpriv->free_recv_buf_queue_cnt = 0; - for (i = 0; i < n ; i++) { - list_del_init(&precvbuf->list); - if (precvbuf->pskb) - dev_kfree_skb_any(precvbuf->pskb); - precvbuf++; - } - precvpriv->precv_buf = NULL; - } - - kfree(precvpriv->pallocated_recv_buf); - precvpriv->pallocated_recv_buf = NULL; - -exit: - return res; -} /* * Free recv private variable of hardware dependent diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c index 2298c41df..1037b9d11 100644 --- a/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c +++ b/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c @@ -452,56 +452,3 @@ s32 rtl8723bs_mgnt_xmit( return ret; } - - -/* - * Return - *_SUCCESS start thread ok - *_FAIL start thread fail - * - */ -s32 rtl8723bs_init_xmit_priv(struct adapter *padapter) -{ - struct xmit_priv *xmitpriv = &padapter->xmitpriv; - struct hal_com_data *phal; - - phal = GET_HAL_DATA(padapter); - - spin_lock_init(&phal->SdioTxFIFOFreePageLock); - init_completion(&xmitpriv->SdioXmitStart); - init_completion(&xmitpriv->SdioXmitTerminate); - - return _SUCCESS; -} - -void rtl8723bs_free_xmit_priv(struct adapter *padapter) -{ - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - struct xmit_buf *pxmitbuf; - struct __queue *pqueue = &pxmitpriv->pending_xmitbuf_queue; - struct list_head *plist, *phead; - struct list_head tmplist; - - phead = get_list_head(pqueue); - INIT_LIST_HEAD(&tmplist); - - spin_lock_bh(&pqueue->lock); - if (!list_empty(&pqueue->queue)) { - /* Insert tmplist to end of queue, and delete phead */ - /* then tmplist become head of queue. */ - list_add_tail(&tmplist, phead); - list_del_init(phead); - } - spin_unlock_bh(&pqueue->lock); - - phead = &tmplist; - while (!list_empty(phead)) { - plist = get_next(phead); - list_del_init(plist); - - pxmitbuf = container_of(plist, struct xmit_buf, list); - rtw_free_xmitframe(pxmitpriv, (struct xmit_frame *)pxmitbuf->priv_data); - pxmitbuf->priv_data = NULL; - rtw_free_xmitbuf(pxmitpriv, pxmitbuf); - } -} diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_hal.h b/drivers/staging/rtl8723bs/include/rtl8723b_hal.h index fe6401c4f..e00d9e6b2 100644 --- a/drivers/staging/rtl8723bs/include/rtl8723b_hal.h +++ b/drivers/staging/rtl8723bs/include/rtl8723b_hal.h @@ -242,5 +242,7 @@ void Hal_ReadRFGainOffset(struct adapter *padapter, u8 *hwinfo, void phy_StoreTxPowerByRateBase(struct adapter *padapter); void phy_ConvertTxPowerByRateInDbmToRelativeValues(struct adapter *padapter); +void initrecvbuf(struct recv_buf *precvbuf, struct adapter *padapter); +void rtl8723bs_recv_tasklet(struct tasklet_struct *t); #endif diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_recv.h b/drivers/staging/rtl8723bs/include/rtl8723b_recv.h index e9ebecb22..c4c91f5f4 100644 --- a/drivers/staging/rtl8723bs/include/rtl8723b_recv.h +++ b/drivers/staging/rtl8723bs/include/rtl8723b_recv.h @@ -81,7 +81,7 @@ struct rxreport_8723b { u32 tsfl; }; -s32 rtl8723bs_init_recv_priv(struct adapter *padapter); + void rtl8723bs_free_recv_priv(struct adapter *padapter); void rtl8723b_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat); diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h b/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h index 157b2a808..d467cc301 100644 --- a/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h +++ b/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h @@ -407,8 +407,7 @@ void rtl8723b_fill_fake_txdesc(struct adapter *padapter, u8 *pDesc, u32 BufferLe u32 rtl8723bs_hal_init(struct adapter *padapter); u32 rtl8723bs_hal_deinit(struct adapter *padapter); -s32 rtl8723bs_init_xmit_priv(struct adapter *padapter); -void rtl8723bs_free_xmit_priv(struct adapter *padapter); + s32 rtl8723bs_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe); s32 rtl8723bs_xmit_buf_handler(struct adapter *padapter); int rtl8723bs_xmit_thread(void *context); -- 2.55.0