Skip to content

Commit

Permalink
ARM: KVM: iterate over all CPUs for CPU compatibility check
Browse files Browse the repository at this point in the history
kvm_target_cpus() checks the compatibility of the used CPU with
KVM, which is currently limited to ARM Cortex-A15 cores.
However by calling it only once on any random CPU it assumes that
all cores are the same, which is not necessarily the case (for example
in Big.Little).

[ I cut some of the commit message and changed the formatting of the
  code slightly to pass checkpatch and look more like the rest of the
  kvm/arm init code - Christoffer ]

Signed-off-by: Andre Przywara <andre.przywara@linaro.org>
Signed-off-by: Christoffer Dall <cdall@cs.columbia.edu>
  • Loading branch information
Andre Przywara authored and Christoffer Dall committed Apr 29, 2013
1 parent df75921 commit d4e071c
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions arch/arm/kvm/arm.c
Original file line number Diff line number Diff line change
Expand Up @@ -947,21 +947,30 @@ static int init_hyp_mode(void)
return err;
}

static void check_kvm_target_cpu(void *ret)
{
*(int *)ret = kvm_target_cpu();
}

/**
* Initialize Hyp-mode and memory mappings on all CPUs.
*/
int kvm_arch_init(void *opaque)
{
int err;
int ret, cpu;

if (!is_hyp_mode_available()) {
kvm_err("HYP mode not available\n");
return -ENODEV;
}

if (kvm_target_cpu() < 0) {
kvm_err("Target CPU not supported!\n");
return -ENODEV;
for_each_online_cpu(cpu) {
smp_call_function_single(cpu, check_kvm_target_cpu, &ret, 1);
if (ret < 0) {
kvm_err("Error, CPU %d not supported!\n", cpu);
return -ENODEV;
}
}

err = init_hyp_mode();
Expand Down

0 comments on commit d4e071c

Please sign in to comment.