Commit 01c559c8 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'link-napi-instances-to-queues-and-irqs'

Justin Lai says:

====================
Link NAPI instances to queues and IRQs

This patch series introduces netdev-genl support to rtase, enabling
user-space applications to query the relationships between IRQs,
queues, and NAPI instances.
====================

Link: https://patch.msgid.link/20250616032226.7318-1-justinlai0215@realtek.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 416b6030 8d672a3e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -288,6 +288,7 @@ struct rtase_ring {
	u32 cur_idx;
	u32 dirty_idx;
	u16 index;
	u8 type;

	struct sk_buff *skbuff[RTASE_NUM_DESC];
	void *data_buf[RTASE_NUM_DESC];
+31 −8
Original line number Diff line number Diff line
@@ -326,6 +326,7 @@ static void rtase_tx_desc_init(struct rtase_private *tp, u16 idx)
	ring->cur_idx = 0;
	ring->dirty_idx = 0;
	ring->index = idx;
	ring->type = NETDEV_QUEUE_TYPE_TX;
	ring->alloc_fail = 0;

	for (i = 0; i < RTASE_NUM_DESC; i++) {
@@ -345,6 +346,9 @@ static void rtase_tx_desc_init(struct rtase_private *tp, u16 idx)
		ring->ivec = &tp->int_vector[0];
		list_add_tail(&ring->ring_entry, &tp->int_vector[0].ring_list);
	}

	netif_queue_set_napi(tp->dev, ring->index,
			     ring->type, &ring->ivec->napi);
}

static void rtase_map_to_asic(union rtase_rx_desc *desc, dma_addr_t mapping,
@@ -590,6 +594,7 @@ static void rtase_rx_desc_init(struct rtase_private *tp, u16 idx)
	ring->cur_idx = 0;
	ring->dirty_idx = 0;
	ring->index = idx;
	ring->type = NETDEV_QUEUE_TYPE_RX;
	ring->alloc_fail = 0;

	for (i = 0; i < RTASE_NUM_DESC; i++)
@@ -597,6 +602,8 @@ static void rtase_rx_desc_init(struct rtase_private *tp, u16 idx)

	ring->ring_handler = rx_handler;
	ring->ivec = &tp->int_vector[idx];
	netif_queue_set_napi(tp->dev, ring->index,
			     ring->type, &ring->ivec->napi);
	list_add_tail(&ring->ring_entry, &tp->int_vector[idx].ring_list);
}

@@ -1161,9 +1168,13 @@ static void rtase_down(struct net_device *dev)
		ivec = &tp->int_vector[i];
		napi_disable(&ivec->napi);
		list_for_each_entry_safe(ring, tmp, &ivec->ring_list,
					 ring_entry)
					 ring_entry) {
			netif_queue_set_napi(tp->dev, ring->index,
					     ring->type, NULL);

			list_del(&ring->ring_entry);
		}
	}

	netif_tx_disable(dev);

@@ -1518,9 +1529,13 @@ static void rtase_sw_reset(struct net_device *dev)
	for (i = 0; i < tp->int_nums; i++) {
		ivec = &tp->int_vector[i];
		list_for_each_entry_safe(ring, tmp, &ivec->ring_list,
					 ring_entry)
					 ring_entry) {
			netif_queue_set_napi(tp->dev, ring->index,
					     ring->type, NULL);

			list_del(&ring->ring_entry);
		}
	}

	ret = rtase_init_ring(dev);
	if (ret) {
@@ -1871,6 +1886,18 @@ static void rtase_init_netdev_ops(struct net_device *dev)
	dev->ethtool_ops = &rtase_ethtool_ops;
}

static void rtase_init_napi(struct rtase_private *tp)
{
	u16 i;

	for (i = 0; i < tp->int_nums; i++) {
		netif_napi_add_config(tp->dev, &tp->int_vector[i].napi,
				      tp->int_vector[i].poll, i);
		netif_napi_set_irq(&tp->int_vector[i].napi,
				   tp->int_vector[i].irq);
	}
}

static void rtase_reset_interrupt(struct pci_dev *pdev,
				  const struct rtase_private *tp)
{
@@ -1956,9 +1983,6 @@ static void rtase_init_int_vector(struct rtase_private *tp)
	memset(tp->int_vector[0].name, 0x0, sizeof(tp->int_vector[0].name));
	INIT_LIST_HEAD(&tp->int_vector[0].ring_list);

	netif_napi_add(tp->dev, &tp->int_vector[0].napi,
		       tp->int_vector[0].poll);

	/* interrupt vector 1 ~ 3 */
	for (i = 1; i < tp->int_nums; i++) {
		tp->int_vector[i].tp = tp;
@@ -1972,9 +1996,6 @@ static void rtase_init_int_vector(struct rtase_private *tp)
		memset(tp->int_vector[i].name, 0x0,
		       sizeof(tp->int_vector[0].name));
		INIT_LIST_HEAD(&tp->int_vector[i].ring_list);

		netif_napi_add(tp->dev, &tp->int_vector[i].napi,
			       tp->int_vector[i].poll);
	}
}

@@ -2206,6 +2227,8 @@ static int rtase_init_one(struct pci_dev *pdev,
		goto err_out_del_napi;
	}

	rtase_init_napi(tp);

	rtase_init_netdev_ops(dev);

	dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;