diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 2b65e8c9d75f327b330147ae1aa92f23abc9dde0..92a37f230cac6fe94dacb567bbd9b1c49fa055be 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -627,7 +627,7 @@ acpi_processor_notify (
 			pr->performance_platform_limit);
 		break;
 	case ACPI_PROCESSOR_NOTIFY_POWER:
-		/* TBD */
+		acpi_processor_cst_has_changed(pr);
 		acpi_bus_generate_event(device, event, 0);
 		break;
 	default:
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 4883ecb738a85a302983755f634dd937fae7d051..5ca0c957ed682eb6c60087baa65f0e39251b5097 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -778,6 +778,32 @@ int acpi_processor_get_power_info (
 	return_VALUE(0);
 }
 
+int acpi_processor_cst_has_changed (struct acpi_processor *pr)
+{
+ 	int			result = 0;
+
+	ACPI_FUNCTION_TRACE("acpi_processor_cst_has_changed");
+
+	if (!pr)
+ 		return_VALUE(-EINVAL);
+
+	if (errata.smp) {
+		return_VALUE(-ENODEV);
+	}
+
+	/* Fall back to the default idle loop */
+	pm_idle = pm_idle_save;
+	pm_idle_save = NULL;
+
+	pr->flags.power = 0;
+	result = acpi_processor_get_power_info(pr);
+	if (pr->flags.power == 1) {
+		pm_idle_save = pm_idle;
+		pm_idle = acpi_processor_idle;
+	}
+
+	return_VALUE(result);
+}
 
 /* proc interface */
 
@@ -859,3 +885,4 @@ struct file_operations acpi_processor_power_fops = {
 	.llseek		= seq_lseek,
 	.release	= single_release,
 };
+
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
index 780e2ada96d82694f2dd34ccf9db82f01ce90188..97e86952dbe58517e67607877a4ca2dabd3325f3 100644
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -215,6 +215,7 @@ void acpi_processor_idle (void);
 int acpi_processor_get_power_info (struct acpi_processor *pr);
 extern struct file_operations acpi_processor_power_fops;
 int no_c2c3(struct dmi_system_id *id);
+int acpi_processor_cst_has_changed (struct acpi_processor *pr);
 
 /* in processor_thermal.c */
 int acpi_processor_get_limit_info (struct acpi_processor *pr);