|
@@ -17,6 +17,8 @@
|
|
*
|
|
*
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
|
|
|
+
|
|
#include <linux/cpumask.h>
|
|
#include <linux/cpumask.h>
|
|
#include <linux/cpufreq.h>
|
|
#include <linux/cpufreq.h>
|
|
#include <linux/freezer.h>
|
|
#include <linux/freezer.h>
|
|
@@ -34,8 +36,6 @@
|
|
#include <xen/interface/platform.h>
|
|
#include <xen/interface/platform.h>
|
|
#include <asm/xen/hypercall.h>
|
|
#include <asm/xen/hypercall.h>
|
|
|
|
|
|
-#define DRV_NAME "xen-acpi-processor: "
|
|
|
|
-
|
|
|
|
static int no_hypercall;
|
|
static int no_hypercall;
|
|
MODULE_PARM_DESC(off, "Inhibit the hypercall.");
|
|
MODULE_PARM_DESC(off, "Inhibit the hypercall.");
|
|
module_param_named(off, no_hypercall, int, 0400);
|
|
module_param_named(off, no_hypercall, int, 0400);
|
|
@@ -104,7 +104,7 @@ static int push_cxx_to_hypervisor(struct acpi_processor *_pr)
|
|
set_xen_guest_handle(dst_cx->dp, NULL);
|
|
set_xen_guest_handle(dst_cx->dp, NULL);
|
|
}
|
|
}
|
|
if (!ok) {
|
|
if (!ok) {
|
|
- pr_debug(DRV_NAME "No _Cx for ACPI CPU %u\n", _pr->acpi_id);
|
|
|
|
|
|
+ pr_debug("No _Cx for ACPI CPU %u\n", _pr->acpi_id);
|
|
kfree(dst_cx_states);
|
|
kfree(dst_cx_states);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
@@ -133,7 +133,7 @@ static int push_cxx_to_hypervisor(struct acpi_processor *_pr)
|
|
/* EINVAL means the ACPI ID is incorrect - meaning the ACPI
|
|
/* EINVAL means the ACPI ID is incorrect - meaning the ACPI
|
|
* table is referencing a non-existing CPU - which can happen
|
|
* table is referencing a non-existing CPU - which can happen
|
|
* with broken ACPI tables. */
|
|
* with broken ACPI tables. */
|
|
- pr_err(DRV_NAME "(CX): Hypervisor error (%d) for ACPI CPU%u\n",
|
|
|
|
|
|
+ pr_err("(CX): Hypervisor error (%d) for ACPI CPU%u\n",
|
|
ret, _pr->acpi_id);
|
|
ret, _pr->acpi_id);
|
|
|
|
|
|
kfree(dst_cx_states);
|
|
kfree(dst_cx_states);
|
|
@@ -239,7 +239,7 @@ static int push_pxx_to_hypervisor(struct acpi_processor *_pr)
|
|
dst_perf->flags |= XEN_PX_PSD;
|
|
dst_perf->flags |= XEN_PX_PSD;
|
|
|
|
|
|
if (dst_perf->flags != (XEN_PX_PSD | XEN_PX_PSS | XEN_PX_PCT | XEN_PX_PPC)) {
|
|
if (dst_perf->flags != (XEN_PX_PSD | XEN_PX_PSS | XEN_PX_PCT | XEN_PX_PPC)) {
|
|
- pr_warn(DRV_NAME "ACPI CPU%u missing some P-state data (%x), skipping.\n",
|
|
|
|
|
|
+ pr_warn("ACPI CPU%u missing some P-state data (%x), skipping\n",
|
|
_pr->acpi_id, dst_perf->flags);
|
|
_pr->acpi_id, dst_perf->flags);
|
|
ret = -ENODEV;
|
|
ret = -ENODEV;
|
|
goto err_free;
|
|
goto err_free;
|
|
@@ -265,8 +265,8 @@ static int push_pxx_to_hypervisor(struct acpi_processor *_pr)
|
|
/* EINVAL means the ACPI ID is incorrect - meaning the ACPI
|
|
/* EINVAL means the ACPI ID is incorrect - meaning the ACPI
|
|
* table is referencing a non-existing CPU - which can happen
|
|
* table is referencing a non-existing CPU - which can happen
|
|
* with broken ACPI tables. */
|
|
* with broken ACPI tables. */
|
|
- pr_warn(DRV_NAME "(_PXX): Hypervisor error (%d) for ACPI CPU%u\n",
|
|
|
|
- ret, _pr->acpi_id);
|
|
|
|
|
|
+ pr_warn("(_PXX): Hypervisor error (%d) for ACPI CPU%u\n",
|
|
|
|
+ ret, _pr->acpi_id);
|
|
err_free:
|
|
err_free:
|
|
if (!IS_ERR_OR_NULL(dst_states))
|
|
if (!IS_ERR_OR_NULL(dst_states))
|
|
kfree(dst_states);
|
|
kfree(dst_states);
|
|
@@ -318,7 +318,7 @@ static unsigned int __init get_max_acpi_id(void)
|
|
max_acpi_id = max(info->acpi_id, max_acpi_id);
|
|
max_acpi_id = max(info->acpi_id, max_acpi_id);
|
|
}
|
|
}
|
|
max_acpi_id *= 2; /* Slack for CPU hotplug support. */
|
|
max_acpi_id *= 2; /* Slack for CPU hotplug support. */
|
|
- pr_debug(DRV_NAME "Max ACPI ID: %u\n", max_acpi_id);
|
|
|
|
|
|
+ pr_debug("Max ACPI ID: %u\n", max_acpi_id);
|
|
return max_acpi_id;
|
|
return max_acpi_id;
|
|
}
|
|
}
|
|
/*
|
|
/*
|
|
@@ -365,15 +365,14 @@ read_acpi_id(acpi_handle handle, u32 lvl, void *context, void **rv)
|
|
/* There are more ACPI Processor objects than in x2APIC or MADT.
|
|
/* There are more ACPI Processor objects than in x2APIC or MADT.
|
|
* This can happen with incorrect ACPI SSDT declerations. */
|
|
* This can happen with incorrect ACPI SSDT declerations. */
|
|
if (acpi_id > nr_acpi_bits) {
|
|
if (acpi_id > nr_acpi_bits) {
|
|
- pr_debug(DRV_NAME "We only have %u, trying to set %u\n",
|
|
|
|
|
|
+ pr_debug("We only have %u, trying to set %u\n",
|
|
nr_acpi_bits, acpi_id);
|
|
nr_acpi_bits, acpi_id);
|
|
return AE_OK;
|
|
return AE_OK;
|
|
}
|
|
}
|
|
/* OK, There is a ACPI Processor object */
|
|
/* OK, There is a ACPI Processor object */
|
|
__set_bit(acpi_id, acpi_id_present);
|
|
__set_bit(acpi_id, acpi_id_present);
|
|
|
|
|
|
- pr_debug(DRV_NAME "ACPI CPU%u w/ PBLK:0x%lx\n", acpi_id,
|
|
|
|
- (unsigned long)pblk);
|
|
|
|
|
|
+ pr_debug("ACPI CPU%u w/ PBLK:0x%lx\n", acpi_id, (unsigned long)pblk);
|
|
|
|
|
|
status = acpi_evaluate_object(handle, "_CST", NULL, &buffer);
|
|
status = acpi_evaluate_object(handle, "_CST", NULL, &buffer);
|
|
if (ACPI_FAILURE(status)) {
|
|
if (ACPI_FAILURE(status)) {
|
|
@@ -476,7 +475,7 @@ static int xen_upload_processor_pm_data(void)
|
|
unsigned int i;
|
|
unsigned int i;
|
|
int rc = 0;
|
|
int rc = 0;
|
|
|
|
|
|
- pr_info(DRV_NAME "Uploading Xen processor PM info\n");
|
|
|
|
|
|
+ pr_info("Uploading Xen processor PM info\n");
|
|
|
|
|
|
for_each_possible_cpu(i) {
|
|
for_each_possible_cpu(i) {
|
|
struct acpi_processor *_pr;
|
|
struct acpi_processor *_pr;
|
|
@@ -523,7 +522,7 @@ static int __init xen_acpi_processor_init(void)
|
|
|
|
|
|
acpi_perf_data = alloc_percpu(struct acpi_processor_performance);
|
|
acpi_perf_data = alloc_percpu(struct acpi_processor_performance);
|
|
if (!acpi_perf_data) {
|
|
if (!acpi_perf_data) {
|
|
- pr_debug(DRV_NAME "Memory allocation error for acpi_perf_data.\n");
|
|
|
|
|
|
+ pr_debug("Memory allocation error for acpi_perf_data\n");
|
|
kfree(acpi_ids_done);
|
|
kfree(acpi_ids_done);
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
}
|
|
}
|