On Mon, Oct 02, 2017 at 06:05:29PM +0200, Jesper Dangaard Brouer wrote: > + while ((xdp_pkt = __ptr_ring_consume(rcpu->queue))) { > + struct sk_buff *skb; > + int ret; > + > + /* Allow busy polling again */ > + empty_cnt = 0; > + > + skb = cpu_map_build_skb(rcpu, xdp_pkt); > + if (!skb) { > + page_frag_free(xdp_pkt); > + continue; > + } > + > + /* Inject into network stack */ > + ret = netif_receive_skb(skb); > + if (ret == NET_RX_DROP) > + drops++;
I thought the whole thing is an alternative to RPS, but netif_receive_skb_internal() will call into RPS logic. So the user has to make sure it disabled or they will conflict in some weird way? Or you're calling netif_receive_skb() to be able to call generic XDP on that cpu again ? But that prog can do cpumap redirect again? sort-of recursive redirect? Is it really useful? May be call into __netif_receive_skb_core() directly? not sure. I'm asking all these questions to make sure we think through these implications before it becomes an abi.