FAILED: patch "[PATCH] net: mana: Reserve extra CQ slot for the fence completion CQE" failed to apply to 6.1-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x 80dd7e754b3aa9637a0758ad93fa209f9650ec48
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026091623-upstairs-protrude-105f@gregkh' --subject-prefix 'PATCH 6.1.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 80dd7e754b3aa9637a0758ad93fa209f9650ec48 Mon Sep 17 00:00:00 2001
From: Sahil Chandna <[email protected]>
Date: Tue, 1 Sep 2026 07:17:58 -0500
Subject: [PATCH] net: mana: Reserve extra CQ slot for the fence completion CQE
The RX completion queue is sized to hold exactly one CQE per posted RX WQE. MANA_FENCE_RQ makes hardware post an additional CQE_RX_OBJECT_FENCE after the packet CQEs. The current sizing reserves no extra slot for it and in rare cases, CQ has no guaranteed slot for the fence CQE when it is full of packet CQEs. This can lead to dropping the fence completion while the driver waits holding RTNL lock throughout the timeout duration. Reserve one extra CQE slot for CQE_RX_OBJECT_FENCE. mana_gd_alloc_memory() requires queue_size to be a power-of-two and at least MANA_PAGE_SIZE; the reservation pushes cq_size past a power-of-two, so round up the CQ size in mana_create_rxq().
drivers/net/ethernet/microsoft/mana/mana_en.c +5 -1
@@ -2986,6 +2986,10 @@ static int mana_alloc_rx_wqe(struct mana_port_context *apc, *cq_size +=COMP_ENTRY_SIZE ; } +/* Reserve an extra slot for Fence completion +* event (CQE_RX_OBJECT_FENCE) in case RX CQ is full. +*/ + *cq_size +=COMP_ENTRY_SIZE ;return 0 ; }
@@ -3080,7 +3084,7 @@ static struct mana_rxq *mana_create_rxq(struct mana_port_context *apc, goto out; rq_size =MANA_PAGE_ALIGN (rq_size); - cq_size =MANA_PAGE_ALIGN (cq_size); + cq_size =MANA_PAGE_ALIGN (roundup_pow_of_two (cq_size));/* Create RQ */ memset (&spec,0 ,sizeof (spec));
Sasha Levin
maintainerPATCH 1/1 net: mana: Reserve extra CQ slot for the fence completion CQE
From: Sahil Chandna <[email protected]>
[ Upstream commit 80dd7e754b3aa9637a0758ad93fa209f9650ec48 ]
The RX completion queue is sized to hold exactly one CQE per posted RX WQE. MANA_FENCE_RQ makes hardware post an additional CQE_RX_OBJECT_FENCE after the packet CQEs. The current sizing reserves no extra slot for it and in rare cases, CQ has no guaranteed slot for the fence CQE when it is full of packet CQEs. This can lead to dropping the fence completion while the driver waits holding RTNL lock throughout the timeout duration. Reserve one extra CQE slot for CQE_RX_OBJECT_FENCE. mana_gd_alloc_memory() requires queue_size to be a power-of-two and at least MANA_PAGE_SIZE; the reservation pushes cq_size past a power-of-two, so round up the CQ size in mana_create_rxq().
--- drivers/net/ethernet/microsoft/mana/mana_en.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/net/ethernet/microsoft/mana/mana_en.c +5 -1
@@ -1662,6 +1662,10 @@ static int mana_alloc_rx_wqe(struct mana_port_context *apc, *cq_size +=COMP_ENTRY_SIZE ; } +/* Reserve an extra slot for Fence completion +* event (CQE_RX_OBJECT_FENCE) in case RX CQ is full. +*/ + *cq_size +=COMP_ENTRY_SIZE ;return 0 ; }
@@ -1715,7 +1719,7 @@ static struct mana_rxq *mana_create_rxq(struct mana_port_context *apc, goto out; rq_size =PAGE_ALIGN (rq_size); - cq_size =PAGE_ALIGN (cq_size); + cq_size =PAGE_ALIGN (roundup_pow_of_two (cq_size));/* Create RQ */ memset (&spec,0 ,sizeof (spec));
Signature · 1 line
2.53.0
Re: [PATCH 6.1.y] net: mana: Reserve extra CQ slot for the fence completion CQE
Quoted 43 lines · Sasha Levin
From: Sahil Chandna <[email protected]>
[ Upstream commit
80dd7e754b3aa9637a0758ad93fa209f9650ec48]The RX completion queue is sized to hold exactly one CQE per posted RX WQE.
MANA_FENCE_RQmakes hardware post an additionalCQE_RX_OBJECT_FENCEafter the packet CQEs. The current sizing reserves no extra slot for it and in rare cases, CQ has no guaranteed slot for the fence CQE when it is full of packet CQEs. This can lead to dropping the fence completion while the driver waits holding RTNL lock throughout the timeout duration. Reserve one extra CQE slot forCQE_RX_OBJECT_FENCE.mana_gd_alloc_memory()requiresqueue_sizeto be a power-of-two and at leastMANA_PAGE_SIZE; the reservation pushescq_sizepast a power-of-two, so round up the CQ size inmana_create_rxq().Fixes 6cc74443a773 ("net: mana: Add RX fencing")Signed-off-by Sahil Chandna <[email protected]>Reviewed-by Haiyang Zhang <[email protected]>Signed-off-by Jakub Kicinski <[email protected]>[ Replaced MANA_PAGE_ALIGN() with PAGE_ALIGN() to match the older tree. ]Signed-off-by Sasha Levin <[email protected]>--- drivers/net/ethernet/microsoft/mana/mana_en.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)drivers/net/ethernet/microsoft/mana/mana_en.c +4
-0@@ -1662,6 +1662,10 @@ static int mana_alloc_rx_wqe(struct mana_port_context *apc, *cq_size +=COMP_ENTRY_SIZE ; } +/* Reserve an extra slot for Fence completion +* event (CQE_RX_OBJECT_FENCE) in case RX CQ is full. +*/ + *cq_size +=COMP_ENTRY_SIZE ;return 0 ; }
drivers/net/ethernet/microsoft/mana/mana_en.c static struct mana_rxq *mana_create_rxq(struct mana_port_context *apc, · line 1723
Quoted 6 lines
drivers/net/ethernet/microsoft/mana/mana_en.c +1
-1@@ -1715,7 +1719,7 @@ static struct mana_rxq *mana_create_rxq(struct mana_port_context *apc, goto out; rq_size =PAGE_ALIGN (rq_size); - cq_size =PAGE_ALIGN (cq_size); + cq_size =PAGE_ALIGN (roundup_pow_of_two (cq_size));
Hi Sasha,
Thanks for fixing this for 6.1 kernel
Regards,
Sahil
Quoted 2 lines
drivers/net/ethernet/microsoft/mana/mana_en.c +0
-0/* Create RQ */ memset (&spec,0 ,sizeof (spec));