|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] XENPF_set_processor_pminfo XEN_PM_CX overflows states array
On Wed, Mar 07, 2012 at 10:07:55AM -0500, Jan Beulich wrote:
> Is there any reason to move all of these assignments, rather than
> just the assignment of ->count and maybe ->states[ACPI_STATE_C1]?
> Everything else should not get modified anywhere else.
I see no reason indeed, this is how it was before everything went up in
the if() statement.
> To be on the safe side, you should probably also check for
> ACPI_STATE_C0 (and ignore its data), otherwise (other than before
> your patch) ->count would get incremented for this too. So I'd
> suggest converting the if() here to a switch().
Done.
Here is the refreshed patch.
diff -r 8964c223836c xen/arch/x86/acpi/cpu_idle.c
--- a/xen/arch/x86/acpi/cpu_idle.c Tue Mar 06 15:51:33 2012 +0100
+++ b/xen/arch/x86/acpi/cpu_idle.c Wed Mar 07 17:39:34 2012 +0000
@@ -645,12 +645,12 @@
acpi_power->states[ACPI_STATE_C0].valid = 1;
acpi_power->states[ACPI_STATE_C1].valid = 1;
+ acpi_power->cpu = cpu;
+ processor_powers[cpu] = acpi_power;
+ }
acpi_power->count = 2;
acpi_power->safe_state = &acpi_power->states[ACPI_STATE_C1];
- acpi_power->cpu = cpu;
- processor_powers[cpu] = acpi_power;
- }
if ( cpu == 0 )
{
@@ -885,16 +885,20 @@
if ( check_cx(acpi_power, xen_cx) != 0 )
return;
- if ( xen_cx->type == ACPI_STATE_C1 )
+ switch (xen_cx->type)
+ {
+ case ACPI_STATE_C0:
+ return;
+ case ACPI_STATE_C1:
cx = &acpi_power->states[1];
- else
- cx = &acpi_power->states[acpi_power->count];
+ break;
+ default:
+ ASSERT(acpi_power->count < ACPI_PROCESSOR_MAX_POWER);
+ cx = &acpi_power->states[acpi_power->count++];
+ cx->valid = 1;
+ cx->type = xen_cx->type;
+ }
- if ( !cx->valid )
- acpi_power->count++;
-
- cx->valid = 1;
- cx->type = xen_cx->type;
cx->address = xen_cx->reg.address;
switch ( xen_cx->reg.space_id )
--
Eric Chanudet
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |