Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c8da138
Adding CI files
Apr 24, 2025
2a10f95
objtool: Make validate_call() recognize indirect calls to pv_ops[]
valschneider Apr 29, 2025
7e6370b
objtool: Flesh out warning related to pv_ops[] calls
valschneider Apr 29, 2025
c3f1ac2
rcu: Add a small-width RCU watching counter debug option
valschneider Apr 29, 2025
a93050a
rcutorture: Make TREE04 use CONFIG_RCU_DYNTICKS_TORTURE
valschneider Apr 29, 2025
ec14db4
jump_label: Add annotations for validating noinstr usage
jpoimboe Apr 29, 2025
c937036
static_call: Add read-only-after-init static calls
jpoimboe Apr 29, 2025
4ecc37d
x86/paravirt: Mark pv_sched_clock static call as __ro_after_init
valschneider Apr 29, 2025
9c4e3ea
x86/idle: Mark x86_idle static call as __ro_after_init
valschneider Apr 29, 2025
a464df0
x86/paravirt: Mark pv_steal_clock static call as __ro_after_init
valschneider Apr 29, 2025
ea5405b
riscv/paravirt: Mark pv_steal_clock static call as __ro_after_init
valschneider Apr 29, 2025
fd24356
loongarch/paravirt: Mark pv_steal_clock static call as __ro_after_init
valschneider Apr 29, 2025
1162d06
arm64/paravirt: Mark pv_steal_clock static call as __ro_after_init
valschneider Apr 29, 2025
263d8e8
arm/paravirt: Mark pv_steal_clock static call as __ro_after_init
valschneider Apr 29, 2025
fa932a5
perf/x86/amd: Mark perf_lopwr_cb static call as __ro_after_init
valschneider Apr 29, 2025
997d249
sched/clock: Mark sched_clock_running key as __ro_after_init
valschneider Apr 29, 2025
8efbc54
KVM: VMX: Mark __kvm_is_using_evmcs static key as __ro_after_init
valschneider Apr 29, 2025
c85c1d8
x86/speculation/mds: Mark mds_idle_clear key as allowed in .noinstr
valschneider Apr 29, 2025
1517011
sched/clock, x86: Mark __sched_clock_stable key as allowed in .noinstr
valschneider Apr 29, 2025
f6afa3a
KVM: VMX: Mark vmx_l1d_should flush and vmx_l1d_flush_cond keys as al…
valschneider Apr 29, 2025
219cc05
stackleack: Mark stack_erasing_bypass key as allowed in .noinstr
valschneider Apr 29, 2025
b218275
objtool: Add noinstr validation for static branches/calls
jpoimboe Apr 29, 2025
b835fa3
module: Remove outdated comment about text_size
valschneider Apr 29, 2025
91a3d11
module: Add MOD_NOINSTR_TEXT mem_type
valschneider Apr 29, 2025
901b94e
context-tracking: Introduce work deferral infrastructure
valschneider Apr 29, 2025
b92d56b
context_tracking,x86: Defer kernel text patching IPIs
valschneider Apr 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/scripts/build_ubuntu_defconfig.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash
# SPDX-FileCopyrightText: 2024 Rivos Inc.
#
# SPDX-License-Identifier: Apache-2.0

set -euox pipefail
d=$(dirname "${BASH_SOURCE[0]}")
. $d/series/utils.sh

logs=$(get_logs_dir)
f=${logs}/build_ubuntu_defconfig.log

date -Iseconds | tee -a ${f}
echo "Build an ubuntu kernel" | tee -a ${f}
echo "Top 16 commits" | tee -a ${f}
git log -16 --abbrev=12 --pretty="commit %h (\"%s\")" | tee -a ${f}

kernel_base_sha=$(git log -1 --pretty=%H $(git log -1 --reverse --pretty=%H .github)^)
echo "build_name $(git describe --tags ${kernel_base_sha})" | tee -a ${f}
build_name=$(git describe --tags ${kernel_base_sha})

# Build the kernel that will run LTP
export CI_TRIPLE="riscv64-linux-gnu"
cp $d/series/kconfigs/ubuntu_defconfig arch/riscv/configs/
$d/series/kernel_builder.sh rv64 testsuites plain gcc | tee -a ${f}

kernel_dir="/build/$(gen_kernel_name rv64 testsuites plain gcc)"
echo $build_name > $kernel_dir/kernel_version
#tar cJvf --exclude $(basename $kernel_path) modules.tar.xz /build/$(gen_kernel_name rv64 testsuites plain gcc)/
2 changes: 2 additions & 0 deletions .github/scripts/ci/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from .base import Base, EndTest, Verdict, submit_pw_check
from .shelltest import ShellTest
120 changes: 120 additions & 0 deletions .github/scripts/ci/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
from abc import ABC, abstractmethod
from enum import Enum
import time
import sys

