automatic DPDK test reports
 help / color / mirror / Atom feed
[dpdk-test-report] | SUCCESS | daily Intel builds (58/58)
 2018-02-14  2:00 UTC 

[dpdk-test-report] |SUCCESS| pw35159 [PATCH] maintainers: add myself for stable branches
 2018-02-14  0:36 UTC 

[dpdk-test-report] |SUCCESS| pw35158 [PATCH] net/failsafe: fix Rx interrupt reinstallation
 2018-02-14  0:13 UTC 

[dpdk-test-report] |SUCCESS| pw35157 [PATCH] net/ixgbe: update data->eth_link status on start
 2018-02-13 23:55 UTC 

[dpdk-test-report] |WARNING| pw35159 [PATCH] maintainers: add myself for stable branches
 2018-02-13 23:33 UTC 

[dpdk-test-report] |SUCCESS| pw35156 [PATCH] net/bonding: fix link properties with autoneg
 2018-02-13 23:33 UTC 

[dpdk-test-report] |FAILURE| pw35155 [PATCH] Accessing 2nd cacheline in rte_pktmbuf_prefree_seg()
 2018-02-13 23:06 UTC 

[dpdk-test-report] |SUCCESS| pw35158 [PATCH] net/failsafe: fix Rx interrupt reinstallation
 2018-02-13 23:00 UTC 

[dpdk-test-report] |SUCCESS| pw35157 [PATCH] net/ixgbe: update data->eth_link status on start
 2018-02-13 22:56 UTC 

[dpdk-test-report] |SUCCESS| pw35156 [PATCH] net/bonding: fix link properties with autoneg
 2018-02-13 22:55 UTC 

[dpdk-test-report] |WARNING| pw35155 [PATCH] Accessing 2nd cacheline in rte_pktmbuf_prefree_seg()
 2018-02-13 22:46 UTC 

[dpdk-test-report] |SUCCESS| pw35154 [PATCH v2] net/failsafe: fix FreeBSD build
 2018-02-13 22:31 UTC 

[dpdk-test-report] |SUCCESS| pw35153 [PATCH] net/failsafe: fix FreeBSD build
 2018-02-13 22:17 UTC 

[dpdk-test-report] |SUCCESS| pw35154 [PATCH v2] net/failsafe: fix FreeBSD build
 2018-02-13 22:15 UTC 

[dpdk-test-report] |WARNING| pw35153 [PATCH] net/failsafe: fix FreeBSD build
 2018-02-13 21:34 UTC 

[dpdk-test-report] | ERROR | daily Intel builds (55/58)
 2018-02-13 20:17 UTC 

[dpdk-test-report] |FAILURE| pw35152 [PATCH v2] net/tap: fix promiscuous rules double insersions
 2018-02-13 19:22 UTC 

[dpdk-test-report] |SUCCESS| pw35152 [PATCH v2] net/tap: fix promiscuous rules double insersions
 2018-02-13 18:36 UTC 

[dpdk-test-report] |FAILURE| pw35151 [PATCH v1] net/tap: fix promiscuous rules double insersions
 2018-02-13 18:18 UTC 

[dpdk-test-report] |FAILURE| pw35150 [PATCH v2] example exception_path: cache align per CPU stats
 2018-02-13 17:28 UTC 

[dpdk-test-report] |SUCCESS| pw35151 [PATCH v1] net/tap: fix promiscuous rules double insersions
 2018-02-13 17:18 UTC 

[dpdk-test-report] |SUCCESS| pw35150 [PATCH v2] example exception_path: cache align per CPU stats
 2018-02-13 16:59 UTC 

[dpdk-test-report] |SUCCESS| pw35149 [PATCH] examples/performance-thread: updates hasan alayli's license
 2018-02-13 16:02 UTC 

[dpdk-test-report] |SUCCESS| pw35148 [PATCH] ethdev: adjust error log level
 2018-02-13 15:47 UTC 

[dpdk-test-report] |WARNING| pw35149 [PATCH] examples/performance-thread: updates hasan alayli's license
 2018-02-13 15:12 UTC 

[dpdk-test-report] |SUCCESS| pw35148 [PATCH] ethdev: adjust error log level
 2018-02-13 15:06 UTC 

[dpdk-test-report] |SUCCESS| pw35147 [PATCH] doc: fix jumbo frames entry in tap features
 2018-02-13 14:12 UTC 

[dpdk-test-report] |SUCCESS| pw35147 [PATCH] doc: fix jumbo frames entry in tap features
 2018-02-13 13:22 UTC 

[dpdk-test-report] |SUCCESS| pw35146 [PATCH] net/mlx5: revert multicast rule Verbs flow type
 2018-02-13 13:13 UTC 

[dpdk-test-report] |SUCCESS| pw35146 [PATCH] net/mlx5: revert multicast rule Verbs flow type
 2018-02-13 12:32 UTC 

[dpdk-test-report] |SUCCESS| pw35145 [PATCH v2] doc: add maintainers section to the contributors guide
 2018-02-13  9:45 UTC 

[dpdk-test-report] |SUCCESS| pw35145 [PATCH v2] doc: add maintainers section to the contributors guide
 2018-02-13  9:09 UTC 

[dpdk-test-report] |SUCCESS| pw35144 [PATCH v2] net/tap: add CRC stripping capability
 2018-02-13  8:36 UTC 

[dpdk-test-report] |SUCCESS| pw35144 [PATCH v2] net/tap: add CRC stripping capability
 2018-02-13  8:15 UTC 

