On 11/29/19 3:31 PM, David Hildenbrand wrote: > On 29.11.19 15:21, Janosch Frank wrote: >> The architecture states that we need to reset local IRQs for all CPU >> resets. Because the old reset interface did not support the normal CPU >> reset we never did that. >> >> Now that we have a new interface, let's properly clear out local IRQs >> and let this commit be a reminder. >> >> Signed-off-by: Janosch Frank >> --- >> arch/s390/kvm/kvm-s390.c | 25 ++++++++++++++++++++++++- >> include/uapi/linux/kvm.h | 7 +++++++ >> 2 files changed, 31 insertions(+), 1 deletion(-) >> >> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c >> index d9e6bf3d54f0..2f74ff46b176 100644 >> --- a/arch/s390/kvm/kvm-s390.c >> +++ b/arch/s390/kvm/kvm-s390.c >> @@ -529,6 +529,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) >> case KVM_CAP_S390_CMMA_MIGRATION: >> case KVM_CAP_S390_AIS: >> case KVM_CAP_S390_AIS_MIGRATION: >> + case KVM_CAP_S390_VCPU_RESETS: >> r = 1; >> break; >> case KVM_CAP_S390_HPAGE_1M: >> @@ -3293,6 +3294,25 @@ static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) >> return 0; >> } >> >> +static int kvm_arch_vcpu_ioctl_reset(struct kvm_vcpu *vcpu, unsigned long type) >> +{ >> + int rc = -EINVAL; >> + >> + switch (type) { >> + case KVM_S390_VCPU_RESET_NORMAL: >> + rc = 0; >> + kvm_clear_async_pf_completion_queue(vcpu); >> + kvm_s390_clear_local_irqs(vcpu); >> + break; >> + case KVM_S390_VCPU_RESET_INITIAL: >> + /* fallthrough */ >> + case KVM_S390_VCPU_RESET_CLEAR: >> + rc = kvm_arch_vcpu_ioctl_initial_reset(vcpu); > > As we now have two interfaces to achieve the same thing (initial reset), > I do wonder if we should simply introduce > > KVM_S390_NORMAL_RESET > KVM_S390_CLEAR_RESET > > instead ... > > Then you can do KVM_S390_NORMAL_RESET for the bugfix and > KVM_S390_CLEAR_RESET later for PV. > > Does anything speak against that? Apart from loosing one more ioctl number probably not