from libs import utils

sys.path.insert(0, '../libs')
from libs import log_debug

class Verdict(Enum):
PENDING = 0
PASS = 1
FAIL = 2
ERROR = 3
SKIP = 4
WARNING = 5


class EndTest(Exception):
"""
End of Test
"""

class Base(ABC):
"""
Base class for CI Tests.
"""
def __init__(self):
self.start_time = 0
self.end_time = 0
self.verdict = Verdict.PENDING
self.output = ""

def success(self):
self.end_timer()
self.verdict = Verdict.PASS

def error(self, msg):
self.verdict = Verdict.ERROR
self.output = msg
self.end_timer()
raise EndTest

def warning(self, msg):
self.verdict = Verdict.WARNING
self.output = msg
self.end_timer()

def skip(self, msg):
self.verdict = Verdict.SKIP
self.output = msg
self.end_timer()
raise EndTest

def add_failure(self, msg):
self.verdict = Verdict.FAIL
if not self.output:
self.output = msg
else:
self.output += "\n" + msg

def add_failure_end_test(self, msg):
self.add_failure(msg)
self.end_timer()
raise EndTest

def start_timer(self):
self.start_time = time.time()

def end_timer(self):
self.end_time = time.time()

def elapsed(self):
if self.start_time == 0:
return 0
if self.end_time == 0:
self.end_timer()
return self.end_time - self.start_time

def log_err(self, msg):
utils.log_error(f"CI: {self.name}: {msg}")

def log_info(self, msg):
utils.log_info(f"CI: {self.name}: {msg}")

def log_dbg(self, msg):
utils.log_debug(f"CI: {self.name}: {msg}")

@abstractmethod
def run(self, worktree=None):
"""
The child class should implement run() method
If the test fail, it should raise the EndTest exception
"""
pass

@abstractmethod
def post_run(self):
"""
The child class should implement post_run() method
"""
pass


def submit_pw_check(pw, patch, name, verdict, desc, url=None, dry_run=False):

utils.log_debug(f"Submitting the result to PW: dry_run={dry_run}")

if not dry_run:
state = 0

if verdict == Verdict.PASS:
state = 1
if verdict == Verdict.WARNING:
state = 2
if verdict == Verdict.FAIL:
state = 3

pw.post_check(patch, name, state, desc, url)
67 changes: 67 additions & 0 deletions .github/scripts/ci/shelltest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
from gettext import install
import os
import sys

sys.path.insert(0, '../libs')
from libs import RepoTool, cmd_run

from ci import Base, Verdict, EndTest, submit_pw_check

class ShellTest(Base):
"""Run shell test class
This class runs a shell based test
"""

def __init__(self, ci_data, patch, name, desc, sh):

# Common
self.name = name
self.desc = desc
self.ci_data = ci_data

self.sh = sh
self.patch = patch

super().__init__()

self.log_dbg("Initialization completed")

def run(self, worktree=None):

self.log_dbg("Run")
self.start_timer()

current_script_path = os.path.dirname(os.path.abspath(__file__))

cwd = worktree if worktree else self.ci_data.src_dir
cmd = ["bash", f"{current_script_path}/../pw_tests/{self.sh}"]
(ret, stdout, stderr) = cmd_run(cmd, cwd=cwd)

if ret == 0:
submit_pw_check(self.ci_data.pw, self.patch,
self.name, Verdict.PASS,
self.name,
None, self.ci_data.config['dry_run'])
self.success()
elif ret == 250:
url = self.ci_data.gh.create_gist(f"pw{self.ci_data.series['id']}-p{self.patch['id']}",
f"{self.name}-WARNING",
stdout + '\n' + stderr)
submit_pw_check(self.ci_data.pw, self.patch,
self.name, Verdict.WARNING,
self.name,
url, self.ci_data.config['dry_run'])
self.warning(stdout + '\n' + stderr)
else:
url = self.ci_data.gh.create_gist(f"pw{self.ci_data.series['id']}-p{self.patch['id']}",
f"{self.name}-FAIL",
stdout + '\n' + stderr)
submit_pw_check(self.ci_data.pw, self.patch,
self.name, Verdict.FAIL,
self.name,
url, self.ci_data.config['dry_run'])
self.error(stdout + '\n' + stderr)

def post_run(self):

self.log_dbg("Post Run...")
Loading
Loading