[dpdk-test-report] |SUCCESS| pw35143 [PATCH] Multi-driver support for Fortville RE: dev Digest Vol 180 Issue 152Hi Beilei I was looking at the patches and have few queries regarding support-multi-driver.1) With these patches we have 2 different values for some of the global registers depending upon whether single driver or multi-driver is using all ports of the NIC. Does it impact any functionality/performance if we use DPDK drivers in single driver vs multi-driver support? 2) Why can't we have same settings for both the cases? That way we don't have to care for extra parameter.3) Does this issue need any update for kernel driver also? Regards Nitin-----Original Message----- dev Digest Vol 180 Issue 152Send dev mailing list submissions to dev@dpdk.orgTo subscribe or unsubscribe via the World Wide Web visit https://dpdk.org/ml/listinfo/devor via email send a message with subject or body 'help' to dev-request@dpdk.orgYou can reach the person managing the list at dev-owner@dpdk.orgWhen replying please edit your Subject line so it is more specific than "Re: Contents of dev digest..."Today's Topics: 1. [PATCH v3 2/4] net/i40e: add debug logs when writing global registers (Beilei Xing) 2. [PATCH v3 3/4] net/i40e: fix multiple driver support issue (Beilei Xing) 3. [PATCH v3 4/4] net/i40e: fix interrupt conflict when using multi-driver (Beilei Xing)----------------------------------------------------------------------Message: 1Date: Fri 2 Feb 2018 20:25:08 +0800 [PATCH] [PATCH v3 2/4] net/i40e: add debug logs when writing global registersMessage-ID: <1517574310-93096-3-git-send-email-beilei.xing@intel.com>Add debug logs when writing global registers.Signed-off-by: Beilei Xing <beilei.xing@intel.com>Cc: stable@dpdk.org--- drivers/net/i40e/i40e_ethdev.c | 127 +++++++++++++++++++++++++---------------- drivers/net/i40e/i40e_ethdev.h | 8 +++ 2 files changed 87 insertions(+) 48 deletions(-)diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 44821f2..ef23241 100644--- a/drivers/net/i40e/i40e_ethdev.c+++ b/drivers/net/i40e/i40e_ethdev.c@@ -716 6 +716 15 @@ rte_i40e_dev_atomic_write_link_status(struct rte_eth_dev *dev return 0; } +static inline void+i40e_write_global_rx_ctl(struct i40e_hw *hw u32 reg_addr u32 reg_val) +{+ i40e_write_rx_ctl(hw reg_addr reg_val); + PMD_DRV_LOG(DEBUG "Global register 0x%08x is modified "+ "with value 0x%08x" + reg_addr reg_val); +}+ RTE_PMD_REGISTER_PCI(net_i40e rte_i40e_pmd.pci_drv); RTE_PMD_REGISTER_PCI_TABLE(net_i40e pci_id_i40e_map); @@ -735 9 +744 9 @@ static inline void i40e_GLQF_reg_init(struct i40e_hw *hw) * configuration API is added to avoid configuration conflicts * between ports of the same device. */- I40E_WRITE_REG(hw I40E_GLQF_ORT(33) 0x000000E0); - I40E_WRITE_REG(hw I40E_GLQF_ORT(34) 0x000000E3); - I40E_WRITE_REG(hw I40E_GLQF_ORT(35) 0x000000E6); + I40E_WRITE_GLB_REG(hw I40E_GLQF_ORT(33) 0x000000E0); + I40E_WRITE_GLB_REG(hw I40E_GLQF_ORT(34) 0x000000E3); + I40E_WRITE_GLB_REG(hw I40E_GLQF_ORT(35) 0x000000E6); i40e_global_cfg_warning(I40E_WARNING_ENA_FLX_PLD); /*@@ -746 8 +755 8 @@ static inline void i40e_GLQF_reg_init(struct i40e_hw *hw) * configuration API is added to avoid configuration conflicts * between ports of the same device. */- I40E_WRITE_REG(hw I40E_GLQF_ORT(40) 0x00000029); - I40E_WRITE_REG(hw I40E_GLQF_PIT(9) 0x00009420); + I40E_WRITE_GLB_REG(hw I40E_GLQF_ORT(40) 0x00000029); + I40E_WRITE_GLB_REG(hw I40E_GLQF_PIT(9) 0x00009420); i40e_global_cfg_warning(I40E_WARNING_QINQ_PARSER); } @@ -2799 8 +2808 9 @@ i40e_vlan_tpid_set(struct rte_eth_dev *dev "I40E_GL_SWT_L2TAGCTRL[%d]" reg_id); return ret; }- PMD_DRV_LOG(DEBUG "Debug write 0x%08"PRIx64" to "- "I40E_GL_SWT_L2TAGCTRL[%d]" reg_w reg_id); + PMD_DRV_LOG(DEBUG + "Global register 0x%08x is changed with value 0x%08x" + I40E_GL_SWT_L2TAGCTRL(reg_id) (uint32_t)reg_w); i40e_global_cfg_warning(I40E_WARNING_TPID); @@ -3030 16 +3040 16 @@ i40e_flow_ctrl_set(struct rte_eth_dev *dev struct rte_eth_fc_conf *fc_conf) } /* config the water marker both based on the packets and bytes */- I40E_WRITE_REG(hw I40E_GLRPB_PHW + I40E_WRITE_GLB_REG(hw I40E_GLRPB_PHW (pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS] << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); - I40E_WRITE_REG(hw I40E_GLRPB_PLW + I40E_WRITE_GLB_REG(hw I40E_GLRPB_PLW (pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS] << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); - I40E_WRITE_REG(hw I40E_GLRPB_GHW + I40E_WRITE_GLB_REG(hw I40E_GLRPB_GHW pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS] << I40E_KILOSHIFT); - I40E_WRITE_REG(hw I40E_GLRPB_GLW + I40E_WRITE_GLB_REG(hw I40E_GLRPB_GLW pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS] << I40E_KILOSHIFT); i40e_global_cfg_warning(I40E_WARNING_FLOW_CTL); @@ -6880 6 +6890 9 @@ i40e_dev_set_gre_key_len(struct i40e_hw *hw uint8_t len) reg NULL); if (ret != 0) return ret; + PMD_DRV_LOG(DEBUG "Global register 0x%08x is changed "+ "with value 0x%08x" + I40E_GL_PRS_FVBM(2) reg); i40e_global_cfg_warning(I40E_WARNING_GRE_KEY_LEN); } else { ret = 0; @@ -7124 41 +7137 43 @@ i40e_set_hash_filter_global_config(struct i40e_hw *hw I40E_GLQF_HSYM_SYMH_ENA_MASK : 0; if (hw->mac.type == I40E_MAC_X722) { if (pctype == I40E_FILTER_PCTYPE_NONF_IPV4_UDP) {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV4_UDP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP) reg); } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV4_TCP) {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV4_TCP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK) reg); } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV6_UDP) {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV6_UDP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP) reg); } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV6_TCP) {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV6_TCP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK) reg); } else {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(pctype) - reg); + i40e_write_global_rx_ctl(hw + I40E_GLQF_HSYM(pctype) + reg); } } else {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(pctype) reg); + i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM(pctype) + reg); } i40e_global_cfg_warning(I40E_WARNING_HSYM); }@@ -7184 7 +7199 7 @@ i40e_set_hash_filter_global_config(struct i40e_hw *hw /* Use the default and keep it as it is */ goto out; - i40e_write_rx_ctl(hw I40E_GLQF_CTL reg); + i40e_write_global_rx_ctl(hw I40E_GLQF_CTL reg); i40e_global_cfg_warning(I40E_WARNING_QF_CTL); out:@@ -7799 6 +7814 18 @@ i40e_check_write_reg(struct i40e_hw *hw uint32_t addr uint32_t val) } static void+i40e_check_write_global_reg(struct i40e_hw *hw uint32_t addr uint32_t+val) {+ uint32_t reg = i40e_read_rx_ctl(hw addr); ++ PMD_DRV_LOG(DEBUG "[0x%08x] original: 0x%08x" addr reg); + if (reg != val)+ i40e_write_global_rx_ctl(hw addr val); + PMD_DRV_LOG(DEBUG "[0x%08x] after: 0x%08x" addr + (uint32_t)i40e_read_rx_ctl(hw addr)); }++static void i40e_filter_input_set_init(struct i40e_pf *pf) { struct i40e_hw *hw = I40E_PF_TO_HW(pf); @@ -7831 24 +7858 28 @@ i40e_filter_input_set_init(struct i40e_pf *pf) i40e_check_write_reg(hw I40E_PRTQF_FD_INSET(pctype 1) (uint32_t)((inset_reg >> I40E_32_BIT_WIDTH) & UINT32_MAX)); - i40e_check_write_reg(hw I40E_GLQF_HASH_INSET(0 pctype) + i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(0 pctype) (uint32_t)(inset_reg & UINT32_MAX)); - i40e_check_write_reg(hw I40E_GLQF_HASH_INSET(1 pctype) + i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(1 pctype) (uint32_t)((inset_reg >> I40E_32_BIT_WIDTH) & UINT32_MAX)); for (i = 0; i < num; i++) {- i40e_check_write_reg(hw I40E_GLQF_FD_MSK(i pctype) - mask_reg[i]); - i40e_check_write_reg(hw I40E_GLQF_HASH_MSK(i pctype) - mask_reg[i]); + i40e_check_write_global_reg(hw + I40E_GLQF_FD_MSK(i pctype) + mask_reg[i]); + i40e_check_write_global_reg(hw + I40E_GLQF_HASH_MSK(i pctype) + mask_reg[i]); } /*clear unused mask registers of the pctype */ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++) {- i40e_check_write_reg(hw I40E_GLQF_FD_MSK(i pctype) - 0); - i40e_check_write_reg(hw I40E_GLQF_HASH_MSK(i pctype) - 0); + i40e_check_write_global_reg(hw + I40E_GLQF_FD_MSK(i pctype) + 0); + i40e_check_write_global_reg(hw + I40E_GLQF_HASH_MSK(i pctype) + 0); } I40E_WRITE_FLUSH(hw); @@ -7920 20 +7951 20 @@ i40e_hash_filter_inset_select(struct i40e_hw *hw inset_reg |= i40e_translate_input_set_reg(hw->mac.type input_set); - i40e_check_write_reg(hw I40E_GLQF_HASH_INSET(0 pctype) - (uint32_t)(inset_reg & UINT32_MAX)); - i40e_check_write_reg(hw I40E_GLQF_HASH_INSET(1 pctype) - (uint32_t)((inset_reg >>- I40E_32_BIT_WIDTH) & UINT32_MAX)); + i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(0 pctype) + (uint32_t)(inset_reg & UINT32_MAX)); + i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(1 pctype) + (uint32_t)((inset_reg >>+ I40E_32_BIT_WIDTH) & UINT32_MAX)); i40e_global_cfg_warning(I40E_WARNING_HASH_INSET); for (i = 0; i < num; i++)- i40e_check_write_reg(hw I40E_GLQF_HASH_MSK(i pctype) - mask_reg[i]); + i40e_check_write_global_reg(hw I40E_GLQF_HASH_MSK(i pctype) + mask_reg[i]); /*clear unused mask registers of the pctype */ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++)- i40e_check_write_reg(hw I40E_GLQF_HASH_MSK(i pctype) - 0); + i40e_check_write_global_reg(hw I40E_GLQF_HASH_MSK(i pctype) + 0); i40e_global_cfg_warning(I40E_WARNING_HASH_MSK); I40E_WRITE_FLUSH(hw); @@ -8007 12 +8038 12 @@ i40e_fdir_filter_inset_select(struct i40e_pf *pf I40E_32_BIT_WIDTH) & UINT32_MAX)); for (i = 0; i < num; i++)- i40e_check_write_reg(hw I40E_GLQF_FD_MSK(i pctype) - mask_reg[i]); + i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) + mask_reg[i]); /*clear unused mask registers of the pctype */ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++)- i40e_check_write_reg(hw I40E_GLQF_FD_MSK(i pctype) - 0); + i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) + 0); i40e_global_cfg_warning(I40E_WARNING_FD_MSK); I40E_WRITE_FLUSH(hw); diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h index 1d813ef..12b6000 100644--- a/drivers/net/i40e/i40e_ethdev.h+++ b/drivers/net/i40e/i40e_ethdev.h@@ -103 6 +103 14 @@ (((vf)->version_major == I40E_VIRTCHNL_VERSION_MAJOR) && \ ((vf)->version_minor == 1)) +static inline void+I40E_WRITE_GLB_REG(struct i40e_hw *hw uint32_t reg uint32_t value) {+ I40E_WRITE_REG(hw reg value); + PMD_DRV_LOG(DEBUG "Global register 0x%08x is modified "+ "with value 0x%08x" + reg value); +}+ /* index flex payload per layer */ enum i40e_flxpld_layer_idx { I40E_FLXPLD_L2_IDX = 0 --2.5.5------------------------------Message: 2Date: Fri 2 Feb 2018 20:25:09 +0800 [PATCH] [PATCH v3 3/4] net/i40e: fix multiple driver support issueMessage-ID: <1517574310-93096-4-git-send-email-beilei.xing@intel.com>This patch provides the option to disable writing some global registers in PMD in order to avoid affecting other drivers when multiple drivers run on the same NIC and control different physical ports. Because there are few global resources shared among different physical ports.Fixes: ec246eeb5da1 ("i40e: use default filter input set on init")Fixes: 98f055707685 ("i40e: configure input fields for RSS or flow director")Fixes: f05ec7d77e41 ("i40e: initialize flow director flexible payload setting")Fixes: e536c2e32883 ("net/i40e: fix parsing QinQ packets type")Fixes: 19b16e2f6442 ("ethdev: add vlan type when setting ether type")Cc: stable@dpdk.orgSigned-off-by: Beilei Xing <beilei.xing@intel.com>--- drivers/net/i40e/i40e_ethdev.c | 215 ++++++++++++++++++++++++++++++++--------- drivers/net/i40e/i40e_ethdev.h | 2 + 2 files changed 171 insertions(+) 46 deletions(-)diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index ef23241..ae0f31a 100644--- a/drivers/net/i40e/i40e_ethdev.c+++ b/drivers/net/i40e/i40e_ethdev.c@@ -944 6 +944 67 @@ config_floating_veb(struct rte_eth_dev *dev) #define I40E_L2_TAGS_S_TAG_SHIFT 1 #define I40E_L2_TAGS_S_TAG_MASK I40E_MASK(0x1 I40E_L2_TAGS_S_TAG_SHIFT) +#define ETH_I40E_SUPPORT_MULTI_DRIVER "support-multi-driver"+RTE_PMD_REGISTER_PARAM_STRING(net_i40e + ETH_I40E_SUPPORT_MULTI_DRIVER "=0|1"); ++static int+i40e_parse_multi_drv_handler(__rte_unused const char *key + const char *value + void *opaque)+{+ struct i40e_pf *pf; + unsigned long support_multi_driver; + char *end; ++ pf = (struct i40e_pf *)opaque; ++ errno = 0; + support_multi_driver = strtoul(value &end 10); + if (errno != 0 || end == value || *end != 0) {+ PMD_DRV_LOG(WARNING "Wrong global configuration"); + return -(EINVAL); + }++ if (support_multi_driver == 1 || support_multi_driver == 0)+ pf->support_multi_driver = (bool)support_multi_driver; + else+ PMD_DRV_LOG(WARNING "%s must be 1 or 0 " + "enable global configuration by default."+ ETH_I40E_SUPPORT_MULTI_DRIVER); + return 0; +}++static int+i40e_support_multi_driver(struct rte_eth_dev *dev) {+ struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); + struct rte_pci_device *pci_dev = dev->pci_dev; + static const char *valid_keys[] = {+ ETH_I40E_SUPPORT_MULTI_DRIVER NULL}; + struct rte_kvargs *kvlist; ++ /* Enable global configuration by default */+ pf->support_multi_driver = false; ++ if (!pci_dev->device.devargs)+ return 0; ++ kvlist = rte_kvargs_parse(pci_dev->device.devargs->args valid_keys); + if (!kvlist)+ return -EINVAL; ++ if (rte_kvargs_count(kvlist ETH_I40E_SUPPORT_MULTI_DRIVER) > 1)+ PMD_DRV_LOG(WARNING "More than one argument \"%s\" and only "+ "the first invalid or last valid one is used !" + ETH_I40E_SUPPORT_MULTI_DRIVER); ++ rte_kvargs_process(kvlist ETH_I40E_SUPPORT_MULTI_DRIVER + i40e_parse_multi_drv_handler pf); + rte_kvargs_free(kvlist); + return 0; +}+ static int eth_i40e_dev_init(struct rte_eth_dev *dev) { @@ -993 6 +1054 9 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) hw->bus.func = pci_dev->addr.function; hw->adapter_stopped = 0; + /* Check if need to support multi-driver */+ i40e_support_multi_driver(dev); + /* Make sure all is clean before doing PF reset */ i40e_clear_hw(hw); @@ -1019 7 +1083 8 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) * software. It should be removed once issues are fixed * in NVM. */- i40e_GLQF_reg_init(hw); + if (!pf->support_multi_driver)+ i40e_GLQF_reg_init(hw); /* Initialize the input set for filters (hash and fd) to default value */ i40e_filter_input_set_init(pf); @@ -1115 11 +1180 14 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) i40e_set_fc(hw &aq_fail TRUE); /* Set the global registers with default ether type value */- ret = i40e_vlan_tpid_set(dev ETH_VLAN_TYPE_OUTER ETHER_TYPE_VLAN); - if (ret != I40E_SUCCESS) {- PMD_INIT_LOG(ERR "Failed to set the default outer "- "VLAN ether type"); - goto err_setup_pf_switch; + if (!pf->support_multi_driver) {+ ret = i40e_vlan_tpid_set(dev ETH_VLAN_TYPE_OUTER + ETHER_TYPE_VLAN); + if (ret != I40E_SUCCESS) {+ PMD_INIT_LOG(ERR "Failed to set the default outer "+ "VLAN ether type"); + goto err_setup_pf_switch; + } } /* PF setup which includes VSI setup */ @@ -2754 11 +2822 17 @@ i40e_vlan_tpid_set(struct rte_eth_dev *dev uint16_t tpid) { struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); + struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); uint64_t reg_r = 0 reg_w = 0; uint16_t reg_id = 0; int ret = 0; int qinq = dev->data->dev_conf.rxmode.hw_vlan_extend; + if (pf->support_multi_driver) {+ PMD_DRV_LOG(ERR "Setting TPID is not supported."); + return -ENOTSUP; + }+ switch (vlan_type) { case ETH_VLAN_TYPE_OUTER: if (qinq)@@ -3039 20 +3113 25 @@ i40e_flow_ctrl_set(struct rte_eth_dev *dev struct rte_eth_fc_conf *fc_conf) I40E_WRITE_REG(hw I40E_PRTDCB_MFLCN mflcn_reg); } - /* config the water marker both based on the packets and bytes */- I40E_WRITE_GLB_REG(hw I40E_GLRPB_PHW - (pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS]- << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); - I40E_WRITE_GLB_REG(hw I40E_GLRPB_PLW - (pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS]- << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); - I40E_WRITE_GLB_REG(hw I40E_GLRPB_GHW - pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS]- << I40E_KILOSHIFT); - I40E_WRITE_GLB_REG(hw I40E_GLRPB_GLW - pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS]- << I40E_KILOSHIFT); - i40e_global_cfg_warning(I40E_WARNING_FLOW_CTL); + if (!pf->support_multi_driver) {+ /* config water marker both based on the packets and bytes */+ I40E_WRITE_GLB_REG(hw I40E_GLRPB_PHW + (pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS]+ << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); + I40E_WRITE_GLB_REG(hw I40E_GLRPB_PLW + (pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS]+ << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); + I40E_WRITE_GLB_REG(hw I40E_GLRPB_GHW + pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS]+ << I40E_KILOSHIFT); + I40E_WRITE_GLB_REG(hw I40E_GLRPB_GLW + pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS]+ << I40E_KILOSHIFT); + i40e_global_cfg_warning(I40E_WARNING_FLOW_CTL); + } else {+ PMD_DRV_LOG(ERR + "Water marker configuration is not supported."); + } I40E_WRITE_FLUSH(hw); @@ -6870 9 +6949 15 @@ i40e_tunnel_filter_param_check(struct i40e_pf *pf static int i40e_dev_set_gre_key_len(struct i40e_hw *hw uint8_t len) {+ struct i40e_pf *pf = &((struct i40e_adapter *)hw->back)->pf; uint32_t val reg; int ret = -EINVAL; + if (pf->support_multi_driver) {+ PMD_DRV_LOG(ERR "GRE key length configuration is unsupported"); + return -ENOTSUP; + }+ val = I40E_READ_REG(hw I40E_GL_PRS_FVBM(2)); PMD_DRV_LOG(DEBUG "Read original GL_PRS_FVBM with 0x%08x\n" val); @@ -7114 12 +7199 18 @@ static int i40e_set_hash_filter_global_config(struct i40e_hw *hw struct rte_eth_hash_global_conf *g_cfg) {+ struct i40e_pf *pf = &((struct i40e_adapter *)hw->back)->pf; int ret; uint16_t i; uint32_t reg; uint32_t mask0 = g_cfg->valid_bit_mask[0]; enum i40e_filter_pctype pctype; + if (pf->support_multi_driver) {+ PMD_DRV_LOG(ERR "Hash global configuration is not supported."); + return -ENOTSUP; + }+ /* Check the input parameters */ ret = i40e_hash_global_config_check(g_cfg); if (ret < 0)@@ -7850 6 +7941 12 @@ i40e_filter_input_set_init(struct i40e_pf *pf) I40E_INSET_MASK_NUM_REG); if (num < 0) return; ++ if (pf->support_multi_driver && num > 0) {+ PMD_DRV_LOG(ERR "Input set setting is not supported."); + return; + }+ inset_reg = i40e_translate_input_set_reg(hw->mac.type input_set); @@ -7858 39 +7955 49 @@ i40e_filter_input_set_init(struct i40e_pf *pf) i40e_check_write_reg(hw I40E_PRTQF_FD_INSET(pctype 1) (uint32_t)((inset_reg >> I40E_32_BIT_WIDTH) & UINT32_MAX)); - i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(0 pctype) - (uint32_t)(inset_reg & UINT32_MAX)); - i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(1 pctype) - (uint32_t)((inset_reg >>- I40E_32_BIT_WIDTH) & UINT32_MAX)); -- for (i = 0; i < num; i++) {+ if (!pf->support_multi_driver) {+ i40e_check_write_global_reg(hw + I40E_GLQF_HASH_INSET(0 pctype) + (uint32_t)(inset_reg & UINT32_MAX)); i40e_check_write_global_reg(hw + I40E_GLQF_HASH_INSET(1 pctype) + (uint32_t)((inset_reg >>+ I40E_32_BIT_WIDTH) & UINT32_MAX)); ++ for (i = 0; i < num; i++) {+ i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) mask_reg[i]); - i40e_check_write_global_reg(hw + i40e_check_write_global_reg(hw I40E_GLQF_HASH_MSK(i pctype) mask_reg[i]); - }- /*clear unused mask registers of the pctype */- for (i = num; i < I40E_INSET_MASK_NUM_REG; i++) {- i40e_check_write_global_reg(hw + }+ /*clear unused mask registers of the pctype */+ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++) {+ i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) 0); - i40e_check_write_global_reg(hw + i40e_check_write_global_reg(hw I40E_GLQF_HASH_MSK(i pctype) - 0); + 0); + }+ } else {+ PMD_DRV_LOG(ERR + "Input set setting is not supported."); } I40E_WRITE_FLUSH(hw); /* store the default input set */- pf->hash_input_set[pctype] = input_set; + if (!pf->support_multi_driver)+ pf->hash_input_set[pctype] = input_set; pf->fdir.input_set[pctype] = input_set; } - i40e_global_cfg_warning(I40E_WARNING_HASH_INSET); - i40e_global_cfg_warning(I40E_WARNING_FD_MSK); - i40e_global_cfg_warning(I40E_WARNING_HASH_MSK); + if (!pf->support_multi_driver) {+ i40e_global_cfg_warning(I40E_WARNING_HASH_INSET); + i40e_global_cfg_warning(I40E_WARNING_FD_MSK); + i40e_global_cfg_warning(I40E_WARNING_HASH_MSK); + } } int@@ -7903 6 +8010 11 @@ i40e_hash_filter_inset_select(struct i40e_hw *hw uint32_t mask_reg[I40E_INSET_MASK_NUM_REG] = {0}; int ret i num; + if (pf->support_multi_driver) {+ PMD_DRV_LOG(ERR "Hash input set setting is not supported."); + return -ENOTSUP; + }+ if (!conf) { PMD_DRV_LOG(ERR "Invalid pointer"); return -EFAULT; @@ -8029 6 +8141 11 @@ i40e_fdir_filter_inset_select(struct i40e_pf *pf if (num < 0) return -EINVAL; + if (pf->support_multi_driver && num > 0) {+ PMD_DRV_LOG(ERR "FDIR bit mask is not supported."); + return -ENOTSUP; + }+ inset_reg |= i40e_translate_input_set_reg(hw->mac.type input_set); i40e_check_write_reg(hw I40E_PRTQF_FD_INSET(pctype 0) @@ -8037 14 +8154 20 @@ i40e_fdir_filter_inset_select(struct i40e_pf *pf (uint32_t)((inset_reg >> I40E_32_BIT_WIDTH) & UINT32_MAX)); - for (i = 0; i < num; i++)- i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) - mask_reg[i]); - /*clear unused mask registers of the pctype */- for (i = num; i < I40E_INSET_MASK_NUM_REG; i++)- i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) - 0); - i40e_global_cfg_warning(I40E_WARNING_FD_MSK); + if (!pf->support_multi_driver) {+ for (i = 0; i < num; i++)+ i40e_check_write_global_reg(hw + I40E_GLQF_FD_MSK(i pctype) + mask_reg[i]); + /*clear unused mask registers of the pctype */+ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++)+ i40e_check_write_global_reg(hw + I40E_GLQF_FD_MSK(i pctype) + 0); + i40e_global_cfg_warning(I40E_WARNING_FD_MSK); + } else {+ PMD_DRV_LOG(ERR "FDIR bit mask is not supported."); + } I40E_WRITE_FLUSH(hw); pf->fdir.input_set[pctype] = input_set; diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h index 12b6000..82d5501 100644--- a/drivers/net/i40e/i40e_ethdev.h+++ b/drivers/net/i40e/i40e_ethdev.h@@ -485 6 +485 8 @@ struct i40e_pf { bool floating_veb; /* The flag to use the floating VEB */ /* The floating enable flag for the specific VF */ bool floating_veb_list[I40E_MAX_VF]; ++ bool support_multi_driver; /* 1 - support multiple driver */ }; enum pending_msg {--2.5.5------------------------------Message: 3Date: Fri 2 Feb 2018 20:25:10 +0800
 2018-02-13  4:37 UTC 

