acpi_status status = AE_OK;
struct acpi_processor *pr;
+ processor_extcntl_init();
pr = acpi_driver_data(device);
acpi_processor_power_init(pr, device);
- result = processor_extcntl_init(pr);
+ result = processor_extcntl_prepare(pr);
if (result)
goto end;
return ret;
}
+/*
+ * External control logic can decide to grab full or part of physical
+ * processor control bits. Take a VMM for example, physical processors
+ * are owned by VMM and thus existence information like hotplug is
+ * always required to be notified to VMM. Similar is processor idle
+ * state which is also necessarily controlled by VMM. But for other
+ * control bits like performance/throttle states, VMM may choose to
+ * control or not upon its own policy.
+ */
+void processor_extcntl_init(void)
+{
+ if (!processor_extcntl_ops)
+ arch_acpi_processor_init_extcntl(&processor_extcntl_ops);
+}
+
/*
* This is called from ACPI processor init, and targeted to hold
* some tricky housekeeping jobs to satisfy external control model.
* and performance state. Those information may be not available
* if splitting from dom0 control logic like cpufreq driver.
*/
-int __cpuinit processor_extcntl_init(struct acpi_processor *pr)
+int processor_extcntl_prepare(struct acpi_processor *pr)
{
/* parse cstate dependency information */
if (processor_pm_external())
if (processor_pmperf_external())
processor_extcntl_get_performance(pr);
- /*
- * External control logic can decide to grab full or part of physical
- * processor control bits. Take a VMM for example, physical processors
- * are owned by VMM and thus existence information like hotplug is
- * always required to be notified to VMM. Similar is processor idle
- * state which is also necessarily controlled by VMM. But for other
- * control bits like performance/throttle states, VMM may choose to
- * control or not upon its own policy.
- */
- if (!processor_extcntl_ops)
- arch_acpi_processor_init_extcntl(&processor_extcntl_ops);
-
return 0;
}
extern int processor_notify_external(struct acpi_processor *pr,
int event, int type);
-extern int processor_extcntl_init(struct acpi_processor *pr);
+extern void processor_extcntl_init(void);
+extern int processor_extcntl_prepare(struct acpi_processor *pr);
extern int acpi_processor_get_performance_info(struct acpi_processor *pr);
extern int acpi_processor_get_psd(struct acpi_processor *pr);
void arch_acpi_processor_init_extcntl(const struct processor_extcntl_ops **);
{
return 0;
}
-static inline int processor_extcntl_init(struct acpi_processor *pr)
+static inline void processor_extcntl_init(void) {}
+static inline int processor_extcntl_prepare(struct acpi_processor *pr)
{
return 0;
}