
This commit back-ports the auxiliary bus device driver from kernel version 5.11 to the StarlingX kernels, along with the bug fixes to this driver to date. This is necessary, because Intel's out-of-tree ice and iavf drivers, and Mellanox OFED v5.5's out-of-tree drivers rely on the functionality provided by the auxiliary bus driver. However, because the v5.10 kernel baseline used by StarlingX does not have this driver, the out-of-tree drivers would build and install their own version of the driver, named auxiliary.ko. This would cause kernel module symbol resolution errors at run-time when attempting to load ice and mlx5 kernel modules concurrently. Hence, this commit cherry-picks eight patches to add the auxiliary bus device driver to StarlingX's kernels, and adds a ninth patch to enable CONFIG_AUXILIARY_BUS by default. The latter is necessary, because StarlingX does not enable any in-tree kernel modules that 'select' CONFIG_AUXILIARY_BUS, which causes the kernel's build system to automatically disable this option. (None of the cherry-picked patches had merge conflicts.) It should be noted that all affected out-of-tree drivers' build systems are robust enough to detect that the kernel provides an auxiliary.ko driver, so the only out-of-tree driver modification involved changing the ice driver's spec file so that the installation of auxiliary.ko is removed. Testing: - An incremental monolithic build of StarlingX's master branch was successful. This build included currently-unreleased Mellanox OFED v5.5 work as well. - The built ISO image was successfully installed into and bootstrapped in a VM with low-latency profile in All-in-One simplex configuration, and the ability to insert ice, iavf and mlx5 kernel modules concurrently was confirmed. - The same test was repeated with a different VM, this time with the standard (i.e., non-low-latency) profile in All-in-One simplex mode. - The same ISO image was installed onto a 'standard' StarlingX system with two controller and two compute nodes with network adapters managed by Mellanox's OFED drivers. The low-latency profile was used. The Mellanox network adapters are used for inter-node communication in this server set-up. The bootstrap procedure was successful, and the RDMA/Infiniband over Ethernet functionalities of the Mellanox adapters were successfully tested using the Linux RDMA community's perftest package. - The same ISO image was installed onto an All-in-One simplex StarlingX system with an Intel E810 network adapter, managed by the ice driver, which is the system's management (OAM) interface. While the bootstrap of the system ultimately failed, this was due to an unrelated reason, and the network adapter's functionality was not found to be affected by this commit. iperf3 was used on virtual function interfaces (belonging to the same E810 network adapter) manually set up and attached to separate network namespaces, as an additional sanity test. Story: 2009878 Task: 44612 Change-Id: I8acfb0539757a35be3fb099ea2a6f95e05557e4f Signed-off-by: M. Vefa Bicakci <vefa.bicakci@windriver.com>
50 lines
1.7 KiB
Diff
50 lines
1.7 KiB
Diff
From fb056562367fc8e65b4b7c7a2e0fabf4543c3533 Mon Sep 17 00:00:00 2001
|
|
From: Dave Jiang <dave.jiang@intel.com>
|
|
Date: Fri, 4 Dec 2020 09:46:49 -0700
|
|
Subject: [PATCH] driver core: auxiliary bus: Fix auxiliary bus shutdown null
|
|
auxdrv ptr
|
|
|
|
If the probe of the auxdrv failed, the device->driver is set to NULL.
|
|
During kernel shutdown, the bus shutdown will call auxdrv->shutdown and
|
|
cause an invalid ptr dereference. Add check to make sure device->driver is
|
|
not NULL before we proceed.
|
|
|
|
Fixes: 7de3697e9cbd ("Add auxiliary bus support")
|
|
Cc: Dave Ertman <david.m.ertman@intel.com>
|
|
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
|
|
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
|
|
Link: https://lore.kernel.org/r/160710040926.1889434.8840329810698403478.stgit@djiang5-desk3.ch.intel.com
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
(cherry picked from commit 784b2c48ac12dcee27db001fb1a3c58c39380cb6)
|
|
Signed-off-by: M. Vefa Bicakci <vefa.bicakci@windriver.com>
|
|
---
|
|
drivers/base/auxiliary.c | 11 ++++++++---
|
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
|
|
index f303daadf843..8336535f1e11 100644
|
|
--- a/drivers/base/auxiliary.c
|
|
+++ b/drivers/base/auxiliary.c
|
|
@@ -92,10 +92,15 @@ static int auxiliary_bus_remove(struct device *dev)
|
|
|
|
static void auxiliary_bus_shutdown(struct device *dev)
|
|
{
|
|
- struct auxiliary_driver *auxdrv = to_auxiliary_drv(dev->driver);
|
|
- struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
|
|
+ struct auxiliary_driver *auxdrv = NULL;
|
|
+ struct auxiliary_device *auxdev;
|
|
+
|
|
+ if (dev->driver) {
|
|
+ auxdrv = to_auxiliary_drv(dev->driver);
|
|
+ auxdev = to_auxiliary_dev(dev);
|
|
+ }
|
|
|
|
- if (auxdrv->shutdown)
|
|
+ if (auxdrv && auxdrv->shutdown)
|
|
auxdrv->shutdown(auxdev);
|
|
}
|
|
|
|
--
|
|
2.29.2
|
|
|