Paravirtualized sched support for arm64¶
KVM/arm64 provides some hypervisor service calls to support a paravirtualized sched.
Some SMCCC compatible hypercalls are defined:
PV_SCHED_FEATURES: 0xC5000090
PV_SCHED_IPA_INIT: 0xC5000091
PV_SCHED_IPA_RELEASE: 0xC5000092
The existence of the PV_SCHED hypercall should be probed using the SMCCC 1.1 ARCH_FEATURES mechanism before calling it.
- PV_SCHED_FEATURES
Function ID:
(uint32)
0xC5000090
PV_call_id:
(uint32)
The function to query for support.
Return value:
(int64)
NOT_SUPPORTED (-1) or SUCCESS (0) if the relevant PV-sched feature is supported by the hypervisor.
- PV_SCHED_IPA_INIT
Function ID:
(uint32)
0xC5000091
Return value:
(int64)
NOT_SUPPORTED (-1) or SUCCESS (0) if the IPA of this vCPU’s PV data structure is shared to the hypervisor.
- PV_SCHED_IPA_RELEASE
Function ID:
(uint32)
0xC5000092
Return value:
(int64)
NOT_SUPPORTED (-1) or SUCCESS (0) if the IPA of this vCPU’s PV data structure is released.
PV sched state¶
The structure pointed to by the PV_SCHED_IPA hypercall is as follows:
Field |
Byte Length |
Byte Offset |
Description |
|---|---|---|---|
preempted |
4 |
0 |
Indicates that the vCPU that owns this struct is running or not. Non-zero values mean the vCPU has been preempted. Zero means the vCPU is not preempted. |
The preempted field will be updated to 0 by the hypervisor prior to scheduling a vCPU. When the vCPU is scheduled out, the preempted field will be updated to 1 by the hypervisor.