Received: by 2002:ac2:464d:0:0:0:0:0 with SMTP id s13csp3672789lfo; Mon, 23 May 2022 11:01:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxawSerkM9GgYuMPIZyz15gfVF8u/xLiJ96r5EQVOd4UaAPEldP9mVRVcAVdbANj8tsl29N X-Received: by 2002:a63:9043:0:b0:3f9:6c36:3de3 with SMTP id a64-20020a639043000000b003f96c363de3mr13645440pge.616.1653328871271; Mon, 23 May 2022 11:01:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653328871; cv=none; d=google.com; s=arc-20160816; b=1HcdpkNNIy7mqbRhhYaKVZ6azaU/SslvmYKEcyVWZGdGTjf5MViNsFlD5EH6oQkhX/ QZGJsETgRBdpl8wwEEITM6j49R+tBZbC23DB60v+2RB3LpMtTfkbQr4ghVuwTh66GpkZ k65xDEi8bifzViClQMX+6NlsupuPclS3qb9CAngutQj2hi9CA7CEb70gj4uIToBFfjsj 4HGmCd3oQDTKgkEZUJoCBktLckQRBV7fxKKThdZnyNCGlKhcYYsvDYn0w19wZx/UEMpc Nj6BC4Xu13ofKjCIN3Bhq07ugYltedS0ocDqeGpzLGO3PeEt8w9x/ov3OsKVtBfY5ktu sbCw== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=54UrbRNr1ofUDQT8+w+sDzpeu+VQVC0/G4t/yW7odBI=; b=YqJ3GwcVAQm0lv1Z0SsD12aqXsYoyZZyp5oTbrLwPzS0a3VkQgXtbpnyGjEjgP/F/+ fWwNiArPzVaq2X2ZVjWl0b6mUMBde/u7WQx6b13DPxYdjlagTXLxsx85gF8WxzvSi4jb WaPYxi0bOAq8ktB5H28HNdGic0JSlCm1/5w7N/PNCmNhLvcOI2a0awOfHkx533qGPN5B mJ2p0KoWlJSgE/CUtb6XERvV0yvk6k9fqwENRy4J8+UmVFs4ihoKATHOEIxPPGOvSWFK liat44iqujJ5hquhhBwhQxiHwvMtRPVC0kBE+DTjh4Kxh7cO77kfMh00nuFLAMvYMmwY Hi0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XAmTz50s; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id n15-20020a635c4f000000b0039cf337f6c6si11106102pgm.546.2022.05.23.11.01.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 May 2022 11:01:11 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XAmTz50s; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 4FA6F12FEEE; Mon, 23 May 2022 11:00:30 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244498AbiEWR6I (ORCPT + 99 others); Mon, 23 May 2022 13:58:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38376 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241144AbiEWRag (ORCPT ); Mon, 23 May 2022 13:30:36 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A77C03914B; Mon, 23 May 2022 10:26:41 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id E5E35B811FF; Mon, 23 May 2022 17:26:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B18AC385A9; Mon, 23 May 2022 17:26:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1653326780; bh=8k4BmRqodGC6Eg03FKMGlql20WFT7F+hBzlg1XRNmHc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XAmTz50siq65j2lVcsFWDUnCMr40lCbNM0R9P7zauAu33Pikbx4b4EBIH6GwLkW9X OIrDkrXHttyz+/lx1AX3Yrd6VdYZHtn2+WbxJ3J+RuusginBb3gNBUOJqEcxKkGf/Y YTqKnHhYI2X9F1pvcWzjtRN5056NGKVS17ptTvsA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, David Matlack , Ben Gardon , Sean Christopherson , Paolo Bonzini Subject: [PATCH 5.17 056/158] KVM: x86/mmu: Update number of zapped pages even if page list is stable Date: Mon, 23 May 2022 19:03:33 +0200 Message-Id: <20220523165840.062589262@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220523165830.581652127@linuxfoundation.org> References: <20220523165830.581652127@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE 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 From: Sean Christopherson commit b28cb0cd2c5e80a8c0feb408a0e4b0dbb6d132c5 upstream. When zapping obsolete pages, update the running count of zapped pages regardless of whether or not the list has become unstable due to zapping a shadow page with its own child shadow pages. If the VM is backed by mostly 4kb pages, KVM can zap an absurd number of SPTEs without bumping the batch count and thus without yielding. In the worst case scenario, this can cause a soft lokcup. watchdog: BUG: soft lockup - CPU#12 stuck for 22s! [dirty_log_perf_:13020] RIP: 0010:workingset_activation+0x19/0x130 mark_page_accessed+0x266/0x2e0 kvm_set_pfn_accessed+0x31/0x40 mmu_spte_clear_track_bits+0x136/0x1c0 drop_spte+0x1a/0xc0 mmu_page_zap_pte+0xef/0x120 __kvm_mmu_prepare_zap_page+0x205/0x5e0 kvm_mmu_zap_all_fast+0xd7/0x190 kvm_mmu_invalidate_zap_pages_in_memslot+0xe/0x10 kvm_page_track_flush_slot+0x5c/0x80 kvm_arch_flush_shadow_memslot+0xe/0x10 kvm_set_memslot+0x1a8/0x5d0 __kvm_set_memory_region+0x337/0x590 kvm_vm_ioctl+0xb08/0x1040 Fixes: fbb158cb88b6 ("KVM: x86/mmu: Revert "Revert "KVM: MMU: zap pages in batch""") Reported-by: David Matlack Reviewed-by: Ben Gardon Cc: stable@vger.kernel.org Signed-off-by: Sean Christopherson Message-Id: <20220511145122.3133334-1-seanjc@google.com> Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/mmu/mmu.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -5611,6 +5611,7 @@ static void kvm_zap_obsolete_pages(struc { struct kvm_mmu_page *sp, *node; int nr_zapped, batch = 0; + bool unstable; restart: list_for_each_entry_safe_reverse(sp, node, @@ -5642,11 +5643,12 @@ restart: goto restart; } - if (__kvm_mmu_prepare_zap_page(kvm, sp, - &kvm->arch.zapped_obsolete_pages, &nr_zapped)) { - batch += nr_zapped; + unstable = __kvm_mmu_prepare_zap_page(kvm, sp, + &kvm->arch.zapped_obsolete_pages, &nr_zapped); + batch += nr_zapped; + + if (unstable) goto restart; - } } /*