From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752909AbdBPBC6 (ORCPT ); Wed, 15 Feb 2017 20:02:58 -0500 Received: from mail-bl2nam02on0079.outbound.protection.outlook.com ([104.47.38.79]:40256 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752342AbdBPBBg (ORCPT ); Wed, 15 Feb 2017 20:01:36 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=David.Daney@cavium.com; From: David Daney To: Linus Walleij , Alexandre Courbot , Rob Herring , Mark Rutland , Marc Zyngier , Thomas Gleixner , linux-gpio@vger.kernel.org, devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org, David Daney Subject: [PATCH v4 2/6] genirq: Add handle_fasteoi_{level,edge}_irq flow handlers. Date: Wed, 15 Feb 2017 17:01:02 -0800 Message-Id: <1487206866-4011-3-git-send-email-david.daney@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1487206866-4011-1-git-send-email-david.daney@cavium.com> References: <1487206866-4011-1-git-send-email-david.daney@cavium.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: BN1PR07CA0054.namprd07.prod.outlook.com (10.255.193.29) To CY1PR0701MB1979.namprd07.prod.outlook.com (10.163.141.21) X-MS-Office365-Filtering-Correlation-Id: 4c0b1dd2-5095-4236-7a8e-08d4560755d5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:CY1PR0701MB1979; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB1979;3:fOttcU+7Iq+ibhvyMC15O1z9pTNOGVhXTiwOmGDJMa61+D30RxyHj+H0XQSUB0E+vlAH9KFp//oO8OKlWyi84c9+Ao+8IZCrLcYDAjK2ULYg/mJ0JPsZYsuP+Ms+oBoC+gr+/xuOFeYqfI8Nryi16JF3dhd7b5+HIgJaKMM7nO3xV09lJ6mAlfqiLW17AAOi6I0CEFmW7DQI8SUE0mE5/2OJ27eCGDykXEB8o1+km4rtgW3Y4wRtu4g590HYOZLOQA5D/nW11yFCCzWyR4h1Nw==;25:kcRpBYwPG2oF02hAy8rCK4gRZ6PNy2A6td27KvxQEzYI3oEdoYhHa/HzAzob0eMX5qrp3EmaBrjiq8y4QMTfZ3y1DPs/tc5sDPkSa65xT48ssw1aHQWm5mJLJnBcwlaMs27hYBNwVEFi904POPWT+1+RGHAjf4nKljQfSPMdAutXM2OYcdJ/DHYTEAi2xKTRLVZxDSi6i+DHi49T4FkClr7F5NRXKyx14jt3gXdyONWP0oySl/Ow7WyLK3ZnqPlOeS106yKMnWJdaZyaen2S0T8a34lWh6kxVKEt5bX6BmhCvjshZGfnoNslCnWTn/g6ugFvT3v0bUhqvf7/bYS1VKgNFoHDf9nEcNUfu7bGUVc+iY+26ILkC9WOBBbW8uO1P11gmxzO9Sa5CLqRU40U5QKt6MevZx+45t1003ai2HIHu4H5wQgjXyzu6QZEvZrISEwo4sKU0f+Vxo4XsgIb0Q== X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB1979;31:flYTFccya3+3nkneOrSJrciGvONgZMsNPZMg/Sf2DOS2s/EbEWAcdn5lIZ8EST7nqL9Xx5GKPoC74SgCjqHsC6tIqfxmSbOBXv0vZMohXg2Q1JgzrqXwRZ6JMFB/1XjHX4iv3JhpXTGL7gfjifLsn1WXXsIYRMU9/rt/NlcJeeccVVUog9XoI/JaOli9rnSTptvIkg545JbjhiWie4zxk0BdULcSP5q4NC1B1cmyb3s=;20:K7scAZ4QAraU3fefWyrs9HKryv/Pv9OaNxnDX/yuzLfBJTqxIYxIrG0V9kDy00dQKcrg9TVJL/IjBvN1b23Z5+Sv9B5TzleGUm5xmbzNDK3vhd8xAC1DEd7U0F6IJ4aQ1qKkBn7fCrN26v7dwt9v4C5O4F7l6/bMBee/ge1kph2t0cFP4G8NlOFMn/s2AOQHUakxDjuWioyzwgb1l7OEDJ4+RfWoOBj6JXwHvl4jIsUSUllUY3Yn3cuAZs/C166V1x7yKggqc5zrFrFKhoa8WXPpesDCNlK621LJgMBV+nRQsPsMpXIOrX1ZnOonGNzPyvNGd8iqaoqJCmPCB04qlrll9ltKwDzF5+NSZw9NXGY0VuQj1cLCArQ6RNokLTmBn3onS7n0GlJcUvWIh2FMLtaSZqlEwprJ9TLp10aWHmKJOOp1/JGly/EsJ30xEnnf8oLHv7GlUFTV7GEqTtWuyIJeYr/xYAJu2Ipr5/IXDRzZw1BSf+4uhVSd6tPOyXce X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041248)(20161123558025)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148);SRVR:CY1PR0701MB1979;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0701MB1979; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB1979;4:p7UiPXtuV7ZQ54vSF7/ueWhipdqZECbsKqlHPKab+Gb5/EV9p4hd/Vo3qOh/D7n5EY2imHtrpSixlXkeTBCs1CJLgeLJa1DoDsF4vku4oNyx82d6LHouSrw6ClE6JgiGFcS0oHuuLlJ04s4e86BZ93J3mCO1ty2h4NtdtXcZxD9Bff0GIcb84CjkcslaqGdtpUAsbctberIvvGsPIffB6gXEgTABqMbW25qKQhsc+o5o4HQTGD4Thqr9tQZGn6z6JLAOmTieaCs8Z0Tuio0pbVa7LZQngWZAKg2NSaZ3EeLPB2lgioj656EZD7ILCQlXYjt3QzatFI1TtsKB6oqph9TtVn7xTfWh3DZXiN8BTm9g36DbxrLhanOderdztgmZnF6buZX4LmrtCUStPfwzK+tdVwZkCBHJodghO5mZX+d8BtxO5GGhNM85qdjFnxrZgZ1+7EMKiCMAuWNyG4BHhyjb5cZqrBgjNlKZf1A+XKdbgI+OnQhgrFnBj8cimoZAr0zLWTs0ZITyyCPdoEpj2r/pNg20MndR0I1BAJ8l2GhFccREPT2jDPQ3SWnrHlNER/ADGjynSLrt1Gk4LvXvsBUuhGXkdMGOy7EeEjMv5KU= X-Forefront-PRVS: 0220D4B98D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(39450400003)(189002)(199003)(76506005)(5660300001)(305945005)(2906002)(33646002)(25786008)(53416004)(105586002)(106356001)(42186005)(189998001)(4326007)(92566002)(36756003)(101416001)(76176999)(50986999)(8676002)(81166006)(68736007)(3846002)(2950100002)(6666003)(81156014)(7736002)(86362001)(5003940100001)(4720700003)(6116002)(6512007)(6506006)(69596002)(47776003)(97736004)(107886003)(6486002)(50466002)(50226002)(66066001)(48376002)(53936002)(389900002)(38730400002)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR0701MB1979;H:localhost.caveonetworks.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0701MB1979;23:IEBgAHLnRfXeIaCLqBFrKjd1pU/cFde1s7sozmq?= =?us-ascii?Q?FYwa4KoWtytHiFTzonf70LCyvUTl6hB2wh0lYAWKEMHebkwJtCdJZU41EHpu?= =?us-ascii?Q?tR5BY6jf/aLVY7Jd8MKFRutocno5Hp2MShuQ/kashq2cjx/+mQj5ycFw5/wC?= =?us-ascii?Q?pq8MvooSDaQbcXzcK6CqXPEIA6BjDf/vA+fwlTHINs1RbU1LilzQqHSYFgg+?= =?us-ascii?Q?5v5ysQtbbd08ezpBTDVS3SQ4M83o2UUJjebw67ssqJFKzumEF9ZmmKpc5tqo?= =?us-ascii?Q?8xRaYNoyi49ssa2MC5HO2brtnVuJy7mD46NhTcxQWi6hvRA0u7bw+lhJmSWl?= =?us-ascii?Q?PlxF9SxaSK5BbuPYR5Het5fIzzvLelrVF6kUJIEyd/k8ygc0xNxhE1rS9fL+?= =?us-ascii?Q?rv0YG9jmDJRETJC0dDScT2hCVL5x5JJqCFVxfA6VKFCHJv1Clc+rtQdW6I+x?= =?us-ascii?Q?1MAzQhyp/Nj1q/gWCS1+P8faUrsB23I93xFhq6mxoO83MF6hNaEBp3ycYmuQ?= =?us-ascii?Q?dIy44htZOYGO5JZRwBxRMALKNJjFlKWUjEBd1R2so1m/GcxFEROOHj0XJW9Z?= =?us-ascii?Q?q3f/ZKGES18FbVbz6L64ijmW9osTQeyZjzfEAsLlA7BRgSRk46zMNBe19jrd?= =?us-ascii?Q?IigZkZDbUDxrFkUb3XGBJDbGaUvBV4KLAUQOQHzPetm3VRPuvMP+k1RTVVNP?= =?us-ascii?Q?tQ/ezGkMtrvzMRyi1qy4EkGGbfL0b6nV2yV6yl8gV8UmjCYp/7vG5Y/cLklc?= =?us-ascii?Q?c/i0fS9k5Uk3eqHN/LL18UpqZptSN0VbwGmA8isfz0BaFP8wahiTtqlk1CLJ?= =?us-ascii?Q?gPh38ACIagZ+jC0hzXUcdcYNvCpaUXM/2TlKxvOe+cDfYtV8sf/FcxEKJATn?= =?us-ascii?Q?Clgbpwa57B5KIGjqBngr0yGRUstcK5H2AyUUt3utXX7GemjZly0MHLvKEWJx?= =?us-ascii?Q?pL51/8iLe6eZGf2ihpjtWDKOPJMUVtRM0nFPgBH8JgSDbpdx19A44VMd0Vjf?= =?us-ascii?Q?N4tI3gSNU61YsWzgvtdhNRqrMnKDUzCnIpZ9jU+4PlW0DLrG0qZeFjMAbeQC?= =?us-ascii?Q?//o1vfQSBH/bTQ4YRqoTePvzqh/wFEJLCooXN3inpkWxZ7n6fGkkcHYGLGz5?= =?us-ascii?Q?VOE/bdBPhS2d8DZWN8dR84TXnr1xSg2F4bnJywFTIFTEBIESeOto/V1YBaE4?= =?us-ascii?Q?+mY6R3vZTV05ORVI6zFIOSWBG5bKWn37kGl9PQhQPdJ4wYCVLhsUuIoTw7Q?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB1979;6:I07WnoUZ8fKk6569TZGJ8xiR4S2TuIGbm0B8OY+O4D0ot20RPW7E+2O8OZ3eu6UFjv0wWxIQ1s4nZVI29HLaIAT/LLmyGgyzB24b7BI8uUU8umR9f1XMJz32uyGxtlUNnPAm7Nw4RtFKHu4LpjeUeimg591U0JZdOaYSk1uEv1QoqMXKnsD+1Jk8OuuezHuFNJ6u/2Dn0AzgIZQt613jhVudc2vgT9b37xAsS0K0u+T16jvM22zJpZcD8+qXhzBN4aA3SK44y9KZAbXQFMdZxhw3qPrYeT8xWA0qYsWzDwQwtonUaZGA6VX2B0/pGYdMnfU8kX0GFl6Lu2mbaq1SCH81n8BKiq8Q6tVYWoHX9OBmCqvP4r8akXSUe+la95fPljzy5/34HwWsWOKy5JmP5w==;5:9HZx4lfEF/ydbtSzjFyDMk6ZV4fAG7Rfl/NTAUwbghgO/+PoYMHzU9B1wNFMhI9MeBH4QgrGvXWs6tJme26Zb2Axv5Zr+1P7vXyqcYGrWNmc7k+4/tAFA9ways96w1vhMAFtov3EKjKyvLNaz3pHJw==;24:0ZyDXctZ9jqT+lWQFb9WfWFbGX2pZ1KfPWhMBbPMkwPqnAFFAybl96w8/GNdnrGl6dvdEA1P8P9lpZ7wmyQOvRQa9Y6imp9SSm2st91DvJ0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR0701MB1979;7:kNUJ7JGw8SOMxBfSppVTPF3QuxT1SJkU5sop/+kyoIBCSpilb7qYw//EwxQv29AmX1DYZ5mG74qEbPUfZE/jkt+TV9OZIlIh0KVrc0xaFTxo8zs9/JpwYrMa2juusGLoYR6KWhstwme5BqPROucBLy3q47JEFTj9tlZcHktZLcXP6wVIw/jV8AVKB32KAGNnyJON0GUMZXbOkX8b+dKEQDd+yMrbYOIGH2w3w8ZAWumJDYeNYkE3hUdX3aMSswjrJJ29dRu8eQE62EJhQB0mWVpBfuFCfA1C2sPSOx5vrL++/4VuxCLW6csqo+K4Ode/28JFxpQAlxOXG+qelyALKA== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Feb 2017 01:01:25.6676 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1979 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Follow-on patch for gpio-thunderx uses a irqdomain hierarchy which requires slightly different flow handlers, add them to chip.c which contains most of the other flow handlers. Signed-off-by: David Daney --- include/linux/irq.h | 2 ++ kernel/irq/chip.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) diff --git a/include/linux/irq.h b/include/linux/irq.h index 39e3254..545b770 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -518,6 +518,8 @@ static inline int irq_set_parent(int irq, int parent_irq) extern int irq_chip_pm_get(struct irq_data *data); extern int irq_chip_pm_put(struct irq_data *data); #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY +extern void handle_fasteoi_edge_irq(struct irq_desc *desc); +extern void handle_fasteoi_level_irq(struct irq_desc *desc); extern void irq_chip_enable_parent(struct irq_data *data); extern void irq_chip_disable_parent(struct irq_data *data); extern void irq_chip_ack_parent(struct irq_data *data); diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 73ea90b..213105d 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -981,6 +981,108 @@ void irq_cpu_offline(void) #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY /** + * handle_fasteoi_edge_irq - irq handler for edge hierarchy + * stacked on transparent controllers + * + * @desc: the interrupt description structure for this irq + * + * Like handle_fasteoi_irq(), but for use with hierarchy where + * the irq_chip also needs to have its ->irq_ack() function + * called. + */ +void handle_fasteoi_edge_irq(struct irq_desc *desc) +{ + struct irq_chip *chip = desc->irq_data.chip; + + raw_spin_lock(&desc->lock); + + if (!irq_may_run(desc)) + goto out; + + desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING); + + /* + * If its disabled or no action available + * then mask it and get out of here: + */ + if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) { + desc->istate |= IRQS_PENDING; + mask_irq(desc); + goto out; + } + + kstat_incr_irqs_this_cpu(desc); + if (desc->istate & IRQS_ONESHOT) + mask_irq(desc); + + /* Start handling the irq */ + desc->irq_data.chip->irq_ack(&desc->irq_data); + + preflow_handler(desc); + handle_irq_event(desc); + + cond_unmask_eoi_irq(desc, chip); + + raw_spin_unlock(&desc->lock); + return; +out: + if (!(chip->flags & IRQCHIP_EOI_IF_HANDLED)) + chip->irq_eoi(&desc->irq_data); + raw_spin_unlock(&desc->lock); +} +EXPORT_SYMBOL_GPL(handle_fasteoi_edge_irq); + +/** + * handle_fasteoi_level_irq - irq handler for level hierarchy + * stacked on transparent controllers + * + * @desc: the interrupt description structure for this irq + * + * Like handle_fasteoi_irq(), but for use with hierarchy where + * the irq_chip also needs to have its ->irq_mask_ack() function + * called. + */ +void handle_fasteoi_level_irq(struct irq_desc *desc) +{ + struct irq_chip *chip = desc->irq_data.chip; + + raw_spin_lock(&desc->lock); + mask_ack_irq(desc); + + if (!irq_may_run(desc)) + goto out; + + desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING); + + /* + * If its disabled or no action available + * then mask it and get out of here: + */ + if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) { + desc->istate |= IRQS_PENDING; + mask_irq(desc); + goto out; + } + + kstat_incr_irqs_this_cpu(desc); + if (desc->istate & IRQS_ONESHOT) + mask_irq(desc); + + preflow_handler(desc); + handle_irq_event(desc); + + cond_unmask_eoi_irq(desc, chip); + + raw_spin_unlock(&desc->lock); + return; +out: + if (!(chip->flags & IRQCHIP_EOI_IF_HANDLED)) + chip->irq_eoi(&desc->irq_data); + raw_spin_unlock(&desc->lock); +} +EXPORT_SYMBOL_GPL(handle_fasteoi_level_irq); + +/** * irq_chip_enable_parent - Enable the parent interrupt (defaults to unmask if * NULL) * @data: Pointer to interrupt specific data -- 1.8.3.1