aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFeoramund <161657516+Feoramund@users.noreply.github.com>2024-09-11 07:07:09 -0400
committerFeoramund <161657516+Feoramund@users.noreply.github.com>2024-09-11 08:39:23 -0400
commit2938655a3d8801d1327b0076812edcf357d760df (patch)
tree24c2da9b7cea5892d59fd7d030548954c33f0605
parentb1db33b519bf52e2d0e6e42ca9daccc7470d6b8b (diff)
Fix CPU count detection in FreeBSD & NetBSD
-rw-r--r--core/os/os_freebsd.odin2
-rw-r--r--core/os/os_netbsd.odin2
-rw-r--r--src/gb/gb.h12
3 files changed, 12 insertions, 4 deletions
diff --git a/core/os/os_freebsd.odin b/core/os/os_freebsd.odin
index c05a06129..241f42c0b 100644
--- a/core/os/os_freebsd.odin
+++ b/core/os/os_freebsd.odin
@@ -920,7 +920,7 @@ get_page_size :: proc() -> int {
_processor_core_count :: proc() -> int {
count : int = 0
count_size := size_of(count)
- if _sysctlbyname("hw.logicalcpu", &count, &count_size, nil, 0) == 0 {
+ if _sysctlbyname("hw.ncpu", &count, &count_size, nil, 0) == 0 {
if count > 0 {
return count
}
diff --git a/core/os/os_netbsd.odin b/core/os/os_netbsd.odin
index a56c0b784..ba9b40fc3 100644
--- a/core/os/os_netbsd.odin
+++ b/core/os/os_netbsd.odin
@@ -978,7 +978,7 @@ get_page_size :: proc() -> int {
_processor_core_count :: proc() -> int {
count : int = 0
count_size := size_of(count)
- if _sysctlbyname("hw.logicalcpu", &count, &count_size, nil, 0) == 0 {
+ if _sysctlbyname("hw.ncpu", &count, &count_size, nil, 0) == 0 {
if count > 0 {
return count
}
diff --git a/src/gb/gb.h b/src/gb/gb.h
index 0e65696e2..1fef4b4f5 100644
--- a/src/gb/gb.h
+++ b/src/gb/gb.h
@@ -3195,11 +3195,11 @@ void gb_affinity_init(gbAffinity *a) {
a->core_count = 1;
a->threads_per_core = 1;
- if (sysctlbyname("hw.logicalcpu", &count, &count_size, NULL, 0) == 0) {
+ if (sysctlbyname("kern.smp.cpus", &count, &count_size, NULL, 0) == 0) {
if (count > 0) {
a->thread_count = count;
// Get # of physical cores
- if (sysctlbyname("hw.physicalcpu", &count, &count_size, NULL, 0) == 0) {
+ if (sysctlbyname("kern.smp.cores", &count, &count_size, NULL, 0) == 0) {
if (count > 0) {
a->core_count = count;
a->threads_per_core = a->thread_count / count;
@@ -3210,6 +3210,14 @@ void gb_affinity_init(gbAffinity *a) {
}
}
}
+ } else if (sysctlbyname("hw.ncpu", &count, &count_size, NULL, 0) == 0) {
+ // SMP disabled or unavailable.
+ if (count > 0) {
+ a->is_accurate = true;
+ a->thread_count = count;
+ a->core_count = count;
+ a->threads_per_core = 1;
+ }
}
}