cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pvtime.rst (3638B)


      1.. SPDX-License-Identifier: GPL-2.0
      2
      3Paravirtualized time support for arm64
      4======================================
      5
      6Arm specification DEN0057/A defines a standard for paravirtualised time
      7support for AArch64 guests:
      8
      9https://developer.arm.com/docs/den0057/a
     10
     11KVM/arm64 implements the stolen time part of this specification by providing
     12some hypervisor service calls to support a paravirtualized guest obtaining a
     13view of the amount of time stolen from its execution.
     14
     15Two new SMCCC compatible hypercalls are defined:
     16
     17* PV_TIME_FEATURES: 0xC5000020
     18* PV_TIME_ST:       0xC5000021
     19
     20These are only available in the SMC64/HVC64 calling convention as
     21paravirtualized time is not available to 32 bit Arm guests. The existence of
     22the PV_TIME_FEATURES hypercall should be probed using the SMCCC 1.1
     23ARCH_FEATURES mechanism before calling it.
     24
     25PV_TIME_FEATURES
     26    ============= ========    ==========
     27    Function ID:  (uint32)    0xC5000020
     28    PV_call_id:   (uint32)    The function to query for support.
     29                              Currently only PV_TIME_ST is supported.
     30    Return value: (int64)     NOT_SUPPORTED (-1) or SUCCESS (0) if the relevant
     31                              PV-time feature is supported by the hypervisor.
     32    ============= ========    ==========
     33
     34PV_TIME_ST
     35    ============= ========    ==========
     36    Function ID:  (uint32)    0xC5000021
     37    Return value: (int64)     IPA of the stolen time data structure for this
     38                              VCPU. On failure:
     39                              NOT_SUPPORTED (-1)
     40    ============= ========    ==========
     41
     42The IPA returned by PV_TIME_ST should be mapped by the guest as normal memory
     43with inner and outer write back caching attributes, in the inner shareable
     44domain. A total of 16 bytes from the IPA returned are guaranteed to be
     45meaningfully filled by the hypervisor (see structure below).
     46
     47PV_TIME_ST returns the structure for the calling VCPU.
     48
     49Stolen Time
     50-----------
     51
     52The structure pointed to by the PV_TIME_ST hypercall is as follows:
     53
     54+-------------+-------------+-------------+----------------------------+
     55| Field       | Byte Length | Byte Offset | Description                |
     56+=============+=============+=============+============================+
     57| Revision    |      4      |      0      | Must be 0 for version 1.0  |
     58+-------------+-------------+-------------+----------------------------+
     59| Attributes  |      4      |      4      | Must be 0                  |
     60+-------------+-------------+-------------+----------------------------+
     61| Stolen time |      8      |      8      | Stolen time in unsigned    |
     62|             |             |             | nanoseconds indicating how |
     63|             |             |             | much time this VCPU thread |
     64|             |             |             | was involuntarily not      |
     65|             |             |             | running on a physical CPU. |
     66+-------------+-------------+-------------+----------------------------+
     67
     68All values in the structure are stored little-endian.
     69
     70The structure will be updated by the hypervisor prior to scheduling a VCPU. It
     71will be present within a reserved region of the normal memory given to the
     72guest. The guest should not attempt to write into this memory. There is a
     73structure per VCPU of the guest.
     74
     75It is advisable that one or more 64k pages are set aside for the purpose of
     76these structures and not used for other purposes, this enables the guest to map
     77the region using 64k pages and avoids conflicting attributes with other memory.
     78
     79For the user space interface see Documentation/virt/kvm/devices/vcpu.rst
     80section "3. GROUP: KVM_ARM_VCPU_PVTIME_CTRL".