KVM: PPC: e500: Don't hardcode PIR=0
The hardcoded behavior prevents proper SMP support. user space shall specify the vcpu's PIR as the vcpu id. Signed-off-by: Scott Wood <scottwood@freescale.com> Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
303b7c97e3
commit
841741f23b
|
@ -761,7 +761,7 @@ static void get_sregs_arch206(struct kvm_vcpu *vcpu,
|
||||||
{
|
{
|
||||||
sregs->u.e.features |= KVM_SREGS_E_ARCH206;
|
sregs->u.e.features |= KVM_SREGS_E_ARCH206;
|
||||||
|
|
||||||
sregs->u.e.pir = 0;
|
sregs->u.e.pir = vcpu->vcpu_id;
|
||||||
sregs->u.e.mcsrr0 = vcpu->arch.mcsrr0;
|
sregs->u.e.mcsrr0 = vcpu->arch.mcsrr0;
|
||||||
sregs->u.e.mcsrr1 = vcpu->arch.mcsrr1;
|
sregs->u.e.mcsrr1 = vcpu->arch.mcsrr1;
|
||||||
sregs->u.e.decar = vcpu->arch.decar;
|
sregs->u.e.decar = vcpu->arch.decar;
|
||||||
|
@ -774,7 +774,7 @@ static int set_sregs_arch206(struct kvm_vcpu *vcpu,
|
||||||
if (!(sregs->u.e.features & KVM_SREGS_E_ARCH206))
|
if (!(sregs->u.e.features & KVM_SREGS_E_ARCH206))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (sregs->u.e.pir != 0)
|
if (sregs->u.e.pir != vcpu->vcpu_id)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
vcpu->arch.mcsrr0 = sregs->u.e.mcsrr0;
|
vcpu->arch.mcsrr0 = sregs->u.e.mcsrr0;
|
||||||
|
|
|
@ -71,9 +71,6 @@ int kvmppc_core_vcpu_setup(struct kvm_vcpu *vcpu)
|
||||||
vcpu->arch.pvr = mfspr(SPRN_PVR);
|
vcpu->arch.pvr = mfspr(SPRN_PVR);
|
||||||
vcpu_e500->svr = mfspr(SPRN_SVR);
|
vcpu_e500->svr = mfspr(SPRN_SVR);
|
||||||
|
|
||||||
/* Since booke kvm only support one core, update all vcpus' PIR to 0 */
|
|
||||||
vcpu->vcpu_id = 0;
|
|
||||||
|
|
||||||
vcpu->arch.cpu_type = KVM_CPU_E500V2;
|
vcpu->arch.cpu_type = KVM_CPU_E500V2;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue