PCP: implement a missing piece for offline and hotplug CPUs

Related: #656
This commit is contained in:
Nathan Scott 2021-08-09 12:42:45 +10:00
parent aa0424ade8
commit ee831263c3
1 changed files with 11 additions and 15 deletions

View File

@ -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;
pmAtomValue value;
if (Metric_instance(PCP_PERCPU_SYSTEM, id, id, &value, PM_TYPE_U32))
return true;
return false;
}