public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	Alexander Lobakin <aleksander.lobakin@intel.com>,
	Tony Nguyen <anthony.l.nguyen@intel.com>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.10 608/634] idpf: split &idpf_queue into 4 strictly-typed queue structures
Date: Wed,  2 Oct 2024 15:01:48 +0200	[thread overview]
Message-ID: <20241002125835.114692209@linuxfoundation.org> (raw)
In-Reply-To: <20241002125811.070689334@linuxfoundation.org>

6.10-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Alexander Lobakin <aleksander.lobakin@intel.com>

[ Upstream commit e4891e4687c8dd136d80d6c1b857a02931ed6fc8 ]

Currently, sizeof(struct idpf_queue) is 32 Kb.
This is due to the 12-bit hashtable declaration at the end of the queue.
This HT is needed only for Tx queues when the flow scheduling mode is
enabled. But &idpf_queue is unified for all of the queue types,
provoking excessive memory usage.
The unified structure in general makes the code less effective via
suboptimal fields placement. You can't avoid that unless you make unions
each 2 fields. Even then, different field alignment etc., doesn't allow
you to optimize things to the limit.
Split &idpf_queue into 4 structures corresponding to the queue types:
RQ (Rx queue), SQ (Tx queue), FQ (buffer queue), and CQ (completion
queue). Place only needed fields there and shortcuts handy for hotpath.
Allocate the abovementioned hashtable dynamically and only when needed,
keeping &idpf_tx_queue relatively short (192 bytes, same as Rx). This HT
is used only for OOO completions, which aren't really hotpath anyway.
Note that this change must be done atomically, otherwise it's really
easy to get lost and miss something.

Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Stable-dep-of: e4b398dd82f5 ("idpf: fix netdev Tx queue stop/wake")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/net/ethernet/intel/idpf/idpf.h        |   3 +-
 .../net/ethernet/intel/idpf/idpf_ethtool.c    | 125 +--
 drivers/net/ethernet/intel/idpf/idpf_lib.c    |  46 +-
 .../ethernet/intel/idpf/idpf_singleq_txrx.c   | 144 +--
 drivers/net/ethernet/intel/idpf/idpf_txrx.c   | 915 +++++++++++-------
 drivers/net/ethernet/intel/idpf/idpf_txrx.h   | 440 ++++++---
 .../net/ethernet/intel/idpf/idpf_virtchnl.c   |  73 +-
 7 files changed, 1018 insertions(+), 728 deletions(-)

diff --git a/drivers/net/ethernet/intel/idpf/idpf.h b/drivers/net/ethernet/intel/idpf/idpf.h
index 0b26dd9b8a512..f9e43d171f171 100644
--- a/drivers/net/ethernet/intel/idpf/idpf.h
+++ b/drivers/net/ethernet/intel/idpf/idpf.h
@@ -17,7 +17,6 @@ struct idpf_vport_max_q;
 #include <linux/sctp.h>
 #include <linux/ethtool_netlink.h>
 #include <net/gro.h>
-#include <linux/dim.h>
 
 #include "virtchnl2.h"
 #include "idpf_txrx.h"
