Re: [PATCH 08/26] KVM: PPC: Add PV guest critical sections

Avi Kivity
2010-06-27T10:03:57Z

On 06/26/2010 02:24 AM, Alexander Graf wrote:
> When running in hooked code we need a way to disable interrupts without
> clobbering any interrupts or exiting out to the hypervisor.
>
> To achieve this, we have an additional critical field in the shared page. If
> that field is equal to the r1 register of the guest, it tells the hypervisor
> that we're in such a critical section and thus may not receive any interrupts.
>
>
> --- a/arch/powerpc/kvm/book3s.c
> +++ b/arch/powerpc/kvm/book3s.c
> @@ -251,14 +251,25 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
> int deliver = 1;
> int vec = 0;
> ulong flags = 0ULL;
> + ulong crit_raw = vcpu->arch.shared->critical;
> + ulong crit_r1 = kvmppc_get_gpr(vcpu, 1);
> + bool crit;
> +
> + /* Truncate crit indicators in 32 bit mode */
> + if (!(vcpu->arch.shared->msr& MSR_SF)) {
> + crit_raw&= 0xffffffff;
> + crit_r1&= 0xffffffff;
> + }
> +
> + crit = (crit_raw == crit_r1);
>

I think you need to qualify that for supervisor mode only. Otherwise
guest userspace can guess the value of shared->critical and disable
interrupts.

--
error compiling committee.c: too many arguments to function