Test-Label: iol-testing Test-Status: WARNING http://dpdk.org/patch/108084 _apply patch failure_ Submitter: Michael Baum Date: Tuesday, February 22 2022 21:04:16 Applied on: CommitID:ecc0dd455e9a56db783463d83173c3f348b560ce Apply patch set 108084-108089 failed: Checking patch doc/guides/platform/mlx5.rst... error: doc/guides/platform/mlx5.rst: does not exist in index Checking patch drivers/common/mlx5/linux/mlx5_common_os.c... Checking patch drivers/common/mlx5/linux/mlx5_common_os.h... Checking patch drivers/common/mlx5/mlx5_common.c... error: while searching for: /* Driver type key for new device global syntax. */ #define MLX5_DRIVER_KEY "driver" /* Enable extending memsegs when creating a MR. */ #define MLX5_MR_EXT_MEMSEG_EN "mr_ext_memseg_en" error: patch failed: drivers/common/mlx5/mlx5_common.c:24 error: while searching for: config->mr_mempool_reg_en = !!tmp; } else if (strcmp(key, MLX5_SYS_MEM_EN) == 0) { config->sys_mem_en = !!tmp; } return 0; } error: patch failed: drivers/common/mlx5/mlx5_common.c:283 error: while searching for: MLX5_MR_EXT_MEMSEG_EN, MLX5_SYS_MEM_EN, MLX5_MR_MEMPOOL_REG_EN, NULL, }; int ret = 0; error: patch failed: drivers/common/mlx5/mlx5_common.c:310 error: while searching for: config->mr_mempool_reg_en = 1; config->sys_mem_en = 0; config->dbnc = MLX5_ARG_UNSET; /* Process common parameters. */ ret = mlx5_kvargs_process(mkvlist, params, mlx5_common_args_check_handler, config); if (ret) { rte_errno = EINVAL; ret = -rte_errno; } DRV_LOG(DEBUG, "mr_ext_memseg_en is %u.", config->mr_ext_memseg_en); DRV_LOG(DEBUG, "mr_mempool_reg_en is %u.", config->mr_mempool_reg_en); DRV_LOG(DEBUG, "sys_mem_en is %u.", config->sys_mem_en); error: patch failed: drivers/common/mlx5/mlx5_common.c:321 Hunk #5 succeeded at 497 (offset -166 lines). Hunk #6 succeeded at 526 (offset -166 lines). error: while searching for: cdev->dev->name); goto error; } if (cdev->config.sys_mem_en ^ config->sys_mem_en) { DRV_LOG(ERR, "\"sys_mem_en\" configuration mismatch for device %s.", error: patch failed: drivers/common/mlx5/mlx5_common.c:826 Checking patch drivers/common/mlx5/mlx5_common.h... Hunk #1 succeeded at 414 (offset -32 lines). Hunk #2 succeeded at 435 (offset -32 lines). Hunk #3 succeeded at 526 (offset -47 lines). Checking patch drivers/common/mlx5/version.map... Hunk #1 succeeded at 133 (offset -3 lines). Checking patch drivers/common/mlx5/windows/mlx5_common_os.c... Checking patch drivers/common/mlx5/windows/mlx5_common_os.h... Applied patch drivers/common/mlx5/linux/mlx5_common_os.c cleanly. Applied patch drivers/common/mlx5/linux/mlx5_common_os.h cleanly. Applying patch drivers/common/mlx5/mlx5_common.c with 5 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Hunk #5 applied cleanly. Hunk #6 applied cleanly. Rejected hunk #7. Applied patch drivers/common/mlx5/mlx5_common.h cleanly. Applied patch drivers/common/mlx5/version.map cleanly. Applied patch drivers/common/mlx5/windows/mlx5_common_os.c cleanly. Applied patch drivers/common/mlx5/windows/mlx5_common_os.h cleanly. diff a/drivers/common/mlx5/mlx5_common.c b/drivers/common/mlx5/mlx5_common.c (rejected hunks) @@ -24,6 +24,12 @@ uint8_t haswell_broadwell_cpu; /* Driver type key for new device global syntax. */ #define MLX5_DRIVER_KEY "driver" +/* Device parameter to get file descriptor for import device. */ +#define MLX5_DEVICE_FD "cmd_fd" + +/* Device parameter to get PD number for import Protection Domain. */ +#define MLX5_PD_HANDLE "pd_handle" + /* Enable extending memsegs when creating a MR. */ #define MLX5_MR_EXT_MEMSEG_EN "mr_ext_memseg_en" @@ -283,6 +289,10 @@ mlx5_common_args_check_handler(const char *key, const char *val, void *opaque) config->mr_mempool_reg_en = !!tmp; } else if (strcmp(key, MLX5_SYS_MEM_EN) == 0) { config->sys_mem_en = !!tmp; + } else if (strcmp(key, MLX5_DEVICE_FD) == 0) { + config->device_fd = tmp; + } else if (strcmp(key, MLX5_PD_HANDLE) == 0) { + config->pd_handle = tmp; } return 0; } @@ -310,6 +320,8 @@ mlx5_common_config_get(struct mlx5_kvargs_ctrl *mkvlist, MLX5_MR_EXT_MEMSEG_EN, MLX5_SYS_MEM_EN, MLX5_MR_MEMPOOL_REG_EN, + MLX5_DEVICE_FD, + MLX5_PD_HANDLE, NULL, }; int ret = 0; @@ -321,13 +333,19 @@ mlx5_common_config_get(struct mlx5_kvargs_ctrl *mkvlist, config->mr_mempool_reg_en = 1; config->sys_mem_en = 0; config->dbnc = MLX5_ARG_UNSET; + config->device_fd = MLX5_ARG_UNSET; + config->pd_handle = MLX5_ARG_UNSET; /* Process common parameters. */ ret = mlx5_kvargs_process(mkvlist, params, mlx5_common_args_check_handler, config); if (ret) { rte_errno = EINVAL; - ret = -rte_errno; + return -rte_errno; } + /* Validate user arguments for remote PD and CTX if it is given. */ + ret = mlx5_os_remote_pd_and_ctx_validate(config); + if (ret) + return ret; DRV_LOG(DEBUG, "mr_ext_memseg_en is %u.", config->mr_ext_memseg_en); DRV_LOG(DEBUG, "mr_mempool_reg_en is %u.", config->mr_mempool_reg_en); DRV_LOG(DEBUG, "sys_mem_en is %u.", config->sys_mem_en); @@ -826,6 +849,17 @@ mlx5_common_probe_again_args_validate(struct mlx5_common_device *cdev, cdev->dev->name); goto error; } + if (cdev->config.device_fd ^ config->device_fd) { + DRV_LOG(ERR, "\"cmd_fd\" configuration mismatch for device %s.", + cdev->dev->name); + goto error; + } + if (cdev->config.pd_handle ^ config->pd_handle) { + DRV_LOG(ERR, + "\"pd_handle\" configuration mismatch for device %s.", + cdev->dev->name); + goto error; + } if (cdev->config.sys_mem_en ^ config->sys_mem_en) { DRV_LOG(ERR, "\"sys_mem_en\" configuration mismatch for device %s.", Checking patch drivers/net/mlx5/linux/mlx5_os.c... Hunk #1 succeeded at 1127 (offset -29 lines). Hunk #2 succeeded at 1828 (offset 199 lines). Checking patch drivers/net/mlx5/mlx5.c... Hunk #1 succeeded at 1609 (offset -246 lines). Checking patch drivers/net/mlx5/mlx5.h... Hunk #1 succeeded at 1424 (offset 4 lines). Checking patch drivers/net/mlx5/mlx5_defs.h... Checking patch drivers/net/mlx5/mlx5_ethdev.c... Checking patch drivers/net/mlx5/mlx5_rx.h... Checking patch drivers/net/mlx5/mlx5_rxq.c... error: while searching for: data->rt_timestamp = sh->dev_cap.rt_timestamp; } } error: patch failed: drivers/net/mlx5/mlx5_rxq.c:2989 Checking patch drivers/net/mlx5/rte_pmd_mlx5.h... Checking patch drivers/net/mlx5/version.map... Applied patch drivers/net/mlx5/linux/mlx5_os.c cleanly. Applied patch drivers/net/mlx5/mlx5.c cleanly. Applied patch drivers/net/mlx5/mlx5.h cleanly. Applied patch drivers/net/mlx5/mlx5_defs.h cleanly. Applied patch drivers/net/mlx5/mlx5_ethdev.c cleanly. Applied patch drivers/net/mlx5/mlx5_rx.h cleanly. Applying patch drivers/net/mlx5/mlx5_rxq.c with 1 reject... Hunk #1 applied cleanly. Rejected hunk #2. Applied patch drivers/net/mlx5/rte_pmd_mlx5.h cleanly. Applied patch drivers/net/mlx5/version.map cleanly. diff a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c (rejected hunks) @@ -2989,3 +2990,111 @@ mlx5_rxq_timestamp_set(struct rte_eth_dev *dev) data->rt_timestamp = sh->dev_cap.rt_timestamp; } } + +/** + * Validate given external RxQ rte_plow index, and get pointer to concurrent + * external RxQ object to map/unmap. + * + * @param[in] port_id + * The port identifier of the Ethernet device. + * @param[in] dpdk_idx + * Queue index in rte_flow. + * + * @return + * Pointer to concurrent external RxQ on success, + * NULL otherwise and rte_errno is set. + */ +static struct mlx5_external_rxq * +mlx5_external_rx_queue_get_validate(uint16_t port_id, uint16_t dpdk_idx) +{ + struct rte_eth_dev *dev; + struct mlx5_priv *priv; + + if (dpdk_idx < MLX5_EXTERNAL_RX_QUEUE_ID_MIN) { + DRV_LOG(ERR, "Queue index %u should be in range: [%u, %u].", + dpdk_idx, MLX5_EXTERNAL_RX_QUEUE_ID_MIN, UINT16_MAX); + rte_errno = EINVAL; + return NULL; + } + if (rte_eth_dev_is_valid_port(port_id) < 0) { + DRV_LOG(ERR, "There is no Ethernet device for port %u.", + port_id); + rte_errno = ENODEV; + return NULL; + } + dev = &rte_eth_devices[port_id]; + priv = dev->data->dev_private; + if (!mlx5_imported_pd_and_ctx(priv->sh->cdev)) { + DRV_LOG(ERR, "Port %u " + "external RxQ isn't supported on local PD and CTX.", + port_id); + rte_errno = ENOTSUP; + return NULL; + } + if (!mlx5_devx_obj_ops_en(priv->sh)) { + DRV_LOG(ERR, + "Port %u external RxQ isn't supported by Verbs API.", + port_id); + rte_errno = ENOTSUP; + return NULL; + } + /* + * When user configures remote PD and CTX and device creates RxQ by + * DevX, external RxQs array is allocated. + */ + MLX5_ASSERT(priv->ext_rxqs != NULL); + return &priv->ext_rxqs[dpdk_idx - MLX5_EXTERNAL_RX_QUEUE_ID_MIN]; +} + +int +rte_pmd_mlx5_external_rx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx, + uint32_t hw_idx) +{ + struct mlx5_external_rxq *ext_rxq; + + ext_rxq = mlx5_external_rx_queue_get_validate(port_id, dpdk_idx); + if (ext_rxq == NULL) + return -rte_errno; + if (__atomic_load_n(&ext_rxq->refcnt, __ATOMIC_RELAXED)) { + if (ext_rxq->hw_id != hw_idx) { + DRV_LOG(ERR, "Port %u external RxQ index %u " + "is already mapped to HW index (requesting is " + "%u, existing is %u).", + port_id, dpdk_idx, hw_idx, ext_rxq->hw_id); + rte_errno = EEXIST; + return -rte_errno; + } + DRV_LOG(WARNING, "Port %u external RxQ index %u " + "is already mapped to the requested HW index (%u)", + port_id, dpdk_idx, hw_idx); + + } else { + ext_rxq->hw_id = hw_idx; + __atomic_store_n(&ext_rxq->refcnt, 1, __ATOMIC_RELAXED); + DRV_LOG(DEBUG, "Port %u external RxQ index %u " + "is successfully mapped to the requested HW index (%u)", + port_id, dpdk_idx, hw_idx); + } + return 0; +} + +int +rte_pmd_mlx5_external_rx_queue_id_unmap(uint16_t port_id, uint16_t dpdk_idx) +{ + struct mlx5_external_rxq *ext_rxq; + + ext_rxq = mlx5_external_rx_queue_get_validate(port_id, dpdk_idx); + if (ext_rxq == NULL) + return -rte_errno; + if (__atomic_load_n(&ext_rxq->refcnt, __ATOMIC_RELAXED) == 0) { + DRV_LOG(ERR, "Port %u external RxQ index %u doesn't exist.", + port_id, dpdk_idx); + rte_errno = EINVAL; + return -rte_errno; + } + __atomic_store_n(&ext_rxq->refcnt, 0, __ATOMIC_RELAXED); + DRV_LOG(DEBUG, + "Port %u external RxQ index %u is successfully unmapped.", + port_id, dpdk_idx); + return 0; +} Checking patch doc/guides/nics/mlx5.rst... Hunk #1 succeeded at 62 (offset 24 lines). Checking patch doc/guides/rel_notes/release_22_03.rst... error: while searching for: * Added PPPoL2TPv2oUDP FDIR distribute packets based on inner IP src/dst address and UDP/TCP src/dst port. * **Updated Wangxun ngbe driver.** * Added support for devices of custom PHY interfaces. error: patch failed: doc/guides/rel_notes/release_22_03.rst:118 Checking patch drivers/net/mlx5/mlx5.c... error: drivers/net/mlx5/mlx5.c: does not match index Checking patch drivers/net/mlx5/mlx5_devx.c... Hunk #1 succeeded at 579 (offset -1 lines). Hunk #2 succeeded at 718 (offset -1 lines). Hunk #3 succeeded at 736 (offset -1 lines). Checking patch drivers/net/mlx5/mlx5_flow.c... Checking patch drivers/net/mlx5/mlx5_rx.h... error: drivers/net/mlx5/mlx5_rx.h: does not match index Checking patch drivers/net/mlx5/mlx5_rxq.c... error: drivers/net/mlx5/mlx5_rxq.c: does not match index Applied patch doc/guides/nics/mlx5.rst cleanly. Applying patch doc/guides/rel_notes/release_22_03.rst with 1 reject... Rejected hunk #1. Applied patch drivers/net/mlx5/mlx5_devx.c cleanly. Applied patch drivers/net/mlx5/mlx5_flow.c cleanly. diff a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst (rejected hunks) @@ -118,6 +118,12 @@ New Features * Added PPPoL2TPv2oUDP FDIR distribute packets based on inner IP src/dst address and UDP/TCP src/dst port. +* **Updated Mellanox mlx5 driver.** + + Updated the Mellanox mlx5 driver with new features and improvements, including: + + * Support steering for external Rx queue. + * **Updated Wangxun ngbe driver.** * Added support for devices of custom PHY interfaces. https://lab.dpdk.org/results/dashboard/patchsets/21201/ UNH-IOL DPDK Community Lab