@@ -301,7 +300,7 @@ struct idpf_vport {
 	u16 num_txq_grp;
 	struct idpf_txq_group *txq_grps;
 	u32 txq_model;
-	struct idpf_queue **txqs;
+	struct idpf_tx_queue **txqs;
 	bool crc_enable;
 
 	u16 num_rxq;
diff --git a/drivers/net/ethernet/intel/idpf/idpf_ethtool.c b/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
index 1885ba618981d..e933fed16c7ea 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
@@ -437,22 +437,24 @@ struct idpf_stats {
 	.stat_offset = offsetof(_type, _stat) \
 }
 
-/* Helper macro for defining some statistics related to queues */
-#define IDPF_QUEUE_STAT(_name, _stat) \
-	IDPF_STAT(struct idpf_queue, _name, _stat)
+/* Helper macros for defining some statistics related to queues */
+#define IDPF_RX_QUEUE_STAT(_name, _stat) \
+	IDPF_STAT(struct idpf_rx_queue, _name, _stat)
+#define IDPF_TX_QUEUE_STAT(_name, _stat) \
+	IDPF_STAT(struct idpf_tx_queue, _name, _stat)
 
 /* Stats associated with a Tx queue */
 static const struct idpf_stats idpf_gstrings_tx_queue_stats[] = {
-	IDPF_QUEUE_STAT("pkts", q_stats.tx.packets),
-	IDPF_QUEUE_STAT("bytes", q_stats.tx.bytes),
-	IDPF_QUEUE_STAT("lso_pkts", q_stats.tx.lso_pkts),
+	IDPF_TX_QUEUE_STAT("pkts", q_stats.packets),
+	IDPF_TX_QUEUE_STAT("bytes", q_stats.bytes),
+	IDPF_TX_QUEUE_STAT("lso_pkts", q_stats.lso_pkts),
 };
 
 /* Stats associated with an Rx queue */
 static const struct idpf_stats idpf_gstrings_rx_queue_stats[] = {
-	IDPF_QUEUE_STAT("pkts", q_stats.rx.packets),
-	IDPF_QUEUE_STAT("bytes", q_stats.rx.bytes),
-	IDPF_QUEUE_STAT("rx_gro_hw_pkts", q_stats.rx.rsc_pkts),
+	IDPF_RX_QUEUE_STAT("pkts", q_stats.packets),
+	IDPF_RX_QUEUE_STAT("bytes", q_stats.bytes),
+	IDPF_RX_QUEUE_STAT("rx_gro_hw_pkts", q_stats.rsc_pkts),
 };
 
 #define IDPF_TX_QUEUE_STATS_LEN		ARRAY_SIZE(idpf_gstrings_tx_queue_stats)
@@ -633,7 +635,7 @@ static int idpf_get_sset_count(struct net_device *netdev, int sset)
  * Copies the stat data defined by the pointer and stat structure pair into
  * the memory supplied as data. If the pointer is null, data will be zero'd.
  */
-static void idpf_add_one_ethtool_stat(u64 *data, void *pstat,
+static void idpf_add_one_ethtool_stat(u64 *data, const void *pstat,
 				      const struct idpf_stats *stat)
 {
 	char *p;
@@ -671,6 +673,7 @@ static void idpf_add_one_ethtool_stat(u64 *data, void *pstat,
  * idpf_add_queue_stats - copy queue statistics into supplied buffer
  * @data: ethtool stats buffer
  * @q: the queue to copy
+ * @type: type of the queue
  *
  * Queue statistics must be copied while protected by u64_stats_fetch_begin,
  * so we can't directly use idpf_add_ethtool_stats. Assumes that queue stats
@@ -681,19 +684,23 @@ static void idpf_add_one_ethtool_stat(u64 *data, void *pstat,
  *
  * This function expects to be called while under rcu_read_lock().
  */
-static void idpf_add_queue_stats(u64 **data, struct idpf_queue *q)
+static void idpf_add_queue_stats(u64 **data, const void *q,
+				 enum virtchnl2_queue_type type)
 {
+	const struct u64_stats_sync *stats_sync;
 	const struct idpf_stats *stats;
 	unsigned int start;
 	unsigned int size;
 	unsigned int i;
 
-	if (q->q_type == VIRTCHNL2_QUEUE_TYPE_RX) {
+	if (type == VIRTCHNL2_QUEUE_TYPE_RX) {
 		size = IDPF_RX_QUEUE_STATS_LEN;
 		stats = idpf_gstrings_rx_queue_stats;
+		stats_sync = &((const struct idpf_rx_queue *)q)->stats_sync;
 	} else {
 		size = IDPF_TX_QUEUE_STATS_LEN;
 		stats = idpf_gstrings_tx_queue_stats;
+		stats_sync = &((const struct idpf_tx_queue *)q)->stats_sync;
 	}
 
 	/* To avoid invalid statistics values, ensure that we keep retrying
@@ -701,10 +708,10 @@ static void idpf_add_queue_stats(u64 **data, struct idpf_queue *q)
 	 * u64_stats_fetch_retry.
 	 */
 	do {
-		start = u64_stats_fetch_begin(&q->stats_sync);
+		start = u64_stats_fetch_begin(stats_sync);
 		for (i = 0; i < size; i++)
 			idpf_add_one_ethtool_stat(&(*data)[i], q, &stats[i]);
-	} while (u64_stats_fetch_retry(&q->stats_sync, start));
+	} while (u64_stats_fetch_retry(stats_sync, start));
 
 	/* Once we successfully copy the stats in, update the data pointer */
 	*data += size;
@@ -793,7 +800,7 @@ static void idpf_collect_queue_stats(struct idpf_vport *vport)
 		for (j = 0; j < num_rxq; j++) {
 			u64 hw_csum_err, hsplit, hsplit_hbo, bad_descs;
 			struct idpf_rx_queue_stats *stats;
-			struct idpf_queue *rxq;
+			struct idpf_rx_queue *rxq;
 			unsigned int start;
 
 			if (idpf_is_queue_model_split(vport->rxq_model))
@@ -807,7 +814,7 @@ static void idpf_collect_queue_stats(struct idpf_vport *vport)
 			do {
 				start = u64_stats_fetch_begin(&rxq->stats_sync);
 
-				stats = &rxq->q_stats.rx;
+				stats = &rxq->q_stats;
 				hw_csum_err = u64_stats_read(&stats->hw_csum_err);
 				hsplit = u64_stats_read(&stats->hsplit_pkts);
 				hsplit_hbo = u64_stats_read(&stats->hsplit_buf_ovf);
@@ -828,7 +835,7 @@ static void idpf_collect_queue_stats(struct idpf_vport *vport)
 
 		for (j = 0; j < txq_grp->num_txq; j++) {
 			u64 linearize, qbusy, skb_drops, dma_map_errs;
-			struct idpf_queue *txq = txq_grp->txqs[j];
+			struct idpf_tx_queue *txq = txq_grp->txqs[j];
 			struct idpf_tx_queue_stats *stats;
 			unsigned int start;
 
@@ -838,7 +845,7 @@ static void idpf_collect_queue_stats(struct idpf_vport *vport)
 			do {
 				start = u64_stats_fetch_begin(&txq->stats_sync);
 
-				stats = &txq->q_stats.tx;
+				stats = &txq->q_stats;
 				linearize = u64_stats_read(&stats->linearize);
 				qbusy = u64_stats_read(&stats->q_busy);
 				skb_drops = u64_stats_read(&stats->skb_drops);
@@ -896,12 +903,12 @@ static void idpf_get_ethtool_stats(struct net_device *netdev,
 		qtype = VIRTCHNL2_QUEUE_TYPE_TX;
 
 		for (j = 0; j < txq_grp->num_txq; j++, total++) {
-			struct idpf_queue *txq = txq_grp->txqs[j];
+			struct idpf_tx_queue *txq = txq_grp->txqs[j];
 
 			if (!txq)
 				idpf_add_empty_queue_stats(&data, qtype);
 			else
-				idpf_add_queue_stats(&data, txq);
+				idpf_add_queue_stats(&data, txq, qtype);
 		}
 	}
 
@@ -929,7 +936,7 @@ static void idpf_get_ethtool_stats(struct net_device *netdev,
 			num_rxq = rxq_grp->singleq.num_rxq;
 
 		for (j = 0; j < num_rxq; j++, total++) {
-			struct idpf_queue *rxq;
+			struct idpf_rx_queue *rxq;
 
 			if (is_splitq)
 				rxq = &rxq_grp->splitq.rxq_sets[j]->rxq;
@@ -938,7 +945,7 @@ static void idpf_get_ethtool_stats(struct net_device *netdev,
 			if (!rxq)
 				idpf_add_empty_queue_stats(&data, qtype);
 			else
-				idpf_add_queue_stats(&data, rxq);
+				idpf_add_queue_stats(&data, rxq, qtype);
 
 			/* In splitq mode, don't get page pool stats here since
 			 * the pools are attached to the buffer queues
@@ -953,7 +960,7 @@ static void idpf_get_ethtool_stats(struct net_device *netdev,
 
 	for (i = 0; i < vport->num_rxq_grp; i++) {
 		for (j = 0; j < vport->num_bufqs_per_qgrp; j++) {
-			struct idpf_queue *rxbufq =
+			struct idpf_buf_queue *rxbufq =
 				&vport->rxq_grps[i].splitq.bufq_sets[j].bufq;
 
 			page_pool_get_stats(rxbufq->pp, &pp_stats);
@@ -971,60 +978,64 @@ static void idpf_get_ethtool_stats(struct net_device *netdev,
 }
 
 /**
- * idpf_find_rxq - find rxq from q index
+ * idpf_find_rxq_vec - find rxq vector from q index
  * @vport: virtual port associated to queue
  * @q_num: q index used to find queue
  *
- * returns pointer to rx queue
+ * returns pointer to rx vector
  */
-static struct idpf_queue *idpf_find_rxq(struct idpf_vport *vport, int q_num)
+static struct idpf_q_vector *idpf_find_rxq_vec(const struct idpf_vport *vport,
+					       int q_num)
 {
 	int q_grp, q_idx;
 
 	if (!idpf_is_queue_model_split(vport->rxq_model))
-		return vport->rxq_grps->singleq.rxqs[q_num];
+		return vport->rxq_grps->singleq.rxqs[q_num]->q_vector;
 
 	q_grp = q_num / IDPF_DFLT_SPLITQ_RXQ_PER_GROUP;
 	q_idx = q_num % IDPF_DFLT_SPLITQ_RXQ_PER_GROUP;
 
-	return &vport->rxq_grps[q_grp].splitq.rxq_sets[q_idx]->rxq;
+	return vport->rxq_grps[q_grp].splitq.rxq_sets[q_idx]->rxq.q_vector;
 }
 
 /**
- * idpf_find_txq - find txq from q index
+ * idpf_find_txq_vec - find txq vector from q index
  * @vport: virtual port associated to queue
  * @q_num: q index used to find queue
  *
- * returns pointer to tx queue
+ * returns pointer to tx vector
  */
-static struct idpf_queue *idpf_find_txq(struct idpf_vport *vport, int q_num)
+static struct idpf_q_vector *idpf_find_txq_vec(const struct idpf_vport *vport,
+					       int q_num)
 {
 	int q_grp;
 
 	if (!idpf_is_queue_model_split(vport->txq_model))
-		return vport->txqs[q_num];
+		return vport->txqs[q_num]->q_vector;
 
 	q_grp = q_num / IDPF_DFLT_SPLITQ_TXQ_PER_GROUP;
 
-	return vport->txq_grps[q_grp].complq;
+	return vport->txq_grps[q_grp].complq->q_vector;
 }
 
 /**
  * __idpf_get_q_coalesce - get ITR values for specific queue
  * @ec: ethtool structure to fill with driver's coalesce settings
- * @q: quuee of Rx or Tx
+ * @q_vector: queue vector corresponding to this queue
+ * @type: queue type
  */
 static void __idpf_get_q_coalesce(struct ethtool_coalesce *ec,
-				  struct idpf_queue *q)
+				  const struct idpf_q_vector *q_vector,
+				  enum virtchnl2_queue_type type)
 {
-	if (q->q_type == VIRTCHNL2_QUEUE_TYPE_RX) {
+	if (type == VIRTCHNL2_QUEUE_TYPE_RX) {
 		ec->use_adaptive_rx_coalesce =
-				IDPF_ITR_IS_DYNAMIC(q->q_vector->rx_intr_mode);
-		ec->rx_coalesce_usecs = q->q_vector->rx_itr_value;
+				IDPF_ITR_IS_DYNAMIC(q_vector->rx_intr_mode);
+		ec->rx_coalesce_usecs = q_vector->rx_itr_value;
 	} else {
 		ec->use_adaptive_tx_coalesce =
-				IDPF_ITR_IS_DYNAMIC(q->q_vector->tx_intr_mode);
-		ec->tx_coalesce_usecs = q->q_vector->tx_itr_value;
+				IDPF_ITR_IS_DYNAMIC(q_vector->tx_intr_mode);
+		ec->tx_coalesce_usecs = q_vector->tx_itr_value;
 	}
 }
 
@@ -1040,8 +1051,8 @@ static int idpf_get_q_coalesce(struct net_device *netdev,
 			       struct ethtool_coalesce *ec,
 			       u32 q_num)
 {
-	struct idpf_netdev_priv *np = netdev_priv(netdev);
-	struct idpf_vport *vport;
+	const struct idpf_netdev_priv *np = netdev_priv(netdev);
+	const struct idpf_vport *vport;
 	int err = 0;
 
 	idpf_vport_ctrl_lock(netdev);
@@ -1056,10 +1067,12 @@ static int idpf_get_q_coalesce(struct net_device *netdev,
 	}
 
 	if (q_num < vport->num_rxq)
-		__idpf_get_q_coalesce(ec, idpf_find_rxq(vport, q_num));
+		__idpf_get_q_coalesce(ec, idpf_find_rxq_vec(vport, q_num),
+				      VIRTCHNL2_QUEUE_TYPE_RX);
 
 	if (q_num < vport->num_txq)
-		__idpf_get_q_coalesce(ec, idpf_find_txq(vport, q_num));
+		__idpf_get_q_coalesce(ec, idpf_find_txq_vec(vport, q_num),
+				      VIRTCHNL2_QUEUE_TYPE_TX);
 
 unlock_mutex:
 	idpf_vport_ctrl_unlock(netdev);
@@ -1103,16 +1116,15 @@ static int idpf_get_per_q_coalesce(struct net_device *netdev, u32 q_num,
 /**
  * __idpf_set_q_coalesce - set ITR values for specific queue
  * @ec: ethtool structure from user to update ITR settings
- * @q: queue for which itr values has to be set
+ * @qv: queue vector for which itr values has to be set
  * @is_rxq: is queue type rx
  *
  * Returns 0 on success, negative otherwise.
  */
-static int __idpf_set_q_coalesce(struct ethtool_coalesce *ec,
-				 struct idpf_queue *q, bool is_rxq)
+static int __idpf_set_q_coalesce(const struct ethtool_coalesce *ec,
+				 struct idpf_q_vector *qv, bool is_rxq)
 {
 	u32 use_adaptive_coalesce, coalesce_usecs;
-	struct idpf_q_vector *qv = q->q_vector;
 	bool is_dim_ena = false;
 	u16 itr_val;
 
@@ -1128,7 +1140,7 @@ static int __idpf_set_q_coalesce(struct ethtool_coalesce *ec,
 		itr_val = qv->tx_itr_value;
 	}
 	if (coalesce_usecs != itr_val && use_adaptive_coalesce) {
-		netdev_err(q->vport->netdev, "Cannot set coalesce usecs if adaptive enabled\n");
+		netdev_err(qv->vport->netdev, "Cannot set coalesce usecs if adaptive enabled\n");
 
 		return -EINVAL;
 	}
@@ -1137,7 +1149,7 @@ static int __idpf_set_q_coalesce(struct ethtool_coalesce *ec,
 		return 0;
 
 	if (coalesce_usecs > IDPF_ITR_MAX) {
-		netdev_err(q->vport->netdev,
+		netdev_err(qv->vport->netdev,
 			   "Invalid value, %d-usecs range is 0-%d\n",
 			   coalesce_usecs, IDPF_ITR_MAX);
 
@@ -1146,7 +1158,7 @@ static int __idpf_set_q_coalesce(struct ethtool_coalesce *ec,
 
 	if (coalesce_usecs % 2) {
 		coalesce_usecs--;
-		netdev_info(q->vport->netdev,
+		netdev_info(qv->vport->netdev,
 			    "HW only supports even ITR values, ITR rounded to %d\n",
 			    coalesce_usecs);
 	}
@@ -1185,15 +1197,16 @@ static int __idpf_set_q_coalesce(struct ethtool_coalesce *ec,
  *
  * Return 0 on success, and negative on failure
  */
-static int idpf_set_q_coalesce(struct idpf_vport *vport,
-			       struct ethtool_coalesce *ec,
+static int idpf_set_q_coalesce(const struct idpf_vport *vport,
+			       const struct ethtool_coalesce *ec,
 			       int q_num, bool is_rxq)
 {
-	struct idpf_queue *q;
+	struct idpf_q_vector *qv;
 
-	q = is_rxq ? idpf_find_rxq(vport, q_num) : idpf_find_txq(vport, q_num);
+	qv = is_rxq ? idpf_find_rxq_vec(vport, q_num) :
+		      idpf_find_txq_vec(vport, q_num);
 
-	if (q && __idpf_set_q_coalesce(ec, q, is_rxq))
+	if (qv && __idpf_set_q_coalesce(ec, qv, is_rxq))
 		return -EINVAL;
 
 	return 0;
diff --git a/drivers/net/ethernet/intel/idpf/idpf_lib.c b/drivers/net/ethernet/intel/idpf/idpf_lib.c
index 3ac9d7ab83f20..1ab679a719c77 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_lib.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_lib.c
@@ -1318,14 +1318,14 @@ static void idpf_rx_init_buf_tail(struct idpf_vport *vport)
 
 		if (idpf_is_queue_model_split(vport->rxq_model)) {
 			for (j = 0; j < vport->num_bufqs_per_qgrp; j++) {
-				struct idpf_queue *q =
+				const struct idpf_buf_queue *q =
 					&grp->splitq.bufq_sets[j].bufq;
 
 				writel(q->next_to_alloc, q->tail);
 			}
 		} else {
 			for (j = 0; j < grp->singleq.num_rxq; j++) {
-				struct idpf_queue *q =
+				const struct idpf_rx_queue *q =
 					grp->singleq.rxqs[j];
 
 				writel(q->next_to_alloc, q->tail);
@@ -1852,7 +1852,7 @@ int idpf_initiate_soft_reset(struct idpf_vport *vport,
 	enum idpf_vport_state current_state = np->state;
 	struct idpf_adapter *adapter = vport->adapter;
 	struct idpf_vport *new_vport;
-	int err, i;
+	int err;
 
 	/* If the system is low on memory, we can end up in bad state if we
 	 * free all the memory for queue resources and try to allocate them
@@ -1923,46 +1923,6 @@ int idpf_initiate_soft_reset(struct idpf_vport *vport,
 	 */
 	memcpy(vport, new_vport, offsetof(struct idpf_vport, link_speed_mbps));
 
-	/* Since idpf_vport_queues_alloc was called with new_port, the queue
-	 * back pointers are currently pointing to the local new_vport. Reset
-	 * the backpointers to the original vport here
-	 */
-	for (i = 0; i < vport->num_txq_grp; i++) {
-		struct idpf_txq_group *tx_qgrp = &vport->txq_grps[i];
-		int j;
-
-		tx_qgrp->vport = vport;
-		for (j = 0; j < tx_qgrp->num_txq; j++)
-			tx_qgrp->txqs[j]->vport = vport;
-
-		if (idpf_is_queue_model_split(vport->txq_model))
-			tx_qgrp->complq->vport = vport;
-	}
-
-	for (i = 0; i < vport->num_rxq_grp; i++) {
-		struct idpf_rxq_group *rx_qgrp = &vport->rxq_grps[i];
-		struct idpf_queue *q;
-		u16 num_rxq;
-		int j;
-
-		rx_qgrp->vport = vport;
-		for (j = 0; j < vport->num_bufqs_per_qgrp; j++)
-			rx_qgrp->splitq.bufq_sets[j].bufq.vport = vport;
-
-		if (idpf_is_queue_model_split(vport->rxq_model))
-			num_rxq = rx_qgrp->splitq.num_rxq_sets;
-		else
-			num_rxq = rx_qgrp->singleq.num_rxq;
-
-		for (j = 0; j < num_rxq; j++) {
-			if (idpf_is_queue_model_split(vport->rxq_model))
-				q = &rx_qgrp->splitq.rxq_sets[j]->rxq;
-			else
-				q = rx_qgrp->singleq.rxqs[j];
-			q->vport = vport;
-		}
-	}
-
 	if (reset_cause == IDPF_SR_Q_CHANGE)
 		idpf_vport_alloc_vec_indexes(vport);
 
diff --git a/drivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c b/drivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c
index b17d88e150006..9864a3992f0c3 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c
@@ -186,7 +186,7 @@ static int idpf_tx_singleq_csum(struct sk_buff *skb,
  * and gets a physical address for each memory location and programs
  * it and the length into the transmit base mode descriptor.
  */
-static void idpf_tx_singleq_map(struct idpf_queue *tx_q,
+static void idpf_tx_singleq_map(struct idpf_tx_queue *tx_q,
 				struct idpf_tx_buf *first,
 				struct idpf_tx_offload_params *offloads)
 {
@@ -210,7 +210,7 @@ static void idpf_tx_singleq_map(struct idpf_queue *tx_q,
 	dma = dma_map_single(tx_q->dev, skb->data, size, DMA_TO_DEVICE);
 
 	/* write each descriptor with CRC bit */
-	if (tx_q->vport->crc_enable)
+	if (idpf_queue_has(CRC_EN, tx_q))
 		td_cmd |= IDPF_TX_DESC_CMD_ICRC;
 
 	for (frag = &skb_shinfo(skb)->frags[0];; frag++) {
@@ -285,7 +285,7 @@ static void idpf_tx_singleq_map(struct idpf_queue *tx_q,
 	/* set next_to_watch value indicating a packet is present */
 	first->next_to_watch = tx_desc;
 
-	nq = netdev_get_tx_queue(tx_q->vport->netdev, tx_q->idx);
+	nq = netdev_get_tx_queue(tx_q->netdev, tx_q->idx);
 	netdev_tx_sent_queue(nq, first->bytecount);
 
 	idpf_tx_buf_hw_update(tx_q, i, netdev_xmit_more());
@@ -299,7 +299,7 @@ static void idpf_tx_singleq_map(struct idpf_queue *tx_q,
  * ring entry to reflect that this index is a context descriptor
  */
 static struct idpf_base_tx_ctx_desc *
-idpf_tx_singleq_get_ctx_desc(struct idpf_queue *txq)
+idpf_tx_singleq_get_ctx_desc(struct idpf_tx_queue *txq)
 {
 	struct idpf_base_tx_ctx_desc *ctx_desc;
 	int ntu = txq->next_to_use;
@@ -320,7 +320,7 @@ idpf_tx_singleq_get_ctx_desc(struct idpf_queue *txq)
  * @txq: queue to send buffer on
  * @offload: offload parameter structure
  **/
-static void idpf_tx_singleq_build_ctx_desc(struct idpf_queue *txq,
+static void idpf_tx_singleq_build_ctx_desc(struct idpf_tx_queue *txq,
 					   struct idpf_tx_offload_params *offload)
 {
 	struct idpf_base_tx_ctx_desc *desc = idpf_tx_singleq_get_ctx_desc(txq);
@@ -333,7 +333,7 @@ static void idpf_tx_singleq_build_ctx_desc(struct idpf_queue *txq,
 		qw1 |= FIELD_PREP(IDPF_TXD_CTX_QW1_MSS_M, offload->mss);
 
 		u64_stats_update_begin(&txq->stats_sync);
-		u64_stats_inc(&txq->q_stats.tx.lso_pkts);
+		u64_stats_inc(&txq->q_stats.lso_pkts);
 		u64_stats_update_end(&txq->stats_sync);
 	}
 
@@ -352,7 +352,7 @@ static void idpf_tx_singleq_build_ctx_desc(struct idpf_queue *txq,
  * Returns NETDEV_TX_OK if sent, else an error code
  */
 static netdev_tx_t idpf_tx_singleq_frame(struct sk_buff *skb,
-					 struct idpf_queue *tx_q)
+					 struct idpf_tx_queue *tx_q)
 {
 	struct idpf_tx_offload_params offload = { };
 	struct idpf_tx_buf *first;
@@ -419,7 +419,7 @@ netdev_tx_t idpf_tx_singleq_start(struct sk_buff *skb,
 				  struct net_device *netdev)
 {
 	struct idpf_vport *vport = idpf_netdev_to_vport(netdev);
-	struct idpf_queue *tx_q;
+	struct idpf_tx_queue *tx_q;
 
 	tx_q = vport->txqs[skb_get_queue_mapping(skb)];
 
@@ -442,16 +442,15 @@ netdev_tx_t idpf_tx_singleq_start(struct sk_buff *skb,
  * @cleaned: returns number of packets cleaned
  *
  */
-static bool idpf_tx_singleq_clean(struct idpf_queue *tx_q, int napi_budget,
+static bool idpf_tx_singleq_clean(struct idpf_tx_queue *tx_q, int napi_budget,
 				  int *cleaned)
 {
-	unsigned int budget = tx_q->vport->compln_clean_budget;
 	unsigned int total_bytes = 0, total_pkts = 0;
 	struct idpf_base_tx_desc *tx_desc;
+	u32 budget = tx_q->clean_budget;
 	s16 ntc = tx_q->next_to_clean;
 	struct idpf_netdev_priv *np;
 	struct idpf_tx_buf *tx_buf;
-	struct idpf_vport *vport;
 	struct netdev_queue *nq;
 	bool dont_wake;
 
@@ -550,16 +549,15 @@ static bool idpf_tx_singleq_clean(struct idpf_queue *tx_q, int napi_budget,
 	*cleaned += total_pkts;
 
 	u64_stats_update_begin(&tx_q->stats_sync);
-	u64_stats_add(&tx_q->q_stats.tx.packets, total_pkts);
-	u64_stats_add(&tx_q->q_stats.tx.bytes, total_bytes);
+	u64_stats_add(&tx_q->q_stats.packets, total_pkts);
+	u64_stats_add(&tx_q->q_stats.bytes, total_bytes);
 	u64_stats_update_end(&tx_q->stats_sync);
 
-	vport = tx_q->vport;
-	np = netdev_priv(vport->netdev);
-	nq = netdev_get_tx_queue(vport->netdev, tx_q->idx);
+	np = netdev_priv(tx_q->netdev);
+	nq = netdev_get_tx_queue(tx_q->netdev, tx_q->idx);
 
 	dont_wake = np->state != __IDPF_VPORT_UP ||
-		    !netif_carrier_ok(vport->netdev);
+		    !netif_carrier_ok(tx_q->netdev);
 	__netif_txq_completed_wake(nq, total_pkts, total_bytes,
 				   IDPF_DESC_UNUSED(tx_q), IDPF_TX_WAKE_THRESH,
 				   dont_wake);
@@ -584,7 +582,7 @@ static bool idpf_tx_singleq_clean_all(struct idpf_q_vector *q_vec, int budget,
 
 	budget_per_q = num_txq ? max(budget / num_txq, 1) : 0;
 	for (i = 0; i < num_txq; i++) {
-		struct idpf_queue *q;
+		struct idpf_tx_queue *q;
 
 		q = q_vec->tx[i];
 		clean_complete &= idpf_tx_singleq_clean(q, budget_per_q,
@@ -614,14 +612,9 @@ static bool idpf_rx_singleq_test_staterr(const union virtchnl2_rx_desc *rx_desc,
 
 /**
  * idpf_rx_singleq_is_non_eop - process handling of non-EOP buffers
- * @rxq: Rx ring being processed
  * @rx_desc: Rx descriptor for current buffer
- * @skb: Current socket buffer containing buffer in progress
- * @ntc: next to clean
  */
-static bool idpf_rx_singleq_is_non_eop(struct idpf_queue *rxq,
-				       union virtchnl2_rx_desc *rx_desc,
-				       struct sk_buff *skb, u16 ntc)
+static bool idpf_rx_singleq_is_non_eop(const union virtchnl2_rx_desc *rx_desc)
 {
 	/* if we are the last buffer then there is nothing else to do */
 	if (likely(idpf_rx_singleq_test_staterr(rx_desc, IDPF_RXD_EOF_SINGLEQ)))
@@ -639,7 +632,7 @@ static bool idpf_rx_singleq_is_non_eop(struct idpf_queue *rxq,
  *
  * skb->protocol must be set before this function is called
  */
-static void idpf_rx_singleq_csum(struct idpf_queue *rxq, struct sk_buff *skb,
+static void idpf_rx_singleq_csum(struct idpf_rx_queue *rxq, struct sk_buff *skb,
 				 struct idpf_rx_csum_decoded *csum_bits,
 				 u16 ptype)
 {
@@ -647,14 +640,14 @@ static void idpf_rx_singleq_csum(struct idpf_queue *rxq, struct sk_buff *skb,
 	bool ipv4, ipv6;
 
 	/* check if Rx checksum is enabled */
-	if (unlikely(!(rxq->vport->netdev->features & NETIF_F_RXCSUM)))
+	if (unlikely(!(rxq->netdev->features & NETIF_F_RXCSUM)))
 		return;
 
 	/* check if HW has decoded the packet and checksum */
 	if (unlikely(!(csum_bits->l3l4p)))
 		return;
 
-	decoded = rxq->vport->rx_ptype_lkup[ptype];
+	decoded = rxq->rx_ptype_lkup[ptype];
 	if (unlikely(!(decoded.known && decoded.outer_ip)))
 		return;
 
@@ -707,7 +700,7 @@ static void idpf_rx_singleq_csum(struct idpf_queue *rxq, struct sk_buff *skb,
 
 checksum_fail:
 	u64_stats_update_begin(&rxq->stats_sync);
-	u64_stats_inc(&rxq->q_stats.rx.hw_csum_err);
+	u64_stats_inc(&rxq->q_stats.hw_csum_err);
 	u64_stats_update_end(&rxq->stats_sync);
 }
 
@@ -721,9 +714,9 @@ static void idpf_rx_singleq_csum(struct idpf_queue *rxq, struct sk_buff *skb,
  * This function only operates on the VIRTCHNL2_RXDID_1_32B_BASE_M base 32byte
  * descriptor writeback format.
  **/
-static void idpf_rx_singleq_base_csum(struct idpf_queue *rx_q,
+static void idpf_rx_singleq_base_csum(struct idpf_rx_queue *rx_q,
 				      struct sk_buff *skb,
-				      union virtchnl2_rx_desc *rx_desc,
+				      const union virtchnl2_rx_desc *rx_desc,
 				      u16 ptype)
 {
 	struct idpf_rx_csum_decoded csum_bits;
@@ -761,9 +754,9 @@ static void idpf_rx_singleq_base_csum(struct idpf_queue *rx_q,
  * This function only operates on the VIRTCHNL2_RXDID_2_FLEX_SQ_NIC flexible
  * descriptor writeback format.
  **/
-static void idpf_rx_singleq_flex_csum(struct idpf_queue *rx_q,
+static void idpf_rx_singleq_flex_csum(struct idpf_rx_queue *rx_q,
 				      struct sk_buff *skb,
-				      union virtchnl2_rx_desc *rx_desc,
+				      const union virtchnl2_rx_desc *rx_desc,
 				      u16 ptype)
 {
 	struct idpf_rx_csum_decoded csum_bits;
@@ -801,14 +794,14 @@ static void idpf_rx_singleq_flex_csum(struct idpf_queue *rx_q,
  * This function only operates on the VIRTCHNL2_RXDID_1_32B_BASE_M base 32byte
  * descriptor writeback format.
  **/
-static void idpf_rx_singleq_base_hash(struct idpf_queue *rx_q,
+static void idpf_rx_singleq_base_hash(struct idpf_rx_queue *rx_q,
 				      struct sk_buff *skb,
-				      union virtchnl2_rx_desc *rx_desc,
+				      const union virtchnl2_rx_desc *rx_desc,
 				      struct idpf_rx_ptype_decoded *decoded)
 {
 	u64 mask, qw1;
 
-	if (unlikely(!(rx_q->vport->netdev->features & NETIF_F_RXHASH)))
+	if (unlikely(!(rx_q->netdev->features & NETIF_F_RXHASH)))
 		return;
 
 	mask = VIRTCHNL2_RX_BASE_DESC_FLTSTAT_RSS_HASH_M;
@@ -831,12 +824,12 @@ static void idpf_rx_singleq_base_hash(struct idpf_queue *rx_q,
  * This function only operates on the VIRTCHNL2_RXDID_2_FLEX_SQ_NIC flexible
  * descriptor writeback format.
  **/
-static void idpf_rx_singleq_flex_hash(struct idpf_queue *rx_q,
+static void idpf_rx_singleq_flex_hash(struct idpf_rx_queue *rx_q,
 				      struct sk_buff *skb,
-				      union virtchnl2_rx_desc *rx_desc,
+				      const union virtchnl2_rx_desc *rx_desc,
 				      struct idpf_rx_ptype_decoded *decoded)
 {
-	if (unlikely(!(rx_q->vport->netdev->features & NETIF_F_RXHASH)))
+	if (unlikely(!(rx_q->netdev->features & NETIF_F_RXHASH)))
 		return;
 
 	if (FIELD_GET(VIRTCHNL2_RX_FLEX_DESC_STATUS0_RSS_VALID_M,
@@ -857,16 +850,16 @@ static void idpf_rx_singleq_flex_hash(struct idpf_queue *rx_q,
  * order to populate the hash, checksum, VLAN, protocol, and
  * other fields within the skb.
  */
-static void idpf_rx_singleq_process_skb_fields(struct idpf_queue *rx_q,
-					       struct sk_buff *skb,
-					       union virtchnl2_rx_desc *rx_desc,
-					       u16 ptype)
+static void
+idpf_rx_singleq_process_skb_fields(struct idpf_rx_queue *rx_q,
+				   struct sk_buff *skb,
+				   const union virtchnl2_rx_desc *rx_desc,
+				   u16 ptype)
 {
-	struct idpf_rx_ptype_decoded decoded =
-					rx_q->vport->rx_ptype_lkup[ptype];
+	struct idpf_rx_ptype_decoded decoded = rx_q->rx_ptype_lkup[ptype];
 
 	/* modifies the skb - consumes the enet header */
-	skb->protocol = eth_type_trans(skb, rx_q->vport->netdev);
+	skb->protocol = eth_type_trans(skb, rx_q->netdev);
 
 	/* Check if we're using base mode descriptor IDs */
 	if (rx_q->rxdids == VIRTCHNL2_RXDID_1_32B_BASE_M) {
@@ -878,6 +871,22 @@ static void idpf_rx_singleq_process_skb_fields(struct idpf_queue *rx_q,
 	}
 }
 
+/**
+ * idpf_rx_buf_hw_update - Store the new tail and head values
+ * @rxq: queue to bump
+ * @val: new head index
+ */
+static void idpf_rx_buf_hw_update(struct idpf_rx_queue *rxq, u32 val)
+{
+	rxq->next_to_use = val;
+
+	if (unlikely(!rxq->tail))
+		return;
+
+	/* writel has an implicit memory barrier */
+	writel(val, rxq->tail);
+}
+
 /**
  * idpf_rx_singleq_buf_hw_alloc_all - Replace used receive buffers
  * @rx_q: queue for which the hw buffers are allocated
@@ -885,7 +894,7 @@ static void idpf_rx_singleq_process_skb_fields(struct idpf_queue *rx_q,
  *
  * Returns false if all allocations were successful, true if any fail
  */
-bool idpf_rx_singleq_buf_hw_alloc_all(struct idpf_queue *rx_q,
+bool idpf_rx_singleq_buf_hw_alloc_all(struct idpf_rx_queue *rx_q,
 				      u16 cleaned_count)
 {
 	struct virtchnl2_singleq_rx_buf_desc *desc;
@@ -896,7 +905,7 @@ bool idpf_rx_singleq_buf_hw_alloc_all(struct idpf_queue *rx_q,
 		return false;
 
 	desc = &rx_q->single_buf[nta];
-	buf = &rx_q->rx_buf.buf[nta];
+	buf = &rx_q->rx_buf[nta];
 
 	do {
 		dma_addr_t addr;
@@ -916,7 +925,7 @@ bool idpf_rx_singleq_buf_hw_alloc_all(struct idpf_queue *rx_q,
 		nta++;
 		if (unlikely(nta == rx_q->desc_count)) {
 			desc = &rx_q->single_buf[0];
-			buf = rx_q->rx_buf.buf;
+			buf = rx_q->rx_buf;
 			nta = 0;
 		}
 
@@ -933,7 +942,6 @@ bool idpf_rx_singleq_buf_hw_alloc_all(struct idpf_queue *rx_q,
 
 /**
  * idpf_rx_singleq_extract_base_fields - Extract fields from the Rx descriptor
- * @rx_q: Rx descriptor queue
  * @rx_desc: the descriptor to process
  * @fields: storage for extracted values
  *
@@ -943,9 +951,9 @@ bool idpf_rx_singleq_buf_hw_alloc_all(struct idpf_queue *rx_q,
  * This function only operates on the VIRTCHNL2_RXDID_1_32B_BASE_M base 32byte
  * descriptor writeback format.
  */
-static void idpf_rx_singleq_extract_base_fields(struct idpf_queue *rx_q,
-						union virtchnl2_rx_desc *rx_desc,
-						struct idpf_rx_extracted *fields)
+static void
+idpf_rx_singleq_extract_base_fields(const union virtchnl2_rx_desc *rx_desc,
+				    struct idpf_rx_extracted *fields)
 {
 	u64 qword;
 
@@ -957,7 +965,6 @@ static void idpf_rx_singleq_extract_base_fields(struct idpf_queue *rx_q,
 
 /**
  * idpf_rx_singleq_extract_flex_fields - Extract fields from the Rx descriptor
- * @rx_q: Rx descriptor queue
  * @rx_desc: the descriptor to process
  * @fields: storage for extracted values
  *
@@ -967,9 +974,9 @@ static void idpf_rx_singleq_extract_base_fields(struct idpf_queue *rx_q,
  * This function only operates on the VIRTCHNL2_RXDID_2_FLEX_SQ_NIC flexible
  * descriptor writeback format.
  */
-static void idpf_rx_singleq_extract_flex_fields(struct idpf_queue *rx_q,
-						union virtchnl2_rx_desc *rx_desc,
-						struct idpf_rx_extracted *fields)
+static void
+idpf_rx_singleq_extract_flex_fields(const union virtchnl2_rx_desc *rx_desc,
+				    struct idpf_rx_extracted *fields)
 {
 	fields->size = FIELD_GET(VIRTCHNL2_RX_FLEX_DESC_PKT_LEN_M,
 				 le16_to_cpu(rx_desc->flex_nic_wb.pkt_len));
@@ -984,14 +991,15 @@ static void idpf_rx_singleq_extract_flex_fields(struct idpf_queue *rx_q,
  * @fields: storage for extracted values
  *
  */
-static void idpf_rx_singleq_extract_fields(struct idpf_queue *rx_q,
-					   union virtchnl2_rx_desc *rx_desc,
-					   struct idpf_rx_extracted *fields)
+static void
+idpf_rx_singleq_extract_fields(const struct idpf_rx_queue *rx_q,
+			       const union virtchnl2_rx_desc *rx_desc,
+			       struct idpf_rx_extracted *fields)
 {
 	if (rx_q->rxdids == VIRTCHNL2_RXDID_1_32B_BASE_M)
-		idpf_rx_singleq_extract_base_fields(rx_q, rx_desc, fields);
+		idpf_rx_singleq_extract_base_fields(rx_desc, fields);
 	else
-		idpf_rx_singleq_extract_flex_fields(rx_q, rx_desc, fields);
+		idpf_rx_singleq_extract_flex_fields(rx_desc, fields);
 }
 
 /**
@@ -1001,7 +1009,7 @@ static void idpf_rx_singleq_extract_fields(struct idpf_queue *rx_q,
  *
  * Returns true if there's any budget left (e.g. the clean is finished)
  */
-static int idpf_rx_singleq_clean(struct idpf_queue *rx_q, int budget)
+static int idpf_rx_singleq_clean(struct idpf_rx_queue *rx_q, int budget)
 {
 	unsigned int total_rx_bytes = 0, total_rx_pkts = 0;
 	struct sk_buff *skb = rx_q->skb;
@@ -1036,7 +1044,7 @@ static int idpf_rx_singleq_clean(struct idpf_queue *rx_q, int budget)
 
 		idpf_rx_singleq_extract_fields(rx_q, rx_desc, &fields);
 
-		rx_buf = &rx_q->rx_buf.buf[ntc];
+		rx_buf = &rx_q->rx_buf[ntc];
 		if (!fields.size) {
 			idpf_rx_put_page(rx_buf);
 			goto skip_data;
@@ -1058,7 +1066,7 @@ static int idpf_rx_singleq_clean(struct idpf_queue *rx_q, int budget)
 		cleaned_count++;
 
 		/* skip if it is non EOP desc */
-		if (idpf_rx_singleq_is_non_eop(rx_q, rx_desc, skb, ntc))
+		if (idpf_rx_singleq_is_non_eop(rx_desc))
 			continue;
 
 #define IDPF_RXD_ERR_S FIELD_PREP(VIRTCHNL2_RX_BASE_DESC_QW1_ERROR_M, \
@@ -1084,7 +1092,7 @@ static int idpf_rx_singleq_clean(struct idpf_queue *rx_q, int budget)
 						   rx_desc, fields.rx_ptype);
 
 		/* send completed skb up the stack */
-		napi_gro_receive(&rx_q->q_vector->napi, skb);
+		napi_gro_receive(rx_q->pp->p.napi, skb);
 		skb = NULL;
 
 		/* update budget accounting */
@@ -1099,8 +1107,8 @@ static int idpf_rx_singleq_clean(struct idpf_queue *rx_q, int budget)
 		failure = idpf_rx_singleq_buf_hw_alloc_all(rx_q, cleaned_count);
 
 	u64_stats_update_begin(&rx_q->stats_sync);
-	u64_stats_add(&rx_q->q_stats.rx.packets, total_rx_pkts);
-	u64_stats_add(&rx_q->q_stats.rx.bytes, total_rx_bytes);
+	u64_stats_add(&rx_q->q_stats.packets, total_rx_pkts);
+	u64_stats_add(&rx_q->q_stats.bytes, total_rx_bytes);
 	u64_stats_update_end(&rx_q->stats_sync);
 
 	/* guarantee a trip back through this routine if there was a failure */
@@ -1127,7 +1135,7 @@ static bool idpf_rx_singleq_clean_all(struct idpf_q_vector *q_vec, int budget,
 	 */
 	budget_per_q = num_rxq ? max(budget / num_rxq, 1) : 0;
 	for (i = 0; i < num_rxq; i++) {
-		struct idpf_queue *rxq = q_vec->rx[i];
+		struct idpf_rx_queue *rxq = q_vec->rx[i];
 		int pkts_cleaned_per_q;
 
 		pkts_cleaned_per_q = idpf_rx_singleq_clean(rxq, budget_per_q);
diff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.c b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
index 948b485da539c..cdb01c54213f9 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_txrx.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
@@ -60,7 +60,8 @@ void idpf_tx_timeout(struct net_device *netdev, unsigned int txqueue)
  * @tx_q: the queue that owns the buffer
  * @tx_buf: the buffer to free
  */
-static void idpf_tx_buf_rel(struct idpf_queue *tx_q, struct idpf_tx_buf *tx_buf)
+static void idpf_tx_buf_rel(struct idpf_tx_queue *tx_q,
+			    struct idpf_tx_buf *tx_buf)
 {
 	if (tx_buf->skb) {
 		if (dma_unmap_len(tx_buf, len))
@@ -86,8 +87,9 @@ static void idpf_tx_buf_rel(struct idpf_queue *tx_q, struct idpf_tx_buf *tx_buf)
  * idpf_tx_buf_rel_all - Free any empty Tx buffers
  * @txq: queue to be cleaned
  */
-static void idpf_tx_buf_rel_all(struct idpf_queue *txq)
+static void idpf_tx_buf_rel_all(struct idpf_tx_queue *txq)
 {
+	struct idpf_buf_lifo *buf_stack;
 	u16 i;
 
 	/* Buffers already cleared, nothing to do */
@@ -101,38 +103,57 @@ static void idpf_tx_buf_rel_all(struct idpf_queue *txq)
 	kfree(txq->tx_buf);
 	txq->tx_buf = NULL;
 
-	if (!txq->buf_stack.bufs)
+	if (!idpf_queue_has(FLOW_SCH_EN, txq))
 		return;
 
-	for (i = 0; i < txq->buf_stack.size; i++)
-		kfree(txq->buf_stack.bufs[i]);
+	buf_stack = &txq->stash->buf_stack;
+	if (!buf_stack->bufs)
+		return;
+
+	for (i = 0; i < buf_stack->size; i++)
+		kfree(buf_stack->bufs[i]);
 
-	kfree(txq->buf_stack.bufs);
-	txq->buf_stack.bufs = NULL;
+	kfree(buf_stack->bufs);
+	buf_stack->bufs = NULL;
 }
 
 /**
  * idpf_tx_desc_rel - Free Tx resources per queue
  * @txq: Tx descriptor ring for a specific queue
- * @bufq: buffer q or completion q
  *
  * Free all transmit software resources
  */
-static void idpf_tx_desc_rel(struct idpf_queue *txq, bool bufq)
+static void idpf_tx_desc_rel(struct idpf_tx_queue *txq)
 {
-	if (bufq)
-		idpf_tx_buf_rel_all(txq);
+	idpf_tx_buf_rel_all(txq);
 
 	if (!txq->desc_ring)
 		return;
 
 	dmam_free_coherent(txq->dev, txq->size, txq->desc_ring, txq->dma);
 	txq->desc_ring = NULL;
-	txq->next_to_alloc = 0;
 	txq->next_to_use = 0;
 	txq->next_to_clean = 0;
 }
 
+/**
+ * idpf_compl_desc_rel - Free completion resources per queue
+ * @complq: completion queue
+ *
+ * Free all completion software resources.
+ */
+static void idpf_compl_desc_rel(struct idpf_compl_queue *complq)
+{
+	if (!complq->comp)
+		return;
+
+	dma_free_coherent(complq->netdev->dev.parent, complq->size,
+			  complq->comp, complq->dma);
+	complq->comp = NULL;
+	complq->next_to_use = 0;
+	complq->next_to_clean = 0;
+}
+
 /**
  * idpf_tx_desc_rel_all - Free Tx Resources for All Queues
  * @vport: virtual port structure
@@ -150,10 +171,10 @@ static void idpf_tx_desc_rel_all(struct idpf_vport *vport)
 		struct idpf_txq_group *txq_grp = &vport->txq_grps[i];
 
 		for (j = 0; j < txq_grp->num_txq; j++)
-			idpf_tx_desc_rel(txq_grp->txqs[j], true);
+			idpf_tx_desc_rel(txq_grp->txqs[j]);
 
 		if (idpf_is_queue_model_split(vport->txq_model))
-			idpf_tx_desc_rel(txq_grp->complq, false);
+			idpf_compl_desc_rel(txq_grp->complq);
 	}
 }
 
@@ -163,8 +184,9 @@ static void idpf_tx_desc_rel_all(struct idpf_vport *vport)
  *
  * Returns 0 on success, negative on failure
  */
-static int idpf_tx_buf_alloc_all(struct idpf_queue *tx_q)
+static int idpf_tx_buf_alloc_all(struct idpf_tx_queue *tx_q)
 {
+	struct idpf_buf_lifo *buf_stack;
 	int buf_size;
 	int i;
 
@@ -180,22 +202,26 @@ static int idpf_tx_buf_alloc_all(struct idpf_queue *tx_q)
 	for (i = 0; i < tx_q->desc_count; i++)
 		tx_q->tx_buf[i].compl_tag = IDPF_SPLITQ_TX_INVAL_COMPL_TAG;
 
+	if (!idpf_queue_has(FLOW_SCH_EN, tx_q))
+		return 0;
+
+	buf_stack = &tx_q->stash->buf_stack;
+
 	/* Initialize tx buf stack for out-of-order completions if
 	 * flow scheduling offload is enabled
 	 */
-	tx_q->buf_stack.bufs =
-		kcalloc(tx_q->desc_count, sizeof(struct idpf_tx_stash *),
-			GFP_KERNEL);
-	if (!tx_q->buf_stack.bufs)
+	buf_stack->bufs = kcalloc(tx_q->desc_count, sizeof(*buf_stack->bufs),
+				  GFP_KERNEL);
+	if (!buf_stack->bufs)
 		return -ENOMEM;
 
-	tx_q->buf_stack.size = tx_q->desc_count;
-	tx_q->buf_stack.top = tx_q->desc_count;
+	buf_stack->size = tx_q->desc_count;
+	buf_stack->top = tx_q->desc_count;
 
 	for (i = 0; i < tx_q->desc_count; i++) {
-		tx_q->buf_stack.bufs[i] = kzalloc(sizeof(*tx_q->buf_stack.bufs[i]),
-						  GFP_KERNEL);
-		if (!tx_q->buf_stack.bufs[i])
+		buf_stack->bufs[i] = kzalloc(sizeof(*buf_stack->bufs[i]),
+					     GFP_KERNEL);
+		if (!buf_stack->bufs[i])
 			return -ENOMEM;
 	}
 
@@ -204,28 +230,22 @@ static int idpf_tx_buf_alloc_all(struct idpf_queue *tx_q)
 
 /**
  * idpf_tx_desc_alloc - Allocate the Tx descriptors
+ * @vport: vport to allocate resources for
  * @tx_q: the tx ring to set up
- * @bufq: buffer or completion queue
  *
  * Returns 0 on success, negative on failure
  */
-static int idpf_tx_desc_alloc(struct idpf_queue *tx_q, bool bufq)
+static int idpf_tx_desc_alloc(const struct idpf_vport *vport,
+			      struct idpf_tx_queue *tx_q)
 {
 	struct device *dev = tx_q->dev;
-	u32 desc_sz;
 	int err;
 
-	if (bufq) {
-		err = idpf_tx_buf_alloc_all(tx_q);
-		if (err)
-			goto err_alloc;
-
-		desc_sz = sizeof(struct idpf_base_tx_desc);
-	} else {
-		desc_sz = sizeof(struct idpf_splitq_tx_compl_desc);
-	}
+	err = idpf_tx_buf_alloc_all(tx_q);
+	if (err)
+		goto err_alloc;
 
-	tx_q->size = tx_q->desc_count * desc_sz;
+	tx_q->size = tx_q->desc_count * sizeof(*tx_q->base_tx);
 
 	/* Allocate descriptors also round up to nearest 4K */
 	tx_q->size = ALIGN(tx_q->size, 4096);
@@ -238,19 +258,43 @@ static int idpf_tx_desc_alloc(struct idpf_queue *tx_q, bool bufq)
 		goto err_alloc;
 	}
 
-	tx_q->next_to_alloc = 0;
 	tx_q->next_to_use = 0;
 	tx_q->next_to_clean = 0;
-	set_bit(__IDPF_Q_GEN_CHK, tx_q->flags);
+	idpf_queue_set(GEN_CHK, tx_q);
 
 	return 0;
 
 err_alloc:
-	idpf_tx_desc_rel(tx_q, bufq);
+	idpf_tx_desc_rel(tx_q);
 
 	return err;
 }
 
+/**
+ * idpf_compl_desc_alloc - allocate completion descriptors
+ * @vport: vport to allocate resources for
+ * @complq: completion queue to set up
+ *
+ * Return: 0 on success, -errno on failure.
+ */
+static int idpf_compl_desc_alloc(const struct idpf_vport *vport,
+				 struct idpf_compl_queue *complq)
+{
+	complq->size = array_size(complq->desc_count, sizeof(*complq->comp));
+
+	complq->comp = dma_alloc_coherent(complq->netdev->dev.parent,
+					  complq->size, &complq->dma,
+					  GFP_KERNEL);
+	if (!complq->comp)
+		return -ENOMEM;
+
+	complq->next_to_use = 0;
+	complq->next_to_clean = 0;
+	idpf_queue_set(GEN_CHK, complq);
+
+	return 0;
+}
+
 /**
  * idpf_tx_desc_alloc_all - allocate all queues Tx resources
  * @vport: virtual port private structure
@@ -259,7 +303,6 @@ static int idpf_tx_desc_alloc(struct idpf_queue *tx_q, bool bufq)
  */
 static int idpf_tx_desc_alloc_all(struct idpf_vport *vport)
 {
-	struct device *dev = &vport->adapter->pdev->dev;
 	int err = 0;
 	int i, j;
 
@@ -268,13 +311,14 @@ static int idpf_tx_desc_alloc_all(struct idpf_vport *vport)
 	 */
 	for (i = 0; i < vport->num_txq_grp; i++) {
 		for (j = 0; j < vport->txq_grps[i].num_txq; j++) {
-			struct idpf_queue *txq = vport->txq_grps[i].txqs[j];
+			struct idpf_tx_queue *txq = vport->txq_grps[i].txqs[j];
 			u8 gen_bits = 0;
 			u16 bufidx_mask;
 
-			err = idpf_tx_desc_alloc(txq, true);
+			err = idpf_tx_desc_alloc(vport, txq);
 			if (err) {
-				dev_err(dev, "Allocation for Tx Queue %u failed\n",
+				pci_err(vport->adapter->pdev,
+					"Allocation for Tx Queue %u failed\n",
 					i);
 				goto err_out;
 			}
@@ -312,9 +356,10 @@ static int idpf_tx_desc_alloc_all(struct idpf_vport *vport)
 			continue;
 
 		/* Setup completion queues */
-		err = idpf_tx_desc_alloc(vport->txq_grps[i].complq, false);
+		err = idpf_compl_desc_alloc(vport, vport->txq_grps[i].complq);
 		if (err) {
-			dev_err(dev, "Allocation for Tx Completion Queue %u failed\n",
+			pci_err(vport->adapter->pdev,
+				"Allocation for Tx Completion Queue %u failed\n",
 				i);
 			goto err_out;
 		}
@@ -329,15 +374,14 @@ static int idpf_tx_desc_alloc_all(struct idpf_vport *vport)
 
 /**
  * idpf_rx_page_rel - Release an rx buffer page
- * @rxq: the queue that owns the buffer
  * @rx_buf: the buffer to free
  */
-static void idpf_rx_page_rel(struct idpf_queue *rxq, struct idpf_rx_buf *rx_buf)
+static void idpf_rx_page_rel(struct idpf_rx_buf *rx_buf)
 {
 	if (unlikely(!rx_buf->page))
 		return;
 
-	page_pool_put_full_page(rxq->pp, rx_buf->page, false);
+	page_pool_put_full_page(rx_buf->page->pp, rx_buf->page, false);
 
 	rx_buf->page = NULL;
 	rx_buf->page_offset = 0;
@@ -345,54 +389,72 @@ static void idpf_rx_page_rel(struct idpf_queue *rxq, struct idpf_rx_buf *rx_buf)
 
 /**
  * idpf_rx_hdr_buf_rel_all - Release header buffer memory
- * @rxq: queue to use
+ * @bufq: queue to use
+ * @dev: device to free DMA memory
  */
-static void idpf_rx_hdr_buf_rel_all(struct idpf_queue *rxq)
+static void idpf_rx_hdr_buf_rel_all(struct idpf_buf_queue *bufq,
+				    struct device *dev)
 {
-	struct idpf_adapter *adapter = rxq->vport->adapter;
-
-	dma_free_coherent(&adapter->pdev->dev,
-			  rxq->desc_count * IDPF_HDR_BUF_SIZE,
-			  rxq->rx_buf.hdr_buf_va,
-			  rxq->rx_buf.hdr_buf_pa);
-	rxq->rx_buf.hdr_buf_va = NULL;
+	dma_free_coherent(dev, bufq->desc_count * IDPF_HDR_BUF_SIZE,
+			  bufq->rx_buf.hdr_buf_va, bufq->rx_buf.hdr_buf_pa);
+	bufq->rx_buf.hdr_buf_va = NULL;
 }
 
 /**
- * idpf_rx_buf_rel_all - Free all Rx buffer resources for a queue
- * @rxq: queue to be cleaned
+ * idpf_rx_buf_rel_bufq - Free all Rx buffer resources for a buffer queue
+ * @bufq: queue to be cleaned
+ * @dev: device to free DMA memory
  */
-static void idpf_rx_buf_rel_all(struct idpf_queue *rxq)
+static void idpf_rx_buf_rel_bufq(struct idpf_buf_queue *bufq,
+				 struct device *dev)
 {
-	u16 i;
-
 	/* queue already cleared, nothing to do */
-	if (!rxq->rx_buf.buf)
+	if (!bufq->rx_buf.buf)
 		return;
 
 	/* Free all the bufs allocated and given to hw on Rx queue */
-	for (i = 0; i < rxq->desc_count; i++)
-		idpf_rx_page_rel(rxq, &rxq->rx_buf.buf[i]);
+	for (u32 i = 0; i < bufq->desc_count; i++)
+		idpf_rx_page_rel(&bufq->rx_buf.buf[i]);
+
+	if (idpf_queue_has(HSPLIT_EN, bufq))
+		idpf_rx_hdr_buf_rel_all(bufq, dev);
+
+	page_pool_destroy(bufq->pp);
+	bufq->pp = NULL;
+
+	kfree(bufq->rx_buf.buf);
+	bufq->rx_buf.buf = NULL;
+}
 
-	if (rxq->rx_hsplit_en)
-		idpf_rx_hdr_buf_rel_all(rxq);
+/**
+ * idpf_rx_buf_rel_all - Free all Rx buffer resources for a receive queue
+ * @rxq: queue to be cleaned
+ */
+static void idpf_rx_buf_rel_all(struct idpf_rx_queue *rxq)
+{
+	if (!rxq->rx_buf)
+		return;
+
+	for (u32 i = 0; i < rxq->desc_count; i++)
+		idpf_rx_page_rel(&rxq->rx_buf[i]);
 
 	page_pool_destroy(rxq->pp);
 	rxq->pp = NULL;
 
-	kfree(rxq->rx_buf.buf);
-	rxq->rx_buf.buf = NULL;
+	kfree(rxq->rx_buf);
+	rxq->rx_buf = NULL;
 }
 
 /**
  * idpf_rx_desc_rel - Free a specific Rx q resources
  * @rxq: queue to clean the resources from
- * @bufq: buffer q or completion q
- * @q_model: single or split q model
+ * @dev: device to free DMA memory
+ * @model: single or split queue model
  *
  * Free a specific rx queue resources
  */
-static void idpf_rx_desc_rel(struct idpf_queue *rxq, bool bufq, s32 q_model)
+static void idpf_rx_desc_rel(struct idpf_rx_queue *rxq, struct device *dev,
+			     u32 model)
 {
 	if (!rxq)
 		return;
@@ -402,7 +464,7 @@ static void idpf_rx_desc_rel(struct idpf_queue *rxq, bool bufq, s32 q_model)
 		rxq->skb = NULL;
 	}
 
-	if (bufq || !idpf_is_queue_model_split(q_model))
+	if (!idpf_is_queue_model_split(model))
 		idpf_rx_buf_rel_all(rxq);
 
 	rxq->next_to_alloc = 0;
@@ -411,10 +473,34 @@ static void idpf_rx_desc_rel(struct idpf_queue *rxq, bool bufq, s32 q_model)
 	if (!rxq->desc_ring)
 		return;
 
-	dmam_free_coherent(rxq->dev, rxq->size, rxq->desc_ring, rxq->dma);
+	dmam_free_coherent(dev, rxq->size, rxq->desc_ring, rxq->dma);
 	rxq->desc_ring = NULL;
 }
 
+/**
+ * idpf_rx_desc_rel_bufq - free buffer queue resources
+ * @bufq: buffer queue to clean the resources from
+ * @dev: device to free DMA memory
+ */
+static void idpf_rx_desc_rel_bufq(struct idpf_buf_queue *bufq,
+				  struct device *dev)
+{
+	if (!bufq)
+		return;
+
+	idpf_rx_buf_rel_bufq(bufq, dev);
+
+	bufq->next_to_alloc = 0;
+	bufq->next_to_clean = 0;
+	bufq->next_to_use = 0;
+
+	if (!bufq->split_buf)
+		return;
+
+	dma_free_coherent(dev, bufq->size, bufq->split_buf, bufq->dma);
+	bufq->split_buf = NULL;
+}
+
 /**
  * idpf_rx_desc_rel_all - Free Rx Resources for All Queues
  * @vport: virtual port structure
@@ -423,6 +509,7 @@ static void idpf_rx_desc_rel(struct idpf_queue *rxq, bool bufq, s32 q_model)
  */
 static void idpf_rx_desc_rel_all(struct idpf_vport *vport)
 {
+	struct device *dev = &vport->adapter->pdev->dev;
 	struct idpf_rxq_group *rx_qgrp;
 	u16 num_rxq;
 	int i, j;
@@ -435,15 +522,15 @@ static void idpf_rx_desc_rel_all(struct idpf_vport *vport)
 
 		if (!idpf_is_queue_model_split(vport->rxq_model)) {
 			for (j = 0; j < rx_qgrp->singleq.num_rxq; j++)
-				idpf_rx_desc_rel(rx_qgrp->singleq.rxqs[j],
-						 false, vport->rxq_model);
+				idpf_rx_desc_rel(rx_qgrp->singleq.rxqs[j], dev,
+						 VIRTCHNL2_QUEUE_MODEL_SINGLE);
 			continue;
 		}
 
 		num_rxq = rx_qgrp->splitq.num_rxq_sets;
 		for (j = 0; j < num_rxq; j++)
 			idpf_rx_desc_rel(&rx_qgrp->splitq.rxq_sets[j]->rxq,
-					 false, vport->rxq_model);
+					 dev, VIRTCHNL2_QUEUE_MODEL_SPLIT);
 
 		if (!rx_qgrp->splitq.bufq_sets)
 			continue;
@@ -452,44 +539,40 @@ static void idpf_rx_desc_rel_all(struct idpf_vport *vport)
 			struct idpf_bufq_set *bufq_set =
 				&rx_qgrp->splitq.bufq_sets[j];
 
-			idpf_rx_desc_rel(&bufq_set->bufq, true,
-					 vport->rxq_model);
+			idpf_rx_desc_rel_bufq(&bufq_set->bufq, dev);
 		}
 	}
 }
 
 /**
  * idpf_rx_buf_hw_update - Store the new tail and head values
- * @rxq: queue to bump
+ * @bufq: queue to bump
  * @val: new head index
  */
-void idpf_rx_buf_hw_update(struct idpf_queue *rxq, u32 val)
+static void idpf_rx_buf_hw_update(struct idpf_buf_queue *bufq, u32 val)
 {
-	rxq->next_to_use = val;
+	bufq->next_to_use = val;
 
-	if (unlikely(!rxq->tail))
+	if (unlikely(!bufq->tail))
 		return;
 
 	/* writel has an implicit memory barrier */
-	writel(val, rxq->tail);
+	writel(val, bufq->tail);
 }
 
 /**
  * idpf_rx_hdr_buf_alloc_all - Allocate memory for header buffers
- * @rxq: ring to use
+ * @bufq: ring to use
  *
  * Returns 0 on success, negative on failure.
  */
-static int idpf_rx_hdr_buf_alloc_all(struct idpf_queue *rxq)
+static int idpf_rx_hdr_buf_alloc_all(struct idpf_buf_queue *bufq)
 {
-	struct idpf_adapter *adapter = rxq->vport->adapter;
-
-	rxq->rx_buf.hdr_buf_va =
-		dma_alloc_coherent(&adapter->pdev->dev,
-				   IDPF_HDR_BUF_SIZE * rxq->desc_count,
-				   &rxq->rx_buf.hdr_buf_pa,
-				   GFP_KERNEL);
-	if (!rxq->rx_buf.hdr_buf_va)
+	bufq->rx_buf.hdr_buf_va =
+		dma_alloc_coherent(bufq->q_vector->vport->netdev->dev.parent,
+				   IDPF_HDR_BUF_SIZE * bufq->desc_count,
+				   &bufq->rx_buf.hdr_buf_pa, GFP_KERNEL);
+	if (!bufq->rx_buf.hdr_buf_va)
 		return -ENOMEM;
 
 	return 0;
@@ -502,19 +585,20 @@ static int idpf_rx_hdr_buf_alloc_all(struct idpf_queue *rxq)
  */
 static void idpf_rx_post_buf_refill(struct idpf_sw_queue *refillq, u16 buf_id)
 {
-	u16 nta = refillq->next_to_alloc;
+	u32 nta = refillq->next_to_use;
 
 	/* store the buffer ID and the SW maintained GEN bit to the refillq */
 	refillq->ring[nta] =
 		FIELD_PREP(IDPF_RX_BI_BUFID_M, buf_id) |
 		FIELD_PREP(IDPF_RX_BI_GEN_M,
-			   test_bit(__IDPF_Q_GEN_CHK, refillq->flags));
+			   idpf_queue_has(GEN_CHK, refillq));
 
 	if (unlikely(++nta == refillq->desc_count)) {
 		nta = 0;
-		change_bit(__IDPF_Q_GEN_CHK, refillq->flags);
+		idpf_queue_change(GEN_CHK, refillq);
 	}
-	refillq->next_to_alloc = nta;
+
+	refillq->next_to_use = nta;
 }
 
 /**
@@ -524,7 +608,7 @@ static void idpf_rx_post_buf_refill(struct idpf_sw_queue *refillq, u16 buf_id)
  *
  * Returns false if buffer could not be allocated, true otherwise.
  */
-static bool idpf_rx_post_buf_desc(struct idpf_queue *bufq, u16 buf_id)
+static bool idpf_rx_post_buf_desc(struct idpf_buf_queue *bufq, u16 buf_id)
 {
 	struct virtchnl2_splitq_rx_buf_desc *splitq_rx_desc = NULL;
 	u16 nta = bufq->next_to_alloc;
@@ -534,11 +618,10 @@ static bool idpf_rx_post_buf_desc(struct idpf_queue *bufq, u16 buf_id)
 	splitq_rx_desc = &bufq->split_buf[nta];
 	buf = &bufq->rx_buf.buf[buf_id];
 
-	if (bufq->rx_hsplit_en) {
+	if (idpf_queue_has(HSPLIT_EN, bufq))
 		splitq_rx_desc->hdr_addr =
 			cpu_to_le64(bufq->rx_buf.hdr_buf_pa +
 				    (u32)buf_id * IDPF_HDR_BUF_SIZE);
-	}
 
 	addr = idpf_alloc_page(bufq->pp, buf, bufq->rx_buf_size);
 	if (unlikely(addr == DMA_MAPPING_ERROR))
@@ -562,7 +645,8 @@ static bool idpf_rx_post_buf_desc(struct idpf_queue *bufq, u16 buf_id)
  *
  * Returns true if @working_set bufs were posted successfully, false otherwise.
  */
-static bool idpf_rx_post_init_bufs(struct idpf_queue *bufq, u16 working_set)
+static bool idpf_rx_post_init_bufs(struct idpf_buf_queue *bufq,
+				   u16 working_set)
 {
 	int i;
 
@@ -571,26 +655,28 @@ static bool idpf_rx_post_init_bufs(struct idpf_queue *bufq, u16 working_set)
 			return false;
 	}
 
-	idpf_rx_buf_hw_update(bufq,
-			      bufq->next_to_alloc & ~(bufq->rx_buf_stride - 1));
+	idpf_rx_buf_hw_update(bufq, ALIGN_DOWN(bufq->next_to_alloc,
+					       IDPF_RX_BUF_STRIDE));
 
 	return true;
 }
 
 /**
  * idpf_rx_create_page_pool - Create a page pool
- * @rxbufq: RX queue to create page pool for
+ * @napi: NAPI of the associated queue vector
+ * @count: queue descriptor count
  *
  * Returns &page_pool on success, casted -errno on failure
  */
-static struct page_pool *idpf_rx_create_page_pool(struct idpf_queue *rxbufq)
+static struct page_pool *idpf_rx_create_page_pool(struct napi_struct *napi,
+						  u32 count)
 {
 	struct page_pool_params pp = {
 		.flags		= PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV,
 		.order		= 0,
-		.pool_size	= rxbufq->desc_count,
+		.pool_size	= count,
 		.nid		= NUMA_NO_NODE,
-		.dev		= rxbufq->vport->netdev->dev.parent,
+		.dev		= napi->dev->dev.parent,
 		.max_len	= PAGE_SIZE,
 		.dma_dir	= DMA_FROM_DEVICE,
 		.offset		= 0,
@@ -599,15 +685,58 @@ static struct page_pool *idpf_rx_create_page_pool(struct idpf_queue *rxbufq)
 	return page_pool_create(&pp);
 }
 
+/**
+ * idpf_rx_buf_alloc_singleq - Allocate memory for all buffer resources
+ * @rxq: queue for which the buffers are allocated
+ *
+ * Return: 0 on success, -ENOMEM on failure.
+ */
+static int idpf_rx_buf_alloc_singleq(struct idpf_rx_queue *rxq)
+{
+	rxq->rx_buf = kcalloc(rxq->desc_count, sizeof(*rxq->rx_buf),
+			      GFP_KERNEL);
+	if (!rxq->rx_buf)
+		return -ENOMEM;
+
+	if (idpf_rx_singleq_buf_hw_alloc_all(rxq, rxq->desc_count - 1))
+		goto err;
+
+	return 0;
+
+err:
+	idpf_rx_buf_rel_all(rxq);
+
+	return -ENOMEM;
+}
+
+/**
+ * idpf_rx_bufs_init_singleq - Initialize page pool and allocate Rx bufs
+ * @rxq: buffer queue to create page pool for
+ *
+ * Return: 0 on success, -errno on failure.
+ */
+static int idpf_rx_bufs_init_singleq(struct idpf_rx_queue *rxq)
+{
+	struct page_pool *pool;
+
+	pool = idpf_rx_create_page_pool(&rxq->q_vector->napi, rxq->desc_count);
+	if (IS_ERR(pool))
+		return PTR_ERR(pool);
+
+	rxq->pp = pool;
+
+	return idpf_rx_buf_alloc_singleq(rxq);
+}
+
 /**
  * idpf_rx_buf_alloc_all - Allocate memory for all buffer resources
- * @rxbufq: queue for which the buffers are allocated; equivalent to
- * rxq when operating in singleq mode
+ * @rxbufq: queue for which the buffers are allocated
  *
  * Returns 0 on success, negative on failure
  */
-static int idpf_rx_buf_alloc_all(struct idpf_queue *rxbufq)
+static int idpf_rx_buf_alloc_all(struct idpf_buf_queue *rxbufq)
 {
+	struct device *dev = rxbufq->q_vector->vport->netdev->dev.parent;
 	int err = 0;
 
 	/* Allocate book keeping buffers */
@@ -618,48 +747,41 @@ static int idpf_rx_buf_alloc_all(struct idpf_queue *rxbufq)
 		goto rx_buf_alloc_all_out;
 	}
 
-	if (rxbufq->rx_hsplit_en) {
+	if (idpf_queue_has(HSPLIT_EN, rxbufq)) {
 		err = idpf_rx_hdr_buf_alloc_all(rxbufq);
 		if (err)
 			goto rx_buf_alloc_all_out;
 	}
 
 	/* Allocate buffers to be given to HW.	 */
-	if (idpf_is_queue_model_split(rxbufq->vport->rxq_model)) {
-		int working_set = IDPF_RX_BUFQ_WORKING_SET(rxbufq);
-
-		if (!idpf_rx_post_init_bufs(rxbufq, working_set))
-			err = -ENOMEM;
-	} else {
-		if (idpf_rx_singleq_buf_hw_alloc_all(rxbufq,
-						     rxbufq->desc_count - 1))
-			err = -ENOMEM;
-	}
+	if (!idpf_rx_post_init_bufs(rxbufq, IDPF_RX_BUFQ_WORKING_SET(rxbufq)))
+		err = -ENOMEM;
 
 rx_buf_alloc_all_out:
 	if (err)
-		idpf_rx_buf_rel_all(rxbufq);
+		idpf_rx_buf_rel_bufq(rxbufq, dev);
 
 	return err;
 }
 
 /**
  * idpf_rx_bufs_init - Initialize page pool, allocate rx bufs, and post to HW
- * @rxbufq: RX queue to create page pool for
+ * @bufq: buffer queue to create page pool for
  *
  * Returns 0 on success, negative on failure
  */
-static int idpf_rx_bufs_init(struct idpf_queue *rxbufq)
+static int idpf_rx_bufs_init(struct idpf_buf_queue *bufq)
 {
 	struct page_pool *pool;
 
-	pool = idpf_rx_create_page_pool(rxbufq);
+	pool = idpf_rx_create_page_pool(&bufq->q_vector->napi,
+					bufq->desc_count);
 	if (IS_ERR(pool))
 		return PTR_ERR(pool);
 
-	rxbufq->pp = pool;
+	bufq->pp = pool;
 
-	return idpf_rx_buf_alloc_all(rxbufq);
+	return idpf_rx_buf_alloc_all(bufq);
 }
 
 /**
@@ -671,7 +793,6 @@ static int idpf_rx_bufs_init(struct idpf_queue *rxbufq)
 int idpf_rx_bufs_init_all(struct idpf_vport *vport)
 {
 	struct idpf_rxq_group *rx_qgrp;
-	struct idpf_queue *q;
 	int i, j, err;
 
 	for (i = 0; i < vport->num_rxq_grp; i++) {
@@ -682,8 +803,10 @@ int idpf_rx_bufs_init_all(struct idpf_vport *vport)
 			int num_rxq = rx_qgrp->singleq.num_rxq;
 
 			for (j = 0; j < num_rxq; j++) {
+				struct idpf_rx_queue *q;
+
 				q = rx_qgrp->singleq.rxqs[j];
-				err = idpf_rx_bufs_init(q);
+				err = idpf_rx_bufs_init_singleq(q);
 				if (err)
 					return err;
 			}
@@ -693,6 +816,8 @@ int idpf_rx_bufs_init_all(struct idpf_vport *vport)
 
 		/* Otherwise, allocate bufs for the buffer queues */
 		for (j = 0; j < vport->num_bufqs_per_qgrp; j++) {
+			struct idpf_buf_queue *q;
+
 			q = &rx_qgrp->splitq.bufq_sets[j].bufq;
 			err = idpf_rx_bufs_init(q);
 			if (err)
@@ -705,22 +830,17 @@ int idpf_rx_bufs_init_all(struct idpf_vport *vport)
 
 /**
  * idpf_rx_desc_alloc - Allocate queue Rx resources
+ * @vport: vport to allocate resources for
  * @rxq: Rx queue for which the resources are setup
- * @bufq: buffer or completion queue
- * @q_model: single or split queue model
  *
  * Returns 0 on success, negative on failure
  */
-static int idpf_rx_desc_alloc(struct idpf_queue *rxq, bool bufq, s32 q_model)
+static int idpf_rx_desc_alloc(const struct idpf_vport *vport,
+			      struct idpf_rx_queue *rxq)
 {
-	struct device *dev = rxq->dev;
+	struct device *dev = &vport->adapter->pdev->dev;
 
-	if (bufq)
-		rxq->size = rxq->desc_count *
-			sizeof(struct virtchnl2_splitq_rx_buf_desc);
-	else
-		rxq->size = rxq->desc_count *
-			sizeof(union virtchnl2_rx_desc);
+	rxq->size = rxq->desc_count * sizeof(union virtchnl2_rx_desc);
 
 	/* Allocate descriptors and also round up to nearest 4K */
 	rxq->size = ALIGN(rxq->size, 4096);
@@ -735,7 +855,35 @@ static int idpf_rx_desc_alloc(struct idpf_queue *rxq, bool bufq, s32 q_model)
 	rxq->next_to_alloc = 0;
 	rxq->next_to_clean = 0;
 	rxq->next_to_use = 0;
-	set_bit(__IDPF_Q_GEN_CHK, rxq->flags);
+	idpf_queue_set(GEN_CHK, rxq);
+
+	return 0;
+}
+
+/**
+ * idpf_bufq_desc_alloc - Allocate buffer queue descriptor ring
+ * @vport: vport to allocate resources for
+ * @bufq: buffer queue for which the resources are set up
+ *
+ * Return: 0 on success, -ENOMEM on failure.
+ */
+static int idpf_bufq_desc_alloc(const struct idpf_vport *vport,
+				struct idpf_buf_queue *bufq)
+{
+	struct device *dev = &vport->adapter->pdev->dev;
+
+	bufq->size = array_size(bufq->desc_count, sizeof(*bufq->split_buf));
+
+	bufq->split_buf = dma_alloc_coherent(dev, bufq->size, &bufq->dma,
+					     GFP_KERNEL);
+	if (!bufq->split_buf)
+		return -ENOMEM;
+
+	bufq->next_to_alloc = 0;
+	bufq->next_to_clean = 0;
+	bufq->next_to_use = 0;
+
+	idpf_queue_set(GEN_CHK, bufq);
 
 	return 0;
 }
@@ -748,9 +896,7 @@ static int idpf_rx_desc_alloc(struct idpf_queue *rxq, bool bufq, s32 q_model)
  */
 static int idpf_rx_desc_alloc_all(struct idpf_vport *vport)
 {
-	struct device *dev = &vport->adapter->pdev->dev;
 	struct idpf_rxq_group *rx_qgrp;
-	struct idpf_queue *q;
 	int i, j, err;
 	u16 num_rxq;
 
@@ -762,13 +908,17 @@ static int idpf_rx_desc_alloc_all(struct idpf_vport *vport)
 			num_rxq = rx_qgrp->singleq.num_rxq;
 
 		for (j = 0; j < num_rxq; j++) {
+			struct idpf_rx_queue *q;
+
 			if (idpf_is_queue_model_split(vport->rxq_model))
 				q = &rx_qgrp->splitq.rxq_sets[j]->rxq;
 			else
 				q = rx_qgrp->singleq.rxqs[j];
-			err = idpf_rx_desc_alloc(q, false, vport->rxq_model);
+
+			err = idpf_rx_desc_alloc(vport, q);
 			if (err) {
-				dev_err(dev, "Memory allocation for Rx Queue %u failed\n",
+				pci_err(vport->adapter->pdev,
+					"Memory allocation for Rx Queue %u failed\n",
 					i);
 				goto err_out;
 			}
@@ -778,10 +928,14 @@ static int idpf_rx_desc_alloc_all(struct idpf_vport *vport)
 			continue;
 
 		for (j = 0; j < vport->num_bufqs_per_qgrp; j++) {
+			struct idpf_buf_queue *q;
+
 			q = &rx_qgrp->splitq.bufq_sets[j].bufq;
-			err = idpf_rx_desc_alloc(q, true, vport->rxq_model);
+
+			err = idpf_bufq_desc_alloc(vport, q);
 			if (err) {
-				dev_err(dev, "Memory allocation for Rx Buffer Queue %u failed\n",
+				pci_err(vport->adapter->pdev,
+					"Memory allocation for Rx Buffer Queue %u failed\n",
 					i);
 				goto err_out;
 			}
@@ -802,11 +956,16 @@ static int idpf_rx_desc_alloc_all(struct idpf_vport *vport)
  */
 static void idpf_txq_group_rel(struct idpf_vport *vport)
 {
+	bool split, flow_sch_en;
 	int i, j;
 
 	if (!vport->txq_grps)
 		return;
 
+	split = idpf_is_queue_model_split(vport->txq_model);
+	flow_sch_en = !idpf_is_cap_ena(vport->adapter, IDPF_OTHER_CAPS,
+				       VIRTCHNL2_CAP_SPLITQ_QSCHED);
+
 	for (i = 0; i < vport->num_txq_grp; i++) {
 		struct idpf_txq_group *txq_grp = &vport->txq_grps[i];
 
@@ -814,8 +973,15 @@ static void idpf_txq_group_rel(struct idpf_vport *vport)
 			kfree(txq_grp->txqs[j]);
 			txq_grp->txqs[j] = NULL;
 		}
+
+		if (!split)
+			continue;
+
 		kfree(txq_grp->complq);
 		txq_grp->complq = NULL;
+
+		if (flow_sch_en)
+			kfree(txq_grp->stashes);
 	}
 	kfree(vport->txq_grps);
 	vport->txq_grps = NULL;
@@ -919,7 +1085,7 @@ static int idpf_vport_init_fast_path_txqs(struct idpf_vport *vport)
 {
 	int i, j, k = 0;
 
-	vport->txqs = kcalloc(vport->num_txq, sizeof(struct idpf_queue *),
+	vport->txqs = kcalloc(vport->num_txq, sizeof(*vport->txqs),
 			      GFP_KERNEL);
 
 	if (!vport->txqs)
@@ -1137,7 +1303,8 @@ static void idpf_vport_calc_numq_per_grp(struct idpf_vport *vport,
  * @q: rx queue for which descids are set
  *
  */
-static void idpf_rxq_set_descids(struct idpf_vport *vport, struct idpf_queue *q)
+static void idpf_rxq_set_descids(const struct idpf_vport *vport,
+				 struct idpf_rx_queue *q)
 {
 	if (vport->rxq_model == VIRTCHNL2_QUEUE_MODEL_SPLIT) {
 		q->rxdids = VIRTCHNL2_RXDID_2_FLEX_SPLITQ_M;
@@ -1158,20 +1325,22 @@ static void idpf_rxq_set_descids(struct idpf_vport *vport, struct idpf_queue *q)
  */
 static int idpf_txq_group_alloc(struct idpf_vport *vport, u16 num_txq)
 {
-	bool flow_sch_en;
-	int err, i;
+	bool split, flow_sch_en;
+	int i;
 
 	vport->txq_grps = kcalloc(vport->num_txq_grp,
 				  sizeof(*vport->txq_grps), GFP_KERNEL);
 	if (!vport->txq_grps)
 		return -ENOMEM;
 
+	split = idpf_is_queue_model_split(vport->txq_model);
 	flow_sch_en = !idpf_is_cap_ena(vport->adapter, IDPF_OTHER_CAPS,
 				       VIRTCHNL2_CAP_SPLITQ_QSCHED);
 
 	for (i = 0; i < vport->num_txq_grp; i++) {
 		struct idpf_txq_group *tx_qgrp = &vport->txq_grps[i];
 		struct idpf_adapter *adapter = vport->adapter;
+		struct idpf_txq_stash *stashes;
 		int j;
 
 		tx_qgrp->vport = vport;
@@ -1180,45 +1349,62 @@ static int idpf_txq_group_alloc(struct idpf_vport *vport, u16 num_txq)
 		for (j = 0; j < tx_qgrp->num_txq; j++) {
 			tx_qgrp->txqs[j] = kzalloc(sizeof(*tx_qgrp->txqs[j]),
 						   GFP_KERNEL);
-			if (!tx_qgrp->txqs[j]) {
-				err = -ENOMEM;
+			if (!tx_qgrp->txqs[j])
 				goto err_alloc;
-			}
+		}
+
+		if (split && flow_sch_en) {
+			stashes = kcalloc(num_txq, sizeof(*stashes),
+					  GFP_KERNEL);
+			if (!stashes)
+				goto err_alloc;
+
+			tx_qgrp->stashes = stashes;
 		}
 
 		for (j = 0; j < tx_qgrp->num_txq; j++) {
-			struct idpf_queue *q = tx_qgrp->txqs[j];
+			struct idpf_tx_queue *q = tx_qgrp->txqs[j];
 
 			q->dev = &adapter->pdev->dev;
 			q->desc_count = vport->txq_desc_count;
 			q->tx_max_bufs = idpf_get_max_tx_bufs(adapter);
 			q->tx_min_pkt_len = idpf_get_min_tx_pkt_len(adapter);
-			q->vport = vport;
+			q->netdev = vport->netdev;
 			q->txq_grp = tx_qgrp;
-			hash_init(q->sched_buf_hash);
 
-			if (flow_sch_en)
-				set_bit(__IDPF_Q_FLOW_SCH_EN, q->flags);
+			if (!split) {
+				q->clean_budget = vport->compln_clean_budget;
+				idpf_queue_assign(CRC_EN, q,
+						  vport->crc_enable);
+			}
+
+			if (!flow_sch_en)
+				continue;
+
+			if (split) {
+				q->stash = &stashes[j];
+				hash_init(q->stash->sched_buf_hash);
+			}
+
+			idpf_queue_set(FLOW_SCH_EN, q);
 		}
 
-		if (!idpf_is_queue_model_split(vport->txq_model))
+		if (!split)
 			continue;
 
 		tx_qgrp->complq = kcalloc(IDPF_COMPLQ_PER_GROUP,
 					  sizeof(*tx_qgrp->complq),
 					  GFP_KERNEL);
-		if (!tx_qgrp->complq) {
-			err = -ENOMEM;
+		if (!tx_qgrp->complq)
 			goto err_alloc;
-		}
 
-		tx_qgrp->complq->dev = &adapter->pdev->dev;
 		tx_qgrp->complq->desc_count = vport->complq_desc_count;
-		tx_qgrp->complq->vport = vport;
 		tx_qgrp->complq->txq_grp = tx_qgrp;
+		tx_qgrp->complq->netdev = vport->netdev;
+		tx_qgrp->complq->clean_budget = vport->compln_clean_budget;
 
 		if (flow_sch_en)
-			__set_bit(__IDPF_Q_FLOW_SCH_EN, tx_qgrp->complq->flags);
+			idpf_queue_set(FLOW_SCH_EN, tx_qgrp->complq);
 	}
 
 	return 0;
@@ -1226,7 +1412,7 @@ static int idpf_txq_group_alloc(struct idpf_vport *vport, u16 num_txq)
 err_alloc:
 	idpf_txq_group_rel(vport);
 
-	return err;
+	return -ENOMEM;
 }
 
 /**
@@ -1238,8 +1424,6 @@ static int idpf_txq_group_alloc(struct idpf_vport *vport, u16 num_txq)
  */
 static int idpf_rxq_group_alloc(struct idpf_vport *vport, u16 num_rxq)
 {
-	struct idpf_adapter *adapter = vport->adapter;
-	struct idpf_queue *q;
 	int i, k, err = 0;
 	bool hs;
 
@@ -1292,21 +1476,15 @@ static int idpf_rxq_group_alloc(struct idpf_vport *vport, u16 num_rxq)
 			struct idpf_bufq_set *bufq_set =
 				&rx_qgrp->splitq.bufq_sets[j];
 			int swq_size = sizeof(struct idpf_sw_queue);
+			struct idpf_buf_queue *q;
 
 			q = &rx_qgrp->splitq.bufq_sets[j].bufq;
-			q->dev = &adapter->pdev->dev;
 			q->desc_count = vport->bufq_desc_count[j];
-			q->vport = vport;
-			q->rxq_grp = rx_qgrp;
-			q->idx = j;
 			q->rx_buf_size = vport->bufq_size[j];
 			q->rx_buffer_low_watermark = IDPF_LOW_WATERMARK;
-			q->rx_buf_stride = IDPF_RX_BUF_STRIDE;
 
-			if (hs) {
-				q->rx_hsplit_en = true;
-				q->rx_hbuf_size = IDPF_HDR_BUF_SIZE;
-			}
+			idpf_queue_assign(HSPLIT_EN, q, hs);
+			q->rx_hbuf_size = hs ? IDPF_HDR_BUF_SIZE : 0;
 
 			bufq_set->num_refillqs = num_rxq;
 			bufq_set->refillqs = kcalloc(num_rxq, swq_size,
@@ -1319,13 +1497,12 @@ static int idpf_rxq_group_alloc(struct idpf_vport *vport, u16 num_rxq)
 				struct idpf_sw_queue *refillq =
 					&bufq_set->refillqs[k];
 
-				refillq->dev = &vport->adapter->pdev->dev;
 				refillq->desc_count =
 					vport->bufq_desc_count[j];
-				set_bit(__IDPF_Q_GEN_CHK, refillq->flags);
-				set_bit(__IDPF_RFLQ_GEN_CHK, refillq->flags);
+				idpf_queue_set(GEN_CHK, refillq);
+				idpf_queue_set(RFL_GEN_CHK, refillq);
 				refillq->ring = kcalloc(refillq->desc_count,
-							sizeof(u16),
+							sizeof(*refillq->ring),
 							GFP_KERNEL);
 				if (!refillq->ring) {
 					err = -ENOMEM;
@@ -1336,27 +1513,27 @@ static int idpf_rxq_group_alloc(struct idpf_vport *vport, u16 num_rxq)
 
 skip_splitq_rx_init:
 		for (j = 0; j < num_rxq; j++) {
+			struct idpf_rx_queue *q;
+
 			if (!idpf_is_queue_model_split(vport->rxq_model)) {
 				q = rx_qgrp->singleq.rxqs[j];
 				goto setup_rxq;
 			}
 			q = &rx_qgrp->splitq.rxq_sets[j]->rxq;
-			rx_qgrp->splitq.rxq_sets[j]->refillq0 =
+			rx_qgrp->splitq.rxq_sets[j]->refillq[0] =
 			      &rx_qgrp->splitq.bufq_sets[0].refillqs[j];
 			if (vport->num_bufqs_per_qgrp > IDPF_SINGLE_BUFQ_PER_RXQ_GRP)
-				rx_qgrp->splitq.rxq_sets[j]->refillq1 =
+				rx_qgrp->splitq.rxq_sets[j]->refillq[1] =
 				      &rx_qgrp->splitq.bufq_sets[1].refillqs[j];
 
-			if (hs) {
-				q->rx_hsplit_en = true;
-				q->rx_hbuf_size = IDPF_HDR_BUF_SIZE;
-			}
+			idpf_queue_assign(HSPLIT_EN, q, hs);
+			q->rx_hbuf_size = hs ? IDPF_HDR_BUF_SIZE : 0;
 
 setup_rxq:
-			q->dev = &adapter->pdev->dev;
 			q->desc_count = vport->rxq_desc_count;
-			q->vport = vport;
-			q->rxq_grp = rx_qgrp;
+			q->rx_ptype_lkup = vport->rx_ptype_lkup;
+			q->netdev = vport->netdev;
+			q->bufq_sets = rx_qgrp->splitq.bufq_sets;
 			q->idx = (i * num_rxq) + j;
 			/* In splitq mode, RXQ buffer size should be
 			 * set to that of the first buffer queue
@@ -1445,12 +1622,13 @@ int idpf_vport_queues_alloc(struct idpf_vport *vport)
  * idpf_tx_handle_sw_marker - Handle queue marker packet
  * @tx_q: tx queue to handle software marker
  */
-static void idpf_tx_handle_sw_marker(struct idpf_queue *tx_q)
+static void idpf_tx_handle_sw_marker(struct idpf_tx_queue *tx_q)
 {
-	struct idpf_vport *vport = tx_q->vport;
+	struct idpf_netdev_priv *priv = netdev_priv(tx_q->netdev);
+	struct idpf_vport *vport = priv->vport;
 	int i;
 
-	clear_bit(__IDPF_Q_SW_MARKER, tx_q->flags);
+	idpf_queue_clear(SW_MARKER, tx_q);
 	/* Hardware must write marker packets to all queues associated with
 	 * completion queues. So check if all queues received marker packets
 	 */
@@ -1458,7 +1636,7 @@ static void idpf_tx_handle_sw_marker(struct idpf_queue *tx_q)
 		/* If we're still waiting on any other TXQ marker completions,
 		 * just return now since we cannot wake up the marker_wq yet.
 		 */
-		if (test_bit(__IDPF_Q_SW_MARKER, vport->txqs[i]->flags))
+		if (idpf_queue_has(SW_MARKER, vport->txqs[i]))
 			return;
 
 	/* Drain complete */
@@ -1474,7 +1652,7 @@ static void idpf_tx_handle_sw_marker(struct idpf_queue *tx_q)
  * @cleaned: pointer to stats struct to track cleaned packets/bytes
  * @napi_budget: Used to determine if we are in netpoll
  */
-static void idpf_tx_splitq_clean_hdr(struct idpf_queue *tx_q,
+static void idpf_tx_splitq_clean_hdr(struct idpf_tx_queue *tx_q,
 				     struct idpf_tx_buf *tx_buf,
 				     struct idpf_cleaned_stats *cleaned,
 				     int napi_budget)
@@ -1505,7 +1683,8 @@ static void idpf_tx_splitq_clean_hdr(struct idpf_queue *tx_q,
  * @cleaned: pointer to stats struct to track cleaned packets/bytes
  * @budget: Used to determine if we are in netpoll
  */
-static void idpf_tx_clean_stashed_bufs(struct idpf_queue *txq, u16 compl_tag,
+static void idpf_tx_clean_stashed_bufs(struct idpf_tx_queue *txq,
+				       u16 compl_tag,
 				       struct idpf_cleaned_stats *cleaned,
 				       int budget)
 {
@@ -1513,7 +1692,7 @@ static void idpf_tx_clean_stashed_bufs(struct idpf_queue *txq, u16 compl_tag,
 	struct hlist_node *tmp_buf;
 
 	/* Buffer completion */
-	hash_for_each_possible_safe(txq->sched_buf_hash, stash, tmp_buf,
+	hash_for_each_possible_safe(txq->stash->sched_buf_hash, stash, tmp_buf,
 				    hlist, compl_tag) {
 		if (unlikely(stash->buf.compl_tag != (int)compl_tag))
 			continue;
@@ -1530,7 +1709,7 @@ static void idpf_tx_clean_stashed_bufs(struct idpf_queue *txq, u16 compl_tag,
 		}
 
 		/* Push shadow buf back onto stack */
-		idpf_buf_lifo_push(&txq->buf_stack, stash);
+		idpf_buf_lifo_push(&txq->stash->buf_stack, stash);
 
 		hash_del(&stash->hlist);
 	}
@@ -1542,7 +1721,7 @@ static void idpf_tx_clean_stashed_bufs(struct idpf_queue *txq, u16 compl_tag,
  * @txq: Tx queue to clean
  * @tx_buf: buffer to store
  */
-static int idpf_stash_flow_sch_buffers(struct idpf_queue *txq,
+static int idpf_stash_flow_sch_buffers(struct idpf_tx_queue *txq,
 				       struct idpf_tx_buf *tx_buf)
 {
 	struct idpf_tx_stash *stash;
@@ -1551,10 +1730,10 @@ static int idpf_stash_flow_sch_buffers(struct idpf_queue *txq,
 		     !dma_unmap_len(tx_buf, len)))
 		return 0;
 
-	stash = idpf_buf_lifo_pop(&txq->buf_stack);
+	stash = idpf_buf_lifo_pop(&txq->stash->buf_stack);
 	if (unlikely(!stash)) {
 		net_err_ratelimited("%s: No out-of-order TX buffers left!\n",
-				    txq->vport->netdev->name);
+				    netdev_name(txq->netdev));
 
 		return -ENOMEM;
 	}
@@ -1568,7 +1747,8 @@ static int idpf_stash_flow_sch_buffers(struct idpf_queue *txq,
 	stash->buf.compl_tag = tx_buf->compl_tag;
 
 	/* Add buffer to buf_hash table to be freed later */
-	hash_add(txq->sched_buf_hash, &stash->hlist, stash->buf.compl_tag);
+	hash_add(txq->stash->sched_buf_hash, &stash->hlist,
+		 stash->buf.compl_tag);
 
 	memset(tx_buf, 0, sizeof(struct idpf_tx_buf));
 
@@ -1607,7 +1787,7 @@ do {								\
  * and the buffers will be cleaned separately. The stats are not updated from
  * this function when using flow-based scheduling.
  */
-static void idpf_tx_splitq_clean(struct idpf_queue *tx_q, u16 end,
+static void idpf_tx_splitq_clean(struct idpf_tx_queue *tx_q, u16 end,
 				 int napi_budget,
 				 struct idpf_cleaned_stats *cleaned,
 				 bool descs_only)
@@ -1703,7 +1883,7 @@ do {							\
  * stashed. Returns the byte/segment count for the cleaned packet associated
  * this completion tag.
  */
-static bool idpf_tx_clean_buf_ring(struct idpf_queue *txq, u16 compl_tag,
+static bool idpf_tx_clean_buf_ring(struct idpf_tx_queue *txq, u16 compl_tag,
 				   struct idpf_cleaned_stats *cleaned,
 				   int budget)
 {
@@ -1772,14 +1952,14 @@ static bool idpf_tx_clean_buf_ring(struct idpf_queue *txq, u16 compl_tag,
  *
  * Returns bytes/packets cleaned
  */
-static void idpf_tx_handle_rs_completion(struct idpf_queue *txq,
+static void idpf_tx_handle_rs_completion(struct idpf_tx_queue *txq,
 					 struct idpf_splitq_tx_compl_desc *desc,
 					 struct idpf_cleaned_stats *cleaned,
 					 int budget)
 {
 	u16 compl_tag;
 
-	if (!test_bit(__IDPF_Q_FLOW_SCH_EN, txq->flags)) {
+	if (!idpf_queue_has(FLOW_SCH_EN, txq)) {
 		u16 head = le16_to_cpu(desc->q_head_compl_tag.q_head);
 
 		return idpf_tx_splitq_clean(txq, head, budget, cleaned, false);
@@ -1802,24 +1982,23 @@ static void idpf_tx_handle_rs_completion(struct idpf_queue *txq,
  *
  * Returns true if there's any budget left (e.g. the clean is finished)
  */
-static bool idpf_tx_clean_complq(struct idpf_queue *complq, int budget,
+static bool idpf_tx_clean_complq(struct idpf_compl_queue *complq, int budget,
 				 int *cleaned)
 {
 	struct idpf_splitq_tx_compl_desc *tx_desc;
-	struct idpf_vport *vport = complq->vport;
 	s16 ntc = complq->next_to_clean;
 	struct idpf_netdev_priv *np;
 	unsigned int complq_budget;
 	bool complq_ok = true;
 	int i;
 
-	complq_budget = vport->compln_clean_budget;
+	complq_budget = complq->clean_budget;
 	tx_desc = &complq->comp[ntc];
 	ntc -= complq->desc_count;
 
 	do {
 		struct idpf_cleaned_stats cleaned_stats = { };
-		struct idpf_queue *tx_q;
+		struct idpf_tx_queue *tx_q;
 		int rel_tx_qid;
 		u16 hw_head;
 		u8 ctype;	/* completion type */
@@ -1828,7 +2007,7 @@ static bool idpf_tx_clean_complq(struct idpf_queue *complq, int budget,
 		/* if the descriptor isn't done, no work yet to do */
 		gen = le16_get_bits(tx_desc->qid_comptype_gen,
 				    IDPF_TXD_COMPLQ_GEN_M);
-		if (test_bit(__IDPF_Q_GEN_CHK, complq->flags) != gen)
+		if (idpf_queue_has(GEN_CHK, complq) != gen)
 			break;
 
 		/* Find necessary info of TX queue to clean buffers */
@@ -1836,8 +2015,7 @@ static bool idpf_tx_clean_complq(struct idpf_queue *complq, int budget,
 					   IDPF_TXD_COMPLQ_QID_M);
 		if (rel_tx_qid >= complq->txq_grp->num_txq ||
 		    !complq->txq_grp->txqs[rel_tx_qid]) {
-			dev_err(&complq->vport->adapter->pdev->dev,
-				"TxQ not found\n");
+			netdev_err(complq->netdev, "TxQ not found\n");
 			goto fetch_next_desc;
 		}
 		tx_q = complq->txq_grp->txqs[rel_tx_qid];
@@ -1860,15 +2038,14 @@ static bool idpf_tx_clean_complq(struct idpf_queue *complq, int budget,
 			idpf_tx_handle_sw_marker(tx_q);
 			break;
 		default:
-			dev_err(&tx_q->vport->adapter->pdev->dev,
-				"Unknown TX completion type: %d\n",
-				ctype);
+			netdev_err(tx_q->netdev,
+				   "Unknown TX completion type: %d\n", ctype);
 			goto fetch_next_desc;
 		}
 
 		u64_stats_update_begin(&tx_q->stats_sync);
-		u64_stats_add(&tx_q->q_stats.tx.packets, cleaned_stats.packets);
-		u64_stats_add(&tx_q->q_stats.tx.bytes, cleaned_stats.bytes);
+		u64_stats_add(&tx_q->q_stats.packets, cleaned_stats.packets);
+		u64_stats_add(&tx_q->q_stats.bytes, cleaned_stats.bytes);
 		tx_q->cleaned_pkts += cleaned_stats.packets;
 		tx_q->cleaned_bytes += cleaned_stats.bytes;
 		complq->num_completions++;
@@ -1880,7 +2057,7 @@ static bool idpf_tx_clean_complq(struct idpf_queue *complq, int budget,
 		if (unlikely(!ntc)) {
 			ntc -= complq->desc_count;
 			tx_desc = &complq->comp[0];
-			change_bit(__IDPF_Q_GEN_CHK, complq->flags);
+			idpf_queue_change(GEN_CHK, complq);
 		}
 
 		prefetch(tx_desc);
@@ -1896,9 +2073,9 @@ static bool idpf_tx_clean_complq(struct idpf_queue *complq, int budget,
 		     IDPF_TX_COMPLQ_OVERFLOW_THRESH(complq)))
 		complq_ok = false;
 
-	np = netdev_priv(complq->vport->netdev);
+	np = netdev_priv(complq->netdev);
 	for (i = 0; i < complq->txq_grp->num_txq; ++i) {
-		struct idpf_queue *tx_q = complq->txq_grp->txqs[i];
+		struct idpf_tx_queue *tx_q = complq->txq_grp->txqs[i];
 		struct netdev_queue *nq;
 		bool dont_wake;
 
@@ -1909,11 +2086,11 @@ static bool idpf_tx_clean_complq(struct idpf_queue *complq, int budget,
 		*cleaned += tx_q->cleaned_pkts;
 
 		/* Update BQL */
-		nq = netdev_get_tx_queue(tx_q->vport->netdev, tx_q->idx);
+		nq = netdev_get_tx_queue(tx_q->netdev, tx_q->idx);
 
 		dont_wake = !complq_ok || IDPF_TX_BUF_RSV_LOW(tx_q) ||
 			    np->state != __IDPF_VPORT_UP ||
-			    !netif_carrier_ok(tx_q->vport->netdev);
+			    !netif_carrier_ok(tx_q->netdev);
 		/* Check if the TXQ needs to and can be restarted */
 		__netif_txq_completed_wake(nq, tx_q->cleaned_pkts, tx_q->cleaned_bytes,
 					   IDPF_DESC_UNUSED(tx_q), IDPF_TX_WAKE_THRESH,
@@ -1976,7 +2153,7 @@ void idpf_tx_splitq_build_flow_desc(union idpf_tx_flex_desc *desc,
  *
  * Returns 0 if stop is not needed
  */
-int idpf_tx_maybe_stop_common(struct idpf_queue *tx_q, unsigned int size)
+int idpf_tx_maybe_stop_common(struct idpf_tx_queue *tx_q, unsigned int size)
 {
 	struct netdev_queue *nq;
 
@@ -1984,10 +2161,10 @@ int idpf_tx_maybe_stop_common(struct idpf_queue *tx_q, unsigned int size)
 		return 0;
 
 	u64_stats_update_begin(&tx_q->stats_sync);
-	u64_stats_inc(&tx_q->q_stats.tx.q_busy);
+	u64_stats_inc(&tx_q->q_stats.q_busy);
 	u64_stats_update_end(&tx_q->stats_sync);
 
-	nq = netdev_get_tx_queue(tx_q->vport->netdev, tx_q->idx);
+	nq = netdev_get_tx_queue(tx_q->netdev, tx_q->idx);
 
 	return netif_txq_maybe_stop(nq, IDPF_DESC_UNUSED(tx_q), size, size);
 }
@@ -1999,7 +2176,7 @@ int idpf_tx_maybe_stop_common(struct idpf_queue *tx_q, unsigned int size)
  *
  * Returns 0 if stop is not needed
  */
-static int idpf_tx_maybe_stop_splitq(struct idpf_queue *tx_q,
+static int idpf_tx_maybe_stop_splitq(struct idpf_tx_queue *tx_q,
 				     unsigned int descs_needed)
 {
 	if (idpf_tx_maybe_stop_common(tx_q, descs_needed))
@@ -2023,9 +2200,9 @@ static int idpf_tx_maybe_stop_splitq(struct idpf_queue *tx_q,
 
 splitq_stop:
 	u64_stats_update_begin(&tx_q->stats_sync);
-	u64_stats_inc(&tx_q->q_stats.tx.q_busy);
+	u64_stats_inc(&tx_q->q_stats.q_busy);
 	u64_stats_update_end(&tx_q->stats_sync);
-	netif_stop_subqueue(tx_q->vport->netdev, tx_q->idx);
+	netif_stop_subqueue(tx_q->netdev, tx_q->idx);
 
 	return -EBUSY;
 }
@@ -2040,12 +2217,12 @@ static int idpf_tx_maybe_stop_splitq(struct idpf_queue *tx_q,
  * to do a register write to update our queue status. We know this can only
  * mean tail here as HW should be owning head for TX.
  */
-void idpf_tx_buf_hw_update(struct idpf_queue *tx_q, u32 val,
+void idpf_tx_buf_hw_update(struct idpf_tx_queue *tx_q, u32 val,
 			   bool xmit_more)
 {
 	struct netdev_queue *nq;
 
-	nq = netdev_get_tx_queue(tx_q->vport->netdev, tx_q->idx);
+	nq = netdev_get_tx_queue(tx_q->netdev, tx_q->idx);
 	tx_q->next_to_use = val;
 
 	idpf_tx_maybe_stop_common(tx_q, IDPF_TX_DESC_NEEDED);
@@ -2069,7 +2246,7 @@ void idpf_tx_buf_hw_update(struct idpf_queue *tx_q, u32 val,
  *
  * Returns number of data descriptors needed for this skb.
  */
-unsigned int idpf_tx_desc_count_required(struct idpf_queue *txq,
+unsigned int idpf_tx_desc_count_required(struct idpf_tx_queue *txq,
 					 struct sk_buff *skb)
 {
 	const struct skb_shared_info *shinfo;
@@ -2102,7 +2279,7 @@ unsigned int idpf_tx_desc_count_required(struct idpf_queue *txq,
 
 		count = idpf_size_to_txd_count(skb->len);
 		u64_stats_update_begin(&txq->stats_sync);
-		u64_stats_inc(&txq->q_stats.tx.linearize);
+		u64_stats_inc(&txq->q_stats.linearize);
 		u64_stats_update_end(&txq->stats_sync);
 	}
 
@@ -2116,11 +2293,11 @@ unsigned int idpf_tx_desc_count_required(struct idpf_queue *txq,
  * @first: original first buffer info buffer for packet
  * @idx: starting point on ring to unwind
  */
-void idpf_tx_dma_map_error(struct idpf_queue *txq, struct sk_buff *skb,
+void idpf_tx_dma_map_error(struct idpf_tx_queue *txq, struct sk_buff *skb,
 			   struct idpf_tx_buf *first, u16 idx)
 {
 	u64_stats_update_begin(&txq->stats_sync);
-	u64_stats_inc(&txq->q_stats.tx.dma_map_errs);
+	u64_stats_inc(&txq->q_stats.dma_map_errs);
 	u64_stats_update_end(&txq->stats_sync);
 
 	/* clear dma mappings for failed tx_buf map */
@@ -2159,7 +2336,7 @@ void idpf_tx_dma_map_error(struct idpf_queue *txq, struct sk_buff *skb,
  * @txq: the tx ring to wrap
  * @ntu: ring index to bump
  */
-static unsigned int idpf_tx_splitq_bump_ntu(struct idpf_queue *txq, u16 ntu)
+static unsigned int idpf_tx_splitq_bump_ntu(struct idpf_tx_queue *txq, u16 ntu)
 {
 	ntu++;
 
@@ -2181,7 +2358,7 @@ static unsigned int idpf_tx_splitq_bump_ntu(struct idpf_queue *txq, u16 ntu)
  * and gets a physical address for each memory location and programs
  * it and the length into the transmit flex descriptor.
  */
-static void idpf_tx_splitq_map(struct idpf_queue *tx_q,
+static void idpf_tx_splitq_map(struct idpf_tx_queue *tx_q,
 			       struct idpf_tx_splitq_params *params,
 			       struct idpf_tx_buf *first)
 {
@@ -2348,7 +2525,7 @@ static void idpf_tx_splitq_map(struct idpf_queue *tx_q,
 	tx_q->txq_grp->num_completions_pending++;
 
 	/* record bytecount for BQL */
-	nq = netdev_get_tx_queue(tx_q->vport->netdev, tx_q->idx);
+	nq = netdev_get_tx_queue(tx_q->netdev, tx_q->idx);
 	netdev_tx_sent_queue(nq, first->bytecount);
 
 	idpf_tx_buf_hw_update(tx_q, i, netdev_xmit_more());
@@ -2544,7 +2721,7 @@ bool idpf_chk_linearize(struct sk_buff *skb, unsigned int max_bufs,
  * ring entry to reflect that this index is a context descriptor
  */
 static struct idpf_flex_tx_ctx_desc *
-idpf_tx_splitq_get_ctx_desc(struct idpf_queue *txq)
+idpf_tx_splitq_get_ctx_desc(struct idpf_tx_queue *txq)
 {
 	struct idpf_flex_tx_ctx_desc *desc;
 	int i = txq->next_to_use;
@@ -2564,10 +2741,10 @@ idpf_tx_splitq_get_ctx_desc(struct idpf_queue *txq)
  * @tx_q: queue to send buffer on
  * @skb: pointer to skb
  */
-netdev_tx_t idpf_tx_drop_skb(struct idpf_queue *tx_q, struct sk_buff *skb)
+netdev_tx_t idpf_tx_drop_skb(struct idpf_tx_queue *tx_q, struct sk_buff *skb)
 {
 	u64_stats_update_begin(&tx_q->stats_sync);
-	u64_stats_inc(&tx_q->q_stats.tx.skb_drops);
+	u64_stats_inc(&tx_q->q_stats.skb_drops);
 	u64_stats_update_end(&tx_q->stats_sync);
 
 	idpf_tx_buf_hw_update(tx_q, tx_q->next_to_use, false);
@@ -2585,7 +2762,7 @@ netdev_tx_t idpf_tx_drop_skb(struct idpf_queue *tx_q, struct sk_buff *skb)
  * Returns NETDEV_TX_OK if sent, else an error code
  */
 static netdev_tx_t idpf_tx_splitq_frame(struct sk_buff *skb,
-					struct idpf_queue *tx_q)
+					struct idpf_tx_queue *tx_q)
 {
 	struct idpf_tx_splitq_params tx_params = { };
 	struct idpf_tx_buf *first;
@@ -2625,7 +2802,7 @@ static netdev_tx_t idpf_tx_splitq_frame(struct sk_buff *skb,
 		ctx_desc->tso.qw0.hdr_len = tx_params.offload.tso_hdr_len;
 
 		u64_stats_update_begin(&tx_q->stats_sync);
-		u64_stats_inc(&tx_q->q_stats.tx.lso_pkts);
+		u64_stats_inc(&tx_q->q_stats.lso_pkts);
 		u64_stats_update_end(&tx_q->stats_sync);
 	}
 
@@ -2642,7 +2819,7 @@ static netdev_tx_t idpf_tx_splitq_frame(struct sk_buff *skb,
 		first->bytecount = max_t(unsigned int, skb->len, ETH_ZLEN);
 	}
 
-	if (test_bit(__IDPF_Q_FLOW_SCH_EN, tx_q->flags)) {
+	if (idpf_queue_has(FLOW_SCH_EN, tx_q)) {
 		tx_params.dtype = IDPF_TX_DESC_DTYPE_FLEX_FLOW_SCHE;
 		tx_params.eop_cmd = IDPF_TXD_FLEX_FLOW_CMD_EOP;
 		/* Set the RE bit to catch any packets that may have not been
@@ -2682,7 +2859,7 @@ netdev_tx_t idpf_tx_splitq_start(struct sk_buff *skb,
 				 struct net_device *netdev)
 {
 	struct idpf_vport *vport = idpf_netdev_to_vport(netdev);
-	struct idpf_queue *tx_q;
+	struct idpf_tx_queue *tx_q;
 
 	if (unlikely(skb_get_queue_mapping(skb) >= vport->num_txq)) {
 		dev_kfree_skb_any(skb);
@@ -2735,13 +2912,14 @@ enum pkt_hash_types idpf_ptype_to_htype(const struct idpf_rx_ptype_decoded *deco
  * @rx_desc: Receive descriptor
  * @decoded: Decoded Rx packet type related fields
  */
-static void idpf_rx_hash(struct idpf_queue *rxq, struct sk_buff *skb,
-			 struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc,
-			 struct idpf_rx_ptype_decoded *decoded)
+static void
+idpf_rx_hash(const struct idpf_rx_queue *rxq, struct sk_buff *skb,
+	     const struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc,
+	     struct idpf_rx_ptype_decoded *decoded)
 {
 	u32 hash;
 
-	if (unlikely(!idpf_is_feature_ena(rxq->vport, NETIF_F_RXHASH)))
+	if (unlikely(!(rxq->netdev->features & NETIF_F_RXHASH)))
 		return;
 
 	hash = le16_to_cpu(rx_desc->hash1) |
@@ -2760,14 +2938,14 @@ static void idpf_rx_hash(struct idpf_queue *rxq, struct sk_buff *skb,
  *
  * skb->protocol must be set before this function is called
  */
-static void idpf_rx_csum(struct idpf_queue *rxq, struct sk_buff *skb,
+static void idpf_rx_csum(struct idpf_rx_queue *rxq, struct sk_buff *skb,
 			 struct idpf_rx_csum_decoded *csum_bits,
 			 struct idpf_rx_ptype_decoded *decoded)
 {
 	bool ipv4, ipv6;
 
 	/* check if Rx checksum is enabled */
-	if (unlikely(!idpf_is_feature_ena(rxq->vport, NETIF_F_RXCSUM)))
+	if (unlikely(!(rxq->netdev->features & NETIF_F_RXCSUM)))
 		return;
 
 	/* check if HW has decoded the packet and checksum */
@@ -2814,7 +2992,7 @@ static void idpf_rx_csum(struct idpf_queue *rxq, struct sk_buff *skb,
 
 checksum_fail:
 	u64_stats_update_begin(&rxq->stats_sync);
-	u64_stats_inc(&rxq->q_stats.rx.hw_csum_err);
+	u64_stats_inc(&rxq->q_stats.hw_csum_err);
 	u64_stats_update_end(&rxq->stats_sync);
 }
 
@@ -2824,8 +3002,9 @@ static void idpf_rx_csum(struct idpf_queue *rxq, struct sk_buff *skb,
  * @csum: structure to extract checksum fields
  *
  **/
-static void idpf_rx_splitq_extract_csum_bits(struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc,
-					     struct idpf_rx_csum_decoded *csum)
+static void
+idpf_rx_splitq_extract_csum_bits(const struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc,
+				 struct idpf_rx_csum_decoded *csum)
 {
 	u8 qword0, qword1;
 
@@ -2860,8 +3039,8 @@ static void idpf_rx_splitq_extract_csum_bits(struct virtchnl2_rx_flex_desc_adv_n
  * Populate the skb fields with the total number of RSC segments, RSC payload
  * length and packet type.
  */
-static int idpf_rx_rsc(struct idpf_queue *rxq, struct sk_buff *skb,
-		       struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc,
+static int idpf_rx_rsc(struct idpf_rx_queue *rxq, struct sk_buff *skb,
+		       const struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc,
 		       struct idpf_rx_ptype_decoded *decoded)
 {
 	u16 rsc_segments, rsc_seg_len;
@@ -2914,7 +3093,7 @@ static int idpf_rx_rsc(struct idpf_queue *rxq, struct sk_buff *skb,
 	tcp_gro_complete(skb);
 
 	u64_stats_update_begin(&rxq->stats_sync);
-	u64_stats_inc(&rxq->q_stats.rx.rsc_pkts);
+	u64_stats_inc(&rxq->q_stats.rsc_pkts);
 	u64_stats_update_end(&rxq->stats_sync);
 
 	return 0;
@@ -2930,9 +3109,9 @@ static int idpf_rx_rsc(struct idpf_queue *rxq, struct sk_buff *skb,
  * order to populate the hash, checksum, protocol, and
  * other fields within the skb.
  */
-static int idpf_rx_process_skb_fields(struct idpf_queue *rxq,
-				      struct sk_buff *skb,
-				      struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc)
+static int
+idpf_rx_process_skb_fields(struct idpf_rx_queue *rxq, struct sk_buff *skb,
+			   const struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc)
 {
 	struct idpf_rx_csum_decoded csum_bits = { };
 	struct idpf_rx_ptype_decoded decoded;
@@ -2940,19 +3119,13 @@ static int idpf_rx_process_skb_fields(struct idpf_queue *rxq,
 
 	rx_ptype = le16_get_bits(rx_desc->ptype_err_fflags0,
 				 VIRTCHNL2_RX_FLEX_DESC_ADV_PTYPE_M);
-
-	skb->protocol = eth_type_trans(skb, rxq->vport->netdev);
-
-	decoded = rxq->vport->rx_ptype_lkup[rx_ptype];
-	/* If we don't know the ptype we can't do anything else with it. Just
-	 * pass it up the stack as-is.
-	 */
-	if (!decoded.known)
-		return 0;
+	decoded = rxq->rx_ptype_lkup[rx_ptype];
 
 	/* process RSS/hash */
 	idpf_rx_hash(rxq, skb, rx_desc, &decoded);
 
+	skb->protocol = eth_type_trans(skb, rxq->netdev);
+
 	if (le16_get_bits(rx_desc->hdrlen_flags,
 			  VIRTCHNL2_RX_FLEX_DESC_ADV_RSC_M))
 		return idpf_rx_rsc(rxq, skb, rx_desc, &decoded);
@@ -2992,7 +3165,7 @@ void idpf_rx_add_frag(struct idpf_rx_buf *rx_buf, struct sk_buff *skb,
  * data from the current receive descriptor, taking care to set up the
  * skb correctly.
  */
-struct sk_buff *idpf_rx_construct_skb(struct idpf_queue *rxq,
+struct sk_buff *idpf_rx_construct_skb(const struct idpf_rx_queue *rxq,
 				      struct idpf_rx_buf *rx_buf,
 				      unsigned int size)
 {
@@ -3005,7 +3178,7 @@ struct sk_buff *idpf_rx_construct_skb(struct idpf_queue *rxq,
 	/* prefetch first cache line of first page */
 	net_prefetch(va);
 	/* allocate a skb to store the frags */
-	skb = napi_alloc_skb(&rxq->q_vector->napi, IDPF_RX_HDR_SIZE);
+	skb = napi_alloc_skb(rxq->napi, IDPF_RX_HDR_SIZE);
 	if (unlikely(!skb)) {
 		idpf_rx_put_page(rx_buf);
 
@@ -3052,14 +3225,14 @@ struct sk_buff *idpf_rx_construct_skb(struct idpf_queue *rxq,
  * the current receive descriptor, taking care to set up the skb correctly.
  * This specifically uses a header buffer to start building the skb.
  */
-static struct sk_buff *idpf_rx_hdr_construct_skb(struct idpf_queue *rxq,
-						 const void *va,
-						 unsigned int size)
+static struct sk_buff *
+idpf_rx_hdr_construct_skb(const struct idpf_rx_queue *rxq, const void *va,
+			  unsigned int size)
 {
 	struct sk_buff *skb;
 
 	/* allocate a skb to store the frags */
-	skb = napi_alloc_skb(&rxq->q_vector->napi, size);
+	skb = napi_alloc_skb(rxq->napi, size);
 	if (unlikely(!skb))
 		return NULL;
 
@@ -3115,10 +3288,10 @@ static bool idpf_rx_splitq_is_eop(struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_de
  *
  * Returns amount of work completed
  */
-static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
+static int idpf_rx_splitq_clean(struct idpf_rx_queue *rxq, int budget)
 {
 	int total_rx_bytes = 0, total_rx_pkts = 0;
-	struct idpf_queue *rx_bufq = NULL;
+	struct idpf_buf_queue *rx_bufq = NULL;
 	struct sk_buff *skb = rxq->skb;
 	u16 ntc = rxq->next_to_clean;
 
@@ -3148,7 +3321,7 @@ static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
 		gen_id = le16_get_bits(rx_desc->pktlen_gen_bufq_id,
 				       VIRTCHNL2_RX_FLEX_DESC_ADV_GEN_M);
 
-		if (test_bit(__IDPF_Q_GEN_CHK, rxq->flags) != gen_id)
+		if (idpf_queue_has(GEN_CHK, rxq) != gen_id)
 			break;
 
 		rxdid = FIELD_GET(VIRTCHNL2_RX_FLEX_DESC_ADV_RXDID_M,
@@ -3156,7 +3329,7 @@ static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
 		if (rxdid != VIRTCHNL2_RXDID_2_FLEX_SPLITQ) {
 			IDPF_RX_BUMP_NTC(rxq, ntc);
 			u64_stats_update_begin(&rxq->stats_sync);
-			u64_stats_inc(&rxq->q_stats.rx.bad_descs);
+			u64_stats_inc(&rxq->q_stats.bad_descs);
 			u64_stats_update_end(&rxq->stats_sync);
 			continue;
 		}
@@ -3174,7 +3347,7 @@ static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
 			 * data/payload buffer.
 			 */
 			u64_stats_update_begin(&rxq->stats_sync);
-			u64_stats_inc(&rxq->q_stats.rx.hsplit_buf_ovf);
+			u64_stats_inc(&rxq->q_stats.hsplit_buf_ovf);
 			u64_stats_update_end(&rxq->stats_sync);
 			goto bypass_hsplit;
 		}
@@ -3187,13 +3360,10 @@ static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
 					VIRTCHNL2_RX_FLEX_DESC_ADV_BUFQ_ID_M);
 
 		rxq_set = container_of(rxq, struct idpf_rxq_set, rxq);
-		if (!bufq_id)
-			refillq = rxq_set->refillq0;
-		else
-			refillq = rxq_set->refillq1;
+		refillq = rxq_set->refillq[bufq_id];
 
 		/* retrieve buffer from the rxq */
-		rx_bufq = &rxq->rxq_grp->splitq.bufq_sets[bufq_id].bufq;
+		rx_bufq = &rxq->bufq_sets[bufq_id].bufq;
 
 		buf_id = le16_to_cpu(rx_desc->buf_id);
 
@@ -3205,7 +3375,7 @@ static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
 
 			skb = idpf_rx_hdr_construct_skb(rxq, va, hdr_len);
 			u64_stats_update_begin(&rxq->stats_sync);
-			u64_stats_inc(&rxq->q_stats.rx.hsplit_pkts);
+			u64_stats_inc(&rxq->q_stats.hsplit_pkts);
 			u64_stats_update_end(&rxq->stats_sync);
 		}
 
@@ -3248,7 +3418,7 @@ static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
 		}
 
 		/* send completed skb up the stack */
-		napi_gro_receive(&rxq->q_vector->napi, skb);
+		napi_gro_receive(rxq->napi, skb);
 		skb = NULL;
 
 		/* update budget accounting */
@@ -3259,8 +3429,8 @@ static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
 
 	rxq->skb = skb;
 	u64_stats_update_begin(&rxq->stats_sync);
-	u64_stats_add(&rxq->q_stats.rx.packets, total_rx_pkts);
-	u64_stats_add(&rxq->q_stats.rx.bytes, total_rx_bytes);
+	u64_stats_add(&rxq->q_stats.packets, total_rx_pkts);
+	u64_stats_add(&rxq->q_stats.bytes, total_rx_bytes);
 	u64_stats_update_end(&rxq->stats_sync);
 
 	/* guarantee a trip back through this routine if there was a failure */
@@ -3270,19 +3440,16 @@ static int idpf_rx_splitq_clean(struct idpf_queue *rxq, int budget)
 /**
  * idpf_rx_update_bufq_desc - Update buffer queue descriptor
  * @bufq: Pointer to the buffer queue
- * @refill_desc: SW Refill queue descriptor containing buffer ID
+ * @buf_id: buffer ID
  * @buf_desc: Buffer queue descriptor
  *
  * Return 0 on success and negative on failure.
  */
-static int idpf_rx_update_bufq_desc(struct idpf_queue *bufq, u16 refill_desc,
+static int idpf_rx_update_bufq_desc(struct idpf_buf_queue *bufq, u32 buf_id,
 				    struct virtchnl2_splitq_rx_buf_desc *buf_desc)
 {
 	struct idpf_rx_buf *buf;
 	dma_addr_t addr;
-	u16 buf_id;
-
-	buf_id = FIELD_GET(IDPF_RX_BI_BUFID_M, refill_desc);
 
 	buf = &bufq->rx_buf.buf[buf_id];
 
@@ -3293,7 +3460,7 @@ static int idpf_rx_update_bufq_desc(struct idpf_queue *bufq, u16 refill_desc,
 	buf_desc->pkt_addr = cpu_to_le64(addr);
 	buf_desc->qword0.buf_id = cpu_to_le16(buf_id);
 
-	if (!bufq->rx_hsplit_en)
+	if (!idpf_queue_has(HSPLIT_EN, bufq))
 		return 0;
 
 	buf_desc->hdr_addr = cpu_to_le64(bufq->rx_buf.hdr_buf_pa +
@@ -3309,33 +3476,32 @@ static int idpf_rx_update_bufq_desc(struct idpf_queue *bufq, u16 refill_desc,
  *
  * This function takes care of the buffer refill management
  */
-static void idpf_rx_clean_refillq(struct idpf_queue *bufq,
+static void idpf_rx_clean_refillq(struct idpf_buf_queue *bufq,
 				  struct idpf_sw_queue *refillq)
 {
 	struct virtchnl2_splitq_rx_buf_desc *buf_desc;
 	u16 bufq_nta = bufq->next_to_alloc;
 	u16 ntc = refillq->next_to_clean;
 	int cleaned = 0;
-	u16 gen;
 
 	buf_desc = &bufq->split_buf[bufq_nta];
 
 	/* make sure we stop at ring wrap in the unlikely case ring is full */
 	while (likely(cleaned < refillq->desc_count)) {
-		u16 refill_desc = refillq->ring[ntc];
+		u32 buf_id, refill_desc = refillq->ring[ntc];
 		bool failure;
 
-		gen = FIELD_GET(IDPF_RX_BI_GEN_M, refill_desc);
-		if (test_bit(__IDPF_RFLQ_GEN_CHK, refillq->flags) != gen)
+		if (idpf_queue_has(RFL_GEN_CHK, refillq) !=
+		    !!(refill_desc & IDPF_RX_BI_GEN_M))
 			break;
 
-		failure = idpf_rx_update_bufq_desc(bufq, refill_desc,
-						   buf_desc);
+		buf_id = FIELD_GET(IDPF_RX_BI_BUFID_M, refill_desc);
+		failure = idpf_rx_update_bufq_desc(bufq, buf_id, buf_desc);
 		if (failure)
 			break;
 
 		if (unlikely(++ntc == refillq->desc_count)) {
-			change_bit(__IDPF_RFLQ_GEN_CHK, refillq->flags);
+			idpf_queue_change(RFL_GEN_CHK, refillq);
 			ntc = 0;
 		}
 
@@ -3374,7 +3540,7 @@ static void idpf_rx_clean_refillq(struct idpf_queue *bufq,
  * this vector.  Returns true if clean is complete within budget, false
  * otherwise.
  */
-static void idpf_rx_clean_refillq_all(struct idpf_queue *bufq)
+static void idpf_rx_clean_refillq_all(struct idpf_buf_queue *bufq)
 {
 	struct idpf_bufq_set *bufq_set;
 	int i;
@@ -3437,6 +3603,8 @@ void idpf_vport_intr_rel(struct idpf_vport *vport)
 	for (u32 v_idx = 0; v_idx < vport->num_q_vectors; v_idx++) {
 		struct idpf_q_vector *q_vector = &vport->q_vectors[v_idx];
 
+		kfree(q_vector->complq);
+		q_vector->complq = NULL;
 		kfree(q_vector->bufq);
 		q_vector->bufq = NULL;
 		kfree(q_vector->tx);
@@ -3555,13 +3723,13 @@ static void idpf_net_dim(struct idpf_q_vector *q_vector)
 		goto check_rx_itr;
 
 	for (i = 0, packets = 0, bytes = 0; i < q_vector->num_txq; i++) {
-		struct idpf_queue *txq = q_vector->tx[i];
+		struct idpf_tx_queue *txq = q_vector->tx[i];
 		unsigned int start;
 
 		do {
 			start = u64_stats_fetch_begin(&txq->stats_sync);
-			packets += u64_stats_read(&txq->q_stats.tx.packets);
-			bytes += u64_stats_read(&txq->q_stats.tx.bytes);
+			packets += u64_stats_read(&txq->q_stats.packets);
+			bytes += u64_stats_read(&txq->q_stats.bytes);
 		} while (u64_stats_fetch_retry(&txq->stats_sync, start));
 	}
 
@@ -3574,13 +3742,13 @@ static void idpf_net_dim(struct idpf_q_vector *q_vector)
 		return;
 
 	for (i = 0, packets = 0, bytes = 0; i < q_vector->num_rxq; i++) {
-		struct idpf_queue *rxq = q_vector->rx[i];
+		struct idpf_rx_queue *rxq = q_vector->rx[i];
 		unsigned int start;
 
 		do {
 			start = u64_stats_fetch_begin(&rxq->stats_sync);
-			packets += u64_stats_read(&rxq->q_stats.rx.packets);
-			bytes += u64_stats_read(&rxq->q_stats.rx.bytes);
+			packets += u64_stats_read(&rxq->q_stats.packets);
+			bytes += u64_stats_read(&rxq->q_stats.bytes);
 		} while (u64_stats_fetch_retry(&rxq->stats_sync, start));
 	}
 
@@ -3824,16 +3992,17 @@ static void idpf_vport_intr_napi_ena_all(struct idpf_vport *vport)
 static bool idpf_tx_splitq_clean_all(struct idpf_q_vector *q_vec,
 				     int budget, int *cleaned)
 {
-	u16 num_txq = q_vec->num_txq;
+	u16 num_complq = q_vec->num_complq;
 	bool clean_complete = true;
 	int i, budget_per_q;
 
-	if (unlikely(!num_txq))
+	if (unlikely(!num_complq))
 		return true;
 
-	budget_per_q = DIV_ROUND_UP(budget, num_txq);
-	for (i = 0; i < num_txq; i++)
-		clean_complete &= idpf_tx_clean_complq(q_vec->tx[i],
+	budget_per_q = DIV_ROUND_UP(budget, num_complq);
+
+	for (i = 0; i < num_complq; i++)
+		clean_complete &= idpf_tx_clean_complq(q_vec->complq[i],
 						       budget_per_q, cleaned);
 
 	return clean_complete;
@@ -3860,7 +4029,7 @@ static bool idpf_rx_splitq_clean_all(struct idpf_q_vector *q_vec, int budget,
 	 */
 	budget_per_q = num_rxq ? max(budget / num_rxq, 1) : 0;
 	for (i = 0; i < num_rxq; i++) {
-		struct idpf_queue *rxq = q_vec->rx[i];
+		struct idpf_rx_queue *rxq = q_vec->rx[i];
 		int pkts_cleaned_per_q;
 
 		pkts_cleaned_per_q = idpf_rx_splitq_clean(rxq, budget_per_q);
@@ -3915,8 +4084,8 @@ static int idpf_vport_splitq_napi_poll(struct napi_struct *napi, int budget)
 	 * queues virtchnl message, as the interrupts will be disabled after
 	 * that
 	 */
-	if (unlikely(q_vector->num_txq && test_bit(__IDPF_Q_POLL_MODE,
-						   q_vector->tx[0]->flags)))
+	if (unlikely(q_vector->num_txq && idpf_queue_has(POLL_MODE,
+							 q_vector->tx[0])))
 		return budget;
 	else
 		return work_done;
@@ -3930,27 +4099,28 @@ static int idpf_vport_splitq_napi_poll(struct napi_struct *napi, int budget)
  */
 static void idpf_vport_intr_map_vector_to_qs(struct idpf_vport *vport)
 {
+	bool split = idpf_is_queue_model_split(vport->rxq_model);
 	u16 num_txq_grp = vport->num_txq_grp;
-	int i, j, qv_idx, bufq_vidx = 0;
 	struct idpf_rxq_group *rx_qgrp;
 	struct idpf_txq_group *tx_qgrp;
-	struct idpf_queue *q, *bufq;
-	u16 q_index;
+	u32 i, qv_idx, q_index;
 
 	for (i = 0, qv_idx = 0; i < vport->num_rxq_grp; i++) {
 		u16 num_rxq;
 
+		if (qv_idx >= vport->num_q_vectors)
+			qv_idx = 0;
+
 		rx_qgrp = &vport->rxq_grps[i];
-		if (idpf_is_queue_model_split(vport->rxq_model))
+		if (split)
 			num_rxq = rx_qgrp->splitq.num_rxq_sets;
 		else
 			num_rxq = rx_qgrp->singleq.num_rxq;
 
-		for (j = 0; j < num_rxq; j++) {
-			if (qv_idx >= vport->num_q_vectors)
-				qv_idx = 0;
+		for (u32 j = 0; j < num_rxq; j++) {
+			struct idpf_rx_queue *q;
 
-			if (idpf_is_queue_model_split(vport->rxq_model))
+			if (split)
 				q = &rx_qgrp->splitq.rxq_sets[j]->rxq;
 			else
 				q = rx_qgrp->singleq.rxqs[j];
@@ -3958,52 +4128,53 @@ static void idpf_vport_intr_map_vector_to_qs(struct idpf_vport *vport)
 			q_index = q->q_vector->num_rxq;
 			q->q_vector->rx[q_index] = q;
 			q->q_vector->num_rxq++;
-			qv_idx++;
+
+			if (split)
+				q->napi = &q->q_vector->napi;
 		}
 
-		if (idpf_is_queue_model_split(vport->rxq_model)) {
-			for (j = 0; j < vport->num_bufqs_per_qgrp; j++) {
+		if (split) {
+			for (u32 j = 0; j < vport->num_bufqs_per_qgrp; j++) {
+				struct idpf_buf_queue *bufq;
+
 				bufq = &rx_qgrp->splitq.bufq_sets[j].bufq;
-				bufq->q_vector = &vport->q_vectors[bufq_vidx];
+				bufq->q_vector = &vport->q_vectors[qv_idx];
 				q_index = bufq->q_vector->num_bufq;
 				bufq->q_vector->bufq[q_index] = bufq;
 				bufq->q_vector->num_bufq++;
 			}
-			if (++bufq_vidx >= vport->num_q_vectors)
-				bufq_vidx = 0;
 		}
+
+		qv_idx++;
 	}
 
+	split = idpf_is_queue_model_split(vport->txq_model);
+
 	for (i = 0, qv_idx = 0; i < num_txq_grp; i++) {
 		u16 num_txq;
 
+		if (qv_idx >= vport->num_q_vectors)
+			qv_idx = 0;
+
 		tx_qgrp = &vport->txq_grps[i];
 		num_txq = tx_qgrp->num_txq;
 
-		if (idpf_is_queue_model_split(vport->txq_model)) {
-			if (qv_idx >= vport->num_q_vectors)
-				qv_idx = 0;
+		for (u32 j = 0; j < num_txq; j++) {
+			struct idpf_tx_queue *q;
 
-			q = tx_qgrp->complq;
+			q = tx_qgrp->txqs[j];
 			q->q_vector = &vport->q_vectors[qv_idx];
-			q_index = q->q_vector->num_txq;
-			q->q_vector->tx[q_index] = q;
-			q->q_vector->num_txq++;
-			qv_idx++;
-		} else {
-			for (j = 0; j < num_txq; j++) {
-				if (qv_idx >= vport->num_q_vectors)
-					qv_idx = 0;
+			q->q_vector->tx[q->q_vector->num_txq++] = q;
+		}
 
-				q = tx_qgrp->txqs[j];
-				q->q_vector = &vport->q_vectors[qv_idx];
-				q_index = q->q_vector->num_txq;
-				q->q_vector->tx[q_index] = q;
-				q->q_vector->num_txq++;
+		if (split) {
+			struct idpf_compl_queue *q = tx_qgrp->complq;
 
-				qv_idx++;
-			}
+			q->q_vector = &vport->q_vectors[qv_idx];
+			q->q_vector->complq[q->q_vector->num_complq++] = q;
 		}
+
+		qv_idx++;
 	}
 }
 
@@ -4079,18 +4250,22 @@ int idpf_vport_intr_alloc(struct idpf_vport *vport)
 {
 	u16 txqs_per_vector, rxqs_per_vector, bufqs_per_vector;
 	struct idpf_q_vector *q_vector;
-	int v_idx, err;
+	u32 complqs_per_vector, v_idx;
 
 	vport->q_vectors = kcalloc(vport->num_q_vectors,
 				   sizeof(struct idpf_q_vector), GFP_KERNEL);
 	if (!vport->q_vectors)
 		return -ENOMEM;
 
-	txqs_per_vector = DIV_ROUND_UP(vport->num_txq, vport->num_q_vectors);
-	rxqs_per_vector = DIV_ROUND_UP(vport->num_rxq, vport->num_q_vectors);
+	txqs_per_vector = DIV_ROUND_UP(vport->num_txq_grp,
+				       vport->num_q_vectors);
+	rxqs_per_vector = DIV_ROUND_UP(vport->num_rxq_grp,
+				       vport->num_q_vectors);
 	bufqs_per_vector = vport->num_bufqs_per_qgrp *
 			   DIV_ROUND_UP(vport->num_rxq_grp,
 					vport->num_q_vectors);
+	complqs_per_vector = DIV_ROUND_UP(vport->num_txq_grp,
+					  vport->num_q_vectors);
 
 	for (v_idx = 0; v_idx < vport->num_q_vectors; v_idx++) {
 		q_vector = &vport->q_vectors[v_idx];
@@ -4104,32 +4279,30 @@ int idpf_vport_intr_alloc(struct idpf_vport *vport)
 		q_vector->rx_intr_mode = IDPF_ITR_DYNAMIC;
 		q_vector->rx_itr_idx = VIRTCHNL2_ITR_IDX_0;
 
-		q_vector->tx = kcalloc(txqs_per_vector,
-				       sizeof(struct idpf_queue *),
+		q_vector->tx = kcalloc(txqs_per_vector, sizeof(*q_vector->tx),
 				       GFP_KERNEL);
-		if (!q_vector->tx) {
-			err = -ENOMEM;
+		if (!q_vector->tx)
 			goto error;
-		}
 
-		q_vector->rx = kcalloc(rxqs_per_vector,
-				       sizeof(struct idpf_queue *),
+		q_vector->rx = kcalloc(rxqs_per_vector, sizeof(*q_vector->rx),
 				       GFP_KERNEL);
-		if (!q_vector->rx) {
-			err = -ENOMEM;
+		if (!q_vector->rx)
 			goto error;
-		}
 
 		if (!idpf_is_queue_model_split(vport->rxq_model))
 			continue;
 
 		q_vector->bufq = kcalloc(bufqs_per_vector,
-					 sizeof(struct idpf_queue *),
+					 sizeof(*q_vector->bufq),
 					 GFP_KERNEL);
-		if (!q_vector->bufq) {
-			err = -ENOMEM;
+		if (!q_vector->bufq)
+			goto error;
+
+		q_vector->complq = kcalloc(complqs_per_vector,
+					   sizeof(*q_vector->complq),
+					   GFP_KERNEL);
+		if (!q_vector->complq)
 			goto error;
-		}
 	}
 
 	return 0;
@@ -4137,7 +4310,7 @@ int idpf_vport_intr_alloc(struct idpf_vport *vport)
 error:
 	idpf_vport_intr_rel(vport);
 
-	return err;
+	return -ENOMEM;
 }
 
 /**
diff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.h b/drivers/net/ethernet/intel/idpf/idpf_txrx.h
index 6dce14483215f..704aec5c383b6 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_txrx.h
+++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.h
@@ -4,6 +4,8 @@
 #ifndef _IDPF_TXRX_H_
 #define _IDPF_TXRX_H_
 
+#include <linux/dim.h>
+
 #include <net/page_pool/helpers.h>
 #include <net/tcp.h>
 #include <net/netdev_queues.h>
@@ -84,7 +86,7 @@
 do {								\
 	if (unlikely(++(ntc) == (rxq)->desc_count)) {		\
 		ntc = 0;					\
-		change_bit(__IDPF_Q_GEN_CHK, (rxq)->flags);	\
+		idpf_queue_change(GEN_CHK, rxq);		\
 	}							\
 } while (0)
 
@@ -111,10 +113,9 @@ do {								\
  */
 #define IDPF_TX_SPLITQ_RE_MIN_GAP	64
 
-#define IDPF_RX_BI_BUFID_S		0
-#define IDPF_RX_BI_BUFID_M		GENMASK(14, 0)
-#define IDPF_RX_BI_GEN_S		15
-#define IDPF_RX_BI_GEN_M		BIT(IDPF_RX_BI_GEN_S)
+#define IDPF_RX_BI_GEN_M		BIT(16)
+#define IDPF_RX_BI_BUFID_M		GENMASK(15, 0)
+
 #define IDPF_RXD_EOF_SPLITQ		VIRTCHNL2_RX_FLEX_DESC_ADV_STATUS0_EOF_M
 #define IDPF_RXD_EOF_SINGLEQ		VIRTCHNL2_RX_BASE_DESC_STATUS_EOF_M
 
@@ -122,7 +123,7 @@ do {								\
 	((((txq)->next_to_clean > (txq)->next_to_use) ? 0 : (txq)->desc_count) + \
 	(txq)->next_to_clean - (txq)->next_to_use - 1)
 
-#define IDPF_TX_BUF_RSV_UNUSED(txq)	((txq)->buf_stack.top)
+#define IDPF_TX_BUF_RSV_UNUSED(txq)	((txq)->stash->buf_stack.top)
 #define IDPF_TX_BUF_RSV_LOW(txq)	(IDPF_TX_BUF_RSV_UNUSED(txq) < \
 					 (txq)->desc_count >> 2)
 
@@ -433,23 +434,37 @@ struct idpf_rx_ptype_decoded {
  *		      to 1 and knows that reading a gen bit of 1 in any
  *		      descriptor on the initial pass of the ring indicates a
  *		      writeback. It also flips on every ring wrap.
- * @__IDPF_RFLQ_GEN_CHK: Refill queues are SW only, so Q_GEN acts as the HW bit
- *			 and RFLGQ_GEN is the SW bit.
+ * @__IDPF_Q_RFL_GEN_CHK: Refill queues are SW only, so Q_GEN acts as the HW
+ *			  bit and Q_RFL_GEN is the SW bit.
  * @__IDPF_Q_FLOW_SCH_EN: Enable flow scheduling
  * @__IDPF_Q_SW_MARKER: Used to indicate TX queue marker completions
  * @__IDPF_Q_POLL_MODE: Enable poll mode
+ * @__IDPF_Q_CRC_EN: enable CRC offload in singleq mode
+ * @__IDPF_Q_HSPLIT_EN: enable header split on Rx (splitq)
  * @__IDPF_Q_FLAGS_NBITS: Must be last
  */
 enum idpf_queue_flags_t {
 	__IDPF_Q_GEN_CHK,
-	__IDPF_RFLQ_GEN_CHK,
+	__IDPF_Q_RFL_GEN_CHK,
 	__IDPF_Q_FLOW_SCH_EN,
 	__IDPF_Q_SW_MARKER,
 	__IDPF_Q_POLL_MODE,
+	__IDPF_Q_CRC_EN,
+	__IDPF_Q_HSPLIT_EN,
 
 	__IDPF_Q_FLAGS_NBITS,
 };
 
+#define idpf_queue_set(f, q)		__set_bit(__IDPF_Q_##f, (q)->flags)
+#define idpf_queue_clear(f, q)		__clear_bit(__IDPF_Q_##f, (q)->flags)
+#define idpf_queue_change(f, q)		__change_bit(__IDPF_Q_##f, (q)->flags)
+#define idpf_queue_has(f, q)		test_bit(__IDPF_Q_##f, (q)->flags)
+
+#define idpf_queue_has_clear(f, q)			\
+	__test_and_clear_bit(__IDPF_Q_##f, (q)->flags)
+#define idpf_queue_assign(f, q, v)			\
+	__assign_bit(__IDPF_Q_##f, (q)->flags, v)
+
 /**
  * struct idpf_vec_regs
  * @dyn_ctl_reg: Dynamic control interrupt register offset
@@ -495,7 +510,9 @@ struct idpf_intr_reg {
  * @v_idx: Vector index
  * @intr_reg: See struct idpf_intr_reg
  * @num_txq: Number of TX queues
+ * @num_complq: number of completion queues
  * @tx: Array of TX queues to service
+ * @complq: array of completion queues
  * @tx_dim: Data for TX net_dim algorithm
  * @tx_itr_value: TX interrupt throttling rate
  * @tx_intr_mode: Dynamic ITR or not
@@ -519,21 +536,24 @@ struct idpf_q_vector {
 	struct idpf_intr_reg intr_reg;
 
 	u16 num_txq;
-	struct idpf_queue **tx;
+	u16 num_complq;
+	struct idpf_tx_queue **tx;
+	struct idpf_compl_queue **complq;
+
 	struct dim tx_dim;
 	u16 tx_itr_value;
 	bool tx_intr_mode;
 	u32 tx_itr_idx;
 
 	u16 num_rxq;
-	struct idpf_queue **rx;
+	struct idpf_rx_queue **rx;
 	struct dim rx_dim;
 	u16 rx_itr_value;
 	bool rx_intr_mode;
 	u32 rx_itr_idx;
 
 	u16 num_bufq;
-	struct idpf_queue **bufq;
+	struct idpf_buf_queue **bufq;
 
 	u16 total_events;
 	char *name;
@@ -564,11 +584,6 @@ struct idpf_cleaned_stats {
 	u32 bytes;
 };
 
-union idpf_queue_stats {
-	struct idpf_rx_queue_stats rx;
-	struct idpf_tx_queue_stats tx;
-};
-
 #define IDPF_ITR_DYNAMIC	1
 #define IDPF_ITR_MAX		0x1FE0
 #define IDPF_ITR_20K		0x0032
@@ -584,39 +599,114 @@ union idpf_queue_stats {
 #define IDPF_DIM_DEFAULT_PROFILE_IX		1
 
 /**
- * struct idpf_queue
- * @dev: Device back pointer for DMA mapping
- * @vport: Back pointer to associated vport
- * @txq_grp: See struct idpf_txq_group
- * @rxq_grp: See struct idpf_rxq_group
- * @idx: For buffer queue, it is used as group id, either 0 or 1. On clean,
- *	 buffer queue uses this index to determine which group of refill queues
- *	 to clean.
- *	 For TX queue, it is used as index to map between TX queue group and
- *	 hot path TX pointers stored in vport. Used in both singleq/splitq.
- *	 For RX queue, it is used to index to total RX queue across groups and
+ * struct idpf_txq_stash - Tx buffer stash for Flow-based scheduling mode
+ * @buf_stack: Stack of empty buffers to store buffer info for out of order
+ *	       buffer completions. See struct idpf_buf_lifo
+ * @sched_buf_hash: Hash table to store buffers
+ */
+struct idpf_txq_stash {
+	struct idpf_buf_lifo buf_stack;
+	DECLARE_HASHTABLE(sched_buf_hash, 12);
+} ____cacheline_aligned;
+
+/**
+ * struct idpf_rx_queue - software structure representing a receive queue
+ * @rx: universal receive descriptor array
+ * @single_buf: buffer descriptor array in singleq
+ * @desc_ring: virtual descriptor ring address
+ * @bufq_sets: Pointer to the array of buffer queues in splitq mode
+ * @napi: NAPI instance corresponding to this queue (splitq)
+ * @rx_buf: See struct idpf_rx_buf
+ * @pp: Page pool pointer in singleq mode
+ * @netdev: &net_device corresponding to this queue
+ * @tail: Tail offset. Used for both queue models single and split.
+ * @flags: See enum idpf_queue_flags_t
+ * @idx: For RX queue, it is used to index to total RX queue across groups and
  *	 used for skb reporting.
- * @tail: Tail offset. Used for both queue models single and split. In splitq
- *	  model relevant only for TX queue and RX queue.
- * @tx_buf: See struct idpf_tx_buf
- * @rx_buf: Struct with RX buffer related members
- * @rx_buf.buf: See struct idpf_rx_buf
- * @rx_buf.hdr_buf_pa: DMA handle
- * @rx_buf.hdr_buf_va: Virtual address
- * @pp: Page pool pointer
+ * @desc_count: Number of descriptors
+ * @next_to_use: Next descriptor to use
+ * @next_to_clean: Next descriptor to clean
+ * @next_to_alloc: RX buffer to allocate at
+ * @rxdids: Supported RX descriptor ids
+ * @rx_ptype_lkup: LUT of Rx ptypes
  * @skb: Pointer to the skb
- * @q_type: Queue type (TX, RX, TX completion, RX buffer)
+ * @stats_sync: See struct u64_stats_sync
+ * @q_stats: See union idpf_rx_queue_stats
  * @q_id: Queue id
- * @desc_count: Number of descriptors
- * @next_to_use: Next descriptor to use. Relevant in both split & single txq
- *		 and bufq.
- * @next_to_clean: Next descriptor to clean. In split queue model, only
- *		   relevant to TX completion queue and RX queue.
- * @next_to_alloc: RX buffer to allocate at. Used only for RX. In splitq model
- *		   only relevant to RX queue.
+ * @size: Length of descriptor ring in bytes
+ * @dma: Physical address of ring
+ * @q_vector: Backreference to associated vector
+ * @rx_buffer_low_watermark: RX buffer low watermark
+ * @rx_hbuf_size: Header buffer size
+ * @rx_buf_size: Buffer size
+ * @rx_max_pkt_size: RX max packet size
+ */
+struct idpf_rx_queue {
+	union {
+		union virtchnl2_rx_desc *rx;
+		struct virtchnl2_singleq_rx_buf_desc *single_buf;
+
+		void *desc_ring;
+	};
+	union {
+		struct {
+			struct idpf_bufq_set *bufq_sets;
+			struct napi_struct *napi;
+		};
+		struct {
+			struct idpf_rx_buf *rx_buf;
+			struct page_pool *pp;
+		};
+	};
+	struct net_device *netdev;
+	void __iomem *tail;
+
+	DECLARE_BITMAP(flags, __IDPF_Q_FLAGS_NBITS);
+	u16 idx;
+	u16 desc_count;
+	u16 next_to_use;
+	u16 next_to_clean;
+	u16 next_to_alloc;
+
+	u32 rxdids;
+
+	const struct idpf_rx_ptype_decoded *rx_ptype_lkup;
+	struct sk_buff *skb;
+
+	struct u64_stats_sync stats_sync;
+	struct idpf_rx_queue_stats q_stats;
+
+	/* Slowpath */
+	u32 q_id;
+	u32 size;
+	dma_addr_t dma;
+
+	struct idpf_q_vector *q_vector;
+
+	u16 rx_buffer_low_watermark;
+	u16 rx_hbuf_size;
+	u16 rx_buf_size;
+	u16 rx_max_pkt_size;
+} ____cacheline_aligned;
+
+/**
+ * struct idpf_tx_queue - software structure representing a transmit queue
+ * @base_tx: base Tx descriptor array
+ * @base_ctx: base Tx context descriptor array
+ * @flex_tx: flex Tx descriptor array
+ * @flex_ctx: flex Tx context descriptor array
+ * @desc_ring: virtual descriptor ring address
+ * @tx_buf: See struct idpf_tx_buf
+ * @txq_grp: See struct idpf_txq_group
+ * @dev: Device back pointer for DMA mapping
+ * @tail: Tail offset. Used for both queue models single and split
  * @flags: See enum idpf_queue_flags_t
- * @q_stats: See union idpf_queue_stats
- * @stats_sync: See struct u64_stats_sync
+ * @idx: For TX queue, it is used as index to map between TX queue group and
+ *	 hot path TX pointers stored in vport. Used in both singleq/splitq.
+ * @desc_count: Number of descriptors
+ * @next_to_use: Next descriptor to use
+ * @next_to_clean: Next descriptor to clean
+ * @netdev: &net_device corresponding to this queue
  * @cleaned_bytes: Splitq only, TXQ only: When a TX completion is received on
  *		   the TX completion queue, it can be for any TXQ associated
  *		   with that completion queue. This means we can clean up to
@@ -625,34 +715,10 @@ union idpf_queue_stats {
  *		   that single call to clean the completion queue. By doing so,
  *		   we can update BQL with aggregate cleaned stats for each TXQ
  *		   only once at the end of the cleaning routine.
+ * @clean_budget: singleq only, queue cleaning budget
  * @cleaned_pkts: Number of packets cleaned for the above said case
- * @rx_hsplit_en: RX headsplit enable
- * @rx_hbuf_size: Header buffer size
- * @rx_buf_size: Buffer size
- * @rx_max_pkt_size: RX max packet size
- * @rx_buf_stride: RX buffer stride
- * @rx_buffer_low_watermark: RX buffer low watermark
- * @rxdids: Supported RX descriptor ids
- * @q_vector: Backreference to associated vector
- * @size: Length of descriptor ring in bytes
- * @dma: Physical address of ring
- * @rx: universal receive descriptor array
- * @single_buf: Rx buffer descriptor array in singleq
- * @split_buf: Rx buffer descriptor array in splitq
- * @base_tx: basic Tx descriptor array
- * @base_ctx: basic Tx context descriptor array
- * @flex_tx: flex Tx descriptor array
- * @flex_ctx: flex Tx context descriptor array
- * @comp: completion descriptor array
- * @desc_ring: virtual descriptor ring address
  * @tx_max_bufs: Max buffers that can be transmitted with scatter-gather
  * @tx_min_pkt_len: Min supported packet length
- * @num_completions: Only relevant for TX completion queue. It tracks the
- *		     number of completions received to compare against the
- *		     number of completions pending, as accumulated by the
- *		     TX queues.
- * @buf_stack: Stack of empty buffers to store buffer info for out of order
- *	       buffer completions. See struct idpf_buf_lifo.
  * @compl_tag_bufid_m: Completion tag buffer id mask
  * @compl_tag_gen_s: Completion tag generation bit
  *	The format of the completion tag will change based on the TXQ
@@ -676,120 +742,188 @@ union idpf_queue_stats {
  *	This gives us 8*8160 = 65280 possible unique values.
  * @compl_tag_cur_gen: Used to keep track of current completion tag generation
  * @compl_tag_gen_max: To determine when compl_tag_cur_gen should be reset
- * @sched_buf_hash: Hash table to stores buffers
+ * @stash: Tx buffer stash for Flow-based scheduling mode
+ * @stats_sync: See struct u64_stats_sync
+ * @q_stats: See union idpf_tx_queue_stats
+ * @q_id: Queue id
+ * @size: Length of descriptor ring in bytes
+ * @dma: Physical address of ring
+ * @q_vector: Backreference to associated vector
  */
-struct idpf_queue {
-	struct device *dev;
-	struct idpf_vport *vport;
+struct idpf_tx_queue {
 	union {
-		struct idpf_txq_group *txq_grp;
-		struct idpf_rxq_group *rxq_grp;
+		struct idpf_base_tx_desc *base_tx;
+		struct idpf_base_tx_ctx_desc *base_ctx;
+		union idpf_tx_flex_desc *flex_tx;
+		struct idpf_flex_tx_ctx_desc *flex_ctx;
+
+		void *desc_ring;
 	};
-	u16 idx;
+	struct idpf_tx_buf *tx_buf;
+	struct idpf_txq_group *txq_grp;
+	struct device *dev;
 	void __iomem *tail;
-	union {
-		struct idpf_tx_buf *tx_buf;
-		struct {
-			struct idpf_rx_buf *buf;
-			dma_addr_t hdr_buf_pa;
-			void *hdr_buf_va;
-		} rx_buf;
-	};
-	struct page_pool *pp;
-	struct sk_buff *skb;
-	u16 q_type;
-	u32 q_id;
-	u16 desc_count;
 
+	DECLARE_BITMAP(flags, __IDPF_Q_FLAGS_NBITS);
+	u16 idx;
+	u16 desc_count;
 	u16 next_to_use;
 	u16 next_to_clean;
-	u16 next_to_alloc;
-	DECLARE_BITMAP(flags, __IDPF_Q_FLAGS_NBITS);
 
-	union idpf_queue_stats q_stats;
-	struct u64_stats_sync stats_sync;
+	struct net_device *netdev;
 
-	u32 cleaned_bytes;
+	union {
+		u32 cleaned_bytes;
+		u32 clean_budget;
+	};
 	u16 cleaned_pkts;
 
-	bool rx_hsplit_en;
-	u16 rx_hbuf_size;
-	u16 rx_buf_size;
-	u16 rx_max_pkt_size;
-	u16 rx_buf_stride;
-	u8 rx_buffer_low_watermark;
-	u64 rxdids;
-	struct idpf_q_vector *q_vector;
-	unsigned int size;
+	u16 tx_max_bufs;
+	u16 tx_min_pkt_len;
+
+	u16 compl_tag_bufid_m;
+	u16 compl_tag_gen_s;
+
+	u16 compl_tag_cur_gen;
+	u16 compl_tag_gen_max;
+
+	struct idpf_txq_stash *stash;
+
+	struct u64_stats_sync stats_sync;
+	struct idpf_tx_queue_stats q_stats;
+
+	/* Slowpath */
+	u32 q_id;
+	u32 size;
 	dma_addr_t dma;
-	union {
-		union virtchnl2_rx_desc *rx;
 
-		struct virtchnl2_singleq_rx_buf_desc *single_buf;
-		struct virtchnl2_splitq_rx_buf_desc *split_buf;
+	struct idpf_q_vector *q_vector;
+} ____cacheline_aligned;
 
-		struct idpf_base_tx_desc *base_tx;
-		struct idpf_base_tx_ctx_desc *base_ctx;
-		union idpf_tx_flex_desc *flex_tx;
-		struct idpf_flex_tx_ctx_desc *flex_ctx;
+/**
+ * struct idpf_buf_queue - software structure representing a buffer queue
+ * @split_buf: buffer descriptor array
+ * @rx_buf: Struct with RX buffer related members
+ * @rx_buf.buf: See struct idpf_rx_buf
+ * @rx_buf.hdr_buf_pa: DMA handle
+ * @rx_buf.hdr_buf_va: Virtual address
+ * @pp: Page pool pointer
+ * @tail: Tail offset
+ * @flags: See enum idpf_queue_flags_t
+ * @desc_count: Number of descriptors
+ * @next_to_use: Next descriptor to use
+ * @next_to_clean: Next descriptor to clean
+ * @next_to_alloc: RX buffer to allocate at
+ * @q_id: Queue id
+ * @size: Length of descriptor ring in bytes
+ * @dma: Physical address of ring
+ * @q_vector: Backreference to associated vector
+ * @rx_buffer_low_watermark: RX buffer low watermark
+ * @rx_hbuf_size: Header buffer size
+ * @rx_buf_size: Buffer size
+ */
+struct idpf_buf_queue {
+	struct virtchnl2_splitq_rx_buf_desc *split_buf;
+	struct {
+		struct idpf_rx_buf *buf;
+		dma_addr_t hdr_buf_pa;
+		void *hdr_buf_va;
+	} rx_buf;
+	struct page_pool *pp;
+	void __iomem *tail;
 
-		struct idpf_splitq_tx_compl_desc *comp;
+	DECLARE_BITMAP(flags, __IDPF_Q_FLAGS_NBITS);
+	u16 desc_count;
+	u16 next_to_use;
+	u16 next_to_clean;
+	u16 next_to_alloc;
 
-		void *desc_ring;
-	};
+	/* Slowpath */
+	u32 q_id;
+	u32 size;
+	dma_addr_t dma;
 
-	u16 tx_max_bufs;
-	u8 tx_min_pkt_len;
+	struct idpf_q_vector *q_vector;
 
-	u32 num_completions;
+	u16 rx_buffer_low_watermark;
+	u16 rx_hbuf_size;
+	u16 rx_buf_size;
+} ____cacheline_aligned;
 
-	struct idpf_buf_lifo buf_stack;
+/**
+ * struct idpf_compl_queue - software structure representing a completion queue
+ * @comp: completion descriptor array
+ * @txq_grp: See struct idpf_txq_group
+ * @flags: See enum idpf_queue_flags_t
+ * @desc_count: Number of descriptors
+ * @next_to_use: Next descriptor to use. Relevant in both split & single txq
+ *		 and bufq.
+ * @next_to_clean: Next descriptor to clean
+ * @netdev: &net_device corresponding to this queue
+ * @clean_budget: queue cleaning budget
+ * @num_completions: Only relevant for TX completion queue. It tracks the
+ *		     number of completions received to compare against the
+ *		     number of completions pending, as accumulated by the
+ *		     TX queues.
+ * @q_id: Queue id
+ * @size: Length of descriptor ring in bytes
+ * @dma: Physical address of ring
+ * @q_vector: Backreference to associated vector
+ */
+struct idpf_compl_queue {
+	struct idpf_splitq_tx_compl_desc *comp;
+	struct idpf_txq_group *txq_grp;
 
-	u16 compl_tag_bufid_m;
-	u16 compl_tag_gen_s;
+	DECLARE_BITMAP(flags, __IDPF_Q_FLAGS_NBITS);
+	u16 desc_count;
+	u16 next_to_use;
+	u16 next_to_clean;
 
-	u16 compl_tag_cur_gen;
-	u16 compl_tag_gen_max;
+	struct net_device *netdev;
+	u32 clean_budget;
+	u32 num_completions;
 
-	DECLARE_HASHTABLE(sched_buf_hash, 12);
-} ____cacheline_internodealigned_in_smp;
+	/* Slowpath */
+	u32 q_id;
+	u32 size;
+	dma_addr_t dma;
+
+	struct idpf_q_vector *q_vector;
+} ____cacheline_aligned;
 
 /**
  * struct idpf_sw_queue
- * @next_to_clean: Next descriptor to clean
- * @next_to_alloc: Buffer to allocate at
- * @flags: See enum idpf_queue_flags_t
  * @ring: Pointer to the ring
+ * @flags: See enum idpf_queue_flags_t
  * @desc_count: Descriptor count
- * @dev: Device back pointer for DMA mapping
+ * @next_to_use: Buffer to allocate at
+ * @next_to_clean: Next descriptor to clean
  *
  * Software queues are used in splitq mode to manage buffers between rxq
  * producer and the bufq consumer.  These are required in order to maintain a
  * lockless buffer management system and are strictly software only constructs.
  */
 struct idpf_sw_queue {
-	u16 next_to_clean;
-	u16 next_to_alloc;
+	u32 *ring;
+
 	DECLARE_BITMAP(flags, __IDPF_Q_FLAGS_NBITS);
-	u16 *ring;
 	u16 desc_count;
-	struct device *dev;
-} ____cacheline_internodealigned_in_smp;
+	u16 next_to_use;
+	u16 next_to_clean;
+} ____cacheline_aligned;
 
 /**
  * struct idpf_rxq_set
  * @rxq: RX queue
- * @refillq0: Pointer to refill queue 0
- * @refillq1: Pointer to refill queue 1
+ * @refillq: pointers to refill queues
  *
  * Splitq only.  idpf_rxq_set associates an rxq with at an array of refillqs.
  * Each rxq needs a refillq to return used buffers back to the respective bufq.
  * Bufqs then clean these refillqs for buffers to give to hardware.
  */
 struct idpf_rxq_set {
-	struct idpf_queue rxq;
-	struct idpf_sw_queue *refillq0;
-	struct idpf_sw_queue *refillq1;
+	struct idpf_rx_queue rxq;
+	struct idpf_sw_queue *refillq[IDPF_MAX_BUFQS_PER_RXQ_GRP];
 };
 
 /**
@@ -808,7 +942,7 @@ struct idpf_rxq_set {
  * managed by at most two bufqs (depending on performance configuration).
  */
 struct idpf_bufq_set {
-	struct idpf_queue bufq;
+	struct idpf_buf_queue bufq;
 	int num_refillqs;
 	struct idpf_sw_queue *refillqs;
 };
@@ -834,7 +968,7 @@ struct idpf_rxq_group {
 	union {
 		struct {
 			u16 num_rxq;
-			struct idpf_queue *rxqs[IDPF_LARGE_MAX_Q];
+			struct idpf_rx_queue *rxqs[IDPF_LARGE_MAX_Q];
 		} singleq;
 		struct {
 			u16 num_rxq_sets;
@@ -849,6 +983,7 @@ struct idpf_rxq_group {
  * @vport: Vport back pointer
  * @num_txq: Number of TX queues associated
  * @txqs: Array of TX queue pointers
+ * @stashes: array of OOO stashes for the queues
  * @complq: Associated completion queue pointer, split queue only
  * @num_completions_pending: Total number of completions pending for the
  *			     completion queue, acculumated for all TX queues
@@ -862,9 +997,10 @@ struct idpf_txq_group {
 	struct idpf_vport *vport;
 
 	u16 num_txq;
-	struct idpf_queue *txqs[IDPF_LARGE_MAX_Q];
+	struct idpf_tx_queue *txqs[IDPF_LARGE_MAX_Q];
+	struct idpf_txq_stash *stashes;
 
-	struct idpf_queue *complq;
+	struct idpf_compl_queue *complq;
 
 	u32 num_completions_pending;
 };
@@ -1001,28 +1137,26 @@ void idpf_deinit_rss(struct idpf_vport *vport);
 int idpf_rx_bufs_init_all(struct idpf_vport *vport);
 void idpf_rx_add_frag(struct idpf_rx_buf *rx_buf, struct sk_buff *skb,
 		      unsigned int size);
-struct sk_buff *idpf_rx_construct_skb(struct idpf_queue *rxq,
+struct sk_buff *idpf_rx_construct_skb(const struct idpf_rx_queue *rxq,
 				      struct idpf_rx_buf *rx_buf,
 				      unsigned int size);
-bool idpf_init_rx_buf_hw_alloc(struct idpf_queue *rxq, struct idpf_rx_buf *buf);
-void idpf_rx_buf_hw_update(struct idpf_queue *rxq, u32 val);
-void idpf_tx_buf_hw_update(struct idpf_queue *tx_q, u32 val,
+void idpf_tx_buf_hw_update(struct idpf_tx_queue *tx_q, u32 val,
 			   bool xmit_more);
 unsigned int idpf_size_to_txd_count(unsigned int size);
-netdev_tx_t idpf_tx_drop_skb(struct idpf_queue *tx_q, struct sk_buff *skb);
-void idpf_tx_dma_map_error(struct idpf_queue *txq, struct sk_buff *skb,
+netdev_tx_t idpf_tx_drop_skb(struct idpf_tx_queue *tx_q, struct sk_buff *skb);
+void idpf_tx_dma_map_error(struct idpf_tx_queue *txq, struct sk_buff *skb,
 			   struct idpf_tx_buf *first, u16 ring_idx);
-unsigned int idpf_tx_desc_count_required(struct idpf_queue *txq,
+unsigned int idpf_tx_desc_count_required(struct idpf_tx_queue *txq,
 					 struct sk_buff *skb);
 bool idpf_chk_linearize(struct sk_buff *skb, unsigned int max_bufs,
 			unsigned int count);
-int idpf_tx_maybe_stop_common(struct idpf_queue *tx_q, unsigned int size);
+int idpf_tx_maybe_stop_common(struct idpf_tx_queue *tx_q, unsigned int size);
 void idpf_tx_timeout(struct net_device *netdev, unsigned int txqueue);
 netdev_tx_t idpf_tx_splitq_start(struct sk_buff *skb,
 				 struct net_device *netdev);
 netdev_tx_t idpf_tx_singleq_start(struct sk_buff *skb,
 				  struct net_device *netdev);
-bool idpf_rx_singleq_buf_hw_alloc_all(struct idpf_queue *rxq,
+bool idpf_rx_singleq_buf_hw_alloc_all(struct idpf_rx_queue *rxq,
 				      u16 cleaned_count);
 int idpf_tso(struct sk_buff *skb, struct idpf_tx_offload_params *off);
 
diff --git a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
index a5f9b7a5effe7..44602b87cd411 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
@@ -750,7 +750,7 @@ static int idpf_wait_for_marker_event(struct idpf_vport *vport)
 	int i;
 
 	for (i = 0; i < vport->num_txq; i++)
-		set_bit(__IDPF_Q_SW_MARKER, vport->txqs[i]->flags);
+		idpf_queue_set(SW_MARKER, vport->txqs[i]);
 
 	event = wait_event_timeout(vport->sw_marker_wq,
 				   test_and_clear_bit(IDPF_VPORT_SW_MARKER,
@@ -758,7 +758,7 @@ static int idpf_wait_for_marker_event(struct idpf_vport *vport)
 				   msecs_to_jiffies(500));
 
 	for (i = 0; i < vport->num_txq; i++)
-		clear_bit(__IDPF_Q_POLL_MODE, vport->txqs[i]->flags);
+		idpf_queue_clear(POLL_MODE, vport->txqs[i]);
 
 	if (event)
 		return 0;
@@ -1092,7 +1092,6 @@ static int __idpf_queue_reg_init(struct idpf_vport *vport, u32 *reg_vals,
 				 int num_regs, u32 q_type)
 {
 	struct idpf_adapter *adapter = vport->adapter;
-	struct idpf_queue *q;
 	int i, j, k = 0;
 
 	switch (q_type) {
@@ -1111,6 +1110,8 @@ static int __idpf_queue_reg_init(struct idpf_vport *vport, u32 *reg_vals,
 			u16 num_rxq = rx_qgrp->singleq.num_rxq;
 
 			for (j = 0; j < num_rxq && k < num_regs; j++, k++) {
+				struct idpf_rx_queue *q;
+
 				q = rx_qgrp->singleq.rxqs[j];
 				q->tail = idpf_get_reg_addr(adapter,
 							    reg_vals[k]);
@@ -1123,6 +1124,8 @@ static int __idpf_queue_reg_init(struct idpf_vport *vport, u32 *reg_vals,
 			u8 num_bufqs = vport->num_bufqs_per_qgrp;
 
 			for (j = 0; j < num_bufqs && k < num_regs; j++, k++) {
+				struct idpf_buf_queue *q;
+
 				q = &rx_qgrp->splitq.bufq_sets[j].bufq;
 				q->tail = idpf_get_reg_addr(adapter,
 							    reg_vals[k]);
@@ -1449,19 +1452,19 @@ static int idpf_send_config_tx_queues_msg(struct idpf_vport *vport)
 			qi[k].model =
 				cpu_to_le16(vport->txq_model);
 			qi[k].type =
-				cpu_to_le32(tx_qgrp->txqs[j]->q_type);
+				cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_TX);
 			qi[k].ring_len =
 				cpu_to_le16(tx_qgrp->txqs[j]->desc_count);
 			qi[k].dma_ring_addr =
 				cpu_to_le64(tx_qgrp->txqs[j]->dma);
 			if (idpf_is_queue_model_split(vport->txq_model)) {
-				struct idpf_queue *q = tx_qgrp->txqs[j];
+				struct idpf_tx_queue *q = tx_qgrp->txqs[j];
 
 				qi[k].tx_compl_queue_id =
 					cpu_to_le16(tx_qgrp->complq->q_id);
 				qi[k].relative_queue_id = cpu_to_le16(j);
 
-				if (test_bit(__IDPF_Q_FLOW_SCH_EN, q->flags))
+				if (idpf_queue_has(FLOW_SCH_EN, q))
 					qi[k].sched_mode =
 					cpu_to_le16(VIRTCHNL2_TXQ_SCHED_MODE_FLOW);
 				else
@@ -1478,11 +1481,11 @@ static int idpf_send_config_tx_queues_msg(struct idpf_vport *vport)
 
 		qi[k].queue_id = cpu_to_le32(tx_qgrp->complq->q_id);
 		qi[k].model = cpu_to_le16(vport->txq_model);
-		qi[k].type = cpu_to_le32(tx_qgrp->complq->q_type);
+		qi[k].type = cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_TX_COMPLETION);
 		qi[k].ring_len = cpu_to_le16(tx_qgrp->complq->desc_count);
 		qi[k].dma_ring_addr = cpu_to_le64(tx_qgrp->complq->dma);
 
-		if (test_bit(__IDPF_Q_FLOW_SCH_EN, tx_qgrp->complq->flags))
+		if (idpf_queue_has(FLOW_SCH_EN, tx_qgrp->complq))
 			sched_mode = VIRTCHNL2_TXQ_SCHED_MODE_FLOW;
 		else
 			sched_mode = VIRTCHNL2_TXQ_SCHED_MODE_QUEUE;
@@ -1567,17 +1570,18 @@ static int idpf_send_config_rx_queues_msg(struct idpf_vport *vport)
 			goto setup_rxqs;
 
 		for (j = 0; j < vport->num_bufqs_per_qgrp; j++, k++) {
-			struct idpf_queue *bufq =
+			struct idpf_buf_queue *bufq =
 				&rx_qgrp->splitq.bufq_sets[j].bufq;
 
 			qi[k].queue_id = cpu_to_le32(bufq->q_id);
 			qi[k].model = cpu_to_le16(vport->rxq_model);
-			qi[k].type = cpu_to_le32(bufq->q_type);
+			qi[k].type =
+				cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_RX_BUFFER);
 			qi[k].desc_ids = cpu_to_le64(VIRTCHNL2_RXDID_2_FLEX_SPLITQ_M);
 			qi[k].ring_len = cpu_to_le16(bufq->desc_count);
 			qi[k].dma_ring_addr = cpu_to_le64(bufq->dma);
 			qi[k].data_buffer_size = cpu_to_le32(bufq->rx_buf_size);
-			qi[k].buffer_notif_stride = bufq->rx_buf_stride;
+			qi[k].buffer_notif_stride = IDPF_RX_BUF_STRIDE;
 			qi[k].rx_buffer_low_watermark =
 				cpu_to_le16(bufq->rx_buffer_low_watermark);
 			if (idpf_is_feature_ena(vport, NETIF_F_GRO_HW))
@@ -1591,7 +1595,7 @@ static int idpf_send_config_rx_queues_msg(struct idpf_vport *vport)
 			num_rxq = rx_qgrp->singleq.num_rxq;
 
 		for (j = 0; j < num_rxq; j++, k++) {
-			struct idpf_queue *rxq;
+			struct idpf_rx_queue *rxq;
 
 			if (!idpf_is_queue_model_split(vport->rxq_model)) {
 				rxq = rx_qgrp->singleq.rxqs[j];
@@ -1599,11 +1603,11 @@ static int idpf_send_config_rx_queues_msg(struct idpf_vport *vport)
 			}
 			rxq = &rx_qgrp->splitq.rxq_sets[j]->rxq;
 			qi[k].rx_bufq1_id =
-			  cpu_to_le16(rxq->rxq_grp->splitq.bufq_sets[0].bufq.q_id);
+			  cpu_to_le16(rxq->bufq_sets[0].bufq.q_id);
 			if (vport->num_bufqs_per_qgrp > IDPF_SINGLE_BUFQ_PER_RXQ_GRP) {
 				qi[k].bufq2_ena = IDPF_BUFQ2_ENA;
 				qi[k].rx_bufq2_id =
-				  cpu_to_le16(rxq->rxq_grp->splitq.bufq_sets[1].bufq.q_id);
+				  cpu_to_le16(rxq->bufq_sets[1].bufq.q_id);
 			}
 			qi[k].rx_buffer_low_watermark =
 				cpu_to_le16(rxq->rx_buffer_low_watermark);
@@ -1611,7 +1615,7 @@ static int idpf_send_config_rx_queues_msg(struct idpf_vport *vport)
 				qi[k].qflags |= cpu_to_le16(VIRTCHNL2_RXQ_RSC);
 
 common_qi_fields:
-			if (rxq->rx_hsplit_en) {
+			if (idpf_queue_has(HSPLIT_EN, rxq)) {
 				qi[k].qflags |=
 					cpu_to_le16(VIRTCHNL2_RXQ_HDR_SPLIT);
 				qi[k].hdr_buffer_size =
@@ -1619,7 +1623,7 @@ static int idpf_send_config_rx_queues_msg(struct idpf_vport *vport)
 			}
 			qi[k].queue_id = cpu_to_le32(rxq->q_id);
 			qi[k].model = cpu_to_le16(vport->rxq_model);
-			qi[k].type = cpu_to_le32(rxq->q_type);
+			qi[k].type = cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_RX);
 			qi[k].ring_len = cpu_to_le16(rxq->desc_count);
 			qi[k].dma_ring_addr = cpu_to_le64(rxq->dma);
 			qi[k].max_pkt_size = cpu_to_le32(rxq->rx_max_pkt_size);
@@ -1706,7 +1710,7 @@ static int idpf_send_ena_dis_queues_msg(struct idpf_vport *vport, bool ena)
 		struct idpf_txq_group *tx_qgrp = &vport->txq_grps[i];
 
 		for (j = 0; j < tx_qgrp->num_txq; j++, k++) {
-			qc[k].type = cpu_to_le32(tx_qgrp->txqs[j]->q_type);
+			qc[k].type = cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_TX);
 			qc[k].start_queue_id = cpu_to_le32(tx_qgrp->txqs[j]->q_id);
 			qc[k].num_queues = cpu_to_le32(IDPF_NUMQ_PER_CHUNK);
 		}
@@ -1720,7 +1724,7 @@ static int idpf_send_ena_dis_queues_msg(struct idpf_vport *vport, bool ena)
 	for (i = 0; i < vport->num_txq_grp; i++, k++) {
 		struct idpf_txq_group *tx_qgrp = &vport->txq_grps[i];
 
-		qc[k].type = cpu_to_le32(tx_qgrp->complq->q_type);
+		qc[k].type = cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_TX_COMPLETION);
 		qc[k].start_queue_id = cpu_to_le32(tx_qgrp->complq->q_id);
 		qc[k].num_queues = cpu_to_le32(IDPF_NUMQ_PER_CHUNK);
 	}
@@ -1741,12 +1745,12 @@ static int idpf_send_ena_dis_queues_msg(struct idpf_vport *vport, bool ena)
 				qc[k].start_queue_id =
 				cpu_to_le32(rx_qgrp->splitq.rxq_sets[j]->rxq.q_id);
 				qc[k].type =
-				cpu_to_le32(rx_qgrp->splitq.rxq_sets[j]->rxq.q_type);
+				cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_RX);
 			} else {
 				qc[k].start_queue_id =
 				cpu_to_le32(rx_qgrp->singleq.rxqs[j]->q_id);
 				qc[k].type =
-				cpu_to_le32(rx_qgrp->singleq.rxqs[j]->q_type);
+				cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_RX);
 			}
 			qc[k].num_queues = cpu_to_le32(IDPF_NUMQ_PER_CHUNK);
 		}
@@ -1761,10 +1765,11 @@ static int idpf_send_ena_dis_queues_msg(struct idpf_vport *vport, bool ena)
 		struct idpf_rxq_group *rx_qgrp = &vport->rxq_grps[i];
 
 		for (j = 0; j < vport->num_bufqs_per_qgrp; j++, k++) {
-			struct idpf_queue *q;
+			const struct idpf_buf_queue *q;
 
 			q = &rx_qgrp->splitq.bufq_sets[j].bufq;
-			qc[k].type = cpu_to_le32(q->q_type);
+			qc[k].type =
+				cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_RX_BUFFER);
 			qc[k].start_queue_id = cpu_to_le32(q->q_id);
 			qc[k].num_queues = cpu_to_le32(IDPF_NUMQ_PER_CHUNK);
 		}
@@ -1849,7 +1854,8 @@ int idpf_send_map_unmap_queue_vector_msg(struct idpf_vport *vport, bool map)
 		struct idpf_txq_group *tx_qgrp = &vport->txq_grps[i];
 
 		for (j = 0; j < tx_qgrp->num_txq; j++, k++) {
-			vqv[k].queue_type = cpu_to_le32(tx_qgrp->txqs[j]->q_type);
+			vqv[k].queue_type =
+				cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_TX);
 			vqv[k].queue_id = cpu_to_le32(tx_qgrp->txqs[j]->q_id);
 
 			if (idpf_is_queue_model_split(vport->txq_model)) {
@@ -1879,14 +1885,15 @@ int idpf_send_map_unmap_queue_vector_msg(struct idpf_vport *vport, bool map)
 			num_rxq = rx_qgrp->singleq.num_rxq;
 
 		for (j = 0; j < num_rxq; j++, k++) {
-			struct idpf_queue *rxq;
+			struct idpf_rx_queue *rxq;
 
 			if (idpf_is_queue_model_split(vport->rxq_model))
 				rxq = &rx_qgrp->splitq.rxq_sets[j]->rxq;
 			else
 				rxq = rx_qgrp->singleq.rxqs[j];
 
-			vqv[k].queue_type = cpu_to_le32(rxq->q_type);
+			vqv[k].queue_type =
+				cpu_to_le32(VIRTCHNL2_QUEUE_TYPE_RX);
 			vqv[k].queue_id = cpu_to_le32(rxq->q_id);
 			vqv[k].vector_id = cpu_to_le16(rxq->q_vector->v_idx);
 			vqv[k].itr_idx = cpu_to_le32(rxq->q_vector->rx_itr_idx);
@@ -1975,7 +1982,7 @@ int idpf_send_disable_queues_msg(struct idpf_vport *vport)
 	 * queues virtchnl message is sent
 	 */
 	for (i = 0; i < vport->num_txq; i++)
-		set_bit(__IDPF_Q_POLL_MODE, vport->txqs[i]->flags);
+		idpf_queue_set(POLL_MODE, vport->txqs[i]);
 
 	/* schedule the napi to receive all the marker packets */
 	local_bh_disable();
@@ -3242,7 +3249,6 @@ static int __idpf_vport_queue_ids_init(struct idpf_vport *vport,
 				       int num_qids,
 				       u32 q_type)
 {
-	struct idpf_queue *q;
 	int i, j, k = 0;
 
 	switch (q_type) {
@@ -3250,11 +3256,8 @@ static int __idpf_vport_queue_ids_init(struct idpf_vport *vport,
 		for (i = 0; i < vport->num_txq_grp; i++) {
 			struct idpf_txq_group *tx_qgrp = &vport->txq_grps[i];
 
-			for (j = 0; j < tx_qgrp->num_txq && k < num_qids; j++, k++) {
+			for (j = 0; j < tx_qgrp->num_txq && k < num_qids; j++, k++)
 				tx_qgrp->txqs[j]->q_id = qids[k];
-				tx_qgrp->txqs[j]->q_type =
-					VIRTCHNL2_QUEUE_TYPE_TX;
-			}
 		}
 		break;
 	case VIRTCHNL2_QUEUE_TYPE_RX:
@@ -3268,12 +3271,13 @@ static int __idpf_vport_queue_ids_init(struct idpf_vport *vport,
 				num_rxq = rx_qgrp->singleq.num_rxq;
 
 			for (j = 0; j < num_rxq && k < num_qids; j++, k++) {
+				struct idpf_rx_queue *q;
+
 				if (idpf_is_queue_model_split(vport->rxq_model))
 					q = &rx_qgrp->splitq.rxq_sets[j]->rxq;
 				else
 					q = rx_qgrp->singleq.rxqs[j];
 				q->q_id = qids[k];
-				q->q_type = VIRTCHNL2_QUEUE_TYPE_RX;
 			}
 		}
 		break;
@@ -3282,8 +3286,6 @@ static int __idpf_vport_queue_ids_init(struct idpf_vport *vport,
 			struct idpf_txq_group *tx_qgrp = &vport->txq_grps[i];
 
 			tx_qgrp->complq->q_id = qids[k];
-			tx_qgrp->complq->q_type =
-				VIRTCHNL2_QUEUE_TYPE_TX_COMPLETION;
 		}
 		break;
 	case VIRTCHNL2_QUEUE_TYPE_RX_BUFFER:
@@ -3292,9 +3294,10 @@ static int __idpf_vport_queue_ids_init(struct idpf_vport *vport,
 			u8 num_bufqs = vport->num_bufqs_per_qgrp;
 
 			for (j = 0; j < num_bufqs && k < num_qids; j++, k++) {
+				struct idpf_buf_queue *q;
+
 				q = &rx_qgrp->splitq.bufq_sets[j].bufq;
 				q->q_id = qids[k];
-				q->q_type = VIRTCHNL2_QUEUE_TYPE_RX_BUFFER;
 			}
 		}
 		break;
-- 
2.43.0




  parent reply	other threads:[~2024-10-02 14:24 UTC|newest]

Thread overview: 647+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-02 12:51 [PATCH 6.10 000/634] 6.10.13-rc1 review Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 001/634] wifi: ath11k: use work queue to process beacon tx event Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 002/634] EDAC/synopsys: Fix error injection on Zynq UltraScale+ Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 003/634] wifi: rtw88: always wait for both firmware loading attempts Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 004/634] crypto: xor - fix template benchmarking Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 005/634] crypto: qat - disable IOV in adf_dev_stop() Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 006/634] crypto: qat - fix recovery flow for VFs Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 007/634] crypto: qat - ensure correct order in VF restarting handler Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 008/634] crypto: iaa - Fix potential use after free bug Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 009/634] ACPI: PMIC: Remove unneeded check in tps68470_pmic_opregion_probe() Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 010/634] wifi: brcmfmac: introducing fwil query functions Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 011/634] wifi: ath9k: Remove error checks when creating debugfs entries Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 012/634] wifi: ath12k: fix BSS chan info request WMI command Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 013/634] wifi: ath12k: match WMI BSS chan info structure with firmware definition Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 014/634] wifi: ath12k: fix invalid AMPDU factor calculation in ath12k_peer_assoc_h_he() Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 015/634] net: stmmac: dwmac-loongson: Init ref and PTP clocks rate Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 016/634] arm64: signal: Fix some under-bracketed UAPI macros Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 017/634] wifi: rtw89: remove unused C2H event ID RTW89_MAC_C2H_FUNC_READ_WOW_CAM to prevent out-of-bounds reading Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 018/634] wifi: rtw88: remove CPT execution branch never used Greg Kroah-Hartman
2024-10-02 12:51 ` [PATCH 6.10 019/634] RISC-V: KVM: Fix sbiret init before forwarding to userspace Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 020/634] RISC-V: KVM: Dont zero-out PMU snapshot area before freeing data Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 021/634] RISC-V: KVM: Allow legacy PMU access from guest Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 022/634] RISC-V: KVM: Fix to allow hpmcounter31 from the guest Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 023/634] mount: handle OOM on mnt_warn_timestamp_expiry Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 024/634] autofs: fix missing fput for FSCONFIG_SET_FD Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 025/634] ARM: 9410/1: vfp: Use asm volatile in fmrx/fmxr macros Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 026/634] powercap: intel_rapl: Fix off by one in get_rpi() Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 027/634] kselftest/arm64: signal: fix/refactor SVE vector length enumeration Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 028/634] arm64: smp: smp_send_stop() and crash_smp_send_stop() should try non-NMI first Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 029/634] thermal: core: Fold two functions into their respective callers Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 030/634] thermal: core: Fix rounding of delay jiffies Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 031/634] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 032/634] perf/dwc_pcie: Fix registration issue in multi PCIe controller instances Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 033/634] perf/dwc_pcie: Always register for PCIe bus notifier Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 034/634] crypto: qat - fix "Full Going True" macro definition Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 035/634] ACPI: video: force native for some T2 macbooks Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 036/634] ACPI: video: force native for Apple MacbookPro9,2 Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 037/634] wifi: mac80211: dont use rate mask for offchannel TX either Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 038/634] wifi: iwlwifi: remove AX101, AX201 and AX203 support from LNL Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 039/634] wifi: iwlwifi: config: label gl devices as discrete Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 040/634] wifi: iwlwifi: mvm: increase the time between ranging measurements Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 041/634] wifi: cfg80211: fix bug of mapping AF3x to incorrect User Priority Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 042/634] wifi: mac80211: fix the comeback long retry times Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 043/634] wifi: iwlwifi: mvm: allow ESR when we the ROC expires Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 044/634] wifi: mac80211: Check for missing VHT elements only for 5 GHz Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 045/634] ACPICA: Implement ACPI_WARNING_ONCE and ACPI_ERROR_ONCE Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 046/634] ACPICA: executer/exsystem: Dont nag user about every Stall() violating the spec Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 047/634] padata: Honor the callers alignment in case of chunk_size 0 Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 048/634] drivers/perf: hisi_pcie: Record hardware counts correctly Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 049/634] drivers/perf: hisi_pcie: Fix TLP headers bandwidth counting Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 050/634] kselftest/arm64: Actually test SME vector length changes via sigreturn Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 051/634] can: j1939: use correct function name in comment Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 052/634] ACPI: CPPC: Fix MASK_VAL() usage Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 053/634] netfilter: nf_tables: elements with timeout below CONFIG_HZ never expire Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 054/634] netfilter: nf_tables: reject element expiration with no timeout Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 055/634] netfilter: nf_tables: reject expiration higher than timeout Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 056/634] netfilter: nf_tables: remove annotation to access set timeout while holding lock Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 057/634] netfilter: nft_dynset: annotate data-races around set timeout Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 058/634] perf/arm-cmn: Refactor node ID handling. Again Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 059/634] perf/arm-cmn: Fix CCLA register offset Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 060/634] perf/arm-cmn: Ensure dtm_idx is big enough Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 061/634] cpufreq: ti-cpufreq: Introduce quirks to handle syscon fails appropriately Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 062/634] thermal: gov_bang_bang: Adjust states of all uninitialized instances Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 063/634] wifi: mt76: mt7915: fix oops on non-dbdc mt7986 Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 064/634] wifi: mt76: mt7921: fix wrong UNII-4 freq range check for the channel usage Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 065/634] wifi: mt76: mt7996: use hweight16 to get correct tx antenna Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 066/634] wifi: mt76: mt7996: fix traffic delay when switching back to working channel Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 067/634] wifi: mt76: mt7996: fix wmm set of station interface to 3 Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 068/634] wifi: mt76: mt7996: fix HE and EHT beamforming capabilities Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 069/634] wifi: mt76: mt7996: fix EHT beamforming capability check Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 070/634] x86/sgx: Fix deadlock in SGX NUMA node search Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 071/634] pm:cpupower: Add missing powercap_set_enabled() stub function Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 072/634] crypto: ccp - do not request interrupt on cmd completion when irqs disabled Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 073/634] crypto: hisilicon/hpre - mask cluster timeout error Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 074/634] crypto: hisilicon/qm - reset device before enabling it Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 075/634] crypto: hisilicon/qm - inject error before stopping queue Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 076/634] wifi: mt76: mt7996: fix handling mbss enable/disable Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 077/634] wifi: mt76: connac: fix checksum offload fields of connac3 RXD Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 078/634] wifi: mt76: mt7603: fix mixed declarations and code Greg Kroah-Hartman
2024-10-02 12:52 ` [PATCH 6.10 079/634] wifi: cfg80211: fix UBSAN noise in cfg80211_wext_siwscan() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 080/634] wifi: mt76: mt7915: fix rx filter setting for bfee functionality Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 081/634] wifi: mt76: mt7996: fix uninitialized TLV data Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 082/634] wifi: cfg80211: fix two more possible UBSAN-detected off-by-one errors Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 083/634] wifi: mac80211: use two-phase skb reclamation in ieee80211_do_stop() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 084/634] wifi: wilc1000: fix potential RCU dereference issue in wilc_parse_join_bss_param Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 085/634] Bluetooth: hci_core: Fix sending MGMT_EV_CONNECT_FAILED Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 086/634] Bluetooth: hci_sync: Ignore errors from HCI_OP_REMOTE_NAME_REQ_CANCEL Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 087/634] sock_map: Add a cond_resched() in sock_hash_free() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 088/634] net: hsr: Use the seqnr lock for frames received via interlink port Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 089/634] can: bcm: Clear bo->bcm_proc_read after remove_proc_entry() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 090/634] can: m_can: enable NAPI before enabling interrupts Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 091/634] can: m_can: m_can_close(): stop clocks after device has been shut down Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 092/634] Bluetooth: btusb: Fix not handling ZPL/short-transfer Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 093/634] bareudp: Pull inner IP header in bareudp_udp_encap_recv() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 094/634] bareudp: Pull inner IP header on xmit Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 095/634] net: enetc: Use IRQF_NO_AUTOEN flag in request_irq() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 096/634] crypto: n2 - Set err to EINVAL if snprintf fails for hmac Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 097/634] xsk: fix batch alloc API on non-coherent systems Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 098/634] r8169: disable ALDPS per default for RTL8125 Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 099/634] net: ipv6: rpl_iptunnel: Fix memory leak in rpl_input Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 100/634] net: tipc: avoid possible garbage value Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 101/634] ipv6: avoid possible NULL deref in rt6_uncached_list_flush_dev() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 102/634] ublk: move zone report data out of request pdu Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 103/634] nbd: fix race between timeout and normal completion Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 104/634] block, bfq: fix possible UAF for bfqq->bic with merge chain Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 105/634] block, bfq: choose the last bfqq from merge chain in bfq_setup_cooperator() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 106/634] block, bfq: dont break merge chain in bfq_split_bfqq() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 107/634] cachefiles: Fix non-taking of sb_writers around set/removexattr Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 108/634] nbd: correct the maximum value for discard sectors Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 109/634] erofs: fix incorrect symlink detection in fast symlink Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 110/634] erofs: tidy up `struct z_erofs_bvec` Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 111/634] erofs: handle overlapped pclusters out of crafted images properly Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 112/634] block, bfq: fix uaf for accessing waker_bfqq after splitting Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 113/634] block, bfq: fix procress reference leakage for bfqq in merge chain Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 114/634] io_uring/io-wq: do not allow pinning outside of cpuset Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 115/634] io_uring/io-wq: inherit cpuset of cgroup in io worker Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 116/634] block: fix potential invalid pointer dereference in blk_add_partition Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 117/634] spi: ppc4xx: handle irq_of_parse_and_map() errors Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 118/634] arm64: dts: exynos: exynos7885-jackpotlte: Correct RAM amount to 4GB Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 119/634] arm64: dts: mediatek: mt8186: Fix supported-hw mask for GPU OPPs Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 120/634] firmware: arm_scmi: Fix double free in OPTEE transport Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 121/634] spi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 122/634] firmware: qcom: scm: Disable SDI and write no dump to dump mode Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 123/634] regulator: Return actual error in of_regulator_bulk_get_all() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 124/634] arm64: dts: renesas: r9a08g045: Correct GICD and GICR sizes Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 125/634] arm64: dts: renesas: r9a07g043u: " Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 126/634] arm64: dts: renesas: r9a07g054: " Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 127/634] arm64: dts: renesas: r9a07g044: " Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 128/634] ARM: dts: microchip: sam9x60: Fix rtc/rtt clocks Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 129/634] arm64: tegra: Correct location of power-sensors for IGX Orin Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 130/634] arm64: dts: rockchip: Correct vendor prefix for Hardkernel ODROID-M1 Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 131/634] arm64: dts: ti: k3-j721e-sk: Fix reversed C6x carveout locations Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 132/634] arm64: dts: ti: k3-j721e-beagleboneai64: " Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 133/634] spi: bcmbca-hsspi: Fix missing pm_runtime_disable() Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 134/634] arm64: dts: qcom: x1e80100: Fix PHY for DP2 Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 135/634] ARM: dts: microchip: sama7g5: Fix RTT clock Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 136/634] ARM: dts: imx7d-zii-rmu2: fix Ethernet PHY pinctrl property Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 137/634] arm64: dts: ti: k3-am654-idk: Fix dtbs_check warning in ICSSG dmas Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 138/634] ARM: versatile: fix OF node leak in CPUs prepare Greg Kroah-Hartman
2024-10-02 12:53 ` [PATCH 6.10 139/634] reset: berlin: fix OF node leak in probe() error path Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 140/634] reset: k210: " Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 141/634] clocksource/drivers/qcom: Add missing iounmap() on errors in msm_dt_timer_init() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 142/634] arm64: dts: mediatek: mt8195: Correct clock order for dp_intf* Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 143/634] x86/mm: Use IPIs to synchronize LAM enablement Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 144/634] ASoC: rt5682s: Return devm_of_clk_add_hw_provider to transfer the error Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 145/634] ASoC: tas2781: Use of_property_read_reg() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 146/634] ASoC: tas2781-i2c: Drop weird GPIO code Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 147/634] ASoC: tas2781-i2c: Get the right GPIO line Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 148/634] selftests/ftrace: Add required dependency for kprobe tests Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 149/634] ALSA: hda: cs35l41: fix module autoloading Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 150/634] selftests/ftrace: Fix test to handle both old and new kernels Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 151/634] x86/boot/64: Strip percpu address space when setting up GDT descriptors Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 152/634] m68k: Fix kernel_clone_args.flags in m68k_clone() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 153/634] ASoC: loongson: fix error release Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 154/634] selftests/ftrace: Fix eventfs ownership testcase to find mount point Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 155/634] selftests:resctrl: Fix build failure on archs without __cpuid_count() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 156/634] hwmon: (max16065) Fix overflows seen when writing limits Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 157/634] hwmon: (max16065) Remove use of i2c_match_id() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 158/634] hwmon: (max16065) Fix alarm attributes Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 159/634] mtd: slram: insert break after errors in parsing the map Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 160/634] hwmon: (ntc_thermistor) fix module autoloading Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 161/634] power: supply: axp20x_battery: Remove design from min and max voltage Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 162/634] power: supply: max17042_battery: Fix SOC threshold calc w/ no current sense Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 163/634] fbdev: hpfb: Fix an error handling path in hpfb_dio_probe() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 164/634] iommu/amd: Handle error path in amd_iommu_probe_device() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 165/634] iommu/amd: Allocate the page table root using GFP_KERNEL Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 166/634] iommu/amd: Convert comma to semicolon Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 167/634] iommu/amd: Move allocation of the top table into v1_alloc_pgtable Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 168/634] iommu/amd: Set the pgsize_bitmap correctly Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 169/634] iommu/amd: Do not set the D bit on AMD v2 table entries Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 170/634] mtd: powernv: Add check devm_kasprintf() returned value Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 171/634] rcu/nocb: Fix RT throttling hrtimer armed from offline CPU Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 172/634] mtd: rawnand: mtk: Use for_each_child_of_node_scoped() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 173/634] mtd: rawnand: mtk: Factorize out the logic cleaning mtk chips Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 174/634] mtd: rawnand: mtk: Fix init error path Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 175/634] iommu/arm-smmu-qcom: hide last LPASS SMMU context bank from linux Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 176/634] iommu/arm-smmu-qcom: Work around SDM845 Adreno SMMU w/ 16K pages Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 177/634] iommu/arm-smmu-qcom: apply num_context_bank fixes for SDM630 / SDM660 Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 178/634] pmdomain: core: Harden inter-column space in debug summary Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 179/634] drm/stm: Fix an error handling path in stm_drm_platform_probe() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 180/634] drm/stm: ltdc: check memory returned by devm_kzalloc() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 181/634] drm/amd/display: Add null check for set_output_gamma in dcn30_set_output_transfer_func Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 182/634] drm/amdgpu: properly handle vbios fake edid sizing Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 183/634] drm/radeon: " Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 184/634] scsi: smartpqi: revert propagate-the-multipath-failure-to-SML-quickly Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 185/634] scsi: NCR5380: Check for phase match during PDMA fixup Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 186/634] drm/amd/amdgpu: Properly tune the size of struct Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 187/634] drm/rockchip: vop: Allow 4096px width scaling Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 188/634] drm/rockchip: dw_hdmi: Fix reading EDID when using a forced mode Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 189/634] drm/radeon/evergreen_cs: fix int overflow errors in cs track offsets Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 190/634] drm/bridge: lontium-lt8912b: Validate mode in drm_bridge_funcs::mode_valid() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 191/634] drm/vc4: hdmi: Handle error case of pm_runtime_resume_and_get Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 192/634] scsi: elx: libefc: Fix potential use after free in efc_nport_vport_del() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 193/634] jfs: fix out-of-bounds in dbNextAG() and diAlloc() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 194/634] drm/mediatek: Fix missing configuration flags in mtk_crtc_ddp_config() Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 195/634] drm/mediatek: Use spin_lock_irqsave() for CRTC event lock Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 196/634] powerpc/8xx: Fix initial memory mapping Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 197/634] powerpc/8xx: Fix kernel vs user address comparison Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 198/634] powerpc/vdso: Inconditionally use CFUNC macro Greg Kroah-Hartman
2024-10-02 12:54 ` [PATCH 6.10 199/634] drm/msm: Use a7xx family directly in gpu_state Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 200/634] drm/msm: Dump correct dbgahb clusters on a750 Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 201/634] drm/msm: Fix CP_BV_DRAW_STATE_ADDR name Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 202/634] drm/msm: Fix incorrect file name output in adreno_request_fw() Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 203/634] drm/msm/a5xx: disable preemption in submits by default Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 204/634] drm/msm/a5xx: properly clear preemption records on resume Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 205/634] drm/msm/a5xx: fix races in preemption evaluation stage Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 206/634] drm/msm/a5xx: workaround early ring-buffer emptiness check Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 207/634] ipmi: docs: dont advertise deprecated sysfs entries Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 208/634] drm/msm/dp: enable widebus on all relevant chipsets Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 209/634] drm/msm/dsi: correct programming sequence for SM8350 / SM8450 Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 210/634] drm/msm: fix %s null argument error Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 211/634] platform/x86: ideapad-laptop: Make the scope_guard() clear of its scope Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 212/634] kselftest: dt: Ignore nodes that have ancestors disabled Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 213/634] drivers:drm:exynos_drm_gsc:Fix wrong assignment in gsc_bind() Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 214/634] drm/amdgpu: fix invalid fence handling in amdgpu_vm_tlb_flush Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 215/634] xen: use correct end address of kernel for conflict checking Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 216/634] HID: wacom: Support sequence numbers smaller than 16-bit Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 217/634] HID: wacom: Do not warn about dropped packets for first packet Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 218/634] ata: libata: Clear DID_TIME_OUT for ATA PT commands with sense data Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 219/634] minmax: avoid overly complex min()/max() macro arguments in xen Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 220/634] xen: introduce generic helper checking for memory map conflicts Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 221/634] xen: move max_pfn in xen_memory_setup() out of function scope Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 222/634] xen: add capability to remap non-RAM pages to different PFNs Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 223/634] xen: tolerate ACPI NVS memory overlapping with Xen allocated memory Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 224/634] xen/swiotlb: add alignment check for dma buffers Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 225/634] xen/swiotlb: fix allocated size Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 226/634] tpm: Clean up TPM space after command failure Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 227/634] sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 228/634] bpf, x64: Fix tailcall hierarchy Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 229/634] bpf, arm64: " Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 230/634] bpf, lsm: Add check for BPF LSM return value Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 231/634] bpf: Fix compare error in function retval_range_within Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 232/634] selftests/bpf: Workaround strict bpf_lsm return value check Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 233/634] selftests/bpf: Fix error linking uprobe_multi on mips Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 234/634] selftests/bpf: Fix wrong binary in Makefile log output Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 235/634] tools/runqslower: Fix LDFLAGS and add LDLIBS support Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 236/634] bpf: Fail verification for sign-extension of packet data/data_end/data_meta Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 237/634] selftests/bpf: Use pid_t consistently in test_progs.c Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 238/634] selftests/bpf: Fix compile error from rlim_t in sk_storage_map.c Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 239/634] selftests/bpf: Fix error compiling bpf_iter_setsockopt.c with musl libc Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 240/634] selftests/bpf: Drop unneeded error.h includes Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 241/634] selftests/bpf: Fix missing ARRAY_SIZE() definition in bench.c Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 242/634] selftests/bpf: Fix missing UINT_MAX definitions in benchmarks Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 243/634] selftests/bpf: Fix missing BUILD_BUG_ON() declaration Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 244/634] selftests/bpf: Fix include of <sys/fcntl.h> Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 245/634] selftests/bpf: Fix compiling parse_tcp_hdr_opt.c with musl-libc Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 246/634] selftests/bpf: Fix compiling kfree_skb.c " Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 247/634] selftests/bpf: Fix compiling flow_dissector.c " Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 248/634] selftests/bpf: Fix compiling tcp_rtt.c " Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 249/634] selftests/bpf: Fix compiling core_reloc.c " Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 250/634] selftests/bpf: Fix errors compiling lwt_redirect.c with musl libc Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 251/634] selftests/bpf: Fix errors compiling decap_sanity.c " Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 252/634] selftests/bpf: Fix errors compiling crypto_sanity.c " Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 253/634] selftests/bpf: Fix errors compiling cg_storage_multi.h " Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 254/634] libbpf: Dont take direct pointers into BTF data from st_ops Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 255/634] selftests/bpf: Fix arg parsing in veristat, test_progs Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 256/634] selftests/bpf: Fix error compiling test_lru_map.c Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 257/634] selftests/bpf: Fix C++ compile error from missing _Bool type Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 258/634] selftests/bpf: Fix redefinition errors compiling lwt_reroute.c Greg Kroah-Hartman
2024-10-02 12:55 ` [PATCH 6.10 259/634] selftests/bpf: Fix compile if backtrace support missing in libc Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 260/634] selftests/bpf: Fix error compiling tc_redirect.c with musl libc Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 261/634] samples/bpf: Fix compilation errors with cf-protection option Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 262/634] selftests/bpf: Support checks against a regular expression Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 263/634] selftests/bpf: no need to track next_match_pos in struct test_loader Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 264/634] selftests/bpf: extract test_loader->expect_msgs as a data structure Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 265/634] selftests/bpf: allow checking xlated programs in verifier_* tests Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 266/634] selftests/bpf: __arch_* macro to limit test cases to specific archs Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 267/634] selftests/bpf: fix to avoid __msg tag de-duplication by clang Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 268/634] bpf: correctly handle malformed BPF_CORE_TYPE_ID_LOCAL relos Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 269/634] selftests/bpf: Fix incorrect parameters in NULL pointer checking Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 270/634] libbpf: Fix bpf_object__open_skeleton()s mishandling of options Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 271/634] s390/ap: Fix deadlock caused by recursive lock of the AP bus scan mutex Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 272/634] xz: cleanup CRC32 edits from 2018 Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 273/634] kthread: fix task state in kthread worker if being frozen Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 274/634] ext4: clear EXT4_GROUP_INFO_WAS_TRIMMED_BIT even mount with discard Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 275/634] sched/deadline: Fix schedstats vs deadline servers Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 276/634] smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 277/634] ext4: avoid buffer_head leak in ext4_mark_inode_used() Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 278/634] ext4: avoid potential buffer_head leak in __ext4_new_inode() Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 279/634] ext4: avoid negative min_clusters in find_group_orlov() Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 280/634] ext4: return error on ext4_find_inline_entry Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 281/634] ext4: avoid OOB when system.data xattr changes underneath the filesystem Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 282/634] ext4: check stripe size compatibility on remount as well Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 283/634] sched/numa: Fix the vma scan starving issue Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 284/634] nilfs2: fix potential null-ptr-deref in nilfs_btree_insert() Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 285/634] nilfs2: determine empty node blocks as corrupted Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 286/634] nilfs2: fix potential oob read in nilfs_btree_check_delete() Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 287/634] sched/pelt: Use rq_clock_task() for hw_pressure Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 288/634] bpf: Fix bpf_strtol and bpf_strtoul helpers for 32bit Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 289/634] bpf: Fix helper writes to read-only maps Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 290/634] bpf: Improve check_raw_mode_ok test for MEM_UNINIT-tagged types Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 291/634] bpf: Zero former ARG_PTR_TO_{LONG,INT} args in case of error Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 292/634] perf scripts python cs-etm: Restore first sample log in verbose mode Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 293/634] perf mem: Free the allocated sort string, fixing a leak Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 294/634] perf callchain: Fix stitch LBR memory leaks Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 295/634] perf lock contention: Change stack_id type to s32 Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 296/634] perf inject: Fix leader sampling inserting additional samples Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 297/634] perf report: Fix --total-cycles --stdio output error Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 298/634] perf build: Fix up broken capstone feature detection fast path Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 299/634] perf sched timehist: Fix missing free of session in perf_sched__timehist() Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 300/634] perf stat: Display iostat headers correctly Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 301/634] perf dwarf-aux: Check allowed location expressions when collecting variables Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 302/634] perf annotate-data: Fix off-by-one in location range check Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 303/634] perf dwarf-aux: Handle bitfield members from pointer access Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 304/634] perf sched timehist: Fixed timestamp error when unable to confirm event sched_in time Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 305/634] perf time-utils: Fix 32-bit nsec parsing Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 306/634] perf mem: Check mem_events for all eligible PMUs Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 307/634] perf mem: Fix missed p-core mem events on ADL and RPL Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 308/634] clk: imx: clk-audiomix: Correct parent clock for earc_phy and audpll Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 309/634] clk: imx: imx6ul: fix default parent for enet*_ref_sel Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 310/634] clk: imx: composite-8m: Enable gate clk with mcore_booted Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 311/634] clk: imx: composite-93: keep root clock on when mcore enabled Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 312/634] clk: imx: composite-7ulp: Check the PCC present bit Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 313/634] clk: imx: fracn-gppll: fix fractional part of PLL getting lost Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 314/634] clk: imx: imx8mp: fix clock tree update of TF-A managed clocks Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 315/634] clk: imx: imx8qxp: Register dc0_bypass0_clk before disp clk Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 316/634] clk: imx: imx8qxp: Parent should be initialized earlier than the clock Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 317/634] quota: avoid missing put_quota_format when DQUOT_SUSPENDED is passed Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 318/634] remoteproc: imx_rproc: Correct ddr alias for i.MX8M Greg Kroah-Hartman
2024-10-02 12:56 ` [PATCH 6.10 319/634] remoteproc: imx_rproc: Initialize workqueue earlier Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 320/634] clk: rockchip: Set parent rate for DCLK_VOP clock on RK3228 Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 321/634] clk: qcom: dispcc-sm8550: fix several supposed typos Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 322/634] clk: qcom: dispcc-sm8550: use rcg2_ops for mdss_dptx1_aux_clk_src Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 323/634] clk: qcom: dispcc-sm8650: Update the GDSC flags Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 324/634] clk: qcom: dispcc-sm8550: use rcg2_shared_ops for ESC RCGs Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 325/634] leds: bd2606mvv: Fix device child node usage in bd2606mvv_probe() Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 326/634] pinctrl: ti: iodelay: Use scope based of_node_put() cleanups Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 327/634] pinctrl: ti: ti-iodelay: Fix some error handling paths Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 328/634] phy: phy-rockchip-samsung-hdptx: Explicitly include pm_runtime.h Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 329/634] Input: ilitek_ts_i2c - avoid wrong input subsystem sync Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 330/634] Input: ilitek_ts_i2c - add report id message validation Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 331/634] drivers: media: dvb-frontends/rtl2832: fix an out-of-bounds write error Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 332/634] drivers: media: dvb-frontends/rtl2830: " Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 333/634] PCI: Wait for Link before restoring Downstream Buses Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 334/634] firewire: core: correct range of block for case of switch statement Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 335/634] PCI: keystone: Fix if-statement expression in ks_pcie_quirk() Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 336/634] media: staging: media: starfive: camss: Drop obsolete return value documentation Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 337/634] clk: qcom: ipq5332: Register gcc_qdss_tsctr_clk_src Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 338/634] clk: qcom: dispcc-sm8250: use special function for Lucid 5LPE PLL Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 339/634] leds: leds-pca995x: Add support for NXP PCA9956B Greg Kroah-Hartman
2024-10-02 14:13   ` Marek Vasut
2024-10-02 12:57 ` [PATCH 6.10 340/634] leds: pca995x: Use device_for_each_child_node() to access device child nodes Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 341/634] leds: pca995x: Fix device child node usage in pca995x_probe() Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 342/634] x86/PCI: Check pcie_find_root_port() return for NULL Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 343/634] nvdimm: Fix devs leaks in scan_labels() Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 344/634] PCI: xilinx-nwl: Fix register misspelling Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 345/634] PCI: xilinx-nwl: Clean up clock on probe failure/removal Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 346/634] leds: gpio: Set num_leds after allocation Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 347/634] media: platform: rzg2l-cru: rzg2l-csi2: Add missing MODULE_DEVICE_TABLE Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 348/634] RDMA/iwcm: Fix WARNING:at_kernel/workqueue.c:#check_flush_dependency Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 349/634] pinctrl: single: fix missing error code in pcs_probe() Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 350/634] clk: at91: sama7g5: Allocate only the needed amount of memory for PLLs Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 351/634] iommufd/selftest: Fix buffer read overrrun in the dirty test Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 352/634] media: mediatek: vcodec: Fix H264 multi stateless decoder smatch warning Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 353/634] media: mediatek: vcodec: Fix VP8 " Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 354/634] media: mediatek: vcodec: Fix H264 " Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 355/634] RDMA/rtrs: Reset hb_missed_cnt after receiving other traffic from peer Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 356/634] RDMA/rtrs-clt: Reset cid to con_num - 1 to stay in bounds Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 357/634] clk: ti: dra7-atl: Fix leak of of_nodes Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 358/634] clk: starfive: Use pm_runtime_resume_and_get to fix pm_runtime_get_sync() usage Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 359/634] clk: rockchip: rk3588: Fix 32k clock name for pmu_24m_32k_100m_src_p Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 360/634] nfsd: remove unneeded EEXIST error check in nfsd_do_file_acquire Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 361/634] nfsd: fix refcount leak when file is unhashed after being found Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 362/634] pinctrl: mvebu: Fix devinit_dove_pinctrl_probe function Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 363/634] IB/core: Fix ib_cache_setup_one error flow cleanup Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 364/634] dt-bindings: PCI: layerscape-pci: Replace fsl,lx2160a-pcie with fsl,lx2160ar2-pcie Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 365/634] iommufd: Check the domain owner of the parent before creating a nesting domain Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 366/634] PCI: kirin: Fix buffer overflow in kirin_pcie_parse_port() Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 367/634] RDMA/erdma: Return QP state in erdma_query_qp Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 368/634] RDMA/mlx5: Fix counter update on MR cache mkey creation Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 369/634] RDMA/mlx5: Limit usage of over-sized mkeys from the MR cache Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 370/634] RDMA/mlx5: Drop redundant work canceling from clean_keys() Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 371/634] RDMA/mlx5: Fix MR cache temp entries cleanup Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 372/634] watchdog: imx_sc_wdt: Dont disable WDT in suspend Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 373/634] RDMA/hns: Dont modify rq next block addr in HIP09 QPC Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 374/634] RDMA/hns: Fix Use-After-Free of rsv_qp on HIP08 Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 375/634] RDMA/hns: Fix the overflow risk of hem_list_calc_ba_range() Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 376/634] RDMA/hns: Fix spin_unlock_irqrestore() called with IRQs enabled Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 377/634] RDMA/hns: Fix VF triggering PF reset in abnormal interrupt handler Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 378/634] RDMA/hns: Fix 1bit-ECC recovery address in non-4K OS Greg Kroah-Hartman
2024-10-02 12:57 ` [PATCH 6.10 379/634] RDMA/hns: Optimize hem allocation performance Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 380/634] RDMA/hns: Fix restricted __le16 degrades to integer issue Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 381/634] RDMA/mlx5: Obtain upper net device only when needed Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 382/634] PCI: qcom-ep: Enable controller resources like PHY only after refclk is available Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 383/634] riscv: Fix fp alignment bug in perf_callchain_user() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 384/634] RDMA/hns: Fix ah error counter in sw stat not increasing Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 385/634] RDMA/cxgb4: Added NULL check for lookup_atid Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 386/634] RDMA/irdma: fix error message in irdma_modify_qp_roce() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 387/634] ntb: intel: Fix the NULL vs IS_ERR() bug for debugfs_create_dir() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 388/634] ntb_perf: Fix printk format Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 389/634] ntb: Force physically contiguous allocation of rx ring buffers Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 390/634] nfsd: call cache_put if xdr_reserve_space returns NULL Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 391/634] nfsd: return -EINVAL when namelen is 0 Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 392/634] nfsd: untangle code in nfsd4_deleg_getattr_conflict() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 393/634] nfsd: fix initial getattr on write delegation Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 394/634] crypto: caam - Pad SG length when allocating hash edesc Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 395/634] crypto: powerpc/p10-aes-gcm - Disable CRYPTO_AES_GCM_P10 Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 396/634] f2fs: atomic: fix to avoid racing w/ GC Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 397/634] f2fs: reduce expensive checkpoint trigger frequency Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 398/634] f2fs: fix to avoid racing in between read and OPU dio write Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 399/634] f2fs: Create COW inode from parent dentry for atomic write Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 400/634] f2fs: fix to wait page writeback before setting gcing flag Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 401/634] f2fs: atomic: fix to truncate pagecache before on-disk metadata truncation Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 402/634] f2fs: fix to avoid use-after-free in f2fs_stop_gc_thread() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 403/634] f2fs: compress: dont redirty sparse cluster during {,de}compress Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 404/634] f2fs: prevent atomic file from being dirtied before commit Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 405/634] f2fs: get rid of online repaire on corrupted directory Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 406/634] f2fs: fix to dont set SB_RDONLY in f2fs_handle_critical_error() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 407/634] spi: airoha: fix dirmap_{read,write} operations Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 408/634] spi: airoha: fix airoha_snand_{write,read}_data data_len estimation Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 409/634] spi: atmel-quadspi: Undo runtime PM changes at driver exit time Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 410/634] spi: spi-fsl-lpspi: " Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 411/634] lib/sbitmap: define swap_lock as raw_spinlock_t Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 412/634] spi: airoha: remove read cache in airoha_snand_dirmap_read() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 413/634] spi: atmel-quadspi: Avoid overwriting delay register settings Greg Kroah-Hartman
2024-10-02 14:51   ` Alexander Dahl
2024-10-02 12:58 ` [PATCH 6.10 414/634] nvme-multipath: system fails to create generic nvme device Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 415/634] iio: adc: ad7606: fix oversampling gpio array Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 416/634] iio: adc: ad7606: fix standby gpio state to match the documentation Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 417/634] driver core: Fix error handling in driver API device_rename() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 418/634] ABI: testing: fix admv8818 attr description Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 419/634] iio: chemical: bme680: Fix read/write ops to device by adding mutexes Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 420/634] iio: magnetometer: ak8975: drop incorrect AK09116 compatible Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 421/634] dt-bindings: iio: asahi-kasei,ak8975: " Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 422/634] driver core: Fix a potential null-ptr-deref in module_add_driver() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 423/634] serial: 8250: omap: Cleanup on error in request_irq Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 424/634] Coresight: Set correct cs_mode for TPDM to fix disable issue Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 425/634] Coresight: Set correct cs_mode for dummy source " Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 426/634] coresight: tmc: sg: Do not leak sg_table Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 427/634] interconnect: icc-clk: Add missed num_nodes initialization Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 428/634] interconnect: qcom: sm8250: Enable sync_state Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 429/634] cxl/pci: Fix to record only non-zero ranges Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 430/634] vdpa/mlx5: Fix invalid mr resource destroy Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 431/634] vhost_vdpa: assign irq bypass producer token correctly Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 432/634] ep93xx: clock: Fix off by one in ep93xx_div_recalc_rate() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 433/634] Revert "dm: requeue IO if mapping table not yet available" Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 434/634] net: xilinx: axienet: Schedule NAPI in two steps Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 435/634] net: xilinx: axienet: Fix packet counting Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 436/634] netfilter: nf_reject_ipv6: fix nf_reject_ip6_tcphdr_put() Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 437/634] net: seeq: Fix use after free vulnerability in ether3 Driver Due to Race Condition Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 438/634] net: ipv6: select DST_CACHE from IPV6_RPL_LWTUNNEL Greg Kroah-Hartman
2024-10-02 12:58 ` [PATCH 6.10 439/634] tcp: check skb is non-NULL in tcp_rto_delta_us() Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 440/634] net: qrtr: Update packets cloning when broadcasting Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 441/634] net: ravb: Fix R-Car RX frame size limit Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 442/634] bonding: Fix unnecessary warnings and logs from bond_xdp_get_xmit_slave() Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 443/634] virtio_net: Fix mismatched buf address when unmapping for small packets Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 444/634] net: stmmac: set PP_FLAG_DMA_SYNC_DEV only if XDP is enabled Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 445/634] netfilter: nf_tables: Keep deleted flowtable hooks until after RCU Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 446/634] netfilter: ctnetlink: compile ctnetlink_label_size with CONFIG_NF_CONNTRACK_EVENTS Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 447/634] netfilter: nf_tables: use rcu chain hook list iterator from netlink dump path Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 448/634] netfilter: nf_tables: missing objects with no memcg accounting Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 449/634] selftests: netfilter: Avoid hanging ipvs.sh Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 450/634] io_uring/sqpoll: do not allow pinning outside of cpuset Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 451/634] io_uring/rw: treat -EOPNOTSUPP for IOCB_NOWAIT like -EAGAIN Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 452/634] io_uring: check for presence of task_work rather than TIF_NOTIFY_SIGNAL Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 453/634] fuse: use exclusive lock when FUSE_I_CACHE_IO_MODE is set Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 454/634] mm: migrate: annotate data-race in migrate_folio_unmap() Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 455/634] mm: call the security_mmap_file() LSM hook in remap_file_pages() Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 456/634] drm/amd/display: Fix Synaptics Cascaded Panamera DSC Determination Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 457/634] xen: move checks for e820 conflicts further up Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 458/634] xen: allow mapping ACPI data using a different physical address Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 459/634] io_uring/sqpoll: retain test for whether the CPU is valid Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 460/634] io_uring/sqpoll: do not put cpumask on stack Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 461/634] selftests/bpf: correctly move log upon successful match Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 462/634] Remove *.orig pattern from .gitignore Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 463/634] PCI: Revert to the original speed after PCIe failed link retraining Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 464/634] PCI: Clear the LBMS bit after a link retrain Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 465/634] PCI: dra7xx: Fix threaded IRQ request for "dra7xx-pcie-main" IRQ Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 466/634] PCI: imx6: Fix missing call to phy_power_off() in error handling Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 467/634] PCI: imx6: Fix establish link failure in EP mode for i.MX8MM and i.MX8MP Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 468/634] PCI: imx6: Fix i.MX8MP PCIe EPs occasional failure to trigger MSI Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 469/634] PCI: Correct error reporting with PCIe failed link retraining Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 470/634] PCI: Use an error code " Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 471/634] PCI: xilinx-nwl: Fix off-by-one in INTx IRQ handler Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 472/634] PCI: dra7xx: Fix error handling when IRQ request fails in probe Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 473/634] Revert "soc: qcom: smd-rpm: Match rpmsg channel instead of compatible" Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 474/634] ASoC: rt5682: Return devm_of_clk_add_hw_provider to transfer the error Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 475/634] soc: fsl: cpm1: qmc: Update TRNSYNC only in transparent mode Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 476/634] soc: fsl: cpm1: tsa: Fix tsa_write8() Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 477/634] soc: versatile: integrator: fix OF node leak in probe() error path Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 478/634] Revert "media: tuners: fix error return code of hybrid_tuner_request_state()" Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 479/634] iommu/amd: Fix argument order in amd_iommu_dev_flush_pasid_all() Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 480/634] iommufd: Protect against overflow of ALIGN() during iova allocation Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 481/634] Input: adp5588-keys - fix check on return code Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 482/634] Input: i8042 - add TUXEDO Stellaris 16 Gen5 AMD to i8042 quirk table Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 483/634] Input: i8042 - add TUXEDO Stellaris 15 Slim Gen6 " Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 484/634] Input: i8042 - add another board name for TUXEDO Stellaris Gen5 AMD line Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 485/634] KVM: arm64: Add memory length checks and remove inline in do_ffa_mem_xfer Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 486/634] KVM: x86: Enforce x2APICs must-be-zero reserved ICR bits Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 487/634] KVM: x86: Move x2APIC ICR helper above kvm_apic_write_nodecode() Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 488/634] KVM: Use dedicated mutex to protect kvm_usage_count to avoid deadlock Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 489/634] drm/amd/display: Skip Recompute DSC Params if no Stream on Link Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 490/634] drm/amdgpu/mes11: reduce timeout Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 491/634] drm/amdgpu/vcn: enable AV1 on both instances Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 492/634] drm/amd/display: Add HDMI DSC native YCbCr422 support Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 493/634] drm/amd/display: Round calculated vtotal Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 494/634] drm/amd/display: Clean up dsc blocks in accelerated mode Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 495/634] drm/amd/display: Validate backlight caps are sane Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 496/634] drm/amd/display: Disable SYMCLK32_LE root clock gating Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 497/634] drm/amd/display: Block dynamic IPS2 on DCN35 for incompatible FW versions Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 498/634] drm/amd/display: Enable DML2 override_det_buffer_size_kbytes Greg Kroah-Hartman
2024-10-02 12:59 ` [PATCH 6.10 499/634] drm/amd/display: Skip to enable dsc if it has been off Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 500/634] Revert "LoongArch: KVM: Invalidate guest steal time address on vCPU reset" Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 501/634] objtool: Handle frame pointer related instructions Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 502/634] KEYS: prevent NULL pointer dereference in find_asymmetric_key() Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 503/634] powerpc/atomic: Use YZ constraints for DS-form instructions Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 504/634] ksmbd: make __dir_empty() compatible with POSIX Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 505/634] ksmbd: allow write with FILE_APPEND_DATA Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 506/634] ksmbd: handle caseless file creation Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 507/634] ata: libata-scsi: Fix ata_msense_control() CDL page reporting Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 508/634] scsi: sd: Fix off-by-one error in sd_read_block_characteristics() Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 509/634] scsi: ufs: qcom: Update MODE_MAX cfg_bw value Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 510/634] scsi: lpfc: Restrict support for 32 byte CDBs to specific HBAs Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 511/634] scsi: mac_scsi: Revise printk(KERN_DEBUG ...) messages Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 512/634] scsi: mac_scsi: Refactor polling loop Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 513/634] scsi: mac_scsi: Disallow bus errors during PDMA send Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 514/634] can: esd_usb: Remove CAN_CTRLMODE_3_SAMPLES for CAN-USB/3-FD Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 515/634] wifi: rtw88: Fix USB/SDIO devices not transmitting beacons Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 516/634] usbnet: fix cyclical race on disconnect with work queue Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 517/634] arm64: dts: mediatek: mt8195-cherry: Mark USB 3.0 on xhci1 as disabled Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 518/634] arm64: dts: mediatek: mt8395-nio-12l: " Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 519/634] USB: appledisplay: close race between probe and completion handler Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 520/634] USB: misc: cypress_cy7c63: check for short transfer Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 521/634] USB: class: CDC-ACM: fix race between get_serial and set_serial Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 522/634] USB: misc: yurex: fix race between read and write Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 523/634] usb: cdnsp: Fix incorrect usb_request status Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 524/634] usb: xHCI: add XHCI_RESET_ON_RESUME quirk for Phytium xHCI host Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 525/634] usb: gadget: dummy_hcd: execute hrtimer callback in softirq context Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 526/634] usb: dwc2: drd: fix clock gating on USB role switch Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 527/634] bus: integrator-lm: fix OF node leak in probe() Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 528/634] bus: mhi: host: pci_generic: Fix the name for the Telit FE990A Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 529/634] firmware_loader: Block path traversal Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 530/634] tty: rp2: Fix reset with non forgiving PCIe host bridges Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 531/634] pps: add an error check in parport_attach Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 532/634] serial: dont use uninitialized value in uart_poll_init() Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 533/634] xhci: Set quirky xHC PCI hosts to D3 _after_ stopping and freeing them Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 534/634] serial: qcom-geni: fix fifo polling timeout Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 535/634] serial: qcom-geni: fix false console tx restart Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 536/634] crypto: qcom-rng - fix support for ACPI-based systems Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 537/634] crypto: ccp - Properly unregister /dev/sev on sev PLATFORM_STATUS failure Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 538/634] drbd: Fix atomicity violation in drbd_uuid_set_bm() Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 539/634] drbd: Add NULL check for net_conf to prevent dereference in state validation Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 540/634] ACPI: sysfs: validate return type of _STR method Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 541/634] ACPI: resource: Do IRQ override on MECHREV GM7XG0M Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 542/634] ACPI: resource: Add another DMI match for the TongFang GMxXGxx Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 543/634] efistub/tpm: Use ACPI reclaim memory for event log to avoid corruption Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 544/634] x86/entry: Remove unwanted instrumentation in common_interrupt() Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 545/634] perf/x86/intel: Allow to setup LBR for counting event for BPF Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 546/634] perf/x86/intel/pt: Fix sampling synchronization Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 547/634] btrfs: subpage: fix the bitmap dump which can cause bitmap corruption Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 548/634] wifi: mt76: mt7921: Check devm_kasprintf() returned value Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 549/634] wifi: mt76: mt7915: check " Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 550/634] wifi: mt76: mt7996: fix NULL pointer dereference in mt7996_mcu_sta_bfer_he Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 551/634] wifi: mt76: mt7925: fix a potential array-index-out-of-bounds issue for clc Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 552/634] wifi: rtw88: 8821cu: Remove VID/PID 0bda:c82c Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 553/634] wifi: rtw88: 8822c: Fix reported RX band width Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 554/634] wifi: rtw88: 8703b: " Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 555/634] wifi: mt76: mt7615: check devm_kasprintf() returned value Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 556/634] debugobjects: Fix conditions in fill_pool() Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 557/634] btrfs: fix race setting file private on concurrent lseek using same fd Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 558/634] btrfs: tree-checker: fix the wrong output of data backref objectid Greg Kroah-Hartman
2024-10-02 13:00 ` [PATCH 6.10 559/634] btrfs: always update fstrim_range on failure in FITRIM ioctl Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 560/634] f2fs: fix several potential integer overflows in file offsets Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 561/634] f2fs: prevent possible int overflow in dir_block_index() Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 562/634] f2fs: avoid potential int overflow in sanity_check_area_boundary() Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 563/634] f2fs: Require FMODE_WRITE for atomic write ioctls Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 564/634] f2fs: check discard support for conventional zones Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 565/634] f2fs: fix to check atomic_file in f2fs ioctl interfaces Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 566/634] hwrng: mtk - Use devm_pm_runtime_enable Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 567/634] hwrng: bcm2835 - Add missing clk_disable_unprepare in bcm2835_rng_init Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 568/634] hwrng: cctrng - Add missing clk_disable_unprepare in cctrng_resume Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 569/634] arm64: esr: Define ESR_ELx_EC_* constants as UL Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 570/634] arm64: errata: Enable the AC03_CPU_38 workaround for ampere1a Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 571/634] arm64: dts: mediatek: mt8186-corsola: Disable DPI display interface Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 572/634] arm64: dts: rockchip: Raise Pinebook Pros panel backlight PWM frequency Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 573/634] arm64: dts: qcom: sa8775p: Mark APPS and PCIe SMMUs as DMA coherent Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 574/634] arm64: dts: rockchip: Correct the Pinebook Pro battery design capacity Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 575/634] vfs: fix race between evice_inodes() and find_inode()&iput() Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 576/634] netfs: Delete subtree of fs/netfs when netfs module exits Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 577/634] fs: Fix file_set_fowner LSM hook inconsistencies Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 578/634] nfs: fix memory leak in error path of nfs4_do_reclaim Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 579/634] EDAC/igen6: Fix conversion of system address to physical memory address Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 580/634] icmp: change the order of rate limits Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 581/634] eventpoll: Annotate data-race of busy_poll_usecs Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 582/634] md: Dont flush sync_work in md_write_start() Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 583/634] cpuidle: riscv-sbi: Use scoped device node handling to fix missing of_node_put Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 584/634] padata: use integer wrap around to prevent deadlock on seq_nr overflow Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 585/634] lsm: add the inode_free_security_rcu() LSM implementation hook Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 586/634] spi: fspi: involve lut_num for struct nxp_fspi_devtype_data Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 587/634] dt-bindings: spi: nxp-fspi: add imx8ulp support Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 588/634] ARM: dts: imx6ul-geam: fix fsl,pins property in tscgrp pinctrl Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 589/634] ARM: dts: imx6ull-seeed-npi: " Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 590/634] tools/nolibc: include arch.h from string.h Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 591/634] soc: versatile: realview: fix memory leak during device remove Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 592/634] soc: versatile: realview: fix soc_dev " Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 593/634] KVM: x86: Drop unused check_apicv_inhibit_reasons() callback definition Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 594/634] KVM: x86: Make x2APIC ID 100% readonly Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 595/634] KVM: x86: Re-split x2APIC ICR into ICR+ICR2 for AMD (x2AVIC) Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 596/634] x86/mm: Make x86_platform.guest.enc_status_change_*() return an error Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 597/634] x86/tdx: Account shared memory Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 598/634] x86/mm: Add callbacks to prepare encrypted memory for kexec Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 599/634] x86/tdx: Convert shared memory back to private on kexec Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 600/634] x86/tdx: Fix "in-kernel MMIO" check Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 601/634] xhci: Add a quirk for writing ERST in high-low order Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 602/634] usb: xhci: fix loss of data on Cadence xHC Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 603/634] soc: qcom: geni-se: add GP_LENGTH/IRQ_EN_SET/IRQ_EN_CLEAR registers Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 604/634] serial: qcom-geni: fix arg types for qcom_geni_serial_poll_bit() Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 605/634] serial: qcom-geni: introduce qcom_geni_serial_poll_bitfield() Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 606/634] serial: qcom-geni: fix console corruption Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 607/634] idpf: stop using macros for accessing queue descriptors Greg Kroah-Hartman
2024-10-02 13:01 ` Greg Kroah-Hartman [this message]
2024-10-02 13:01 ` [PATCH 6.10 609/634] idpf: merge singleq and splitq &net_device_ops Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 610/634] idpf: fix netdev Tx queue stop/wake Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 611/634] fs_parse: add uid & gid option option parsing helpers Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 612/634] debugfs: Convert to new uid/gid " Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 613/634] debugfs show actual source in /proc/mounts Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 614/634] lsm: infrastructure management of the sock security Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 615/634] bpf: lsm: Set bpf_lsm_blob_sizes.lbs_task to 0 Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 616/634] dm-verity: restart or panic on an I/O error Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 617/634] compiler.h: specify correct attribute for .rodata..c_jump_table Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 618/634] lockdep: fix deadlock issue between lockdep and rcu Greg Kroah-Hartman
2024-10-02 13:01 ` [PATCH 6.10 619/634] exfat: resolve memory leak from exfat_create_upcase_table() Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 620/634] mm/hugetlb_vmemmap: batch HVO work when demoting Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 621/634] s390/ftrace: Avoid calling unwinder in ftrace_return_address() Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 622/634] mm: only enforce minimum stack gap size if its sensible Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 623/634] spi: fspi: add support for imx8ulp Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 624/634] module: Fix KCOV-ignored file name Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 625/634] fbdev: xen-fbfront: Assign fb_info->device Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 626/634] tpm: export tpm2_sessions_init() to fix ibmvtpm building Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 627/634] mm/hugetlb.c: fix UAF of vma in hugetlb fault pathway Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 628/634] mm/huge_memory: ensure huge_zero_folio wont have large_rmappable flag set Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 629/634] mm: change vmf_anon_prepare() to __vmf_anon_prepare() Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 630/634] mm/damon/vaddr: protect vma traversal in __damon_va_thre_regions() with rcu read lock Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 631/634] i2c: aspeed: Update the stop sw state when the bus recovery occurs Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 632/634] i2c: isch: Add missed else Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 633/634] Documentation: KVM: fix warning in "make htmldocs" Greg Kroah-Hartman
2024-10-02 13:02 ` [PATCH 6.10 634/634] bpf: Fix use-after-free in bpf_uprobe_multi_link_attach() Greg Kroah-Hartman
2024-10-02 18:16 ` [PATCH 6.10 000/634] 6.10.13-rc1 review Florian Fainelli
2024-10-02 18:32 ` Jon Hunter
2024-10-03  0:19 ` Shuah Khan
2024-10-03  5:45 ` Naresh Kamboju
2024-10-03  9:21 ` Pavel Machek
2024-10-03 11:06 ` Mark Brown
2024-10-03 16:15 ` Peter Schneider
2024-10-03 21:00 ` Allen
2024-10-03 23:41 ` Ron Economos
2024-10-04 11:34 ` Kexy Biscuit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241002125835.114692209@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=aleksander.lobakin@intel.com \
    --cc=anthony.l.nguyen@intel.com \
    --cc=patches@lists.linux.dev \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox