Message ID | 20240122-dt-kselftest-dirname-perf-fix-v2-1-f1630532fd38@collabora.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 6154fb9c2134f8d9534b2de10491aa3a22f3c9ff |
Headers | show |
Series | [v2] kselftest: dt: Stop relying on dirname to improve performance | expand |
On Mon, Jan 22, 2024 at 11:29:18AM -0300, Nícolas F. R. A. Prado wrote: > When walking directory trees, instead of looking for specific files and > running dirname to get the parent folder, traverse all folders and > ignore the ones not containing the desired files. This avoids the need > to call dirname inside the loop, which drastically decreases run time: > Running locally on a mt8192-asurada-spherion, which reports 160 test > cases, has gone from 5.5s to 2.9s, while running remotely with an > nfsroot has gone from 13.5s to 5.5s. > > This change has a side-effect, which is that the root DT node now > also shows in the output, even though it isn't expected to bind to a > driver. However there shouldn't be a matching driver for the board > compatible, so the end result will be just an extra skipped test: > > ok 1 / # SKIP > > Reported-by: Mark Brown <broonie@kernel.org> > Closes: https://lore.kernel.org/all/310391e8-fdf2-4c2f-a680-7744eb685177@sirena.org.uk > Fixes: 14571ab1ad21 ("kselftest: Add new test for detecting unprobed Devicetree devices") > Tested-by: Mark Brown <broonie@kernel.org> > Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com> > --- > Changes in v2: > - Tweaked commit message > - Added trailer tags > - Rebased on 6.8-rc1 > --- > tools/testing/selftests/dt/test_unprobed_devices.sh | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) Applied, thanks. Rob
On Mon, Jan 22, 2024 at 09:40:43AM -0600, Rob Herring wrote: > On Mon, Jan 22, 2024 at 11:29:18AM -0300, Nícolas F. R. A. Prado wrote: > > When walking directory trees, instead of looking for specific files and > > running dirname to get the parent folder, traverse all folders and > > ignore the ones not containing the desired files. This avoids the need > Applied, thanks. Is there any prospect of getting this merged as a fix? It's causing a massive number of false positives in my CI when run on slower boards with larger numbers of devices.
diff --git a/tools/testing/selftests/dt/test_unprobed_devices.sh b/tools/testing/selftests/dt/test_unprobed_devices.sh index b07af2a4c4de..7fae90293a9d 100755 --- a/tools/testing/selftests/dt/test_unprobed_devices.sh +++ b/tools/testing/selftests/dt/test_unprobed_devices.sh @@ -33,8 +33,8 @@ if [[ ! -d "${PDT}" ]]; then fi nodes_compatible=$( - for node_compat in $(find ${PDT} -name compatible); do - node=$(dirname "${node_compat}") + for node in $(find ${PDT} -type d); do + [ ! -f "${node}"/compatible ] && continue # Check if node is available if [[ -e "${node}"/status ]]; then status=$(tr -d '\000' < "${node}"/status) @@ -46,10 +46,11 @@ nodes_compatible=$( nodes_dev_bound=$( IFS=$'\n' - for uevent in $(find /sys/devices -name uevent); do - if [[ -d "$(dirname "${uevent}")"/driver ]]; then - grep '^OF_FULLNAME=' "${uevent}" | sed -e 's|OF_FULLNAME=||' - fi + for dev_dir in $(find /sys/devices -type d); do + [ ! -f "${dev_dir}"/uevent ] && continue + [ ! -d "${dev_dir}"/driver ] && continue + + grep '^OF_FULLNAME=' "${dev_dir}"/uevent | sed -e 's|OF_FULLNAME=||' done )