From patchwork Fri Sep 1 16:25:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 9934821 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 B84BE6016C for ; Fri, 1 Sep 2017 16:27:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AA8812624A for ; Fri, 1 Sep 2017 16:27:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9F6D926419; Fri, 1 Sep 2017 16:27:42 +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 261F02624A for ; Fri, 1 Sep 2017 16:27:42 +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 1dnolQ-0007Ju-Lf; Fri, 01 Sep 2017 16:25:48 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dnolP-0007Jd-RL for xen-devel@lists.xenproject.org; Fri, 01 Sep 2017 16:25:47 +0000 Received: from [85.158.139.211] by server-2.bemta-5.messagelabs.com id 89/E6-02040-B0A89A95; Fri, 01 Sep 2017 16:25:47 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCIsWRWlGSWpSXmKPExsXS6fjDS5era2W kwfOfChbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8abZffYCz6LVZxZo9DAeFWoi5GTQ0ggT2Ld jJPsIDavgJ3EgW1bWUFsCQFDidMLb7KA2CwCqhLr9/aA1bAJqEu0PdsOViMiIC3RP6cdLM4sk CBxvesDWFxYwE3iYf82Zoj5dhLvXzUDxTmA5gtK/N0hDFGuJfHw1y0WCFtbYtnC18wgJcxAI5 f/45jAyDsLoWEWkoZZSBpmITQsYGRZxahRnFpUllqka2iql1SUmZ5RkpuYmaNraGCql5taXJy YnpqTmFSsl5yfu4kRGGIMQLCDsWG75yFGSQ4mJVHeav8VkUJ8SfkplRmJxRnxRaU5qcWHGGU4 OJQkeB07V0YKCRalpqdWpGXmAIMdJi3BwaMkwisCkuYtLkjMLc5Mh0idYtTl6OjZ8IVJiCUvP y9VSpzXCqRIAKQoozQPbgQs8i4xykoJ8zICHSXEU5BalJtZgir/ilGcg1FJmPdVB9AUnsy8Er hNr4COYAI64t/nFSBHlCQipKQaGBfO78p3kt05W743zneaBnPeSuk/Ev7rPr2f/+WfHDv/Psl oydb+3zJS31qLS671uKgX/WtyC7496aCb/bxDv+8fru1eFDf1yrZ2MZf2p58mb4ls4fkpGnVh 3a2zSzfH74+z650mtf/5sUvH3Nd8q52a/DjgpMgXwQmOtxccenDL+3PsCSfV2S1KLMUZiYZaz EXFiQA57T2DtwIAAA== X-Env-Sender: JBeulich@suse.com X-Msg-Ref: server-15.tower-206.messagelabs.com!1504283143!95956131!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 45613 invoked from network); 1 Sep 2017 16:25:46 -0000 Received: from prv-mh.provo.novell.com (HELO prv-mh.provo.novell.com) (137.65.248.74) by server-15.tower-206.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 1 Sep 2017 16:25:46 -0000 Received: from INET-PRV-MTA by prv-mh.provo.novell.com with Novell_GroupWise; Fri, 01 Sep 2017 10:25:43 -0600 Message-Id: <59A9A6260200007800176A6A@prv-mh.provo.novell.com> X-Mailer: Novell GroupWise Internet Agent 14.2.2 Date: Fri, 01 Sep 2017 10:25:42 -0600 From: "Jan Beulich" To: References: <59A9A6260200007800176A6A@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Disposition: inline Cc: xen-devel , Stefano Stabellini Subject: [Xen-devel] [PATCH] xen: use vMSI related #define-s from 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 have been part of the public interface from the very start. Use them if they're available, falling back to privately defined values only when using older headers. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monné --- a/hw/xen/xen_pt_msi.c +++ b/hw/xen/xen_pt_msi.c @@ -18,6 +18,11 @@ #define XEN_PT_AUTO_ASSIGN -1 +#ifndef XEN_DOMCTL_VMSI_X86_DEST_ID_MASK +#if XEN_DOMCTL_INTERFACE_VERSION >= 0x0000000e +#error vMSI defines missing from domctl.h +#endif + /* shift count for gflags */ #define XEN_PT_GFLAGS_SHIFT_DEST_ID 0 #define XEN_PT_GFLAGS_SHIFT_RH 8 @@ -26,6 +31,16 @@ #define XEN_PT_GFLAGSSHIFT_TRG_MODE 15 #define XEN_PT_GFLAGSSHIFT_UNMASKED 16 +#define XEN_DOMCTL_VMSI_X86_DEST_ID_MASK (0xffU << XEN_PT_GFLAGS_SHIFT_DEST_ID) +#define XEN_DOMCTL_VMSI_X86_RH_MASK (1U << XEN_PT_GFLAGS_SHIFT_RH) +#define XEN_DOMCTL_VMSI_X86_DM_MASK (1U << XEN_PT_GFLAGS_SHIFT_DM) +#define XEN_DOMCTL_VMSI_X86_DELIV_MASK (7U << XEN_PT_GFLAGSSHIFT_DELIV_MODE) +#define XEN_DOMCTL_VMSI_X86_TRIG_MASK (1U << XEN_PT_GFLAGSSHIFT_TRG_MODE) +#define XEN_DOMCTL_VMSI_X86_UNMASKED (1U << XEN_PT_GFLAGSSHIFT_UNMASKED) +#endif + +#define MASK_INSR(v, m) (((v) * ((m) & -(m))) & (m)) + #define latch(fld) latch[PCI_MSIX_ENTRY_##fld / sizeof(uint32_t)] /* @@ -49,21 +64,18 @@ static inline uint32_t msi_ext_dest_id(u static uint32_t msi_gflags(uint32_t data, uint64_t addr) { - uint32_t result = 0; - int rh, dm, dest_id, deliv_mode, trig_mode; + int rh, dm, deliv_mode, trig_mode; rh = (addr >> MSI_ADDR_REDIRECTION_SHIFT) & 0x1; dm = (addr >> MSI_ADDR_DEST_MODE_SHIFT) & 0x1; - dest_id = msi_dest_id(addr); deliv_mode = (data >> MSI_DATA_DELIVERY_MODE_SHIFT) & 0x7; trig_mode = (data >> MSI_DATA_TRIGGER_SHIFT) & 0x1; - result = dest_id | (rh << XEN_PT_GFLAGS_SHIFT_RH) - | (dm << XEN_PT_GFLAGS_SHIFT_DM) - | (deliv_mode << XEN_PT_GFLAGSSHIFT_DELIV_MODE) - | (trig_mode << XEN_PT_GFLAGSSHIFT_TRG_MODE); - - return result; + return MASK_INSR(msi_dest_id(addr), XEN_DOMCTL_VMSI_X86_DEST_ID_MASK) | + MASK_INSR(rh, XEN_DOMCTL_VMSI_X86_RH_MASK) | + MASK_INSR(dm, XEN_DOMCTL_VMSI_X86_DM_MASK) | + MASK_INSR(deliv_mode, XEN_DOMCTL_VMSI_X86_DELIV_MASK) | + MASK_INSR(trig_mode, XEN_DOMCTL_VMSI_X86_TRIG_MASK); } static inline uint64_t msi_addr64(XenPTMSI *msi) @@ -173,7 +185,7 @@ static int msi_msix_update(XenPCIPassthr table_addr = s->msix->mmio_base_addr; } - gflags |= masked ? 0 : (1u << XEN_PT_GFLAGSSHIFT_UNMASKED); + gflags |= masked ? 0 : XEN_DOMCTL_VMSI_X86_UNMASKED; rc = xc_domain_update_msi_irq(xen_xc, xen_domid, gvec, pirq, gflags, table_addr);