Signed-off-by: Alexandre Derumier <aderum...@odiso.com>
---
 src/PVE/ProcFSTools.pm | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/src/PVE/ProcFSTools.pm b/src/PVE/ProcFSTools.pm
index 3826fcc..f491452 100644
--- a/src/PVE/ProcFSTools.pm
+++ b/src/PVE/ProcFSTools.pm
@@ -21,12 +21,15 @@ my $clock_ticks = POSIX::sysconf(&POSIX::_SC_CLK_TCK);
 my $cpuinfo;
 
 sub read_cpuinfo {
+    my ($msr) = @_;
+
     my $fn = '/proc/cpuinfo';
 
     return $cpuinfo if $cpuinfo;
 
     my $res = {
        user_hz => $clock_ticks,
+       vendor => 'unknown',
        model => 'unknown',
        mhz => 0,
        cpus => 1,
@@ -45,6 +48,8 @@ sub read_cpuinfo {
            $count++;
        } elsif ($line =~ m/^model\s+name\s*:\s*(.*)\s*$/i) {
            $res->{model} = $1 if $res->{model} eq 'unknown';
+       } elsif ($line =~ m/^vendor_id\s*:\s*(.*)\s*$/i) {
+           $res->{vendor} = $1 if $res->{vendor} eq 'unknown';
        } elsif ($line =~ m/^cpu\s+MHz\s*:\s*(\d+\.\d+)\s*$/i) {
            $res->{mhz} = $1 if !$res->{mhz};
        } elsif ($line =~ m/^flags\s*:\s*(.*)$/) {
@@ -70,9 +75,45 @@ sub read_cpuinfo {
 
     $cpuinfo = $res;
 
+    return $res if !$msr;
+
+    if ($cpuinfo->{vendor} eq 'GenuineIntel') {
+       $res->{msr} = read_cpu_intel_msr();
+    }
+
     return $res;
 }
 
+sub read_msr {
+    my ($fh, $offset) = @_;
+
+    my $value = undef;
+    seek $fh, $offset,0;
+    read $fh, $value, 8;
+    return unpack("Q", $value) if $value;
+}
+
+sub read_cpu_intel_msr {
+    my $msr = {};
+    my $spectr_msr = undef;
+    my $capabilities_msr = undef;
+    my $fn = '/dev/cpu/0/msr';
+
+    if (!-d $fn) {
+       eval {
+           system("/sbin/modprobe msr >/dev/null 2>/dev/null");
+       };
+    }
+    return if !$fn;
+
+    my $fh = IO::File->new ($fn, "r");
+    return if !$fh;
+    $msr->{'spec-ctrl'} = read_msr($fh, 0x48);
+    $msr->{'arch-capabilities'} = read_msr($fh, 0x10a);
+    close $fh;
+    return $msr;
+}
+
 sub read_proc_uptime {
     my $ticks = shift;
 
-- 
2.30.2


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to