[dpdk-dev,v3] net/i40e: fix allocating hash table on socket 0

Message ID 1487320676-54579-1-git-send-email-beilei.xing@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

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

Commit Message

Xing, Beilei Feb. 17, 2017, 8:37 a.m. UTC
  Testpmd failed to start in another hugetlbfs mount point on
i40e, the root cause is that hash table is always allocated
on socket 0. Fix the issue by assigning scocket id during
hash parameter defination.

Fixes: 5c53c82c8174 ("net/i40e: store flow director filter")
Fixes: 425c3325f0b0 ("net/i40e: store tunnel filter")
Fixes: 078259773da9 ("net/i40e: store ethertype filter")

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
---
v3 changes:
 Update commit log.
v2 changes:
 Update commit log.

 drivers/net/i40e/i40e_ethdev.c | 6 ++++++
 1 file changed, 6 insertions(+)
  

Comments

Ferruh Yigit Feb. 20, 2017, 2:45 p.m. UTC | #1
On 2/17/2017 8:37 AM, Beilei Xing wrote:
> Testpmd failed to start in another hugetlbfs mount point on
> i40e, 

Hi Beilei,

Can you please describe the failure more. And how to reproduce it.

I prefer initial patch title: "net/i40e: fix fail to start testpmd" but
with more details about when it fails to start.

the root cause is that hash table is always allocated
> on socket 0. Fix the issue by assigning scocket id during
> hash parameter defination.
> 
> Fixes: 5c53c82c8174 ("net/i40e: store flow director filter")
> Fixes: 425c3325f0b0 ("net/i40e: store tunnel filter")
> Fixes: 078259773da9 ("net/i40e: store ethertype filter")
> 
> Signed-off-by: Beilei Xing <beilei.xing@intel.com>
<...>
  
Ivan Nardi Feb. 20, 2017, 3:38 p.m. UTC | #2
Hi
I reported the same issue 2 weeks ago
http://dpdk.org/ml/archives/dev/2017-February/056930.html

You can reproduce it forcing testpmd to allocate memory only from node 1,
for example:

/tmp/testpmd -d /home/micro/lib/librte_pmd_i40e.so -c 0xFFFC000 -w
0000:81:00.0  -w 0000:81:00.1 -n 4 --socket-mem=0,8192 -- -i
--socket-num=1

Ivan


On 20 February 2017 at 15:45, Ferruh Yigit <ferruh.yigit@intel.com> wrote:

> On 2/17/2017 8:37 AM, Beilei Xing wrote:
> > Testpmd failed to start in another hugetlbfs mount point on
> > i40e,
>
> Hi Beilei,
>
> Can you please describe the failure more. And how to reproduce it.
>
> I prefer initial patch title: "net/i40e: fix fail to start testpmd" but
> with more details about when it fails to start.
>
> the root cause is that hash table is always allocated
> > on socket 0. Fix the issue by assigning scocket id during
> > hash parameter defination.
> >
> > Fixes: 5c53c82c8174 ("net/i40e: store flow director filter")
> > Fixes: 425c3325f0b0 ("net/i40e: store tunnel filter")
> > Fixes: 078259773da9 ("net/i40e: store ethertype filter")
> >
> > Signed-off-by: Beilei Xing <beilei.xing@intel.com>
> <...>
>
  
Ferruh Yigit Feb. 20, 2017, 4:16 p.m. UTC | #3
On 2/20/2017 3:38 PM, Ivan Nardi wrote:
> Hi
> I reported the same issue 2 weeks ago
> http://dpdk.org/ml/archives/dev/2017-February/056930.html
> 
> You can reproduce it forcing testpmd to allocate memory only from node
> 1, for example:
> 
> /tmp/testpmd -d /home/micro/lib/librte_pmd_i40e.so -c 0xFFFC000 -w 0000:81:00.0  -w 0000:81:00.1 -n 4 --socket-mem=0,8192 -- -i --socket-num=1

Thanks Ivan,

I will update commit log with the information provided.

> 
> Ivan
> 
> 
> On 20 February 2017 at 15:45, Ferruh Yigit <ferruh.yigit@intel.com
> <mailto:ferruh.yigit@intel.com>> wrote:
> 
>     On 2/17/2017 8:37 AM, Beilei Xing wrote:
>     > Testpmd failed to start in another hugetlbfs mount point on
>     > i40e,
> 
>     Hi Beilei,
> 
>     Can you please describe the failure more. And how to reproduce it.
> 
>     I prefer initial patch title: "net/i40e: fix fail to start testpmd" but
>     with more details about when it fails to start.
> 
>     the root cause is that hash table is always allocated
>     > on socket 0. Fix the issue by assigning scocket id during
>     > hash parameter defination.
>     >
>     > Fixes: 5c53c82c8174 ("net/i40e: store flow director filter")
>     > Fixes: 425c3325f0b0 ("net/i40e: store tunnel filter")
>     > Fixes: 078259773da9 ("net/i40e: store ethertype filter")
>     >
>     > Signed-off-by: Beilei Xing <beilei.xing@intel.com <mailto:beilei.xing@intel.com>>
>     <...>
> 
>
  
Ferruh Yigit Feb. 20, 2017, 4:37 p.m. UTC | #4
On 2/17/2017 8:37 AM, Beilei Xing wrote:
> Testpmd failed to start in another hugetlbfs mount point on
> i40e, the root cause is that hash table is always allocated
> on socket 0. Fix the issue by assigning scocket id during
> hash parameter defination.
> 
> Fixes: 5c53c82c8174 ("net/i40e: store flow director filter")
> Fixes: 425c3325f0b0 ("net/i40e: store tunnel filter")
> Fixes: 078259773da9 ("net/i40e: store ethertype filter")
> 
> Signed-off-by: Beilei Xing <beilei.xing@intel.com>

    net/i40e: fix memory allocation for hash table

    ...
    Cc: stable@dpdk.org

    Reported-by: Ivan Nardi <nardi.ivan@gmail.com>
    Signed-off-by: Beilei Xing <beilei.xing@intel.com>


Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 303027b..be2e580 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -899,6 +899,8 @@  i40e_init_ethtype_filter_list(struct rte_eth_dev *dev)
 		.entries = I40E_MAX_ETHERTYPE_FILTER_NUM,
 		.key_len = sizeof(struct i40e_ethertype_filter_input),
 		.hash_func = rte_hash_crc,
+		.hash_func_init_val = 0,
+		.socket_id = rte_socket_id(),
 	};
 
 	/* Initialize ethertype filter rule list and hash */
@@ -942,6 +944,8 @@  i40e_init_tunnel_filter_list(struct rte_eth_dev *dev)
 		.entries = I40E_MAX_TUNNEL_FILTER_NUM,
 		.key_len = sizeof(struct i40e_tunnel_filter_input),
 		.hash_func = rte_hash_crc,
+		.hash_func_init_val = 0,
+		.socket_id = rte_socket_id(),
 	};
 
 	/* Initialize tunnel filter rule list and hash */
@@ -985,6 +989,8 @@  i40e_init_fdir_filter_list(struct rte_eth_dev *dev)
 		.entries = I40E_MAX_FDIR_FILTER_NUM,
 		.key_len = sizeof(struct rte_eth_fdir_input),
 		.hash_func = rte_hash_crc,
+		.hash_func_init_val = 0,
+		.socket_id = rte_socket_id(),
 	};
 
 	/* Initialize flow director filter rule list and hash */