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.
Showing the changes to include/uapi/linux (1 of 10 files). Show all
Unified · Split
| @@ -758,6 +758,7 @@ struct kvm_ppc_smmu_info { · 757 unmodified lines | ||
| 758 | 758 | #define KVM_CAP_VM_ATTRIBUTES 101 |
| 759 | 759 | #define KVM_CAP_ARM_PSCI_0_2 102 |
| 760 | 760 | #define KVM_CAP_PPC_FIXUP_HCALL 103 |
| 761 | +#define KVM_CAP_PPC_ENABLE_HCALL 104 | |
| 761 | 762 | |
| 762 | 763 | #ifdef KVM_CAP_IRQ_ROUTING |
| 763 | 764 | |