On Mon, 14 Oct 2019 12:49:49 +0200, Lorenzo Bianconi wrote: > +static int mvneta_create_page_pool(struct mvneta_port *pp, > + struct mvneta_rx_queue *rxq, int size) > +{ > + struct page_pool_params pp_params = { > + .order = 0, > + .flags = PP_FLAG_DMA_MAP, > + .pool_size = size, > + .nid = cpu_to_node(0), > + .dev = pp->dev->dev.parent, > + .dma_dir = DMA_FROM_DEVICE, > + }; > + int err; > + > + rxq->page_pool = page_pool_create(&pp_params); > + if (IS_ERR(rxq->page_pool)) { > + err = PTR_ERR(rxq->page_pool); > + rxq->page_pool = NULL; > + return err; > + } > + > + err = xdp_rxq_info_reg(&rxq->xdp_rxq, pp->dev, 0);
The queue_index is always passed as 0, is there only a single queue? XDP programs can read this field. > + if (err < 0) > + goto err_free_pp; > + > + err = xdp_rxq_info_reg_mem_model(&rxq->xdp_rxq, MEM_TYPE_PAGE_POOL, > + rxq->page_pool); > + if (err) > + goto err_unregister_rxq; > + > + return 0; > + > +err_unregister_rxq: > + xdp_rxq_info_unreg(&rxq->xdp_rxq); > +err_free_pp: > + page_pool_destroy(rxq->page_pool); > + return err; > +}