[dpdk-stable] patch 'net/sfc: fix power of 2 round up when align has smaller type' has been queued to LTS release 18.11.3

Kevin Traynor ktraynor at redhat.com
Thu Sep 5 12:17:07 CEST 2019


Hi,

FYI, your patch has been queued to LTS release 18.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/12/19. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/a2d6aaf431f822816c8c5c3e75190e508b442e33

Thanks.

Kevin Traynor

---
>From a2d6aaf431f822816c8c5c3e75190e508b442e33 Mon Sep 17 00:00:00 2001
From: Andrew Rybchenko <arybchenko at solarflare.com>
Date: Wed, 24 Jul 2019 14:16:32 +0100
Subject: [PATCH] net/sfc: fix power of 2 round up when align has smaller type

[ upstream commit 441717b92c2a22021b7a38c43788897a09f23b6d ]

Substitute driver-defined P2ROUNDUP() h with EFX_P2ROUNDUP()
defined in libefx.

Cast value and alignment to one specified type to guarantee result
correctness.

Fixes: e1b944598579 ("net/sfc: build libefx")

Signed-off-by: Andrew Rybchenko <arybchenko at solarflare.com>
---
 drivers/net/sfc/base/ef10_impl.h  |  9 +++++----
 drivers/net/sfc/base/ef10_nvram.c |  3 ++-
 drivers/net/sfc/base/ef10_rx.c    |  5 +++--
 drivers/net/sfc/base/efx.h        | 13 +++++++++----
 drivers/net/sfc/base/efx_mcdi.h   |  9 ++++++---
 drivers/net/sfc/base/efx_tx.c     |  4 ++--
 drivers/net/sfc/efsys.h           |  4 ----
 drivers/net/sfc/sfc_ethdev.c      |  2 +-
 8 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/drivers/net/sfc/base/ef10_impl.h b/drivers/net/sfc/base/ef10_impl.h