[dpdk-test-report] |SUCCESS| pw35142 [PATCH] example exception_path: cache align per CPU stats
 2018-02-13  4:26 UTC 

[dpdk-test-report] |WARNING| pw35143 [PATCH] Multi-driver support for Fortville
 2018-02-13  3:48 UTC 

[dpdk-test-report] |SUCCESS| pw35142 [PATCH] example exception_path: cache align per CPU stats
 2018-02-13  3:45 UTC 

[dpdk-test-report] |FAILURE| pw35141 [PATCH v7 3/3] net/failsafe: fix hotplug races
 2018-02-12 21:58 UTC 

[dpdk-test-report] |SUCCESS| pw35140 [PATCH v7 2/3] net/failsafe: fix removal scope
 2018-02-12 21:50 UTC 

[dpdk-test-report] |SUCCESS| pw35139 [PATCH v7 1/3] net/failsafe: fix hotplug alarm cancel
 2018-02-12 21:50 UTC 

[dpdk-test-report] |WARNING| pw35141 [PATCH v7 3/3] net/failsafe: fix hotplug races
 2018-02-12 20:53 UTC 

[dpdk-test-report] |SUCCESS| pw35139 [PATCH v7 1/3] net/failsafe: fix hotplug alarm cancel
 2018-02-12 20:53 UTC 

