-
Notifications
You must be signed in to change notification settings - Fork 97
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Kernel Patches Daemon
committed
May 23, 2022
1 parent
608b638
commit 175b641
Showing
13 changed files
with
6,273 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
name: 'vmtest' | ||
description: 'Build + run vmtest' | ||
inputs: | ||
arch: | ||
description: 'what arch to test' | ||
required: true | ||
default: 'x86_64' | ||
toolchain: | ||
description: 'what toolchain to use' | ||
required: true | ||
default: 'gcc' | ||
runs: | ||
using: "composite" | ||
steps: | ||
# 1. Setup environment | ||
- name: Setup build environment | ||
uses: libbpf/ci/setup-build-env@master | ||
# 2. Build | ||
- name: Build kernel image | ||
shell: bash | ||
run: ${GITHUB_ACTION_PATH}/build.sh ${{ inputs.arch }} ${{ inputs.toolchain }} | ||
- name: Build selftests | ||
shell: bash | ||
run: ${GITHUB_ACTION_PATH}/build_selftests.sh ${{ inputs.toolchain }} | ||
env: | ||
VMLINUX_BTF: ${{ github.workspace }}/vmlinux | ||
# 3. Test | ||
- name: Prepare rootfs | ||
uses: libbpf/ci/prepare-rootfs@master | ||
with: | ||
project-name: 'libbpf' | ||
arch: ${{ inputs.arch }} | ||
kernel-root: '.' | ||
- name: Run selftests | ||
uses: libbpf/ci/run-qemu@master | ||
with: | ||
arch: ${{ inputs.arch}} | ||
img: '/tmp/root.img' | ||
vmlinuz: '${{ github.workspace }}/vmlinuz' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#!/bin/bash | ||
|
||
set -euo pipefail | ||
|
||
ARCH="$1" | ||
TOOLCHAIN="$2" | ||
TOOLCHAIN_NAME="$(echo $TOOLCHAIN | cut -d '-' -f 1)" | ||
TOOLCHAIN_VERSION="$(echo $TOOLCHAIN | cut -d '-' -f 2)" | ||
|
||
if [ "$TOOLCHAIN_NAME" == "llvm" ]; then | ||
export LLVM="-$TOOLCHAIN_VERSION" | ||
fi | ||
|
||
THISDIR="$(cd $(dirname $0) && pwd)" | ||
|
||
source "${THISDIR}"/helpers.sh | ||
|
||
travis_fold start build_kernel "Building kernel with $TOOLCHAIN" | ||
|
||
cp ${GITHUB_WORKSPACE}/travis-ci/vmtest/configs/config-latest.${ARCH} .config | ||
|
||
make -j $((4*$(nproc))) olddefconfig all > /dev/null | ||
|
||
travis_fold end build_kernel |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#!/bin/bash | ||
|
||
set -euo pipefail | ||
|
||
THISDIR="$(cd $(dirname $0) && pwd)" | ||
|
||
source "${THISDIR}"/helpers.sh | ||
|
||
TOOLCHAIN="$1" | ||
TOOLCHAIN_NAME="$(echo $TOOLCHAIN | cut -d '-' -f 1)" | ||
TOOLCHAIN_VERSION="$(echo $TOOLCHAIN | cut -d '-' -f 2)" | ||
|
||
if [ "$TOOLCHAIN_NAME" == "llvm" ]; then | ||
export LLVM="-$TOOLCHAIN_VERSION" | ||
LLVM_VER=$TOOLCHAIN_VERSION | ||
else | ||
LLVM_VER=15 | ||
fi | ||
|
||
travis_fold start prepare_selftests "Building selftests with $TOOLCHAIN" | ||
|
||
LIBBPF_PATH="${REPO_ROOT}" | ||
|
||
PREPARE_SELFTESTS_SCRIPT=${THISDIR}/prepare_selftests-${KERNEL}.sh | ||
if [ -f "${PREPARE_SELFTESTS_SCRIPT}" ]; then | ||
(cd "${REPO_ROOT}/${REPO_PATH}/tools/testing/selftests/bpf" && ${PREPARE_SELFTESTS_SCRIPT}) | ||
fi | ||
|
||
if [[ "${KERNEL}" = 'LATEST' ]]; then | ||
VMLINUX_H= | ||
else | ||
VMLINUX_H=${THISDIR}/vmlinux.h | ||
fi | ||
|
||
cd ${REPO_ROOT}/${REPO_PATH} | ||
make \ | ||
CLANG=clang-${LLVM_VER} \ | ||
LLC=llc-${LLVM_VER} \ | ||
LLVM_STRIP=llvm-strip-${LLVM_VER} \ | ||
VMLINUX_BTF="${VMLINUX_BTF}" \ | ||
VMLINUX_H="${VMLINUX_H}" \ | ||
-C "${REPO_ROOT}/${REPO_PATH}/tools/testing/selftests/bpf" \ | ||
-j $((4*$(nproc))) > /dev/null | ||
cd - | ||
mkdir "${LIBBPF_PATH}"/selftests | ||
cp -R "${REPO_ROOT}/${REPO_PATH}/tools/testing/selftests/bpf" \ | ||
"${LIBBPF_PATH}"/selftests | ||
cd "${LIBBPF_PATH}" | ||
rm selftests/bpf/.gitignore | ||
git add selftests | ||
|
||
travis_fold end prepare_selftests |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# $1 - start or end | ||
# $2 - fold identifier, no spaces | ||
# $3 - fold section description | ||
travis_fold() { | ||
local YELLOW='\033[1;33m' | ||
local NOCOLOR='\033[0m' | ||
if [ -z ${GITHUB_WORKFLOW+x} ]; then | ||
echo travis_fold:$1:$2 | ||
if [ ! -z "${3:-}" ]; then | ||
echo -e "${YELLOW}$3${NOCOLOR}" | ||
fi | ||
echo | ||
else | ||
if [ $1 = "start" ]; then | ||
line="::group::$2" | ||
if [ ! -z "${3:-}" ]; then | ||
line="$line - ${YELLOW}$3${NOCOLOR}" | ||
fi | ||
else | ||
line="::endgroup::" | ||
fi | ||
echo -e "$line" | ||
fi | ||
} | ||
|
||
__print() { | ||
local TITLE="" | ||
if [[ -n $2 ]]; then | ||
TITLE=" title=$2" | ||
fi | ||
echo "::$1${TITLE}::$3" | ||
} | ||
|
||
# $1 - title | ||
# $2 - message | ||
print_error() { | ||
__print error $1 $2 | ||
} | ||
|
||
# $1 - title | ||
# $2 - message | ||
print_notice() { | ||
__print notice $1 $2 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
name: bpf-ci | ||
|
||
on: | ||
pull_request: | ||
|
||
concurrency: | ||
group: ci-test-${{ github.head_ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
VM_Test: | ||
runs-on: ${{ matrix.runs_on }} | ||
name: Kernel ${{ matrix.kernel }} on ${{ matrix.runs_on }} with ${{ matrix.toolchain }} | ||
timeout-minutes: 100 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: | ||
- kernel: 'LATEST' | ||
runs_on: ubuntu-latest | ||
arch: 'x86_64' | ||
toolchain: 'gcc' | ||
- kernel: 'LATEST' | ||
runs_on: ubuntu-latest | ||
arch: 'x86_64' | ||
toolchain: 'llvm-15' | ||
- kernel: 'LATEST' | ||
runs_on: z15 | ||
arch: 's390x' | ||
toolchain: 'gcc' | ||
env: | ||
AUTHOR_EMAIL: "$(git log -1 --pretty=\"%aE\")" | ||
KERNEL: LATEST | ||
REPO_ROOT: ${{ github.workspace }} | ||
REPO_PATH: "" | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- if: ${{ github.repository != 'kernel-patches/bpf' && github.repository != 'kernel-patches/bpf-rc' }} | ||
name: Download bpf-next tree | ||
uses: libbpf/ci/get-linux-source@master | ||
with: | ||
dest: '.kernel' | ||
- if: ${{ github.repository != 'kernel-patches/bpf' && github.repository != 'kernel-patches/bpf-rc' }} | ||
name: Move linux source in place | ||
shell: bash | ||
run: | | ||
rm -rf .kernel/.git | ||
cp -rf .kernel/. . | ||
rm -rf .kernel | ||
- uses: libbpf/ci/patch-kernel@master | ||
with: | ||
patches-root: '${{ github.workspace }}/travis-ci/diffs' | ||
repo-root: '${{ github.workspace }}' | ||
- uses: ./.github/actions/vmtest | ||
with: | ||
arch: ${{ matrix.arch }} | ||
toolchain: ${{ matrix.toolchain }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +0,0 @@ | ||
Linux kernel | ||
============ | ||
|
||
There are several guides for kernel developers and users. These guides can | ||
be rendered in a number of formats, like HTML and PDF. Please read | ||
Documentation/admin-guide/README.rst first. | ||
|
||
In order to build the documentation, use ``make htmldocs`` or | ||
``make pdfdocs``. The formatted documentation can also be read online at: | ||
|
||
https://www.kernel.org/doc/html/latest/ | ||
|
||
There are various text files in the Documentation/ subdirectory, | ||
several of them using the Restructured Text markup notation. | ||
|
||
Please read the Documentation/process/changes.rst file, as it contains the | ||
requirements for building and running the kernel, and information about | ||
the problems which may result by upgrading your kernel. | ||
89 changes: 89 additions & 0 deletions
89
travis-ci/diffs/0001-selftests-bpf-Limit-unroll_count-for-pyperf600-test.diff
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
From 8c89b5db7a2894e33417dd69680729e8f65f5709 Mon Sep 17 00:00:00 2001 | ||
From: Yonghong Song <yhs@fb.com> | ||
Date: Mon, 18 Apr 2022 21:32:30 -0700 | ||
Subject: [PATCH] selftests/bpf: Limit unroll_count for pyperf600 test | ||
|
||
LLVM commit [1] changed loop pragma behavior such that | ||
full loop unroll is always honored with user pragma. | ||
Previously, unroll count also depends on the unrolled | ||
code size. For pyperf600, without [1], the loop unroll | ||
count is 150. With [1], the loop unroll count is 600. | ||
|
||
The unroll count of 600 caused the program size close to | ||
298k and this caused the following code is generated: | ||
0: 7b 1a 00 ff 00 00 00 00 *(u64 *)(r10 - 256) = r1 | ||
; uint64_t pid_tgid = bpf_get_current_pid_tgid(); | ||
1: 85 00 00 00 0e 00 00 00 call 14 | ||
2: bf 06 00 00 00 00 00 00 r6 = r0 | ||
; pid_t pid = (pid_t)(pid_tgid >> 32); | ||
3: bf 61 00 00 00 00 00 00 r1 = r6 | ||
4: 77 01 00 00 20 00 00 00 r1 >>= 32 | ||
5: 63 1a fc ff 00 00 00 00 *(u32 *)(r10 - 4) = r1 | ||
6: bf a2 00 00 00 00 00 00 r2 = r10 | ||
7: 07 02 00 00 fc ff ff ff r2 += -4 | ||
; PidData* pidData = bpf_map_lookup_elem(&pidmap, &pid); | ||
8: 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 r1 = 0 ll | ||
10: 85 00 00 00 01 00 00 00 call 1 | ||
11: bf 08 00 00 00 00 00 00 r8 = r0 | ||
; if (!pidData) | ||
12: 15 08 15 e8 00 00 00 00 if r8 == 0 goto -6123 <LBB0_27588+0xffffffffffdae100> | ||
|
||
Note that insn 12 has a branch offset -6123 which is clearly illegal | ||
and will be rejected by the verifier. The negative offset is due to | ||
the branch range is greater than INT16_MAX. | ||
|
||
This patch changed the unroll count to be 150 to avoid above | ||
branch target insn out-of-range issue. Also the llvm is enhanced ([2]) | ||
to assert if the branch target insn is out of INT16 range. | ||
|
||
[1] https://reviews.llvm.org/D119148 | ||
[2] https://reviews.llvm.org/D123877 | ||
|
||
Signed-off-by: Yonghong Song <yhs@fb.com> | ||
Signed-off-by: Alexei Starovoitov <ast@kernel.org> | ||
Link: https://lore.kernel.org/bpf/20220419043230.2928530-1-yhs@fb.com | ||
--- | ||
tools/testing/selftests/bpf/progs/pyperf.h | 4 ++++ | ||
tools/testing/selftests/bpf/progs/pyperf600.c | 11 +++++++---- | ||
2 files changed, 11 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/tools/testing/selftests/bpf/progs/pyperf.h b/tools/testing/selftests/bpf/progs/pyperf.h | ||
index 1ed28882daf3..5d3dc4d66d47 100644 | ||
--- a/tools/testing/selftests/bpf/progs/pyperf.h | ||
+++ b/tools/testing/selftests/bpf/progs/pyperf.h | ||
@@ -299,7 +299,11 @@ int __on_event(struct bpf_raw_tracepoint_args *ctx) | ||
#ifdef NO_UNROLL | ||
#pragma clang loop unroll(disable) | ||
#else | ||
+#ifdef UNROLL_COUNT | ||
+#pragma clang loop unroll_count(UNROLL_COUNT) | ||
+#else | ||
#pragma clang loop unroll(full) | ||
+#endif | ||
#endif /* NO_UNROLL */ | ||
/* Unwind python stack */ | ||
for (int i = 0; i < STACK_MAX_LEN; ++i) { | ||
diff --git a/tools/testing/selftests/bpf/progs/pyperf600.c b/tools/testing/selftests/bpf/progs/pyperf600.c | ||
index cb49b89e37cd..ce1aa5189cc4 100644 | ||
--- a/tools/testing/selftests/bpf/progs/pyperf600.c | ||
+++ b/tools/testing/selftests/bpf/progs/pyperf600.c | ||
@@ -1,9 +1,12 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
// Copyright (c) 2019 Facebook | ||
#define STACK_MAX_LEN 600 | ||
-/* clang will not unroll the loop 600 times. | ||
- * Instead it will unroll it to the amount it deemed | ||
- * appropriate, but the loop will still execute 600 times. | ||
- * Total program size is around 90k insns | ||
+/* Full unroll of 600 iterations will have total | ||
+ * program size close to 298k insns and this may | ||
+ * cause BPF_JMP insn out of 16-bit integer range. | ||
+ * So limit the unroll size to 150 so the | ||
+ * total program size is around 80k insns but | ||
+ * the loop will still execute 600 times. | ||
*/ | ||
+#define UNROLL_COUNT 150 | ||
#include "pyperf.h" | ||
-- | ||
2.30.2 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# TEMPORARY | ||
btf_dump/btf_dump: syntax | ||
kprobe_multi_test/bench_attach |
Oops, something went wrong.