hulk inclusion category: feature Link: https://gitee.com/openeuler/kernel/issues/ICBFCS CVE: NA -------------------------------- Make hash table size configurable to fix possible hash collision Signed-off-by: Yue Haibing <yuehaibing@huawei.com> --- net/venetcls/venetcls.h | 4 ++-- net/venetcls/venetcls_flow.c | 13 ++++++++----- net/venetcls/venetcls_main.c | 8 ++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/net/venetcls/venetcls.h b/net/venetcls/venetcls.h index 14f02cd962c3..957645e28acf 100644 --- a/net/venetcls/venetcls.h +++ b/net/venetcls/venetcls.h @@ -107,8 +107,6 @@ struct vecls_sock_flow_table { u32 ents[] ____cacheline_aligned_in_smp; }; -#define VECLS_DEV_FLOW_TABLE_NUM 0x1000 -#define VECLS_SOCK_FLOW_TABLE_NUM 0x100000 #define VECLS_DEV_FLOW_TABLE_SIZE(_num) (sizeof(struct vecls_dev_flow_table) + \ ((_num) * sizeof(struct vecls_dev_flow))) #define VECLS_SOCK_FLOW_TABLE_SIZE(_num) (offsetof(struct vecls_sock_flow_table, ents[_num])) @@ -139,6 +137,8 @@ extern int match_ip_flag; extern int debug; extern int vecls_netdev_num; extern int vecls_numa_num; +extern unsigned int dft_num; +extern unsigned int sft_num; #define vecls_debug(fmt, ...) \ do { \ diff --git a/net/venetcls/venetcls_flow.c b/net/venetcls/venetcls_flow.c index 242254b9bfe0..4ca2191d0718 100644 --- a/net/venetcls/venetcls_flow.c +++ b/net/venetcls/venetcls_flow.c @@ -237,6 +237,11 @@ static void __vecls_set_cpu(struct sk_buff *skb, struct net_device *ndev, else newcpu = last_recv_cpu; + if (rflow->isvalid && cpu_to_node(rflow->cpu) == cpu_to_node(newcpu)) { + rflow->timeout = jiffies; + return; + } + if (cpu_to_node(cpu) == cpu_to_node(newcpu)) return; @@ -329,9 +334,8 @@ static int vecls_dev_flow_table_release(void) static int _vecls_dev_flow_table_init(struct net_device *netdev) { struct vecls_dev_flow_table *table; - int size = VECLS_DEV_FLOW_TABLE_NUM; + int size = dft_num, i, j, ret = 0; struct netdev_rx_queue *queue; - int i, j, ret = 0; size = roundup_pow_of_two(size); vecls_debug("%s dev:%s num_rx_queues:%d mask:0x%x\n", @@ -440,7 +444,7 @@ int venetcls_flow_status(struct seq_file *seq, void *v) lockdep_is_held(&vecls_dev_flow_lock)); if (!dtb) continue; - for (j = 0; j < VECLS_DEV_FLOW_TABLE_NUM; j++) { + for (j = 0; j < dft_num; j++) { if (dtb->flows[j].cpu == VECLS_NO_CPU) continue; if (dtb->flows[j].isvalid == 0) @@ -463,8 +467,7 @@ int venetcls_flow_status(struct seq_file *seq, void *v) static int vecls_sock_flow_table_init(void) { struct vecls_sock_flow_table *table; - int size = VECLS_SOCK_FLOW_TABLE_NUM; - int i; + int size = sft_num, i; size = roundup_pow_of_two(size); table = vmalloc(VECLS_SOCK_FLOW_TABLE_SIZE(size)); diff --git a/net/venetcls/venetcls_main.c b/net/venetcls/venetcls_main.c index 856ff3b4427e..30f7a2bd4570 100644 --- a/net/venetcls/venetcls_main.c +++ b/net/venetcls/venetcls_main.c @@ -49,6 +49,14 @@ static char irqname[64] = "comp"; module_param_string(irqname, irqname, sizeof(irqname), 0644); MODULE_PARM_DESC(irqname, "nic irq name string, default comp"); +unsigned int dft_num = 0x1000; +module_param(dft_num, uint, 0444); +MODULE_PARM_DESC(dft_num, "dev flow table entries, default 0x10000"); + +unsigned int sft_num = 0x100000; +module_param(sft_num, uint, 0444); +MODULE_PARM_DESC(sft_num, "sock flow table entries, default 0x100000"); + static bool check_params(void) { if (mode != 0 && mode != 1) -- 2.34.1