Thread (8 messages) flat view 8 messages, 2 authors, 2021-02-04

RE: [PATCH net 1/3] dpaa_eth: reserve space for the xdp_frame under the A050385 erratum

From: Camelia Alexandra Groza <hidden>
Date: 2021-02-04 11:56:15

-----Original Message-----
From: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Sent: Thursday, February 4, 2021 10:52
To: Camelia Alexandra Groza <redacted>
Cc: kuba@kernel.org; davem@davemloft.net; Madalin Bucur (OSS)
[off-list ref]; netdev@vger.kernel.org
Subject: Re: [PATCH net 1/3] dpaa_eth: reserve space for the xdp_frame
under the A050385 erratum

On Tue, Feb 02, 2021 at 07:34:42PM +0200, Camelia Groza wrote:
quoted
When the erratum workaround is triggered, the newly created xdp_frame
structure is stored at the start of the newly allocated buffer. Avoid
the structure from being overwritten by explicitly reserving enough
space in the buffer for storing it.

Account for the fact that the structure's size might increase in time by
aligning the headroom to DPAA_FD_DATA_ALIGNMENT bytes, thus
guaranteeing
quoted
the data's alignment.

Fixes: ae680bcbd06a ("dpaa_eth: implement the A050385 erratum
workaround for XDP")
quoted
Signed-off-by: Camelia Groza <redacted>
---
 drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 17
+++++++++++++++--
quoted
 1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
quoted
index 4360ce4d3fb6..e1d041c35ad9 100644
--- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
+++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
@@ -2182,6 +2182,7 @@ static int dpaa_a050385_wa_xdpf(struct
dpaa_priv *priv,
quoted
 	struct xdp_frame *new_xdpf, *xdpf = *init_xdpf;
 	void *new_buff;
 	struct page *p;
+	int headroom;

 	/* Check the data alignment and make sure the headroom is large
 	 * enough to store the xdpf backpointer. Use an aligned headroom
@@ -2197,19 +2198,31 @@ static int dpaa_a050385_wa_xdpf(struct
dpaa_priv *priv,
quoted
 		return 0;
 	}

+	/* The new xdp_frame is stored in the new buffer. Reserve enough
space
quoted
+	 * in the headroom for storing it along with the driver's private
+	 * info. The headroom needs to be aligned to
DPAA_FD_DATA_ALIGNMENT to
quoted
+	 * guarantee the data's alignment in the buffer.
+	 */
+	headroom = ALIGN(sizeof(*new_xdpf) + priv->tx_headroom,
+			 DPAA_FD_DATA_ALIGNMENT);
+
+	/* Assure the extended headroom and data fit in a one-paged buffer
*/
quoted
+	if (headroom + xdpf->len > DPAA_BP_RAW_SIZE)
This check might make more sense if you would be accounting for
skb_shared_info as well I suppose, so that you know you'll still provide
enough tailroom for future xdp multibuf support. Didn't all the previous
code path make sure that there's a room for that?
Hi Maciej

This function will have to go through large changes anyway once we enable
multibuf support, so making it future-proof isn't a priority.

Instead, I do want to return a valid xdp_frame so I need to guarantee the
tailroom is there, even if we don't access it . I'll send a v2. Thanks.

Camelia
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help