mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-24 12:09:35 +07:00
rtw88: pci: Use DMA sync instead of remapping in RX ISR
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@endlessm.com> Cc: <stable@vger.kernel.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
ee6db78f5d
commit
29b68a920f
@ -206,6 +206,23 @@ static int rtw_pci_reset_rx_desc(struct rtw_dev *rtwdev, struct sk_buff *skb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void 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, DMA_FROM_DEVICE);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
static int rtw_pci_init_rx_ring(struct rtw_dev *rtwdev,
|
||||
struct rtw_pci_rx_ring *rx_ring,
|
||||
u8 desc_size, u32 len)
|
||||
@ -784,8 +801,8 @@ static void rtw_pci_rx_isr(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci,
|
||||
rtw_pci_dma_check(rtwdev, ring, cur_rp);
|
||||
skb = ring->buf[cur_rp];
|
||||
dma = *((dma_addr_t *)skb->cb);
|
||||
pci_unmap_single(rtwpci->pdev, dma, RTK_PCI_RX_BUF_SIZE,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
dma_sync_single_for_cpu(rtwdev->dev, dma, RTK_PCI_RX_BUF_SIZE,
|
||||
DMA_FROM_DEVICE);
|
||||
rx_desc = skb->data;
|
||||
chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat, &rx_status);
|
||||
|
||||
@ -820,7 +837,8 @@ static void rtw_pci_rx_isr(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci,
|
||||
|
||||
next_rp:
|
||||
/* new skb delivered to mac80211, re-enable original skb DMA */
|
||||
rtw_pci_reset_rx_desc(rtwdev, skb, ring, cur_rp, buf_desc_sz);
|
||||
rtw_pci_sync_rx_desc_device(rtwdev, dma, ring, cur_rp,
|
||||
buf_desc_sz);
|
||||
|
||||
/* host read next element in ring */
|
||||
if (++cur_rp >= ring->r.len)
|
||||
|
Loading…
Reference in New Issue
Block a user