[dpdk-test-report] |SUCCESS| pw35140 [PATCH v7 2/3] net/failsafe: fix removal scope
 2018-02-12 20:53 UTC 

[dpdk-test-report] | SUCCESS | daily Intel builds (58/58)
 2018-02-12 20:16 UTC 

[dpdk-test-report] |SUCCESS| pw35138 [PATCH] doc: improve HTML spacing in release notes
 2018-02-12 18:14 UTC 

[dpdk-test-report] |SUCCESS| pw35138 [PATCH] doc: improve HTML spacing in release notes
 2018-02-12 17:46 UTC 

[dpdk-test-report] |SUCCESS| pw35137 [PATCH] devtools: add script to verify map files
 2018-02-12 17:09 UTC 

[dpdk-test-report] |SUCCESS| pw35136 [PATCH v2 3/3] vhost: don't take access_lock on VHOST_USER_RESET_OWNER
 2018-02-12 16:59 UTC 

[dpdk-test-report] |SUCCESS| pw35134 [PATCH v2 1/3] net/virtio: fix mbuf data offset for simple Rx function
 2018-02-12 16:59 UTC 

[dpdk-test-report] |SUCCESS| pw35135 [PATCH v2 2/3] virtio: fix resuming port with rx vector path
 2018-02-12 16:55 UTC 

[dpdk-test-report] |SUCCESS| pw35137 [PATCH] devtools: add script to verify map files
 2018-02-12 16:14 UTC 

[dpdk-test-report] |SUCCESS| pw35135 [PATCH v2 2/3] virtio: fix resuming port with rx vector path
 2018-02-12 15:47 UTC 

[dpdk-test-report] |SUCCESS| pw35136 [PATCH v2 3/3] vhost: don't take access_lock on VHOST_USER_RESET_OWNER
 2018-02-12 15:47 UTC 

[dpdk-test-report] |SUCCESS| pw35134 [PATCH v2 1/3] net/virtio: fix mbuf data offset for simple Rx function
 2018-02-12 15:47 UTC 

[dpdk-test-report] |SUCCESS| pw35133 [PATCH v1] net/tap: allow user MAC to be passed as args
 2018-02-12 15:39 UTC 

[dpdk-test-report] |SUCCESS| pw35132 [PATCH v1] net/tap: fix CRC stripping capability report
 2018-02-12 15:19 UTC 

[dpdk-test-report] |SUCCESS| pw35133 [PATCH v1] net/tap: allow user MAC to be passed as args
 2018-02-12 14:46 UTC 

[dpdk-test-report] |SUCCESS| pw35131 [PATCH dpdk-stable] build: remove unused map symbols
 2018-02-12 14:46 UTC 

[dpdk-test-report] |SUCCESS| pw35132 [PATCH v1] net/tap: fix CRC stripping capability report
 2018-02-12 14:44 UTC 

[dpdk-test-report] |SUCCESS| pw35130 [PATCH] net/virtio: fix mbuf data offset for simple Rx function
 2018-02-12 14:27 UTC 

[dpdk-test-report] |SUCCESS| pw35131 [PATCH dpdk-stable] build: remove unused map symbols
 2018-02-12 14:24 UTC 

[dpdk-test-report] |SUCCESS| pw35129 [PATCH v3] ethdev: fix ethdev data alignment
 2018-02-12 13:45 UTC 

[dpdk-test-report] |SUCCESS| pw35130 [PATCH] net/virtio: fix mbuf data offset for simple Rx function
 2018-02-12 13:17 UTC 

[dpdk-test-report] |SUCCESS| pw35129 [PATCH v3] ethdev: fix ethdev data alignment
 2018-02-12 13:15 UTC 

[dpdk-test-report] |SUCCESS| pw35128 [PATCH v2] doc: update doc for intel VF usage
 2018-02-12 11:44 UTC 

[dpdk-test-report] |SUCCESS| pw35127 [PATCH] doc: update doc for intel VF usage
 2018-02-12 11:16 UTC 

[dpdk-test-report] |SUCCESS| pw35126 [PATCH] net/nfp: rename nfp PF file
 2018-02-12 10:45 UTC 

[dpdk-test-report] |SUCCESS| pw35128 [PATCH v2] doc: update doc for intel VF usage
 2018-02-12 10:35 UTC 

[dpdk-test-report] |WARNING| pw35127 [PATCH] doc: update doc for intel VF usage
 2018-02-12 10:25 UTC 

[dpdk-test-report] |SUCCESS| pw35126 [PATCH] net/nfp: rename nfp PF file
 2018-02-12  9:59 UTC 

[dpdk-test-report] |SUCCESS| pw35125 [PATCH] MAINTAINERS: resign from vhost/virtio maintainer
 2018-02-12  9:32 UTC 

[dpdk-test-report] |SUCCESS| pw35125 [PATCH] MAINTAINERS: resign from vhost/virtio maintainer
 2018-02-12  8:52 UTC 

