Fix to prevent sched_mc_power_saving from being exported through sysfs
for multicore single socket (Laptop).
CPU core map of the boot cpu should be equal to possible number
of cpus for single socket system.
This fix has been developed at FOSS.in kernel workout.
Signed-off-by: Mahesh Salgaonkar <[email protected]>
diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
index 4850e4b..4adc830 100644
--- a/arch/x86/include/asm/topology.h
+++ b/arch/x86/include/asm/topology.h
@@ -239,7 +239,7 @@ struct pci_bus;
void set_pci_bus_resources_arch_default(struct pci_bus *b);
#ifdef CONFIG_SMP
-#define mc_capable() (boot_cpu_data.x86_max_cores > 1)
+#define mc_capable() (cpus_weight(per_cpu(cpu_core_map,0)) != nr_cpu_ids)
#define smt_capable() (smp_num_siblings > 1)
#endif
Mahesh Salgaonkar wrote:
> Fix to prevent sched_mc_power_saving from being exported through sysfs
> for multicore single socket (Laptop).
>
> CPU core map of the boot cpu should be equal to possible number
> of cpus for single socket system.
>
> This fix has been developed at FOSS.in kernel workout.
>
> Signed-off-by: Mahesh Salgaonkar <[email protected]>
>
> diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
> index 4850e4b..4adc830 100644
> --- a/arch/x86/include/asm/topology.h
> +++ b/arch/x86/include/asm/topology.h
> @@ -239,7 +239,7 @@ struct pci_bus;
> void set_pci_bus_resources_arch_default(struct pci_bus *b);
>
> #ifdef CONFIG_SMP
> -#define mc_capable() (boot_cpu_data.x86_max_cores > 1)
> +#define mc_capable() (cpus_weight(per_cpu(cpu_core_map,0)) != nr_cpu_ids)
> #define smt_capable() (smp_num_siblings > 1)
> #endif
>
>
The sched_mc_power_savings in sysfs does not help on single socket
multicore laptops.
The above patch has been tested on dual core laptop and dual socket quad
core intel processor based server.
Thanks,
-Mahesh.
* Mahesh Salgaonkar <[email protected]> wrote:
> Fix to prevent sched_mc_power_saving from being exported through sysfs
> for multicore single socket (Laptop).
>
> CPU core map of the boot cpu should be equal to possible number
> of cpus for single socket system.
>
> This fix has been developed at FOSS.in kernel workout.
>
> Signed-off-by: Mahesh Salgaonkar <[email protected]>
>
> diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
> index 4850e4b..4adc830 100644
> --- a/arch/x86/include/asm/topology.h
> +++ b/arch/x86/include/asm/topology.h
> @@ -239,7 +239,7 @@ struct pci_bus;
> void set_pci_bus_resources_arch_default(struct pci_bus *b);
>
> #ifdef CONFIG_SMP
> -#define mc_capable() (boot_cpu_data.x86_max_cores > 1)
> +#define mc_capable() (cpus_weight(per_cpu(cpu_core_map,0)) != nr_cpu_ids)
hm, dunno. sched_mc_power_savings should have no effect on single-socket
systems, right? So the knob should have no effect.
Ingo
Ingo Molnar wrote:
> * Mahesh Salgaonkar <[email protected]> wrote:
>
>
>> Fix to prevent sched_mc_power_saving from being exported through sysfs
>> for multicore single socket (Laptop).
>>
>> CPU core map of the boot cpu should be equal to possible number
>> of cpus for single socket system.
>>
>> This fix has been developed at FOSS.in kernel workout.
>>
>> Signed-off-by: Mahesh Salgaonkar <[email protected]>
>>
>> diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
>> index 4850e4b..4adc830 100644
>> --- a/arch/x86/include/asm/topology.h
>> +++ b/arch/x86/include/asm/topology.h
>> @@ -239,7 +239,7 @@ struct pci_bus;
>> void set_pci_bus_resources_arch_default(struct pci_bus *b);
>>
>> #ifdef CONFIG_SMP
>> -#define mc_capable() (boot_cpu_data.x86_max_cores > 1)
>> +#define mc_capable() (cpus_weight(per_cpu(cpu_core_map,0)) != nr_cpu_ids)
>>
>
> hm, dunno. sched_mc_power_savings should have no effect on single-socket
> systems, right? So the knob should have no effect.
>
> Ingo
>
Hi Ingo,
Yes, it will not have any effect but it enables additional code path
leading to an
overhead in case of single-socket system. This overhead is only if
"sched_mc_power_savings = 1", however we are still leaving it to zero
(default) and
preventing user space from turning it on by mistake.
Thanks,
-Mahesh.
* Mahesh Jagannath Salgaonkar <[email protected]> wrote:
> Ingo Molnar wrote:
>> * Mahesh Salgaonkar <[email protected]> wrote:
>>
>>
>>> Fix to prevent sched_mc_power_saving from being exported through sysfs
>>> for multicore single socket (Laptop).
>>> CPU core map of the boot cpu should be equal to possible
>>> number
>>> of cpus for single socket system.
>>> This fix has been developed at FOSS.in kernel workout.
>>> Signed-off-by: Mahesh Salgaonkar
>>> <[email protected]>
>>>
>>> diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
>>> index 4850e4b..4adc830 100644
>>> --- a/arch/x86/include/asm/topology.h
>>> +++ b/arch/x86/include/asm/topology.h
>>> @@ -239,7 +239,7 @@ struct pci_bus;
>>> void set_pci_bus_resources_arch_default(struct pci_bus *b);
>>> #ifdef CONFIG_SMP
>>> -#define mc_capable() (boot_cpu_data.x86_max_cores > 1)
>>> +#define mc_capable() (cpus_weight(per_cpu(cpu_core_map,0)) != nr_cpu_ids)
>>>
>>
>> hm, dunno. sched_mc_power_savings should have no effect on
>> single-socket systems, right? So the knob should have no effect.
>>
>> Ingo
>>
> Hi Ingo,
>
> Yes, it will not have any effect but it enables additional code path
> leading to an overhead in case of single-socket system. This overhead
> is only if "sched_mc_power_savings = 1", however we are still leaving
> it to zero (default) and preventing user space from turning it on by
> mistake.
okay, makes sense - i've applied it to tip/sched/urgent (for v2.6.28
merge), thanks Mahesh!
Ingo