From c9b97a6012e4b74e85fde4868437780722f5b326 Mon Sep 17 00:00:00 2001 From: Ido Barnea Date: Thu, 23 Jun 2016 09:48:50 +0300 Subject: small changes to 365826c5db225f21283c48eebc8de62b89fbfa24, so it will be easy to merge with later DPDK versions --- src/dpdk22/drivers/net/i40e/i40e_ethdev.c | 21 +++++++++------- src/dpdk22/drivers/net/i40e/i40e_ethdev.h | 2 +- src/dpdk22/drivers/net/i40e/i40e_rxtx.c | 42 ++++++++++++++++--------------- 3 files changed, 35 insertions(+), 30 deletions(-) (limited to 'src/dpdk22/drivers') diff --git a/src/dpdk22/drivers/net/i40e/i40e_ethdev.c b/src/dpdk22/drivers/net/i40e/i40e_ethdev.c index b73eedf1..5646eb53 100644 --- a/src/dpdk22/drivers/net/i40e/i40e_ethdev.c +++ b/src/dpdk22/drivers/net/i40e/i40e_ethdev.c @@ -3868,6 +3868,9 @@ i40e_update_default_filter_setting(struct i40e_vsi *vsi) return i40e_vsi_add_mac(vsi, &filter); } +#ifdef TREX_PATCH +#define LOW_LATENCY_WORKAROUND +#ifdef LOW_LATENCY_WORKAROUND static int i40e_vsi_update_tc_max_bw(struct i40e_vsi *vsi, u16 credit){ struct i40e_hw *hw = I40E_VSI_TO_HW(vsi); @@ -3885,7 +3888,8 @@ i40e_vsi_update_tc_max_bw(struct i40e_vsi *vsi, u16 credit){ } return (0); } - +#endif +#endif #define I40E_3_BIT_MASK 0x7 @@ -4447,18 +4451,16 @@ i40e_pf_setup(struct i40e_pf *pf) pf->main_vsi = vsi; -#define LOW_LATENCY_WORKAROUND +#ifdef TREX_PATCH #ifdef LOW_LATENCY_WORKAROUND - - /* - Workaround for low latency issue. - It seems RR does not work as expected both from same QSet and from different QSet - Quanta could be very high and this creates very high latency, especially with long packet size (9K) + /* + Workaround for low latency issue. + It seems RR does not work as expected both from same QSet and from different QSet + Quanta could be very high and this creates very high latency, especially with long packet size (9K) This is a workaround limit the main (bulk) VSI to 99% of the BW and by that support low latency (suggested by Intel) ETS with with strict priority and 127 credit does not work . - */ - + if (hw->phy.link_info.link_speed == I40E_LINK_SPEED_10GB) { i40e_vsi_update_tc_max_bw(vsi,199); }else{ @@ -4478,6 +4480,7 @@ i40e_pf_setup(struct i40e_pf *pf) pf->ll_vsi = vsi; +#endif #endif /* Configure filter control */ diff --git a/src/dpdk22/drivers/net/i40e/i40e_ethdev.h b/src/dpdk22/drivers/net/i40e/i40e_ethdev.h index 44082dfa..53d6afdd 100644 --- a/src/dpdk22/drivers/net/i40e/i40e_ethdev.h +++ b/src/dpdk22/drivers/net/i40e/i40e_ethdev.h @@ -396,7 +396,7 @@ TAILQ_HEAD(i40e_mirror_rule_list, i40e_mirror_rule); struct i40e_pf { struct i40e_adapter *adapter; /* The adapter this PF associate to */ struct i40e_vsi *main_vsi; /* pointer to main VSI structure */ - struct i40e_vsi * ll_vsi; + struct i40e_vsi * ll_vsi; // TREX_PATCH uint16_t mac_seid; /* The seid of the MAC of this PF */ uint16_t main_vsi_seid; /* The seid of the main VSI */ uint16_t max_num_vsi; diff --git a/src/dpdk22/drivers/net/i40e/i40e_rxtx.c b/src/dpdk22/drivers/net/i40e/i40e_rxtx.c index d3ef00f8..ee3c3c1a 100644 --- a/src/dpdk22/drivers/net/i40e/i40e_rxtx.c +++ b/src/dpdk22/drivers/net/i40e/i40e_rxtx.c @@ -1923,30 +1923,34 @@ i40e_xmit_pkts_simple(void *tx_queue, return nb_tx; } - +// TREX_PATCH +// Based on i40e_pf_get_vsi_by_qindex. Return low latency VSI one queue. +#define LOW_LATENCY_WORKAROUND +#ifdef LOW_LATENCY_WORKAROUND static struct i40e_vsi* i40e_pf_tx_get_vsi_by_qindex(struct i40e_pf *pf, uint16_t queue_idx) { - /* the queue in MAIN VSI range */ + // For last queue index, return low latency VSI if (queue_idx == pf->dev_data->nb_tx_queues-1) { return pf->ll_vsi; } - if (queue_idx < pf->dev_data->nb_tx_queues) - return pf->main_vsi; + /* the queue in MAIN VSI range */ + if (queue_idx < pf->dev_data->nb_tx_queues) + return pf->main_vsi; - queue_idx -= pf->main_vsi->nb_qps; + queue_idx -= pf->main_vsi->nb_qps; - /* queue_idx is greater than VMDQ VSIs range */ - if (queue_idx > pf->nb_cfg_vmdq_vsi * pf->vmdq_nb_qps - 1) { - PMD_INIT_LOG(ERR, "queue_idx out of range. VMDQ configured?"); - return NULL; - } + /* queue_idx is greater than VMDQ VSIs range */ + if (queue_idx > pf->nb_cfg_vmdq_vsi * pf->vmdq_nb_qps - 1) { + PMD_INIT_LOG(ERR, "queue_idx out of range. VMDQ configured?"); + return NULL; + } - return pf->vmdq[queue_idx / pf->vmdq_nb_qps].vsi; + return pf->vmdq[queue_idx / pf->vmdq_nb_qps].vsi; } - +#endif /* * Find the VSI the queue belongs to. 'queue_idx' is the queue index @@ -2339,8 +2343,6 @@ i40e_dev_rx_descriptor_done(void *rx_queue, uint16_t offset) return ret; } -#define LOW_LATENCY_WORKAROUND - int i40e_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, @@ -2361,14 +2363,14 @@ i40e_dev_tx_queue_setup(struct rte_eth_dev *dev, struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); vsi = &vf->vsi; - } else{ - #ifdef LOW_LATENCY_WORKAROUND + } else { +// TREX_PATCH +#ifdef LOW_LATENCY_WORKAROUND vsi = i40e_pf_tx_get_vsi_by_qindex(pf, queue_idx); - #else - vsi = i40e_pf_get_vsi_by_qindex(pf, queue_idx); - #endif +#else + vsi = i40e_pf_get_vsi_by_qindex(pf, queue_idx); +#endif } - if (vsi == NULL) { PMD_DRV_LOG(ERR, "VSI is NULL, or queue index (%u) " -- cgit 1.2.3-korg