cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

phc.sh (2374B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0
      3
      4ALL_TESTS="
      5	settime
      6	adjtime
      7	adjfreq
      8"
      9DEV=$1
     10
     11##############################################################################
     12# Sanity checks
     13
     14if [[ "$(id -u)" -ne 0 ]]; then
     15	echo "SKIP: need root privileges"
     16	exit 0
     17fi
     18
     19if [[ "$DEV" == "" ]]; then
     20	echo "SKIP: PTP device not provided"
     21	exit 0
     22fi
     23
     24require_command()
     25{
     26	local cmd=$1; shift
     27
     28	if [[ ! -x "$(command -v "$cmd")" ]]; then
     29		echo "SKIP: $cmd not installed"
     30		exit 1
     31	fi
     32}
     33
     34phc_sanity()
     35{
     36	phc_ctl $DEV get &> /dev/null
     37
     38	if [ $? != 0 ]; then
     39		echo "SKIP: unknown clock $DEV: No such device"
     40		exit 1
     41	fi
     42}
     43
     44require_command phc_ctl
     45phc_sanity
     46
     47##############################################################################
     48# Helpers
     49
     50# Exit status to return at the end. Set in case one of the tests fails.
     51EXIT_STATUS=0
     52# Per-test return value. Clear at the beginning of each test.
     53RET=0
     54
     55check_err()
     56{
     57	local err=$1
     58
     59	if [[ $RET -eq 0 && $err -ne 0 ]]; then
     60		RET=$err
     61	fi
     62}
     63
     64log_test()
     65{
     66	local test_name=$1
     67
     68	if [[ $RET -ne 0 ]]; then
     69		EXIT_STATUS=1
     70		printf "TEST: %-60s  [FAIL]\n" "$test_name"
     71		return 1
     72	fi
     73
     74	printf "TEST: %-60s  [ OK ]\n" "$test_name"
     75	return 0
     76}
     77
     78tests_run()
     79{
     80	local current_test
     81
     82	for current_test in ${TESTS:-$ALL_TESTS}; do
     83		$current_test
     84	done
     85}
     86
     87##############################################################################
     88# Tests
     89
     90settime_do()
     91{
     92	local res
     93
     94	res=$(phc_ctl $DEV set 0 wait 120.5 get 2> /dev/null \
     95		| awk '/clock time is/{print $5}' \
     96		| awk -F. '{print $1}')
     97
     98	(( res == 120 ))
     99}
    100
    101adjtime_do()
    102{
    103	local res
    104
    105	res=$(phc_ctl $DEV set 0 adj 10 get 2> /dev/null \
    106		| awk '/clock time is/{print $5}' \
    107		| awk -F. '{print $1}')
    108
    109	(( res == 10 ))
    110}
    111
    112adjfreq_do()
    113{
    114	local res
    115
    116	# Set the clock to be 1% faster
    117	res=$(phc_ctl $DEV freq 10000000 set 0 wait 100.5 get 2> /dev/null \
    118		| awk '/clock time is/{print $5}' \
    119		| awk -F. '{print $1}')
    120
    121	(( res == 101 ))
    122}
    123
    124##############################################################################
    125
    126cleanup()
    127{
    128	phc_ctl $DEV freq 0.0 &> /dev/null
    129	phc_ctl $DEV set &> /dev/null
    130}
    131
    132settime()
    133{
    134	RET=0
    135
    136	settime_do
    137	check_err $?
    138	log_test "settime"
    139	cleanup
    140}
    141
    142adjtime()
    143{
    144	RET=0
    145
    146	adjtime_do
    147	check_err $?
    148	log_test "adjtime"
    149	cleanup
    150}
    151
    152adjfreq()
    153{
    154	RET=0
    155
    156	adjfreq_do
    157	check_err $?
    158	log_test "adjfreq"
    159	cleanup
    160}
    161
    162trap cleanup EXIT
    163
    164tests_run
    165
    166exit $EXIT_STATUS