[dpdk-test-report] |SUCCESS| pw35124 [PATCH] dev Digest Vol 180 Issue 152 dev Digest Vol 180 Issue 152Send dev mailing list submissions to dev@dpdk.orgTo subscribe or unsubscribe via the World Wide Web visit https://dpdk.org/ml/listinfo/devor via email send a message with subject or body 'help' to dev-request@dpdk.orgYou can reach the person managing the list at dev-owner@dpdk.orgWhen replying please edit your Subject line so it is more specific than "Re: Contents of dev digest..."Today's Topics: 1. [PATCH v3 2/4] net/i40e: add debug logs when writing global registers (Beilei Xing) 2. [PATCH v3 3/4] net/i40e: fix multiple driver support issue (Beilei Xing) 3. [PATCH v3 4/4] net/i40e: fix interrupt conflict when using multi-driver (Beilei Xing)----------------------------------------------------------------------Message: 1Date: Fri 2 Feb 2018 20:25:08 +0800 [PATCH] [PATCH v3 2/4] net/i40e: add debug logs when writing global registersMessage-ID: <1517574310-93096-3-git-send-email-beilei.xing@intel.com>Add debug logs when writing global registers.Signed-off-by: Beilei Xing <beilei.xing@intel.com>Cc: stable@dpdk.org--- drivers/net/i40e/i40e_ethdev.c | 127 +++++++++++++++++++++++++---------------- drivers/net/i40e/i40e_ethdev.h | 8 +++ 2 files changed 87 insertions(+) 48 deletions(-)diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 44821f2..ef23241 100644--- a/drivers/net/i40e/i40e_ethdev.c+++ b/drivers/net/i40e/i40e_ethdev.c@@ -716 6 +716 15 @@ rte_i40e_dev_atomic_write_link_status(struct rte_eth_dev *dev return 0; } +static inline void+i40e_write_global_rx_ctl(struct i40e_hw *hw u32 reg_addr u32 reg_val) +{+ i40e_write_rx_ctl(hw reg_addr reg_val); + PMD_DRV_LOG(DEBUG "Global register 0x%08x is modified "+ "with value 0x%08x" + reg_addr reg_val); +}+ RTE_PMD_REGISTER_PCI(net_i40e rte_i40e_pmd.pci_drv); RTE_PMD_REGISTER_PCI_TABLE(net_i40e pci_id_i40e_map); @@ -735 9 +744 9 @@ static inline void i40e_GLQF_reg_init(struct i40e_hw *hw) * configuration API is added to avoid configuration conflicts * between ports of the same device. */- I40E_WRITE_REG(hw I40E_GLQF_ORT(33) 0x000000E0); - I40E_WRITE_REG(hw I40E_GLQF_ORT(34) 0x000000E3); - I40E_WRITE_REG(hw I40E_GLQF_ORT(35) 0x000000E6); + I40E_WRITE_GLB_REG(hw I40E_GLQF_ORT(33) 0x000000E0); + I40E_WRITE_GLB_REG(hw I40E_GLQF_ORT(34) 0x000000E3); + I40E_WRITE_GLB_REG(hw I40E_GLQF_ORT(35) 0x000000E6); i40e_global_cfg_warning(I40E_WARNING_ENA_FLX_PLD); /*@@ -746 8 +755 8 @@ static inline void i40e_GLQF_reg_init(struct i40e_hw *hw) * configuration API is added to avoid configuration conflicts * between ports of the same device. */- I40E_WRITE_REG(hw I40E_GLQF_ORT(40) 0x00000029); - I40E_WRITE_REG(hw I40E_GLQF_PIT(9) 0x00009420); + I40E_WRITE_GLB_REG(hw I40E_GLQF_ORT(40) 0x00000029); + I40E_WRITE_GLB_REG(hw I40E_GLQF_PIT(9) 0x00009420); i40e_global_cfg_warning(I40E_WARNING_QINQ_PARSER); } @@ -2799 8 +2808 9 @@ i40e_vlan_tpid_set(struct rte_eth_dev *dev "I40E_GL_SWT_L2TAGCTRL[%d]" reg_id); return ret; }- PMD_DRV_LOG(DEBUG "Debug write 0x%08"PRIx64" to "- "I40E_GL_SWT_L2TAGCTRL[%d]" reg_w reg_id); + PMD_DRV_LOG(DEBUG + "Global register 0x%08x is changed with value 0x%08x" + I40E_GL_SWT_L2TAGCTRL(reg_id) (uint32_t)reg_w); i40e_global_cfg_warning(I40E_WARNING_TPID); @@ -3030 16 +3040 16 @@ i40e_flow_ctrl_set(struct rte_eth_dev *dev struct rte_eth_fc_conf *fc_conf) } /* config the water marker both based on the packets and bytes */- I40E_WRITE_REG(hw I40E_GLRPB_PHW + I40E_WRITE_GLB_REG(hw I40E_GLRPB_PHW (pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS] << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); - I40E_WRITE_REG(hw I40E_GLRPB_PLW + I40E_WRITE_GLB_REG(hw I40E_GLRPB_PLW (pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS] << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); - I40E_WRITE_REG(hw I40E_GLRPB_GHW + I40E_WRITE_GLB_REG(hw I40E_GLRPB_GHW pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS] << I40E_KILOSHIFT); - I40E_WRITE_REG(hw I40E_GLRPB_GLW + I40E_WRITE_GLB_REG(hw I40E_GLRPB_GLW pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS] << I40E_KILOSHIFT); i40e_global_cfg_warning(I40E_WARNING_FLOW_CTL); @@ -6880 6 +6890 9 @@ i40e_dev_set_gre_key_len(struct i40e_hw *hw uint8_t len) reg NULL); if (ret != 0) return ret; + PMD_DRV_LOG(DEBUG "Global register 0x%08x is changed "+ "with value 0x%08x" + I40E_GL_PRS_FVBM(2) reg); i40e_global_cfg_warning(I40E_WARNING_GRE_KEY_LEN); } else { ret = 0; @@ -7124 41 +7137 43 @@ i40e_set_hash_filter_global_config(struct i40e_hw *hw I40E_GLQF_HSYM_SYMH_ENA_MASK : 0; if (hw->mac.type == I40E_MAC_X722) { if (pctype == I40E_FILTER_PCTYPE_NONF_IPV4_UDP) {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV4_UDP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP) reg); } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV4_TCP) {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV4_TCP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK) reg); } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV6_UDP) {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV6_UDP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP) reg); } else if (pctype == I40E_FILTER_PCTYPE_NONF_IPV6_TCP) {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV6_TCP) reg); - i40e_write_rx_ctl(hw I40E_GLQF_HSYM(+ i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM( I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK) reg); } else {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(pctype) - reg); + i40e_write_global_rx_ctl(hw + I40E_GLQF_HSYM(pctype) + reg); } } else {- i40e_write_rx_ctl(hw I40E_GLQF_HSYM(pctype) reg); + i40e_write_global_rx_ctl(hw I40E_GLQF_HSYM(pctype) + reg); } i40e_global_cfg_warning(I40E_WARNING_HSYM); }@@ -7184 7 +7199 7 @@ i40e_set_hash_filter_global_config(struct i40e_hw *hw /* Use the default and keep it as it is */ goto out; - i40e_write_rx_ctl(hw I40E_GLQF_CTL reg); + i40e_write_global_rx_ctl(hw I40E_GLQF_CTL reg); i40e_global_cfg_warning(I40E_WARNING_QF_CTL); out:@@ -7799 6 +7814 18 @@ i40e_check_write_reg(struct i40e_hw *hw uint32_t addr uint32_t val) } static void+i40e_check_write_global_reg(struct i40e_hw *hw uint32_t addr uint32_t +val) {+ uint32_t reg = i40e_read_rx_ctl(hw addr); ++ PMD_DRV_LOG(DEBUG "[0x%08x] original: 0x%08x" addr reg); + if (reg != val)+ i40e_write_global_rx_ctl(hw addr val); + PMD_DRV_LOG(DEBUG "[0x%08x] after: 0x%08x" addr + (uint32_t)i40e_read_rx_ctl(hw addr)); }++static void i40e_filter_input_set_init(struct i40e_pf *pf) { struct i40e_hw *hw = I40E_PF_TO_HW(pf); @@ -7831 24 +7858 28 @@ i40e_filter_input_set_init(struct i40e_pf *pf) i40e_check_write_reg(hw I40E_PRTQF_FD_INSET(pctype 1) (uint32_t)((inset_reg >> I40E_32_BIT_WIDTH) & UINT32_MAX)); - i40e_check_write_reg(hw I40E_GLQF_HASH_INSET(0 pctype) + i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(0 pctype) (uint32_t)(inset_reg & UINT32_MAX)); - i40e_check_write_reg(hw I40E_GLQF_HASH_INSET(1 pctype) + i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(1 pctype) (uint32_t)((inset_reg >> I40E_32_BIT_WIDTH) & UINT32_MAX)); for (i = 0; i < num; i++) {- i40e_check_write_reg(hw I40E_GLQF_FD_MSK(i pctype) - mask_reg[i]); - i40e_check_write_reg(hw I40E_GLQF_HASH_MSK(i pctype) - mask_reg[i]); + i40e_check_write_global_reg(hw + I40E_GLQF_FD_MSK(i pctype) + mask_reg[i]); + i40e_check_write_global_reg(hw + I40E_GLQF_HASH_MSK(i pctype) + mask_reg[i]); } /*clear unused mask registers of the pctype */ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++) {- i40e_check_write_reg(hw I40E_GLQF_FD_MSK(i pctype) - 0); - i40e_check_write_reg(hw I40E_GLQF_HASH_MSK(i pctype) - 0); + i40e_check_write_global_reg(hw + I40E_GLQF_FD_MSK(i pctype) + 0); + i40e_check_write_global_reg(hw + I40E_GLQF_HASH_MSK(i pctype) + 0); } I40E_WRITE_FLUSH(hw); @@ -7920 20 +7951 20 @@ i40e_hash_filter_inset_select(struct i40e_hw *hw inset_reg |= i40e_translate_input_set_reg(hw->mac.type input_set); - i40e_check_write_reg(hw I40E_GLQF_HASH_INSET(0 pctype) - (uint32_t)(inset_reg & UINT32_MAX)); - i40e_check_write_reg(hw I40E_GLQF_HASH_INSET(1 pctype) - (uint32_t)((inset_reg >>- I40E_32_BIT_WIDTH) & UINT32_MAX)); + i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(0 pctype) + (uint32_t)(inset_reg & UINT32_MAX)); + i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(1 pctype) + (uint32_t)((inset_reg >>+ I40E_32_BIT_WIDTH) & UINT32_MAX)); i40e_global_cfg_warning(I40E_WARNING_HASH_INSET); for (i = 0; i < num; i++)- i40e_check_write_reg(hw I40E_GLQF_HASH_MSK(i pctype) - mask_reg[i]); + i40e_check_write_global_reg(hw I40E_GLQF_HASH_MSK(i pctype) + mask_reg[i]); /*clear unused mask registers of the pctype */ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++)- i40e_check_write_reg(hw I40E_GLQF_HASH_MSK(i pctype) - 0); + i40e_check_write_global_reg(hw I40E_GLQF_HASH_MSK(i pctype) + 0); i40e_global_cfg_warning(I40E_WARNING_HASH_MSK); I40E_WRITE_FLUSH(hw); @@ -8007 12 +8038 12 @@ i40e_fdir_filter_inset_select(struct i40e_pf *pf I40E_32_BIT_WIDTH) & UINT32_MAX)); for (i = 0; i < num; i++)- i40e_check_write_reg(hw I40E_GLQF_FD_MSK(i pctype) - mask_reg[i]); + i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) + mask_reg[i]); /*clear unused mask registers of the pctype */ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++)- i40e_check_write_reg(hw I40E_GLQF_FD_MSK(i pctype) - 0); + i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) + 0); i40e_global_cfg_warning(I40E_WARNING_FD_MSK); I40E_WRITE_FLUSH(hw); diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h index 1d813ef..12b6000 100644--- a/drivers/net/i40e/i40e_ethdev.h+++ b/drivers/net/i40e/i40e_ethdev.h@@ -103 6 +103 14 @@ (((vf)->version_major == I40E_VIRTCHNL_VERSION_MAJOR) && \ ((vf)->version_minor == 1)) +static inline void+I40E_WRITE_GLB_REG(struct i40e_hw *hw uint32_t reg uint32_t value) {+ I40E_WRITE_REG(hw reg value); + PMD_DRV_LOG(DEBUG "Global register 0x%08x is modified "+ "with value 0x%08x" + reg value); +}+ /* index flex payload per layer */ enum i40e_flxpld_layer_idx { I40E_FLXPLD_L2_IDX = 0 --2.5.5------------------------------Message: 2Date: Fri 2 Feb 2018 20:25:09 +0800 [PATCH] [PATCH v3 3/4] net/i40e: fix multiple driver support issueMessage-ID: <1517574310-93096-4-git-send-email-beilei.xing@intel.com>This patch provides the option to disable writing some global registersin PMD in order to avoid affecting other drivers when multiple driversrun on the same NIC and control different physical ports. Because thereare few global resources shared among different physical ports.Fixes: ec246eeb5da1 ("i40e: use default filter input set on init")Fixes: 98f055707685 ("i40e: configure input fields for RSS or flow director")Fixes: f05ec7d77e41 ("i40e: initialize flow director flexible payload setting")Fixes: e536c2e32883 ("net/i40e: fix parsing QinQ packets type")Fixes: 19b16e2f6442 ("ethdev: add vlan type when setting ether type")Cc: stable@dpdk.orgSigned-off-by: Beilei Xing <beilei.xing@intel.com>--- drivers/net/i40e/i40e_ethdev.c | 215 ++++++++++++++++++++++++++++++++--------- drivers/net/i40e/i40e_ethdev.h | 2 + 2 files changed 171 insertions(+) 46 deletions(-)diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.cindex ef23241..ae0f31a 100644--- a/drivers/net/i40e/i40e_ethdev.c+++ b/drivers/net/i40e/i40e_ethdev.c@@ -944 6 +944 67 @@ config_floating_veb(struct rte_eth_dev *dev) #define I40E_L2_TAGS_S_TAG_SHIFT 1 #define I40E_L2_TAGS_S_TAG_MASK I40E_MASK(0x1 I40E_L2_TAGS_S_TAG_SHIFT) +#define ETH_I40E_SUPPORT_MULTI_DRIVER "support-multi-driver"+RTE_PMD_REGISTER_PARAM_STRING(net_i40e + ETH_I40E_SUPPORT_MULTI_DRIVER "=0|1"); ++static int+i40e_parse_multi_drv_handler(__rte_unused const char *key + const char *value + void *opaque)+{+ struct i40e_pf *pf; + unsigned long support_multi_driver; + char *end; ++ pf = (struct i40e_pf *)opaque; ++ errno = 0; + support_multi_driver = strtoul(value &end 10); + if (errno != 0 || end == value || *end != 0) {+ PMD_DRV_LOG(WARNING "Wrong global configuration"); + return -(EINVAL); + }++ if (support_multi_driver == 1 || support_multi_driver == 0)+ pf->support_multi_driver = (bool)support_multi_driver; + else+ PMD_DRV_LOG(WARNING "%s must be 1 or 0 " + "enable global configuration by default."+ ETH_I40E_SUPPORT_MULTI_DRIVER); + return 0; +}++static int+i40e_support_multi_driver(struct rte_eth_dev *dev)+{+ struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); + struct rte_pci_device *pci_dev = dev->pci_dev; + static const char *valid_keys[] = {+ ETH_I40E_SUPPORT_MULTI_DRIVER NULL}; + struct rte_kvargs *kvlist; ++ /* Enable global configuration by default */+ pf->support_multi_driver = false; ++ if (!pci_dev->device.devargs)+ return 0; ++ kvlist = rte_kvargs_parse(pci_dev->device.devargs->args valid_keys); + if (!kvlist)+ return -EINVAL; ++ if (rte_kvargs_count(kvlist ETH_I40E_SUPPORT_MULTI_DRIVER) > 1)+ PMD_DRV_LOG(WARNING "More than one argument \"%s\" and only "+ "the first invalid or last valid one is used !" + ETH_I40E_SUPPORT_MULTI_DRIVER); ++ rte_kvargs_process(kvlist ETH_I40E_SUPPORT_MULTI_DRIVER + i40e_parse_multi_drv_handler pf); + rte_kvargs_free(kvlist); + return 0; +}+ static int eth_i40e_dev_init(struct rte_eth_dev *dev) {@@ -993 6 +1054 9 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) hw->bus.func = pci_dev->addr.function; hw->adapter_stopped = 0; + /* Check if need to support multi-driver */+ i40e_support_multi_driver(dev); + /* Make sure all is clean before doing PF reset */ i40e_clear_hw(hw); @@ -1019 7 +1083 8 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) * software. It should be removed once issues are fixed * in NVM. */- i40e_GLQF_reg_init(hw); + if (!pf->support_multi_driver)+ i40e_GLQF_reg_init(hw); /* Initialize the input set for filters (hash and fd) to default value */ i40e_filter_input_set_init(pf); @@ -1115 11 +1180 14 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) i40e_set_fc(hw &aq_fail TRUE); /* Set the global registers with default ether type value */- ret = i40e_vlan_tpid_set(dev ETH_VLAN_TYPE_OUTER ETHER_TYPE_VLAN); - if (ret != I40E_SUCCESS) {- PMD_INIT_LOG(ERR "Failed to set the default outer "- "VLAN ether type"); - goto err_setup_pf_switch; + if (!pf->support_multi_driver) {+ ret = i40e_vlan_tpid_set(dev ETH_VLAN_TYPE_OUTER + ETHER_TYPE_VLAN); + if (ret != I40E_SUCCESS) {+ PMD_INIT_LOG(ERR "Failed to set the default outer "+ "VLAN ether type"); + goto err_setup_pf_switch; + } } /* PF setup which includes VSI setup */@@ -2754 11 +2822 17 @@ i40e_vlan_tpid_set(struct rte_eth_dev *dev uint16_t tpid) { struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); + struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); uint64_t reg_r = 0 reg_w = 0; uint16_t reg_id = 0; int ret = 0; int qinq = dev->data->dev_conf.rxmode.hw_vlan_extend; + if (pf->support_multi_driver) {+ PMD_DRV_LOG(ERR "Setting TPID is not supported."); + return -ENOTSUP; + }+ switch (vlan_type) { case ETH_VLAN_TYPE_OUTER: if (qinq)@@ -3039 20 +3113 25 @@ i40e_flow_ctrl_set(struct rte_eth_dev *dev struct rte_eth_fc_conf *fc_conf) I40E_WRITE_REG(hw I40E_PRTDCB_MFLCN mflcn_reg); } - /* config the water marker both based on the packets and bytes */- I40E_WRITE_GLB_REG(hw I40E_GLRPB_PHW - (pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS]- << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); - I40E_WRITE_GLB_REG(hw I40E_GLRPB_PLW - (pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS]- << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); - I40E_WRITE_GLB_REG(hw I40E_GLRPB_GHW - pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS]- << I40E_KILOSHIFT); - I40E_WRITE_GLB_REG(hw I40E_GLRPB_GLW - pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS]- << I40E_KILOSHIFT); - i40e_global_cfg_warning(I40E_WARNING_FLOW_CTL); + if (!pf->support_multi_driver) {+ /* config water marker both based on the packets and bytes */+ I40E_WRITE_GLB_REG(hw I40E_GLRPB_PHW + (pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS]+ << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); + I40E_WRITE_GLB_REG(hw I40E_GLRPB_PLW + (pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS]+ << I40E_KILOSHIFT) / I40E_PACKET_AVERAGE_SIZE); + I40E_WRITE_GLB_REG(hw I40E_GLRPB_GHW + pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS]+ << I40E_KILOSHIFT); + I40E_WRITE_GLB_REG(hw I40E_GLRPB_GLW + pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS]+ << I40E_KILOSHIFT); + i40e_global_cfg_warning(I40E_WARNING_FLOW_CTL); + } else {+ PMD_DRV_LOG(ERR + "Water marker configuration is not supported."); + } I40E_WRITE_FLUSH(hw); @@ -6870 9 +6949 15 @@ i40e_tunnel_filter_param_check(struct i40e_pf *pf static int i40e_dev_set_gre_key_len(struct i40e_hw *hw uint8_t len) {+ struct i40e_pf *pf = &((struct i40e_adapter *)hw->back)->pf; uint32_t val reg; int ret = -EINVAL; + if (pf->support_multi_driver) {+ PMD_DRV_LOG(ERR "GRE key length configuration is unsupported"); + return -ENOTSUP; + }+ val = I40E_READ_REG(hw I40E_GL_PRS_FVBM(2)); PMD_DRV_LOG(DEBUG "Read original GL_PRS_FVBM with 0x%08x\n" val); @@ -7114 12 +7199 18 @@ static int i40e_set_hash_filter_global_config(struct i40e_hw *hw struct rte_eth_hash_global_conf *g_cfg) {+ struct i40e_pf *pf = &((struct i40e_adapter *)hw->back)->pf; int ret; uint16_t i; uint32_t reg; uint32_t mask0 = g_cfg->valid_bit_mask[0]; enum i40e_filter_pctype pctype; + if (pf->support_multi_driver) {+ PMD_DRV_LOG(ERR "Hash global configuration is not supported."); + return -ENOTSUP; + }+ /* Check the input parameters */ ret = i40e_hash_global_config_check(g_cfg); if (ret < 0)@@ -7850 6 +7941 12 @@ i40e_filter_input_set_init(struct i40e_pf *pf) I40E_INSET_MASK_NUM_REG); if (num < 0) return; ++ if (pf->support_multi_driver && num > 0) {+ PMD_DRV_LOG(ERR "Input set setting is not supported."); + return; + }+ inset_reg = i40e_translate_input_set_reg(hw->mac.type input_set); @@ -7858 39 +7955 49 @@ i40e_filter_input_set_init(struct i40e_pf *pf) i40e_check_write_reg(hw I40E_PRTQF_FD_INSET(pctype 1) (uint32_t)((inset_reg >> I40E_32_BIT_WIDTH) & UINT32_MAX)); - i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(0 pctype) - (uint32_t)(inset_reg & UINT32_MAX)); - i40e_check_write_global_reg(hw I40E_GLQF_HASH_INSET(1 pctype) - (uint32_t)((inset_reg >>- I40E_32_BIT_WIDTH) & UINT32_MAX)); -- for (i = 0; i < num; i++) {+ if (!pf->support_multi_driver) {+ i40e_check_write_global_reg(hw + I40E_GLQF_HASH_INSET(0 pctype) + (uint32_t)(inset_reg & UINT32_MAX)); i40e_check_write_global_reg(hw + I40E_GLQF_HASH_INSET(1 pctype) + (uint32_t)((inset_reg >>+ I40E_32_BIT_WIDTH) & UINT32_MAX)); ++ for (i = 0; i < num; i++) {+ i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) mask_reg[i]); - i40e_check_write_global_reg(hw + i40e_check_write_global_reg(hw I40E_GLQF_HASH_MSK(i pctype) mask_reg[i]); - }- /*clear unused mask registers of the pctype */- for (i = num; i < I40E_INSET_MASK_NUM_REG; i++) {- i40e_check_write_global_reg(hw + }+ /*clear unused mask registers of the pctype */+ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++) {+ i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) 0); - i40e_check_write_global_reg(hw + i40e_check_write_global_reg(hw I40E_GLQF_HASH_MSK(i pctype) - 0); + 0); + }+ } else {+ PMD_DRV_LOG(ERR + "Input set setting is not supported."); } I40E_WRITE_FLUSH(hw); /* store the default input set */- pf->hash_input_set[pctype] = input_set; + if (!pf->support_multi_driver)+ pf->hash_input_set[pctype] = input_set; pf->fdir.input_set[pctype] = input_set; } - i40e_global_cfg_warning(I40E_WARNING_HASH_INSET); - i40e_global_cfg_warning(I40E_WARNING_FD_MSK); - i40e_global_cfg_warning(I40E_WARNING_HASH_MSK); + if (!pf->support_multi_driver) {+ i40e_global_cfg_warning(I40E_WARNING_HASH_INSET); + i40e_global_cfg_warning(I40E_WARNING_FD_MSK); + i40e_global_cfg_warning(I40E_WARNING_HASH_MSK); + } } int@@ -7903 6 +8010 11 @@ i40e_hash_filter_inset_select(struct i40e_hw *hw uint32_t mask_reg[I40E_INSET_MASK_NUM_REG] = {0}; int ret i num; + if (pf->support_multi_driver) {+ PMD_DRV_LOG(ERR "Hash input set setting is not supported."); + return -ENOTSUP; + }+ if (!conf) { PMD_DRV_LOG(ERR "Invalid pointer"); return -EFAULT; @@ -8029 6 +8141 11 @@ i40e_fdir_filter_inset_select(struct i40e_pf *pf if (num < 0) return -EINVAL; + if (pf->support_multi_driver && num > 0) {+ PMD_DRV_LOG(ERR "FDIR bit mask is not supported."); + return -ENOTSUP; + }+ inset_reg |= i40e_translate_input_set_reg(hw->mac.type input_set); i40e_check_write_reg(hw I40E_PRTQF_FD_INSET(pctype 0) @@ -8037 14 +8154 20 @@ i40e_fdir_filter_inset_select(struct i40e_pf *pf (uint32_t)((inset_reg >> I40E_32_BIT_WIDTH) & UINT32_MAX)); - for (i = 0; i < num; i++)- i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) - mask_reg[i]); - /*clear unused mask registers of the pctype */- for (i = num; i < I40E_INSET_MASK_NUM_REG; i++)- i40e_check_write_global_reg(hw I40E_GLQF_FD_MSK(i pctype) - 0); - i40e_global_cfg_warning(I40E_WARNING_FD_MSK); + if (!pf->support_multi_driver) {+ for (i = 0; i < num; i++)+ i40e_check_write_global_reg(hw + I40E_GLQF_FD_MSK(i pctype) + mask_reg[i]); + /*clear unused mask registers of the pctype */+ for (i = num; i < I40E_INSET_MASK_NUM_REG; i++)+ i40e_check_write_global_reg(hw + I40E_GLQF_FD_MSK(i pctype) + 0); + i40e_global_cfg_warning(I40E_WARNING_FD_MSK); + } else {+ PMD_DRV_LOG(ERR "FDIR bit mask is not supported."); + } I40E_WRITE_FLUSH(hw); pf->fdir.input_set[pctype] = input_set; diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.hindex 12b6000..82d5501 100644--- a/drivers/net/i40e/i40e_ethdev.h+++ b/drivers/net/i40e/i40e_ethdev.h@@ -485 6 +485 8 @@ struct i40e_pf { bool floating_veb; /* The flag to use the floating VEB */ /* The floating enable flag for the specific VF */ bool floating_veb_list[I40E_MAX_VF]; ++ bool support_multi_driver; /* 1 - support multiple driver */ }; enum pending_msg {-- 2.5.5------------------------------Message: 3Date: Fri 2 Feb 2018 20:25:10 +0800
 2018-02-12  6:51 UTC 

