From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zoltan Kiss Subject: [RFC PATCH] i40: remove weak version of i40e_rx_vec_dev_conf_condition_check() Date: Tue, 19 Jul 2016 15:35:20 +0100 Message-ID: <1468938920-19679-1-git-send-email-zoltan.kiss@schaman.hu> Cc: Matias Elo , sergio.gonzalez.monroy@intel.com, ferruh.yigit@intel.com, damarion@cisco.com, thomas.monjalon@6wind.com To: dev@dpdk.org Return-path: Received: from mail-lf0-f65.google.com (mail-lf0-f65.google.com [209.85.215.65]) by dpdk.org (Postfix) with ESMTP id 8FA1E5586 for ; Tue, 19 Jul 2016 16:36:01 +0200 (CEST) Received: by mail-lf0-f65.google.com with SMTP id l69so1472223lfg.1 for ; Tue, 19 Jul 2016 07:36:01 -0700 (PDT) List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Using weak symbols have a few issues with static linking: - normally the linker searches the .o files already linked, if your weak one is there, it won't check if there is a strong version - unless the symbol is directly referred, but it's not the right thing to rely on - or --whole-archive specified in the command line, which pulls in a lot of unwanted stuff - whole-archive also makes libtool dropping the library from the command line, which is what should happen with dynamic linking, but not with static (observed on Ubuntu 14.04). This is an important bug if you build a static library depending on DPDK This patch merges the two version and make the behaviour rely on the config. If we can agree in the concept, I can send a series to fix this for the other weak functions. Signed-off-by: Zoltan Kiss --- drivers/net/i40e/i40e_rxtx.c | 36 +++++++++++++++++++++++++++++++++++- drivers/net/i40e/i40e_rxtx_vec.c | 36 ------------------------------------ 2 files changed, 35 insertions(+), 37 deletions(-) diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index d3cfb98..ad34d3a 100644 --- a/drivers/net/i40e/i40e_rxtx.c +++ b/drivers/net/i40e/i40e_rxtx.c @@ -3278,10 +3278,44 @@ i40e_set_tx_function(struct rte_eth_dev *dev) } /* Stubs needed for linkage when CONFIG_RTE_I40E_INC_VECTOR is set to 'n' */ -int __attribute__((weak)) +int __attribute__((cold)) i40e_rx_vec_dev_conf_condition_check(struct rte_eth_dev __rte_unused *dev) { +#ifndef RTE_LIBRTE_I40E_INC_VECTOR return -1; +#else +#ifndef RTE_LIBRTE_IEEE1588 + struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; + struct rte_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; + + /* need SSE4.1 support */ + if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1)) + return -1; + +#ifndef RTE_LIBRTE_I40E_RX_OLFLAGS_ENABLE + /* whithout rx ol_flags, no VP flag report */ + if (rxmode->hw_vlan_strip != 0 || + rxmode->hw_vlan_extend != 0) + return -1; +#endif /* RTE_LIBRTE_I40E_RX_OLFLAGS_ENABLE */ + + /* no fdir support */ + if (fconf->mode != RTE_FDIR_MODE_NONE) + return -1; + + /* - no csum error report support + * - no header split support + */ + if (rxmode->hw_ip_checksum == 1 || + rxmode->header_split == 1) + return -1; + + return 0; +#else + RTE_SET_USED(dev); + return -1; +#endif /* RTE_LIBRTE_IEEE1588 */ +#endif /* RTE_LIBRTE_I40E_INC_VECTOR */ } uint16_t __attribute__((weak)) diff --git a/drivers/net/i40e/i40e_rxtx_vec.c b/drivers/net/i40e/i40e_rxtx_vec.c index 05cb415..983b2c0 100644 --- a/drivers/net/i40e/i40e_rxtx_vec.c +++ b/drivers/net/i40e/i40e_rxtx_vec.c @@ -723,39 +723,3 @@ i40e_txq_vec_setup(struct i40e_tx_queue __rte_unused *txq) { return 0; } - -int __attribute__((cold)) -i40e_rx_vec_dev_conf_condition_check(struct rte_eth_dev *dev) -{ -#ifndef RTE_LIBRTE_IEEE1588 - struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; - struct rte_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; - - /* need SSE4.1 support */ - if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE4_1)) - return -1; - -#ifndef RTE_LIBRTE_I40E_RX_OLFLAGS_ENABLE - /* whithout rx ol_flags, no VP flag report */ - if (rxmode->hw_vlan_strip != 0 || - rxmode->hw_vlan_extend != 0) - return -1; -#endif - - /* no fdir support */ - if (fconf->mode != RTE_FDIR_MODE_NONE) - return -1; - - /* - no csum error report support - * - no header split support - */ - if (rxmode->hw_ip_checksum == 1 || - rxmode->header_split == 1) - return -1; - - return 0; -#else - RTE_SET_USED(dev); - return -1; -#endif -} -- 1.9.1