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

Re: [Xen-devel] [PATCH v4 01/12] xen/arm: basic PSCI support, implement cpu_on and cpu_off



On Fri, 2013-04-26 at 16:28 +0100, Stefano Stabellini wrote:
> +int do_psci_cpu_on(uint32_t vcpuid, register_t entry_point)
> +{
> +    struct vcpu *v;
> +    struct domain *d = current->domain;
> +    struct vcpu_guest_context *ctxt;
> +    int rc;
> +
> +    if ( (vcpuid < 0) || (vcpuid >= MAX_VIRT_CPUS) )
> +        return PSCI_EINVAL;
> +
> +     if ( vcpuid >= d->max_vcpus || (v = d->vcpu[vcpuid]) == NULL )
> +             return PSCI_EINVAL;
> +
> +     if ( (ctxt = alloc_vcpu_guest_context()) == NULL )
> +             return PSCI_DENIED;
> +
> +     memset(ctxt, 0, sizeof(*ctxt));
> +     ctxt->user_regs.pc64 = (u64) entry_point;
> +     ctxt->sctlr = SCTLR_BASE;
> +     ctxt->ttbr0 = 0;
> +     ctxt->ttbr1 = 0;
> +     ctxt->ttbcr = 0; /* Defined Reset Value */
> +     ctxt->user_regs.cpsr = PSR_GUEST_INIT;
> +     ctxt->flags = VGCF_online;
> +
> +     domain_lock(d);
> +     rc = arch_set_info_guest(v, ctxt);
> +     free_vcpu_guest_context(ctxt);

I'm slightly concerned that there might be other state which needs
clearing when we are brining up a VCPU which has subsequently been
running and blocked via cpu_down. I'm thinking of the sort of things
which vcpu_reset clears up.

However I guess we'll find those out later.

> +     if ( rc < 0 )
> +     {
> +             domain_unlock(d);
> +             return PSCI_DENIED;
> +     }
> +     domain_unlock(d);
> +
> +    vcpu_wake(v);
> +
> +    return PSCI_SUCCESS;
> +}
> +
> +int do_psci_cpu_off(uint32_t power_state)
> +{
> +    struct vcpu *v = current;
> +    if ( !test_and_set_bit(_VPF_down, &v->pause_flags) )
> +        vcpu_sleep_nosync(v);
> +    return PSCI_SUCCESS;

We will return here but not make it back to the guest, because we will
call into the scheduler (vcpu_sleep_nosync makes sure this is the case)
and block.

If cpu_up is subsequently called then it will overwrite the VCPU's guest
state and so it will return to the newly selected address.

Good!

Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.