From b29e14eca719e5bea9f6b2d6ca9a63bf69528b8e Mon Sep 17 00:00:00 2001
From: Erik Kundiman <erik@megapahit.org>
Date: Tue, 26 Dec 2023 12:11:15 +0800
Subject: An alternative in getting CPU freq on M-series

This solution was retrieved from
https://listman.redhat.com/archives/libvir-list/2022-February/228217.html
sysctl hw.cpufrequency would result as empty on Apple Silicon (at least) M1,
when run natively. Ironically (and that's why it's been working with viewers
relying on Rosetta 2), arch -x86_64 /bin/bash -c 'sysctl hw.cpufrequency'
run on an Apple Silicon would result in the correct number.
---
 indra/llcommon/llprocessor.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp
index cf97e7d7da..da49c31558 100644
--- a/indra/llcommon/llprocessor.cpp
+++ b/indra/llcommon/llprocessor.cpp
@@ -637,7 +637,16 @@ public:
 	LLProcessorInfoDarwinImpl() 
 	{
 		getCPUIDInfo();
+#ifdef __arm64__
+		auto frequency = getSysctlInt64("hw.tbfrequency");
+		struct clockinfo clockrate;
+		auto clockrate_len = sizeof(clockrate);
+		if (!sysctlbyname("kern.clockrate", &clockrate, &clockrate_len,
+					NULL, 0))
+			frequency *= clockrate.hz;
+#else
 		uint64_t frequency = getSysctlInt64("hw.cpufrequency");
+#endif
 		setInfo(eFrequency, (F64)frequency  / (F64)1000000);
 	}
 
-- 
cgit v1.2.3