• Rafael J. Wysocki's avatar
    ACPI / processor: Avoid reserving IO regions too early · a981d533
    Rafael J. Wysocki authored
    commit 86314751 upstream.
    
    Roland Dreier reports that one of his systems cannot boot because of
    the changes made by commit ac212b69 (ACPI / processor: Use common
    hotplug infrastructure).
    
    The problematic part of it is the request_region() call in
    acpi_processor_get_info() that used to run at module init time before
    the above commit and now it runs much earlier.  Unfortunately, the
    region(s) reserved by it fall into a range the PCI subsystem attempts
    to reserve for AHCI IO BARs.  As a result, the PCI reservation fails
    and AHCI doesn't work, while previously the PCI reservation would
    be made before acpi_processor_get_info() and it would succeed.
    
    That request_region() call, however, was overlooked by commit
    ac212b69, as it is not necessary for the enumeration of the
    processors.  It only is needed when the ACPI processor driver
    actually attempts to handle them which doesn't happen before
    loading the ACPI processor driver module.  Therefore that call
    should have been moved from acpi_processor_get_info() into that
    module.
    
    Address the problem by moving the request_region() call in question
    out of acpi_processor_get_info() and use the observation that the
    region reserved by it is only needed if the FADT-based CPU
    throttling method is going to be used, which means that it should
    be sufficient to invoke it from acpi_processor_get_throttling_fadt().
    
    Fixes: ac212b69 (ACPI / processor: Use common hotplug infrastructure)
    Reported-by: default avatarRoland Dreier <roland@purestorage.com>
    Tested-by: default avatarRoland Dreier <roland@purestorage.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    a981d533
acpi_processor.c 12.8 KB