diff mbox

[v2] ACPI: Leave Bus Master Arbitration enabled for suspend/resume

Message ID 20120708194519.GA8807@burratino (mailing list archive)
State New, archived
Headers show

Commit Message

Jonathan Nieder July 8, 2012, 7:45 p.m. UTC
This is an old suspend/resume lockup fix:

	commit 2780cc4660e1
	Author: Len Brown <len.brown@intel.com>
	Date:   Thu Dec 23 13:43:30 2004 -0500

	    [ACPI] Fix suspend/resume lockup issue
	    by leaving Bus Master Arbitration enabled.
	    The ACPI spec mandates it be disabled only for C3.

	    http://bugzilla.kernel.org/show_bug.cgi?id=3599

	    Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
	    Signed-off-by: Len Brown <len.brown@intel.com>

The bug snuck back in in commit 2feec47d4c5f (ACPICA: ACPI 5: Support
for new FADT SleepStatus, SleepControl registers, 2012-02-14),
presumably by copy/pasting a copy of the code without that fix for the
legacy case.

On affected machines, after that commit, the machine locks up hard on
resume from suspend.  The same fix as seven years ago still works.

Addresses <https://bugzilla.kernel.org/show_bug.cgi?id=43641>.

Reported-bisected-and-tested-by: Octavio Alvarez <alvarezp@alvarezp.com>
Reported-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Cc: <stable@vger.kernel.org> # 3.4
---
Rafael J. Wysocki wrote:

> Can you please repost it with _both_ the changelog and the patch?

Here you go.  Sorry about that.

 drivers/acpi/acpica/hwsleep.c |   22 ----------------------
 1 file changed, 22 deletions(-)

Comments

Rafael Wysocki July 8, 2012, 8:08 p.m. UTC | #1
On Sunday, July 08, 2012, Jonathan Nieder wrote:
> This is an old suspend/resume lockup fix:
> 
> 	commit 2780cc4660e1
> 	Author: Len Brown <len.brown@intel.com>
> 	Date:   Thu Dec 23 13:43:30 2004 -0500
> 
> 	    [ACPI] Fix suspend/resume lockup issue
> 	    by leaving Bus Master Arbitration enabled.
> 	    The ACPI spec mandates it be disabled only for C3.
> 
> 	    http://bugzilla.kernel.org/show_bug.cgi?id=3599
> 
> 	    Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
> 	    Signed-off-by: Len Brown <len.brown@intel.com>
> 
> The bug snuck back in in commit 2feec47d4c5f (ACPICA: ACPI 5: Support
> for new FADT SleepStatus, SleepControl registers, 2012-02-14),
> presumably by copy/pasting a copy of the code without that fix for the
> legacy case.
> 
> On affected machines, after that commit, the machine locks up hard on
> resume from suspend.  The same fix as seven years ago still works.
> 
> Addresses <https://bugzilla.kernel.org/show_bug.cgi?id=43641>.
> 
> Reported-bisected-and-tested-by: Octavio Alvarez <alvarezp@alvarezp.com>
> Reported-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
> Cc: <stable@vger.kernel.org> # 3.4
> ---
> Rafael J. Wysocki wrote:
> 
> > Can you please repost it with _both_ the changelog and the patch?
> 
> Here you go.  Sorry about that.

Thanks!

Applied to the linux-next branch of the linux-pm.git tree.

I think I'll push it for v3.6, since the bug is serious and is a regression.

Bob, I think we should incorporate this into ACPICA, shouldn't we?

Rafael


>  drivers/acpi/acpica/hwsleep.c |   22 ----------------------
>  1 file changed, 22 deletions(-)
> 
> diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c
> index 0ed85cac3231..615996a36bed 100644
> --- a/drivers/acpi/acpica/hwsleep.c
> +++ b/drivers/acpi/acpica/hwsleep.c
> @@ -95,18 +95,6 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state, u8 flags)
>  		return_ACPI_STATUS(status);
>  	}
>  
> -	if (sleep_state != ACPI_STATE_S5) {
> -		/*
> -		 * Disable BM arbitration. This feature is contained within an
> -		 * optional register (PM2 Control), so ignore a BAD_ADDRESS
> -		 * exception.
> -		 */
> -		status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 1);
> -		if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
> -			return_ACPI_STATUS(status);
> -		}
> -	}
> -
>  	/*
>  	 * 1) Disable/Clear all GPEs
>  	 * 2) Enable all wakeup GPEs
> @@ -364,16 +352,6 @@ acpi_status acpi_hw_legacy_wake(u8 sleep_state, u8 flags)
>  				    [ACPI_EVENT_POWER_BUTTON].
>  				    status_register_id, ACPI_CLEAR_STATUS);
>  
> -	/*
> -	 * Enable BM arbitration. This feature is contained within an
> -	 * optional register (PM2 Control), so ignore a BAD_ADDRESS
> -	 * exception.
> -	 */
> -	status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 0);
> -	if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
> -		return_ACPI_STATUS(status);
> -	}
> -
>  	acpi_hw_execute_sleep_method(METHOD_PATHNAME__SST, ACPI_SST_WORKING);
>  	return_ACPI_STATUS(status);
>  }
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Moore, Robert July 8, 2012, 8:33 p.m. UTC | #2
> Bob, I think we should incorporate this into ACPICA, shouldn't we?
> 
> Rafael

We are looking at it. Probably one of the Linux/ACPICA divergences that end up causing us grief.


> -----Original Message-----
> From: linux-acpi-owner@vger.kernel.org [mailto:linux-acpi-
> owner@vger.kernel.org] On Behalf Of Rafael J. Wysocki
> Sent: Sunday, July 08, 2012 1:08 PM
> To: Jonathan Nieder; Moore, Robert
> Cc: Octavio Alvarez; Adrian Knoth; Shaohua Li; Brown, Len; linux-
> acpi@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v2] ACPI: Leave Bus Master Arbitration enabled for
> suspend/resume
> 
> On Sunday, July 08, 2012, Jonathan Nieder wrote:
> > This is an old suspend/resume lockup fix:
> >
> > 	commit 2780cc4660e1
> > 	Author: Len Brown <len.brown@intel.com>
> > 	Date:   Thu Dec 23 13:43:30 2004 -0500
> >
> > 	    [ACPI] Fix suspend/resume lockup issue
> > 	    by leaving Bus Master Arbitration enabled.
> > 	    The ACPI spec mandates it be disabled only for C3.
> >
> > 	    http://bugzilla.kernel.org/show_bug.cgi?id=3599
> >
> > 	    Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
> > 	    Signed-off-by: Len Brown <len.brown@intel.com>
> >
> > The bug snuck back in in commit 2feec47d4c5f (ACPICA: ACPI 5: Support
> > for new FADT SleepStatus, SleepControl registers, 2012-02-14),
> > presumably by copy/pasting a copy of the code without that fix for
> the
> > legacy case.
> >
> > On affected machines, after that commit, the machine locks up hard on
> > resume from suspend.  The same fix as seven years ago still works.
> >
> > Addresses <https://bugzilla.kernel.org/show_bug.cgi?id=43641>.
> >
> > Reported-bisected-and-tested-by: Octavio Alvarez
> > <alvarezp@alvarezp.com>
> > Reported-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
> > Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
> > Cc: <stable@vger.kernel.org> # 3.4
> > ---
> > Rafael J. Wysocki wrote:
> >
> > > Can you please repost it with _both_ the changelog and the patch?
> >
> > Here you go.  Sorry about that.
> 
> Thanks!
> 
> Applied to the linux-next branch of the linux-pm.git tree.
> 
> I think I'll push it for v3.6, since the bug is serious and is a
> regression.
> 
> Bob, I think we should incorporate this into ACPICA, shouldn't we?
> 
> Rafael
> 
> 
> >  drivers/acpi/acpica/hwsleep.c |   22 ----------------------
> >  1 file changed, 22 deletions(-)
> >
> > diff --git a/drivers/acpi/acpica/hwsleep.c
> > b/drivers/acpi/acpica/hwsleep.c index 0ed85cac3231..615996a36bed
> > 100644
> > --- a/drivers/acpi/acpica/hwsleep.c
> > +++ b/drivers/acpi/acpica/hwsleep.c
> > @@ -95,18 +95,6 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state,
> u8 flags)
> >  		return_ACPI_STATUS(status);
> >  	}
> >
> > -	if (sleep_state != ACPI_STATE_S5) {
> > -		/*
> > -		 * Disable BM arbitration. This feature is contained within
> an
> > -		 * optional register (PM2 Control), so ignore a BAD_ADDRESS
> > -		 * exception.
> > -		 */
> > -		status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE,
> 1);
> > -		if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
> > -			return_ACPI_STATUS(status);
> > -		}
> > -	}
> > -
> >  	/*
> >  	 * 1) Disable/Clear all GPEs
> >  	 * 2) Enable all wakeup GPEs
> > @@ -364,16 +352,6 @@ acpi_status acpi_hw_legacy_wake(u8 sleep_state,
> u8 flags)
> >  				    [ACPI_EVENT_POWER_BUTTON].
> >  				    status_register_id, ACPI_CLEAR_STATUS);
> >
> > -	/*
> > -	 * Enable BM arbitration. This feature is contained within an
> > -	 * optional register (PM2 Control), so ignore a BAD_ADDRESS
> > -	 * exception.
> > -	 */
> > -	status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 0);
> > -	if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
> > -		return_ACPI_STATUS(status);
> > -	}
> > -
> >  	acpi_hw_execute_sleep_method(METHOD_PATHNAME__SST,
> ACPI_SST_WORKING);
> >  	return_ACPI_STATUS(status);
> >  }
> >
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi"
> in the body of a message to majordomo@vger.kernel.org More majordomo
> info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Octavio Alvarez July 8, 2012, 8:43 p.m. UTC | #3
On Sun, 08 Jul 2012 13:08:19 -0700, Rafael J. Wysocki <rjw@sisk.pl> wrote:

