From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC129C07E9B for ; Tue, 6 Jul 2021 14:35:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B64CB6135C for ; Tue, 6 Jul 2021 14:35:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232350AbhGFOiY (ORCPT ); Tue, 6 Jul 2021 10:38:24 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:41237 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232261AbhGFOiW (ORCPT ); Tue, 6 Jul 2021 10:38:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1625582143; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L/tN+7auaRQ4j3gGQQVbtbHULR6FDj/ZnvpQ9ApaAA0=; b=W0FIR+7Q9orp5yr/LGxeMQeGHX/uxqGPpx4Fish2uloE2oErnJ7Rpy0kaD/L2gaB36IS8l xA+ex1esqg/7lWRrgzVYqB0lsWOqhF0MqnEkbxO/O8hExvhMOq7k68oKXJBR4gb4anRZ1T WE3pC5f2DtyagdIIk+/seTarQzQIZWo= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-19-s02Iwsv7NSiiWWTwJiFZpQ-1; Tue, 06 Jul 2021 09:45:13 -0400 X-MC-Unique: s02Iwsv7NSiiWWTwJiFZpQ-1 Received: by mail-ej1-f69.google.com with SMTP id q8-20020a170906a088b02904be5f536463so5834446ejy.0 for ; Tue, 06 Jul 2021 06:45:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=L/tN+7auaRQ4j3gGQQVbtbHULR6FDj/ZnvpQ9ApaAA0=; b=qH8bP7FfPfyO3NIBj90LiTsKqrHXKB9eiExcohR13ocKawa51patCOhr4xitkiWhlq ecOYDaZ/qIjyvSGyjp+M4rdO1Xb4J1qMaEAxb7LOu2bUUOG1E4DoIO4XoqrB/UYc+3Xi j0slrzbc+FiAgnSG66m0H0oNqA2xoQeK6x0GIWrfM5mpHjH47EN7PmDXLh/L83azWHl9 w86xWV4C8/wUN7l7wS97T6esRDGHaQ0Yf77IcuBCecG9PhVr1qxTdyBXRB4CwHl4tMPu tu2RvWiCCvBtz2OJdT5BE0O3T7/cLN56e9TvsBddpFqgpXJj3dwMn/8PngaFm+7vQtBJ NAsQ== X-Gm-Message-State: AOAM531/kXRWRVMB8FOR8osg0ME9Pt+dp6bNAnAixZMi4/7kWsyTzBDz ykSz4dN+fwsgQFgXkDqSQCP1c4DKkOVNhJuBmpvitK59GrSQzCE54X8m3uctSWrp0LPsZ/jd2fR f/M3EPzmunJ3CA4cL+REpP+md X-Received: by 2002:a17:906:2844:: with SMTP id s4mr18562464ejc.263.1625579112465; Tue, 06 Jul 2021 06:45:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvP5PJngSaVi8a1gurvl/kRFC/ktOYyC+zcQJS653+dvBM8kyMH/tfEXevqDTM2dmCu5Bpnw== X-Received: by 2002:a17:906:2844:: with SMTP id s4mr18562439ejc.263.1625579112243; Tue, 06 Jul 2021 06:45:12 -0700 (PDT) Received: from ?IPv6:2001:b07:6468:f312:c8dd:75d4:99ab:290a? ([2001:b07:6468:f312:c8dd:75d4:99ab:290a]) by smtp.gmail.com with ESMTPSA id cz9sm3252955edb.76.2021.07.06.06.45.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 06 Jul 2021 06:45:11 -0700 (PDT) Subject: Re: [RFC PATCH v2 17/69] KVM: Add infrastructure and macro to mark VM as bugged To: isaku.yamahata@intel.com, Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H . Peter Anvin" , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , erdemaktas@google.com, Connor Kuehl , Sean Christopherson , x86@kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: isaku.yamahata@gmail.com, Sean Christopherson References: <3a0998645c328bf0895f1290e61821b70f048549.1625186503.git.isaku.yamahata@intel.com> From: Paolo Bonzini Message-ID: <1b69fd9b-fbe9-5fbc-83ed-4805e022e17d@redhat.com> Date: Tue, 6 Jul 2021 15:45:09 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <3a0998645c328bf0895f1290e61821b70f048549.1625186503.git.isaku.yamahata@intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/07/21 00:04, isaku.yamahata@intel.com wrote: > From: Sean Christopherson > > Signed-off-by: Sean Christopherson > Signed-off-by: Isaku Yamahata > --- > include/linux/kvm_host.h | 29 ++++++++++++++++++++++++++++- > virt/kvm/kvm_main.c | 10 +++++----- > 2 files changed, 33 insertions(+), 6 deletions(-) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index 8583ed3ff344..09618f8a1338 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -149,6 +149,7 @@ static inline bool is_error_page(struct page *page) > #define KVM_REQ_MMU_RELOAD (1 | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP) > #define KVM_REQ_UNBLOCK 2 > #define KVM_REQ_UNHALT 3 > +#define KVM_REQ_VM_BUGGED (4 | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP) > #define KVM_REQUEST_ARCH_BASE 8 > > #define KVM_ARCH_REQ_FLAGS(nr, flags) ({ \ > @@ -585,6 +586,8 @@ struct kvm { > pid_t userspace_pid; > unsigned int max_halt_poll_ns; > u32 dirty_ring_size; > + > + bool vm_bugged; > }; > > #define kvm_err(fmt, ...) \ > @@ -613,6 +616,31 @@ struct kvm { > #define vcpu_err(vcpu, fmt, ...) \ > kvm_err("vcpu%i " fmt, (vcpu)->vcpu_id, ## __VA_ARGS__) > > +bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req); > +static inline void kvm_vm_bugged(struct kvm *kvm) > +{ > + kvm->vm_bugged = true; > + kvm_make_all_cpus_request(kvm, KVM_REQ_VM_BUGGED); > +} > + > +#define KVM_BUG(cond, kvm, fmt...) \ > +({ \ > + int __ret = (cond); \ > + \ > + if (WARN_ONCE(__ret && !(kvm)->vm_bugged, fmt)) \ > + kvm_vm_bugged(kvm); \ > + unlikely(__ret); \ > +}) > + > +#define KVM_BUG_ON(cond, kvm) \ > +({ \ > + int __ret = (cond); \ > + \ > + if (WARN_ON_ONCE(__ret && !(kvm)->vm_bugged)) \ > + kvm_vm_bugged(kvm); \ > + unlikely(__ret); \ > +}) > + > static inline bool kvm_dirty_log_manual_protect_and_init_set(struct kvm *kvm) > { > return !!(kvm->manual_dirty_log_protect & KVM_DIRTY_LOG_INITIALLY_SET); > @@ -930,7 +958,6 @@ void *kvm_mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc); > bool kvm_make_vcpus_request_mask(struct kvm *kvm, unsigned int req, > struct kvm_vcpu *except, > unsigned long *vcpu_bitmap, cpumask_var_t tmp); > -bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req); > bool kvm_make_all_cpus_request_except(struct kvm *kvm, unsigned int req, > struct kvm_vcpu *except); > bool kvm_make_cpus_request_mask(struct kvm *kvm, unsigned int req, > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 751d1f6890b0..dc752d0bd3ec 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -3435,7 +3435,7 @@ static long kvm_vcpu_ioctl(struct file *filp, > struct kvm_fpu *fpu = NULL; > struct kvm_sregs *kvm_sregs = NULL; > > - if (vcpu->kvm->mm != current->mm) > + if (vcpu->kvm->mm != current->mm || vcpu->kvm->vm_bugged) > return -EIO; > > if (unlikely(_IOC_TYPE(ioctl) != KVMIO)) > @@ -3641,7 +3641,7 @@ static long kvm_vcpu_compat_ioctl(struct file *filp, > void __user *argp = compat_ptr(arg); > int r; > > - if (vcpu->kvm->mm != current->mm) > + if (vcpu->kvm->mm != current->mm || vcpu->kvm->vm_bugged) > return -EIO; > > switch (ioctl) { > @@ -3707,7 +3707,7 @@ static long kvm_device_ioctl(struct file *filp, unsigned int ioctl, > { > struct kvm_device *dev = filp->private_data; > > - if (dev->kvm->mm != current->mm) > + if (dev->kvm->mm != current->mm || dev->kvm->vm_bugged) > return -EIO; > > switch (ioctl) { > @@ -3991,7 +3991,7 @@ static long kvm_vm_ioctl(struct file *filp, > void __user *argp = (void __user *)arg; > int r; > > - if (kvm->mm != current->mm) > + if (kvm->mm != current->mm || kvm->vm_bugged) > return -EIO; > switch (ioctl) { > case KVM_CREATE_VCPU: > @@ -4189,7 +4189,7 @@ static long kvm_vm_compat_ioctl(struct file *filp, > struct kvm *kvm = filp->private_data; > int r; > > - if (kvm->mm != current->mm) > + if (kvm->mm != current->mm || kvm->vm_bugged) > return -EIO; > switch (ioctl) { > case KVM_GET_DIRTY_LOG: { > Reviewed-by: Paolo Bonzini