[dpdk-dev] drivers/net/i40e/i40e_fdir.c: Improved i40e FDIR programming times

Message ID 9BB6961774997848B5B42BEC655768F810D59F5B@SHSMSX103.ccr.corp.intel.com (mailing list archive)
State Not Applicable, archived
Headers

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/checkpatch warning coding style issues

Commit Message

Jingjing Wu April 28, 2017, 7:54 a.m. UTC
  Hi, Lijia

Thanks for the patch? Are you using git send-email.
The mail is html format, not friendly to discuss by mail thread.

About the change, just one comments:

>+  uint32_t w;
Could you move it above?

Thanks

From: Michael Lilja [mailto:ml@napatech.com] 
Sent: Wednesday, April 26, 2017 7:15 PM
To: elin.zhang@intel.com; Wu, Jingjing <jingjing.wu@intel.com>
Cc: dev@dpdk.org
Subject: [PATCH] drivers/net/i40e/i40e_fdir.c: Improved i40e FDIR programming times


During my work (https://www.napatech.com/hw-acceleration-via-rte_flow/)on a flowtable application example that use rte_flow I discovered that the rte_flow programming times on a i40e was +11ms. The patch below result in an average programming time of 22usec with a max of 60usec instead of +11ms.

Could the following patch be useful? There might be a good reason for the original code, I'm unable to tell, so I will let it up to the maintainer to decide.  


Signed-off-by: Michael Lilja <ml@napatech.com>
---
drivers/net/i40e/i40e_fdir.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
  

Patch

diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c
index 28cc554f5..a1ec66063 100644
--- a/drivers/net/i40e/i40e_fdir.c
+++ b/drivers/net/i40e/i40e_fdir.c
@@ -1296,23 +1296,29 @@  i40e_fdir_filter_programming(struct i40e_pf *pf,
     rte_wmb();
     I40E_PCI_REG_WRITE(txq->qtx_tail, txq->tx_tail);

-     for (i = 0; i < I40E_FDIR_WAIT_COUNT; i++) {
-           rte_delay_us(I40E_FDIR_WAIT_INTERVAL_US);
+     for (i = 0; i < (I40E_FDIR_WAIT_COUNT * I40E_FDIR_WAIT_INTERVAL_US); i++) {
           if ((txdp->cmd_type_offset_bsz &
                       rte_cpu_to_le_64(I40E_TXD_QW1_DTYPE_MASK)) ==
                       rte_cpu_to_le_64(I40E_TX_DESC_DTYPE_DESC_DONE))
                 break;
+           rte_delay_us(1);
     }
-     if (i >= I40E_FDIR_WAIT_COUNT) {
+     if (i >= (I40E_FDIR_WAIT_COUNT * I40E_FDIR_WAIT_INTERVAL_US)) {
           PMD_DRV_LOG(ERR, "Failed to program FDIR filter:"
                     " time out to get DD on tx queue.");
           return -ETIMEDOUT;
     }
     /* totally delay 10 ms to check programming status*/
-     rte_delay_us((I40E_FDIR_WAIT_COUNT - i) * I40E_FDIR_WAIT_INTERVAL_US);
+  uint32_t w;
+     for (w = 0; w < (I40E_FDIR_WAIT_COUNT * I40E_FDIR_WAIT_INTERVAL_US); w++) {
+           if (i40e_check_fdir_programming_status(rxq) >= 0) {
+                 break;
+           }
+           rte_delay_us(1);
+     }
     if (i40e_check_fdir_programming_status(rxq) < 0) {
           PMD_DRV_LOG(ERR, "Failed to program FDIR filter:"
-                     " programming status reported.");
+                           " programming status reported.");
           return -ENOSYS;
     }