Using current TC code, it is very slow to insert a lot of rules. In order to improve the rules update rate in TC, we introduced the following two changes: 1) changed cls_flower to use IDR to manage the filters. 2) changed all act_xxx modules to use IDR instead of a small hash table
But IDR has a limitation that it uses int. TC handle uses u32. To make sure there is no regression, we add several new IDR APIs to support unsigned long. v2 == Addressed Hannes's comment: express idr_alloc in terms of idr_alloc_ext and most of the other functions Chris Mi (3): idr: Add new APIs to support unsigned long net/sched: Change cls_flower to use IDR net/sched: Change act_api and act_xxx modules to use IDR include/linux/idr.h | 69 ++++++++++++- include/linux/radix-tree.h | 21 +++- include/net/act_api.h | 76 +++++--------- lib/idr.c | 66 ++++++------ lib/radix-tree.c | 6 +- net/sched/act_api.c | 251 ++++++++++++++++++++++----------------------- net/sched/act_bpf.c | 17 ++- net/sched/act_connmark.c | 16 ++- net/sched/act_csum.c | 16 ++- net/sched/act_gact.c | 16 ++- net/sched/act_ife.c | 20 ++-- net/sched/act_ipt.c | 26 +++-- net/sched/act_mirred.c | 19 ++-- net/sched/act_nat.c | 16 ++- net/sched/act_pedit.c | 18 ++-- net/sched/act_police.c | 18 ++-- net/sched/act_sample.c | 17 ++- net/sched/act_simple.c | 20 ++-- net/sched/act_skbedit.c | 18 ++-- net/sched/act_skbmod.c | 18 ++-- net/sched/act_tunnel_key.c | 20 ++-- net/sched/act_vlan.c | 22 ++-- net/sched/cls_flower.c | 55 +++++----- 23 files changed, 427 insertions(+), 414 deletions(-) -- 1.8.3.1