On Wednesday 07 November 2007 19:56, Zhao Yakui wrote: > Subject: ACPI :Add the _TPC throttling limit for TSS > >From : Zhao Yakui <yakui.zhao@xxxxxxxxx> > > When T-state limit change notification is received, OSPM should > evaluate the _TPC object and change the current T-State according to the new > limit. > > Signed-off-by: Zhao Yakui <yakui.zhao@xxxxxxxxx> > Signed-off-by: Li Shaohua <shaohua.li@xxxxxxxxx> > > --- > drivers/acpi/processor_throttling.c | 49 +++++++++++++++++++++++++++++++++++- > 1 file changed, 48 insertions(+), 1 deletion(-) > > Index: linux-2.6.24-rc1/drivers/acpi/processor_throttling.c > =================================================================== > --- linux-2.6.24-rc1.orig/drivers/acpi/processor_throttling.c > +++ linux-2.6.24-rc1/drivers/acpi/processor_throttling.c > @@ -70,7 +70,54 @@ static int acpi_processor_get_platform_l > > int acpi_processor_tstate_has_changed(struct acpi_processor *pr) > { > - return acpi_processor_get_platform_limit(pr); > + int result = 0; > + int throttling_limit; > + int current_state; > + struct acpi_processor_limit *limit; > + int target_state; > + > + result = acpi_processor_get_platform_limit(pr); > + if (result) { > + /* Throttling Limit is unsupported */ > + return result; > + } > + > + throttling_limit = pr->throttling_platform_limit; > + if (throttling_limit >= pr->throttling.state_count) { > + /* Uncorrect Throttling Limit */ > + return -EINVAL; > + } > + > + current_state = pr->throttling.state; > + if (current_state >= throttling_limit) { probably don't need to check for == here > + /* > + * The current state can meet with the requirement of > + * _TPC limit. But it is reasonable that OSPM changes > + * t-states from high to low for better performance. > + * Of course the limit condition of thermal > + * and user should be considered. > + */ > + limit = &pr->limit; > + target_state = throttling_limit; > + if (limit->thermal.tx > target_state) > + target_state = limit->thermal.tx; > + if (limit->user.tx > target_state) > + target_state = limit->user.tx; > + if (target_state == current_state) { and don't need the corresponding == case here. > + /* unnecessary to change T-state */ > + return 0; > + } > + } else { > + /* > + * If the current state is lower than the limit of _TPC, it > + * will be forced to switch to the throttling state defined > + * by throttling_platfor_limit. > + * Because the previous state meets with the limit condition > + * of thermal and user, it is unnecessary to check it again. > + */ > + target_state = throttling_limit; > + } > + return acpi_processor_set_throttling(pr, target_state); > } > > /* > - To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html