mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 05:02:12 +00:00
Merge branches 'acpi-ec' and 'acpi-processor'
* acpi-ec: ACPI / EC: Process rather than discard events in acpi_ec_clear * acpi-processor: ACPI / processor: Fix failure of loading acpi-cpufreq driver
This commit is contained in:
commit
de3afce533
@ -170,6 +170,9 @@ static int acpi_processor_hotadd_init(struct acpi_processor *pr)
|
||||
acpi_status status;
|
||||
int ret;
|
||||
|
||||
if (pr->apic_id == -1)
|
||||
return -ENODEV;
|
||||
|
||||
status = acpi_evaluate_integer(pr->handle, "_STA", NULL, &sta);
|
||||
if (ACPI_FAILURE(status) || !(sta & ACPI_STA_DEVICE_PRESENT))
|
||||
return -ENODEV;
|
||||
@ -260,10 +263,8 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
||||
}
|
||||
|
||||
apic_id = acpi_get_apicid(pr->handle, device_declaration, pr->acpi_id);
|
||||
if (apic_id < 0) {
|
||||
if (apic_id < 0)
|
||||
acpi_handle_debug(pr->handle, "failed to get CPU APIC ID.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
pr->apic_id = apic_id;
|
||||
|
||||
cpu_index = acpi_map_cpuid(pr->apic_id, pr->acpi_id);
|
||||
|
@ -206,13 +206,13 @@ unlock:
|
||||
spin_unlock_irqrestore(&ec->lock, flags);
|
||||
}
|
||||
|
||||
static int acpi_ec_sync_query(struct acpi_ec *ec);
|
||||
static int acpi_ec_sync_query(struct acpi_ec *ec, u8 *data);
|
||||
|
||||
static int ec_check_sci_sync(struct acpi_ec *ec, u8 state)
|
||||
{
|
||||
if (state & ACPI_EC_FLAG_SCI) {
|
||||
if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
|
||||
return acpi_ec_sync_query(ec);
|
||||
return acpi_ec_sync_query(ec, NULL);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -443,10 +443,8 @@ acpi_handle ec_get_handle(void)
|
||||
|
||||
EXPORT_SYMBOL(ec_get_handle);
|
||||
|
||||
static int acpi_ec_query_unlocked(struct acpi_ec *ec, u8 *data);
|
||||
|
||||
/*
|
||||
* Clears stale _Q events that might have accumulated in the EC.
|
||||
* Process _Q events that might have accumulated in the EC.
|
||||
* Run with locked ec mutex.
|
||||
*/
|
||||
static void acpi_ec_clear(struct acpi_ec *ec)
|
||||
@ -455,7 +453,7 @@ static void acpi_ec_clear(struct acpi_ec *ec)
|
||||
u8 value = 0;
|
||||
|
||||
for (i = 0; i < ACPI_EC_CLEAR_MAX; i++) {
|
||||
status = acpi_ec_query_unlocked(ec, &value);
|
||||
status = acpi_ec_sync_query(ec, &value);
|
||||
if (status || !value)
|
||||
break;
|
||||
}
|
||||
@ -582,13 +580,18 @@ static void acpi_ec_run(void *cxt)
|
||||
kfree(handler);
|
||||
}
|
||||
|
||||
static int acpi_ec_sync_query(struct acpi_ec *ec)
|
||||
static int acpi_ec_sync_query(struct acpi_ec *ec, u8 *data)
|
||||
{
|
||||
u8 value = 0;
|
||||
int status;
|
||||
struct acpi_ec_query_handler *handler, *copy;
|
||||
if ((status = acpi_ec_query_unlocked(ec, &value)))
|
||||
|
||||
status = acpi_ec_query_unlocked(ec, &value);
|
||||
if (data)
|
||||
*data = value;
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
list_for_each_entry(handler, &ec->list, node) {
|
||||
if (value == handler->query_bit) {
|
||||
/* have custom handler for this bit */
|
||||
@ -612,7 +615,7 @@ static void acpi_ec_gpe_query(void *ec_cxt)
|
||||
if (!ec)
|
||||
return;
|
||||
mutex_lock(&ec->mutex);
|
||||
acpi_ec_sync_query(ec);
|
||||
acpi_ec_sync_query(ec, NULL);
|
||||
mutex_unlock(&ec->mutex);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user