void ccci_free_skb(struct sk_buff *skb, DATA_POLICY policy) { CCCI_DBG_MSG(-1, BM, "%ps free skb %p, policy=%d\n", __builtin_return_address(0), skb, policy); switch(policy) { case RECYCLE: // 1. reset sk_buff (take __alloc_skb as ref.) skb->data = skb->head; skb->len = 0; skb_reset_tail_pointer(skb); // 2. enqueue if(skb_size(skb) < SKB_1_5K) { ccci_skb_enqueue(&skb_pool_16, skb); } else if (skb_size(skb) < SKB_4K) { ccci_skb_enqueue(&skb_pool_1_5K, skb); } else { ccci_skb_enqueue(&skb_pool_4K, skb); } break; case FREE: dev_kfree_skb_any(skb); break; case NOOP: default: break; }; }
void ccci_free_skb(struct sk_buff *skb, DATA_POLICY policy) { CCCI_DBG_MSG(-1, BM, "%ps free skb %p, policy=%d, len=%d\n", __builtin_return_address(0), skb, policy, skb_size(skb)); switch (policy) { case RECYCLE: /* 1. reset sk_buff (take __alloc_skb as ref.) */ skb->data = skb->head; skb->len = 0; skb_reset_tail_pointer(skb); /* 2. enqueue */ if (skb_size(skb) < SKB_1_5K) ccci_skb_enqueue(&skb_pool_16, skb); else if (skb_size(skb) < SKB_4K) ccci_skb_enqueue(&skb_pool_1_5K, skb); else ccci_skb_enqueue(&skb_pool_4K, skb); break; case FREE: #ifdef CCCI_MEM_BM_DEBUG if (ccci_skb_addr_checker(skb)) { CCCI_INF_MSG(-1, BM, "ccci_skb_addr_checker failed\n"); dump_stack(); } #endif dev_kfree_skb_any(skb); break; case NOOP: default: break; }; }