From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753238AbdDKRXM (ORCPT ); Tue, 11 Apr 2017 13:23:12 -0400 Received: from mail-by2nam01on0051.outbound.protection.outlook.com ([104.47.34.51]:36944 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752534AbdDKRVT (ORCPT ); Tue, 11 Apr 2017 13:21:19 -0400 Authentication-Results: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=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 v6 2/6] genirq: Add handle_fasteoi_{level,edge}_irq flow handlers. Date: Tue, 11 Apr 2017 10:21:05 -0700 Message-Id: <1491931269-15650-3-git-send-email-david.daney@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1491931269-15650-1-git-send-email-david.daney@cavium.com> References: <1491931269-15650-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: SN2PR07CA009.namprd07.prod.outlook.com (10.255.174.26) To DM5PR07MB3498.namprd07.prod.outlook.com (10.164.153.29) X-MS-Office365-Filtering-Correlation-Id: 58912354-18ff-4b1a-d7ac-08d480ff2a19 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:DM5PR07MB3498; X-Microsoft-Exchange-Diagnostics: 1;DM5PR07MB3498;3:Nj6k5CF6colmdL5hGC0mvLS2wA9/oyeAbGsb2H2TA5Sn7XrFWpBusba6jdR5U/9Ib5I2YqNpQiZm+WeQOcevNHNfsSEg89RFqoUTPHGv12PifxbnBNgBm7iw3qPU4KoVr6MvoPTijBAYGZP0yyFu9vC/nginp2ttOeJHQhbOcUFaSYEeqngcRC9hneAz6y2V12Fkv8q9q+QnSKzmVaJeQkD9aw6tziTQQi/M1pASpqtI90jvKPGbIRwx/3WOTiKL6hbkCs1T9FsuTpEpDkFdhgo/rBJ9bO6U0AZ6pTZXZgphfAqyOp10Z9z9oYPVcI+QyvZinMU181nWpsOcPtj3RA==;25:q93HY8s/y1LvdY7ZiFNRkT7UuigvFtQEWSjn6Yn8cQiVQH3ayW6Z2p+iGAzPXZKGqqnRrtfelVTDdSEMzEae+3tTU+LT1a/X1eUSj+cMC+m34CErJwXmy7t6XSqsMobjl8nze3eUKQOa7e6FpqzIEepDb+bumfiK9i6gQe3IaXSSNFJ0y897/G/SqwSpV60CffBV/2l/a6izHC0sTjaug4+1XbAsFsOlUlx+LWw+AHjI6XXe9Y+hMxH10ZfzY6VwbRzkyZu11QHpGiY+xk8VW9IkUtqFZbEeXBcbpREmtsXwdfLVBCx+OYRcfkXDWBesjbtoO2cyCevtqNXozf7C85uggoLbcKVAZSviIxBX7uSTtdCCMZSdEx5kq9+X5s/mOsUEP2zUQ2AtuHxhbo/enoBbz1sNhwKyu2F5pEaqH6/DlyZdFvpH0kxS+NMf8hVE9+OvoWOwLNTn4dtfWpDHpQ== X-Microsoft-Exchange-Diagnostics: 1;DM5PR07MB3498;31:iTMXVmJntn4hzybsEn7T/R2GEpZ/WaOnK+0HYvF1N6zL8j8r6wuyvssqUx9jGoTDXs4EsfCtaG4+Yum5kzgb+tcq9FQbQGcOfII0WCWa26fBPIW8qAwGdNp76j1H+rFkVIWHmqCLQwBlcc1uQmNCQitcsjJ7Jdl8OooO9KbL97/VT8cV/bFOV837CaBCTdz8o1iBbwasesvz6Gv7cdShjxou2EmsnKMZCaai/nMPWxk2fS9749ISh3ouzAFACEv96FZIthaHjYbmFtA5m6QEjw==;20:jVz6ceaGCjzada/OfdoL6poV8NqmMBHEWoz3l5rYAtuXyco7GuXAzP6GdbWWlZynw9FMN2of/wjtW04BwnWIyFIBO4TpHYMOOnGsTZSzbZnXPMv+KifiBTQimdMocMIViTbHjHZGpbWEJPRd6v6sCXACGG64xcQ2KhtpwbyiuM6HsoXo6Ns6bsP1gTIKOIhwhzGe6wwzEdX6Hv1QQbmk6/VnDlgW9QsyfbGXHVBfjmDjOx2Ix7ewsBOeuwgU9MEKqFTVHHas1SASIdQAQUnkKCSVDD9SdeDofzmpXG25qpVf+kcKsiBQ2+XLup2VPaJYvy+/ZNdfN+sW951nTrCh0sCjJeqTFe6sZqgiAGUYk6qLXIFZ3t6Wdq00iNwztwwQhlpDcWSg4EP21tGLXUoTuh84kK38IUa11xm5LwhTO1ubr6QYCI37TxkMk4mGGYOtBLkxLHLaS5APRMIF8zmk5b170mL2qKpq5CvqdkRgGcxWmTKCUe3ULrv0cE9+2M9X X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(6072148);SRVR:DM5PR07MB3498;BCL:0;PCL:0;RULEID:;SRVR:DM5PR07MB3498; X-Microsoft-Exchange-Diagnostics: 1;DM5PR07MB3498;4:IrlfXl6YqUjgB1gQh4z7guuGuCSj0ea7q77ZX4jcxaJQgQpXnVCQBivBrfIF7gFZFksh2KtrYq4HXkgGk0E7VUr7YrzG5SlLif+dWE9PxHUl+VgnwstYFcim9WfeIcxFE+YdWe8U1757qXKZhlLzEUcGZ1xKKmRJPqXKU5PvZKMCP9yWFeOr12jId95J6WTwhRYeJbFKIdjj//2J0GCjOY2KGH31SDIojp5FgZ4Bg1Srye87Yt37YLny+IlQulrW2dXFWbhw+907w1BQkVnLmU5XxbY1mNX3QeiK9ozDLzHZYXH7JHpjF17ivZwEhksH1Q4EWF1F39UhJb323UsIA2TeiZkqseEhL5w+iePwFEDUZ+zYFE8cqA0oXAarZjQfN6F0LmU6qQRGeQ6qFn41TgqsnCxPq0X/IfC/vCsnxqw4tjQaUOo1h6QJ4JCfYKU53rmhAN6G0FlG8t0s2xee8XaY5IVbT/DvA9oPjBFeTPmEXzopTjAe/eksAyXHVquAsXLKa4JrFLWWjU+WCNQ225P6uA+fWpEryDow9MKa08qUyeDCQ3ZYK9QcQs0uHWgDxO0DFkAc02M74mZElhNCWOkuOWAhydeFSj5uLr9sgEhQGvLuGd8R8MZ66542/rK4AKmV+4Idl/6Bw+7ci3KCmfTxOh+9/fHif79PnVEImEOjtjqYH4mpYKJ8b13KCwAXWSoLV9GzUDToqWe44XKpdw== X-Forefront-PRVS: 0274272F87 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(39450400003)(39400400002)(39850400002)(39840400002)(39410400002)(47776003)(36756003)(5660300001)(66066001)(7736002)(305945005)(5003940100001)(42186005)(53416004)(76506005)(2950100002)(4720700003)(189998001)(6666003)(53936002)(6116002)(25786009)(50986999)(50466002)(76176999)(3846002)(48376002)(6486002)(6512007)(8676002)(81166006)(50226002)(6506006)(33646002)(107886003)(4326008)(86362001)(575784001)(2906002)(38730400002)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR07MB3498;H:localhost.caveonetworks.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM5PR07MB3498;23:TL1Gv828GBS6vsQgbGYTcDMfQIL4C7YdvMjDiTRzJ?= =?us-ascii?Q?yE8BZBojrdc0vuEEY3pnNl89dkFOWPecpN8RHh/sGEk1TutAQsdh2H5H7Kpf?= =?us-ascii?Q?b0qUsHvD7nBveWKrTEk8zJOpGiyQFqLBt9o5pTtQFRY5U4OyI2k9znRM+mnY?= =?us-ascii?Q?MW3h/6ieo10Jwv93YrKi93O6wpM4PLBvRhchrbEp2QRBqbj8AaQ5Twj0fX67?= =?us-ascii?Q?3uAENhgRGVmQFC3ELTebxH0sTXBaBQ0B0qsY38d3WHcb/LBuXt7wQLtHO0FU?= =?us-ascii?Q?9b2/OVpy2l+hYNrgYhlgjavFg5T+EeRhVIUy0eNcf0EBQB+PN1MqeA5HOnoI?= =?us-ascii?Q?eEkzQ23E5rEjtf1hEOjNa9QQeX8XwPaCYmjZq9sS3/UNqI9hnNManKRBfaQt?= =?us-ascii?Q?1/eMb7l0OHys7acO0YdCeaGFckEsvMrhHmx5bGivAjVEqTbDw2HlsmgCiFz5?= =?us-ascii?Q?chdyKc5H0Vt2kuYbaO7cqZQ7XFjWkaWqOOgOvskFewzu+cugYZ2ko8Nj/Drn?= =?us-ascii?Q?oQZmAW6D/IWuV+V78FTQITUbOBnNLXLwN1ktUIf+4luenzoYTUkrU6v3aA2B?= =?us-ascii?Q?UY8moA0p56esmRzkwQOLxvgHfS8QZVStsvk76wsSqbVItr6nci/IpAvND5nu?= =?us-ascii?Q?qSx3Kr4S8Rd24HOYDutP0Q+Gj5Qhl6XBhqnKMbFurw1kvpLDZ6VkWp7dMY5E?= =?us-ascii?Q?3pvJ9qtRaMTw8kPclxHQdxG1Nf3a/mlZamE9VKuv4MIBxMGzXCPoV0od2KV9?= =?us-ascii?Q?1iPRN/LcrngcW4sakl3FRbEpW7LukV3YmJmOK79qhMUh14JjNOVN2EaetR8W?= =?us-ascii?Q?mcKB89SSO2fwhVILfxjBeU0Q+sMcVaV/5t2ftRP0MpAvriFH0NMu7e8lHADX?= =?us-ascii?Q?TA4xyqW2wUQcqGZ7ru+p35m84vhApRCNyVJwkQvY8PblRNmAiRuGGeYUHI2s?= =?us-ascii?Q?YdZo4qL3NJhqWRJy9y9gNOpQLKNoPfY2nit0qMQ3Fdhvhj7dN+9nBy/mKj2m?= =?us-ascii?Q?Yn5jOT/wq9nknrkP4lBLM1JOzf0RBo37YGQ89EwFkR+bwFvRDymYqA8Z01Bz?= =?us-ascii?Q?fLOsj7S9mluARudo0NLn0Q2fPkgUxZ3mc//PMX/Gjv0lqa8CgOlHXiy0YPqZ?= =?us-ascii?Q?n+6XFlYgp8=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR07MB3498;6:3SSTn0xGNB+iZuO7gzkglYFJ1G+3iHyzfwLAnqMpFjhZB2H20KIjyZ0eMaICcWGW9oGd75hOFwka7fkFJTaalX87fFPcpaOQhjGKRbmnw6aouZlA9sKSARyM5F8AqU3AVNR6+IGQM/wBkgr4TTQceEQcJCLlDZDwkvN04Z9ddIjHPy0Bms4/2I6VQXwGGuzKevnmIhb8Mrgs5698pKLlNZPD/nbTP1QYgfTH0Z6/5qgGlMeDqS1iTQOXvLsHhtv2gZKTmU+EdYK4mwH0bqWgq2EBo6OcvPN5SHobiq2w/mRYlo42Lky+jzz7PF1hDM56iI6QNfNQWnFgoIXZeaulGcbTRoJHRDv96ec8Jr9Nv/2FHjLpoenKlV/CLeSZCvUSJWNtGVVFTXVPSGoLaDE+LUt0WJxvDeCOSSKuDuNM5uM5Z3gr+DhEhrOHLBAP6tuOCY8vfDi+mM7f981o31yu0Q==;5:tQdwZjhtS5YQ2cK4bQ4xmpwkmXRp87rn6zBnNbTRQ+r/YLJsUd9t/VjRi0D29UOwGWkp+rl3nKTdbZDl/JVBYbb2xfFhQQlRIq7g0gQQ3+JNpzGovvUHC5GuhTl/vgXOaI0POu67dJyvXGBelHISBg==;24:YUfojKh6RV1y49+oGSynLCgi3bNfHQZu7KOsRVvcJT68WpXaVC7OKJ+yS2ujW4KFU2aFIAMx4goYQVWWuWC3I6fs8hi6XeJnK+dw5F91RTU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM5PR07MB3498;7:cE8H/Ct7ucfAat34c7PYpaSnDxqSMUlUuWVq86Y1xLY4pmJtpzLU0RkNOWQIw+Yx2DW0Uxep3ZuA4IcVSOJdX9tOYxkMScjFBM/NvhaioHTYVvxUUprZYbNKhvjukXD7ghYRg6JDcr/GUrGUm25zpJptUn3Oz3pw62xkfoVY5mmY+9WHdmEFeSPdUkZrW6Wm6W+hCqkWoGQXagJu47s1fia+e+L2NeYXUXq/KcCzo7VvUJyKWAaAMieb7N2YkxMdSXnUkG68rnaW5R+uketvgxElny3RQwtt+bT02BFeTqLOeS5K0ShMoL7HVzRUI+HPDfA+pzJFNQI/1lCregk7OQ== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2017 17:21:16.9479 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR07MB3498 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 f887351..3db0eb8 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