From patchwork Fri Sep 1 16:24:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 9934819 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 84C3B6016C for ; Fri, 1 Sep 2017 16:27:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 753D82656B for ; Fri, 1 Sep 2017 16:27:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 68486265B9; Fri, 1 Sep 2017 16:27:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CC0DE2625B for ; Fri, 1 Sep 2017 16:27:05 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dnojv-0006uj-4O; Fri, 01 Sep 2017 16:24:15 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dnojt-0006ub-JE for xen-devel@lists.xenproject.org; Fri, 01 Sep 2017 16:24:13 +0000 Received: from [85.158.143.35] by server-10.bemta-6.messagelabs.com id 0D/74-03642-CA989A95; Fri, 01 Sep 2017 16:24:12 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCIsWRWlGSWpSXmKPExsXS6fjDS3dN58p Ig9Z/chbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8biZ60sBXvUKmZs+s7SwLhGtouRk0NIIE+i t3MfaxcjBwevgJ3Er62ZIGEJAUOJ0wtvsoDYLAKqEvvO/QWz2QTUJdqebQcrFxEwkDh3NKmLk YuDWWAtk8TFWXeZQGqEBUIkJs74xQ4x3k7iZNMkdojxghJ/dwiDhJkFtCQe/rrFAmFrSyxb+J oZpIRZQFpi+T+OCYy8sxAaZiFpmIWkYRZCwwJGllWMGsWpRWWpRbpGFnpJRZnpGSW5iZk5uoY GZnq5qcXFiempOYlJxXrJ+bmbGIEhxgAEOxjPrw08xCjJwaQkylvtvyJSiC8pP6UyI7E4I76o NCe1+BCjDAeHkgTvkY6VkUKCRanpqRVpmTnAYIdJS3DwKInwzgZJ8xYXJOYWZ6ZDpE4x6nJ09 Gz4wiTEkpeflyolzrscpEgApCijNA9uBCzyLjHKSgnzMgIdJcRTkFqUm1mCKv+KUZyDUUmYlx lkCk9mXgncpldARzABHfHv8wqQI0oSEVJSDYy98x+dONhradfPX5RYnja5ddWCY0eucTLu/ha ir2f46PX/IzJG7xx2PVJPZJpRG76y88is0Bl+nnsbHt/0zWGbPvX2/vTeeyEiu2bm9VxOnCnZ n/7g3T32iWGsN0wPvbs8db4ZS2iz4IHQT+VuTQ1Rzx+em+EkNEvnuXUay2V+a5llaYuY3Pcrs RRnJBpqMRcVJwIADWHKhLcCAAA= X-Env-Sender: JBeulich@suse.com X-Msg-Ref: server-13.tower-21.messagelabs.com!1504283050!74837529!1 X-Originating-IP: [137.65.248.74] X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50 X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 48468 invoked from network); 1 Sep 2017 16:24:12 -0000 Received: from prv-mh.provo.novell.com (HELO prv-mh.provo.novell.com) (137.65.248.74) by server-13.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 1 Sep 2017 16:24:12 -0000 Received: from INET-PRV-MTA by prv-mh.provo.novell.com with Novell_GroupWise; Fri, 01 Sep 2017 10:24:10 -0600 Message-Id: <59A9A5CA0200007800176A67@prv-mh.provo.novell.com> X-Mailer: Novell GroupWise Internet Agent 14.2.2 Date: Fri, 01 Sep 2017 10:24:10 -0600 From: "Jan Beulich" To: "xen-devel" References: <59A9A5CA0200007800176A67@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Disposition: inline Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan Subject: [Xen-devel] [PATCH resend] domctl/x86: move vMSI related #define-s to public interface X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Xen and qemu having identical #define-s (with different names) is a strong hint that these should be part of the public interface, at the same time making obvious that any change to the values in an interface modification (and hence needs suitable care). Signed-off-by: Jan Beulich Acked-by: Andrew Cooper Reviewed-by: Wei Liu Reviewed-by: Roger Pau Monné --- I'm sorry for the earlier mail, which had a stale version. --- a/xen/arch/x86/hvm/vmsi.c +++ b/xen/arch/x86/hvm/vmsi.c @@ -104,10 +104,9 @@ void vmsi_deliver_pirq(struct domain *d, uint32_t flags = pirq_dpci->gmsi.gflags; int vector = pirq_dpci->gmsi.gvec; uint8_t dest = (uint8_t)flags; - uint8_t dest_mode = !!(flags & VMSI_DM_MASK); - uint8_t delivery_mode = (flags & VMSI_DELIV_MASK) - >> GFLAGS_SHIFT_DELIV_MODE; - uint8_t trig_mode = (flags&VMSI_TRIG_MODE) >> GFLAGS_SHIFT_TRG_MODE; + bool dest_mode = flags & XEN_DOMCTL_VMSI_X86_DM_MASK; + uint8_t delivery_mode = MASK_EXTR(flags, XEN_DOMCTL_VMSI_X86_DELIV_MASK); + bool trig_mode = flags & XEN_DOMCTL_VMSI_X86_TRIG_MASK; HVM_DBG_LOG(DBG_LEVEL_IOAPIC, "msi: dest=%x dest_mode=%x delivery_mode=%x " --- a/xen/drivers/passthrough/io.c +++ b/xen/drivers/passthrough/io.c @@ -340,10 +340,12 @@ int pt_irq_create_bind( { case PT_IRQ_TYPE_MSI: { - uint8_t dest, dest_mode, delivery_mode; + uint8_t dest, delivery_mode; + bool dest_mode; int dest_vcpu_id; const struct vcpu *vcpu; - uint32_t gflags = pt_irq_bind->u.msi.gflags & ~VMSI_UNMASKED; + uint32_t gflags = pt_irq_bind->u.msi.gflags & + ~XEN_DOMCTL_VMSI_X86_UNMASKED; if ( !(pirq_dpci->flags & HVM_IRQ_DPCI_MAPPED) ) { @@ -413,10 +415,11 @@ int pt_irq_create_bind( } } /* Calculate dest_vcpu_id for MSI-type pirq migration. */ - dest = pirq_dpci->gmsi.gflags & VMSI_DEST_ID_MASK; - dest_mode = !!(pirq_dpci->gmsi.gflags & VMSI_DM_MASK); - delivery_mode = (pirq_dpci->gmsi.gflags & VMSI_DELIV_MASK) >> - GFLAGS_SHIFT_DELIV_MODE; + dest = MASK_EXTR(pirq_dpci->gmsi.gflags, + XEN_DOMCTL_VMSI_X86_DEST_ID_MASK); + dest_mode = pirq_dpci->gmsi.gflags & XEN_DOMCTL_VMSI_X86_DM_MASK; + delivery_mode = MASK_EXTR(pirq_dpci->gmsi.gflags, + XEN_DOMCTL_VMSI_X86_DELIV_MASK); dest_vcpu_id = hvm_girq_dest_2_vcpu_id(d, dest, dest_mode); pirq_dpci->gmsi.dest_vcpu_id = dest_vcpu_id; @@ -440,7 +443,7 @@ int pt_irq_create_bind( pi_update_irte(vcpu ? &vcpu->arch.hvm_vmx.pi_desc : NULL, info, pirq_dpci->gmsi.gvec); - if ( pt_irq_bind->u.msi.gflags & VMSI_UNMASKED ) + if ( pt_irq_bind->u.msi.gflags & XEN_DOMCTL_VMSI_X86_UNMASKED ) { unsigned long flags; struct irq_desc *desc = pirq_spin_lock_irq_desc(info, &flags); @@ -835,8 +838,9 @@ static int _hvm_dpci_msi_eoi(struct doma if ( (pirq_dpci->flags & HVM_IRQ_DPCI_MACH_MSI) && (pirq_dpci->gmsi.gvec == vector) ) { - int dest = pirq_dpci->gmsi.gflags & VMSI_DEST_ID_MASK; - int dest_mode = !!(pirq_dpci->gmsi.gflags & VMSI_DM_MASK); + unsigned int dest = MASK_EXTR(pirq_dpci->gmsi.gflags, + XEN_DOMCTL_VMSI_X86_DEST_ID_MASK); + bool dest_mode = pirq_dpci->gmsi.gflags & XEN_DOMCTL_VMSI_X86_DM_MASK; if ( vlapic_match_dest(vcpu_vlapic(current), NULL, 0, dest, dest_mode) ) --- a/xen/include/asm-x86/hvm/irq.h +++ b/xen/include/asm-x86/hvm/irq.h @@ -131,17 +131,6 @@ struct dev_intx_gsi_link { #define HVM_IRQ_DPCI_IDENTITY_GSI (1u << _HVM_IRQ_DPCI_IDENTITY_GSI_SHIFT) #define HVM_IRQ_DPCI_TRANSLATE (1u << _HVM_IRQ_DPCI_TRANSLATE_SHIFT) -#define VMSI_DEST_ID_MASK 0xff -#define VMSI_RH_MASK 0x100 -#define VMSI_DM_MASK 0x200 -#define VMSI_DELIV_MASK 0x7000 -#define VMSI_TRIG_MODE 0x8000 -#define VMSI_UNMASKED 0x10000 - -#define GFLAGS_SHIFT_RH 8 -#define GFLAGS_SHIFT_DELIV_MODE 12 -#define GFLAGS_SHIFT_TRG_MODE 15 - struct hvm_gmsi_info { uint32_t gvec; uint32_t gflags; --- a/xen/include/public/domctl.h +++ b/xen/include/public/domctl.h @@ -576,6 +576,13 @@ struct xen_domctl_bind_pt_irq { struct { uint8_t gvec; uint32_t gflags; +#define XEN_DOMCTL_VMSI_X86_DEST_ID_MASK 0x0000ff +#define XEN_DOMCTL_VMSI_X86_RH_MASK 0x000100 +#define XEN_DOMCTL_VMSI_X86_DM_MASK 0x000200 +#define XEN_DOMCTL_VMSI_X86_DELIV_MASK 0x007000 +#define XEN_DOMCTL_VMSI_X86_TRIG_MASK 0x008000 +#define XEN_DOMCTL_VMSI_X86_UNMASKED 0x010000 + uint64_aligned_t gtable; } msi; struct {