diff options
author | Christian Göttsche <cgzones@googlemail.com> | 2021-06-12 18:17:28 +0200 |
---|---|---|
committer | Benny Baumann <BenBE@geshi.org> | 2021-07-18 07:44:02 +0200 |
commit | 41af31be7ffbd34518b27aad56a4f54af6a8adf3 (patch) | |
tree | 6e86813a332e93f7ee22b873d7522fa766b4af97 /solaris | |
parent | c9abd788b17ab28424961310b7e224498510780c (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.c | 2 | ||||
-rw-r--r-- | solaris/SolarisProcessList.c | 14 |
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; |