mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2025-03-05 08:17:04 +00:00
cpu: fix 32-bit ARMv8 CPU flags
32-bit ARMv8 Crypto Extensions are exposed through AT_HWCAP2. IDIV is not an individual flag, but indicates both IDIVA and IDIVT are present.
This commit is contained in:
parent
d8890a6ffe
commit
223205595b
1 changed files with 27 additions and 13 deletions
|
@ -18,11 +18,13 @@ package cpu
|
|||
|
||||
/*
|
||||
#include <sys/auxv.h>
|
||||
#define HWCAP_CPUID (1 << 11)
|
||||
|
||||
unsigned long gethwcap() {
|
||||
return getauxval(AT_HWCAP);
|
||||
}
|
||||
unsigned long gethwcap2() {
|
||||
return getauxval(AT_HWCAP2);
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
|
||||
|
@ -51,15 +53,17 @@ const (
|
|||
CPU_ARM_FEATURE_VFPv4
|
||||
CPU_ARM_FEATURE_IDIVA
|
||||
CPU_ARM_FEATURE_IDIVT
|
||||
CPU_ARM_FEATURE_IDIV
|
||||
CPU_ARM_FEATURE_VFPD32
|
||||
CPU_ARM_FEATURE_LPAE
|
||||
CPU_ARM_FEATURE_EVTSTRM
|
||||
CPU_ARM_FEATURE_AES
|
||||
CPU_ARM_FEATURE_PMULL
|
||||
CPU_ARM_FEATURE_SHA1
|
||||
CPU_ARM_FEATURE_SHA2
|
||||
CPU_ARM_FEATURE_CRC32
|
||||
)
|
||||
|
||||
const (
|
||||
CPU_ARM_FEATURE2_AES = 1 << iota
|
||||
CPU_ARM_FEATURE2_PMULL
|
||||
CPU_ARM_FEATURE2_SHA1
|
||||
CPU_ARM_FEATURE2_SHA2
|
||||
CPU_ARM_FEATURE2_CRC32
|
||||
)
|
||||
|
||||
var flagNames_arm = map[uint64]string{
|
||||
|
@ -82,20 +86,23 @@ var flagNames_arm = map[uint64]string{
|
|||
CPU_ARM_FEATURE_VFPv4: "VFPv4",
|
||||
CPU_ARM_FEATURE_IDIVA: "IDIVA",
|
||||
CPU_ARM_FEATURE_IDIVT: "IDIVT",
|
||||
CPU_ARM_FEATURE_IDIV: "IDIV",
|
||||
CPU_ARM_FEATURE_VFPD32: "VFPD32",
|
||||
CPU_ARM_FEATURE_LPAE: "LPAE",
|
||||
CPU_ARM_FEATURE_EVTSTRM: "EVTSTRM",
|
||||
CPU_ARM_FEATURE_AES: "AES",
|
||||
CPU_ARM_FEATURE_PMULL: "PMULL",
|
||||
CPU_ARM_FEATURE_SHA1: "SHA1",
|
||||
CPU_ARM_FEATURE_SHA2: "SHA2",
|
||||
CPU_ARM_FEATURE_CRC32: "CRC32",
|
||||
}
|
||||
|
||||
var flag2Names_arm = map[uint64]string{
|
||||
CPU_ARM_FEATURE2_AES: "AES",
|
||||
CPU_ARM_FEATURE2_PMULL: "PMULL",
|
||||
CPU_ARM_FEATURE2_SHA1: "SHA1",
|
||||
CPU_ARM_FEATURE2_SHA2: "SHA2",
|
||||
CPU_ARM_FEATURE2_CRC32: "CRC32",
|
||||
}
|
||||
|
||||
func getCpuidFlags() []string {
|
||||
r := make([]string, 0, 20)
|
||||
hwcap := uint64(C.gethwcap())
|
||||
hwcap2 := uint64(C.gethwcap2())
|
||||
for i := uint(0); i < 64; i++ {
|
||||
key := uint64(1 << i)
|
||||
val, ok := flagNames_arm[key]
|
||||
|
@ -103,5 +110,12 @@ func getCpuidFlags() []string {
|
|||
r = append(r, val)
|
||||
}
|
||||
}
|
||||
for i := uint(0); i < 64; i++ {
|
||||
key := uint64(1 << i)
|
||||
val, ok := flag2Names_arm[key]
|
||||
if hwcap2&key != 0 && ok {
|
||||
r = append(r, val)
|
||||
}
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue