Received: by 2002:ac0:e34a:0:0:0:0:0 with SMTP id g10csp30520imn; Mon, 25 Jul 2022 09:26:19 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vOhP6WMtWOzGmLOeauemK84ZjtNgkYbWz70Wf2aloD3ePCGHY+3UrAWJH3wsGk2OSNSV7v X-Received: by 2002:a17:907:c11:b0:72b:6932:831a with SMTP id ga17-20020a1709070c1100b0072b6932831amr10897524ejc.51.1658766379666; Mon, 25 Jul 2022 09:26:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658766379; cv=none; d=google.com; s=arc-20160816; b=AOEFC6VLPKYPM/p8jDXyf16ionWusO930xWunCrEM0A/KTM6oYVOTP0dt/a3Zd20ZE ywRKk+YLWs3SNDrlPb7LyfFVfnQreJva/VbXrmZymNG/uV2NQ3X8yf9D0RCdjwYbehow T2fVM2pGOspGcX4C19j54dUcY3AwdXH9FJupN3j6vbLzMtqOB96yeWgFdL6jLQobg/D0 OI1XoLAGw5GGFGmOmyIFRnbVfxZj1ujIHDtWl4TKsz8H5aTU4kaU4VMw9TB2tSlX0j+W HOD7zCyampvKkCcKlRvxAj6/t0C8OUJVPk/VrMz8+vUmRrlop5FYAjFDh2OgAjKcavSI gmHw== 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-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=FjmoqdU5kj6rAICx3+QzM5MmmkfRNlf/iMQ4fGtplDA=; b=vbabGvE65KaG6XLVNyeZSgsWI/Tc1Hw+TDeKDn+g/IbTnC/ivbfxBEwoqVHPtatlZA 3iwLAV6WRStuprnHgUbB5phGMCb9XtgNAcD1NZytd2CVP/GBtNQyGjd7vrJxsL1jq1jA TbYXfVumNmZ9NO9x3Avcb8lZpn7dGO+E+3zReD0mfNYnDtHSlFNTOCS6u3r4uppVTCx4 80Uhj4f1nV7iYu4yJ/5p4R5dynuf+/qHyN9DlfIcDW35o9iYQhWa35p8kav505VqBD9l 0XI+bm2cyz0doChgEYxCx5gNhXELzrqiERptsNEzZjmEFAKN6qrrFNvO2X8Kh29sm/mb SaVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=qPSXGfwv; 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 q15-20020a1709066acf00b006efe41f067asi11807509ejs.234.2022.07.25.09.25.55; Mon, 25 Jul 2022 09:26:19 -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=qPSXGfwv; 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 S235879AbiGYQId (ORCPT + 99 others); Mon, 25 Jul 2022 12:08:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235868AbiGYQI3 (ORCPT ); Mon, 25 Jul 2022 12:08:29 -0400 Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 97AE613FBB for ; Mon, 25 Jul 2022 09:08:27 -0700 (PDT) Received: by mail-pj1-x1032.google.com with SMTP id t3-20020a17090a3b4300b001f21eb7e8b0so14206892pjf.1 for ; Mon, 25 Jul 2022 09:08:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=FjmoqdU5kj6rAICx3+QzM5MmmkfRNlf/iMQ4fGtplDA=; b=qPSXGfwvhrycsBQOp8iY52tnh1KgXSyBQB+dY2Cc2tVNhSXPKkg6St7J8kQhqlxsEa 03/RDkLPFIsTansQAXIAeanSealDnebMm5Rkdeor7AxexibjsXRGN73FxGe+80khHHPT v8xnWy3f4sCauZhKga5d0yRHZMfto0sAsNxbMkAfxHPvxIQ0QMx7qXI5Yd72cemfFpCD ub1xtP7DT0g4876OlkgQbiBkH+IA9KU4VYPyvaX+x4qSh+CKsdH1qu+6TICYYOcHbB97 U52lm5UEl9xUZTAXBGfNfpUs+Njp6xwD/4d+nSIA1+bpzWLsFtNt7MCE6xDG67zmiVWT cQ2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=FjmoqdU5kj6rAICx3+QzM5MmmkfRNlf/iMQ4fGtplDA=; b=adMfZXRpiKGFVmmMX6+6olOaeG90c0OCSoC1qy0mD+3vQeJT08SFEit1P11loslMD4 fW0dMTnE4MrTEUCmOKx1qDmbrrCY4lmZK9OUtTB4jcxoUsoRIJrQDjKa4yWM/uzvF3/K yWEhrYSORN99aDbIAHLp5i40jFufr+3ZIXDWiaX0EdHOVZi8bMIZZheZE1M0m0jB7paN XHg5K/672jh6OYxTVmqAObLziZKkoGdyZxxoOxIHUF/I3+R47uhN3Npx9Ek/eFI+u8lP ZPCWAnMroN6d8i5cV0GhfGQrdAGBnf6dWEr+vxje4iEO8GQSFJu+igpq//aQbWgZfv4N 6FFQ== X-Gm-Message-State: AJIora+Vpr1s+g+AnThErjdKcuAVx5KauLrbot/MsNBv69b0iTi7ZaMU 1j+heWwXckBIehh/sdciNFrA/w== X-Received: by 2002:a17:90b:4a12:b0:1ef:a8bb:b475 with SMTP id kk18-20020a17090b4a1200b001efa8bbb475mr15047889pjb.124.1658765306524; Mon, 25 Jul 2022 09:08:26 -0700 (PDT) Received: from google.com (123.65.230.35.bc.googleusercontent.com. [35.230.65.123]) by smtp.gmail.com with ESMTPSA id e7-20020a17090301c700b0016bf2dc1724sm9463154plh.247.2022.07.25.09.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Jul 2022 09:08:25 -0700 (PDT) Date: Mon, 25 Jul 2022 16:08:21 +0000 From: Sean Christopherson To: Maxim Levitsky Cc: kvm@vger.kernel.org, Wanpeng Li , Vitaly Kuznetsov , Jani Nikula , Paolo Bonzini , Tvrtko Ursulin , Rodrigo Vivi , Zhenyu Wang , Joonas Lahtinen , Tom Lendacky , Ingo Molnar , David Airlie , Thomas Gleixner , Dave Hansen , x86@kernel.org, intel-gfx@lists.freedesktop.org, Daniel Vetter , Borislav Petkov , Joerg Roedel , linux-kernel@vger.kernel.org, Jim Mattson , Zhi Wang , Brijesh Singh , "H. Peter Anvin" , intel-gvt-dev@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: Re: [RFC PATCH v3 04/19] KVM: x86: mmu: allow to enable write tracking externally Message-ID: References: <20220427200314.276673-1-mlevitsk@redhat.com> <20220427200314.276673-5-mlevitsk@redhat.com> <5ed0d0e5a88bbee2f95d794dbbeb1ad16789f319.camel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit 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 Wed, Jul 20, 2022, Maxim Levitsky wrote: > On Sun, 2022-05-22 at 13:22 +0300, Maxim Levitsky wrote: > > On Thu, 2022-05-19 at 16:37 +0000, Sean Christopherson wrote: > > > On Wed, Apr 27, 2022, Maxim Levitsky wrote: > > > > @@ -5753,6 +5752,10 @@ int kvm_mmu_init_vm(struct kvm *kvm) > Now for nested AVIC, this is what I would like to do: > > - just like mmu, I prefer to register the write tracking notifier, when the > VM is created. > > - just like mmu, write tracking should only be enabled when nested AVIC is > actually used first time, so that write tracking is not always enabled when > you just boot a VM with nested avic supported, since the VM might not use > nested at all. > > Thus I either need to use the __kvm_page_track_register_notifier too for AVIC > (and thus need to export it) or I need to have a boolean > (nested_avic_was_used_once) and register the write tracking notifier only > when false and do it not on VM creation but on first attempt to use nested > AVIC. > > Do you think this is worth it? I mean there is some value of registering the > notifier only when needed (this way it is not called for nothing) but it does > complicate things a bit. Compared to everything else that you're doing in the nested AVIC code, refcounting the shared kvm_page_track_notifier_node object is a trivial amount of complexity. And on that topic, do you have performance numbers to justify using a single shared node? E.g. if every table instance has its own notifier, then no additional refcounting is needed. It's not obvious that a shared node will provide better performance, e.g. if there are only a handful of AVIC tables being shadowed, then a linear walk of all nodes is likely fast enough, and doesn't bring the risk of a write potentially being stalled due to having to acquire a VM-scoped mutex. > I can also stash this boolean (like 'bool registered;') into the 'struct > kvm_page_track_notifier_node',? and thus allow the > kvm_page_track_register_notifier to be called more that once -? then I can > also get rid of __kvm_page_track_register_notifier.? No, allowing redundant registration without proper refcounting leads to pain, e.g. X registers, Y registers, X unregisters, kaboom.