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 fa2f008d18 cpu: advertise AVX10 version
Add new cpuid label "feature.node.kubernetes.io/cpu-cpuid.AVX10_VERSION"
that advertises the supported version of AVX10 vector ISA.
Correspondingly, the patch adds AVX10_VERSION to the "cpu.cpuid" feature
for NodeFeatureRules to consume.

This makes cpu.cpuid on amd64 architecture a "multi-type" feature in
that it contains "flags" and potentially also "attributes" (the only
cpuid attribute so far is the AVX10_VERSION).
2024-05-24 13:48:20 +03:00

99 lines
2.7 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
}
func getCpuidAttributes() map[string]string { return nil }