From patchwork Wed Oct 18 13:39:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 132895 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7E6C44319A; Wed, 18 Oct 2023 15:39:57 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 51549402CD; Wed, 18 Oct 2023 15:39:57 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 61EEE40261; Wed, 18 Oct 2023 15:39:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697636394; x=1729172394; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zkoZVqerAqdeZEBBW5PzGxgEgcWX9ARKbGSy6vDz2lg=; b=B9sJdxjQV/ejCybfTvKzeVYF0VFPwd7LtQKBlwBD4eVlYUtvaBEfHr1S S0fgvTkRgk+IdNEUpSD5sBBF0s9034Spmj0Tvwr5UyM3tBlfg4TH3TjMi R/Fyr458DX5+rzaLWlp5O94SjV8hsf8RHrvrY6uJfXxs+7hkR5W0Z7+2f pKIFNhRzvLOBNxHyObqlcOMIAxkobf5a1apmEHIoZ4Ysrla77iP/ZH8mZ asMzjOzLesMxsIz2bLrKnU7kluR4lSwdp5nyT+GAH3fMznut5s9JNcZPD I7Hf44Z7MwGjmPcH8UjiguTZlrgMj4DUNz+jGmBBJuJwjxRVT/9XiwG7r Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10867"; a="452482808" X-IronPort-AV: E=Sophos;i="6.03,235,1694761200"; d="scan'208";a="452482808" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Oct 2023 06:39:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10867"; a="733172999" X-IronPort-AV: E=Sophos;i="6.03,235,1694761200"; d="scan'208";a="733172999" Received: from unknown (HELO silpixa00401385.ir.intel.com) ([10.237.214.41]) by orsmga006.jf.intel.com with ESMTP; 18 Oct 2023 06:39:51 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: Jerin Jacob , David Marchand , Bruce Richardson , stable@dpdk.org Subject: [PATCH v5 1/2] eventdev: fix device pointer for vdev-based eventdevs Date: Wed, 18 Oct 2023 14:39:31 +0100 Message-Id: <20231018133932.150177-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231016151713.711965-1-bruce.richardson@intel.com> References: <20231016151713.711965-1-bruce.richardson@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The eventdevs based on vdevs, rather than on e.g. HW PCI devices, were, as a rule, not setting the ".dev" pointer in the eventdev structure. This caused issues as a NULL pointer was returned in calls to info_get, triggering crashes if the pointer is passed unchecked to e.g. rte_dev_name() to print out the name of an event device. Most effective, and future-proofed fix, is to not rely on the eventdev drivers to set the pointer themselves, but to change the vdev init function to take the vdev struct as parameter, and set the "dev" pointer centrally on init. This allows us to fix all drivers in one go, enforced by compiler error if the parameter is missing. Fixes: aaa4a221da26 ("event/sw: add new software-only eventdev driver") Fixes: 46a186b1f0c5 ("event/dsw: add device registration and build system") Fixes: bbbb929da5e6 ("event/skeleton: add skeleton eventdev driver") Fixes: 3c7f3dcfb099 ("event/opdl: add PMD main body and helper function") Fixes: 9caac5dd1e7f ("event/dpaa: introduce PMD") Fixes: 8a5d7a8ec74b ("event/dpaa2: initialize device") Fixes: 34498de6000f ("event/octeontx: add octeontx eventdev driver") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson Acked-by: David Marchand --- drivers/event/dpaa/dpaa_eventdev.c | 6 +++--- drivers/event/dpaa2/dpaa2_eventdev.c | 6 +++--- drivers/event/dsw/dsw_evdev.c | 2 +- drivers/event/octeontx/ssovf_evdev.c | 2 +- drivers/event/opdl/opdl_evdev.c | 2 +- drivers/event/skeleton/skeleton_eventdev.c | 6 +++--- drivers/event/sw/sw_evdev.c | 2 +- lib/eventdev/eventdev_pmd_vdev.h | 3 ++- 8 files changed, 15 insertions(+), 14 deletions(-) diff --git a/drivers/event/dpaa/dpaa_eventdev.c b/drivers/event/dpaa/dpaa_eventdev.c index f615da3813..46a9b88c73 100644 --- a/drivers/event/dpaa/dpaa_eventdev.c +++ b/drivers/event/dpaa/dpaa_eventdev.c @@ -994,14 +994,14 @@ dpaa_event_check_flags(const char *params) } static int -dpaa_event_dev_create(const char *name, const char *params) +dpaa_event_dev_create(const char *name, const char *params, struct rte_vdev_device *vdev) { struct rte_eventdev *eventdev; struct dpaa_eventdev *priv; eventdev = rte_event_pmd_vdev_init(name, sizeof(struct dpaa_eventdev), - rte_socket_id()); + rte_socket_id(), vdev); if (eventdev == NULL) { DPAA_EVENTDEV_ERR("Failed to create eventdev vdev %s", name); goto fail; @@ -1051,7 +1051,7 @@ dpaa_event_dev_probe(struct rte_vdev_device *vdev) params = rte_vdev_device_args(vdev); - return dpaa_event_dev_create(name, params); + return dpaa_event_dev_create(name, params, vdev); } static int diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c index ffc5550f85..dd4e64395f 100644 --- a/drivers/event/dpaa2/dpaa2_eventdev.c +++ b/drivers/event/dpaa2/dpaa2_eventdev.c @@ -1086,7 +1086,7 @@ dpaa2_eventdev_setup_dpci(struct dpaa2_dpci_dev *dpci_dev, } static int -dpaa2_eventdev_create(const char *name) +dpaa2_eventdev_create(const char *name, struct rte_vdev_device *vdev) { struct rte_eventdev *eventdev; struct dpaa2_eventdev *priv; @@ -1096,7 +1096,7 @@ dpaa2_eventdev_create(const char *name) eventdev = rte_event_pmd_vdev_init(name, sizeof(struct dpaa2_eventdev), - rte_socket_id()); + rte_socket_id(), vdev); if (eventdev == NULL) { DPAA2_EVENTDEV_ERR("Failed to create Event device %s", name); goto fail; @@ -1190,7 +1190,7 @@ dpaa2_eventdev_probe(struct rte_vdev_device *vdev) name = rte_vdev_device_name(vdev); DPAA2_EVENTDEV_INFO("Initializing %s", name); - return dpaa2_eventdev_create(name); + return dpaa2_eventdev_create(name, vdev); } static int diff --git a/drivers/event/dsw/dsw_evdev.c b/drivers/event/dsw/dsw_evdev.c index 785c12f61f..1209e73a9d 100644 --- a/drivers/event/dsw/dsw_evdev.c +++ b/drivers/event/dsw/dsw_evdev.c @@ -435,7 +435,7 @@ dsw_probe(struct rte_vdev_device *vdev) name = rte_vdev_device_name(vdev); dev = rte_event_pmd_vdev_init(name, sizeof(struct dsw_evdev), - rte_socket_id()); + rte_socket_id(), vdev); if (dev == NULL) return -EFAULT; diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c index 0eb9358981..a16f24e088 100644 --- a/drivers/event/octeontx/ssovf_evdev.c +++ b/drivers/event/octeontx/ssovf_evdev.c @@ -880,7 +880,7 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev) } eventdev = rte_event_pmd_vdev_init(name, sizeof(struct ssovf_evdev), - rte_socket_id()); + rte_socket_id(), vdev); if (eventdev == NULL) { ssovf_log_err("Failed to create eventdev vdev %s", name); return -ENOMEM; diff --git a/drivers/event/opdl/opdl_evdev.c b/drivers/event/opdl/opdl_evdev.c index dd25749654..0cccaf7e97 100644 --- a/drivers/event/opdl/opdl_evdev.c +++ b/drivers/event/opdl/opdl_evdev.c @@ -697,7 +697,7 @@ opdl_probe(struct rte_vdev_device *vdev) } } dev = rte_event_pmd_vdev_init(name, - sizeof(struct opdl_evdev), socket_id); + sizeof(struct opdl_evdev), socket_id, vdev); if (dev == NULL) { PMD_DRV_LOG(ERR, "eventdev vdev init() failed"); diff --git a/drivers/event/skeleton/skeleton_eventdev.c b/drivers/event/skeleton/skeleton_eventdev.c index dc9b131641..7db1efaf14 100644 --- a/drivers/event/skeleton/skeleton_eventdev.c +++ b/drivers/event/skeleton/skeleton_eventdev.c @@ -428,12 +428,12 @@ RTE_PMD_REGISTER_PCI_TABLE(event_skeleton_pci, pci_id_skeleton_map); /* VDEV based event device */ static int -skeleton_eventdev_create(const char *name, int socket_id) +skeleton_eventdev_create(const char *name, int socket_id, struct rte_vdev_device *vdev) { struct rte_eventdev *eventdev; eventdev = rte_event_pmd_vdev_init(name, - sizeof(struct skeleton_eventdev), socket_id); + sizeof(struct skeleton_eventdev), socket_id, vdev); if (eventdev == NULL) { PMD_DRV_ERR("Failed to create eventdev vdev %s", name); goto fail; @@ -459,7 +459,7 @@ skeleton_eventdev_probe(struct rte_vdev_device *vdev) name = rte_vdev_device_name(vdev); RTE_LOG(INFO, PMD, "Initializing %s on NUMA node %d\n", name, rte_socket_id()); - return skeleton_eventdev_create(name, rte_socket_id()); + return skeleton_eventdev_create(name, rte_socket_id(), vdev); } static int diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c index 6d1816b76d..55e7735cb0 100644 --- a/drivers/event/sw/sw_evdev.c +++ b/drivers/event/sw/sw_evdev.c @@ -1075,7 +1075,7 @@ sw_probe(struct rte_vdev_device *vdev) min_burst_size, deq_burst_size, refill_once); dev = rte_event_pmd_vdev_init(name, - sizeof(struct sw_evdev), socket_id); + sizeof(struct sw_evdev), socket_id, vdev); if (dev == NULL) { SW_LOG_ERR("eventdev vdev init() failed"); return -EFAULT; diff --git a/lib/eventdev/eventdev_pmd_vdev.h b/lib/eventdev/eventdev_pmd_vdev.h index 5fa9d699ac..bb433ba955 100644 --- a/lib/eventdev/eventdev_pmd_vdev.h +++ b/lib/eventdev/eventdev_pmd_vdev.h @@ -45,7 +45,7 @@ extern "C" { __rte_internal static inline struct rte_eventdev * rte_event_pmd_vdev_init(const char *name, size_t dev_private_size, - int socket_id) + int socket_id, struct rte_vdev_device *vdev) { struct rte_eventdev *eventdev; @@ -67,6 +67,7 @@ rte_event_pmd_vdev_init(const char *name, size_t dev_private_size, rte_panic("Cannot allocate memzone for private device" " data"); } + eventdev->dev = &vdev->device; return eventdev; } From patchwork Wed Oct 18 13:39:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 132896 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5BE914319A; Wed, 18 Oct 2023 15:40:20 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4DA6E42D66; Wed, 18 Oct 2023 15:40:20 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 0F3F040261; Wed, 18 Oct 2023 15:40:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697636418; x=1729172418; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dmNRFyywYuxJ6iX+tMEVW06HaDEs9hDwhpR80oMjIpM=; b=dHHi1lGB59IB+zboNkSx0JxnZ9v2eKM462wsDYGW9bRepuJFzo5qcAIT L/JSN1jlNFDe4wai7YKhKq0Z8n6L2Jy/O7TZYFjRmWigLXqVSew3IhEeq exgSB75g1sWukDa/Bqw0XK5Xa8Q6YFnJhECE8lRoyhg8B3FUwL7FsYBHU HD26TWh7vfbx5JVpA+vIY2e3fv/MGMqtRsZvKtDBXR9bDS/g5yChXG/8G ySk2E33P7SocfWZwyhE8qJPwGcQWHe4TYMfGNS+aFJVmOP0G+oPpm+KQa aSakgtRK5XJlBz72sc/eaDCDSZdDKXqNuCSy9Gbs21Q59v0J2lzRZsrkl w==; X-IronPort-AV: E=McAfee;i="6600,9927,10867"; a="452482907" X-IronPort-AV: E=Sophos;i="6.03,235,1694761200"; d="scan'208";a="452482907" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Oct 2023 06:40:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10867"; a="733173148" X-IronPort-AV: E=Sophos;i="6.03,235,1694761200"; d="scan'208";a="733173148" Received: from unknown (HELO silpixa00401385.ir.intel.com) ([10.237.214.41]) by orsmga006.jf.intel.com with ESMTP; 18 Oct 2023 06:40:15 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: Jerin Jacob , David Marchand , Bruce Richardson , stable@dpdk.org Subject: [PATCH v5 2/2] eventdev: fix missing driver names in info struct Date: Wed, 18 Oct 2023 14:39:33 +0100 Message-Id: <20231018133932.150177-2-bruce.richardson@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231018133932.150177-1-bruce.richardson@intel.com> References: <20231016151713.711965-1-bruce.richardson@intel.com> <20231018133932.150177-1-bruce.richardson@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Rather than relying on the individual drivers to always populated the driver name field in the info structure - something missed by some drivers, we can do so in the eventdev rte_event_dev_info_get() function. This fixes issues Fixes: bbbb929da5e6 ("event/skeleton: add skeleton eventdev driver") Fixes: 0ce3ce7c275c ("event/dpaa2: add configuration functions") Cc: stable@dpdk.org Suggested-by: David Marchand Signed-off-by: Bruce Richardson --- lib/eventdev/rte_eventdev.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c index 95373bbaad..0ca32d6721 100644 --- a/lib/eventdev/rte_eventdev.c +++ b/lib/eventdev/rte_eventdev.c @@ -104,6 +104,8 @@ rte_event_dev_info_get(uint8_t dev_id, struct rte_event_dev_info *dev_info) dev_info->dequeue_timeout_ns = dev->data->dev_conf.dequeue_timeout_ns; dev_info->dev = dev->dev; + if (dev->dev != NULL && dev->dev->driver != NULL) + dev_info->driver_name = dev->dev->driver->name; rte_eventdev_trace_info_get(dev_id, dev_info, dev_info->dev);