Skip to content

Commit

Permalink
Fix ACPI processor power block initialization
Browse files Browse the repository at this point in the history
Properly clear the memory, and set "pr->flags.power" only if a C2 or
deeper state is valid (to make the code match both the comment and
previous behaviour).

This fixes a boot-time lockup reported by Maneesh Soni when using
"maxcpus=1".

Acked-by: Maneesh Soni <maneesh@in.ibm.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Linus Torvalds committed Nov 18, 2005
1 parent 2656c07 commit 2203d6e
Showing 1 changed file with 4 additions and 10 deletions.
14 changes: 4 additions & 10 deletions drivers/acpi/processor_idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -514,8 +514,6 @@ static int acpi_processor_set_power_policy(struct acpi_processor *pr)

static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
{
int i;

ACPI_FUNCTION_TRACE("acpi_processor_get_power_info_fadt");

if (!pr)
Expand All @@ -524,8 +522,7 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
if (!pr->pblk)
return_VALUE(-ENODEV);

for (i = 0; i < ACPI_PROCESSOR_MAX_POWER; i++)
memset(pr->power.states, 0, sizeof(struct acpi_processor_cx));
memset(pr->power.states, 0, sizeof(pr->power.states));

/* if info is obtained from pblk/fadt, type equals state */
pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1;
Expand Down Expand Up @@ -555,13 +552,9 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)

static int acpi_processor_get_power_info_default_c1(struct acpi_processor *pr)
{
int i;

ACPI_FUNCTION_TRACE("acpi_processor_get_power_info_default_c1");

for (i = 0; i < ACPI_PROCESSOR_MAX_POWER; i++)
memset(&(pr->power.states[i]), 0,
sizeof(struct acpi_processor_cx));
memset(pr->power.states, 0, sizeof(pr->power.states));

/* if info is obtained from pblk/fadt, type equals state */
pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1;
Expand Down Expand Up @@ -873,7 +866,8 @@ static int acpi_processor_get_power_info(struct acpi_processor *pr)
for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
if (pr->power.states[i].valid) {
pr->power.count = i;
pr->flags.power = 1;
if (pr->power.states[i].type >= ACPI_STATE_C2)
pr->flags.power = 1;
}
}

Expand Down

0 comments on commit 2203d6e

Please sign in to comment.