index f971063a1..6f5d0f9aa 100644
--- a/drivers/net/sfc/base/ef10_impl.h
+++ b/drivers/net/sfc/base/ef10_impl.h
@@ -1244,8 +1244,9 @@ efx_mcdi_set_nic_global(
 
 /* Minimum space for packet in packed stream mode */
-#define	EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE		     \
-	P2ROUNDUP(EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE +	     \
-	    EFX_MAC_PDU_MIN +				     \
-	    EFX_RX_PACKED_STREAM_ALIGNMENT,		     \
+#define	EFX_RX_PACKED_STREAM_MIN_PACKET_SPACE		\
+	EFX_P2ROUNDUP(size_t,				\
+	    EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE +	\
+	    EFX_MAC_PDU_MIN +				\
+	    EFX_RX_PACKED_STREAM_ALIGNMENT,		\
 	    EFX_RX_PACKED_STREAM_ALIGNMENT)
 
diff --git a/drivers/net/sfc/base/ef10_nvram.c b/drivers/net/sfc/base/ef10_nvram.c
index 8d1b64f25..2f334fe0f 100644
--- a/drivers/net/sfc/base/ef10_nvram.c
+++ b/drivers/net/sfc/base/ef10_nvram.c
@@ -368,5 +368,6 @@ tlv_write(
 		ptr[(len - 1) / sizeof (uint32_t)] = 0;
 		memcpy(ptr, data, len);
-		ptr += P2ROUNDUP(len, sizeof (uint32_t)) / sizeof (*ptr);
+		ptr += EFX_P2ROUNDUP(uint32_t, len,
+		    sizeof (uint32_t)) / sizeof (*ptr);
 	}
 
diff --git a/drivers/net/sfc/base/ef10_rx.c b/drivers/net/sfc/base/ef10_rx.c
index 3c8f4f3b9..09e8bb816 100644
--- a/drivers/net/sfc/base/ef10_rx.c
+++ b/drivers/net/sfc/base/ef10_rx.c
@@ -931,6 +931,7 @@ ef10_rx_qps_packet_info(
 	buf_len    = EFX_QWORD_FIELD(*qwordp, ES_DZ_PS_RX_PREFIX_CAP_LEN);
 
-	buf_len = P2ROUNDUP(buf_len + EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE,
-			    EFX_RX_PACKED_STREAM_ALIGNMENT);
+	buf_len = EFX_P2ROUNDUP(uint16_t,
+	    buf_len + EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE,
+	    EFX_RX_PACKED_STREAM_ALIGNMENT);
 	*next_offsetp =
 	    current_offset + buf_len + EFX_RX_PACKED_STREAM_ALIGNMENT;
diff --git a/drivers/net/sfc/base/efx.h b/drivers/net/sfc/base/efx.h
index 2e847b6ce..4f25e69e1 100644
--- a/drivers/net/sfc/base/efx.h
+++ b/drivers/net/sfc/base/efx.h
@@ -29,4 +29,8 @@ extern "C" {
 #define	EFX_DIV_ROUND_UP(_n, _d)		(((_n) + (_d) - 1) / (_d))
 
+/* Round value up to the nearest power of two. */
+#define	EFX_P2ROUNDUP(_type, _value, _align)	\
+	(-(-(_type)(_value) & -(_type)(_align)))
+
 /* Return codes */
 
@@ -495,8 +499,8 @@ typedef enum efx_link_mode_e {
 
 #define	EFX_MAC_PDU(_sdu)					\
-	P2ROUNDUP((_sdu) + EFX_MAC_PDU_ADJUSTMENT, 8)
+	EFX_P2ROUNDUP(size_t, (_sdu) + EFX_MAC_PDU_ADJUSTMENT, 8)
 
 /*
- * Due to the P2ROUNDUP in EFX_MAC_PDU(), EFX_MAC_SDU_FROM_PDU() may give
+ * Due to the EFX_P2ROUNDUP in EFX_MAC_PDU(), EFX_MAC_SDU_FROM_PDU() may give
  * the SDU rounded up slightly.
  */
@@ -584,6 +588,7 @@ efx_mac_stat_name(
 #define	EFX_MAC_STATS_MASK_BITS_PER_PAGE	(8 * sizeof (uint32_t))
 
-#define	EFX_MAC_STATS_MASK_NPAGES	\
-	(P2ROUNDUP(EFX_MAC_NSTATS, EFX_MAC_STATS_MASK_BITS_PER_PAGE) / \
+#define	EFX_MAC_STATS_MASK_NPAGES				\
+	(EFX_P2ROUNDUP(uint32_t, EFX_MAC_NSTATS,		\
+		       EFX_MAC_STATS_MASK_BITS_PER_PAGE) /	\
 	    EFX_MAC_STATS_MASK_BITS_PER_PAGE)
 
diff --git a/drivers/net/sfc/base/efx_mcdi.h b/drivers/net/sfc/base/efx_mcdi.h
index ddf91c111..a48394851 100644
--- a/drivers/net/sfc/base/efx_mcdi.h
+++ b/drivers/net/sfc/base/efx_mcdi.h
@@ -385,4 +385,9 @@ efx_mcdi_phy_module_get_info(
 	(MC_CMD_PRIVILEGE_MASK_IN_GRP_ ## priv))
 
+#define	EFX_MCDI_BUF_SIZE(_in_len, _out_len)				\
+	EFX_P2ROUNDUP(size_t,						\
+		MAX(MAX(_in_len, _out_len), (2 * sizeof (efx_dword_t))),\
+		sizeof (efx_dword_t))
+
 /*
  * The buffer size must be a multiple of dword to ensure that MCDI works
@@ -392,7 +397,5 @@ efx_mcdi_phy_module_get_info(
  */
 #define EFX_MCDI_DECLARE_BUF(_name, _in_len, _out_len)			\
-	uint8_t _name[P2ROUNDUP(MAX(MAX(_in_len, _out_len),		\
-				    (2 * sizeof (efx_dword_t))),	\
-				sizeof (efx_dword_t))] = {0}
+	uint8_t _name[EFX_MCDI_BUF_SIZE(_in_len, _out_len)] = {0}
 
 typedef enum efx_mcdi_feature_id_e {
diff --git a/drivers/net/sfc/base/efx_tx.c b/drivers/net/sfc/base/efx_tx.c
index 9fa9e2ed1..2a3f1ce12 100644
--- a/drivers/net/sfc/base/efx_tx.c
+++ b/drivers/net/sfc/base/efx_tx.c
@@ -769,5 +769,5 @@ siena_tx_qpost(
 		 * Here it is a stricter requirement than the maximum length.
 		 */
-		EFSYS_ASSERT(P2ROUNDUP(start + 1,
+		EFSYS_ASSERT(EFX_P2ROUNDUP(efsys_dma_addr_t, start + 1,
 		    etp->et_enp->en_nic_cfg.enc_tx_dma_desc_boundary) >= end);
 
@@ -1039,5 +1039,5 @@ siena_tx_qdesc_dma_create(
 	 * Here it is a stricter requirement than the maximum length.
 	 */
-	EFSYS_ASSERT(P2ROUNDUP(addr + 1,
+	EFSYS_ASSERT(EFX_P2ROUNDUP(efsys_dma_addr_t, addr + 1,
 	    etp->et_enp->en_nic_cfg.enc_tx_dma_desc_boundary) >= addr + size);
 
diff --git a/drivers/net/sfc/efsys.h b/drivers/net/sfc/efsys.h
index f7bcc74d9..c8d652436 100644
--- a/drivers/net/sfc/efsys.h
+++ b/drivers/net/sfc/efsys.h
@@ -77,8 +77,4 @@ typedef bool boolean_t;
 #endif
 
-#ifndef P2ROUNDUP
-#define P2ROUNDUP(x, align)	(-(-(x) & -(align)))
-#endif
-
 #ifndef P2ALIGN
 #define P2ALIGN(_x, _a)		((_x) & -(_a))
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index fa0dd82aa..8c7d22430 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -907,5 +907,5 @@ sfc_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 		sfc_err(sa, "too big MTU %u (PDU size %u greater than max %u)",
 			(unsigned int)mtu, (unsigned int)pdu,
-			EFX_MAC_PDU_MAX);
+			(unsigned int)EFX_MAC_PDU_MAX);
 		goto fail_inval;
 	}
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-09-05 10:36:47.927238550 +0100
+++ 0007-net-sfc-fix-power-of-2-round-up-when-align-has-small.patch	2019-09-05 10:36:47.459701743 +0100
@@ -1 +1 @@
-From 441717b92c2a22021b7a38c43788897a09f23b6d Mon Sep 17 00:00:00 2001
+From a2d6aaf431f822816c8c5c3e75190e508b442e33 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 441717b92c2a22021b7a38c43788897a09f23b6d ]
+
@@ -13 +14,0 @@
-Cc: stable at dpdk.org
@@ -28 +29 @@
-index 396180111..7a0004782 100644
+index f971063a1..6f5d0f9aa 100644
@@ -31 +32 @@
-@@ -1440,8 +1440,9 @@ ef10_proxy_auth_get_privilege_mask(
+@@ -1244,8 +1244,9 @@ efx_mcdi_set_nic_global(
@@ -46 +47 @@
-index 8fc8fd909..0d5378ddf 100644
+index 8d1b64f25..2f334fe0f 100644
@@ -58 +59 @@
-index 10eace46c..b087a5d42 100644
+index 3c8f4f3b9..09e8bb816 100644
@@ -61 +62 @@
-@@ -948,6 +948,7 @@ ef10_rx_qps_packet_info(
+@@ -931,6 +931,7 @@ ef10_rx_qps_packet_info(
@@ -72 +73 @@
-index 53c7b4212..835d057b1 100644
+index 2e847b6ce..4f25e69e1 100644
@@ -75 +76 @@
-@@ -30,4 +30,8 @@ extern "C" {
+@@ -29,4 +29,8 @@ extern "C" {
@@ -84 +85 @@
-@@ -499,8 +503,8 @@ typedef enum efx_link_mode_e {
+@@ -495,8 +499,8 @@ typedef enum efx_link_mode_e {
@@ -95 +96 @@
-@@ -588,6 +592,7 @@ efx_mac_stat_name(
+@@ -584,6 +588,7 @@ efx_mac_stat_name(
@@ -106 +107 @@
-index 74cde5075..0941cbdb8 100644
+index ddf91c111..a48394851 100644
@@ -109 +110 @@
-@@ -392,4 +392,9 @@ efx_mcdi_phy_module_get_info(
+@@ -385,4 +385,9 @@ efx_mcdi_phy_module_get_info(
@@ -119 +120 @@
-@@ -399,7 +404,5 @@ efx_mcdi_phy_module_get_info(
+@@ -392,7 +397,5 @@ efx_mcdi_phy_module_get_info(
@@ -129 +130 @@
-index 5cf3dcd3a..e7c5e8089 100644
+index 9fa9e2ed1..2a3f1ce12 100644
@@ -132 +133 @@
-@@ -800,5 +800,5 @@ siena_tx_qpost(
+@@ -769,5 +769,5 @@ siena_tx_qpost(
@@ -139 +140 @@
-@@ -1059,5 +1059,5 @@ siena_tx_qdesc_dma_create(
+@@ -1039,5 +1039,5 @@ siena_tx_qdesc_dma_create(
@@ -147 +148 @@
-index 762c6eea4..4c122d040 100644
+index f7bcc74d9..c8d652436 100644
@@ -160 +161 @@
-index 279b58641..1f78a3d8a 100644
+index fa0dd82aa..8c7d22430 100644
@@ -163 +164 @@
-@@ -938,5 +938,5 @@ sfc_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
+@@ -907,5 +907,5 @@ sfc_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)


More information about the stable mailing list