Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp8683906rwi; Tue, 25 Oct 2022 09:32:15 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6k4xCN9yjkewPfu19+0ojCLPtue2iEd8UMuuyRPhfZVH5TEO9ioxeuKUcJUYb4jXTiIyQR X-Received: by 2002:a05:6402:5cb:b0:452:e416:2bc4 with SMTP id n11-20020a05640205cb00b00452e4162bc4mr36042532edx.114.1666715535220; Tue, 25 Oct 2022 09:32:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666715535; cv=none; d=google.com; s=arc-20160816; b=VQMNagkSAGUbmfYeuMR4mmXMCVO16uhY8qXhGpPjCB7DK8FGn8XC7bXE7/hfAuahfn tfG9pw21DsJW5UV314rD8xCkjp5IKgzLoxo9TsWsQXwLbAQtO7C5x0yihMrT80kq7ALW MWs7k/ZbiWVmyShTR9ab5E7dJHQ+177lUGM/doE8Qzd76Xe4MbbnOuZuVTOBfMWsfTub +ferXnLCEAjy0EocI9iumWAe77PTEdH1RGpPIJqLyz56aP5Wrd1cyFZbUCS/08/2/dxf 3FCMMluAJ4KZ5lavQGN+jHwtUfdixEQ/DFUoXeb32ru5W8LmsGt2PZIY9hU8rkIebwvS sbjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=0XpehjN5/x0DVN6iNfQRcpwLRiHoknqSMi2DnBppXC4=; b=RmV1xsqIqw98TJ/+mLF6JCI3iFMrD4V/5jAbBtxg/XpMrLa/PVwJIbWrCzS84eJ3f4 0AyWx0R9L40Umov6Hf7Qv1fbT7Zuz62LohzuBKf7S3WKPlexDAlpw9VcLurp264bScLB A6HEh5cCTfMWAau9NSknU2iYfCxs6K87+V1jN9dOJlEXeAnSKx2BPdlOJU6xHsPTil3i zUidpQQTehegAe4HTWvFU8mDv3PHbxFebKHlMoJ9c+Tw88XA/pwCuWUZo6wC7rTtXK5Q FwGXo4fwBma1bcqD42Mq49ELs8c7tvrLtqDdqZycsH5JpqCmu/JlyHeD/ISL6Yt57SSN eEMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=VTegWoMo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v3-20020a50d583000000b00461f7a7a797si2924073edi.292.2022.10.25.09.31.49; Tue, 25 Oct 2022 09:32:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=VTegWoMo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233303AbiJYQRn (ORCPT + 99 others); Tue, 25 Oct 2022 12:17:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40580 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233283AbiJYQRg (ORCPT ); Tue, 25 Oct 2022 12:17:36 -0400 Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01BF41004B0 for ; Tue, 25 Oct 2022 09:17:35 -0700 (PDT) Received: by mail-pj1-x1030.google.com with SMTP id s22-20020a17090a075600b002130d2ad62aso5669308pje.2 for ; Tue, 25 Oct 2022 09:17:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=0XpehjN5/x0DVN6iNfQRcpwLRiHoknqSMi2DnBppXC4=; b=VTegWoMotPt2w65LyX5l1RfBFsrVct34KfNYTQclV1Ej8EpD0Aka6DhRqFqKKPkKYF dx/pMAu3a28hbLyvQafo+3Wa+3mCeMIJhF5AVwXriBoAuAKBIFTkfyEZGt3R9F9Nhi41 fj+nZajeXUNM6G2OtS9Tq69y8zmBsHay0qJIu6C8XDsQnxvChs2zKzG+iHzQM3CemyK7 rQ1rbv2xpfwgbK/hJO81F9yW0YMzSmbw6UXv81EZOUicFWm2Vd2NYV/mOhEHD+opJjML IMkSJQctzTXXbBbp4cSFHMIFqYkomesQTa0hCcAW0LxBYbC7hn0bynG64p0PfcuPbXmb uofw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0XpehjN5/x0DVN6iNfQRcpwLRiHoknqSMi2DnBppXC4=; b=OJg6H0PdltE1w7//mWapQQPbYjI3l2fATvuYmIk6ClIeLInvXuEG2LmZMLbf6LhF3N 5c/rjASzSK81fyH1ejDS32kBl0f1pmSN5wjpqfl6ZhSALwZPWk3ePJIc15b4sgacO8pZ 9dDMo3OPl0atpd0MeBYQbmuXLshg0dfhsKyVskof+6XFG6Cs7yDbKO9bsUrFm0uKuKt/ x1mv599HdBgszRXEY/n5votYcGQzYw2Ow4pHDqSZIik4cp0mHpvObhL4uOH5rgZDMcWi ZPnKoBb7Hcg5U6r7t/Ijv9rIrI3HusYzteLq0hQxy5c9CXH4tGcB/BTB/0YC4iZFCgYs ppwA== X-Gm-Message-State: ACrzQf2mH+7VZ2AZMX6FSsMpjLcqKRaSeO/WN2aXPHCW1m+a2eQH0xHB hDQuXwzn0kyxHeD078JdLLPIOw== X-Received: by 2002:a17:903:41c7:b0:182:a32f:4db5 with SMTP id u7-20020a17090341c700b00182a32f4db5mr39384792ple.22.1666714654279; Tue, 25 Oct 2022 09:17:34 -0700 (PDT) Received: from google.com (7.104.168.34.bc.googleusercontent.com. [34.168.104.7]) by smtp.gmail.com with ESMTPSA id b3-20020a1709027e0300b00186881e1feasm1399643plm.112.2022.10.25.09.17.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Oct 2022 09:17:33 -0700 (PDT) Date: Tue, 25 Oct 2022 16:17:30 +0000 From: Sean Christopherson To: Peter Maydell Cc: Chao Peng , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, linux-doc@vger.kernel.org, qemu-devel@nongnu.org, Paolo Bonzini , Jonathan Corbet , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H . Peter Anvin" , Hugh Dickins , Jeff Layton , "J . Bruce Fields" , Andrew Morton , Shuah Khan , Mike Rapoport , Steven Price , "Maciej S . Szmigiero" , Vlastimil Babka , Vishal Annapurve , Yu Zhang , "Kirill A . Shutemov" , luto@kernel.org, jun.nakajima@intel.com, dave.hansen@intel.com, ak@linux.intel.com, david@redhat.com, aarcange@redhat.com, ddutile@redhat.com, dhildenb@redhat.com, Quentin Perret , tabba@google.com, Michael Roth , mhocko@suse.com, Muchun Song , wei.w.wang@intel.com Subject: Re: [PATCH v9 3/8] KVM: Add KVM_EXIT_MEMORY_FAULT exit Message-ID: References: <20221025151344.3784230-1-chao.p.peng@linux.intel.com> <20221025151344.3784230-4-chao.p.peng@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Oct 25, 2022, Peter Maydell wrote: > On Tue, 25 Oct 2022 at 16:21, Chao Peng wrote: > > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst > > index f3fa75649a78..975688912b8c 100644 > > --- a/Documentation/virt/kvm/api.rst > > +++ b/Documentation/virt/kvm/api.rst > > @@ -6537,6 +6537,29 @@ array field represents return values. The userspace should update the return > > values of SBI call before resuming the VCPU. For more details on RISC-V SBI > > spec refer, https://github.com/riscv/riscv-sbi-doc. > > > > +:: > > + > > + /* KVM_EXIT_MEMORY_FAULT */ > > + struct { > > + #define KVM_MEMORY_EXIT_FLAG_PRIVATE (1 << 0) > > + __u32 flags; > > + __u32 padding; > > + __u64 gpa; > > + __u64 size; > > + } memory; > > + > > +If exit reason is KVM_EXIT_MEMORY_FAULT then it indicates that the VCPU has > > +encountered a memory error which is not handled by KVM kernel module and > > +userspace may choose to handle it. The 'flags' field indicates the memory > > +properties of the exit. > > + > > + - KVM_MEMORY_EXIT_FLAG_PRIVATE - indicates the memory error is caused by > > + private memory access when the bit is set. Otherwise the memory error is > > + caused by shared memory access when the bit is clear. > > + > > +'gpa' and 'size' indicate the memory range the error occurs at. The userspace > > +may handle the error and return to KVM to retry the previous memory access. > > + > > What's the difference between this and a plain old MMIO exit ? > Just that we can specify a wider size and some flags ? KVM_EXIT_MMIO is purely for cases where there is no memslot. KVM_EXIT_MEMORY_FAULT will be used for scenarios where there is a valid memslot for a GPA, but for whatever reason KVM cannot map the memslot into the guest. In this series, the new exit type is use to handle guest-initiated conversions between shared and private memory. By design, conversion requires explicit action from userspace, and so even though KVM has a valid memslot, KVM needs to exit to userspace to effectively forward the conversion request to userspace. Long term, I also hope to convert all guest-triggered -EFAULT paths to instead return KVM_EXIT_MEMORY_FAULT. At minimum, returning KVM_EXIT_MEMORY_FAULT instead of -EFAULT will allow KVM to provide userspace with the "bad" GPA when something goes sideways, e.g. if faulting in the page failed because there's no valid userspace mapping. There have also been two potential use cases[1][2], though they both appear to have been abandoned, where userspace would do something more than just kill the guest in response to KVM_EXIT_MEMORY_FAULT. [1] https://lkml.kernel.org/r/20200617230052.GB27751@linux.intel.com [2] https://lore.kernel.org/all/YKxJLcg%2FWomPE422@google.com