Re: [PATCH net-next v9 8/8] mt76: use netmem descriptor and APIs for page pool

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/10/25 09:28, Byungchul Park wrote:
To simplify struct page, the effort to separate its own descriptor from
struct page is required and the work for page pool is on going.

Use netmem descriptor and APIs for page pool in mt76 code.

Signed-off-by: Byungchul Park <byungchul@xxxxxx>
Reviewed-by: Mina Almasry <almasrymina@xxxxxxxxxx>
---
...>   static inline void mt76_set_tx_blocked(struct mt76_dev *dev, bool blocked)
diff --git a/drivers/net/wireless/mediatek/mt76/sdio_txrx.c b/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
index 0a927a7313a6..b1d89b6f663d 100644
--- a/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
+++ b/drivers/net/wireless/mediatek/mt76/sdio_txrx.c
@@ -68,14 +68,14 @@ mt76s_build_rx_skb(void *data, int data_len, int buf_len)
skb_put_data(skb, data, len);
  	if (data_len > len) {
-		struct page *page;
+		netmem_ref netmem;
data += len;
-		page = virt_to_head_page(data);
-		skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
-				page, data - page_address(page),
-				data_len - len, buf_len);
-		get_page(page);
+		netmem = virt_to_head_netmem(data);
+		skb_add_rx_frag_netmem(skb, skb_shinfo(skb)->nr_frags,
+				       netmem, data - netmem_address(netmem),
+				       data_len - len, buf_len);
+		get_netmem(netmem);
  	}
return skb;
@@ -88,7 +88,7 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
  	struct mt76_queue *q = &dev->q_rx[qid];
  	struct mt76_sdio *sdio = &dev->sdio;
  	int len = 0, err, i;
-	struct page *page;
+	netmem_ref netmem;
  	u8 *buf, *end;
for (i = 0; i < intr->rx.num[qid]; i++)
@@ -100,11 +100,11 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
  	if (len > sdio->func->cur_blksize)
  		len = roundup(len, sdio->func->cur_blksize);
- page = __dev_alloc_pages(GFP_KERNEL, get_order(len));
-	if (!page)
+	netmem = page_to_netmem(__dev_alloc_pages(GFP_KERNEL, get_order(len)));
+	if (!netmem)
  		return -ENOMEM;
- buf = page_address(page);
+	buf = netmem_address(netmem);

We shouldn't just blindly convert everything to netmem just for the purpose
of creating a type casting hell. It's allocating a page, and continues to
use it as a page, e.g. netmem_address() will fail otherwise. So just leave
it to be a page, and convert it to netmem and the very last moment when
the api expects a netmem. There are likely many chunks like that.

sdio_claim_host(sdio->func);
  	err = sdio_readsb(sdio->func, buf, MCR_WRDR(qid), len);
@@ -112,7 +112,7 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
if (err < 0) {
  		dev_err(dev->dev, "sdio read data failed:%d\n", err);
-		put_page(page);
+		put_netmem(netmem);
  		return err;
  	}
@@ -140,7 +140,7 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
  		}
  		buf += round_up(len + 4, 4);
  	}
-	put_page(page);
+	put_netmem(netmem);
spin_lock_bh(&q->lock);
  	q->head = (q->head + i) % q->ndesc;
--
Pavel Begunkov





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux