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

Re: [Xen-devel] [PATCH linux v3 3/9] xen: introduce xen_vcpu_id mapping

Hi Vitaly,

On 07/09/2016 10:07, Vitaly Kuznetsov wrote:
Stefano Stabellini <sstabellini@xxxxxxxxxx> writes:
I don't know that much about cpuid, but the virtual MPIDR is constructed
from the vcpu id right now:

    v->arch.vmpidr = MPIDR_SMP | vcpuid_to_vaffinity(v->vcpu_id);


    static inline register_t vcpuid_to_vaffinity(unsigned int vcpuid)
        register_t vaff;

        vaff = (vcpuid & 0x0f) << MPIDR_LEVEL_SHIFT(0);
        vaff |= ((vcpuid >> 4) & MPIDR_LEVEL_MASK) << MPIDR_LEVEL_SHIFT(1);

        return vaff;

This could work but only in case there is a way to get MPIDR for _other_
cpu (e.g. CPU0 needs to get MPIDR of CPU1 when CPU1 is not yet runnning)
or we'll have to change the machinery of how we bring up secondary CPUs
- e.g. CPUn starts, writes its id somewhere and 'hangs' waiting for CPU0
to set up event channels.

You can get the MPIDR from both the device tree and ACPI. The firmware table is parsed at boot time and the value is stored in cpu_logical_map().


Julien Grall

Xen-devel mailing list



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