From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751845AbdCACBd (ORCPT ); Tue, 28 Feb 2017 21:01:33 -0500 Received: from mail-sn1nam02on0089.outbound.protection.outlook.com ([104.47.36.89]:10560 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751392AbdCACBJ (ORCPT ); Tue, 28 Feb 2017 21:01:09 -0500 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 v5 2/6] genirq: Add handle_fasteoi_{level,edge}_irq flow handlers. Date: Tue, 28 Feb 2017 17:48:48 -0800 Message-Id: <1488332932-2691-3-git-send-email-david.daney@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1488332932-2691-1-git-send-email-david.daney@cavium.com> References: <1488332932-2691-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: SN1PR0701CA0071.namprd07.prod.outlook.com (10.163.126.39) To SN1PR07MB2432.namprd07.prod.outlook.com (10.169.127.144) X-MS-Office365-Filtering-Correlation-Id: 7cd27532-4f42-4618-2dc5-08d4604522a4 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:SN1PR07MB2432; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2432;3:j0C9PbrTXBpsI5bhyzcCVZycJt+IL58/Zd2dVt13y9RnUbjSR7XdI7+bdEG5WP+jABUZe3wGfdXEr9AXK1F7h+ujsmUJNP+gxp6fuF6DZx2ATFMj1UXCughduI41yOID2Ei3/5gbgU9HmxV+Vkpsy4MplAJdobSZtSWDeLisitFMfji++Ip2bnBYXuwdTnzhDLXjcJQoyCdmptIJaBO0SZIC13KYIerrR/zJYDkHAbEYDkx7dIzNyYbcnv2wZZQPgG3AEsAI6IOeJKhQCyUO/Q==;25:xmR+XKmnutcwYqPfQ6qo21/+hD6NtuCslivhD2EyvrKlU2mCbTi5jB3yuz8qWo123Yg9mNd2UoBoTotOLqf7KkXU1vqz0hcLRhAeffoOzUU5EsRD3BRppbWv1TeIACR8kBCPcivExAh9hzPXbyB3VkvKHS9gJRF4GAV8OPwWCGe9xYnN+Sox4W3G7BJXJW3+Vu6Yl71KGMX7KDcC/n+Fjwp4gm0v8nzK5jBIOdx5CzVoGx30h07EnUuOd8R/OCuQmv5mtX7bp97px14/P15yPaH0OSPICFID36OOsrFqCCWpX+OkVwK0pKf/iaYNlgKeFp1jKZmSDBc4C/Vz202EGHvfuRVTuVQdqloLlRbR3nHOOjhcn2nmJL0RZkNEylrfMtModTHeQHXqkCRN57XkUngSeIvO64R4gZmKjyqe+88bpY6m8vZOICJ5sTBgJwU7kPRm1o+RIDSg0Y0MVRU+uA== X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2432;31:9IL1kJnw33eD3vN/wBThYq6UwqSJo78qCA2/vo41jtcrApmBhQVO95tFIKB3TVEhpq2GRlbLm7I0hzT0ZGPY7LARb2U/Rk/8ClqnkO6499wYvJhV9Z5IV03YtWwYxecEvMmdZqg4WtafOKVIU5YdzVVycLLkInjzI69f+V+stvBuMq8mbfbGe4fh1fFjqXdP8Gv67tFAu9Mzdtvu+OLKDjINBEPs6ERyeRHojAJSE+M=;20:OB/DJu7QYmY6+I7xbkhQtxNSt8Gw5EEJmmDWVdepQ5gi0CIDTYTsdVrnFGk9aeXAdu3qMye+KQ7apdUsegqANggHBlHzt5v1ZOYuT2gzfbp2lpKe56aCNznRGFujrQdmUW6iIeCKKRs/ob/wZRxskIvNmn9jBt61IArBudW60UB2tOe7T82reWX801+/mq+BDZ0Idr1DAGFR602PcZ4g/ZPqSaoeZe8ytn0OmnMeOx9seRitfIM+w1f7PVccvA0pu1X8oT/d/xhQZcBz3rWZ8OPOnbZn/meI/brkdZNFZfqDBl7ppxhK3ztTelg1Eii+DdUW0nfaiRxR057Syt+FDaASflsHZDCpg0j4p48opzK6yhh9KqMNaXhKnHpQnykNFIMuSpCwmw3uWi0rIzVvtUStLjxBY1d9TnLWdnaYItLRsBehVfqYlVVR+E5OSD9U5OCmxPYvcMwyupJ7vEvyiOkyIyNH+PLnKJoNoROxeE4YLeaVCfLmJrihSR/MUaqL 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)(20161123564025)(20161123560025)(20161123555025)(20161123558025)(20161123562025)(6072148);SRVR:SN1PR07MB2432;BCL:0;PCL:0;RULEID:;SRVR:SN1PR07MB2432; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2432;4:a1Ml3ZS7D9TSI4xXpowVFlVb6fFaN9ZCYg1iE8841OY3TsV8A1Gva4ewrFzFWivpucqHWlXxnUIGmy7LyuVQ6M+RRlWuWE+HRS7hg40tAY/PN9SdArVLr4fbkq7EAyyB7vix2XTpfHISEUs0qaPQRFTwBECHs9l5YGmmZgIcoaah+NNsq88mLoiiavdnDrH0o5CwYHzmHQrc4bWJn7C7rAL0vnvUZKC7Vmpa5KCUhn0ygzmryAKAMIfHmQcUbJnQUL623b6yHB4D+2ab4TgLoV/4P1QgnttjF4/9QQL/kIQYSQR8cUbEUw2/qXEKAiBz1YigHmAZTlN0IRrs69Gv+aLnKZRLonSp3A3e3GtQGctZl2IJ9hGPUToBZRpjhExZyw/65wAhWJSWhrTgj7PvSAsloyCf/icgnP2Yt40ysjwhlRJT4/X5N5MasRaqHvsyLf/xx1Cnp7Oh7RR2+gV/zH6OwN6vVSbdBvyJBm+ZdzBrqz2O2Zvewf3iuVS2FA4gFm+dZD76euE6TDiZEGjHojsHEHUmyjASmKlbm4zYYV1kpgp1ebI1dRUG8SBKQqObqxpFSoqgSLUhR028JqcL8+i6nhDnJDp6klVzDRt/9O4= X-Forefront-PRVS: 0233768B38 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(39450400003)(48376002)(53936002)(86362001)(6486002)(50466002)(25786008)(5003940100001)(575784001)(6506006)(36756003)(81166006)(50226002)(4326008)(50986999)(8676002)(76176999)(92566002)(7736002)(53416004)(5660300001)(6116002)(6512007)(76506005)(4720700003)(2950100002)(42186005)(33646002)(2906002)(66066001)(47776003)(189998001)(305945005)(107886003)(38730400002)(6666003)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR07MB2432;H:localhost.caveonetworks.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR07MB2432;23:HYlvZR84WldZNTbT9v0Z69WRZ6wSCGP83MmdCp/s3?= =?us-ascii?Q?s1szFkR3SbrV/fykYmevTU/U5Z0GyXhs07yN1ZUNoRNefyf43HnHSTKJjWPJ?= =?us-ascii?Q?fdLZk+uFP8dgB5XKi23ppBVJyolq6M98HujjZmk1gbj68J8ECTwZLGz45kKH?= =?us-ascii?Q?dvbDftvO691Cr5x38K7nMhCaMnN9TZeuf2psbltUltZP+Pk1FYRxxv6kzqQj?= =?us-ascii?Q?yM1BPHFdnVKOmi4dLykdTF6NEuvUr1mqkvxg259MS59rnMkB2L8XLKzuGZzM?= =?us-ascii?Q?3Y9zEMBfV7lFPVIbUmJqTQKQg1olMg2sEWs1cymjM1AqnqDgUbaGXUEoxxRB?= =?us-ascii?Q?xZA29j9tsSKuHhlVCbsrVCrcSN8oFf97XNci5/2qWnG1PwIoxVx8XWNGTWDN?= =?us-ascii?Q?kxEnq0MDW6pOvfsKdkfJM9tpy12v01eEzrWR/vajoaR9hEQEjKqqUTuT46Ba?= =?us-ascii?Q?3mCdP78DP/dj6BHmvJqr/ILWOv9EDk8lCOrlsZpgBBsAmsp5IJifyUn8EKN+?= =?us-ascii?Q?mr6cmSEbi549M+8c0PKtYF7H/JzrUTOvL5bh/xgDiXbUZuiALPfCerFtziCD?= =?us-ascii?Q?SuyuZdUNHKwGmkaKl7bg0n3TNEteJWs7XnhZkyJdlNuhaW7WiyAnKUxzR5IY?= =?us-ascii?Q?hS+9CPEb8fGg9WidOMu8LfA/rIBw+eIfdkXfb0TfEs6icy1xRxV3NyoLarLq?= =?us-ascii?Q?/MWAlWYWa6aITS1aHlAoM3uhT0wzayDg1HmSGhqICvDCwvupaHygSCGg+Evk?= =?us-ascii?Q?Kc3Oi6nw0rSSOyuC709h/OCrB6Rhnh1BDd147olNiAqxS1PugDQPuEeXBRqd?= =?us-ascii?Q?VUHD4mTIbWbt5+O570tPYC9BQYAsL2ngqMN56HYny48KckiVCgIu8Wn3lDpJ?= =?us-ascii?Q?GXqUkiE0L3Z+M3hvpekOMrXlbubBDRcnRk3B0cvjeyxcBQu5Xjr83BQtaAWO?= =?us-ascii?Q?HUrcc/VSNFptdxvOLyUSP9CjQ4zeUu5Zhqj0a+Dbm411axS6VKg7UDPN7Pts?= =?us-ascii?Q?BGnMtMf8965zIcRJkD/kgyb6bGwlGWFgwJF2tJr4oY9tw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2432;6:u4GTnmY6Ct0YINRORK7du2TpPNbA18r2iS2ctG9OWGgKRFUiwwFyYsOM6e94Mh0t6y1+Y/+EB28500higLMHKylI/rcCXnUdvOtSHtNAnvRkFvnnYEvZ32myMF5lKMod2eERKnh1rYuGtU7exqoBkv5hCijZpc+NXpR/F69BuiXQiv0i6ew2P+H5Zv4CnS+RTck09v4PwivB/dPhKQQIcQAmvNzN5QBofsljbTNr2kxBTUAs+PIu/GIvjaxunJsbSgqp4NDWWxD1AkODORIM9q9ESP+Orn+6UNvlIoSUgb8JtHJNOq0pOT8654Lne22Sny7Z/0w3kMWybkrrnJvy9kxR40afMedX4TWSyBGFPW3RWOPqM9aVzLB38LYzK0DAUZQhNcS9dy4EdH31v/+2Pg==;5:/AHCzOP5fVxQKzHWOW4u4alPuEyodCqgLGAA1KRDUetkajFFle5xv5K2M4hfbgTpR84vFG+g7Um9u2GoV6mrwmHyKg9U2jZL34AHCOXZM9IYGgBgRFL3a051dZEPoPfb2BcpgLbKhkLR1fkBzPbvtQ==;24:sewweLeJCLpamJi+JMCRmE+cxeNuuOXRtJrGjPrVQ8R103R/Y7SvW1sXSSVEjh9V9OA/1980/u7/fc6xECz/2exrm1iUzjke8hYMFrvzorE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2432;7:oZzjy7+yYQWxEXbQ/vlphJkRDbYpPmhDe3cINUe3JC51LZkJGPjopOH4o7NJHw+7X0ee0GbsYdXR2OHGOLe/GgyMT6+4CPK9dNfUY0kH2lpLgs+kw1umfF7wF6XMuRM5kZHA7ovtqIAPKkaY6mWpbRct7sleh0yLJ6qVsfbXMHJ6sTnhGvUyxDk/rpcgGcD+AEKvgXuwTRXhc/3u/qTgQWxjBlWnPMOuLkD8yS7jh9Wr50EjD/t8eLgxv/zehFqjaKtLJUKJ9t+f51tbJlaSM6dzBTqG0lKPPa5dNoODt00Ye+gt3+AY/3kM/0hOs+zhRTSBzVBzeVqMl2hC1klyGg==;23:oBwQoHIac3zawSjBfy7525tYkyuZBI29pNWd8EagliMxXUqf4ZM6DyRHTWyUuiPrehI0Hnhbj2CLHojZO+Y0+7nc1+eKiLAal5Mi79SEojFAt9uobCu67LWr2hWy8Tw6J/rCkmk/pxSPG1aZ4z5qjA== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Mar 2017 01:49:01.0808 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR07MB2432 X-OriginatorOrg: cavium.com 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