Re: acpi_idle and max_cpus

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/18/2012 06:24 PM, Daniel Lezcano wrote:

> On 06/18/2012 02:25 PM, Deepthi Dharwar wrote:
>> Hi Daniel,
>>
>> On 06/18/2012 01:48 AM, Daniel Lezcano wrote:
>>
>>> On 06/15/2012 05:28 PM, Daniel Lezcano wrote:
>>>>
>>>> Hi all,
>>>>
>>>> I have a dual core Intel T9500.
>>>>
>>>> I boot the cpu with the acpi_idle driver and intel_idle enabled in the
>>>> config.
>>>>
>>>> The kernel is booted with maxcpus=1.
>>>>
>>>> After the system has boot, I put cpu1 online via sysfs.
>>>>
>>>> But I don't see any 'cpuidle' directory in the cpu's sysfs entry:
>>>>
>>>> /sys/devices/system/cpu/cpu1/cpuidle (?)
>>>>
>>>> When I look at the code I see the notifier is present for hotplug in
>>>> processor_driver.c and the cpuidle intel init routine should be called
>>>> there.
>>>>
>>
>>
>> Yes, we have a hotplug notifier.
>> Commit 99b72508  by Thomas Renninger fixed this issue.
>>
>> Please let me know which kernel version you are running and what is idle
>> driver registered ?
> 
> The kernel version is 3.5.0-rc1
> The registered driver is acpi_idle (with intel_idle if I am not wrong).
> 
> Thomas's patch is in this version.
> 
> Maybe I am wrong but I think the patch is not correct because:
> 
> static int __cpuinit acpi_processor_add(struct acpi_device *device)
> {
> 
>  ...
> 
> #ifdef CONFIG_SMP
> 	if (pr->id >= setup_max_cpus && pr->id != 0)
> 		return 0;
> #endif
> 
>  ...
> 
> 	per_cpu(processors, pr->id) = pr;
> 
> ...
> }
> 
> With max_cpus=1 we exit before setting up 'pr'.
> 
> So the condition in:
> 
> static int acpi_cpu_soft_notify(...)
> {
> 
> 	unsigned int cpu = (unsigned long)hcpu;
> 	struct acpi_processor *pr = per_cpu(processors, cpu);
> 
> 	if (action == CPU_ONLINE && pr) {
> 
> ...
> }
> 
> Is always false because pr == NULL
> 
> I did the change but I don't still see the 'cpuidle' directory
> appearing, I suspect also pr->flags.need_hotplug_init is not correctly
> initialized but I did not investigate more.
> 


Well looks like variable maxcpus holds the key here.

When I am booting the system, say with 2 out of 4 available cpus,
set via maxcpus variable with intel_idle or acpi_idle and onlining the
other 2 cpus later via sysfs, I dont see cpufreq or cpuidle dir in the
sysfs path.

# cd /sys/devices/system/cpu/cpu2
xxx:/sys/devices/system/cpu/cpu2# ls
	crash_notes  node0  online
xxx:/sys/devices/system/cpu/cpu2# echo 1 > online
xxx:/sys/devices/system/cpu/cpu2# ls
cache  crash_notes  node0  online  thermal_throttle  topology

So looks like its designed that way for now.
So if maxcpus=X, X<Y where Y is no of available cpus.
Enabling the Y-X cpus later after the boot via sysfs is not enabling
cpuidle and cpufreq .

The question is, do we want to modify this behavior ?

Cheers,
Deepthi



[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux