diff mbox

[4/4] ACPI: EC: Don't count a SCI interrupt as a false one

Message ID 1351561961-23821-4-git-send-email-feng.tang@intel.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Feng Tang Oct. 30, 2012, 1:52 a.m. UTC
Currently when advance_transaction() is called in EC interrupt handler,
if there is nothing driver can do with the interrupt, it will be taken
as a false one.

But this is not always true, as there may be a SCI EC interrupt fired
during normal read/write operation, which should not be counted as a
false one. This patch fixes the problem.

Signed-off-by: Feng Tang <feng.tang@intel.com>
---
 drivers/acpi/ec.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Rafael Wysocki Nov. 2, 2012, 12:48 p.m. UTC | #1
On Tuesday, October 30, 2012 09:52:41 AM Feng Tang wrote:
> Currently when advance_transaction() is called in EC interrupt handler,
> if there is nothing driver can do with the interrupt, it will be taken
> as a false one.
> 
> But this is not always true, as there may be a SCI EC interrupt fired
> during normal read/write operation, which should not be counted as a
> false one. This patch fixes the problem.
> 
> Signed-off-by: Feng Tang <feng.tang@intel.com>

Applied to the linux-next branch of the linux-pm.git tree as v3.8 material.

Thanks,
Rafael



> ---
>  drivers/acpi/ec.c |    8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
> index f272880..6bdea02 100644
> --- a/drivers/acpi/ec.c
> +++ b/drivers/acpi/ec.c
> @@ -198,9 +198,13 @@ static void advance_transaction(struct acpi_ec *ec, u8 status)
>  		t->done = true;
>  	goto unlock;
>  err:
> -	/* false interrupt, state didn't change */
> -	if (in_interrupt())
> +	/*
> +	 * If SCI bit is set, then don't think it's a false IRQ
> +	 * otherwise will take a not handled IRQ as a false one.
> +	 */
> +	if (in_interrupt() && !(status & ACPI_EC_FLAG_SCI))
>  		++t->irq_count;
> +
>  unlock:
>  	spin_unlock_irqrestore(&ec->lock, flags);
>  }
>
diff mbox

Patch

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index f272880..6bdea02 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -198,9 +198,13 @@  static void advance_transaction(struct acpi_ec *ec, u8 status)
 		t->done = true;
 	goto unlock;
 err:
-	/* false interrupt, state didn't change */
-	if (in_interrupt())
+	/*
+	 * If SCI bit is set, then don't think it's a false IRQ
+	 * otherwise will take a not handled IRQ as a false one.
+	 */
+	if (in_interrupt() && !(status & ACPI_EC_FLAG_SCI))
 		++t->irq_count;
+
 unlock:
 	spin_unlock_irqrestore(&ec->lock, flags);
 }