>> This is an old suspend/resume lockup fix:
>>
>> 	commit 2780cc4660e1
>> 	Author: Len Brown <len.brown@intel.com>
>> 	Date:   Thu Dec 23 13:43:30 2004 -0500
>>
>> 	    [ACPI] Fix suspend/resume lockup issue
>> 	    by leaving Bus Master Arbitration enabled.
>> 	    The ACPI spec mandates it be disabled only for C3.
>>
>> The bug snuck back in in commit 2feec47d4c5f (ACPICA: ACPI 5: Support
>> for new FADT SleepStatus, SleepControl registers, 2012-02-14),
>> presumably by copy/pasting a copy of the code without that fix for the
>> legacy case.
>>
>> On affected machines, after that commit, the machine locks up hard on
>> resume from suspend.  The same fix as seven years ago still works.
>>
> Applied to the linux-next branch of the linux-pm.git tree.
>
> I think I'll push it for v3.6, since the bug is serious and is a  
> regression.
>
> Bob, I think we should incorporate this into ACPICA, shouldn't we?

This bug affects since 3.4. I'd like to ask for this to be applied in the
stable branches too, considering Jonathan's comments that this is a replay
of an old and proven fix.

(I don't know if 3.3 is affected too. I know 3.2 is not affected by this.)

Thanks.
Rafael Wysocki July 8, 2012, 8:48 p.m. UTC | #4
On Sunday, July 08, 2012, Moore, Robert wrote:
> > Bob, I think we should incorporate this into ACPICA, shouldn't we?
> > 
> > Rafael
> 
> We are looking at it. Probably one of the Linux/ACPICA divergences that end
> up causing us grief.

Well, in this particular case it seems that what Linux did before commit
2feec47d4c5f (ACPICA: ACPI 5: Support for new FADT SleepStatus, SleepControl
registers) was actually correct, though.

Thanks,
Rafael


> > -----Original Message-----
> > From: linux-acpi-owner@vger.kernel.org [mailto:linux-acpi-
> > owner@vger.kernel.org] On Behalf Of Rafael J. Wysocki
> > Sent: Sunday, July 08, 2012 1:08 PM
> > To: Jonathan Nieder; Moore, Robert
> > Cc: Octavio Alvarez; Adrian Knoth; Shaohua Li; Brown, Len; linux-
> > acpi@vger.kernel.org; linux-kernel@vger.kernel.org
> > Subject: Re: [PATCH v2] ACPI: Leave Bus Master Arbitration enabled for
> > suspend/resume
> > 
> > On Sunday, July 08, 2012, Jonathan Nieder wrote:
> > > This is an old suspend/resume lockup fix:
> > >
> > > 	commit 2780cc4660e1
> > > 	Author: Len Brown <len.brown@intel.com>
> > > 	Date:   Thu Dec 23 13:43:30 2004 -0500
> > >
> > > 	    [ACPI] Fix suspend/resume lockup issue
> > > 	    by leaving Bus Master Arbitration enabled.
> > > 	    The ACPI spec mandates it be disabled only for C3.
> > >
> > > 	    http://bugzilla.kernel.org/show_bug.cgi?id=3599
> > >
> > > 	    Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
> > > 	    Signed-off-by: Len Brown <len.brown@intel.com>
> > >
> > > The bug snuck back in in commit 2feec47d4c5f (ACPICA: ACPI 5: Support
> > > for new FADT SleepStatus, SleepControl registers, 2012-02-14),
> > > presumably by copy/pasting a copy of the code without that fix for
> > the
> > > legacy case.
> > >
> > > On affected machines, after that commit, the machine locks up hard on
> > > resume from suspend.  The same fix as seven years ago still works.
> > >
> > > Addresses <https://bugzilla.kernel.org/show_bug.cgi?id=43641>.
> > >
> > > Reported-bisected-and-tested-by: Octavio Alvarez
> > > <alvarezp@alvarezp.com>
> > > Reported-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
> > > Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
> > > Cc: <stable@vger.kernel.org> # 3.4
> > > ---
> > > Rafael J. Wysocki wrote:
> > >
> > > > Can you please repost it with _both_ the changelog and the patch?
> > >
> > > Here you go.  Sorry about that.
> > 
> > Thanks!
> > 
> > Applied to the linux-next branch of the linux-pm.git tree.
> > 
> > I think I'll push it for v3.6, since the bug is serious and is a
> > regression.
> > 
> > Bob, I think we should incorporate this into ACPICA, shouldn't we?
> > 
> > Rafael
> > 
> > 
> > >  drivers/acpi/acpica/hwsleep.c |   22 ----------------------
> > >  1 file changed, 22 deletions(-)
> > >
> > > diff --git a/drivers/acpi/acpica/hwsleep.c
> > > b/drivers/acpi/acpica/hwsleep.c index 0ed85cac3231..615996a36bed
> > > 100644
> > > --- a/drivers/acpi/acpica/hwsleep.c
> > > +++ b/drivers/acpi/acpica/hwsleep.c
> > > @@ -95,18 +95,6 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state,
> > u8 flags)
> > >  		return_ACPI_STATUS(status);
> > >  	}
> > >
> > > -	if (sleep_state != ACPI_STATE_S5) {
> > > -		/*
> > > -		 * Disable BM arbitration. This feature is contained within
> > an
> > > -		 * optional register (PM2 Control), so ignore a BAD_ADDRESS
> > > -		 * exception.
> > > -		 */
> > > -		status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE,
> > 1);
> > > -		if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
> > > -			return_ACPI_STATUS(status);
> > > -		}
> > > -	}
> > > -
> > >  	/*
> > >  	 * 1) Disable/Clear all GPEs
> > >  	 * 2) Enable all wakeup GPEs
> > > @@ -364,16 +352,6 @@ acpi_status acpi_hw_legacy_wake(u8 sleep_state,
> > u8 flags)
> > >  				    [ACPI_EVENT_POWER_BUTTON].
> > >  				    status_register_id, ACPI_CLEAR_STATUS);
> > >
> > > -	/*
> > > -	 * Enable BM arbitration. This feature is contained within an
> > > -	 * optional register (PM2 Control), so ignore a BAD_ADDRESS
> > > -	 * exception.
> > > -	 */
> > > -	status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 0);
> > > -	if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
> > > -		return_ACPI_STATUS(status);
> > > -	}
> > > -
> > >  	acpi_hw_execute_sleep_method(METHOD_PATHNAME__SST,
> > ACPI_SST_WORKING);
> > >  	return_ACPI_STATUS(status);
> > >  }
> > >
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-acpi"
> > in the body of a message to majordomo@vger.kernel.org More majordomo
> > info at  http://vger.kernel.org/majordomo-info.html
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafael Wysocki July 8, 2012, 8:53 p.m. UTC | #5
On Sunday, July 08, 2012, Octavio Alvarez wrote:
> On Sun, 08 Jul 2012 13:08:19 -0700, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> 
> >> This is an old suspend/resume lockup fix:
> >>
> >> 	commit 2780cc4660e1
> >> 	Author: Len Brown <len.brown@intel.com>
> >> 	Date:   Thu Dec 23 13:43:30 2004 -0500
> >>
> >> 	    [ACPI] Fix suspend/resume lockup issue
> >> 	    by leaving Bus Master Arbitration enabled.
> >> 	    The ACPI spec mandates it be disabled only for C3.
> >>
> >> The bug snuck back in in commit 2feec47d4c5f (ACPICA: ACPI 5: Support
> >> for new FADT SleepStatus, SleepControl registers, 2012-02-14),
> >> presumably by copy/pasting a copy of the code without that fix for the
> >> legacy case.
> >>
> >> On affected machines, after that commit, the machine locks up hard on
> >> resume from suspend.  The same fix as seven years ago still works.
> >>
> > Applied to the linux-next branch of the linux-pm.git tree.
> >
> > I think I'll push it for v3.6, since the bug is serious and is a  
> > regression.
> >
> > Bob, I think we should incorporate this into ACPICA, shouldn't we?
> 
> This bug affects since 3.4. I'd like to ask for this to be applied in the
> stable branches too, considering Jonathan's comments that this is a replay
> of an old and proven fix.
> 
> (I don't know if 3.3 is affected too. I know 3.2 is not affected by this.)

The problem seems to have been introduced during the 3.4 development cycle,
so v3.3 shouldn't be affected by it too.

Thanks,
Rafael
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c
index 0ed85cac3231..615996a36bed 100644
--- a/drivers/acpi/acpica/hwsleep.c
+++ b/drivers/acpi/acpica/hwsleep.c
@@ -95,18 +95,6 @@  acpi_status acpi_hw_legacy_sleep(u8 sleep_state, u8 flags)
 		return_ACPI_STATUS(status);
 	}
 
-	if (sleep_state != ACPI_STATE_S5) {
-		/*
-		 * Disable BM arbitration. This feature is contained within an
-		 * optional register (PM2 Control), so ignore a BAD_ADDRESS
-		 * exception.
-		 */
-		status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 1);
-		if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
-			return_ACPI_STATUS(status);
-		}
-	}
-
 	/*
 	 * 1) Disable/Clear all GPEs
 	 * 2) Enable all wakeup GPEs
@@ -364,16 +352,6 @@  acpi_status acpi_hw_legacy_wake(u8 sleep_state, u8 flags)
 				    [ACPI_EVENT_POWER_BUTTON].
 				    status_register_id, ACPI_CLEAR_STATUS);
 
-	/*
-	 * Enable BM arbitration. This feature is contained within an
-	 * optional register (PM2 Control), so ignore a BAD_ADDRESS
-	 * exception.
-	 */
-	status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 0);
-	if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
-		return_ACPI_STATUS(status);
-	}
-
 	acpi_hw_execute_sleep_method(METHOD_PATHNAME__SST, ACPI_SST_WORKING);
 	return_ACPI_STATUS(status);
 }