Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1782501ybt; Mon, 15 Jun 2020 09:15:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwVIs8RbnnQG5h1cWt8ZV8vwBd0DPQKCkpXbHu2B7cjmNABNsFPfE0z7adXaia0XkIRhrI7 X-Received: by 2002:aa7:c245:: with SMTP id y5mr24877388edo.189.1592237734649; Mon, 15 Jun 2020 09:15:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592237734; cv=none; d=google.com; s=arc-20160816; b=X9z9ollxaFkLFcIiz7NI5AyP8SVwRJRh00a15Kfr+xTmrc5Gc5u6HPAqI161GX+anb noGu03OKN/6ADGJmnpKjRGKfEK72P5VSYGm1ZV564r8VnYk2J+I4M5osLGbEycnb8cs+ YgIaLlLwFpDZ2P2jKBlnaZPzaiXQ7QP3g6O07GQ/XVc/qMZG+tfbzEULE5gcal8offJj YjuUYVQb4UhtPEeQJtcNygiG08WiI+RXtiGs4DfdWzvcp6xb4zupBzj8F+E7nFqMckz8 KQ5dg5ywuGPCJ7wcPlRihwECzyprKZNS93YK6xp6fOA5rZyTTczgiCaGHX7zcu9TwJl4 E89A== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=OCMW+zRQoRVexmB9YumbelsaE73MORmWmoo3AK75EJM=; b=IazYdYW/TB4HX8KTMcMxp7wdaG7O0Sx0r54C78rp5d7faGE+czhF6flQR/tU8imIWB 9IpOOm+EVbtYQ4Ic9pi5qBcp236IgGTqRWVURnWpc3CHH3ZtAuTwwgde9AC2NmfQVnpW sP+ak204Mq1KBnySFOXf33Y1nQeO1iiazXLqh2hIOYJ3DNFuCdCZLWzHPvFHgFKxbOyP e6LyGM7i6svgcgr7nnJLEXYtH6MVSnYxGd50pLpYEp6L4GJYzkzVCGuVD6+2cww/XTbD Dsy57U9b2GXeay+TvYO7jLEHiN40q4f8BpnpZrKhEvb3jQ0lFFrcVFAzBBD3TAWUrvpQ K06g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=GQfrHS4W; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h15si1686851ejl.550.2020.06.15.09.15.10; Mon, 15 Jun 2020 09:15:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=GQfrHS4W; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S1730758AbgFOQM2 (ORCPT + 99 others); Mon, 15 Jun 2020 12:12:28 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:58795 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730538AbgFOQM1 (ORCPT ); Mon, 15 Jun 2020 12:12:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1592237545; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OCMW+zRQoRVexmB9YumbelsaE73MORmWmoo3AK75EJM=; b=GQfrHS4WctNyjv57Vfi2G4QUAlXQG+pRBs2xIo6ZodN3xoCJMiy+T/fGphOIM8Z7t8lBI/ u7+qbVfgU4Da/77W0KAwHH9LN/eK+L2frwc2b/J1CAc9gSQukZN4s7MDg11nKVJx+ox3oz cRaEZHEzO0GLKPphw6aF31aZ1Sseg1Y= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-311-wfb-q9bxOnqpgh_-eQt71g-1; Mon, 15 Jun 2020 12:12:22 -0400 X-MC-Unique: wfb-q9bxOnqpgh_-eQt71g-1 Received: by mail-wm1-f71.google.com with SMTP id h6so18343wmb.7 for ; Mon, 15 Jun 2020 09:12:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=OCMW+zRQoRVexmB9YumbelsaE73MORmWmoo3AK75EJM=; b=G2uOajo9EKG/x2XWOT8yk72r13LD2LcPtMqsna2D1ezHUlGbNCZIWETPBkoZDy8Yra GDObGTRcseX6AiUg7IszqRJi8EWSqt8IX4Q0lUOzpQPr7LPHaPPBpVCNr2xsj8384tth 4sKFnBEvTc3lo3Q7Cm1VsflLONKOmEtfm/8OEqWfKkVrrDfd6YsRFp6qbIkQ7yhYvxRM +IpkIk/YSbNPAQW6/BSWiqmHY600jVEic4Xhb9qA4HpGZlcXmX/HcBF9UdItxosb3Vhb 1y3LiE1AMlKVAxyNteefhqWkoN4HQfrlRqcUpwq3YKZpf469/esQFaEmAHZX4+MWgIqh /fGA== X-Gm-Message-State: AOAM530q8WRGmPw/ZDQ5O3xw8xM6JKzXd0V+xgvkd3eAaXdrsGKQq4ru /6KVKaSLd8bv6mIo1Hnufg3Ps7FkMkKMM0lTckPEabNaw3A4Xr+m8mbrWkOoSQxnbQybEXL3uUp ecLCty8Zq5xIF+EZXS4Ozc4vj X-Received: by 2002:a1c:32c4:: with SMTP id y187mr39637wmy.79.1592237540168; Mon, 15 Jun 2020 09:12:20 -0700 (PDT) X-Received: by 2002:a1c:32c4:: with SMTP id y187mr39604wmy.79.1592237539927; Mon, 15 Jun 2020 09:12:19 -0700 (PDT) Received: from [192.168.178.58] ([151.48.99.33]) by smtp.gmail.com with ESMTPSA id f16sm30924wmh.27.2020.06.15.09.12.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 09:12:19 -0700 (PDT) Subject: Re: [PATCH] KVM: VMX: Add helpers to identify interrupt type from intr_info To: Sean Christopherson Cc: Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org References: <20200609014518.26756-1-sean.j.christopherson@intel.com> From: Paolo Bonzini Message-ID: <9ee673cd-29b5-3e9a-ce34-9314c736df59@redhat.com> Date: Mon, 15 Jun 2020 18:12:18 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200609014518.26756-1-sean.j.christopherson@intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/06/20 03:45, Sean Christopherson wrote: > Add is_intr_type() and is_intr_type_n() to consolidate the boilerplate > code for querying a specific type of interrupt given an encoded value > from VMCS.VM_{ENTER,EXIT}_INTR_INFO, with and without an associated > vector respectively. > > Signed-off-by: Sean Christopherson > --- > > I wrote and proposed a version of this patch a while back[*], but AFAICT > never posted it as a formal patch. > > [*] https://lkml.kernel.org/r/20190819233537.GG1916@linux.intel.com > > arch/x86/kvm/vmx/vmcs.h | 32 ++++++++++++++++++++------------ > 1 file changed, 20 insertions(+), 12 deletions(-) > > diff --git a/arch/x86/kvm/vmx/vmcs.h b/arch/x86/kvm/vmx/vmcs.h > index 5c0ff80b85c0..7a3675fddec2 100644 > --- a/arch/x86/kvm/vmx/vmcs.h > +++ b/arch/x86/kvm/vmx/vmcs.h > @@ -72,11 +72,24 @@ struct loaded_vmcs { > struct vmcs_controls_shadow controls_shadow; > }; > > +static inline bool is_intr_type(u32 intr_info, u32 type) > +{ > + const u32 mask = INTR_INFO_VALID_MASK | INTR_INFO_INTR_TYPE_MASK; > + > + return (intr_info & mask) == (INTR_INFO_VALID_MASK | type); > +} > + > +static inline bool is_intr_type_n(u32 intr_info, u32 type, u8 vector) > +{ > + const u32 mask = INTR_INFO_VALID_MASK | INTR_INFO_INTR_TYPE_MASK | > + INTR_INFO_VECTOR_MASK; > + > + return (intr_info & mask) == (INTR_INFO_VALID_MASK | type | vector); > +} > + > static inline bool is_exception_n(u32 intr_info, u8 vector) > { > - return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VECTOR_MASK | > - INTR_INFO_VALID_MASK)) == > - (INTR_TYPE_HARD_EXCEPTION | vector | INTR_INFO_VALID_MASK); > + return is_intr_type_n(intr_info, INTR_TYPE_HARD_EXCEPTION, vector); > } > > static inline bool is_debug(u32 intr_info) > @@ -106,28 +119,23 @@ static inline bool is_gp_fault(u32 intr_info) > > static inline bool is_machine_check(u32 intr_info) > { > - return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VECTOR_MASK | > - INTR_INFO_VALID_MASK)) == > - (INTR_TYPE_HARD_EXCEPTION | MC_VECTOR | INTR_INFO_VALID_MASK); > + return is_exception_n(intr_info, MC_VECTOR); > } > > /* Undocumented: icebp/int1 */ > static inline bool is_icebp(u32 intr_info) > { > - return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK)) > - == (INTR_TYPE_PRIV_SW_EXCEPTION | INTR_INFO_VALID_MASK); > + return is_intr_type(intr_info, INTR_TYPE_PRIV_SW_EXCEPTION); > } > > static inline bool is_nmi(u32 intr_info) > { > - return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK)) > - == (INTR_TYPE_NMI_INTR | INTR_INFO_VALID_MASK); > + return is_intr_type(intr_info, INTR_TYPE_NMI_INTR); > } > > static inline bool is_external_intr(u32 intr_info) > { > - return (intr_info & (INTR_INFO_VALID_MASK | INTR_INFO_INTR_TYPE_MASK)) > - == (INTR_INFO_VALID_MASK | INTR_TYPE_EXT_INTR); > + return is_intr_type(intr_info, INTR_TYPE_EXT_INTR); > } > > enum vmcs_field_width { > Queued, thnkas. Paolo