Lines Matching defs:xdp
24 #include <net/xdp.h>
134 struct xdp_test_data *xdp = arg;
139 orig_ctx = xdp->orig_ctx;
149 xdp_init_buff(new_ctx, TEST_XDP_FRAME_SIZE, &xdp->rxq);
159 static int xdp_test_run_setup(struct xdp_test_data *xdp, struct xdp_buff *orig_ctx)
166 .pool_size = xdp->batch_size,
169 .init_arg = xdp,
172 xdp->frames = kvmalloc_array(xdp->batch_size, sizeof(void *), GFP_KERNEL);
173 if (!xdp->frames)
176 xdp->skbs = kvmalloc_array(xdp->batch_size, sizeof(void *), GFP_KERNEL);
177 if (!xdp->skbs)
187 err = xdp_reg_mem_model(&xdp->mem, MEM_TYPE_PAGE_POOL, pp);
191 xdp->pp = pp;
196 xdp_rxq_info_reg(&xdp->rxq, orig_ctx->rxq->dev, 0, 0);
197 xdp->rxq.mem.type = MEM_TYPE_PAGE_POOL;
198 xdp->rxq.mem.id = pp->xdp_mem_id;
199 xdp->dev = orig_ctx->rxq->dev;
200 xdp->orig_ctx = orig_ctx;
207 kvfree(xdp->skbs);
209 kvfree(xdp->frames);
213 static void xdp_test_run_teardown(struct xdp_test_data *xdp)
215 xdp_unreg_mem_model(&xdp->mem);
216 page_pool_destroy(xdp->pp);
217 kfree(xdp->frames);
218 kfree(xdp->skbs);
281 static int xdp_test_run_batch(struct xdp_test_data *xdp, struct bpf_prog *prog,
286 struct xdp_frame **frames = xdp->frames;
293 batch_sz = min_t(u32, repeat, xdp->batch_size);
299 page = page_pool_dev_alloc_pages(xdp->pp);
309 xdp->frame_cnt++;
328 ri->tgt_index = xdp->dev->ifindex;
334 ret = xdp_do_redirect_frame(xdp->dev, ctx, frm, prog);
354 ret = xdp_recv_frames(frames, nframes, xdp->skbs, xdp->dev);
368 struct xdp_test_data xdp = { .batch_size = batch_size };
375 ret = xdp_test_run_setup(&xdp, ctx);
381 xdp.frame_cnt = 0;
382 ret = xdp_test_run_batch(&xdp, prog, repeat - t.i);
385 } while (bpf_test_timer_continue(&t, xdp.frame_cnt, repeat, &ret, time));
388 xdp_test_run_teardown(&xdp);
393 u32 *retval, u32 *time, bool xdp)
420 if (xdp)
1080 static int xdp_convert_md_to_buff(struct xdp_md *xdp_md, struct xdp_buff *xdp)
1112 xdp->rxq = &rxqueue->xdp_rxq;
1113 /* The device is now tracked in the xdp->rxq for later
1118 xdp->data = xdp->data_meta + xdp_md->data;
1126 static void xdp_convert_buff_to_md(struct xdp_buff *xdp, struct xdp_md *xdp_md)
1131 xdp_md->data = xdp->data - xdp->data_meta;
1132 xdp_md->data_end = xdp->data_end - xdp->data_meta;
1135 dev_put(xdp->rxq->dev);
1150 struct xdp_buff xdp = {};
1207 xdp_init_buff(&xdp, rxqueue->xdp_rxq.frag_size, &rxqueue->xdp_rxq);
1208 xdp_prepare_buff(&xdp, data, headroom, size, true);
1209 sinfo = xdp_get_shared_info_from_buff(&xdp);
1211 ret = xdp_convert_md_to_buff(ctx, &xdp);
1248 xdp_buff_set_frags_flag(&xdp);
1255 ret = bpf_test_run_xdp_live(prog, &xdp, repeat, batch_size, &duration);
1257 ret = bpf_test_run(prog, &xdp, repeat, &retval, &duration, true);
1262 xdp_convert_buff_to_md(&xdp, ctx);
1266 size = xdp.data_end - xdp.data_meta + sinfo->xdp_frags_size;
1267 ret = bpf_test_finish(kattr, uattr, xdp.data_meta, sinfo, size,