From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 96086A2E1B for ; Thu, 5 Sep 2019 12:18:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 811181EF84; Thu, 5 Sep 2019 12:18:22 +0200 (CEST) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 3FFCD1EF82 for ; Thu, 5 Sep 2019 12:18:21 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AD1C23CA20; Thu, 5 Sep 2019 10:18:20 +0000 (UTC) Received: from rh.redhat.com (ovpn-117-52.ams2.redhat.com [10.36.117.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id D6E6F19C6A; Thu, 5 Sep 2019 10:18:19 +0000 (UTC) From: Kevin Traynor To: Andrew Rybchenko Cc: dpdk stable Date: Thu, 5 Sep 2019 11:17:07 +0100 Message-Id: <20190905101754.21933-7-ktraynor@redhat.com> In-Reply-To: <20190905101754.21933-1-ktraynor@redhat.com> References: <20190905101754.21933-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 05 Sep 2019 10:18:20 +0000 (UTC) Subject: [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 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" 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 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 --- 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@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)