Thread (17 messages) 17 messages, 3 authors, 2021-02-11

RE: [PATCH v4 3/8] rtw88: add napi support

From: Pkshih <pkshih@realtek.com>
Date: 2021-02-01 06:49:54

-----Original Message-----
From: Brian Norris [mailto:briannorris@chromium.org]
Sent: Saturday, January 30, 2021 7:39 AM
To: Pkshih
Cc: Yan-Hsuan Chuang; Kalle Valo; linux-wireless; Bernie Huang
Subject: Re: [PATCH v4 3/8] rtw88: add napi support

On Thu, Jan 28, 2021 at 1:45 AM Pkshih [off-list ref] wrote:
quoted
quoted
-----Original Message-----
From: Brian Norris [mailto:briannorris@chromium.org]
On Fri, Jan 15, 2021 at 1:26 AM Ping-Ke Shih [off-list ref] wrote:
quoted
+static u32 rtw_pci_rx_napi(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci,
                           u8 hw_queue)
...

Are you sure you don't want any locking in rtw_pci_rx_napi()?
Previously, you held irq_lock for the entirety of rtw_pci_rx_isr(),
but now all the RX work is being deferred to a NAPI context, without
any additional lock. IIUC, that means you can be both handling RX and
other ISR operations at the same time. Is that intentional?
irq_lock is used to protect TX ring->queue. The TX skb(s) are queued into the
queue, and unlink the skb until TX_OK_ISR is received. So, RX doesn't need to
hold this lock.
I could be misunderstanding your locking model, but IIUC, you're left
with zero locking between NAPI RX and all other operations (H2C, link
up/down -- including DMA free, etc.). irq_lock used to protect you
from that.
Sorry, I'm wrong. I think irq_lock is used to protect not only TX ring->queue
but also TX/RX rings. The RX ring rtwpci->rx_rings[RTW_RX_QUEUE_MPDU] is reset
by rtw_pci_reset_buf_desc() when pci_stop(), and napi_poll() also uses it to
know how many RX packets are needed to be received. Therefore, we plan to
use irq_lock to protect napi_poll(), and then see if it affects performance.
If I'm right, maybe it needs a rename and/or some additional comments.
The original name and comment:
	/* Used for PCI TX queueing. */
	spinlock_t irq_lock;
Will change to
	/* Used for PCI TX/RX rings and TX queueing. */
	spinlock_t irq_lock;

---
Ping-Ke
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help