From patchwork Fri Sep 1 16:20:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 9934807 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 5D3EC6016C for ; Fri, 1 Sep 2017 16:22:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4D65E25E13 for ; Fri, 1 Sep 2017 16:22:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4091E2621B; Fri, 1 Sep 2017 16:22:31 +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 B17A025E13 for ; Fri, 1 Sep 2017 16:22:30 +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 1dnogC-0006cw-AY; Fri, 01 Sep 2017 16:20:24 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dnogA-0006cp-W0 for xen-devel@lists.xenproject.org; Fri, 01 Sep 2017 16:20:23 +0000 Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id CA/2B-02044-6C889A95; Fri, 01 Sep 2017 16:20:22 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCIsWRWlGSWpSXmKPExsXS6fjDS/dox8p Ig2v31C2+b5nM5MDocfjDFZYAxijWzLyk/IoE1oz3G7rZC96rVrQ9/MHcwPhGpouRk0NIIE+i u3c/C4jNK2AncaV3NTuILSFgKHF64U2wOIuAqsSSJ+eZQGw2AXWJtmfbWbsYOThEBAwkzh1N6 mLk4mAWWMskcXHWXbAaYQFfiZ4Ln1kh5ttJXL5+iQmknldAUOLvDmGQMLOAlsTDX7dYIGxtiW ULXzODlDALSEss/8cxgZF3FkLDLCQNs5A0zEJoWMDIsopRvTi1qCy1SNdcL6koMz2jJDcxM0f X0MBULze1uDgxPTUnMalYLzk/dxMjMMQYgGAH47HJzocYJTmYlER5q/1XRArxJeWnVGYkFmfE F5XmpBYfYpTh4FCS4HVrXxkpJFiUmp5akZaZAwx2mLQEB4+SCK8xSJq3uCAxtzgzHSJ1ilGXo 6NnwxcmIZa8/LxUKXHeOSBFAiBFGaV5cCNgkXeJUVZKmJcR6CghnoLUotzMElT5V4ziHIxKwr zNIFN4MvNK4Da9AjqCCeiIf59XgBxRkoiQkmpglFrjdVD83q/F/ImTnYKvpuq/NlaTyKnx2ag d2cf8fZ1m0qN6txuJz1bnmwmanNx2xdZC7/Pqu185HRa0/jy9wZ0xOtf+Y95mtauRuhdEGuc5 3HhqL8sf+TB+nts5uVOZH16Kpz5T2j5dT/CgzIHrvdmcGy/sOH1mxab73G2e3ns2pnz70beRX YmlOCPRUIu5qDgRAByxyDK3AgAA X-Env-Sender: JBeulich@suse.com X-Msg-Ref: server-5.tower-206.messagelabs.com!1504282819!108351442!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 34488 invoked from network); 1 Sep 2017 16:20:21 -0000 Received: from prv-mh.provo.novell.com (HELO prv-mh.provo.novell.com) (137.65.248.74) by server-5.tower-206.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 1 Sep 2017 16:20:21 -0000 Received: from INET-PRV-MTA by prv-mh.provo.novell.com with Novell_GroupWise; Fri, 01 Sep 2017 10:20:19 -0600 Message-Id: <59A9A4E30200007800176A4C@prv-mh.provo.novell.com> X-Mailer: Novell GroupWise Internet Agent 14.2.2 Date: Fri, 01 Sep 2017 10:20:19 -0600 From: "Jan Beulich" To: "xen-devel" References: <59A9A4E30200007800176A4C@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] 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 --- 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/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 { --- a/xen/include/xen/hvm/irq.h +++ b/xen/include/xen/hvm/irq.h @@ -51,17 +51,6 @@ struct dev_intx_gsi_link { #define HVM_IRQ_DPCI_IDENTITY_GSI (1 << _HVM_IRQ_DPCI_IDENTITY_GSI_SHIFT) #define HVM_IRQ_DPCI_TRANSLATE (1 << _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;