From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751844AbdHPP71 (ORCPT ); Wed, 16 Aug 2017 11:59:27 -0400 Received: from mail-dm3nam03on0082.outbound.protection.outlook.com ([104.47.41.82]:50848 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751461AbdHPP7Z (ORCPT ); Wed, 16 Aug 2017 11:59:25 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=David.Daney@cavium.com; Subject: Re: [PATCH v7 2/5] genirq: Add handle_fasteoi_{level,edge}_irq flow handlers. To: Thomas Gleixner , David Daney Cc: Linus Walleij , Alexandre Courbot , Mark Rutland , Marc Zyngier , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org References: <1502319099-2782-1-git-send-email-david.daney@cavium.com> <1502319099-2782-3-git-send-email-david.daney@cavium.com> From: David Daney Message-ID: <5d9b51c1-a2bd-9932-8917-a743854192db@caviumnetworks.com> Date: Wed, 16 Aug 2017 08:59:20 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: SN1PR0701CA0038.namprd07.prod.outlook.com (10.162.96.48) To CY4PR07MB3493.namprd07.prod.outlook.com (10.171.252.150) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d2793016-685c-4475-48fc-08d4e4bfc34d 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:CY4PR07MB3493; X-Microsoft-Exchange-Diagnostics: 1;CY4PR07MB3493;3:f27lv/AldexoFLOoVEGttDJbEHKeEJ+oqCUj0IgB7dS8o7WiWFbbr2zeIrTKEtWAwoTkC8mqRmTGuVpewZQQwAjmlMGjRUebfzwWiJXgcORNx09aujZpyJ3vWTTrZ+pizdmjXITYuSbRzM9fVA2eW5UPLLsrCiJ+DcDI8dqt+VKEMcB0hRf1bLBmXaoiqGgoPDg8EDWn/SyZdKDHz51D6vgjhY3tAmklt+HQVWsbkLkq0LHqAthUu6nl0DGPalUa;25:kxzJFvMbnSA51ksSQKFFMoLAFoVdPIc608QVGQmXrv1mElIcKc89Ur2ejMFWZ2ll9n4dhhrQv/nDmT5IhgrHZKUVPTnIo5mpdZLv0wciO4HFUj5316KjZkDR3B9kx/LbhiZhD3LQ03G86s0S6KFT1nY3ZnHO35abIoEy3rmAdnB7QLRaA5+d4Oa71R3WqIdo+SqUVHqm7uTlVCjIr8gogE8ob0IRSfuHbxndMDjp/a26PzqLbMMnTZF8cJlFoi92Wdq+hHpAccbeRC/X8mIzzChqLblD7JMr3PB1ecDoZ3U6Kz5Jyd7IItal8i+cFXb5NCSGCEJu8BJCMZtG5qPzIA==;31:jlTfdZe6AGrQYN0l7NTBbBISab0+gLZmuaSdjACIzvVPQGjf3HWO11/nBXZxQ3x5aPJ9dpXnCdr86NAoAvUqLRHr8TK4EkgLxrmJep+KnjDQQpiG+RyKG6awz34ar6oEiR1qotj9FH3bVNjpA/GsFcdPFMI7ozDR4QlkgDV5xYLraGen0n0D75i1WRn+qXALBIv349fZ8TK8OY5OyptYP7koTVTa+yQJnTjJuU4DyDg= X-MS-TrafficTypeDiagnostic: CY4PR07MB3493: X-Microsoft-Exchange-Diagnostics: 1;CY4PR07MB3493;20:bTitI8CpF4nc0Jkikpxte9mA3Bf9yQ//DXG9w2GBNy5KPDGbn5Lbl7Wy9UFE3nEmhoVTqnWCXXscDyRMiJYVMwnKJndn5rn4DGdNmKOcrPZMOVjejUinstZDeNEckhJsPUT/PdPmIGnsRAO2aIhS/DCiWEow6mhcO3yp9XNUTOgV3arsdmihBj17fO9Vt+MC9N127bYGH6wL50i1gFeZfniZqpb/6DO4OuIySa41t7z2QiXLShFJ5dEB5vncuB0IPXDTc2a4VVsjq7kjHmtrn/Nu2OBHUvAwgNgFPl/M+xzecd2l9vHVY83lXtbAqGI7QPWtV/Gplp2/K3YbEmu0Qkt9V8Q9LwD/H8mLotV4dvtGknmdNbMGrUVcXXVykhE2cA/ejERabX5VoxDkvkhfC+KxUD1aIHbmGZXJCUMGXRxOqtfLjtcfvRTc9SFxXH9uG+nZarXa10lY/jXaU4zmYlf8/mCe9CYF8c+t5mMR/R5geQ3QEyiED/9fYAIUmQwZy0AoWyHYtyhac9nvDlnGSfT31G+4GozOafXOEqU1hR4r0vYNHzjviyLnu3LpiwAy2iS+b8FWF2NrRjUe/YKx4Q4rQD1emksAnyK2kDk0wl8=;4:49R/Gn8JJQztTCBfGpQi/Kc9u3bzGCZChZteBRKxcremDGQiI8UD99P842YXQ3/L4nthMd43uBLDFK9cXnUIAbJTYSce9nk1syDFKq2nWoiG6C1qOBCIz0YEb6Jfe28A6XY1AsiSQSllXCB2Px7rzOHhLHUaHkqDqIE9XALBUCOQmFW9CSVguLlA9zHn6V3nYo2t9h2fqYABwEd4Jdpi4E9ZgmGNWyqmKReh/vSg0HEukUxYCCRPlJZOfhNj7GHZ 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)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(10201501046)(93006095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123562025)(20161123555025)(20161123558100)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR07MB3493;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR07MB3493; X-Forefront-PRVS: 0401647B7F X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(7370300001)(6009001)(377454003)(24454002)(189002)(199003)(72206003)(229853002)(4001350100001)(97736004)(6506006)(6486002)(6512007)(33646002)(64126003)(65826007)(6246003)(6116002)(3846002)(53936002)(54906002)(42882006)(230700001)(81156014)(2950100002)(36756003)(189998001)(81166006)(7736002)(31696002)(7350300001)(305945005)(68736007)(478600001)(8676002)(65956001)(101416001)(53546010)(83506001)(2906002)(54356999)(53416004)(76176999)(50986999)(66066001)(25786009)(65806001)(69596002)(4326008)(50466002)(23676002)(5660300001)(105586002)(47776003)(42186005)(31686004)(106356001)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR07MB3493;H:ddl.caveonetworks.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjA3TUIzNDkzOzIzOlNkb09wVUk5eW5FbEx4cUdLSTR3YkFsQjF4?= =?utf-8?B?OVRrVTB1Nkt6b2NESjZHK1NGNEF5ZzZrU3ZiVVRGVU5NdWVhc0s0cUFqWFVO?= =?utf-8?B?VHZBZVJ2UlY4S1pWR2VrbnRFMTdvWVVlZ2lqZEtIalk0MHovelpycS94NUtI?= =?utf-8?B?VzlzV3E0RVFidjBVdmZHQ09EWkJiOE1QRlE1RmxnclZkYWFvOHk2ZFlDbHh4?= =?utf-8?B?c2laUEZWVWF1UEhkcmJXTFZsNTVYRHBDTXdITHpNdlhzOGFuWEpGQVhmQ2pK?= =?utf-8?B?S05XbDRpNXVsdGpKUGtsZU1YaFYyVE05a1VaK3ZkZ3h4TTNQcmJrU0FlcHI3?= =?utf-8?B?c0hVanY5KzRrQzBFRHh0SkdTd0JPYVdlZnVqUnZXWHFYUFloK3kveG1NUHUx?= =?utf-8?B?RTNnTUxWa1ZwanUvdkhZU3ByNER3S3N1STZTMXUwc2FMZUFDSERIb2diWEtS?= =?utf-8?B?T2psSmo5bWxscW8wTFE4Smc4dzZjODFpTTFKTGw3TjVveTRDVEMwNzUrT1hH?= =?utf-8?B?QnFiTWdndFUxTGlTUXd6dHYwb3ZmaGdkdlVXazVSelRKRDNJN3BCNUNBZkUr?= =?utf-8?B?UnFLYW9PU3BIV29BLzBJTnFOMUJQOFczd0phb0JuYTVMcVZzY1QwdVRKSVFQ?= =?utf-8?B?UlZBcEFGemFuNHZGY1JNTGlZT0JRZlFZYnVRaVoxdldYTHkreU81cGxWNWZw?= =?utf-8?B?aTdmN0lxcVJYOG82ZEhhbk0vY0ErWGEyZ0w4YmFCQWFQbUlkRktRb1JONkdk?= =?utf-8?B?RzM5Nkh0Qlg4Vm1sZzVpaG9DSWpYbFhuemlQQWR1THlRWWV1U3UwbXJQQ2Zy?= =?utf-8?B?OGhoZisyT2dqUklBMDFabzZLOVp3N1dMM24wb0dxTHpNTzhXU01jM2w4emxv?= =?utf-8?B?dE9WU0pPV216UWF5blNyY2FxL2g2ZkNMTDFqVzlBK0g0L002aWVQbXZLakRK?= =?utf-8?B?a3FyTC9tTkJOdTFCTUNDY2Rsa3hFSm5Lem12MnNYNURSbnJ1ZlhEOHEybVFs?= =?utf-8?B?ZHV3alZRYzRRUjR6ZkVUZzlkR1FVTWpNcEg0SG93U1p1MTFPOVl4cXp6ZWhq?= =?utf-8?B?TnMvRlI3ZGhEbTZQa2tYVnNzdG5kVDRoa0xyTzZONTdvYm9vaXBrdFRFMFB1?= =?utf-8?B?djI5SG12ZDJBNlFXR0tQTmFGNFQrNzVqQW0vN3VNOWtpbllSZWtScWxSUStx?= =?utf-8?B?VEZpSXFLT0kyUlpvejROWVFtWFN2Y0NtMGwrVUFwUnc5aFdEYXdJWnRCNnBH?= =?utf-8?B?YWlVMWsvN3NkQWtjS3M5NjBudkliZ200THBTNXZ4M01GbFpiVis4WXBmN0Nl?= =?utf-8?B?bDQra2JZQXpRNkNlZlZKdURUcDdtckR1bUg4SjFpeEFmUVo5KzJkZXRVaDhq?= =?utf-8?B?L3FhcTRyeFNTNG5nMjJtV1RnR1RCbUdZcE1Ia0grb0FWRGMxSHdTQy8yc3Y2?= =?utf-8?B?NnR0VUJ5cjd5Z0o0MXN6QmxtUHltNkhUUUdvRHBCN2FSZHlkeEpTRDdEQUk4?= =?utf-8?B?Tk1wc2ZoeTJibFVyUWxyQ055clhmc29pS25sZFVtWkJ5Q0hYM0x0ZFVOaUFX?= =?utf-8?B?RWI1Zit1NlpCdkEwazVxcENTaUNiOHpIamJPQkhjcmM5OWdhcCszK2hJUENP?= =?utf-8?B?bjRQa1lDQXVvazJPNUhPVGcrd2tqRzlrQnIrNXVKbCt3WG1rV0YrVXRxbGRD?= =?utf-8?B?Z0lKdklNWjVwZTEvYVQ5UnQzQ0N2ckw1MUhINFVBWWVPa0NUR0FsNzFjUzYz?= =?utf-8?B?YUFLYWl6K3k1UFhLMWdET2pTN3JMYnhRZG1tMFpQWFR1NUNwWDkvOGN4WVF1?= =?utf-8?B?Vm0zZXhUVEVCUDdZUmtzZWRVYjFla3lLc1pjN2hmQVYzVjhsT0J6SUM2UXBD?= =?utf-8?Q?bnfrTaDq9UJcbkUla6jmGIMlmUUZ4fzt?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR07MB3493;6:FanfIvKdBd9VqApbLlnPGeDrk9wLIQi5FC4GGDibpb9Pe7iJd9zytDVfT3v9gDr6X9m4x3DrLCt8zTexrd3FOMbZcSv0DzC4sawllc2+7OCba1VV1CcVFFPm8ZUFjk2gIh332v6FzEFhNpe+wyymjWnTWQRqQ2DsGS5urxSpxEp0EZbl0gPD+eqr1hrcc8/0k8P+79sG3kuUFigHx9IcNM9MGPK9hhbdHTgp2vShunnc3EvUi/HhYoPxQx7Z0bzNJODkr7D5YAjYMW8ZuxCWDUyG7S6zxh/kYeBPV85HWlzyzSSC3roLniHN8NsV1XqJ/Ih1/YQmBJpCy6aDF62L6Q==;5:whDdnMQmuJ4im/+ppDjB9IJ2tAElUnzRonym2jv9mbjnPhWTRKRQt2vQzp2UAlI9z0BcPx8ceeHtqPbc5EHCQMC3tb/Rw993xLwnmKUxTfkyJulrmgfXBU3bqfiCsjHY+4tcK7ntm2yKQhIB3MG4JA==;24:iXJNby+dDjlXzSUzGxxFgncmtxB6+/GqTqxHuAGaby8f8463EQ2L3aRSYVhqWIh4HCCKvV4EYvppZbruu/+bdMXaDk9sETxhM5AGI8LubAQ=;7:pV26QQYOIXRBbDDIgwUnxynjEVYc0Eg3ugJ210YCnX/L02bJW18HxjJxX6x41y//RHchUlog6T+a5rgAIhNVCAXVD3KXUDeFACwABZ3AsbBidq30EobusoEbv49/hZ3++FaHU6MHA2JPsy5QzLqg0vkTxozW9zTQn31QBNTsS4zAmykJYm53CglQmBeWTT06qwW8lLuyKdDjWN/K8aRobQzXyL88sGAxFeRhOKjsD4c= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Aug 2017 15:59:22.5872 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB3493 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/14/2017 03:25 AM, Thomas Gleixner wrote: > On Wed, 9 Aug 2017, David Daney wrote: >> #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY > > Can we please make them conditional in order not to bloat all kernels with > it? Like we do for handle_edge_eoi_irq() ? Yes. Because these are initially used by exactly one driver, I could just make it conditional on that driver being enabled. Alternately, I could invent a new Kconfig symbol to gate these and select that when the driver is enabled. Do you have a preference? > >> /** >> + * 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); > > Hmm. That's quite different to the way we handle edge interrupts > normally. See handle_edge_irq() and handle_edge_eoi_irq(). Yes, these are not standard edge interrupts. If they were, I wouldn't need new handlers. For this particular irqdomain hierarchy, I need exactly handle_fasteoi_irq() semantics with the addition of a call to the chip->irq_ack() function *before* the handler is called. I chose to "clone" and enhance handle_fasteoi_irq(), rather than adding hooks with runtime checks to the existing handle_fasteoi_irq(). There is code bloat this way, but a smaller risk of breaking other things. Any additional "stuff" that is not needed to cover this use case would just be adding dead code. In the future, if there is a need to enable more users of these functions, I would not object to doing more. Thanks, David Daney > > Thanks, > > tglx >