summaryrefslogtreecommitdiffstats
path: root/solaris
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2021-06-12 18:17:28 +0200
committerBenny Baumann <BenBE@geshi.org>2021-07-18 07:44:02 +0200
commit41af31be7ffbd34518b27aad56a4f54af6a8adf3 (patch)
tree6e86813a332e93f7ee22b873d7522fa766b4af97 /solaris
parentc9abd788b17ab28424961310b7e224498510780c (diff)
Rework CPU counting
Currently htop does not support offline CPUs and hot-swapping, e.g. via echo 0 > /sys/devices/system/cpu/cpu2/online Split the current single cpuCount variable into activeCPUs and existingCPUs. Supersedes: #650 Related: #580
Diffstat (limited to 'solaris')
-rw-r--r--solaris/Platform.c2
-rw-r--r--solaris/SolarisProcessList.c14
2 files changed, 10 insertions, 6 deletions
diff --git a/solaris/Platform.c b/solaris/Platform.c
index da39a33d..30d10d8f 100644
--- a/solaris/Platform.c
+++ b/solaris/Platform.c
@@ -184,7 +184,7 @@ int Platform_getMaxPid() {
double Platform_setCPUValues(Meter* this, unsigned int cpu) {
const SolarisProcessList* spl = (const SolarisProcessList*) this->pl;
- unsigned int cpus = this->pl->cpuCount;
+ unsigned int cpus = this->pl->activeCPUs;
const CPUData* cpuData = NULL;
if (cpus == 1) {
diff --git a/solaris/SolarisProcessList.c b/solaris/SolarisProcessList.c
index daba232b..47d5182c 100644
--- a/solaris/SolarisProcessList.c
+++ b/solaris/SolarisProcessList.c
@@ -59,20 +59,24 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* dynamicMeters, H
CRT_fatalError("Cannot get pagesize by sysconf(_SC_PAGESIZE)");
pageSizeKB = pageSize / 1024;
- pl->cpuCount = sysconf(_SC_NPROCESSORS_ONLN);
- if (pl->cpuCount == (unsigned int)-1)
+ pl->activeCPUs = sysconf(_SC_NPROCESSORS_ONLN);
+ if (pl->activeCPUs == (unsigned int)-1)
CRT_fatalError("Cannot get CPU count by sysconf(_SC_NPROCESSORS_ONLN)");
- else if (pl->cpuCount == 1)
+ else if (pl->activeCPUs == 1)
spl->cpus = xRealloc(spl->cpus, sizeof(CPUData));
else
- spl->cpus = xRealloc(spl->cpus, (pl->cpuCount + 1) * sizeof(CPUData));
+ spl->cpus = xRealloc(spl->cpus, (pl->activeCPUs + 1) * sizeof(CPUData));
+
+ /* TODO: support offline CPUs and hot swapping
+ * pl->existingCPUs = sysconf(_SC_NPROCESSORS_CONF) */
+ pl->existingCPUs = pl->activeCPUs;
return pl;
}
static inline void SolarisProcessList_scanCPUTime(ProcessList* pl) {
const SolarisProcessList* spl = (SolarisProcessList*) pl;
- unsigned int cpus = pl->cpuCount;
+ unsigned int cpus = pl->existingCPUs;
kstat_t* cpuinfo = NULL;
kstat_named_t* idletime = NULL;
kstat_named_t* intrtime = NULL;

© 2014-2024 Faster IT GmbH | imprint | privacy policy