Messages in this thread | | | Date | Mon, 16 Dec 2019 15:37:42 +0100 | From | Peter Zijlstra <> | Subject | Re: [Patch v6 3/7] Add infrastructure to store and update instantaneous thermal pressure |
| |
On Wed, Dec 11, 2019 at 11:11:44PM -0500, Thara Gopinath wrote: > diff --git a/arch/arm/include/asm/topology.h b/arch/arm/include/asm/topology.h > index 8a0fae9..90b18c3 100644 > --- a/arch/arm/include/asm/topology.h > +++ b/arch/arm/include/asm/topology.h > @@ -16,6 +16,9 @@ > /* Enable topology flag updates */ > #define arch_update_cpu_topology topology_update_cpu_topology > > +/* Replace task scheduler's defalut thermal pressure retrieve API */ > +#define arch_scale_thermal_capacity topology_get_thermal_pressure
Witsness the previously observed confusion.
> #else > > static inline void init_cpu_topology(void) { } > diff --git a/arch/arm64/include/asm/topology.h b/arch/arm64/include/asm/topology.h > index a4d945d..ccb277b 100644 > --- a/arch/arm64/include/asm/topology.h > +++ b/arch/arm64/include/asm/topology.h > @@ -25,6 +25,9 @@ int pcibus_to_node(struct pci_bus *bus); > /* Enable topology flag updates */ > #define arch_update_cpu_topology topology_update_cpu_topology > > +/* Replace task scheduler's defalut thermal pressure retrieve API */ > +#define arch_scale_thermal_capacity topology_get_thermal_pressure > + > #include <asm-generic/topology.h> > > #endif /* _ASM_ARM_TOPOLOGY_H */ > diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c > index 1eb81f11..3a91379 100644 > --- a/drivers/base/arch_topology.c > +++ b/drivers/base/arch_topology.c > @@ -42,6 +42,19 @@ void topology_set_cpu_scale(unsigned int cpu, unsigned long capacity) > per_cpu(cpu_scale, cpu) = capacity; > } > > +DEFINE_PER_CPU(unsigned long, thermal_pressure); > + > +void arch_set_thermal_pressure(struct cpumask *cpus, > + unsigned long capped_capacity) > +{ > + int cpu; > + unsigned long delta = arch_scale_cpu_capacity(cpumask_first(cpus)) - > + capped_capacity; > + > + for_each_cpu(cpu, cpus) > + WRITE_ONCE(per_cpu(thermal_pressure, cpu), delta); > +}
Not a capacity.
> static ssize_t cpu_capacity_show(struct device *dev, > struct device_attribute *attr, > char *buf) > diff --git a/include/linux/arch_topology.h b/include/linux/arch_topology.h > index 3015ecb..7a04364 100644 > --- a/include/linux/arch_topology.h > +++ b/include/linux/arch_topology.h > @@ -33,6 +33,17 @@ unsigned long topology_get_freq_scale(int cpu) > return per_cpu(freq_scale, cpu); > } > > +DECLARE_PER_CPU(unsigned long, thermal_pressure); > + > +static inline > +unsigned long topology_get_thermal_pressure(int cpu) > +{ > + return per_cpu(thermal_pressure, cpu); > +}
| |