From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6E2B1432DA for ; Wed, 8 Nov 2023 20:25:41 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 656CB42D97; Wed, 8 Nov 2023 20:25:41 +0100 (CET) Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) by mails.dpdk.org (Postfix) with ESMTP id DB1A9406A2 for ; Wed, 8 Nov 2023 20:25:39 +0100 (CET) Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-50943ccbbaeso18971e87.2 for ; Wed, 08 Nov 2023 11:25:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699471539; x=1700076339; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LXeE/K7TNakUOAtRBkn+fRJqf1g9DvoK02mwpT2m6f0=; b=VssZ36dja9XbF9UGbjOzOwJMpDdqxdaEExdGZ/xIRwANl5aFMEtJiqaNZZsJAMl821 8yScOS+i23H4MY6GLdjYZIOGNOCHutxpyR2YilQFVaKabp5/F8Ay4Zm3APShiIEfZOrG Omosuq75GUsdCL4Uxc0tRKuRXQNns7djegsiBmwBqvT7SC4ewK6oPgw3s38H9/jfD2vp Ruv5pZEnde17WiHVMuoSAWy9IPN8HVho2l+xmSMoTaITGzmvJR6fa+agDbxLYuv8eR/k OLdbaIVmGaM4iXHdsop3gmK3FATHiDIXiSw7REY1yJyIKmAAz0McPQzOuHiallSPDK2I k4ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699471539; x=1700076339; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LXeE/K7TNakUOAtRBkn+fRJqf1g9DvoK02mwpT2m6f0=; b=Z77AKdOKTb38NK6RD0TtTU0kH/R4LxNgjsI+ZkUBg99JeT5pmz3QeqQkUnmhEXI328 jfeGIFYTUv4MCXQO7nwIHw8Do28njMimVWU3X/D5mWlVrvBJdOLyi9Ap/3Jm4MrDeUuT H2gjTwrwqffwP65bwhRNkE1IeEtrJl0TVYa6NXwxXxnYT5I+Rg+0X4mgHFJVcpt3D08Q WqQtxkPWv6pd1sMcDmO+lFshke5eTbhgnS/MH8O8SMpbjL26sQQM0sdvQM4m3CFQsNWZ Qg6T60ALUzeJUvnRI0P+RgBo8o3A0k2IpuWY0BYQl1vNl3EFeasE523PbF3VtBuIIWKx pKtw== X-Gm-Message-State: AOJu0YzLneP9N947FJ8Q+CsKrxANH0oJJUvx+NNAaXWMeXh6+/4fI7FZ dG6KfVWuxbu9HqPKD6wsJK8= X-Google-Smtp-Source: AGHT+IHynpyemELOhAdpviuSrX9JKw7bKbOyLjA8gSktbq4ggKEeaKKOodumafK2z+vh6E8dm0tBdQ== X-Received: by 2002:a05:6512:33ce:b0:509:4d7a:ab05 with SMTP id d14-20020a05651233ce00b005094d7aab05mr2699277lfg.11.1699471539010; Wed, 08 Nov 2023 11:25:39 -0800 (PST) Received: from localhost ([2a01:4b00:d307:1000:f1d3:eb5e:11f4:a7d9]) by smtp.gmail.com with ESMTPSA id d5-20020adff2c5000000b0032d2f09d991sm5597538wrp.33.2023.11.08.11.25.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Nov 2023 11:25:38 -0800 (PST) From: luca.boccassi@gmail.com To: Bruce Richardson Cc: David Marchand , dpdk stable Subject: patch 'eventdev: fix device pointer for vdev-based devices' has been queued to stable release 20.11.10 Date: Wed, 8 Nov 2023 19:25:00 +0000 Message-Id: <20231108192535.922238-2-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231108192535.922238-1-luca.boccassi@gmail.com> References: <20231018235930.3144-41-luca.boccassi@gmail.com> <20231108192535.922238-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 20.11.10 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/10/23. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/e4af517678060237c39666b0cd50734b791c82a3 Thanks. Luca Boccassi --- >From e4af517678060237c39666b0cd50734b791c82a3 Mon Sep 17 00:00:00 2001 From: Bruce Richardson Date: Wed, 18 Oct 2023 14:39:31 +0100 Subject: [PATCH] eventdev: fix device pointer for vdev-based devices [ upstream commit 928b5c701f254c64a7adb0051c0cfd25e8365584 ] 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") 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/librte_eventdev/rte_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 01ddd0eb63..cdd5763e2f 100644 --- a/drivers/event/dpaa/dpaa_eventdev.c +++ b/drivers/event/dpaa/dpaa_eventdev.c @@ -991,14 +991,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; @@ -1046,7 +1046,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 eeb2494bd0..d329796f7d 100644 --- a/drivers/event/dpaa2/dpaa2_eventdev.c +++ b/drivers/event/dpaa2/dpaa2_eventdev.c @@ -1082,7 +1082,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; @@ -1092,7 +1092,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; @@ -1184,7 +1184,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 ee3f441c5a..d50e88debf 100644 --- a/drivers/event/dsw/dsw_evdev.c +++ b/drivers/event/dsw/dsw_evdev.c @@ -406,7 +406,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 e60a7dc69e..462039c9ae 100644 --- a/drivers/event/octeontx/ssovf_evdev.c +++ b/drivers/event/octeontx/ssovf_evdev.c @@ -810,7 +810,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 fa1b9852a3..6ad12048ea 100644 --- a/drivers/event/opdl/opdl_evdev.c +++ b/drivers/event/opdl/opdl_evdev.c @@ -694,7 +694,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 6fd1102596..5ad30fc1b9 100644 --- a/drivers/event/skeleton/skeleton_eventdev.c +++ b/drivers/event/skeleton/skeleton_eventdev.c @@ -426,12 +426,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; @@ -456,7 +456,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 baeb982794..598d7eee21 100644 --- a/drivers/event/sw/sw_evdev.c +++ b/drivers/event/sw/sw_evdev.c @@ -1077,7 +1077,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/librte_eventdev/rte_eventdev_pmd_vdev.h b/lib/librte_eventdev/rte_eventdev_pmd_vdev.h index ff79d82530..99cd5a1112 100644 --- a/lib/librte_eventdev/rte_eventdev_pmd_vdev.h +++ b/lib/librte_eventdev/rte_eventdev_pmd_vdev.h @@ -47,7 +47,7 @@ extern "C" { */ 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; @@ -69,6 +69,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; } -- 2.39.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2023-11-08 19:23:52.007028801 +0000 +++ 0002-eventdev-fix-device-pointer-for-vdev-based-devices.patch 2023-11-08 19:23:51.721395216 +0000 @@ -1 +1 @@ -From 928b5c701f254c64a7adb0051c0cfd25e8365584 Mon Sep 17 00:00:00 2001 +From e4af517678060237c39666b0cd50734b791c82a3 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 928b5c701f254c64a7adb0051c0cfd25e8365584 ] + @@ -25 +26,0 @@ -Cc: stable@dpdk.org @@ -30,8 +31,8 @@ - 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 ++- + 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/librte_eventdev/rte_eventdev_pmd_vdev.h | 3 ++- @@ -41 +42 @@ -index f615da3813..46a9b88c73 100644 +index 01ddd0eb63..cdd5763e2f 100644 @@ -44 +45 @@ -@@ -994,14 +994,14 @@ dpaa_event_check_flags(const char *params) +@@ -991,14 +991,14 @@ dpaa_event_check_flags(const char *params) @@ -61 +62 @@ -@@ -1051,7 +1051,7 @@ dpaa_event_dev_probe(struct rte_vdev_device *vdev) +@@ -1046,7 +1046,7 @@ dpaa_event_dev_probe(struct rte_vdev_device *vdev) @@ -71 +72 @@ -index ffc5550f85..dd4e64395f 100644 +index eeb2494bd0..d329796f7d 100644 @@ -74 +75 @@ -@@ -1086,7 +1086,7 @@ dpaa2_eventdev_setup_dpci(struct dpaa2_dpci_dev *dpci_dev, +@@ -1082,7 +1082,7 @@ dpaa2_eventdev_setup_dpci(struct dpaa2_dpci_dev *dpci_dev, @@ -83 +84 @@ -@@ -1096,7 +1096,7 @@ dpaa2_eventdev_create(const char *name) +@@ -1092,7 +1092,7 @@ dpaa2_eventdev_create(const char *name) @@ -92 +93 @@ -@@ -1190,7 +1190,7 @@ dpaa2_eventdev_probe(struct rte_vdev_device *vdev) +@@ -1184,7 +1184,7 @@ dpaa2_eventdev_probe(struct rte_vdev_device *vdev) @@ -102 +103 @@ -index 785c12f61f..1209e73a9d 100644 +index ee3f441c5a..d50e88debf 100644 @@ -105 +106 @@ -@@ -435,7 +435,7 @@ dsw_probe(struct rte_vdev_device *vdev) +@@ -406,7 +406,7 @@ dsw_probe(struct rte_vdev_device *vdev) @@ -115 +116 @@ -index 0eb9358981..a16f24e088 100644 +index e60a7dc69e..462039c9ae 100644 @@ -118 +119 @@ -@@ -880,7 +880,7 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev) +@@ -810,7 +810,7 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev) @@ -128 +129 @@ -index dd25749654..0cccaf7e97 100644 +index fa1b9852a3..6ad12048ea 100644 @@ -131 +132 @@ -@@ -697,7 +697,7 @@ opdl_probe(struct rte_vdev_device *vdev) +@@ -694,7 +694,7 @@ opdl_probe(struct rte_vdev_device *vdev) @@ -141 +142 @@ -index dd2dab2e27..7df032b7da 100644 +index 6fd1102596..5ad30fc1b9 100644 @@ -144 +145 @@ -@@ -428,12 +428,12 @@ RTE_PMD_REGISTER_PCI_TABLE(event_skeleton_pci, pci_id_skeleton_map); +@@ -426,12 +426,12 @@ RTE_PMD_REGISTER_PCI_TABLE(event_skeleton_pci, pci_id_skeleton_map); @@ -159 +160 @@ -@@ -459,7 +459,7 @@ skeleton_eventdev_probe(struct rte_vdev_device *vdev) +@@ -456,7 +456,7 @@ skeleton_eventdev_probe(struct rte_vdev_device *vdev) @@ -169 +170 @@ -index 6d1816b76d..55e7735cb0 100644 +index baeb982794..598d7eee21 100644 @@ -172 +173 @@ -@@ -1075,7 +1075,7 @@ sw_probe(struct rte_vdev_device *vdev) +@@ -1077,7 +1077,7 @@ sw_probe(struct rte_vdev_device *vdev) @@ -181,6 +182,6 @@ -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 +diff --git a/lib/librte_eventdev/rte_eventdev_pmd_vdev.h b/lib/librte_eventdev/rte_eventdev_pmd_vdev.h +index ff79d82530..99cd5a1112 100644 +--- a/lib/librte_eventdev/rte_eventdev_pmd_vdev.h ++++ b/lib/librte_eventdev/rte_eventdev_pmd_vdev.h +@@ -47,7 +47,7 @@ extern "C" { + */ @@ -194 +195 @@ -@@ -67,6 +67,7 @@ rte_event_pmd_vdev_init(const char *name, size_t dev_private_size, +@@ -69,6 +69,7 @@ rte_event_pmd_vdev_init(const char *name, size_t dev_private_size,