diff options
author | Paul Mackerras <paulus@samba.org> | 2014-06-01 21:02:59 -0400 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2014-07-28 09:22:17 -0400 |
commit | 699a0ea0823d32030b0666b28ff8633960f7ffa7 (patch) | |
tree | fdfa3e767593f47b66a08313e97cd0fe35b12300 /include/uapi/linux | |
parent | 1f0eeb7e1a88f46afa0f435cf7c34b0c84cf2394 (diff) |
KVM: PPC: Book3S: Controls for in-kernel sPAPR hypercall handling
This provides a way for userspace controls which sPAPR hcalls get
handled in the kernel. Each hcall can be individually enabled or
disabled for in-kernel handling, except for H_RTAS. The exception
for H_RTAS is because userspace can already control whether
individual RTAS functions are handled in-kernel or not via the
KVM_PPC_RTAS_DEFINE_TOKEN ioctl, and because the numeric value for
H_RTAS is out of the normal sequence of hcall numbers.
Hcalls are enabled or disabled using the KVM_ENABLE_CAP ioctl for the
KVM_CAP_PPC_ENABLE_HCALL capability on the file descriptor for the VM.
The args field of the struct kvm_enable_cap specifies the hcall number
in args[0] and the enable/disable flag in args[1]; 0 means disable
in-kernel handling (so that the hcall will always cause an exit to
userspace) and 1 means enable. Enabling or disabling in-kernel
handling of an hcall is effective across the whole VM.
The ability for KVM_ENABLE_CAP to be used on a VM file descriptor
on PowerPC is new, added by this commit. The KVM_CAP_ENABLE_CAP_VM
capability advertises that this ability exists.
When a VM is created, an initial set of hcalls are enabled for
in-kernel handling. The set that is enabled is the set that have
an in-kernel implementation at this point. Any new hcall
implementations from this point onwards should not be added to the
default set without a good reason.
No distinction is made between real-mode and virtual-mode hcall
implementations; the one setting controls them both.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'include/uapi/linux')
-rw-r--r-- | include/uapi/linux/kvm.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index e11d8f170a62..0418b746cb68 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h | |||
@@ -758,6 +758,7 @@ struct kvm_ppc_smmu_info { | |||
758 | #define KVM_CAP_VM_ATTRIBUTES 101 | 758 | #define KVM_CAP_VM_ATTRIBUTES 101 |
759 | #define KVM_CAP_ARM_PSCI_0_2 102 | 759 | #define KVM_CAP_ARM_PSCI_0_2 102 |
760 | #define KVM_CAP_PPC_FIXUP_HCALL 103 | 760 | #define KVM_CAP_PPC_FIXUP_HCALL 103 |
761 | #define KVM_CAP_PPC_ENABLE_HCALL 104 | ||
761 | 762 | ||
762 | #ifdef KVM_CAP_IRQ_ROUTING | 763 | #ifdef KVM_CAP_IRQ_ROUTING |
763 | 764 | ||