From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755231AbdBNRuD (ORCPT ); Tue, 14 Feb 2017 12:50:03 -0500 Received: from mail-cys01nam02on0075.outbound.protection.outlook.com ([104.47.37.75]:26048 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754718AbdBNRtx (ORCPT ); Tue, 14 Feb 2017 12:49:53 -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 v3 2/6] genirq: Add handle_fasteoi_{level,edge}_irq flow handlers. Date: Tue, 14 Feb 2017 09:49:32 -0800 Message-Id: <1487094576-229208-3-git-send-email-david.daney@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1487094576-229208-1-git-send-email-david.daney@cavium.com> References: <1487094576-229208-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: SN1PR0701CA0033.namprd07.prod.outlook.com (10.162.96.43) To SN1PR0701MB1982.namprd07.prod.outlook.com (10.163.131.21) X-MS-Office365-Filtering-Correlation-Id: 98005e54-73b0-4934-7b84-08d45501de2b X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:SN1PR0701MB1982; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0701MB1982;3:z4Xxhh92yubkWsNs47dC750R3Uw8Q6Vy+Q/prQbVeE6jwPqSv3UFe+fkt3AJQ0kU8mBZklnoUR0L6KmqlR0CPgStlLy2EZdebJdE0Q0S7PEA6fIfKuzWKC/f83zHOh1AhI4KXkEkMH5kyn+YqnJkFC8SwIrVYT/CHk0NW58k56R1nbVMZsvfA5+Xwd8FGfccmwixTPf5zNQzM1q5lQjpE2r7HOOv9Ozm9UV+RgdhD5rU57hFkctQadv9poeeETMipro6RH7vJfZm8WHTyqbuiA==;25:EfYLTiFKkZ1a9D5j51G/3pfkN9S0vy4zYmQosKJKhWzEbP3+86DCf/iaaR/NMJKu4+7ziQE9D2MpjL/NJWrVyEvgG1jbJMdC+nuYI5Bma8CaaI/R9MN6wBoo4rqOevUQJCG7LuaeMni71msumZ8+navTg2LNBJa2Q0lLFy5WhuQXLFWQOqSbrqaNLJCZB1IKM4ey9COIT4EYF4wPLt6Lrrf+qBohPXuAGeR7lk1JJA+YMJ/BfwI6QffHLLsFwymZsKRcTV7p2rt0U/1YfFBbL/hXtSO/sCuD3fJ/d7lxEecL7jmxwLzJ3VnnRP9Qxr5x6ibbMHwLbStruVWlag2W1PLR56P+Be7+qcV3n34Xn+xvfOVmzgE/jetbbH+521fkJtZNcnj25/6bRkXDkySu4b2uCmTemXOJ0DotZEWCPyrWU6F0cm2SiTwDkECFlAzCzywSyprJXeMplbafYUeXzQ== X-Microsoft-Exchange-Diagnostics: 1;SN1PR0701MB1982;31:LLxhYBsibV3ulULgqFkarS9159AjyIKa1Tbr5ycq9Z8C12vmfXGIbtddk5oTUczaY+Y+zo8fhLz2OtbpvORDQDcCjfbfXaGn6AofNZKGNS29oJb1PVPjUwBC8BQuKhnjhra9DcE+i+nEAXAJeYGtBbeT+KxIgKio9OvKKhfvn6RzicPzAHAauHxoEgyiSrPoV4HqKPFtUkymiQ1a2LtwXznJFu1t81qXJJ2x8UnWgaE=;20:tPHGQLDnnMHUQPAGnj5+apsVogrhRkbPgHa2ssvmvntrCDuP1y/AhhRuZdcfKxZVveVOI8vNiXuSa8XlHKSrGgZNbnbxeWZPGnJomjYFRysjcldSo6EuufHyDoeaAe6xq1pk9c7jiNeK6N+P8ZGa+Bsk7QRsIKZNIR8PON9EJE21eE8BgjBaHcpwmVCrx+sJBXpIjSWwV2sY98NkOq7vF+6psClhuVyrD0djxeyhfKqNUUTo1mtLsu1QJqn5jRTQWpQKhHQ6EKpjZEXe2DHC1OSl4GsE+dOHF43Np4PwvNHwxpMf1E6JS5QVfoEra62jXhJAw2CvGB1rclvuSsZkWmmxvBLkspDzrUmwXPXsCOxl29cUOWRGuxudtjQAkfDMwHRY75UFLnHaIEdmHivZ/LAohdW4mPB/mzjo4Zr7x5yspwA9etp0tovgYyX1etykU1lT9oNUWNZa9r8zQ+U4/XWxCFhWgvRTDrym/FU2PPZYsjCSPh1h3ptKxfOGqxtI X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123560025)(20161123558025)(20161123555025)(20161123564025)(20161123562025)(6072148);SRVR:SN1PR0701MB1982;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0701MB1982; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0701MB1982;4:+dREavWVrijy3zirH7Zm+FEKnF7+IJiJVydIbt/cvnUdGvsMBsob1C0ts3IJsyofE1qJ2v2WZ+QUU92YpvWAp1PdTbw58F+DwYuLqibjqBDiiuSJwGaaNS5YsXBRm5eS20jUpKNER0j8IxaHaycNzdprLL3+0B7ltTL0V2go4CwrLivp/xptWkR0qPL1vlb2CB2K4THg0bmOLMxdHWz4/krTiJJeiGBaeHFvfgjU8PgasQJMYbRPeDYpZwxaB/DbJsWdTKXX5hJh+DdLAHa+iTPGcPlsi+q9gkJHHLOfhkB8v7k444wKE+Ov0Ld8gg3cSOL7AVg/5EajqQmWz7fqK0da+yFaLNe+/Ff6DCHDOCUUc+b2YvioWJx8rwj6kTMWAJGenR12eUrEOT/QIQeLegm9CrhZGXgGP/3k0hEficWYEvbt+a3Tw98/itXNWhKME4E2BZMeHMkMnfQO9zEIgmnRn5HaYy5RSzEHrTk/4NcsfpLiLAOzfbZBYzW8nz37VJ2IeE0jf3vU+B9zI25Xwev42VZcooXSHaaFqIczMJaNjt584LfLipv9JQlK1rhYQt0aRwUBwYKETlo5evhxBdggNEW8I7XrSp3WI1CchLY= X-Forefront-PRVS: 0218A015FA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(39450400003)(199003)(189002)(5003940100001)(36756003)(81003)(53416004)(53936002)(105586002)(305945005)(5660300001)(6116002)(47776003)(38730400002)(107886003)(66066001)(42186005)(7736002)(6512007)(3846002)(189998001)(4326007)(2950100002)(106356001)(76506005)(6666003)(50466002)(92566002)(76176999)(6486002)(50986999)(25786008)(4720700003)(33646002)(81166006)(81156014)(101416001)(68736007)(97736004)(48376002)(8676002)(86362001)(50226002)(2906002)(6506006)(69596002)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR0701MB1982;H:localhost.caveonetworks.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR0701MB1982;23:plj+HDig1oKXEE78dmfOJZU3+dKmlvMTXVweitx?= =?us-ascii?Q?KxGRbFD9ILK0J4FcpdGfIfFlmJSuRHUZhKwruquEFWRrZoXPKKHoQW5QBTwt?= =?us-ascii?Q?r9yT6kgzMcUZQIspVS4q8QOCS+ICk6ihxRVJvD3QJhI5w0j6IYPNE9X2B2+o?= =?us-ascii?Q?/Hl75pSq3ucexXjwUvOo0NcSi8TDCjTK/aPV8NiqHxe36MftM3FGved7qKIo?= =?us-ascii?Q?F0NjM/d7GGqhq8RjHeRz0wB3xnUatkdkdbpu4f12oNLd60RfKLI0ZjL3wN/h?= =?us-ascii?Q?UfW0VKyBXasB5rSDvCOHAVcdXRawYSFjDRJxeoFnMrqAWpRai893IsLKytwr?= =?us-ascii?Q?g9IkyU1dNSp9iAgW4mQAQrOsDfZIxj65AiqojWQOKHn4bGmJcBkJTAaxwY+T?= =?us-ascii?Q?dTewlBVFtvEjRZ1ytK2D79gbVyb+jnfM/igcdfu2HfH1aWcZyW6HeTsSlWKd?= =?us-ascii?Q?aLw/Vod17V/bGK6pF7Hz9LgpvQN700k+szGS+uTFyBzlZUZV9DKH5xxKsW+g?= =?us-ascii?Q?0cCKO1580KE2vSe0WXRixs2N4+LSUXS983Q85sgNfAuH/aXe1umMaswbhTUH?= =?us-ascii?Q?/omzbCrcytWr1j/qfJCJ+ybo0CFERxPy+I3UfgJ6cKFX/jv49tJNQH0FtchV?= =?us-ascii?Q?cY5xLFzP6fhbIqiPzxAsaP4reV7o6jcQh52ZqXrrJtJv4+GzzMjhflUithpY?= =?us-ascii?Q?LSyCTIvlEBkA8o3ydFWUEBRbkS+LjVRMQ3S/8mtKuEiy7JfYnMatdf+hAqU7?= =?us-ascii?Q?M3qcxOhbXWkw3UTGlGjbSKsoV0gxd1TbufzwuMl3/y+6gkEHGvdw+V7l4zIS?= =?us-ascii?Q?tR7Q57W98/CrQwZrwlBBl7flmAJxVPVEXq3NsEo0L1b5eVfkXM2ZP24Jix8v?= =?us-ascii?Q?kGY5MFI+83GSYjP/rgkEcrXJdCFJ+upALPAbwq1kbdrQIBruA3YeRKC4csYJ?= =?us-ascii?Q?IgKEu47Dvvue8hD6bKAIRMlr31nv94jvBtxnsnuz0mzSTeqtg2ToSQaAL84f?= =?us-ascii?Q?t9Eq3PB2Y3b6wnIgTT6rDihNH1q4i9cSA+F/WPhbpinBKt/lQsQmtBv8WnZJ?= =?us-ascii?Q?dCXVSl52w59vTO/GAZ7BA3LXXNyBT08qb0OCkHW+I+E4Hpt9hLCYWN2OLv4t?= =?us-ascii?Q?LRiRwv0jXjOT6M9A6CuUcxmZM3xKNH5uYs6EcxXVOk5/ZNt51dNDAU+Bl9Bi?= =?us-ascii?Q?7JrFhmiOlYX7KjhmTqYeTo9xgynXb6uxQ7PfqZyPYT61FYYMkln5O91870Q?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0701MB1982;6:T0uD5I3BGF39P3xdfrIqWl8uDkaoIYmIVjp0QlCk0pZez8ffd4QTwh01uRyif/eTpqHvew+mvRDDmV0bYUHnegyEBCSk+nNs2NYnAfkFjf2EIA/Ab7tVeM/WyAnbKrn9qJ0//ZaLbDTEEQo28znVf31xNtWD9tNISqlywZ7EO7k3kqJE/gBHLo/GQ2unJp9uUBq212V4iwVMezp2vZNru3iTwCiSkdAMFZMNIODb4hnJUxW7gBBeezXpHTeNmz+zOEvy5c8YzZhpAEYTcxfIkZxqv51/9fEWXTosDAcrGmOqpt5EevhTSBaVt3aNyJCOziYxyN61FEMzM9NFlJv9bXeoNHppZWoR6y2wwQQjz8EtQHcEfJVVEz0+b2E2zL2xM9aAYsjpMDwKBuZ0utdiUQ==;5:Ccx9Cn4ZOo2bqB5QcJh7CB63s+0wDz8PmRAZmi8w1PZw7BpPg74/nCXytcVGrGIeMqhD2sTL2JPIVGzP4/6GmJs5AqLj63GZ2vdui8n6KEhtMwjY6gKiObdSzNX/AtDI8PsbSu8UGm4GkLP/11n3J4lOqX3iuezFT0X7TX5Nb38=;24:zwhiZNed3N51Kr6JMrHTUbBTiW2pfG1OWtQGPitbJTbfjyHFibDMSNdqOTeBPn5TKDL6INUqZg7qJIOQ07IuIY4lfIm0fnlZ68/QM9YIDQI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR0701MB1982;7:LdfxnCEqpKN+wpompIHjKJAG/5pc/ZT0QDnCzIE8Furjxk713UlIgqVe7m1pEiPK/Wx+jaVY7k+xRjaRPwR5AQA9KtseWDgxMaq1iWd/04UAFJwfP1ud7mcuVz4jQoTIMpbT13lLRxd81VtdSq+GzuRf5UD0F0P7OEBlPJTwkRrPSdQCcB2BoxYj3Jutva3NWM8M2GYEYA25YMQa8AckCmkaXS7zQ3f/bfSjEJmOQ43m/LzKHoSnkdOjK/CNDNcLTcp6rrSQHcT3EDAzaGiB+mfYP+TmL8BK/IH+uQplKq+tI2hPNg3p1M7DmGEKD1O17flLa/oHre37n6SSaDJLSCKaVnVeUKcM851kgueMvwiqeHOAdtMIJXjZkYqvQBDOoRmCHTPUGrE6QWzGnYIMJefCqz763a8uS/6wRx/Cbtx+H6jwwxA39Ogoko5BQqSN6HWsO6eEcXqz1iWJh9zbWgGegtsB3ZRrP2mnniZikN3B5Gxx0ejojDRRctMfrupftydIJq9e7DCkYumMnl1KDA== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2017 17:49:47.1537 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0701MB1982 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