[dpdk-test-report] |SUCCESS| pw35123 [PATCH v2] ethdev: make ethdev data cache aligned
 2018-02-12  6:31 UTC 

[dpdk-test-report] |SUCCESS| pw35119 [PATCH 1/4] ether: support deferred queue setup
 2018-02-12  6:20 UTC 

[dpdk-test-report] |SUCCESS| pw35121 [PATCH 3/4] app/testpmd: add command for queue setup
 2018-02-12  6:18 UTC 

[dpdk-test-report] |SUCCESS| pw35120 [PATCH 2/4] app/testpmd: add parameters for deferred queue setup
 2018-02-12  6:06 UTC 

[dpdk-test-report] |SUCCESS| pw35122 [PATCH 4/4] net/i40e: enable deferred queue setup
 2018-02-12  6:03 UTC 

[dpdk-test-report] |WARNING| pw35124 [PATCH] dev Digest Vol 180 Issue 152
 2018-02-12  6:03 UTC 

[dpdk-test-report] |SUCCESS| pw35123 [PATCH v2] ethdev: make ethdev data cache aligned
 2018-02-12  5:57 UTC 

[dpdk-test-report] |SUCCESS| pw35122 [PATCH 4/4] net/i40e: enable deferred queue setup
 2018-02-12  4:53 UTC 

