Skip to content

Commit

Permalink
xen/acpi: allow xen-acpi-processor driver to load on Xen 4.7
Browse files Browse the repository at this point in the history
As of Xen 4.7 PV CPUID doesn't expose either of CPUID[1].ECX[7] and
CPUID[0x80000007].EDX[7] anymore, causing the driver to fail to load on
both Intel and AMD systems. Doing any kind of hardware capability
checks in the driver as a prerequisite was wrong anyway: With the
hypervisor being in charge, all such checking should be done by it. If
ACPI data gets uploaded despite some missing capability, the hypervisor
is free to ignore part or all of that data.

Ditch the entire check_prereq() function, and do the only valid check
(xen_initial_domain()) in the caller in its place.

Signed-off-by: Jan Beulich <[email protected]>
Cc: <[email protected]>
Signed-off-by: David Vrabel <[email protected]>
  • Loading branch information
jbeulich authored and David Vrabel committed Jul 8, 2016
1 parent e5a7947 commit 6f2d9d9
Showing 1 changed file with 3 additions and 32 deletions.
35 changes: 3 additions & 32 deletions drivers/xen/xen-acpi-processor.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,36 +423,7 @@ static int check_acpi_ids(struct acpi_processor *pr_backup)

return 0;
}
static int __init check_prereq(void)
{
struct cpuinfo_x86 *c = &cpu_data(0);

if (!xen_initial_domain())
return -ENODEV;

if (!acpi_gbl_FADT.smi_command)
return -ENODEV;

if (c->x86_vendor == X86_VENDOR_INTEL) {
if (!cpu_has(c, X86_FEATURE_EST))
return -ENODEV;

return 0;
}
if (c->x86_vendor == X86_VENDOR_AMD) {
/* Copied from powernow-k8.h, can't include ../cpufreq/powernow
* as we get compile warnings for the static functions.
*/
#define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
#define USE_HW_PSTATE 0x00000080
u32 eax, ebx, ecx, edx;
cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, &edx);
if ((edx & USE_HW_PSTATE) != USE_HW_PSTATE)
return -ENODEV;
return 0;
}
return -ENODEV;
}
/* acpi_perf_data is a pointer to percpu data. */
static struct acpi_processor_performance __percpu *acpi_perf_data;

Expand Down Expand Up @@ -509,10 +480,10 @@ struct notifier_block xen_acpi_processor_resume_nb = {
static int __init xen_acpi_processor_init(void)
{
unsigned int i;
int rc = check_prereq();
int rc;

if (rc)
return rc;
if (!xen_initial_domain())
return -ENODEV;

nr_acpi_bits = get_max_acpi_id() + 1;
acpi_ids_done = kcalloc(BITS_TO_LONGS(nr_acpi_bits), sizeof(unsigned long), GFP_KERNEL);
Expand Down

0 comments on commit 6f2d9d9

Please sign in to comment.