On Tue, Jan 07, 2020 at 10:26:10AM -0800, Ben Gardon wrote:
On Tue, Jan 7, 2020 at 7:23 AM Andrew Jones drjones@redhat.com wrote:
On Mon, Dec 16, 2019 at 01:38:58PM -0800, Ben Gardon wrote:
In preparation for supporting multiple vCPUs in the demand paging test, pass arguments to the vCPU instead of syncing globals to it.
This will only work if we don't spill parameters onto the stack and all data we want to pass fit in registers.
That's a great point. I'll see about using globals and deriving the cpu ID to look up args. In your pseudocode below I see you use arch_get_cpu_id, but I don't believe this function exists in selftests and I don't have the knowledge off the top of my head to implement it for s390 and aarch64. Do you have any pointers for implementing such a function?
Yeah, I never posted the patches that I used this approach on. For aarch64 my "arch_get_cpu_id", which was actually just open-coded in guest_code, was something similar to this
/* We only look at the first two affinity levels for now. */ int arch_get_cpu_id(void) { uint64_t mpidr_el1, aff1, aff0; asm volatile("mrs %0, mpidr_el1" : "=r" (mpidr_el1)); aff0 = mpidr_el1 & 0xf; aff1 = (mpidr_el1 >> 8) & 0xff; return aff1 * 16 + aff0; }
Thanks, drew