numam-spdk/test/scheduler/rdmsr.pl

35 lines
678 B
Perl
Raw Normal View History

#!/usr/bin/env perl
use strict;
use warnings;
use constant SEEK_CUR => 1;
( @ARGV == 2 ) || exit(1);
my $cpu_path = sprintf( "/dev/cpu/%u/msr", shift() );
my $msr = hex( shift() );
my $reg_size = 8;
my ( @msr, $msr_buf, $reg );
unless ( -e $cpu_path ) {
printf STDERR "$cpu_path doesn't exist\n";
exit(1);
}
open( MSR, "<", $cpu_path );
sysseek( MSR, $msr, SEEK_CUR );
sysread( MSR, $msr_buf, $reg_size );
@msr = unpack( "C*", $msr_buf );
unless ( @msr == $reg_size ) {
printf STDERR "Failed to read $cpu_path\n";
exit(1);
}
for ( my $byte = @msr - 1 ; $byte >= 0 ; $byte-- ) {
$reg |= $msr[$byte] << ( $byte * 8 );
}
printf( "0x%x\n", $reg );