PR created upstream: https://github.com/htop-dev/htop/pull/1371 From 4b87af0663f83ed90f044f975e519409c92b8bd9 Mon Sep 17 00:00:00 2001 From: Dominik Hassler Date: Thu, 11 Jan 2024 17:44:34 +0000 Subject: [PATCH] fixes for illumos/Solaris platforms --- solaris/Platform.c | 6 +++--- solaris/SolarisMachine.c | 6 +++++- solaris/SolarisMachine.h | 1 + solaris/SolarisProcess.c | 1 - solaris/SolarisProcess.h | 1 + solaris/SolarisProcessTable.c | 11 ++++++----- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/solaris/Platform.c b/solaris/Platform.c index 5faa91ae7..3934f7896 100644 --- a/solaris/Platform.c +++ b/solaris/Platform.c @@ -220,7 +220,7 @@ double Platform_setCPUValues(Meter* this, unsigned int cpu) { v[CPU_METER_NICE] = cpuData->nicePercent; v[CPU_METER_NORMAL] = cpuData->userPercent; - if (super->settings->detailedCPUTime) { + if (host->settings->detailedCPUTime) { v[CPU_METER_KERNEL] = cpuData->systemPercent; v[CPU_METER_IRQ] = cpuData->irqPercent; this->curItems = 4; @@ -258,13 +258,13 @@ void Platform_setSwapValues(Meter* this) { } void Platform_setZfsArcValues(Meter* this) { - const SolarisMachine* shost = (SolarisMachine*) this->host; + const SolarisMachine* shost = (const SolarisMachine*) this->host; ZfsArcMeter_readStats(this, &shost->zfs); } void Platform_setZfsCompressedArcValues(Meter* this) { - const SolarisMachine* shost = (SolarisMachine*) this->host; + const SolarisMachine* shost = (const SolarisMachine*) this->host; ZfsCompressedArcMeter_readStats(this, &shost->zfs); } diff --git a/solaris/SolarisMachine.c b/solaris/SolarisMachine.c index 4f740d321..5b2bdcd46 100644 --- a/solaris/SolarisMachine.c +++ b/solaris/SolarisMachine.c @@ -57,7 +57,7 @@ static void SolarisMachine_updateCPUcount(SolarisMachine* this) { if (s != super->activeCPUs) { change = true; - hsuper->activeCPUs = s; + super->activeCPUs = s; } if (change) { @@ -310,6 +310,10 @@ Machine* Machine_new(UsersTable* usersTable, uid_t userId) { CRT_fatalError("Cannot get pagesize by sysconf(_SC_PAGESIZE)"); this->pageSizeKB = this->pageSize / 1024; + this->kd = kstat_open(); + if (!this->kd) + CRT_fatalError("Cannot open kstat handle"); + SolarisMachine_updateCPUcount(this); return super; diff --git a/solaris/SolarisMachine.h b/solaris/SolarisMachine.h index 2208a888e..b350e9196 100644 --- a/solaris/SolarisMachine.h +++ b/solaris/SolarisMachine.h @@ -19,6 +19,7 @@ in the source distribution for its full text. #include #include "Hashtable.h" +#include "Machine.h" #include "UsersTable.h" #include "zfs/ZfsArcStats.h" diff --git a/solaris/SolarisProcess.c b/solaris/SolarisProcess.c index 449861b25..56acc7e5a 100644 --- a/solaris/SolarisProcess.c +++ b/solaris/SolarisProcess.c @@ -15,7 +15,6 @@ in the source distribution for its full text. #include #include -#include "Process.h" #include "ProcessTable.h" #include "CRT.h" diff --git a/solaris/SolarisProcess.h b/solaris/SolarisProcess.h index 1a8d18c76..292a05f2d 100644 --- a/solaris/SolarisProcess.h +++ b/solaris/SolarisProcess.h @@ -20,6 +20,7 @@ in the source distribution for its full text. #define ERR (-1) #include "Machine.h" +#include "Process.h" typedef struct SolarisProcess_ { diff --git a/solaris/SolarisProcessTable.c b/solaris/SolarisProcessTable.c index 549c753cd..29c5d938f 100644 --- a/solaris/SolarisProcessTable.c +++ b/solaris/SolarisProcessTable.c @@ -24,6 +24,7 @@ in the source distribution for its full text. #include "CRT.h" #include "solaris/Platform.h" +#include "solaris/SolarisMachine.h" #include "solaris/SolarisProcess.h" @@ -112,8 +113,8 @@ static int SolarisProcessTable_walkproc(psinfo_t* _psinfo, lwpsinfo_t* _lwpsinfo // Setup process list ProcessTable* pt = (ProcessTable*) listptr; - SolarisProcessTable* spt = (SolarisProcessTable*) listptr; - Machine* host = pt->host; + const Machine* host = pt->super.host; + const SolarisMachine* shost = (const SolarisMachine*) host; id_t lwpid_real = _lwpsinfo->pr_lwpid; if (lwpid_real > 1023) { @@ -133,7 +134,7 @@ static int SolarisProcessTable_walkproc(psinfo_t* _psinfo, lwpsinfo_t* _lwpsinfo const Settings* settings = host->settings; // Common code pass 1 - proc->show = false; + proc->super.show = false; sproc->taskid = _psinfo->pr_taskid; sproc->projid = _psinfo->pr_projid; sproc->poolid = _psinfo->pr_poolid; @@ -171,7 +172,7 @@ static int SolarisProcessTable_walkproc(psinfo_t* _psinfo, lwpsinfo_t* _lwpsinfo sproc->realpid = _psinfo->pr_pid; sproc->lwpid = lwpid_real; sproc->zoneid = _psinfo->pr_zoneid; - sproc->zname = SolarisProcessTable_readZoneName(spt->kd, sproc); + sproc->zname = SolarisProcessTable_readZoneName(shost->kd, sproc); SolarisProcessTable_updateExe(_psinfo->pr_pid, proc); Process_updateComm(proc, _psinfo->pr_fname); @@ -218,7 +219,7 @@ static int SolarisProcessTable_walkproc(psinfo_t* _psinfo, lwpsinfo_t* _lwpsinfo pt->totalTasks += proc->nlwp + 1; } } - proc->show = !(settings->hideKernelThreads && proc->isKernelThread); + proc->super.show = !(settings->hideKernelThreads && proc->isKernelThread); } else { // We are not in the master LWP, so jump to the LWP handling code proc->percent_cpu = ((uint16_t)_lwpsinfo->pr_pctcpu / (double)32768) * (double)100.0; Process_updateCPUFieldWidths(proc->percent_cpu);