mirror of https://gitee.com/openkylin/linux.git
Merge branches 'acpi-battery' and 'acpi-processor'
* acpi-battery: ACPI / battery: mark DMI table as __initconst ACPI / battery: minor tweaks to acpi_battery_units() ACPI / battery: constify the offset tables ACPI / battery: ensure acpi_battery_init() has finish ACPI / battery: drop useless return statements ACPI / battery: abort initialization earlier if acpi_disabled * acpi-processor: ACPI / processor: constify DMI system id table ACPI / processor: Introduce invalid_phys_cpuid() ACPI / processor: return specific error instead of -1 ACPI / processor: remove phys_id in acpi_processor_get_info() ACPI / processor: remove cpu_index in acpi_processor_get_info() Xen / ACPI / processor: Remove unneeded NULL check Xen / ACPI / processor: use invalid_logical_cpuid() ACPI / processor: Introduce invalid_logical_cpuid()
This commit is contained in:
commit
763d949581
|
@ -170,7 +170,7 @@ static int acpi_processor_hotadd_init(struct acpi_processor *pr)
|
|||
acpi_status status;
|
||||
int ret;
|
||||
|
||||
if (pr->phys_id == PHYS_CPUID_INVALID)
|
||||
if (invalid_phys_cpuid(pr->phys_id))
|
||||
return -ENODEV;
|
||||
|
||||
status = acpi_evaluate_integer(pr->handle, "_STA", NULL, &sta);
|
||||
|
@ -215,8 +215,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||
union acpi_object object = { 0 };
|
||||
struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
|
||||
struct acpi_processor *pr = acpi_driver_data(device);
|
||||
phys_cpuid_t phys_id;
|
||||
int cpu_index, device_declaration = 0;
|
||||
int device_declaration = 0;
|
||||
acpi_status status = AE_OK;
|
||||
static int cpu0_initialized;
|
||||
unsigned long long value;
|
||||
|
@ -263,29 +262,28 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||
pr->acpi_id = value;
|
||||
}
|
||||
|
||||
phys_id = acpi_get_phys_id(pr->handle, device_declaration, pr->acpi_id);
|
||||
if (phys_id == PHYS_CPUID_INVALID)
|
||||
pr->phys_id = acpi_get_phys_id(pr->handle, device_declaration,
|
||||
pr->acpi_id);
|
||||
if (invalid_phys_cpuid(pr->phys_id))
|
||||
acpi_handle_debug(pr->handle, "failed to get CPU physical ID.\n");
|
||||
pr->phys_id = phys_id;
|
||||
|
||||
cpu_index = acpi_map_cpuid(pr->phys_id, pr->acpi_id);
|
||||
pr->id = acpi_map_cpuid(pr->phys_id, pr->acpi_id);
|
||||
if (!cpu0_initialized && !acpi_has_cpu_in_madt()) {
|
||||
cpu0_initialized = 1;
|
||||
/*
|
||||
* Handle UP system running SMP kernel, with no CPU
|
||||
* entry in MADT
|
||||
*/
|
||||
if ((cpu_index == -1) && (num_online_cpus() == 1))
|
||||
cpu_index = 0;
|
||||
if (invalid_logical_cpuid(pr->id) && (num_online_cpus() == 1))
|
||||
pr->id = 0;
|
||||
}
|
||||
pr->id = cpu_index;
|
||||
|
||||
/*
|
||||
* Extra Processor objects may be enumerated on MP systems with
|
||||
* less than the max # of CPUs. They should be ignored _iff
|
||||
* they are physically not present.
|
||||
*/
|
||||
if (pr->id == -1) {
|
||||
if (invalid_logical_cpuid(pr->id)) {
|
||||
int ret = acpi_processor_hotadd_init(pr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
|
@ -70,6 +70,7 @@ MODULE_AUTHOR("Alexey Starikovskiy <astarikovskiy@suse.de>");
|
|||
MODULE_DESCRIPTION("ACPI Battery Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static async_cookie_t async_cookie;
|
||||
static int battery_bix_broken_package;
|
||||
static int battery_notification_delay_ms;
|
||||
static unsigned int cache_time = 1000;
|
||||
|
@ -338,14 +339,6 @@ static enum power_supply_property energy_battery_props[] = {
|
|||
POWER_SUPPLY_PROP_SERIAL_NUMBER,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||
inline char *acpi_battery_units(struct acpi_battery *battery)
|
||||
{
|
||||
return (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) ?
|
||||
"mA" : "mW";
|
||||
}
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
Battery Management
|
||||
-------------------------------------------------------------------------- */
|
||||
|
@ -354,14 +347,14 @@ struct acpi_offsets {
|
|||
u8 mode; /* int or string? */
|
||||
};
|
||||
|
||||
static struct acpi_offsets state_offsets[] = {
|
||||
static const struct acpi_offsets state_offsets[] = {
|
||||
{offsetof(struct acpi_battery, state), 0},
|
||||
{offsetof(struct acpi_battery, rate_now), 0},
|
||||
{offsetof(struct acpi_battery, capacity_now), 0},
|
||||
{offsetof(struct acpi_battery, voltage_now), 0},
|
||||
};
|
||||
|
||||
static struct acpi_offsets info_offsets[] = {
|
||||
static const struct acpi_offsets info_offsets[] = {
|
||||
{offsetof(struct acpi_battery, power_unit), 0},
|
||||
{offsetof(struct acpi_battery, design_capacity), 0},
|
||||
{offsetof(struct acpi_battery, full_charge_capacity), 0},
|
||||
|
@ -377,7 +370,7 @@ static struct acpi_offsets info_offsets[] = {
|
|||
{offsetof(struct acpi_battery, oem_info), 1},
|
||||
};
|
||||
|
||||
static struct acpi_offsets extended_info_offsets[] = {
|
||||
static const struct acpi_offsets extended_info_offsets[] = {
|
||||
{offsetof(struct acpi_battery, revision), 0},
|
||||
{offsetof(struct acpi_battery, power_unit), 0},
|
||||
{offsetof(struct acpi_battery, design_capacity), 0},
|
||||
|
@ -402,7 +395,7 @@ static struct acpi_offsets extended_info_offsets[] = {
|
|||
|
||||
static int extract_package(struct acpi_battery *battery,
|
||||
union acpi_object *package,
|
||||
struct acpi_offsets *offsets, int num)
|
||||
const struct acpi_offsets *offsets, int num)
|
||||
{
|
||||
int i;
|
||||
union acpi_object *element;
|
||||
|
@ -792,6 +785,12 @@ static void acpi_battery_refresh(struct acpi_battery *battery)
|
|||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||
static struct proc_dir_entry *acpi_battery_dir;
|
||||
|
||||
static const char *acpi_battery_units(const struct acpi_battery *battery)
|
||||
{
|
||||
return (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) ?
|
||||
"mA" : "mW";
|
||||
}
|
||||
|
||||
static int acpi_battery_print_info(struct seq_file *seq, int result)
|
||||
{
|
||||
struct acpi_battery *battery = seq->private;
|
||||
|
@ -1125,19 +1124,21 @@ static int battery_notify(struct notifier_block *nb,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int battery_bix_broken_package_quirk(const struct dmi_system_id *d)
|
||||
static int __init
|
||||
battery_bix_broken_package_quirk(const struct dmi_system_id *d)
|
||||
{
|
||||
battery_bix_broken_package = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int battery_notification_delay_quirk(const struct dmi_system_id *d)
|
||||
static int __init
|
||||
battery_notification_delay_quirk(const struct dmi_system_id *d)
|
||||
{
|
||||
battery_notification_delay_ms = 1000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id bat_dmi_table[] = {
|
||||
static const struct dmi_system_id bat_dmi_table[] __initconst = {
|
||||
{
|
||||
.callback = battery_bix_broken_package_quirk,
|
||||
.ident = "NEC LZ750/LS",
|
||||
|
@ -1292,33 +1293,34 @@ static struct acpi_driver acpi_battery_driver = {
|
|||
|
||||
static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie)
|
||||
{
|
||||
if (acpi_disabled)
|
||||
return;
|
||||
int result;
|
||||
|
||||
dmi_check_system(bat_dmi_table);
|
||||
|
||||
|
||||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||
acpi_battery_dir = acpi_lock_battery_dir();
|
||||
if (!acpi_battery_dir)
|
||||
return;
|
||||
#endif
|
||||
if (acpi_bus_register_driver(&acpi_battery_driver) < 0) {
|
||||
result = acpi_bus_register_driver(&acpi_battery_driver);
|
||||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||
if (result < 0)
|
||||
acpi_unlock_battery_dir(acpi_battery_dir);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static int __init acpi_battery_init(void)
|
||||
{
|
||||
async_schedule(acpi_battery_init_async, NULL);
|
||||
if (acpi_disabled)
|
||||
return -ENODEV;
|
||||
|
||||
async_cookie = async_schedule(acpi_battery_init_async, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit acpi_battery_exit(void)
|
||||
{
|
||||
async_synchronize_cookie(async_cookie);
|
||||
acpi_bus_unregister_driver(&acpi_battery_driver);
|
||||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||
acpi_unlock_battery_dir(acpi_battery_dir);
|
||||
|
|
|
@ -184,7 +184,7 @@ phys_cpuid_t acpi_get_phys_id(acpi_handle handle, int type, u32 acpi_id)
|
|||
phys_cpuid_t phys_id;
|
||||
|
||||
phys_id = map_mat_entry(handle, type, acpi_id);
|
||||
if (phys_id == PHYS_CPUID_INVALID)
|
||||
if (invalid_phys_cpuid(phys_id))
|
||||
phys_id = map_madt_entry(type, acpi_id);
|
||||
|
||||
return phys_id;
|
||||
|
@ -196,7 +196,7 @@ int acpi_map_cpuid(phys_cpuid_t phys_id, u32 acpi_id)
|
|||
int i;
|
||||
#endif
|
||||
|
||||
if (phys_id == PHYS_CPUID_INVALID) {
|
||||
if (invalid_phys_cpuid(phys_id)) {
|
||||
/*
|
||||
* On UP processor, there is no _MAT or MADT table.
|
||||
* So above phys_id is always set to PHYS_CPUID_INVALID.
|
||||
|
@ -215,12 +215,12 @@ int acpi_map_cpuid(phys_cpuid_t phys_id, u32 acpi_id)
|
|||
* Ignores phys_id and always returns 0 for the processor
|
||||
* handle with acpi id 0 if nr_cpu_ids is 1.
|
||||
* This should be the case if SMP tables are not found.
|
||||
* Return -1 for other CPU's handle.
|
||||
* Return -EINVAL for other CPU's handle.
|
||||
*/
|
||||
if (nr_cpu_ids <= 1 && acpi_id == 0)
|
||||
return acpi_id;
|
||||
else
|
||||
return -1;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -233,7 +233,7 @@ int acpi_map_cpuid(phys_cpuid_t phys_id, u32 acpi_id)
|
|||
if (phys_id == 0)
|
||||
return phys_id;
|
||||
#endif
|
||||
return -1;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
int acpi_get_cpuid(acpi_handle handle, int type, u32 acpi_id)
|
||||
|
|
|
@ -94,7 +94,7 @@ static int set_max_cstate(const struct dmi_system_id *id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id processor_power_dmi_table[] = {
|
||||
static const struct dmi_system_id processor_power_dmi_table[] = {
|
||||
{ set_max_cstate, "Clevo 5600D", {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
|
||||
DMI_MATCH(DMI_BIOS_VERSION,"SHE845M0.86C.0013.D.0302131307")},
|
||||
|
|
|
@ -52,10 +52,7 @@ static bool __init processor_physically_present(acpi_handle handle)
|
|||
type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0;
|
||||
cpuid = acpi_get_cpuid(handle, type, acpi_id);
|
||||
|
||||
if (cpuid == -1)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
return !invalid_logical_cpuid(cpuid);
|
||||
}
|
||||
|
||||
static void acpi_set_pdc_bits(u32 *buf)
|
||||
|
|
|
@ -46,13 +46,7 @@ static int xen_acpi_processor_enable(struct acpi_device *device)
|
|||
unsigned long long value;
|
||||
union acpi_object object = { 0 };
|
||||
struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
|
||||
struct acpi_processor *pr;
|
||||
|
||||
pr = acpi_driver_data(device);
|
||||
if (!pr) {
|
||||
pr_err(PREFIX "Cannot find driver data\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
struct acpi_processor *pr = acpi_driver_data(device);
|
||||
|
||||
if (!strcmp(acpi_device_hid(device), ACPI_PROCESSOR_OBJECT_HID)) {
|
||||
/* Declared with "Processor" statement; match ProcessorID */
|
||||
|
@ -77,7 +71,7 @@ static int xen_acpi_processor_enable(struct acpi_device *device)
|
|||
|
||||
pr->id = xen_pcpu_id(pr->acpi_id);
|
||||
|
||||
if ((int)pr->id < 0)
|
||||
if (invalid_logical_cpuid(pr->id))
|
||||
/* This cpu is not presented at hypervisor, try to hotadd it */
|
||||
if (ACPI_FAILURE(xen_acpi_cpu_hotadd(pr))) {
|
||||
pr_err(PREFIX "Hotadd CPU (acpi_id = %d) failed.\n",
|
||||
|
@ -226,7 +220,7 @@ static acpi_status xen_acpi_cpu_hotadd(struct acpi_processor *pr)
|
|||
return AE_ERROR;
|
||||
|
||||
pr->id = xen_hotadd_cpu(pr);
|
||||
if ((int)pr->id < 0)
|
||||
if (invalid_logical_cpuid(pr->id))
|
||||
return AE_ERROR;
|
||||
|
||||
/*
|
||||
|
|
|
@ -158,6 +158,16 @@ typedef u32 phys_cpuid_t;
|
|||
#define PHYS_CPUID_INVALID (phys_cpuid_t)(-1)
|
||||
#endif
|
||||
|
||||
static inline bool invalid_logical_cpuid(u32 cpuid)
|
||||
{
|
||||
return (int)cpuid < 0;
|
||||
}
|
||||
|
||||
static inline bool invalid_phys_cpuid(phys_cpuid_t phys_id)
|
||||
{
|
||||
return phys_id == PHYS_CPUID_INVALID;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ACPI_HOTPLUG_CPU
|
||||
/* Arch dependent functions for cpu hotplug support */
|
||||
int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, int *pcpu);
|
||||
|
|
Loading…
Reference in New Issue