summaryrefslogtreecommitdiffstats
path: root/pcp
diff options
context:
space:
mode:
authorNathan Scott <nathans@redhat.com>2021-08-09 12:42:45 +1000
committerNathan Scott <nathans@redhat.com>2021-08-09 12:42:45 +1000
commitee831263c343bef80658aa806974be9ddfadbd57 (patch)
treec64d8d3c8abc8ebb8deb932882ffcba0f2801cf6 /pcp
parentaa0424ade806715ea0f410dc068a1eb648300bb9 (diff)
PCP: implement a missing piece for offline and hotplug CPUs
Related: #656
Diffstat (limited to 'pcp')
-rw-r--r--pcp/PCPProcessList.c26
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;
}

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