Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp1336192pxm; Thu, 3 Mar 2022 15:33:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJxqhtUsnvuFq8grw2e7O6AXzr7UdBiGH9Y7yojK8uqZh2ARhU+25vkPNxgPWxM445V7m616 X-Received: by 2002:a17:906:974e:b0:6bb:4f90:a6ae with SMTP id o14-20020a170906974e00b006bb4f90a6aemr29727673ejy.452.1646350424280; Thu, 03 Mar 2022 15:33:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646350424; cv=none; d=google.com; s=arc-20160816; b=r7ZLTpH8tXhqR1PINtfoS6dFMM+cDRjOI4I/53MYiCGr3k6Y82xbYWVdYAD5zxGIG9 hs/GxVEuuhGlchGV942jkrH+o6fpzoJrLPuBLZZWzoyvJHl/AMvvURrrr+5kMRB6Zaqu jiPqTnnUAPFqcxVs7Gq8kAqB1fVjiz8/EhduXAonE1uoGcyuZLcmcYfqWj2ykWARF3/c EmTBHgWOUpa7gRPamZA37T1su7aJvNee3ROh9ifGIivFRfq/TyLuDJXPoiZBgjMyFIVW VJza3XlX3z2ydUILtWQ62AIzBfpE2bTK8KH2SmY1aUX/6N8OaavMI7Icfgq6IBGcqGLK /vRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Dvih/7ReoIrowVnu0jh9AfQzzh3B1h/nlGrRX+e2c8E=; b=CKge6JYMVYqG4pQ+HNlPlSR7i/bHzNMRanh37Grxaw3scggboiW1WfUjF6ON+uDaDE zH/R/lZa0ly86Aysw4f6UXotEZey06RtVz4oz+kB++ovM/Bs4Q8db0vtEn4GniW35F/S Kza1lJwiAk8qIiDVAdsz1XyQjMw9q62aJmIWNRh6+dhygtaW62ctfxoTd5wQ4UVUEwIN jae9V7CtBxVpF4O2qh93CtOLMYFNkeJBgAFWq+0VP9JEvDNG6hZlLma+mc+tqmo6TktS lu1Qk9/ZImMDID5XpYI3ApUds3ncyaJ92hYUGLtk36dhoNQPMtVMwoXtf3CKt69Oq9Hm 3L+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=J+qeo95q; 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=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d2-20020a170906370200b006cfe5440e93si1988300ejc.879.2022.03.03.15.33.21; Thu, 03 Mar 2022 15:33:44 -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=@redhat.com header.s=mimecast20190719 header.b=J+qeo95q; 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=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236106AbiCCTkH (ORCPT + 99 others); Thu, 3 Mar 2022 14:40:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236000AbiCCTjo (ORCPT ); Thu, 3 Mar 2022 14:39:44 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id EC02599682 for ; Thu, 3 Mar 2022 11:38:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646336337; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Dvih/7ReoIrowVnu0jh9AfQzzh3B1h/nlGrRX+e2c8E=; b=J+qeo95q3AgJBBygqUP9r4rehfUmJxt6uqQ31dkbwdBeN4CaLMyraglEIKF6vH49nmKybK 7QIdGQ5TrSlbyLaLR3eXbqqq4bkj1ui/TV9YWghh+zDosKN1uKQDKhVN4kf9C/U/v+Ok41 qMRUdJOsD1fkNCpLf4JEL7uMy//1twg= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-567-zu3c9gvTPduh0ZJJsoFwKA-1; Thu, 03 Mar 2022 14:38:56 -0500 X-MC-Unique: zu3c9gvTPduh0ZJJsoFwKA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5EC7951DC; Thu, 3 Mar 2022 19:38:54 +0000 (UTC) Received: from virtlab701.virt.lab.eng.bos.redhat.com (virtlab701.virt.lab.eng.bos.redhat.com [10.19.152.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8A2E4ADDE; Thu, 3 Mar 2022 19:38:53 +0000 (UTC) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , David Hildenbrand , David Matlack , Ben Gardon , Mingwei Zhang Subject: [PATCH v4 10/30] KVM: x86/mmu: Drop RCU after processing each root in MMU notifier hooks Date: Thu, 3 Mar 2022 14:38:22 -0500 Message-Id: <20220303193842.370645-11-pbonzini@redhat.com> In-Reply-To: <20220303193842.370645-1-pbonzini@redhat.com> References: <20220303193842.370645-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE 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 From: Sean Christopherson Drop RCU protection after processing each root when handling MMU notifier hooks that aren't the "unmap" path, i.e. aren't zapping. Temporarily drop RCU to let RCU do its thing between roots, and to make it clear that there's no special behavior that relies on holding RCU across all roots. Currently, the RCU protection is completely superficial, it's necessary only to make rcu_dereference() of SPTE pointers happy. A future patch will rely on holding RCU as a proxy for vCPUs in the guest, e.g. to ensure shadow pages aren't freed before all vCPUs do a TLB flush (or rather, acknowledge the need for a flush), but in that case RCU needs to be held until the flush is complete if and only if the flush is needed because a shadow page may have been removed. And except for the "unmap" path, MMU notifier events cannot remove SPs (don't toggle PRESENT bit, and can't change the PFN for a SP). Signed-off-by: Sean Christopherson Reviewed-by: Ben Gardon Message-Id: <20220226001546.360188-10-seanjc@google.com> Reviewed-by: Mingwei Zhang Signed-off-by: Paolo Bonzini --- arch/x86/kvm/mmu/tdp_mmu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c index 9b1d64468d95..22b0c03b673b 100644 --- a/arch/x86/kvm/mmu/tdp_mmu.c +++ b/arch/x86/kvm/mmu/tdp_mmu.c @@ -1123,18 +1123,18 @@ static __always_inline bool kvm_tdp_mmu_handle_gfn(struct kvm *kvm, struct tdp_iter iter; bool ret = false; - rcu_read_lock(); - /* * Don't support rescheduling, none of the MMU notifiers that funnel * into this helper allow blocking; it'd be dead, wasteful code. */ for_each_tdp_mmu_root(kvm, root, range->slot->as_id) { + rcu_read_lock(); + tdp_root_for_each_leaf_pte(iter, root, range->start, range->end) ret |= handler(kvm, &iter, range); - } - rcu_read_unlock(); + rcu_read_unlock(); + } return ret; } -- 2.31.1