From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752602AbdHIWvz (ORCPT ); Wed, 9 Aug 2017 18:51:55 -0400 Received: from mail-sn1nam01on0060.outbound.protection.outlook.com ([104.47.32.60]:33216 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752524AbdHIWvu (ORCPT ); Wed, 9 Aug 2017 18:51:50 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=David.Daney@cavium.com; From: David Daney To: Linus Walleij , Alexandre Courbot , Mark Rutland , Marc Zyngier , Thomas Gleixner , linux-gpio@vger.kernel.org Cc: linux-kernel@vger.kernel.org, David Daney Subject: [PATCH v7 2/5] genirq: Add handle_fasteoi_{level,edge}_irq flow handlers. Date: Wed, 9 Aug 2017 15:51:36 -0700 Message-Id: <1502319099-2782-3-git-send-email-david.daney@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1502319099-2782-1-git-send-email-david.daney@cavium.com> References: <1502319099-2782-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: CO2PR07CA0057.namprd07.prod.outlook.com (10.174.192.25) To MWHPR07MB3503.namprd07.prod.outlook.com (10.164.192.30) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2e3d9cfd-62ae-4cd5-39bd-08d4df793672 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:MWHPR07MB3503; X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB3503;3:gHpNcLHlKdthYMXykvdVnJOtASKAFWZwv0mCm08kHNrX9AO3S7kxVCh6N//4vFwqm1oZauzePT3Yhc/d1ppw+9orcdSN2yLEHVmWQe9G0PH8ar0K3Csx3wrNJUPfnH6gX0OVwYUrnrlXFC7TUYfDO6hq6wCnnw1Gi5MR1y2N08R5kmR8kCtt4GTJM9KUkB7TYOv2jlsO8PCpE9MU7PCbNSqNz/5L/mS6/i6NSgmvR/s219LIFIlUpgS61jozsoY+;25:EIp+6xK9NQuChaLRzA2HT8OB2vZfKVnjCk1Wbc0xigUPyecTmKS7I2tDUS3kw9mLe4Uc8FUT8cDfb6CYSX7fPyxplbuonJORp43d/XC2JYQDm5wiQxL/AQvsKSkuQeLQOCAuBtjJ4gvuNYcmzA0Gyu0bKiAFp46FalXm0OECINyZPk4HJACKxgCxht3RZ/mXfrbkNPe3sYgcFvP9+Z8EGcFd1/7B9BcBALaYrz1SQUoyqwoMx+V9ZEYxT7RpNtzUovMGhugT53vC1aPG8I7IucbfwFoidttCWzpgWACpjVIr0/rCXyL6kXgGynBrFmAkJyNg+if17MOzad+OF4WW+Q==;31:npeFS4Xwie6SjYl4TTmDi0OJMuINvn9VHNg5nkHTKB4kkimw+PvTe2a+MyWiG/eDBxK1U49nxaOCIKsOSzAUWtkcuTn/larei4BENuD+F1An/cQqfcLRUaEdRHI7WF01EPTXIC0pFecQo9+5TmM/InZM2N6NQL67nrbhFEARq1W+uI/HnMrXPh57AK4vKWvUeIQq0QR2SLTZDWFORO4JNF2hPcF/Nf3EAbRqndy3WWY= X-MS-TrafficTypeDiagnostic: MWHPR07MB3503: X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB3503;20:1juFirGmJld2elk0MAaSpW86sYHD/MZhvNIh5+DBMFPCCZTeus/rXtvMeUcCsLryH+7fhXQbDw8uF6fkJJfkgLZJLKFbnZYD0wskWx6uDfT13XQMYWSVlSIzRynkKBpbKfDzzzExq2ph7gkxF5uaGDdt3XcRSKRdzmwCM9Ig8ESpAPwJY4ba2R2EmJcLdsMtT/UhxxD+q1wzL6Zd0sw+ylQkzTXve8zVyzTUACbxkg0Ta5KqUkbu+GI60OEdAFfcPzjgJFD9qDonlrN29cW4ub6oIklrv3KSPXK60BjMRR4VWtFTo8pWmWeuE9AVwKOMvO8IKq4a3PdckWx3jsvXO29qzp0xSFVkDgvw0qeBc2d+FHcsecdwdf4FzueQKMF06AGRzkdptzerdyLFcQl3adMeqYinmbpgtZu3zVoXNVXD+KUl9ZM5zHQPuGiOEtol9cvbG6FjrUQdS684ofgO2DEtwqtxx05dftFZJrz2yrCt/ems+YNldek4vrlgx1VO;4:ClLjHcb8jTx9a5HYfyjB25zwx8Sy0+Al5Wp/U7eWWmY/jB8CaQQkNvkqzosHstvl8S4XYIdTWqW39TEhdC/oy4I7PgAkiprEiEqFLwIFrdQmxlEBDqM1pBbmxjza1FWmCaS29kpt/pdHmq82mxs7caCWmnJhXP0tf1wGfy7lXdhkKPl2YXl4bDa7icZtO9gL61bmIJXQUCNn3RucbJJX2XzYJT+PlI+MXAIyNTgUaHVRq0doH1VdpWNomgjte28/ X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6041248)(20161123558100)(20161123555025)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:MWHPR07MB3503;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:MWHPR07MB3503; X-Forefront-PRVS: 0394259C80 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(7370300001)(6009001)(39400400002)(39410400002)(39850400002)(39840400002)(39450400003)(189002)(199003)(4720700003)(69596002)(4326008)(478600001)(6512007)(53936002)(107886003)(38730400002)(66066001)(72206003)(47776003)(81166006)(86362001)(5660300001)(2950100002)(105586002)(53416004)(33646002)(68736007)(50226002)(42186005)(25786009)(2906002)(81156014)(106356001)(50466002)(305945005)(189998001)(48376002)(5003940100001)(7736002)(97736004)(6116002)(36756003)(3846002)(50986999)(6666003)(101416001)(8676002)(7350300001)(76176999)(6486002)(6506006)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR07MB3503;H:ubuntu.caveonetworks.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR07MB3503;23:M/Hii1kjoxpNhNeKEfYEfx60F2UO1HCec6kswj1Ok?= =?us-ascii?Q?LNtWhQS2PiIcBifXgCx5/fV3F+qXcSBQi2LjlaxH9+7QOz2SDRwWYfcudxCC?= =?us-ascii?Q?FnnGRyR5WUhlZ0JnmTydtwSRSmMah4EIgvtkddcPlJoYZ8VnFNld5yXPmzS+?= =?us-ascii?Q?XUTiij6Dp3oHhzZ33Ye81ssDk0ex7mA60zbUUctd4djjB1egrcZz6465Pbu3?= =?us-ascii?Q?XP2vZrRU/fIXteJdSmHlcQ0v5HX++T82IUreuDJ4YwNmbyonKvCH9msjX3Em?= =?us-ascii?Q?jQjZxvCI9yzd/6Y7HJvi4tmP01p1A0aDFBVznIAhGSdIZ2MshFjhrgbQvC3b?= =?us-ascii?Q?dV5qm79KUcisrqBuuRbO4j1gcS9+t9MnM+UTRCIUdbsyMTumvX47EaUZviKg?= =?us-ascii?Q?/fBuSe5otrGTD/vtSCa+LEXmp9bbMHeB1NGR5oauVhAmww0Tgw+SOFtO7ZUd?= =?us-ascii?Q?BVbMcV8JBlPzoZhZGndDq06HSQLonhMnYfURFQpsVzq8hQ4I1JE075WSAld0?= =?us-ascii?Q?yDBlSzFx7RUrNKqA5EEBcRktRAD/rT3G2th6RpTz3WZlrLZsHo8ss/QGCLxd?= =?us-ascii?Q?Jn/C3iC6fIkJ1VcUQVeqvZ1u12XUarDsnQMWJIPdpi8CquXpJTu221/itBUO?= =?us-ascii?Q?IioPqxukSBLto9qIui76XvIdmOsdhStmBZ2jyzkstnqTi4zA1zs26Y/C9jSd?= =?us-ascii?Q?rZGaAZI9sSMuVU0cm/9RT9GJfZ/+TetjV+zKcA6Vv5Y7jLyd53JiaAwlcGmq?= =?us-ascii?Q?uFuU7Dwar/si4BG7cqeGUIvByFe3DfzA3qNa7kTgmzkx5zfDaN9oo0ORXLBz?= =?us-ascii?Q?OYjJ6MgIBZ0mR52FlvgOoq8kCenhNUo3JkQJOOr+ZIwdAIPJi6nWC3bPp+9V?= =?us-ascii?Q?aVv1h/gLSU0c9C0yHjpEW8NIwyNGa2NiFAawsuYjVfzTD+I6MHtcLuRlypdH?= =?us-ascii?Q?MMuDq9N/l9owU0ySYcfJREim+lcEuWPzHBlJ+rZEgrjo72egmAKhzgRe65vH?= =?us-ascii?Q?H2KZT0mFEcoBAhfrtNNHFGR/3LdpNGpMqPXU/SbRo3NXLJUsyfknFbHnx2EX?= =?us-ascii?Q?2SKxt6XUOvaWHvAeaReioj53WtIAls/qRBRSCYrwBAnXLCy8FcgXJ4H6VVkK?= =?us-ascii?Q?miKiZ1Qe5jwFvTNzsgfGCp4gFn8FoKAd2UkHiJ8CZtDvFlAXE3fHrutOUmv9?= =?us-ascii?Q?gRGl1z7IAdkWGNeVs+ty2kVSY4E5YZ5DIPx0BKiVqNRWcL7ovVya379x1xDg?= =?us-ascii?Q?fXmGOwitWu5cC3Bk28Z2igSGtZzlvMSIqvwo/zC10Hpf6ydK+WyXgy/6Uctw?= =?us-ascii?Q?UYHEwaA6VCiD7ci75Nvrctpmb/KqmBqc68aHmcRsaAP?= X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB3503;6:3DNXd52GzxyxiKfUQ+014rwbK9fX/olo72Z+oJnt4QbSCUS9ZOgrPuThw1ihOWFAOcZwPaGsmMv/Bt59qoLldy1aXdzb603Sbp+eGMSk9nu1x2ut4YMr9ljKNklvMykuSDyqOycAjETuBS8MPSyzqVSkBO0eHG6uTndDO/rO6ijC/cVFao85fC61RY1hDI0kmhOgkwq0zBlpC+jc9Xz6x8Hn2klFwslpBSomaNOTiv8sz8yptpPedK6diD+vl6YxZystQlvPBHO1ovKLufGnJQqbam0xvaIQ+Di9W4L+84dGsHzxQb/f+Pg7VAyU38naVC2pvTyDRKn8QrsADhKRxg==;5:HfGBPqDiNrkir6HNnpyhA0SCsE6/sb48MM9ZYB5DFo1DpH+YoE2tHL6iIzRJ01MuEwLTfuS/R7chmXeSaur/T1Q1R9hfXJsk5iNDP0DU4zGRGrFJKUEk/kui6WR3K8mMkl4BBakS0sM3LNiv/z2QKQ==;24:UvV04SHQ3TE7VEkNaSpYDXTCa1B8xcCG1kCT2xJvQ1LUElaKuviUU37qsKY5ZAQ2AlPFgRS1ccP3A3+iKMEcLsIkBhrubwGS9R3CcmqmtwE=;7:SuyoFYC+xKQSkdZlcP0oOAAi5uNACmDsFYIgzwWWtUSXUmNU7ox+cbFwpc8GToWBkI8VnNTZv2hIKZkATvBu1sF6z1U0+JCyhlLncZqyt44ICyHVfcf77PMgAYVnr0neG9e0esbWGGXoOKiyHTdAP9E9FeKBP3AhjItAHMmsDVkVayMiewvbuQkAFXJ88cwSCZG0zmd/2pzZg+yNUwHBnx8yY8NHg0wAOstZS7aCgQg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Aug 2017 22:51:45.7949 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3503 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 d2d54379..86a2273 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -568,6 +568,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 6514f07..7511591 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -1093,6 +1093,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