Skip to content

Commit

Permalink
selftests/bpf: Adjust vmtest.sh to use local kernel configuration
Browse files Browse the repository at this point in the history
So far the vmtest.sh script, which can be used as a convenient way to
run bpf selftests, has obtained the kernel config safe to use for
testing from the libbpf/libbpf GitHub repository [0].

Given that we now have included this configuration into this very
repository, we can just consume it from here as well, eliminating the
necessity of remote accesses.

With this change we adjust the logic in the script to use the
configuration from below tools/testing/selftests/bpf/configs/ instead
of pulling it over the network.

  [0] https://github.com/libbpf/libbpf

Signed-off-by: Daniel Müller <deso@posteo.net>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Acked-by: Mykola Lysenko <mykolal@fb.com>
Link: https://lore.kernel.org/bpf/20220727001156.3553701-4-deso@posteo.net
  • Loading branch information
Daniel Müller authored and Daniel Borkmann committed Jul 27, 2022
1 parent cbd620f commit 40b0965
Showing 1 changed file with 34 additions and 19 deletions.
53 changes: 34 additions & 19 deletions tools/testing/selftests/bpf/vmtest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ DEFAULT_COMMAND="./test_progs"
MOUNT_DIR="mnt"
ROOTFS_IMAGE="root.img"
OUTPUT_DIR="$HOME/.bpf_selftests"
KCONFIG_URL="https://raw.githubusercontent.com/libbpf/libbpf/master/travis-ci/vmtest/configs/config-latest.${ARCH}"
KCONFIG_API_URL="https://api.github.com/repos/libbpf/libbpf/contents/travis-ci/vmtest/configs/config-latest.${ARCH}"
KCONFIG_REL_PATHS=("tools/testing/selftests/bpf/config" "tools/testing/selftests/bpf/config.${ARCH}")
INDEX_URL="https://raw.githubusercontent.com/libbpf/ci/master/INDEX"
NUM_COMPILE_JOBS="$(nproc)"
LOG_FILE_BASE="$(date +"bpf_selftests.%Y-%m-%d_%H-%M-%S")"
Expand Down Expand Up @@ -269,26 +268,42 @@ is_rel_path()
[[ ${path:0:1} != "/" ]]
}

do_update_kconfig()
{
local kernel_checkout="$1"
local kconfig_file="$2"

rm -f "$kconfig_file" 2> /dev/null

for config in "${KCONFIG_REL_PATHS[@]}"; do
local kconfig_src="${kernel_checkout}/${config}"
cat "$kconfig_src" >> "$kconfig_file"
done
}

update_kconfig()
{
local kconfig_file="$1"
local update_command="curl -sLf ${KCONFIG_URL} -o ${kconfig_file}"
# Github does not return the "last-modified" header when retrieving the
# raw contents of the file. Use the API call to get the last-modified
# time of the kernel config and only update the config if it has been
# updated after the previously cached config was created. This avoids
# unnecessarily compiling the kernel and selftests.
if [[ -f "${kconfig_file}" ]]; then
local last_modified_date="$(curl -sL -D - "${KCONFIG_API_URL}" -o /dev/null | \
grep "last-modified" | awk -F ': ' '{print $2}')"
local remote_modified_timestamp="$(date -d "${last_modified_date}" +"%s")"
local local_creation_timestamp="$(stat -c %Y "${kconfig_file}")"
local kernel_checkout="$1"
local kconfig_file="$2"

if [[ "${remote_modified_timestamp}" -gt "${local_creation_timestamp}" ]]; then
${update_command}
fi
if [[ -f "${kconfig_file}" ]]; then
local local_modified="$(stat -c %Y "${kconfig_file}")"

for config in "${KCONFIG_REL_PATHS[@]}"; do
local kconfig_src="${kernel_checkout}/${config}"
local src_modified="$(stat -c %Y "${kconfig_src}")"
# Only update the config if it has been updated after the
# previously cached config was created. This avoids
# unnecessarily compiling the kernel and selftests.
if [[ "${src_modified}" -gt "${local_modified}" ]]; then
do_update_kconfig "$kernel_checkout" "$kconfig_file"
# Once we have found one outdated configuration
# there is no need to check other ones.
break
fi
done
else
${update_command}
do_update_kconfig "$kernel_checkout" "$kconfig_file"
fi
}

Expand Down Expand Up @@ -372,7 +387,7 @@ main()

mkdir -p "${OUTPUT_DIR}"
mkdir -p "${mount_dir}"
update_kconfig "${kconfig_file}"
update_kconfig "${kernel_checkout}" "${kconfig_file}"

recompile_kernel "${kernel_checkout}" "${make_command}"

Expand Down

0 comments on commit 40b0965

Please sign in to comment.