forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'kvmarm/kvm-arm64/stolen-time' into kvma…
…rm-master/next
- Loading branch information
Showing
36 changed files
with
774 additions
and
207 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
.. 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.txt | ||
section "3. GROUP: KVM_ARM_VCPU_PVTIME_CTRL". |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
/* Copyright (C) 2019 Arm Ltd. */ | ||
|
||
#ifndef __ASM_PVCLOCK_ABI_H | ||
#define __ASM_PVCLOCK_ABI_H | ||
|
||
/* The below structure is defined in ARM DEN0057A */ | ||
|
||
struct pvclock_vcpu_stolen_time { | ||
__le32 revision; | ||
__le32 attributes; | ||
__le64 stolen_time; | ||
/* Structure must be 64 byte aligned, pad to that size */ | ||
u8 padding[48]; | ||
} __packed; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.