Skip to content

Commit ff3bfd4

Browse files
committed
feat: add support to differentiate specific hypervisors on s390x
Signed-off-by: Ching Han Chen <[email protected]>
1 parent 216fca7 commit ff3bfd4

6 files changed

+42
-1
lines changed

source/cpu/cpuid_amd64.go

+2
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,5 @@ func getCpuidAttributes() map[string]string {
3636

3737
return ret
3838
}
39+
40+
func getHypervisor() string { return "" }

source/cpu/cpuid_linux_arm.go

+2
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,5 @@ func getCpuidFlags() []string {
121121
}
122122

123123
func getCpuidAttributes() map[string]string { return nil }
124+
125+
func getHypervisor() string { return "" }

source/cpu/cpuid_linux_arm64.go

+2
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,5 @@ func getCpuidFlags() []string {
201201
}
202202

203203
func getCpuidAttributes() map[string]string { return nil }
204+
205+
func getHypervisor() string { return "" }

source/cpu/cpuid_linux_ppc64le.go

+2
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,5 @@ func getCpuidFlags() []string {
155155
}
156156

157157
func getCpuidAttributes() map[string]string { return nil }
158+
159+
func getHypervisor() string { return "" }

source/cpu/cpuid_linux_s390x.go

+32-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ unsigned long gethwcap() {
2424
}
2525
*/
2626
import "C"
27+
import (
28+
"os"
29+
"strings"
30+
31+
"k8s.io/klog/v2"
32+
)
2733

2834
/*
2935
all special features for s390x should be defined here; canonical list:
@@ -96,4 +102,29 @@ func getCpuidFlags() []string {
96102
return r
97103
}
98104

99-
func getCpuidAttributes() map[string]string { return nil }
105+
func getCpuidAttributes() map[string]string {
106+
ret := make(map[string]string)
107+
ret["hypervisor"] = getHypervisor()
108+
109+
return ret
110+
}
111+
112+
func getHypervisor() string {
113+
data, err := os.ReadFile("/proc/sysinfo")
114+
if err != nil {
115+
klog.ErrorS(err, "failed to read /proc/sysinfo")
116+
return ""
117+
}
118+
119+
for _, line := range strings.Split(string(data), "\n") {
120+
if strings.Contains(line, "Control Program:") {
121+
parts := strings.SplitN(line, ":", 2)
122+
if len(parts) == 2 {
123+
return strings.TrimSpace(parts[1])
124+
}
125+
}
126+
}
127+
128+
// if Control Program not found, we determine that the node is PR/SM(LPAR)
129+
return "PR/SM"
130+
}

source/cpu/cpuid_stub.go

+2
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ package cpu
2222
func getCpuidFlags() []string { return nil }
2323

2424
func getCpuidAttributes() map[string]string { return nil }
25+
26+
func getHypervisor() string { return "" }

0 commit comments

Comments
 (0)