[PATCH v4-S3 64/65] event/dpaa2: do not fail device creation on DPCI errors
Prashant Gupta
prashant.gupta_3 at nxp.com
Fri Oct 23 15:43:44 CEST 2026
From: Jun Yang <jun.yang at nxp.com>
Event device creation aborted entirely whenever a DPCI object could not
be allocated for an event queue, or when any of the parallel, atomic or
ordered link attaches failed. A single failure rolled back every queue
and made dpaa2_eventdev_create() return an error.
This is too strict. The DPNI and DPSEC event adapters can still be
registered and used even when the DPCI-backed event queues are not
available, so a DPCI shortage or attach failure must not bring the whole
event device down.
Signed-off-by: Jun Yang <jun.yang at nxp.com>
---
drivers/event/dpaa2/dpaa2_eventdev.c | 68 +++++++++++++---------------
1 file changed, 31 insertions(+), 37 deletions(-)
diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c
index 011883bba8..5c36cb9dc9 100644
--- a/drivers/event/dpaa2/dpaa2_eventdev.c
+++ b/drivers/event/dpaa2/dpaa2_eventdev.c
@@ -1278,14 +1278,13 @@ dpaa2_eventdev_create(const char *name, struct rte_vdev_device *vdev)
struct dpaa2_dpcon_dev *dpcon_dev = NULL;
struct dpaa2_dpci_dev *dpci_dev = NULL;
struct dpaa2_eventq *evq_info;
- int ret = 0, i;
+ int ret, i, success;
eventdev = rte_event_pmd_vdev_init(name,
sizeof(struct dpaa2_eventdev), rte_socket_id(), vdev);
if (!eventdev) {
- ret = -ENOMEM;
DPAA2_EVENTDEV_ERR("Failed to create Event device %s", name);
- goto done;
+ return -ENOMEM;
}
eventdev->dev_ops = &dpaa2_eventdev_ops;
@@ -1312,66 +1311,61 @@ dpaa2_eventdev_create(const char *name, struct rte_vdev_device *vdev)
dpci_dev = rte_dpaa2_alloc_dpci_dev();
if (!dpci_dev) {
- rte_dpaa2_free_dpcon_dev(dpcon_dev);
- break;
+ DPAA2_EVENTDEV_WARN("No dpci available for evq.%d", i);
+ goto skip_dpci_attach;
}
- evq_info->dpci = dpci_dev;
+ success = 0;
ret = rte_dpaa2_dpci_link_attach(dpci_dev, DPCI_DEST_DPCON,
dpcon_dev->dpcon_id, 0,
dpaa2_eventdev_process_parallel, DPAA2_QUEUE_NONE_ORDER,
&evq_info->dpci_txqs[RTE_SCHED_TYPE_PARALLEL]);
- if (ret) {
- DPAA2_EVENTDEV_ERR("DPCI attach parallel qp failed: err(%d)", ret);
- goto err_break;
- }
+ if (ret)
+ DPAA2_EVENTDEV_WARN("DPCI attach parallel qp failed: err(%d)", ret);
+ else
+ success++;
ret = rte_dpaa2_dpci_link_attach(dpci_dev, DPCI_DEST_DPCON,
dpcon_dev->dpcon_id, 0,
dpaa2_eventdev_process_atomic, DPAA2_QUEUE_HOLD_ACTIVE_ORDER,
&evq_info->dpci_txqs[RTE_SCHED_TYPE_ATOMIC]);
- if (ret) {
- DPAA2_EVENTDEV_ERR("DPCI attach atomic qp failed: err(%d)", ret);
- goto err_break;
- }
+ if (ret)
+ DPAA2_EVENTDEV_WARN("DPCI attach atomic qp failed: err(%d)", ret);
+ else
+ success++;
ret = rte_dpaa2_dpci_link_attach(dpci_dev, DPCI_DEST_DPCON,
dpcon_dev->dpcon_id, 0,
dpaa2_eventdev_process_order, DPAA2_QUEUE_LOOSE_ORP_ORDER,
&evq_info->dpci_txqs[RTE_SCHED_TYPE_ORDERED]);
- if (ret) {
- DPAA2_EVENTDEV_ERR("DPCI attach order qp failed: err(%d)", ret);
- goto err_break;
- }
+ if (ret)
+ DPAA2_EVENTDEV_WARN("DPCI attach order qp failed: err(%d)", ret);
+ else
+ success++;
+
+ if (success)
+ evq_info->dpci = dpci_dev;
+ else
+ rte_dpaa2_free_dpci_dev(dpci_dev);
+skip_dpci_attach:
evq_info->valid = true;
evq_info->event_queue_id = priv->max_event_queues;
priv->max_event_queues++;
- continue;
-err_break:
- if (evq_info->dpcon)
- rte_dpaa2_free_dpcon_dev(evq_info->dpcon);
- if (evq_info->dpci)
- rte_dpaa2_free_dpci_dev(evq_info->dpci);
- break;
}
done:
- if (ret && priv) {
- for (i = 0; i < priv->max_event_queues; i++) {
- evq_info = &priv->evq_info[i];
- if (evq_info->dpcon)
- rte_dpaa2_free_dpcon_dev(evq_info->dpcon);
- if (evq_info->dpci)
- rte_dpaa2_free_dpci_dev(evq_info->dpci);
- }
- }
+ ret = 0;
event_dev_probing_finish(eventdev);
- if (ret)
- DPAA2_EVENTDEV_ERR("Failed(%d) to create event device(%s)", ret, name);
- else
+ if (priv && !priv->max_event_queues) {
+ ret = -ENODEV;
+ DPAA2_EVENTDEV_ERR("Failed to create event device(%s)", name);
+ } else if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
DPAA2_EVENTDEV_INFO("Create event device(%s)", name);
+ } else {
+ DPAA2_EVENTDEV_INFO("Attach event device(%s)", name);
+ }
return ret;
}
--
2.43.0
More information about the dev
mailing list