forked from luck/tmp_suning_uos_patched
ACPI: EC: Add wait for irq storm
Merge of poll and irq modes accelerated EC transaction, so that keyboard starts to suffer again. Add msleep(1) into transaction path for the storm to allow keyboard controller to do its job. Reference: http://bugzilla.kernel.org/show_bug.cgi?id=14747 Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
f5347867c5
commit
54070101f8
|
@ -259,7 +259,6 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
|
||||||
clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
|
clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
|
||||||
spin_unlock_irqrestore(&ec->curr_lock, tmp);
|
spin_unlock_irqrestore(&ec->curr_lock, tmp);
|
||||||
ret = ec_poll(ec);
|
ret = ec_poll(ec);
|
||||||
pr_debug(PREFIX "transaction end\n");
|
|
||||||
spin_lock_irqsave(&ec->curr_lock, tmp);
|
spin_lock_irqsave(&ec->curr_lock, tmp);
|
||||||
ec->curr = NULL;
|
ec->curr = NULL;
|
||||||
spin_unlock_irqrestore(&ec->curr_lock, tmp);
|
spin_unlock_irqrestore(&ec->curr_lock, tmp);
|
||||||
|
@ -316,6 +315,7 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
|
||||||
/* check if we received SCI during transaction */
|
/* check if we received SCI during transaction */
|
||||||
ec_check_sci_sync(ec, acpi_ec_read_status(ec));
|
ec_check_sci_sync(ec, acpi_ec_read_status(ec));
|
||||||
if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
|
if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
|
||||||
|
msleep(1);
|
||||||
/* it is safe to enable GPE outside of transaction */
|
/* it is safe to enable GPE outside of transaction */
|
||||||
acpi_enable_gpe(NULL, ec->gpe);
|
acpi_enable_gpe(NULL, ec->gpe);
|
||||||
} else if (t->irq_count > ACPI_EC_STORM_THRESHOLD) {
|
} else if (t->irq_count > ACPI_EC_STORM_THRESHOLD) {
|
||||||
|
@ -323,6 +323,7 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
|
||||||
"transactions will use polling mode\n");
|
"transactions will use polling mode\n");
|
||||||
set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
|
set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
|
||||||
}
|
}
|
||||||
|
pr_debug(PREFIX "transaction end\n");
|
||||||
end:
|
end:
|
||||||
if (ec->global_lock)
|
if (ec->global_lock)
|
||||||
acpi_release_global_lock(glk);
|
acpi_release_global_lock(glk);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user