Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp3464312rwb; Fri, 9 Dec 2022 15:06:29 -0800 (PST) X-Google-Smtp-Source: AA0mqf69527agTlhvF6kloucnIsJPTWPZP3UClbb23IDzUUfpk6HQ79U9RFCxFG57c3UldrJtwJA X-Received: by 2002:a17:903:240c:b0:188:9806:2e2b with SMTP id e12-20020a170903240c00b0018898062e2bmr7875182plo.35.1670627189154; Fri, 09 Dec 2022 15:06:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670627189; cv=none; d=google.com; s=arc-20160816; b=fmk9T48ogaqpyfqHal2P6GjAYakctufrdI9MBbWsJoDnsEhHf7wu+q26wGJhF6WbUk 23Nr+jyrsEdWccJRbA0TrFWzUKSlflpup21P/D6VjaoMn9kiNrJanbFRQjdCIDnr1ERx FDk60BpXGI9R41jw+w+mD1emg8P2/EZ25ThLcLXV1CV/b+6Yf4vmp+v1g4G/Bv6P1aE8 vSKFhkLCCSr6FG6r4K43v8D7G8uCf75PrXx7n8fy6DH8XE3TFeWVyJHbZt5DVBAbHtjx cPHntPwI3EcdJ5Den21fI/y59KIwE5hieAPs/ZlWBrcbJKJ6gvNjJBTttWX6gxSxYL8W ytFg== 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=X60ise7QEnBOLcc3D/dBQfic8PhzrSOslDuErC7Ni10=; b=TxieI9Hh33vzruqWDrEGzxzFT8HhL7OZKMl+pKhOvvs9yEOYBq9GVWHro0tGVgn9s9 nVClV4ZdV0uI3oiMUpcgadSIfIZLXEyrfaL50+Qq7BUKlAbPLJmEEzgZVH9hzyRTMB7A SWGn5EYdARvYuXWdME7JyX1CAf6NsVMsbbsXgPyxUvt5b0qJJoFSvtR8wY8KYMyr3+Md RaAJExMc9dlLcU9qo3LBxJAUQtnZyyacs8FLDClvPJKW7ReBnhYpqDV2Cab3Q/POIPsQ qY86Df8tWwSuga4aNiV8ZcSnyptPl+1wNJQ6YEpzIHwsJWpOnor488UXu3U85dhDdLIg kGmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=pHUdoOKY; 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 c9-20020a656189000000b00477fbd598aasi2694032pgv.346.2022.12.09.15.06.18; Fri, 09 Dec 2022 15:06:29 -0800 (PST) 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=pHUdoOKY; 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 S229563AbiLIWo4 (ORCPT + 75 others); Fri, 9 Dec 2022 17:44:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43816 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229626AbiLIWow (ORCPT ); Fri, 9 Dec 2022 17:44:52 -0500 Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A89291C12A for ; Fri, 9 Dec 2022 14:44:51 -0800 (PST) Received: by mail-pj1-x102d.google.com with SMTP id js9so5249989pjb.2 for ; Fri, 09 Dec 2022 14:44:51 -0800 (PST) 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=X60ise7QEnBOLcc3D/dBQfic8PhzrSOslDuErC7Ni10=; b=pHUdoOKYb0ikWsUFyedzTVRqWFVg+GHcvD2Qt3tMkYnRgphgWNKSWcAqSb1lJUGYV3 2In6LQHTmk+M/woccvtGcbol+tHuihY0FVIDF2Z4kIsolqvzKaINNw+vqEAgWAFvqT3e SBqsToY0x6VAUpiv7c3CoqyhOzssWXjkXdqbdXdotU02cHCxLcCpXYCL19pqFE1kK7Dk ixODee2lydPhJ+A9DZ458RZ0X9UpXWkPEiwQTP+5HexIHqUS5/vkKTGRPoxNwSi9JlPk 99NqBP9UYRQiH5YX47o/EMMJabhk6ghiMSkm4nNj7uUXklplo0CopLcnv7/A5zDLfW7Q Ctkw== 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=X60ise7QEnBOLcc3D/dBQfic8PhzrSOslDuErC7Ni10=; b=31xgcB+wojH+8JYnbN4SPJ9irEc4A1KWGo6mUeT8YMtSDzHP+Cjw9kHYhDneS0Nef0 2uaw3DLyC4N2C3sm0OUVDfqJTIvvHiNUehK04a6rJoNQ9ncz6DR9bgz5r3h76kz58AgF r5eQyVtfvdbOpfsfq2n0vOL7GGiQ7cyDvlCbthG5OvkLVs2D30sJJ06NcpefM0A7Zk0y jTb4jCmF4eNiHGbaywhi07ovQxX+jctR0iLsM99Y1X+n95nQT9FTcZAhe/By4lcnc4uB crKoeTMiUX+atZLeseciSzuqdc6vtmE77mFRCqEFBO3/MbTO1VPT67WN4dgRsm4JuIp0 gU3w== X-Gm-Message-State: ANoB5pk8ZGC/BjwI5BTygAVZT6Izbni+MfuFNK5JqTuxclgptnQoWB4X oIZD0RFIo/0tpF5Sh/XzZHIK1Q== X-Received: by 2002:a17:90a:1b0b:b0:219:396c:9e32 with SMTP id q11-20020a17090a1b0b00b00219396c9e32mr7524057pjq.16.1670625891035; Fri, 09 Dec 2022 14:44:51 -0800 (PST) Received: from google.com (223.103.125.34.bc.googleusercontent.com. [34.125.103.223]) by smtp.gmail.com with ESMTPSA id d12-20020a17090a3b0c00b00219f8eb271fsm1670901pjc.5.2022.12.09.14.44.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Dec 2022 14:44:50 -0800 (PST) Date: Fri, 9 Dec 2022 14:44:46 -0800 From: David Matlack To: Ben Gardon Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Paolo Bonzini , Peter Xu , Sean Christopherson , Vipin Sharma Subject: Re: [PATCH 6/7] KVM: x86/MMU: Move rmap zap operations to rmap.c Message-ID: References: <20221206173601.549281-1-bgardon@google.com> <20221206173601.549281-7-bgardon@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20221206173601.549281-7-bgardon@google.com> 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=ham 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, Dec 06, 2022 at 05:36:00PM +0000, Ben Gardon wrote: > Move the various rmap zap functions to rmap.c. These functions are less > "pure" rmap operations in that they also contain some SPTE manipulation, > however they're mostly about rmap / pte list manipulation. > > No functional change intended. > > Signed-off-by: Ben Gardon > --- [...] > -static void kvm_zap_one_rmap_spte(struct kvm *kvm, > - struct kvm_rmap_head *rmap_head, u64 *sptep) > -{ > - mmu_spte_clear_track_bits(kvm, sptep); > - pte_list_remove(sptep, rmap_head); > -} > - > -/* Return true if at least one SPTE was zapped, false otherwise */ > -static bool kvm_zap_all_rmap_sptes(struct kvm *kvm, > - struct kvm_rmap_head *rmap_head) > -{ > - struct pte_list_desc *desc, *next; > - int i; > - > - if (!rmap_head->val) > - return false; > - > - if (!(rmap_head->val & 1)) { > - mmu_spte_clear_track_bits(kvm, (u64 *)rmap_head->val); > - goto out; > - } > - > - desc = (struct pte_list_desc *)(rmap_head->val & ~1ul); > - > - for (; desc; desc = next) { > - for (i = 0; i < desc->spte_count; i++) > - mmu_spte_clear_track_bits(kvm, desc->sptes[i]); > - next = desc->more; > - free_pte_list_desc(desc); > - } > -out: > - /* rmap_head is meaningless now, remember to reset it */ > - rmap_head->val = 0; > - return true; > -} I don't like moving the rmap zap functions into rmap.c, because they are more mmu.c functions, as you note in the commit description. e.g. It's odd to have kvm_zap_all_rmap_sptes() in rmap.c but not, say __rmap_clear_dirty(). I get your point though that kvm_zap_all_rmap_sptes() has to know intimate details of the pte_list_desc structure. It would be nice to keep those details isolated to rmap.c. What about keeping the zap functions mmu.c and just provide a better API for kvm_zap_all_rmap_sptes() to process the rmap entries? e.g. mmu.c: static bool kvm_zap_all_rmap_sptes(struct kvm *kvm, struct kvm_rmap_head *rmap_head) { struct rmap_iterator iter; bool flush = false; u64 *sptep; for_each_rmap_spte(rmap_head, &iter, sptep) { mmu_spte_clear_track_bits(kvm, sptep); flush = true; } pte_list_free_all(rmap_head); // <-- implemented in rmap.c return flush; } This should be about as efficient as the current approach (same big-O notation at least) and maintain the separation of pte_list_desc internals in rmap.c.