Make s390 support KVM_ENABLE_CAP.
Unified · Split
| @@ -913,7 +913,7 @@ documentation when it pops into existence). · 912 unmodified lines | ||
| 913 | 913 | 4.37 KVM_ENABLE_CAP |
| 914 | 914 | |
| 915 | 915 | Capability: KVM_CAP_ENABLE_CAP |
| 916 | −Architectures: ppc | |
| 916 | +Architectures: ppc, s390 | |
| 917 | 917 | Type: vcpu ioctl |
| 918 | 918 | Parameters: struct kvm_enable_cap (in) |
| 919 | 919 | Returns: 0 on success; -1 on error |
| @@ -140,6 +140,7 @@ int kvm_dev_ioctl_check_extension(long ext) · 139 unmodified lines | ||
| 140 | 140 | #endif |
| 141 | 141 | case KVM_CAP_SYNC_REGS: |
| 142 | 142 | case KVM_CAP_ONE_REG: |
| 143 | + case KVM_CAP_ENABLE_CAP: | |
| 143 | 144 | r = 1; |
| 144 | 145 | break; |
| 145 | 146 | case KVM_CAP_NR_VCPUS: |
| @@ -808,6 +809,22 @@ int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr) · 662 unmodified lines | ||
| 808 | 809 | return 0; |
| 809 | 810 | } |
| 810 | 811 | |
| 812 | +static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu, | |
| 813 | + struct kvm_enable_cap *cap) | |
| 814 | +{ | |
| 815 | + int r; | |
| 816 | + | |
| 817 | + if (cap->flags) | |
| 818 | + return -EINVAL; | |
| 819 | + | |
| 820 | + switch (cap->cap) { | |
| 821 | + default: | |
| 822 | + r = -EINVAL; | |
| 823 | + break; | |
| 824 | + } | |
| 825 | + return r; | |
| 826 | +} | |
| 827 | + | |
| 811 | 828 | long kvm_arch_vcpu_ioctl(struct file *filp, |
| 812 | 829 | unsigned int ioctl, unsigned long arg) |
| 813 | 830 | { |
| @@ -894,6 +911,15 @@ long kvm_arch_vcpu_ioctl(struct file *filp, · 80 unmodified lines | ||
| 894 | 911 | r = 0; |
| 895 | 912 | break; |
| 896 | 913 | } |
| 914 | + case KVM_ENABLE_CAP: | |
| 915 | + { | |
| 916 | + struct kvm_enable_cap cap; | |
| 917 | + r = -EFAULT; | |
| 918 | + if (copy_from_user(&cap, argp, sizeof(cap))) | |
| 919 | + break; | |
| 920 | + r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap); | |
| 921 | + break; | |
| 922 | + } | |
| 897 | 923 | default: |
| 898 | 924 | r = -ENOTTY; |
| 899 | 925 | } |