* [PATCH] ACPICA: Fix regression in FADT revision checks
@ 2012-02-23 20:40 Julian Anastasov
2012-02-23 21:55 ` Moore, Robert
2012-02-27 19:50 ` Len Brown
0 siblings, 2 replies; 3+ messages in thread
From: Julian Anastasov @ 2012-02-23 20:40 UTC (permalink / raw)
To: Len Brown; +Cc: linux-acpi
commit 64b3db22c04586997ab4be46dd5a5b99f8a2d390 (2.6.39),
"Remove use of unreliable FADT revision field" causes regression
for old P4 systems because now cst_control and other fields are
not reset to 0.
The effect is that acpi_processor_power_init will notice
cst_control != 0 and a write to CST_CNT register is performed
that should not happen. As result, the system oopses after the
"No _CST, giving up" message, sometimes in acpi_ns_internalize_name,
sometimes in acpi_ns_get_type, usually at random places. May be
during migration to CPU 1 in acpi_processor_get_throttling.
Every one of these settings help to avoid this problem:
- acpi=off
- processor.nocst=1
- maxcpus=1
The fix is to update acpi_gbl_FADT.header.length after
the original value is used to check for old revisions.
Signed-off-by: Julian Anastasov <ja@ssi.bg>
---
drivers/acpi/acpica/tbfadt.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
index c5d8704..4c9c760 100644
--- a/drivers/acpi/acpica/tbfadt.c
+++ b/drivers/acpi/acpica/tbfadt.c
@@ -363,10 +363,6 @@ static void acpi_tb_convert_fadt(void)
u32 address32;
u32 i;
- /* Update the local FADT table header length */
-
- acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
-
/*
* Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary.
* Later code will always use the X 64-bit field. Also, check for an
@@ -408,6 +404,10 @@ static void acpi_tb_convert_fadt(void)
acpi_gbl_FADT.boot_flags = 0;
}
+ /* Update the local FADT table header length */
+
+ acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
+
/*
* Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X"
* generic address structures as necessary. Later code will always use
--
1.7.3.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH] ACPICA: Fix regression in FADT revision checks
2012-02-23 20:40 [PATCH] ACPICA: Fix regression in FADT revision checks Julian Anastasov
@ 2012-02-23 21:55 ` Moore, Robert
2012-02-27 19:50 ` Len Brown
1 sibling, 0 replies; 3+ messages in thread
From: Moore, Robert @ 2012-02-23 21:55 UTC (permalink / raw)
To: Julian Anastasov, Len Brown; +Cc: linux-acpi
Julian,
We will make this change in ACPICA.
Bob
> -----Original Message-----
> From: linux-acpi-owner@vger.kernel.org [mailto:linux-acpi-
> owner@vger.kernel.org] On Behalf Of Julian Anastasov
> Sent: Thursday, February 23, 2012 12:41 PM
> To: Len Brown
> Cc: linux-acpi@vger.kernel.org
> Subject: [PATCH] ACPICA: Fix regression in FADT revision checks
>
> commit 64b3db22c04586997ab4be46dd5a5b99f8a2d390 (2.6.39),
> "Remove use of unreliable FADT revision field" causes regression
> for old P4 systems because now cst_control and other fields are
> not reset to 0.
>
> The effect is that acpi_processor_power_init will notice
> cst_control != 0 and a write to CST_CNT register is performed
> that should not happen. As result, the system oopses after the
> "No _CST, giving up" message, sometimes in acpi_ns_internalize_name,
> sometimes in acpi_ns_get_type, usually at random places. May be
> during migration to CPU 1 in acpi_processor_get_throttling.
>
> Every one of these settings help to avoid this problem:
> - acpi=off
> - processor.nocst=1
> - maxcpus=1
>
> The fix is to update acpi_gbl_FADT.header.length after
> the original value is used to check for old revisions.
>
> Signed-off-by: Julian Anastasov <ja@ssi.bg>
> ---
> drivers/acpi/acpica/tbfadt.c | 8 ++++----
> 1 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/acpi/acpica/tbfadt.c
> b/drivers/acpi/acpica/tbfadt.c
> index c5d8704..4c9c760 100644
> --- a/drivers/acpi/acpica/tbfadt.c
> +++ b/drivers/acpi/acpica/tbfadt.c
> @@ -363,10 +363,6 @@ static void acpi_tb_convert_fadt(void)
> u32 address32;
> u32 i;
>
> - /* Update the local FADT table header length */
> -
> - acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
> -
> /*
> * Expand the 32-bit FACS and DSDT addresses to 64-bit as
> necessary.
> * Later code will always use the X 64-bit field. Also, check for
> an
> @@ -408,6 +404,10 @@ static void acpi_tb_convert_fadt(void)
> acpi_gbl_FADT.boot_flags = 0;
> }
>
> + /* Update the local FADT table header length */
> +
> + acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
> +
> /*
> * Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit
> "X"
> * generic address structures as necessary. Later code will
> always use
> --
> 1.7.3.4
>
> --
> 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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ACPICA: Fix regression in FADT revision checks
2012-02-23 20:40 [PATCH] ACPICA: Fix regression in FADT revision checks Julian Anastasov
2012-02-23 21:55 ` Moore, Robert
@ 2012-02-27 19:50 ` Len Brown
1 sibling, 0 replies; 3+ messages in thread
From: Len Brown @ 2012-02-27 19:50 UTC (permalink / raw)
To: Julian Anastasov; +Cc: linux-acpi
Applied.
Nice find, Julian.
-Len Brown, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-02-27 19:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-23 20:40 [PATCH] ACPICA: Fix regression in FADT revision checks Julian Anastasov
2012-02-23 21:55 ` Moore, Robert
2012-02-27 19:50 ` Len Brown
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.