• Konrad Rzeszutek Wilk's avatar
    xen/acpi-processor: Don't dereference struct acpi_processor on all CPUs. · 949dd8c1
    Konrad Rzeszutek Wilk authored
    With git commit c705c78c
    "acpi: Export the acpi_processor_get_performance_info" we are now
    using a different mechanism to access the P-states.
    
    The acpi_processor per-cpu structure is set and filtered by the
    core ACPI code which shrinks the per_cpu contents to only online CPUs.
    In the past we would call acpi_processor_register_performance()
    which would have not tried to dereference offline cpus.
    
    With the new patch and the fact that the loop we take is for
    for_all_possible_cpus we end up crashing on some machines.
    We could modify the loop to be for online_cpus - but all the other
    loops in the code use possible_cpus (for a good reason) - so lets
    leave it as so and just check if per_cpu(processor) is NULL.
    
    With this patch we will bypass the !online but possible CPUs.
    This fixes:
    
    IP: [<ffffffffa00d13b5>] xen_acpi_processor_init+0x1b6/0xe01 [xen_acpi_processor]
    PGD 4126e6067 PUD 4126e3067 PMD 0
    Oops: 0002 [#1] SMP
    Pid: 432, comm: modprobe Not tainted 3.9.0-rc3+ #28 To be filled by O.E.M. To be filled by O.E.M./M5A97
    RIP: e030:[<ffffffffa00d13b5>]  [<ffffffffa00d13b5>] xen_acpi_processor_init+0x1b6/0xe01 [xen_acpi_processor]
    RSP: e02b:ffff88040c8a3ce8  EFLAGS: 00010282
    .. snip..
    Call Trace:
     [<ffffffffa00d11ff>] ? read_acpi_id+0x12b/0x12b [xen_acpi_processor]
     [<ffffffff8100215a>] do_one_initcall+0x12a/0x180
     [<ffffffff810c42c3>] load_module+0x1cd3/0x2870
     [<ffffffff81319b70>] ? ddebug_proc_open+0xc0/0xc0
     [<ffffffff810c4f37>] sys_init_module+0xd7/0x120
     [<ffffffff8166ce19>] system_call_fastpath+0x16/0x1b
    
    on some machines.
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    949dd8c1
xen-acpi-processor.c 16.4 KB