[...]

> +static int
> +dlb2_pf_ldb_port_create(struct dlb2_hw_dev *handle,
> +                     struct dlb2_create_ldb_port_args *cfg,
> +                     enum dlb2_cq_poll_modes poll_mode)
> +{
> +     struct dlb2_dev *dlb2_dev = (struct dlb2_dev *)handle->pf_dev;
> +     struct dlb2_cmd_response response = {0};
> +     struct dlb2_port_memory port_memory;
> +     int ret, cq_alloc_depth;
> +     uint8_t *port_base;
> +     const struct rte_memzone *mz;
> +     int alloc_sz, qe_sz;
> +     phys_addr_t cq_base;
> +     phys_addr_t pp_base;
> +     int is_dir = false;
> +
> +     DLB2_INFO(dev->dlb2_device, "Entering %s()\n", __func__);
> +
> +     if (poll_mode == DLB2_CQ_POLL_MODE_STD)
> +             qe_sz = sizeof(struct dlb2_dequeue_qe);
> +     else
> +             qe_sz = RTE_CACHE_LINE_SIZE;
> +
> +     /* Calculate the port memory required, and round up to the nearest
> +      * cache line.
> +      */
> +     cq_alloc_depth = RTE_MAX(cfg->cq_depth,
> DLB2_MIN_HARDWARE_CQ_DEPTH);
> +     alloc_sz = cq_alloc_depth * qe_sz;
> +     alloc_sz = RTE_CACHE_LINE_ROUNDUP(alloc_sz);
> +
> +     port_base = dlb2_alloc_coherent_aligned(&mz, &cq_base, alloc_sz,
> +                                             PAGE_SIZE);
> +     if (port_base == NULL)
> +             return -ENOMEM;
> +
> +     /* Lock the page in memory */
> +     ret = rte_mem_lock_page(port_base);
> +     if (ret < 0) {
> +             DLB2_LOG_ERR("dlb2 pf pmd could not lock page for device
> i/o\n");
> +             goto create_port_err;
> +     }
> +
> +

Nit: extra newline

> +     memset(port_base, 0, alloc_sz);
> +
> +     ret = dlb2_pf_create_ldb_port(&dlb2_dev->hw,
> +                                   handle->domain_id,
> +                                   cfg,
> +                                   cq_base,
> +                                   &response);
> +     if (ret)
> +             goto create_port_err;
> +
> +     pp_base = (uintptr_t)dlb2_dev->hw.func_kva + PP_BASE(is_dir);
> +     dlb2_port[response.id][DLB2_LDB_PORT].pp_addr =
> +             (void *)(pp_base + (PAGE_SIZE * response.id));
> +
> +     dlb2_port[response.id][DLB2_LDB_PORT].cq_base = (void *)(port_base);
> +     memset(&port_memory, 0, sizeof(port_memory));
> +
> +     dlb2_port[response.id][DLB2_LDB_PORT].mz = mz;
> +
> +     dlb2_list_init_head(&port_memory.list);
> +
> +     cfg->response = response;
> +
> +     return 0;
> +
> +create_port_err:
> +
> +     rte_free(port_base);

This should be "rte_memzone_free(mz);"

> +
> +     DLB2_INFO(dev->dlb2_device, "Exiting %s() with ret=%d\n",
> +               __func__, ret);
> +     return ret;
> +}
> +
> +static int
> +dlb2_pf_dir_port_create(struct dlb2_hw_dev *handle,
> +                     struct dlb2_create_dir_port_args *cfg,
> +                     enum dlb2_cq_poll_modes poll_mode)
> +{
> +     struct dlb2_dev *dlb2_dev = (struct dlb2_dev *)handle->pf_dev;
> +     struct dlb2_cmd_response response = {0};
> +     struct dlb2_port_memory port_memory;
> +     int ret;
> +     uint8_t *port_base;
> +     const struct rte_memzone *mz;
> +     int alloc_sz, qe_sz;
> +     phys_addr_t cq_base;
> +     phys_addr_t pp_base;
> +     int is_dir = true;
> +
> +     DLB2_INFO(dev->dlb2_device, "Entering %s()\n", __func__);
> +
> +     if (poll_mode == DLB2_CQ_POLL_MODE_STD)
> +             qe_sz = sizeof(struct dlb2_dequeue_qe);
> +     else
> +             qe_sz = RTE_CACHE_LINE_SIZE;
> +
> +     /* Calculate the port memory required, and round up to the nearest
> +      * cache line.
> +      */
> +     alloc_sz = cfg->cq_depth * qe_sz;
> +     alloc_sz = RTE_CACHE_LINE_ROUNDUP(alloc_sz);
> +
> +     port_base = dlb2_alloc_coherent_aligned(&mz, &cq_base, alloc_sz,
> +                                             PAGE_SIZE);
> +     if (port_base == NULL)
> +             return -ENOMEM;
> +
> +     /* Lock the page in memory */
> +     ret = rte_mem_lock_page(port_base);
> +     if (ret < 0) {
> +             DLB2_LOG_ERR("dlb2 pf pmd could not lock page for device
> i/o\n");
> +             goto create_port_err;
> +     }
> +
> +     memset(port_base, 0, alloc_sz);
> +
> +     ret = dlb2_pf_create_dir_port(&dlb2_dev->hw,
> +                                   handle->domain_id,
> +                                   cfg,
> +                                   cq_base,
> +                                   &response);
> +     if (ret)
> +             goto create_port_err;
> +
> +     pp_base = (uintptr_t)dlb2_dev->hw.func_kva + PP_BASE(is_dir);
> +     dlb2_port[response.id][DLB2_DIR_PORT].pp_addr =
> +             (void *)(pp_base + (PAGE_SIZE * response.id));
> +
> +     dlb2_port[response.id][DLB2_DIR_PORT].cq_base =
> +             (void *)(port_base);
> +     memset(&port_memory, 0, sizeof(port_memory));
> +
> +     dlb2_port[response.id][DLB2_DIR_PORT].mz = mz;
> +
> +     dlb2_list_init_head(&port_memory.list);
> +
> +     cfg->response = response;
> +
> +     return 0;
> +
> +create_port_err:
> +
> +     rte_free(port_base);

Ditto

Thanks,
Gage

Reply via email to