Re: [PATCH v7 08/12] ARM: KVM: World-switch implementation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 12 Mar 2012 02:52:41 -0400, Christoffer Dall <c.dall@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> @@ -236,6 +237,24 @@ int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
>  
>  int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
>  {
> +	unsigned long cpsr;
> +	unsigned long sctlr;
> +
> +
> +	/* Init execution CPSR */
> +	asm volatile ("mrs	%[cpsr], cpsr" :
> +			[cpsr] "=r" (cpsr));
> +	vcpu->arch.regs.cpsr = SVC_MODE | PSR_I_BIT | PSR_F_BIT | PSR_A_BIT |
> +				(cpsr & PSR_E_BIT);
> +
> +	/* Init SCTLR with MMU disabled */
> +	asm volatile ("mrc	p15, 0, %[sctlr], c1, c0, 0" :
> +			[sctlr] "=r" (sctlr));
> +	vcpu->arch.cp15[c1_SCTLR] = sctlr & ~1U;
> +
> +	/* Compute guest MPIDR */
> +	vcpu->arch.cp15[c0_MPIDR] = (read_cpuid_mpidr() & ~0xff)
> +				    | vcpu->vcpu_id;
>  	return 0;
>  }

Hi Christoffer!

        I started cleaning this up, on the theory that we should use the
defined reset values rather than basing them on host values.  Then I
discovered that this is ignored by qemu anyway, which overrides the
values (except for MPIDR: I set that to 0x80000000 | vcpu->vcpu_id,
which seems correct to me).

Should this code be dropped altogether?  Peter points out that once we
add new regs, they *must* be initialized to correct reset values in case
older QEMU knows nothing about them, but for the rest it just seems
confusing...

Thanks,
Rusty.
-- 
  How could I marry someone with more hair than me?  http://baldalex.org
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux