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;
> +}

Reply via email to