1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2024-12-14 11:57:51 +00:00
node-feature-discovery/source/cpu/cpuid_linux_s390x.go
Markus Lehtonen 52fcf0b0e9 source/cpu: fix build flags of cpuid detection
Non-x86_64 platforms are virtually only buildable on Linux because the
getauxval() glibc function is missing on many platforms.
2023-02-17 21:46:05 +02:00

97 lines
2.6 KiB
Go

/*
Copyright 2019 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cpu
/*
#include <sys/auxv.h>
unsigned long gethwcap() {
return getauxval(AT_HWCAP);
}
*/
import "C"
/*
all special features for s390x should be defined here; canonical list:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/s390/include/asm/elf.h
http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/s390/bits/hwcap.h;hb=HEAD
*/
const (
/* AT_HWCAP features */
HWCAP_S390_ESAN3 = 1
HWCAP_S390_ZARCH = 2
HWCAP_S390_STFLE = 4
HWCAP_S390_MSA = 8
HWCAP_S390_LDISP = 16
HWCAP_S390_EIMM = 32
HWCAP_S390_DFP = 64
HWCAP_S390_HPAGE = 128
HWCAP_S390_ETF3EH = 256
HWCAP_S390_HIGH_GPRS = 512
HWCAP_S390_TE = 1024
HWCAP_S390_VX = 2048
HWCAP_S390_VXD = 4096
HWCAP_S390_VXE = 8192
HWCAP_S390_GS = 16384
HWCAP_S390_VXRS_EXT2 = 32768
HWCAP_S390_VXRS_PDE = 65536
HWCAP_S390_SORT = 131072
HWCAP_S390_DFLT = 262144
HWCAP_S390_VXRS_PDE2 = 524288
HWCAP_S390_NNPA = 1048576
HWCAP_S390_PCI_MIO = 2097152
HWCAP_S390_SIE = 4194304
)
var flagNames_s390x = map[uint64]string{
HWCAP_S390_ESAN3: "ESAN3",
HWCAP_S390_ZARCH: "ZARCH",
HWCAP_S390_STFLE: "STFLE",
HWCAP_S390_MSA: "MSA",
HWCAP_S390_LDISP: "LDISP",
HWCAP_S390_EIMM: "EIMM",
HWCAP_S390_DFP: "DFP",
HWCAP_S390_HPAGE: "EDAT",
HWCAP_S390_ETF3EH: "ETF3EH",
HWCAP_S390_HIGH_GPRS: "HIGHGPRS",
HWCAP_S390_TE: "TE",
HWCAP_S390_VX: "VX",
HWCAP_S390_VXD: "VXD",
HWCAP_S390_VXE: "VXE",
HWCAP_S390_GS: "GS",
HWCAP_S390_VXRS_EXT2: "VXE2",
HWCAP_S390_VXRS_PDE: "VXP",
HWCAP_S390_SORT: "SORT",
HWCAP_S390_DFLT: "DFLT",
HWCAP_S390_VXRS_PDE2: "VXP2",
HWCAP_S390_NNPA: "NNPA",
HWCAP_S390_PCI_MIO: "PCIMIO",
HWCAP_S390_SIE: "SIE",
}
func getCpuidFlags() []string {
r := make([]string, 0, 20)
hwcap := uint64(C.gethwcap())
for i := uint(0); i < 64; i++ {
key := uint64(1 << i)
val, ok := flagNames_s390x[key]
if hwcap&key != 0 && ok {
r = append(r, val)
}
}
return r
}