On Tue, Jul 09, 2019 at 06:21:01PM +0800, Jian-Hong Pan wrote: > Since each skb in RX ring is reused instead of new allocation, we can > treat the DMA in a more efficient way by DMA synchronization. > > Signed-off-by: Jian-Hong Pan <jian-hong@xxxxxxxxxxxx> > --- > drivers/net/wireless/realtek/rtw88/pci.c | 35 ++++++++++++++++++++++-- > 1 file changed, 32 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c > index e9fe3ad896c8..28ca76f71dfe 100644 > --- a/drivers/net/wireless/realtek/rtw88/pci.c > +++ b/drivers/net/wireless/realtek/rtw88/pci.c > @@ -206,6 +206,35 @@ static int rtw_pci_reset_rx_desc(struct rtw_dev *rtwdev, struct sk_buff *skb, > return 0; > } > > +static int rtw_pci_sync_rx_desc_cpu(struct rtw_dev *rtwdev, dma_addr_t dma) > +{ > + struct device *dev = rtwdev->dev; > + int buf_sz = RTK_PCI_RX_BUF_SIZE; > + > + dma_sync_single_for_cpu(dev, dma, buf_sz, PCI_DMA_FROMDEVICE); > + > + return 0; > +} No need to return a value from this helper. In fact I'm not even sure you need the helper at all. Also please use the DMA_FROM_DEVICE constant instead of the deprecated PCI variant. > +static int rtw_pci_sync_rx_desc_device(struct rtw_dev *rtwdev, dma_addr_t dma, > + struct rtw_pci_rx_ring *rx_ring, > + u32 idx, u32 desc_sz) > +{ > + struct device *dev = rtwdev->dev; > + struct rtw_pci_rx_buffer_desc *buf_desc; > + int buf_sz = RTK_PCI_RX_BUF_SIZE; > + > + dma_sync_single_for_device(dev, dma, buf_sz, PCI_DMA_FROMDEVICE); > + > + buf_desc = (struct rtw_pci_rx_buffer_desc *)(rx_ring->r.head + > + idx * desc_sz); > + memset(buf_desc, 0, sizeof(*buf_desc)); > + buf_desc->buf_size = cpu_to_le16(RTK_PCI_RX_BUF_SIZE); > + buf_desc->dma = cpu_to_le32(dma); > + > + return 0; > +} Same comment on the PCI constant and the return value here.