From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751630AbdARIgM (ORCPT ); Wed, 18 Jan 2017 03:36:12 -0500 Received: from mail-cys01nam02on0080.outbound.protection.outlook.com ([104.47.37.80]:22016 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751281AbdARIgK (ORCPT ); Wed, 18 Jan 2017 03:36:10 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Tomasz.Nowicki@caviumnetworks.com; Subject: Re: [PATCH v8 12/18] irqdomain: Add irq domain MSI and MSI_REMAP flags To: Eric Auger , , , , , , , , , , References: <1484127714-3263-1-git-send-email-eric.auger@redhat.com> <1484127714-3263-13-git-send-email-eric.auger@redhat.com> CC: , , , , , , , , , , From: Tomasz Nowicki Message-ID: <5b5695c2-2607-4997-516a-699b39bfdb43@caviumnetworks.com> Date: Wed, 18 Jan 2017 09:35:53 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: <1484127714-3263-13-git-send-email-eric.auger@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [31.172.191.173] X-ClientProxiedBy: HE1PR05CA0071.eurprd05.prod.outlook.com (10.164.28.39) To SN1PR07MB2175.namprd07.prod.outlook.com (10.164.47.21) X-MS-Office365-Filtering-Correlation-Id: 54d990ba-f0d9-4285-b18c-08d43f7d0b65 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:SN1PR07MB2175; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2175;3:izs/FgoIVGCi2dbuItqLjgYs7UT30Pv++YOXKNfquNVFHguQi7kniNgPgey27kKluNY/+dgDDIULJz4E1hHzjzmnYX8VISbt4zxi03liatvGLKCVkK8tvxuZUqDjhawT/twEYQBikHis/uEEdgK+j7UXHe3yzX7nL3TaAhB9BOoXtw4wIc7eVXJ0twCYY/3V5bjUdnSAe727YK3l3J24mhYgMvt1mUiJWU5TFB2r9E91V62eVHzDCAsd6QonRI51WwevTCdyzoK9tLX/cgYTEA== X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2175;25:c2ZUhI8e15KsdaR21+8qkv+ErzukcsxcnbwOibaNNxmCq+0jtFPGOhnqmOfTQkJXXfwGPpUrD5axeljJJS/k71rbVZAkUFbCHxbm0Z9GFY050ADUtTzqKBJ6WxK7EZaAzW3An/75HndY89ixVTzkr0Cw85pHHbFTCIWmKneR64SC+T/wMcNm7kTQVE0nGN45AeaXLVWXEDa/NBB2RxTli4TDSRFElT8HWcHC+Qm5+mAIX8XvmPGzGrapdPh7hB/2bhvBtUVXksR5/N8olkLeitGoLJAXeWqpByvb/h91CEVs9WNffbWUGfFYx1Qo+C+3+94JJbZ6RNcg4Vmq6AsI6QgO4GNnzo/hQKCXfqDinV34ovzjMsE73T1Jj2AskToBR++aUsHNsdI4uHg7v8PuqYvFDRVSHQwa0nygVhHXFgqVVoo75z0NfjwW42hM5IVFKQNYuYnxfT0S9ikU1/j8ESduexPq3Ei8wzdHg6m982exMt3fspzFxvyoNXVvWR3m3X1q5vA4gQ1PWFvGt+iz6fvgKQmDAYnCieGUgsFWHLiF1bvRam1nodYlUGEPLO+YxHmLezGkcTGfMeiWJQvII+px/tUJ0+ZxIPCkQqg1aZxLeJE5WXgiZeusl7qSG+hwPxQ8sPlcvDjl9QVBDJT9+0yn26vLgSkjGFvCuksTUJtjFF/Flcz6Taq/P2hgigaLQs7fLEcOfPHeGAAg5AOd5jzpon/MiGvJKfvw8KKyO7L+6+Xetv0SapJxRC9DVJO2 X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2175;31:3GWqMthHulszFBrtmV+uJzzge83WuUpXa6hxJLAlRhVa28wCoaiJK8DhL9leZA4wIfqrJamNgB/L1/8dbGidQx7BHJarpwBNLwOd7ivgdeTSo555J8gHPDZQ3GzLfHGHCp3fIVcpiv8L6ZcJidrSOjESVhlEHZXrjBGRt1HCGZK9+wr6czTdHqRaruQuZxgERXYao7oM05xMI19GoaFGPf4cOuj1qfk/eiyqZXqYpAQ0lGiFFB/CmC5RTMV7XrAc8yAHi78i4vXQtqgCdLe5QA==;20:+eXzwqjEEBQua46MKSYk1s3d/syDyDvNT3mq/njcWCdQ2C4EXWKAYa6CwDumdd7EMBkjSk3EVJJJJdv2r2uW8XdPfMfVhaVlwgU9tP6LNn/hrHqsyvD7Mk2vk9IsUiEDtj2NvXc6O4PJ4XULkX5Yulf+/BgxIshWTOwZgVVLlq/5RVt9QkycWS0pPAw4pjXJRRfbc67Y44/ozESxFvzgmQPhS3Q1KjPhtmgkhw5hbUG5G14H1v+O4fll1MZ+Z/5zllhVojUs8RfPYJrlW6aI4iQ8ThROYiQujUI/Cv2ifgCjE6BAhEWn4aGNsHj6ZQQE/AFWN5RkRoEpz6dGN4Y0wRAY4+pP++CxXm5u4kj3ZVPEXI5EyVwQVlDYLJsg3tFUtnzGtw1c/XXtxDehrewDxw3vmX23R2qWaJ3SOByRx3ROU7fO4/Mi0dSw/irwyaJKRjyKluLRr+20NciNVl0/Zl7vkBjC5YsTv1c5z4MyWO7k8iF6TT3tjz8XxZdkrYKwwL5m+7zBbPQEkBg2rQtA+f6YkFjRjVM7ZiLuTcRqTTPH3jFLrQpBkRMLyMgu6N83cQ741iFdOAj2v2Zs/qvtynAMf7DahwYDgiHEg2ftW/M= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123560025)(20161123564025)(20161123555025)(20161123562025)(6072148);SRVR:SN1PR07MB2175;BCL:0;PCL:0;RULEID:;SRVR:SN1PR07MB2175; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2175;4:e+sHF7fyG1+rl3eIKAXcSmRsyqc17dc/spqIVA0hIeDzDHexHbBr4833xVllcXbl9REgeNrevIMvFxlG35HWIu/87a4dJ+v6A7+sjjDUXnHu+LoRunU0NWnbY8OLfBo/ZbSW+uL4vGkCo89f88KgnrYcxrZ80O3dIMq4EJ0RIawxGLRGhUH42HWuL7QrUbFeQnVy3ZvngcRYNUbQMMsrvwWYQkl25vKgGm+9cbAB7iwnYxgch/EzCw8NyHjwR/NDiao52DAD8t9kHOvMXjKp+I9UoW/BNjQr0nWlBVqIMSUX6jR541ExK98VHqRxlJmrWvBrjmPSNNyzw26yG8zewgkKHBsSyEQCsbHHeHENrDrU2zeOZ+AID6kPNL0ujC571MpUlHWEwaBxvdQf8AM7/tKK3LbiDkrKJkAeJp1wtqDsbhslRQboVyWCnhQnkTfpVBhWQs/QkNkU1R/qMoNwD/pjn9QhUrdxmujOL9Biuv51sZTiqiSlUWZtF/24JxP6u59ytBxGBBdi3cHL+wHfUO6u0WIWiH9MlqVH1T0WoUxS3+hEJ+PneQpC8UjyXQmCVpBap6Fiao31m9wux1NkkJXsPUgoHv3Do/X4ZcW1OsF7UyA/xJX7gqg/Tl1WhGyJ X-Forefront-PRVS: 01917B1794 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(39450400003)(24454002)(189002)(199003)(23746002)(53936002)(65956001)(8656002)(5660300001)(66066001)(90366009)(47776003)(54906002)(39060400001)(7416002)(38730400001)(229853002)(230700001)(6486002)(4001350100001)(25786008)(36756003)(77096006)(97736004)(6666003)(2950100002)(305945005)(101416001)(106356001)(54356999)(575784001)(7736002)(81156014)(31696002)(31686004)(81166006)(68736007)(8676002)(42186005)(50466002)(2201001)(83506001)(5001770100001)(64126003)(92566002)(2906002)(3846002)(6116002)(76176999)(50986999)(4326007)(33646002)(189998001)(105586002)(921003)(1121003)(83996005)(2101003);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR07MB2175;H:[10.0.0.85];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;SN1PR07MB2175;23:fLJzYEZEiLIUABLtU30UVZcRN3XoS6z3pVdFU?= =?Windows-1252?Q?4YKIzWV8tozz48FmfeVN7DqtBQQo1+4TMjWiRUoIIPgyHlDdQWKNTQGW?= =?Windows-1252?Q?hQKNwmtjEJTsr1Hc3JeJymhsaLxvnKKhrxRSztZxPi6b/7w/ko7siI98?= =?Windows-1252?Q?rE+LC2pBlKU/kFkNfrc6wmneklvdqYuuyw/A7efuo9xcdu/zJF7LgLa9?= =?Windows-1252?Q?lwnrXBNiApEqY3joDp85upwyH8AgDzc81HPrSub/YdIgaN7WELIX4oC+?= =?Windows-1252?Q?js4p/I13dANFc1dnM6E04oT73XccIH3jiXnvj0EEbPBtYaNvXpwkOfUr?= =?Windows-1252?Q?qpOHnyXA6+3xqXVrTYD9EAGHSt47yTWKluLCoqXP6lmXwh7uUcQ9Z94e?= =?Windows-1252?Q?AhW/rwVIGpJAnlY+6HPerVD4crESxyJbm2kELhhcA0BPc3jw/W20jTuA?= =?Windows-1252?Q?TKMSz8A4xGr9CewN7QH0Use+wG6UkK9svKKAcfGdXJCaSPvy7Rq6TXTz?= =?Windows-1252?Q?O8NBemWavnz+tLs9WlinleWmBOzCTPX3SOsCSmqn/k6bjTosTjquVJLh?= =?Windows-1252?Q?nYSRBb3NoSHl1+nKX/wyZYSdvnL7SEPGVwxQCLnjMX+kBTb1ZZHN0yxi?= =?Windows-1252?Q?+1XLRaUBID0bSY897Bn/46eoAWlhMvG6U8oZtVh4AyNuKCUJ+iut4UnX?= =?Windows-1252?Q?IpdUX0YXFZ2YbVMtfffpDiQfaxpG0frSOPylrIl9hrWAIpAvD1fJuCUf?= =?Windows-1252?Q?L2plNlBn8J28a8pvsgqpFXIZc3JKrtjmz7IIQVVUemwDLv86HFhaFOC/?= =?Windows-1252?Q?xvxTH3Bp2cAjDtN0U763PTfkTFdpU49sqXIekSP7WWucPt1YHo8J5NNp?= =?Windows-1252?Q?g0f25MPNiHAXBmdMQRgchFrTdfRaB2yJMzkb5AwWAhLY7rPmNZtI2jj8?= =?Windows-1252?Q?m4W43JbW1pYgiWfGsbXZiGIzS6zpwDc6/FLVCc312sbYDVjs+CYX76vb?= =?Windows-1252?Q?X24CNyLiYUNV08DZ/UBwAMvOO+sg6e+jkc9avchRIT5P5OFJNNi/8y0v?= =?Windows-1252?Q?PUpQeU7NqarPj6ksCqSPSQrot6xyPMTzZcQMnURFSxEb6hi0qbqwWUu1?= =?Windows-1252?Q?Xvend3Z+Kb0pnh2of2x1CCtTyWkDtkD3oD97ZJpHHVINeShTWEbvjKYJ?= =?Windows-1252?Q?nwDokV7HVOL+RDEWfBPYiJ4lqM8MmxoO9+Sx1B+h+tvfH3EVhJLmD/hd?= =?Windows-1252?Q?JbxRgNamNi4/GgDudgFn1ExRVn3NqAB5PVrsytxLrfoKpt49zg7QugyU?= =?Windows-1252?Q?Wh1DGrE3md7ckBKUnLcaCA8MgWiDOwLXskp1ePCyV4Df7nhq7QLVtaVO?= =?Windows-1252?Q?jaLz7VinqUJiMVzEYRVwmIKm2IYVtr39g2QdvhmG6Eq6/KGWLuvS5PpF?= =?Windows-1252?Q?WczgWeqRasJkEDzsL10Xh8djWVwE5o+QnSR1FsjaTlnPpM4O6QD8W0i0?= =?Windows-1252?Q?NdzJP4fZKRj0HA/9bkn1e5uGk4AcDB7Sanc08X31LIE09uGHpJQI8DhR?= =?Windows-1252?Q?E6sr3gvCfED1ls5k45JPL1sU7tPr6FIywPI?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2175;6:q9dwyR3Ct8weK3pBgZtLw6IcDWYRkfc0uqr7ZT0ymh3FBamedeeYwyWtfgLGWb77/mrIUPHxJwdsQqy2cUfYBqw/AGbLV5W7vGeUum4V0M0cD/lV9VF1BqPFY1HLphgb4bO6oxW2OnqvKoj/9iTeZxEQNClL0JQ8ThYol4AdzE/2EL5pwmAlxr0UnDU1ZuuUszFga17ra8MaitDjwOkwVsMqIMFYzzK3njshFwQxMkFQMpGI0uEMRPXNRyhpDkvSGedQJZ6PHZo4V1OES3f5+8RR6mt3Epi7XwqkzL0z7ANU9Djy8sH3ONN0anuxbTHJIrj9NhsCpX4NeC7nHVl/sBAOuQiFiI8seTNaVKWjkeEWRTQBedaSntabB/5VyhAF9xTC4xTIZge+o7amn/l+dlxELbt/eGGxpfS+UOrRBlg=;5:5bnCGVwbnppMXwlEiZmVO3R1j4wrezQjBCFQ0DFoSdIsFCyHkvtPGUOfui2IUMqL3ovZw60mB5EKG0sWPsN77PD6aGSQ5Xa9uyZglzEtAGHYK3B5cmK+Y3FWJs8Ge4ED1AK6LyMxmYx6BzoCDeHVhw==;24:WrxGQKYNw0HxcLPY5mEpTJ32FdWs7zFfejknl9E8DmyBykgvr7Obq/UxY0nMU7MFk83zATV+HMFp57lmP9qRWJKa+B9l5k8gzklzPuwEn3g= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2175;7:XQoOP7ugzlUQJZcnHXZzoPJKqeeyeTclcBGzUjqUevlfiqEVqw+7lwl3wux4BmVQ1J2las9ta+89V/NGTVz1ndE245RwL8gFKwcAQWZPKMVLK+fryA+kzH1KIwkY0lgUIYikv3hK9ZQrhl/iCtziLzFZ/LD/WOmIVC/jOv3wpvlr2DLV37hJ8PuoddxUpEuN+ruBTGhRwURwSgyRz+5QrH+CCf1Km/XTS3SvKUBQorGRpJLBs/SYwxDpyz7MSaL5BA28UZ3+G+PHlFefhOB/ULDWObdTA5vCPUhK99ierssfd9A9zJSP99WURab/LDt3OYeKWh/mlGiJlMaNWYc/qGsBEJNA1h8dIOuQFZA+surM0ViquYecRAPptuCPqa7zX225le7os505LBM9uEZBwwao8/U1xznoEDTqBOFwyQq8OUBIn19Z/LtJvNDU5O7qM+k3S/ZLvSFN7uX6f+lHNg== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2017 08:36:01.6252 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR07MB2175 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11.01.2017 10:41, Eric Auger wrote: > We introduce two new enum values for the irq domain flag: > - IRQ_DOMAIN_FLAG_MSI indicates the irq domain corresponds to > an MSI domain > - IRQ_DOMAIN_FLAG_MSI_REMAP indicates the irq domain has MSI > remapping capabilities. > > Those values will be useful to check all MSI irq domains have > MSI remapping support when assessing the safety of IRQ assignment > to a guest. > > irq_domain_hierarchical_is_msi_remap() allows to check if an > irq domain or any parent implements MSI remapping. > > Signed-off-by: Eric Auger > Reviewed-by: Marc Zyngier Reviewed-by: Tomasz Nowicki Thanks, Tomasz > > --- > > v7 -> v8: > - remove h variable in irq_domain_hierarchical_is_msi_remap > - add Marc's R-b > > v6: > - add IRQ_DOMAIN_FLAG_MSI as suggested by Marc > - add irq_domain_is_msi, irq_domain_is_msi_remap and > irq_domain_hierarchical_is_msi_remap > --- > include/linux/irqdomain.h | 35 +++++++++++++++++++++++++++++++++++ > kernel/irq/irqdomain.c | 14 ++++++++++++++ > 2 files changed, 49 insertions(+) > > diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h > index ffb8460..bc2f571 100644 > --- a/include/linux/irqdomain.h > +++ b/include/linux/irqdomain.h > @@ -183,6 +183,12 @@ enum { > /* Irq domain is an IPI domain with single virq */ > IRQ_DOMAIN_FLAG_IPI_SINGLE = (1 << 3), > > + /* Irq domain implements MSIs */ > + IRQ_DOMAIN_FLAG_MSI = (1 << 4), > + > + /* Irq domain implements MSI remapping */ > + IRQ_DOMAIN_FLAG_MSI_REMAP = (1 << 5), > + > /* > * Flags starting from IRQ_DOMAIN_FLAG_NONCORE are reserved > * for implementation specific purposes and ignored by the > @@ -446,6 +452,19 @@ static inline bool irq_domain_is_ipi_single(struct irq_domain *domain) > { > return domain->flags & IRQ_DOMAIN_FLAG_IPI_SINGLE; > } > + > +static inline bool irq_domain_is_msi(struct irq_domain *domain) > +{ > + return domain->flags & IRQ_DOMAIN_FLAG_MSI; > +} > + > +static inline bool irq_domain_is_msi_remap(struct irq_domain *domain) > +{ > + return domain->flags & IRQ_DOMAIN_FLAG_MSI_REMAP; > +} > + > +extern bool irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain); > + > #else /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > static inline void irq_domain_activate_irq(struct irq_data *data) { } > static inline void irq_domain_deactivate_irq(struct irq_data *data) { } > @@ -477,6 +496,22 @@ static inline bool irq_domain_is_ipi_single(struct irq_domain *domain) > { > return false; > } > + > +static inline bool irq_domain_is_msi(struct irq_domain *domain) > +{ > + return false; > +} > + > +static inline bool irq_domain_is_msi_remap(struct irq_domain *domain) > +{ > + return false; > +} > + > +static inline bool > +irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain) > +{ > + return false; > +} > #endif /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > > #else /* CONFIG_IRQ_DOMAIN */ > diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c > index 8c0a0ae..876e131 100644 > --- a/kernel/irq/irqdomain.c > +++ b/kernel/irq/irqdomain.c > @@ -1392,6 +1392,20 @@ static void irq_domain_check_hierarchy(struct irq_domain *domain) > if (domain->ops->alloc) > domain->flags |= IRQ_DOMAIN_FLAG_HIERARCHY; > } > + > +/** > + * irq_domain_hierarchical_is_msi_remap - Check if the domain or any > + * parent has MSI remapping support > + * @domain: domain pointer > + */ > +bool irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain) > +{ > + for (; domain; domain = domain->parent) { > + if (irq_domain_is_msi_remap(domain)) > + return true; > + } > + return false; > +} > #else /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > /** > * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomasz Nowicki Subject: Re: [PATCH v8 12/18] irqdomain: Add irq domain MSI and MSI_REMAP flags Date: Wed, 18 Jan 2017 09:35:53 +0100 Message-ID: <5b5695c2-2607-4997-516a-699b39bfdb43@caviumnetworks.com> References: <1484127714-3263-1-git-send-email-eric.auger@redhat.com> <1484127714-3263-13-git-send-email-eric.auger@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1484127714-3263-13-git-send-email-eric.auger@redhat.com> Sender: linux-kernel-owner@vger.kernel.org To: Eric Auger , eric.auger.pro@gmail.com, christoffer.dall@linaro.org, marc.zyngier@arm.com, robin.murphy@arm.com, alex.williamson@redhat.com, will.deacon@arm.com, joro@8bytes.org, tglx@linutronix.de, jason@lakedaemon.net, linux-arm-kernel@lists.infradead.org Cc: drjones@redhat.com, kvm@vger.kernel.org, punit.agrawal@arm.com, linux-kernel@vger.kernel.org, geethasowjanya.akula@gmail.com, diana.craciun@nxp.com, iommu@lists.linux-foundation.org, pranav.sawargaonkar@gmail.com, bharat.bhushan@nxp.com, shankerd@codeaurora.org, gpkulkarni@gmail.com List-Id: iommu@lists.linux-foundation.org On 11.01.2017 10:41, Eric Auger wrote: > We introduce two new enum values for the irq domain flag: > - IRQ_DOMAIN_FLAG_MSI indicates the irq domain corresponds to > an MSI domain > - IRQ_DOMAIN_FLAG_MSI_REMAP indicates the irq domain has MSI > remapping capabilities. > > Those values will be useful to check all MSI irq domains have > MSI remapping support when assessing the safety of IRQ assignment > to a guest. > > irq_domain_hierarchical_is_msi_remap() allows to check if an > irq domain or any parent implements MSI remapping. > > Signed-off-by: Eric Auger > Reviewed-by: Marc Zyngier Reviewed-by: Tomasz Nowicki Thanks, Tomasz > > --- > > v7 -> v8: > - remove h variable in irq_domain_hierarchical_is_msi_remap > - add Marc's R-b > > v6: > - add IRQ_DOMAIN_FLAG_MSI as suggested by Marc > - add irq_domain_is_msi, irq_domain_is_msi_remap and > irq_domain_hierarchical_is_msi_remap > --- > include/linux/irqdomain.h | 35 +++++++++++++++++++++++++++++++++++ > kernel/irq/irqdomain.c | 14 ++++++++++++++ > 2 files changed, 49 insertions(+) > > diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h > index ffb8460..bc2f571 100644 > --- a/include/linux/irqdomain.h > +++ b/include/linux/irqdomain.h > @@ -183,6 +183,12 @@ enum { > /* Irq domain is an IPI domain with single virq */ > IRQ_DOMAIN_FLAG_IPI_SINGLE = (1 << 3), > > + /* Irq domain implements MSIs */ > + IRQ_DOMAIN_FLAG_MSI = (1 << 4), > + > + /* Irq domain implements MSI remapping */ > + IRQ_DOMAIN_FLAG_MSI_REMAP = (1 << 5), > + > /* > * Flags starting from IRQ_DOMAIN_FLAG_NONCORE are reserved > * for implementation specific purposes and ignored by the > @@ -446,6 +452,19 @@ static inline bool irq_domain_is_ipi_single(struct irq_domain *domain) > { > return domain->flags & IRQ_DOMAIN_FLAG_IPI_SINGLE; > } > + > +static inline bool irq_domain_is_msi(struct irq_domain *domain) > +{ > + return domain->flags & IRQ_DOMAIN_FLAG_MSI; > +} > + > +static inline bool irq_domain_is_msi_remap(struct irq_domain *domain) > +{ > + return domain->flags & IRQ_DOMAIN_FLAG_MSI_REMAP; > +} > + > +extern bool irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain); > + > #else /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > static inline void irq_domain_activate_irq(struct irq_data *data) { } > static inline void irq_domain_deactivate_irq(struct irq_data *data) { } > @@ -477,6 +496,22 @@ static inline bool irq_domain_is_ipi_single(struct irq_domain *domain) > { > return false; > } > + > +static inline bool irq_domain_is_msi(struct irq_domain *domain) > +{ > + return false; > +} > + > +static inline bool irq_domain_is_msi_remap(struct irq_domain *domain) > +{ > + return false; > +} > + > +static inline bool > +irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain) > +{ > + return false; > +} > #endif /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > > #else /* CONFIG_IRQ_DOMAIN */ > diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c > index 8c0a0ae..876e131 100644 > --- a/kernel/irq/irqdomain.c > +++ b/kernel/irq/irqdomain.c > @@ -1392,6 +1392,20 @@ static void irq_domain_check_hierarchy(struct irq_domain *domain) > if (domain->ops->alloc) > domain->flags |= IRQ_DOMAIN_FLAG_HIERARCHY; > } > + > +/** > + * irq_domain_hierarchical_is_msi_remap - Check if the domain or any > + * parent has MSI remapping support > + * @domain: domain pointer > + */ > +bool irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain) > +{ > + for (; domain; domain = domain->parent) { > + if (irq_domain_is_msi_remap(domain)) > + return true; > + } > + return false; > +} > #else /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > /** > * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain > From mboxrd@z Thu Jan 1 00:00:00 1970 From: tnowicki@caviumnetworks.com (Tomasz Nowicki) Date: Wed, 18 Jan 2017 09:35:53 +0100 Subject: [PATCH v8 12/18] irqdomain: Add irq domain MSI and MSI_REMAP flags In-Reply-To: <1484127714-3263-13-git-send-email-eric.auger@redhat.com> References: <1484127714-3263-1-git-send-email-eric.auger@redhat.com> <1484127714-3263-13-git-send-email-eric.auger@redhat.com> Message-ID: <5b5695c2-2607-4997-516a-699b39bfdb43@caviumnetworks.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 11.01.2017 10:41, Eric Auger wrote: > We introduce two new enum values for the irq domain flag: > - IRQ_DOMAIN_FLAG_MSI indicates the irq domain corresponds to > an MSI domain > - IRQ_DOMAIN_FLAG_MSI_REMAP indicates the irq domain has MSI > remapping capabilities. > > Those values will be useful to check all MSI irq domains have > MSI remapping support when assessing the safety of IRQ assignment > to a guest. > > irq_domain_hierarchical_is_msi_remap() allows to check if an > irq domain or any parent implements MSI remapping. > > Signed-off-by: Eric Auger > Reviewed-by: Marc Zyngier Reviewed-by: Tomasz Nowicki Thanks, Tomasz > > --- > > v7 -> v8: > - remove h variable in irq_domain_hierarchical_is_msi_remap > - add Marc's R-b > > v6: > - add IRQ_DOMAIN_FLAG_MSI as suggested by Marc > - add irq_domain_is_msi, irq_domain_is_msi_remap and > irq_domain_hierarchical_is_msi_remap > --- > include/linux/irqdomain.h | 35 +++++++++++++++++++++++++++++++++++ > kernel/irq/irqdomain.c | 14 ++++++++++++++ > 2 files changed, 49 insertions(+) > > diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h > index ffb8460..bc2f571 100644 > --- a/include/linux/irqdomain.h > +++ b/include/linux/irqdomain.h > @@ -183,6 +183,12 @@ enum { > /* Irq domain is an IPI domain with single virq */ > IRQ_DOMAIN_FLAG_IPI_SINGLE = (1 << 3), > > + /* Irq domain implements MSIs */ > + IRQ_DOMAIN_FLAG_MSI = (1 << 4), > + > + /* Irq domain implements MSI remapping */ > + IRQ_DOMAIN_FLAG_MSI_REMAP = (1 << 5), > + > /* > * Flags starting from IRQ_DOMAIN_FLAG_NONCORE are reserved > * for implementation specific purposes and ignored by the > @@ -446,6 +452,19 @@ static inline bool irq_domain_is_ipi_single(struct irq_domain *domain) > { > return domain->flags & IRQ_DOMAIN_FLAG_IPI_SINGLE; > } > + > +static inline bool irq_domain_is_msi(struct irq_domain *domain) > +{ > + return domain->flags & IRQ_DOMAIN_FLAG_MSI; > +} > + > +static inline bool irq_domain_is_msi_remap(struct irq_domain *domain) > +{ > + return domain->flags & IRQ_DOMAIN_FLAG_MSI_REMAP; > +} > + > +extern bool irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain); > + > #else /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > static inline void irq_domain_activate_irq(struct irq_data *data) { } > static inline void irq_domain_deactivate_irq(struct irq_data *data) { } > @@ -477,6 +496,22 @@ static inline bool irq_domain_is_ipi_single(struct irq_domain *domain) > { > return false; > } > + > +static inline bool irq_domain_is_msi(struct irq_domain *domain) > +{ > + return false; > +} > + > +static inline bool irq_domain_is_msi_remap(struct irq_domain *domain) > +{ > + return false; > +} > + > +static inline bool > +irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain) > +{ > + return false; > +} > #endif /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > > #else /* CONFIG_IRQ_DOMAIN */ > diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c > index 8c0a0ae..876e131 100644 > --- a/kernel/irq/irqdomain.c > +++ b/kernel/irq/irqdomain.c > @@ -1392,6 +1392,20 @@ static void irq_domain_check_hierarchy(struct irq_domain *domain) > if (domain->ops->alloc) > domain->flags |= IRQ_DOMAIN_FLAG_HIERARCHY; > } > + > +/** > + * irq_domain_hierarchical_is_msi_remap - Check if the domain or any > + * parent has MSI remapping support > + * @domain: domain pointer > + */ > +bool irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain) > +{ > + for (; domain; domain = domain->parent) { > + if (irq_domain_is_msi_remap(domain)) > + return true; > + } > + return false; > +} > #else /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > /** > * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain >