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 EB646A04B5; Tue, 27 Oct 2020 11:42:33 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 854CE2BD3; Tue, 27 Oct 2020 11:42:32 +0100 (CET) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 011A62B9D for ; Tue, 27 Oct 2020 11:42:29 +0100 (CET) IronPort-SDR: r5iu0nqZo42Npg5geuHLILTQgAeVhiP52FcJe4kuVHaprgfB31w5pqns8QtN/Rmrib0p2WNIWo 1sST4ABXxKYA== X-IronPort-AV: E=McAfee;i="6000,8403,9786"; a="147913167" X-IronPort-AV: E=Sophos;i="5.77,423,1596524400"; d="scan'208";a="147913167" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Oct 2020 03:42:28 -0700 IronPort-SDR: 6MKKUb8E3yNE9zQQh/bykJEtVkN023pD7/7s9JI1PCvfbEajKyWa0jLV8rcoot+RC3RzUy1SXm zwlqEHy0cGoA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,423,1596524400"; d="scan'208";a="525841787" Received: from dpdk-lrong-srv-04.sh.intel.com ([10.67.119.221]) by fmsmga005.fm.intel.com with ESMTP; 27 Oct 2020 03:42:26 -0700 From: Leyi Rong To: qi.z.zhang@intel.com, ferruh.yigit@intel.com, bruce.richardson@intel.com, wenzhuo.lu@intel.com Cc: dev@dpdk.org, Leyi Rong Date: Tue, 27 Oct 2020 18:19:26 +0800 Message-Id: <20201027101926.112609-1-leyi.rong@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [dpdk-dev] [PATCH] net/ice: add AVX512BW flag check both in build and runtime X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Intrinsic function __mm512_bsrli_epi128 should be used in the environment which supports AVX512BW, so adds check for this flag. Fixes: 5dd3b8f3af34 ("net/ice: add AVX512 vector path") Signed-off-by: Leyi Rong --- drivers/net/ice/ice_rxtx.c | 12 ++++++++++-- drivers/net/ice/meson.build | 13 +++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c index f6291894cd..0785f37028 100644 --- a/drivers/net/ice/ice_rxtx.c +++ b/drivers/net/ice/ice_rxtx.c @@ -3007,7 +3007,8 @@ ice_set_rx_function(struct rte_eth_dev *dev) } if (rte_vect_get_max_simd_bitwidth() >= RTE_VECT_SIMD_512 && - rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX512F) == 1) + rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX512F) == 1 && + rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX512BW) == 1) #ifdef CC_AVX512_SUPPORT use_avx512 = true; #else @@ -3028,11 +3029,13 @@ ice_set_rx_function(struct rte_eth_dev *dev) if (ad->rx_vec_allowed) { if (dev->data->scattered_rx) { if (use_avx512) { +#ifdef CC_AVX512_SUPPORT PMD_DRV_LOG(NOTICE, "Using AVX512 Vector Scattered Rx (port %d).", dev->data->port_id); dev->rx_pkt_burst = ice_recv_scattered_pkts_vec_avx512; +#endif } else { PMD_DRV_LOG(DEBUG, "Using %sVector Scattered Rx (port %d).", @@ -3044,11 +3047,13 @@ ice_set_rx_function(struct rte_eth_dev *dev) } } else { if (use_avx512) { +#ifdef CC_AVX512_SUPPORT PMD_DRV_LOG(NOTICE, "Using AVX512 Vector Rx (port %d).", dev->data->port_id); dev->rx_pkt_burst = ice_recv_pkts_vec_avx512; +#endif } else { PMD_DRV_LOG(DEBUG, "Using %sVector Rx (port %d).", @@ -3218,7 +3223,8 @@ ice_set_tx_function(struct rte_eth_dev *dev) } if (rte_vect_get_max_simd_bitwidth() >= RTE_VECT_SIMD_512 && - rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX512F) == 1) + rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX512F) == 1 && + rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX512BW) == 1) #ifdef CC_AVX512_SUPPORT use_avx512 = true; #else @@ -3238,9 +3244,11 @@ ice_set_tx_function(struct rte_eth_dev *dev) if (ad->tx_vec_allowed) { if (use_avx512) { +#ifdef CC_AVX512_SUPPORT PMD_DRV_LOG(NOTICE, "Using AVX512 Vector Tx (port %d).", dev->data->port_id); dev->tx_pkt_burst = ice_xmit_pkts_vec_avx512; +#endif } else { PMD_DRV_LOG(DEBUG, "Using %sVector Tx (port %d).", use_avx2 ? "avx2 " : "", diff --git a/drivers/net/ice/meson.build b/drivers/net/ice/meson.build index 514bad9b8b..7d54a49236 100644 --- a/drivers/net/ice/meson.build +++ b/drivers/net/ice/meson.build @@ -35,14 +35,23 @@ if arch_subdir == 'x86' objs += ice_avx2_lib.extract_objects('ice_rxtx_vec_avx2.c') endif - if dpdk_conf.has('RTE_MACHINE_CPUFLAG_AVX512F') or (not machine_args.contains('-mno-avx512f') and cc.has_argument('-mavx512f')) + ice_avx512_cpu_support = ( + cc.get_define('__AVX512F__', args: machine_args) != '' and + cc.get_define('__AVX512BW__', args: machine_args) != '') + + ice_avx512_cc_support = ( + not machine_args.contains('-mno-avx512f') and + cc.has_argument('-mavx512f') and + cc.has_argument('-mavx512bw')) + + if ice_avx512_cpu_support == true or ice_avx512_cc_support == true cflags += ['-DCC_AVX512_SUPPORT'] ice_avx512_lib = static_library('ice_avx512_lib', 'ice_rxtx_vec_avx512.c', dependencies: [static_rte_ethdev, static_rte_kvargs, static_rte_hash], include_directories: includes, - c_args: [cflags, '-march=skylake-avx512', '-mavx512f']) + c_args: [cflags, '-march=skylake-avx512', '-mavx512f', '-mavx512bw']) objs += ice_avx512_lib.extract_objects('ice_rxtx_vec_avx512.c') endif endif -- 2.17.1