Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3004738ybi; Mon, 17 Jun 2019 14:29:59 -0700 (PDT) X-Google-Smtp-Source: APXvYqzy8irkvelKV3EkcueuhwxzmxkfHsQAiWNm6lJe20D9OJ4XWU5eEDI/VJNv8kJSjC81iXc/ X-Received: by 2002:aa7:8083:: with SMTP id v3mr38045794pff.69.1560806999152; Mon, 17 Jun 2019 14:29:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560806999; cv=none; d=google.com; s=arc-20160816; b=qL5bIzuzAq5ZW3M1zUO8LJy1fXHpmi/dzkqkDTEmc+Az4tpdufcwQnGa+OdrojdvLR 7AxTXlPTGYfo2WGnRAkflr2Nc3v1hYAsI5c7QDPpgMW/+bq2Fy1lAkBooDxGlXoISIZG rqqbjR8mwkZzu2zDze788raCIdBNO4FhOOw4xhlsJKsg2IVtnSZXD5TvX2WoYrHio/w4 is1yzc7vMYECT1rl4OXL5lAfKzhIfPZuZ6H/e3F3Ab4ioyQuSrZujmLpXSm8kogF3Ybn qNn87Di3tZHabuhvT6ixmcBWH39Gxq508Ncc7zrzjay41/y4+YxZh54VhvriIBebNCQH HuAA== 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=1c2XE9et21yjEVmH7XPyD4ACbVIq1sd7bn1Z2YKv6+o=; b=wprxNmJ3EeblJ09mgC64VWzNXqC7o7jQyOkqAD2pAAMWLBYbRp1aURg8GkcRMpa8wo M9H5S9nSuY73w5rO5aN15mjfd6oicq382fzYKgcG0wu/30ARV6smJ3/HEEcrL+GAzc18 XyGQyQhaXGOgjuTmkeEevdqNYcNNalH8dZ9/UTKpciv8Fzs/uOqY9m+Ties/JIrdMJ+L KFG6UBLE5CrHL/NEE50QkT1H/KzEjKSHkF8Xq1Oz7AiSxvc6owEA3L80QntKWVOFC0u+ xz3VZ1hslvyEKexXDtNQ39Z3H175Jlo0o9nBiQDAm8OJq63V9CmBx5hK161OEq1//6R9 d0ng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=gVcPOAri; 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 f20si2152289pfn.166.2019.06.17.14.29.44; Mon, 17 Jun 2019 14:29:59 -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=gVcPOAri; 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 S1730676AbfFQV3R (ORCPT + 99 others); Mon, 17 Jun 2019 17:29:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:56426 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730674AbfFQV3P (ORCPT ); Mon, 17 Jun 2019 17:29:15 -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 4F7F4204FD; Mon, 17 Jun 2019 21:29:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1560806954; bh=Bmdn9oN9NKPf/wrXR/XbJcKXbBhjMEeNLft29cLv7pY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gVcPOAriLX+iO1c1sIKQuwmuF0LQhAiempkFHhmB10oIkRSgOx1GAbzxKTkkO7XRA YlDTHMN0L0znn/CdBQ/UxEkUSa1e0tp49oN0UqB+3SUcKrASAoAwmnyZQLIwcWqR9n JzjNGMSBmZdhUXSJ+HVLqkwaEQRP14edJtzPsmbs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christian Borntraeger , Paolo Bonzini , Sasha Levin Subject: [PATCH 4.14 40/53] KVM: s390: fix memory slot handling for KVM_SET_USER_MEMORY_REGION Date: Mon, 17 Jun 2019 23:10:23 +0200 Message-Id: <20190617210751.933336955@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190617210745.104187490@linuxfoundation.org> References: <20190617210745.104187490@linuxfoundation.org> User-Agent: quilt/0.66 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 [ Upstream commit 19ec166c3f39fe1d3789888a74cc95544ac266d4 ] kselftests exposed a problem in the s390 handling for memory slots. Right now we only do proper memory slot handling for creation of new memory slots. Neither MOVE, nor DELETION are handled properly. Let us implement those. Signed-off-by: Christian Borntraeger Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/s390/kvm/kvm-s390.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index d6fe229ac20e..70a446ec347d 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -3913,21 +3913,28 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, const struct kvm_memory_slot *new, enum kvm_mr_change change) { - int rc; - - /* If the basics of the memslot do not change, we do not want - * to update the gmap. Every update causes several unnecessary - * segment translation exceptions. This is usually handled just - * fine by the normal fault handler + gmap, but it will also - * cause faults on the prefix page of running guest CPUs. - */ - if (old->userspace_addr == mem->userspace_addr && - old->base_gfn * PAGE_SIZE == mem->guest_phys_addr && - old->npages * PAGE_SIZE == mem->memory_size) - return; + int rc = 0; - rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr, - mem->guest_phys_addr, mem->memory_size); + switch (change) { + case KVM_MR_DELETE: + rc = gmap_unmap_segment(kvm->arch.gmap, old->base_gfn * PAGE_SIZE, + old->npages * PAGE_SIZE); + break; + case KVM_MR_MOVE: + rc = gmap_unmap_segment(kvm->arch.gmap, old->base_gfn * PAGE_SIZE, + old->npages * PAGE_SIZE); + if (rc) + break; + /* FALLTHROUGH */ + case KVM_MR_CREATE: + rc = gmap_map_segment(kvm->arch.gmap, mem->userspace_addr, + mem->guest_phys_addr, mem->memory_size); + break; + case KVM_MR_FLAGS_ONLY: + break; + default: + WARN(1, "Unknown KVM MR CHANGE: %d\n", change); + } if (rc) pr_warn("failed to commit memory region\n"); return; -- 2.20.1