diff options
author | Nathan Scott <nathans@redhat.com> | 2021-08-09 12:42:45 +1000 |
---|---|---|
committer | Nathan Scott <nathans@redhat.com> | 2021-08-09 12:42:45 +1000 |
commit | ee831263c343bef80658aa806974be9ddfadbd57 (patch) | |
tree | c64d8d3c8abc8ebb8deb932882ffcba0f2801cf6 /pcp | |
parent | aa0424ade806715ea0f410dc068a1eb648300bb9 (diff) |
PCP: implement a missing piece for offline and hotplug CPUs
Related: #656
Diffstat (limited to 'pcp')
-rw-r--r-- | pcp/PCPProcessList.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/pcp/PCPProcessList.c b/pcp/PCPProcessList.c index ae974435..26d67ba5 100644 --- a/pcp/PCPProcessList.c +++ b/pcp/PCPProcessList.c @@ -23,22 +23,17 @@ in the source distribution for its full text. #include "pcp/PCPProcess.h" -static int PCPProcessList_computeCPUcount(void) { - int cpus; - if ((cpus = Platform_getMaxCPU()) <= 0) - cpus = Metric_instanceCount(PCP_PERCPU_SYSTEM); - return cpus > 1 ? cpus : 1; -} - static void PCPProcessList_updateCPUcount(PCPProcessList* this) { ProcessList* pl = &(this->super); - unsigned int cpus = PCPProcessList_computeCPUcount(); + pl->activeCPUs = Metric_instanceCount(PCP_PERCPU_SYSTEM); + unsigned int cpus = Platform_getMaxCPU(); if (cpus == pl->existingCPUs) return; - + if (cpus <= 0) + cpus = pl->activeCPUs; + if (cpus <= 1) + cpus = pl->activeCPUs = 1; pl->existingCPUs = cpus; - // TODO: support offline CPUs and hot swapping - pl->activeCPUs = pl->existingCPUs; free(this->percpu); free(this->values); @@ -677,9 +672,10 @@ void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate) { bool ProcessList_isCPUonline(const ProcessList* super, unsigned int id) { assert(id < super->existingCPUs); + (void) super; - // TODO: support offline CPUs and hot swapping - (void) super; (void) id; - - return true; + pmAtomValue value; + if (Metric_instance(PCP_PERCPU_SYSTEM, id, id, &value, PM_TYPE_U32)) + return true; + return false; } |