xref: /spdk/test/scheduler/rdmsr.pl (revision 588dfe314bb83d86effdf67ec42837b11c2620bf)
173884e62SMichal Berger#!/usr/bin/env perl
2*588dfe31SMichal Berger#  SPDX-License-Identifier: BSD-3-Clause
3*588dfe31SMichal Berger#  Copyright (C) 2020 Intel Corporation.
4*588dfe31SMichal Berger#  All rights reserved.
5*588dfe31SMichal Berger
673884e62SMichal Berger
773884e62SMichal Bergeruse strict;
873884e62SMichal Bergeruse warnings;
973884e62SMichal Berger
1073884e62SMichal Bergeruse constant SEEK_CUR => 1;
1173884e62SMichal Berger
1273884e62SMichal Berger( @ARGV == 2 ) || exit(1);
1373884e62SMichal Berger
1473884e62SMichal Bergermy $cpu_path = sprintf( "/dev/cpu/%u/msr", shift() );
1573884e62SMichal Bergermy $msr      = hex( shift() );
1673884e62SMichal Bergermy $reg_size = 8;
1773884e62SMichal Bergermy ( @msr, $msr_buf, $reg );
1873884e62SMichal Berger
1973884e62SMichal Bergerunless ( -e $cpu_path ) {
2073884e62SMichal Berger    printf STDERR "$cpu_path doesn't exist\n";
2173884e62SMichal Berger    exit(1);
2273884e62SMichal Berger}
2373884e62SMichal Berger
2473884e62SMichal Bergeropen( MSR, "<", $cpu_path );
2573884e62SMichal Bergersysseek( MSR, $msr, SEEK_CUR );
2673884e62SMichal Bergersysread( MSR, $msr_buf, $reg_size );
2773884e62SMichal Berger@msr = unpack( "C*", $msr_buf );
2873884e62SMichal Berger
2973884e62SMichal Bergerunless ( @msr == $reg_size ) {
3073884e62SMichal Berger    printf STDERR "Failed to read $cpu_path\n";
3173884e62SMichal Berger    exit(1);
3273884e62SMichal Berger}
3373884e62SMichal Berger
3473884e62SMichal Bergerfor ( my $byte = @msr - 1 ; $byte >= 0 ; $byte-- ) {
3573884e62SMichal Berger    $reg |= $msr[$byte] << ( $byte * 8 );
3673884e62SMichal Berger}
3773884e62SMichal Berger
3873884e62SMichal Bergerprintf( "0x%x\n", $reg );
39