cls_u32: pass offload flags to tc_cls_common_offload_init()
Pass offload flags to the new implementation of tc_cls_common_offload_init(). Extack will now only be set if user requested skip_sw. hnodes need to hold onto the flags now to be able to reuse them on filter removal. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Simon Horman <simon.horman@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									1b0f80375c
								
							
						
					
					
						commit
						f40fe58d13
					
				| @ -87,6 +87,7 @@ struct tc_u_hnode { | ||||
| 	unsigned int		divisor; | ||||
| 	struct idr		handle_idr; | ||||
| 	struct rcu_head		rcu; | ||||
| 	u32			flags; | ||||
| 	/* The 'ht' field MUST be the last field in structure to allow for
 | ||||
| 	 * more entries allocated at end of structure. | ||||
| 	 */ | ||||
| @ -491,7 +492,7 @@ static void u32_clear_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h) | ||||
| 	struct tcf_block *block = tp->chain->block; | ||||
| 	struct tc_cls_u32_offload cls_u32 = {}; | ||||
| 
 | ||||
| 	tc_cls_common_offload_init_deprecated(&cls_u32.common, tp, NULL); | ||||
| 	tc_cls_common_offload_init(&cls_u32.common, tp, h->flags, NULL); | ||||
| 	cls_u32.command = TC_CLSU32_DELETE_HNODE; | ||||
| 	cls_u32.hnode.divisor = h->divisor; | ||||
| 	cls_u32.hnode.handle = h->handle; | ||||
| @ -509,7 +510,7 @@ static int u32_replace_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h, | ||||
| 	bool offloaded = false; | ||||
| 	int err; | ||||
| 
 | ||||
| 	tc_cls_common_offload_init_deprecated(&cls_u32.common, tp, extack); | ||||
| 	tc_cls_common_offload_init(&cls_u32.common, tp, flags, extack); | ||||
| 	cls_u32.command = TC_CLSU32_NEW_HNODE; | ||||
| 	cls_u32.hnode.divisor = h->divisor; | ||||
| 	cls_u32.hnode.handle = h->handle; | ||||
| @ -534,7 +535,7 @@ static void u32_remove_hw_knode(struct tcf_proto *tp, struct tc_u_knode *n) | ||||
| 	struct tcf_block *block = tp->chain->block; | ||||
| 	struct tc_cls_u32_offload cls_u32 = {}; | ||||
| 
 | ||||
| 	tc_cls_common_offload_init_deprecated(&cls_u32.common, tp, NULL); | ||||
| 	tc_cls_common_offload_init(&cls_u32.common, tp, n->flags, NULL); | ||||
| 	cls_u32.command = TC_CLSU32_DELETE_KNODE; | ||||
| 	cls_u32.knode.handle = n->handle; | ||||
| 
 | ||||
| @ -550,7 +551,7 @@ static int u32_replace_hw_knode(struct tcf_proto *tp, struct tc_u_knode *n, | ||||
| 	bool skip_sw = tc_skip_sw(flags); | ||||
| 	int err; | ||||
| 
 | ||||
| 	tc_cls_common_offload_init_deprecated(&cls_u32.common, tp, extack); | ||||
| 	tc_cls_common_offload_init(&cls_u32.common, tp, flags, extack); | ||||
| 	cls_u32.command = TC_CLSU32_REPLACE_KNODE; | ||||
| 	cls_u32.knode.handle = n->handle; | ||||
| 	cls_u32.knode.fshift = n->fshift; | ||||
| @ -1015,6 +1016,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, | ||||
| 		ht->handle = handle; | ||||
| 		ht->prio = tp->prio; | ||||
| 		idr_init(&ht->handle_idr); | ||||
| 		ht->flags = flags; | ||||
| 
 | ||||
| 		err = u32_replace_hw_hnode(tp, ht, flags, extack); | ||||
| 		if (err) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user