[dpdk-test-report] |SUCCESS| pw35121 [PATCH 3/4] app/testpmd: add command for queue setup
 2018-02-12  4:53 UTC 

[dpdk-test-report] |WARNING| pw35120 [PATCH 2/4] app/testpmd: add parameters for deferred queue setup
 2018-02-12  4:53 UTC 

[dpdk-test-report] |SUCCESS| pw35119 [PATCH 1/4] ether: support deferred queue setup
 2018-02-12  4:53 UTC 

[dpdk-test-report] |SUCCESS| pw35118 [PATCH 3/3] net/virtio-user: fix not proper initialized
 2018-02-12  4:47 UTC 

[dpdk-test-report] |SUCCESS| pw35116 [PATCH 1/3] net/vhost: fix incorrect log info
 2018-02-12  4:45 UTC 

[dpdk-test-report] |SUCCESS| pw35117 [PATCH 2/3] net/virtio-user: fix not working with vhost kernel
 2018-02-12  4:39 UTC 

[dpdk-test-report] |SUCCESS| pw35118 [PATCH 3/3] net/virtio-user: fix not proper initialized
 2018-02-12  3:20 UTC 

[dpdk-test-report] |SUCCESS| pw35117 [PATCH 2/3] net/virtio-user: fix not working with vhost kernel
 2018-02-12  3:20 UTC 

[dpdk-test-report] |SUCCESS| pw35116 [PATCH 1/3] net/vhost: fix incorrect log info
 2018-02-12  3:20 UTC 

[dpdk-test-report] | SUCCESS | daily Intel builds (58/58)
 2018-02-11 20:17 UTC 

[dpdk-test-report] |FAILURE| pw35115 [PATCH] net/failsafe: fix reconfiguration
 2018-02-11 18:51 UTC 

[dpdk-test-report] |SUCCESS| pw35112 [PATCH v6 1/3] net/failsafe: fix hotplug alarm cancel
 2018-02-11 18:44 UTC 

[dpdk-test-report] |SUCCESS| pw35113 [PATCH v6 2/3] net/failsafe: fix removal scope
 2018-02-11 18:35 UTC 

[dpdk-test-report] |FAILURE| pw35114 [PATCH v6 3/3] net/failsafe: fix hotplug races
 2018-02-11 18:31 UTC 

[dpdk-test-report] |SUCCESS| pw35115 [PATCH] net/failsafe: fix reconfiguration
 2018-02-11 17:29 UTC 

[dpdk-test-report] |WARNING| pw35114 [PATCH v6 3/3] net/failsafe: fix hotplug races
 2018-02-11 17:26 UTC 

[dpdk-test-report] |SUCCESS| pw35113 [PATCH v6 2/3] net/failsafe: fix removal scope
 2018-02-11 17:26 UTC 

[dpdk-test-report] |SUCCESS| pw35112 [PATCH v6 1/3] net/failsafe: fix hotplug alarm cancel
 2018-02-11 17:26 UTC 

[dpdk-test-report] |SUCCESS| pw35111 [PATCH] usertools/dpdk-devbind.py: add support for wind river avp device
 2018-02-11 10:37 UTC 

[dpdk-test-report] |SUCCESS| pw35111 [PATCH] usertools/dpdk-devbind.py: add support for wind river avp device
 2018-02-11  9:57 UTC 

[dpdk-test-report] |SUCCESS| pw35110 [PATCH] net/mlx4: use PCI address as port name
 2018-02-11  9:25 UTC 

[dpdk-test-report] |SUCCESS| pw35110 [PATCH] net/mlx4: use PCI address as port name
 2018-02-11  8:30 UTC 

[dpdk-test-report] |SUCCESS| pw35109 [PATCH] net/i40e: remove unnecessary FDIR mask configuration
 2018-02-11  7:53 UTC 

[dpdk-test-report] |SUCCESS| pw35108 [PATCH] net/i40e: add log when setting input set
 2018-02-11  7:32 UTC 

[dpdk-test-report] |SUCCESS| pw35109 [PATCH] net/i40e: remove unnecessary FDIR mask configuration
 2018-02-11  7:10 UTC 

[dpdk-test-report] |SUCCESS| pw35108 [PATCH] net/i40e: add log when setting input set
 2018-02-11  6:55 UTC 

[dpdk-test-report] |SUCCESS| pw35107 [PATCH] maintainers: update vhost lib and pmd
 2018-02-11  1:38 UTC 

[dpdk-test-report] |WARNING| pw35107 [PATCH] maintainers: update vhost lib and pmd
 2018-02-11  1:03 UTC 

[dpdk-test-report] |SUCCESS| pw35106 [PATCH] eal: fix rte_errno values for IPC API
 2018-02-10 13:38 UTC 

[dpdk-test-report] |SUCCESS| pw35106 [PATCH] eal: fix rte_errno values for IPC API
 2018-02-10 13:15 UTC 

[dpdk-test-report] |SUCCESS| pw35105 [PATCH] net/dpaa2: remove unused global variable
 2018-02-10 12:34 UTC 

[dpdk-test-report] |SUCCESS| pw35105 [PATCH] net/dpaa2: remove unused global variable
 2018-02-10 11:59 UTC 

[dpdk-test-report] |SUCCESS| pw35104 [PATCH] ethdev: fix a regression due to cache alignment issue
 2018-02-10 10:11 UTC 

[dpdk-test-report] |SUCCESS| pw35104 [PATCH] ethdev: fix a regression due to cache alignment issue
 2018-02-10  9:43 UTC 

[dpdk-test-report] |SUCCESS| pw35103 [PATCH 2/2] lib: fix bitmap scanning
 2018-02-09 21:37 UTC 

[dpdk-test-report] |SUCCESS| pw35102 [PATCH 1/2] test/bitmap: add additional tests
 2018-02-09 21:22 UTC 

[dpdk-test-report] |SUCCESS| pw35103 [PATCH 2/2] lib: fix bitmap scanning
 2018-02-09 20:21 UTC 

[dpdk-test-report] |SUCCESS| pw35102 [PATCH 1/2] test/bitmap: add additional tests
 2018-02-09 20:21 UTC 

[dpdk-test-report] | SUCCESS | daily Intel builds (58/58)
 2018-02-09 20:18 UTC 

[dpdk-test-report] |SUCCESS| pw35101 [PATCH] doc: add missing SFN8xxx adapters to the list of supported
 2018-02-09 20:16 UTC 

[dpdk-test-report] |SUCCESS| pw35100 [PATCH] vhost: reduce size of coredump file
 2018-02-09 20:00 UTC 

[dpdk-test-report] |SUCCESS| pw35099 [PATCH] vhost: fix wait for valid descriptor
 2018-02-09 19:37 UTC 

[dpdk-test-report] |SUCCESS| pw35098 [PATCH] vhost: fix return avail ring position in get vring base
 2018-02-09 19:11 UTC 

[dpdk-test-report] |SUCCESS| pw35097 [PATCH] vhost: fix remove macro name conflict
 2018-02-09 19:00 UTC 

[dpdk-test-report] |SUCCESS| pw35096 [PATCH] vhost: fix realloc failure
 2018-02-09 18:34 UTC 

[dpdk-test-report] |SUCCESS| pw35095 [PATCH] vhost: fix double free on shutdown
 2018-02-09 18:21 UTC 

[dpdk-test-report] |SUCCESS| pw35101 [PATCH] doc: add missing SFN8xxx adapters to the list of supported
 2018-02-09 17:57 UTC 

[dpdk-test-report] |SUCCESS| pw35094 [PATCH] vhost: fix close callfd on get vring base
 2018-02-09 17:51 UTC 

[dpdk-test-report] |SUCCESS| pw35100 [PATCH] vhost: reduce size of coredump file
 2018-02-09 17:41 UTC 

[dpdk-test-report] |SUCCESS| pw35099 [PATCH] vhost: fix wait for valid descriptor
 2018-02-09 17:37 UTC 

[dpdk-test-report] |SUCCESS| pw35093 [PATCH v2] vhost: fix check if cmsg is NULL
 2018-02-09 17:31 UTC 

