1
0
mirror of https://github.com/golang/go synced 2024-11-23 18:20:04 -07:00

internal/cpu: report CPU if known on PPC64

The PPC64 maintainers are testing on P10 hardware, so it is helpful
to report the correct cpu, even if this information is not used
elsewhere yet.

Note, AIX will report the current CPU of the host system, so a
POWER10 will not set the IsPOWER9 flag. This is existing behavior,
and should be fixed in a separate patch.

Change-Id: Iebe23dd96ebe03c8a1c70d1ed2dc1506bad3c330
Reviewed-on: https://go-review.googlesource.com/c/go/+/404394
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Paul Murphy <murp@ibm.com>
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Heschi Kreinick <heschi@google.com>
This commit is contained in:
Paul E. Murphy 2022-05-05 10:27:24 -05:00 committed by Paul Murphy
parent 0c43878baa
commit 51859ec229
5 changed files with 28 additions and 9 deletions

View File

@ -81,12 +81,13 @@ var MIPS64X struct {
// those as well. The minimum processor requirement is POWER8 (ISA 2.07).
// The struct is padded to avoid false sharing.
var PPC64 struct {
_ CacheLinePad
HasDARN bool // Hardware random number generator (requires kernel enablement)
HasSCV bool // Syscall vectored (requires kernel enablement)
IsPOWER8 bool // ISA v2.07 (POWER8)
IsPOWER9 bool // ISA v3.00 (POWER9)
_ CacheLinePad
_ CacheLinePad
HasDARN bool // Hardware random number generator (requires kernel enablement)
HasSCV bool // Syscall vectored (requires kernel enablement)
IsPOWER8 bool // ISA v2.07 (POWER8)
IsPOWER9 bool // ISA v3.00 (POWER9)
IsPOWER10 bool // ISA v3.1 (POWER10)
_ CacheLinePad
}
var S390X struct {

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build !386 && !amd64
//go:build !386 && !amd64 && !ppc64 && !ppc64le
package cpu

View File

@ -21,3 +21,15 @@ func doinit() {
func isSet(hwc uint, value uint) bool {
return hwc&value != 0
}
func Name() string {
switch {
case PPC64.IsPOWER10:
return "POWER10"
case PPC64.IsPOWER9:
return "POWER9"
case PPC64.IsPOWER8:
return "POWER8"
}
return ""
}

View File

@ -8,13 +8,17 @@ package cpu
const (
// getsystemcfg constants
_SC_IMPL = 2
_IMPL_POWER9 = 0x20000
_SC_IMPL = 2
_IMPL_POWER8 = 0x10000
_IMPL_POWER9 = 0x20000
_IMPL_POWER10 = 0x40000
)
func osinit() {
impl := getsystemcfg(_SC_IMPL)
PPC64.IsPOWER8 = isSet(impl, _IMPL_POWER8)
PPC64.IsPOWER9 = isSet(impl, _IMPL_POWER9)
PPC64.IsPOWER10 = isSet(impl, _IMPL_POWER10)
}
// getsystemcfg is defined in runtime/os2_aix.go

View File

@ -17,6 +17,7 @@ const (
// ISA Level
hwcap2_ARCH_2_07 = 0x80000000
hwcap2_ARCH_3_00 = 0x00800000
hwcap2_ARCH_3_1 = 0x00040000
// CPU features
hwcap2_DARN = 0x00200000
@ -26,6 +27,7 @@ const (
func osinit() {
PPC64.IsPOWER8 = isSet(HWCap2, hwcap2_ARCH_2_07)
PPC64.IsPOWER9 = isSet(HWCap2, hwcap2_ARCH_3_00)
PPC64.IsPOWER10 = isSet(HWCap2, hwcap2_ARCH_3_1)
PPC64.HasDARN = isSet(HWCap2, hwcap2_DARN)
PPC64.HasSCV = isSet(HWCap2, hwcap2_SCV)
}