On Mon, 2016-05-02 at 18:00 +0200, Jesper Dangaard Brouer wrote: > It is not that complicated, inside kfree_skb_list(), we just call > skb_release_all(skb) on each SKB first, and then bulk free the SKB's > themselves in the end. Example see, _kfree_skb_defer(). > > The question is where to store the SKB array needed by kmem_cache_free_bulk. > > The easy option is just to use the stack of kfree_skb_list(), but we > have to be careful about the stack size, it might not be so good > because skb_release_all() can be deep and via skb_release_data() invoke > kfree_skb_list() a second time. >
It sounds you are reinventing the wheel ;) If drivers use napi_consume_skb(), qdisc should be able to use it the same, since BH are disabled in their ->enqueue()/->dequeue() handlers. This would be a separate patch of course. This fq_codel fix might need to be backported.