Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp628885img; Fri, 22 Mar 2019 05:29:13 -0700 (PDT) X-Google-Smtp-Source: APXvYqwkwfU9mABSsIod7mK5txm66wMerpbraoQl8KEDRcEAEL/MWdZg4fGdAB9nkicfXcata0yl X-Received: by 2002:a17:902:e10f:: with SMTP id cc15mr9356311plb.53.1553257753899; Fri, 22 Mar 2019 05:29:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553257753; cv=none; d=google.com; s=arc-20160816; b=ntQf3bU5mtVR7MRZPnI7knzAjKh6CwvQi+WWWeSj6iLjnONRhoAmzPMzAcTCktYMiT sNs8CPQ9FqQ8GP2YRAyRGHLbhgLJ0tMEGY+mGYLjAkm7OgnPNkyfAo+4jJgeJghxqcic AJXa2P9LKinZeuU0Hx4gJ6XPv8NVNdQdz3+4828hZa+8X7Q4NA6+1d6KDkXKnTdV/tXV Jgf1rdobrbBs9VJGvOmqe97jkAyrszCyprE4f/MSEfrAaCexjHS1nG6ajyOWwEidY7ms R8kiDZoYd1YH1otLUwpWuLGIT8+8qyyIOKCnHdhKOyXfc0p6aLRC0p4rK0HBI4KEz/9v cGWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8Z/uxR/eR+EeDQBJqbKU949sdvoDlJ3dlsRVZ1iyNdE=; b=PheOkxfbq1Yk01H2ZodNP/t91ZpXsSChtjQm/tWBbZ7K/4M1g6qM9qIfS0reoIGdc7 HFCaCflPRnAPqhUGQM9ofCxYsX1QXLHnIHtHD1y2+DNUmlFQ87DgFEbxXvTi1g/lop/D MErWtkfpqpQEGFw1HZaYeb/4LZhJzJoNavvjqluavLLLENzPoxFHIULWJ/IOfpAWIlPL OCJTW/3YqgvpUKPSmK1KzB5x7II6tDqePbFaZza0WXgm+i8Uzbqr8yl8DgQyKZ1+9ZXD 8Ihj5iN9CNvaD9ZMfqjUkwxvbo20qYrUhEwNUvhv/WJGwQiTXAy2GvxCGiwRaaxTrCAZ jHLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=o6cSFvcC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q13si6578277pfi.208.2019.03.22.05.28.58; Fri, 22 Mar 2019 05:29:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=o6cSFvcC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390768AbfCVMUu (ORCPT + 99 others); Fri, 22 Mar 2019 08:20:50 -0400 Received: from mail.kernel.org ([198.145.29.99]:59764 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390759AbfCVMUq (ORCPT ); Fri, 22 Mar 2019 08:20:46 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 21C0421900; Fri, 22 Mar 2019 12:20:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553257245; bh=IjlnTNmI66NfvTRigITNMKCaVuPFT5C/FBsTGZpqiqY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o6cSFvcCSlo4k6xaxb67po67bGqlmSpw+KtwYuPgxlZ13ap10oIR8iAgjoSnYuF+c tU4F6MAmJjVCcS3jEgcvalOBcNh56DUok54QBNRMNnMaRBQ/R4zhWrbD/8yM0yuD3e GL8/05b3FsjO59g0/WOTxXscPL46FDA/feQElOus= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ben Gardon , Paolo Bonzini Subject: [PATCH 5.0 175/238] Revert "KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range()" Date: Fri, 22 Mar 2019 12:16:34 +0100 Message-Id: <20190322111308.598088143@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111258.383569278@linuxfoundation.org> References: <20190322111258.383569278@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ From: Ben Gardon commit 92da008fa21034c369cdb8ca2b629fe5c196826b upstream. This reverts commit 71883a62fcd6c70639fa12cda733378b4d997409. The above commit contains an optimization to kvm_zap_gfn_range which uses gfn-limited TLB flushes, if enabled. If using these limited flushes, kvm_zap_gfn_range passes lock_flush_tlb=false to slot_handle_level_range which creates a race when the function unlocks to call cond_resched. See an example of this race below: CPU 0 CPU 1 CPU 3 // zap_direct_gfn_range mmu_lock() // *ptep == pte_1 *ptep = 0 if (lock_flush_tlb) flush_tlbs() mmu_unlock() // In invalidate range // MMU notifier mmu_lock() if (pte != 0) *ptep = 0 flush = true if (flush) flush_remote_tlbs() mmu_unlock() return // Host MM reallocates // page previously // backing guest memory. // Guest accesses // invalid page // through pte_1 // in its TLB!! Tested: Ran all kvm-unit-tests on a Intel Haswell machine with and without this patch. The patch introduced no new failures. Signed-off-by: Ben Gardon Cc: stable@vger.kernel.org Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/mmu.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -5635,13 +5635,8 @@ void kvm_zap_gfn_range(struct kvm *kvm, { struct kvm_memslots *slots; struct kvm_memory_slot *memslot; - bool flush_tlb = true; - bool flush = false; int i; - if (kvm_available_flush_tlb_with_range()) - flush_tlb = false; - spin_lock(&kvm->mmu_lock); for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++) { slots = __kvm_memslots(kvm, i); @@ -5653,17 +5648,12 @@ void kvm_zap_gfn_range(struct kvm *kvm, if (start >= end) continue; - flush |= slot_handle_level_range(kvm, memslot, - kvm_zap_rmapp, PT_PAGE_TABLE_LEVEL, - PT_MAX_HUGEPAGE_LEVEL, start, - end - 1, flush_tlb); + slot_handle_level_range(kvm, memslot, kvm_zap_rmapp, + PT_PAGE_TABLE_LEVEL, PT_MAX_HUGEPAGE_LEVEL, + start, end - 1, true); } } - if (flush) - kvm_flush_remote_tlbs_with_address(kvm, gfn_start, - gfn_end - gfn_start + 1); - spin_unlock(&kvm->mmu_lock); }