[dpdk-test-report] |SUCCESS| pw35098 [PATCH] vhost: fix return avail ring position in get vring base
 2018-02-09 17:31 UTC 

[dpdk-test-report] |SUCCESS| pw35097 [PATCH] vhost: fix remove macro name conflict
 2018-02-09 17:26 UTC 

[dpdk-test-report] |SUCCESS| pw35096 [PATCH] vhost: fix realloc failure
 2018-02-09 17:21 UTC 

[dpdk-test-report] |SUCCESS| pw35095 [PATCH] vhost: fix double free on shutdown
 2018-02-09 17:17 UTC 

[dpdk-test-report] |SUCCESS| pw35094 [PATCH] vhost: fix close callfd on get vring base
 2018-02-09 17:12 UTC 

[dpdk-test-report] |SUCCESS| pw35092 [PATCH] doc: add change notice for mbuf sched field
 2018-02-09 17:11 UTC 

[dpdk-test-report] |SUCCESS| pw35093 [PATCH v2] vhost: fix check if cmsg is NULL
 2018-02-09 17:07 UTC 

[dpdk-test-report] |SUCCESS| pw35092 [PATCH] doc: add change notice for mbuf sched field
 2018-02-09 16:46 UTC 

[dpdk-test-report] |SUCCESS| pw35091 [PATCH] Add myself as driver information maintainer
 2018-02-09 16:36 UTC 

[dpdk-test-report] |SUCCESS| pw35090 [PATCH v5] checkpatches.sh: Add checks for ABI symbol addition
 2018-02-09 16:13 UTC 

[dpdk-test-report] |SUCCESS| pw35088 [PATCH 1/2] virtio: fix resuming traffic with rx vector path
 2018-02-09 15:30 UTC 

[dpdk-test-report] |SUCCESS| pw35089 [PATCH 2/2] vhost: don't take access_lock on VHOST_USER_RESET_OWNER
 2018-02-09 15:26 UTC 

[dpdk-test-report] |WARNING| pw35091 [PATCH] Add myself as driver information maintainer
 2018-02-09 15:24 UTC 

[dpdk-test-report] |WARNING| pw35090 [PATCH v5] checkpatches.sh: Add checks for ABI symbol addition
 2018-02-09 15:22 UTC 

[dpdk-test-report] |SUCCESS| pw35089 [PATCH 2/2] vhost: don't take access_lock on VHOST_USER_RESET_OWNER
 2018-02-09 14:27 UTC 

[dpdk-test-report] |SUCCESS| pw35088 [PATCH 1/2] virtio: fix resuming traffic with rx vector path
 2018-02-09 14:27 UTC 

[dpdk-test-report] |SUCCESS| pw35087 [PATCH] examples/ipsec-secgw: print correct crypto name
 2018-02-09 12:12 UTC 

[dpdk-test-report] |SUCCESS| pw35086 [PATCH] Improve the shaper accuracy for large packets
 2018-02-09 11:55 UTC 

[dpdk-test-report] |SUCCESS| pw35085 [PATCH] Improve the shaper accuracy for large packets
 2018-02-09 11:42 UTC 

[dpdk-test-report] |SUCCESS| pw35084 [PATCH v2] doc: update ethdev APIs to return named opaque type
 2018-02-09 11:24 UTC 

[dpdk-test-report] |SUCCESS| pw35083 [PATCH] doc: update ethdev APIs to return named opaque type
 2018-02-09 10:49 UTC 

[dpdk-test-report] |SUCCESS| pw35087 [PATCH] examples/ipsec-secgw: print correct crypto name
 2018-02-09 10:47 UTC 

[dpdk-test-report] |SUCCESS| pw35086 [PATCH] Improve the shaper accuracy for large packets
 2018-02-09 10:38 UTC 

[dpdk-test-report] |SUCCESS| pw35082 [PATCH] doc: fix ethdev API port_id parameter size
 2018-02-09 10:30 UTC 

[dpdk-test-report] |WARNING| pw35085 [PATCH] Improve the shaper accuracy for large packets
 2018-02-09 10:27 UTC 

[dpdk-test-report] |SUCCESS| pw35084 [PATCH v2] doc: update ethdev APIs to return named opaque type
 2018-02-09 10:18 UTC 

[dpdk-test-report] |SUCCESS| pw35083 [PATCH] doc: update ethdev APIs to return named opaque type
 2018-02-09 10:12 UTC 

[dpdk-test-report] |SUCCESS| pw35082 [PATCH] doc: fix ethdev API port_id parameter size
 2018-02-09  9:55 UTC 

[dpdk-test-report] |SUCCESS| pw35081 [PATCH v2] doc: add vhost-user live migration features to release notes
 2018-02-09  8:13 UTC 

[dpdk-test-report] |SUCCESS| pw35081 [PATCH v2] doc: add vhost-user live migration features to release notes
 2018-02-09  7:45 UTC 

[dpdk-test-report] |SUCCESS| pw35080 [PATCH] doc: add vhost-user live migration features to release notes
 2018-02-09  7:33 UTC 

[dpdk-test-report] |SUCCESS| pw35080 [PATCH] doc: add vhost-user live migration features to release notes
 2018-02-09  7:10 UTC 

[dpdk-test-report] |SUCCESS| pw35079 [PATCH] doc: add virtio GUEST ANNOUNCE to release notes
 2018-02-09  6:43 UTC 

[dpdk-test-report] |SUCCESS| pw35078 [PATCH] doc: add VxLAN GRO to release notes
 2018-02-09  6:18 UTC 

[dpdk-test-report] |SUCCESS| pw35079 [PATCH] doc: add virtio GUEST ANNOUNCE to release notes
 2018-02-09  5:55 UTC 

[dpdk-test-report] |SUCCESS| pw35078 [PATCH] doc: add VxLAN GRO to release notes
 2018-02-09  5:25 UTC 

[dpdk-test-report] | SUCCESS | daily Intel builds (58/58)
 2018-02-08 20:16 UTC 

[dpdk-test-report] |SUCCESS| pw35077 [PATCH v3] doc: update the usage for shared library
 2018-02-08 19:31 UTC 

[dpdk-test-report] |SUCCESS| pw35076 [PATCH] net/bnxt: fix setting the auto link speed mask
 2018-02-08 19:18 UTC 

[dpdk-test-report] |SUCCESS| pw35075 [PATCH] vhost: fix check if cmsg is NULL
 2018-02-08 19:03 UTC 

[dpdk-test-report] |SUCCESS| pw35074 [PATCH] vhost: fix offset while mmaping log base address
 2018-02-08 18:42 UTC 

[dpdk-test-report] |SUCCESS| pw35077 [PATCH v3] doc: update the usage for shared library
 2018-02-08 18:21 UTC 

[dpdk-test-report] |SUCCESS| pw35073 [PATCH v1] net/mlx: control netdevices through ioctl only
 2018-02-08 18:13 UTC 

[dpdk-test-report] |SUCCESS| pw35072 [PATCH v5 3/3] net/failsafe: fix calling device during RMV events
 2018-02-08 18:00 UTC 

[dpdk-test-report] |SUCCESS| pw35071 [PATCH v5 2/3] net/failsafe: fix removal scope
 2018-02-08 17:48 UTC 

[dpdk-test-report] |SUCCESS| pw35070 [PATCH v5 1/3] net/failsafe: fix hotplug alarm cancel
 2018-02-08 17:45 UTC 

[dpdk-test-report] |SUCCESS| pw35076 [PATCH] net/bnxt: fix setting the auto link speed mask
 2018-02-08 17:37 UTC 

[dpdk-test-report] |SUCCESS| pw35075 [PATCH] vhost: fix check if cmsg is NULL
 2018-02-08 17:06 UTC 

[dpdk-test-report] |SUCCESS| pw35074 [PATCH] vhost: fix offset while mmaping log base address
 2018-02-08 17:02 UTC 

[dpdk-test-report] |WARNING| pw35073 [PATCH v1] net/mlx: control netdevices through ioctl only
 2018-02-08 16:37 UTC 

[dpdk-test-report] |WARNING| pw35072 [PATCH v5 3/3] net/failsafe: fix calling device during RMV events
 2018-02-08 16:36 UTC 

[dpdk-test-report] |SUCCESS| pw35071 [PATCH v5 2/3] net/failsafe: fix removal scope
 2018-02-08 16:35 UTC 

[dpdk-test-report] |SUCCESS| pw35070 [PATCH v5 1/3] net/failsafe: fix hotplug alarm cancel
 2018-02-08 16:35 UTC 

[dpdk-test-report] |SUCCESS| pw35069 [PATCH v1] doc: update tap with systems supported flows
 2018-02-08 15:06 UTC 

[dpdk-test-report] |SUCCESS| pw35068 [PATCH v2] examples/performance-thread: update copyrights and license
 2018-02-08 14:56 UTC 

[dpdk-test-report] |SUCCESS| pw35069 [PATCH v1] doc: update tap with systems supported flows
 2018-02-08 14:55 UTC 

[dpdk-test-report] |SUCCESS| pw35067 [PATCH] net/i40e: fix unchecked return in parse devarg
 2018-02-08 14:31 UTC 

[dpdk-test-report] |SUCCESS| pw35066 [PATCH v1] doc: add note on increased ring size to release notes
 2018-02-08 14:18 UTC 

[dpdk-test-report] |SUCCESS| pw35068 [PATCH v2] examples/performance-thread: update copyrights and license
 2018-02-08 14:05 UTC 

[dpdk-test-report] |SUCCESS| pw35065 [PATCH] app/testpmd: fix FDIR issue
 2018-02-08 13:53 UTC 

[dpdk-test-report] |SUCCESS| pw35064 [PATCH v4 2/2] net/failsafe: fix calling device during RMV events
 2018-02-08 13:37 UTC 

[dpdk-test-report] |SUCCESS| pw35063 [PATCH v4 1/2] net/failsafe: fix hotplug alarm cancel
 2018-02-08 13:30 UTC 

[dpdk-test-report] |SUCCESS| pw35067 [PATCH] net/i40e: fix unchecked return in parse devarg
 2018-02-08 13:19 UTC 

[dpdk-test-report] |SUCCESS| pw35066 [PATCH v1] doc: add note on increased ring size to release notes
 2018-02-08 12:49 UTC 

[dpdk-test-report] |SUCCESS| pw35065 [PATCH] app/testpmd: fix FDIR issue
 2018-02-08 12:35 UTC 

[dpdk-test-report] |SUCCESS| pw35062 [PATCH] app/testpmd: enable CRC strip without capability check
 2018-02-08 12:33 UTC 

[dpdk-test-report] |WARNING| pw35064 [PATCH v4 2/2] net/failsafe: fix calling device during RMV events
 2018-02-08 12:22 UTC 

page:  |  | latest

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).