72ef5e52b3
Several references got broken due to txt to ReST conversion. Several of them can be automatically fixed with: scripts/documentation-file-ref-check --fix Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org> # hwtracing/coresight/Kconfig Reviewed-by: Paul E. McKenney <paulmck@kernel.org> # memory-barrier.txt Acked-by: Alex Shi <alex.shi@linux.alibaba.com> # translations/zh_CN Acked-by: Federico Vaga <federico.vaga@vaga.pv.it> # translations/it_IT Acked-by: Marc Zyngier <maz@kernel.org> # kvm/arm64 Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Link: https://lore.kernel.org/r/6f919ddb83a33b5f2a63b6b5f0575737bb2b36aa.1586881715.git.mchehab+huawei@kernel.org Signed-off-by: Jonathan Corbet <corbet@lwn.net>
81 lines
3.5 KiB
ReStructuredText
81 lines
3.5 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
Paravirtualized time support for arm64
|
|
======================================
|
|
|
|
Arm specification DEN0057/A defines a standard for paravirtualised time
|
|
support for AArch64 guests:
|
|
|
|
https://developer.arm.com/docs/den0057/a
|
|
|
|
KVM/arm64 implements the stolen time part of this specification by providing
|
|
some hypervisor service calls to support a paravirtualized guest obtaining a
|
|
view of the amount of time stolen from its execution.
|
|
|
|
Two new SMCCC compatible hypercalls are defined:
|
|
|
|
* PV_TIME_FEATURES: 0xC5000020
|
|
* PV_TIME_ST: 0xC5000021
|
|
|
|
These are only available in the SMC64/HVC64 calling convention as
|
|
paravirtualized time is not available to 32 bit Arm guests. The existence of
|
|
the PV_FEATURES hypercall should be probed using the SMCCC 1.1 ARCH_FEATURES
|
|
mechanism before calling it.
|
|
|
|
PV_TIME_FEATURES
|
|
============= ======== ==========
|
|
Function ID: (uint32) 0xC5000020
|
|
PV_call_id: (uint32) The function to query for support.
|
|
Currently only PV_TIME_ST is supported.
|
|
Return value: (int64) NOT_SUPPORTED (-1) or SUCCESS (0) if the relevant
|
|
PV-time feature is supported by the hypervisor.
|
|
============= ======== ==========
|
|
|
|
PV_TIME_ST
|
|
============= ======== ==========
|
|
Function ID: (uint32) 0xC5000021
|
|
Return value: (int64) IPA of the stolen time data structure for this
|
|
VCPU. On failure:
|
|
NOT_SUPPORTED (-1)
|
|
============= ======== ==========
|
|
|
|
The IPA returned by PV_TIME_ST should be mapped by the guest as normal memory
|
|
with inner and outer write back caching attributes, in the inner shareable
|
|
domain. A total of 16 bytes from the IPA returned are guaranteed to be
|
|
meaningfully filled by the hypervisor (see structure below).
|
|
|
|
PV_TIME_ST returns the structure for the calling VCPU.
|
|
|
|
Stolen Time
|
|
-----------
|
|
|
|
The structure pointed to by the PV_TIME_ST hypercall is as follows:
|
|
|
|
+-------------+-------------+-------------+----------------------------+
|
|
| Field | Byte Length | Byte Offset | Description |
|
|
+=============+=============+=============+============================+
|
|
| Revision | 4 | 0 | Must be 0 for version 1.0 |
|
|
+-------------+-------------+-------------+----------------------------+
|
|
| Attributes | 4 | 4 | Must be 0 |
|
|
+-------------+-------------+-------------+----------------------------+
|
|
| Stolen time | 8 | 8 | Stolen time in unsigned |
|
|
| | | | nanoseconds indicating how |
|
|
| | | | much time this VCPU thread |
|
|
| | | | was involuntarily not |
|
|
| | | | running on a physical CPU. |
|
|
+-------------+-------------+-------------+----------------------------+
|
|
|
|
All values in the structure are stored little-endian.
|
|
|
|
The structure will be updated by the hypervisor prior to scheduling a VCPU. It
|
|
will be present within a reserved region of the normal memory given to the
|
|
guest. The guest should not attempt to write into this memory. There is a
|
|
structure per VCPU of the guest.
|
|
|
|
It is advisable that one or more 64k pages are set aside for the purpose of
|
|
these structures and not used for other purposes, this enables the guest to map
|
|
the region using 64k pages and avoids conflicting attributes with other memory.
|
|
|
|
For the user space interface see Documentation/virt/kvm/devices/vcpu.rst
|
|
section "3. GROUP: KVM_ARM_VCPU_PVTIME_CTRL".
|