Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp1186150ybf; Thu, 27 Feb 2020 06:30:26 -0800 (PST) X-Google-Smtp-Source: APXvYqwRAitg90J25z9lCosufxjSm+qutGIGKAskH4rkTtNQ1HH0QT52Pzi2zF3czfjY06KZtaQ+ X-Received: by 2002:a9d:7d8b:: with SMTP id j11mr3747226otn.259.1582813825765; Thu, 27 Feb 2020 06:30:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582813825; cv=none; d=google.com; s=arc-20160816; b=Xjgkjudxay6DkwCe7N/OniMUSCf+9i0LUm7ie/zbwv9gqOUu8WstYQqfU+OaupCe2o awTWf1Gf2vJW/9ejpv7RD7cDAwdbHEaIkyHeIx8LivM7v5P7fg5I65jXqETJG9VKYcsV NuBg1Nm/yfYmtIM/WbQHNoarPa6G7Ec7oobhkhoueD6Rqn4T9SIrT6Gt9S2ZpqVYvvTs nHzl6Glr/ySSGjW0CkfNHaxh/7b/ihV0euKLuLXh9NSZmLxaXmI0Xv2d+fzFeZythWNR bLDmreHBoNRdJn0JQ3NVDDqEcN0Gy9pnBJiteUEo83tCqdm/91ae3His8hywR1egMQ+7 h1wg== 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=ftWWaXFxUGNkcUfp6aKUFopFKz1Brd23QB7eBcjKPuY=; b=R+uT21halcqWTs+fdfe7n0kCzHlaYlvsQd9EHLz9HdmTZ+NlOep2ii44rmvQK8eKa2 IlXICtVhLYWLHg9tfKsGjVvyAWGYsgQh5rrGTMkSZ9WTwCDVvDV9xKQyr1AHDmPKlLLo DQhujhGBr+PPTO1rrefND4KvnI2JJEFgnRqxOkBLSib2gMQpp8Z8tIrV50zo8ophPv3G wl7KkA9ruYpkc9GBZ2LwhObMsdPg4GTLK6cVHX6K2070iZ96AAAxZTU7nRdzEkEi+qz0 PdHMwjOdEZBfdhaMbNBhd2CzjK/jJSbLRM8nCUxoKjXEqPVe5ncHsScNm+NcnoGz1WNT Rlwg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CMDMibbN; 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 i194si1453881oib.73.2020.02.27.06.30.12; Thu, 27 Feb 2020 06:30:25 -0800 (PST) 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=CMDMibbN; 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 S2387842AbgB0OaC (ORCPT + 99 others); Thu, 27 Feb 2020 09:30:02 -0500 Received: from mail.kernel.org ([198.145.29.99]:42020 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733238AbgB0OFW (ORCPT ); Thu, 27 Feb 2020 09:05:22 -0500 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 8866C21D7E; Thu, 27 Feb 2020 14:05:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582812322; bh=mPMix2JA2/oqsO55oOsQRDw2ekG+Oe5xZNLGprvdUu8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CMDMibbN3/7tIkPO9YgqD4qFPYhHv2KaLAwvAFqCF/vMY+36ceinpho9ZsS6XT8a1 EKA4gxUezTDbb2FXar8nGvnoIC6MZNdzrUDgBVnHpx4VOvEvAhIEHHDr5urYwdg21+ q+FDOS2yvHcvZOP9F3/0YIQN/CtSQf40euj+/ecc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Oliver Upton , Vitaly Kuznetsov , Paolo Bonzini Subject: [PATCH 4.19 71/97] KVM: nVMX: Refactor IO bitmap checks into helper function Date: Thu, 27 Feb 2020 14:37:19 +0100 Message-Id: <20200227132226.071661518@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200227132214.553656188@linuxfoundation.org> References: <20200227132214.553656188@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 From: Oliver Upton commit e71237d3ff1abf9f3388337cfebf53b96df2020d upstream. Checks against the IO bitmap are useful for both instruction emulation and VM-exit reflection. Refactor the IO bitmap checks into a helper function. Signed-off-by: Oliver Upton Reviewed-by: Vitaly Kuznetsov Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/vmx.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -5725,6 +5725,26 @@ static bool cs_ss_rpl_check(struct kvm_v (ss.selector & SEGMENT_RPL_MASK)); } +static bool nested_vmx_check_io_bitmaps(struct kvm_vcpu *vcpu, + unsigned int port, int size); +static bool nested_vmx_exit_handled_io(struct kvm_vcpu *vcpu, + struct vmcs12 *vmcs12) +{ + unsigned long exit_qualification; + unsigned int port; + int size; + + if (!nested_cpu_has(vmcs12, CPU_BASED_USE_IO_BITMAPS)) + return nested_cpu_has(vmcs12, CPU_BASED_UNCOND_IO_EXITING); + + exit_qualification = vmcs_readl(EXIT_QUALIFICATION); + + port = exit_qualification >> 16; + size = (exit_qualification & 7) + 1; + + return nested_vmx_check_io_bitmaps(vcpu, port, size); +} + /* * Check if guest state is valid. Returns true if valid, false if * not. @@ -9469,23 +9489,17 @@ static int (*const kvm_vmx_exit_handlers static const int kvm_vmx_max_exit_handlers = ARRAY_SIZE(kvm_vmx_exit_handlers); -static bool nested_vmx_exit_handled_io(struct kvm_vcpu *vcpu, - struct vmcs12 *vmcs12) +/* + * Return true if an IO instruction with the specified port and size should cause + * a VM-exit into L1. + */ +bool nested_vmx_check_io_bitmaps(struct kvm_vcpu *vcpu, unsigned int port, + int size) { - unsigned long exit_qualification; + struct vmcs12 *vmcs12 = get_vmcs12(vcpu); gpa_t bitmap, last_bitmap; - unsigned int port; - int size; u8 b; - if (!nested_cpu_has(vmcs12, CPU_BASED_USE_IO_BITMAPS)) - return nested_cpu_has(vmcs12, CPU_BASED_UNCOND_IO_EXITING); - - exit_qualification = vmcs_readl(EXIT_QUALIFICATION); - - port = exit_qualification >> 16; - size = (exit_qualification & 7) + 1; - last_bitmap = (gpa_t)-1; b = -1;