Re: [PATCH 9/9] arm64: Retrieve stolen time as paravirtualized guest

From: Marc Zyngier
Date: Thu Aug 08 2019 - 11:49:50 EST


On 08/08/2019 16:29, Steven Price wrote:
> On 04/08/2019 10:53, Marc Zyngier wrote:
>> On Fri, 2 Aug 2019 15:50:17 +0100
>> Steven Price <steven.price@xxxxxxx> wrote:
>>
>>> Enable paravirtualization features when running under a hypervisor
>>> supporting the PV_TIME_ST hypercall.
>>>
>>> For each (v)CPU, we ask the hypervisor for the location of a shared
>>> page which the hypervisor will use to report stolen time to us. We set
>>> pv_time_ops to the stolen time function which simply reads the stolen
>>> value from the shared page for a VCPU. We guarantee single-copy
>>> atomicity using READ_ONCE which means we can also read the stolen
>>> time for another VCPU than the currently running one while it is
>>> potentially being updated by the hypervisor.
>>>
>>> Signed-off-by: Steven Price <steven.price@xxxxxxx>
>>> ---
>>> arch/arm64/kernel/Makefile | 1 +
>>> arch/arm64/kernel/kvm.c | 155 +++++++++++++++++++++++++++++++++++++

[...]

>>> +static int __init kvm_guest_init(void)
>>> +{
>>> + int ret = 0;
>>> +
>>> + if (!has_kvm_steal_clock())
>>> + return 0;
>>> +
>>> + ret = kvm_arm_init_stolen_time();
>>> + if (ret)
>>> + return ret;
>>> +
>>> + pv_ops.time.steal_clock = kvm_steal_clock;
>>> +
>>> + static_key_slow_inc(&paravirt_steal_enabled);
>>> + if (steal_acc)
>>> + static_key_slow_inc(&paravirt_steal_rq_enabled);
>>> +
>>> + pr_info("using stolen time PV\n");
>>> +
>>> + return 0;
>>> +}
>>> +early_initcall(kvm_guest_init);
>>
>> Is there any reason why we wouldn't directly call into this rather than
>> using an initcall?
>
> I'm not sure where the direct call would go - any pointers?

I'd be temped to say arch/arm64/kernel/time.c:time_init(), provided that
there is no issue with the CPU hotplug lock (I remember hitting that a
while ago).

M.
--
Jazz is not dead, it just smells funny...