• Dou Liyang's avatar
    acpi: Provide mechanism to validate processors in the ACPI tables · 8e089eaa
    Dou Liyang authored
    [Problem]
    
    When we set cpuid <-> nodeid mapping to be persistent, it will use the DSDT
    As we know, the ACPI tables are just like user's input in that respect, and
    we don't crash if user's input is unreasonable.
    
    Such as, the mapping of the proc_id and pxm in some machine's ACPI table is
    like this:
    
    proc_id   |    pxm
    --------------------
    0       <->     0
    1       <->     0
    2       <->     1
    3       <->     1
    89      <->     0
    89      <->     0
    89      <->     0
    89      <->     1
    89      <->     1
    89      <->     2
    89      <->     3
    .....
    
    We can't be sure which one is correct to the proc_id 89. We may map a wrong
    node to a cpu. When pages are allocated, this may cause a kernal panic.
    
    So, we should provide mechanisms to validate the ACPI tables, just like we
    do validation to check user's input in web project.
    
    The mechanism is that the processor objects which have the duplicate IDs
    are not valid.
    
    [Solution]
    
    We add a validation function, like this:
    
    foreach Processor in DSDT
    	proc_id = get_ACPI_Processor_number(Processor)
    	if (proc_id exists )
    		mark both of them as being unreasonable;
    
    The function will record the unique or duplicate processor IDs.
    
    The duplicate processor IDs such as 89 are regarded as the unreasonable IDs
    which mean that the processor objects in question are not valid.
    
    [ tglx: Add __init[data] annotations ]
    Signed-off-by: default avatarDou Liyang <douly.fnst@cn.fujitsu.com>
    Acked-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: mika.j.penttila@gmail.com
    Cc: len.brown@intel.com
    Cc: rafael@kernel.org
    Cc: rjw@rjwysocki.net
    Cc: yasu.isimatu@gmail.com
    Cc: linux-mm@kvack.org
    Cc: linux-acpi@vger.kernel.org
    Cc: isimatu.yasuaki@jp.fujitsu.com
    Cc: gongzhaogang@inspur.com
    Cc: tj@kernel.org
    Cc: izumi.taku@jp.fujitsu.com
    Cc: cl@linux.com
    Cc: chen.tang@easystack.cn
    Cc: akpm@linux-foundation.org
    Cc: kamezawa.hiroyu@jp.fujitsu.com
    Cc: lenb@kernel.org
    Link: http://lkml.kernel.org/r/1472114120-3281-7-git-send-email-douly.fnst@cn.fujitsu.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    8e089eaa
acpi_processor.c 16.9 KB