From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752614AbcGOHB4 (ORCPT ); Fri, 15 Jul 2016 03:01:56 -0400 Received: from mout.kundenserver.de ([212.227.17.10]:50910 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752533AbcGOHBx (ORCPT ); Fri, 15 Jul 2016 03:01:53 -0400 From: Arnd Bergmann To: Wan Zongshun Cc: Jason Cooper , linux-arm-kernel@lists.infradead.org, Russell King , devicetree@vger.kernel.org, linux-clk@vger.kernel.org, Daniel Lezcano , Thomas Gleixner , linux-kernel@vger.kernel.org, robh@kernel.org, p.zabel@pengutronix.de, Wan Zongshun Subject: Re: [PATCH v2 02/10] irqchip: add irqchip driver for nuc900 Date: Fri, 15 Jul 2016 09:00:22 +0200 Message-ID: <16178876.fFBuoBSjbd@wuerfel> User-Agent: KMail/5.1.3 (Linux/4.4.0-28-generic; KDE/5.18.0; x86_64; ; ) In-Reply-To: <5788718E.7080708@iommu.org> References: <1468135649-19980-1-git-send-email-vw@iommu.org> <20160714135426.GC31509@io.lakedaemon.net> <5788718E.7080708@iommu.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:P2Ao9T6Wf916lj5QJRiCHN6z6HKtuaSGDsxr7BkcFcGC0RxqGXn lKbZZhPdibwOn7JAndpreHm1TFPzV0UosFPQgjC3dnlryK5QmLiFM2ussw4aVMZfukChn48 uxr90UyDrUkxSX0JmVn74P2K9o/LANT/qi0t0NHvY34NSuBxNJHZ5/PKBfgkIV0W9guadW/ 2VPBh8JtoyHapz2SqMBXQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:f1JgBTO1YjU=:SQH3beRuMuFuFHO44WPR6h Gl7PN2d4suyz0DRQmVitcaPrN8yEHhUUnhqza9aeE9Rkqj0oJ3QHvBnkMwrNOnIqYyONOaE6L 3/K/kfKAooJdnLKGYd+sJKvES7cdikn2VlZ909+SK+ciy2TkYZTpQuYxUlrvZ6CZfOpqFkUSk 4XuYUubjuN8V75bEk7xRqt9CUlRr+degWWbgCVGsJqhNuwWbSUbWOSXlX4cSOz/jTv54cDvI3 sxVXkKuDt04C+RtN1hufs3UEvC4l+X0VMDjXSjST/3Uiccqls0aApTjtN7bMwP9g5OBemDCsw FyrAiZuADfkrv44KODXHxVnXhrcDROtNoXCkGOt+/lakp7zVOnSa6DHMRFoScYpi+1h3Uky+w QmMsv0FrV+ktLy7j+hEtpsg5/SAo5fHzmu1bi20kK5WhYOe3htRHIYVqtpds0/WmeyRopCz5B g/oMur6DcLsuokoL1sdtvbX/XkprSO4Gk48zC5CANmkEFkyH2cb8Z/ZujRIUEPdhhKGbRXiP8 qGaP/gmj+aNHx+CTnYwNjuoIWMthwDZWKcqQmfOMwr2gwNR9eg0nqzyx6pa7UR0YjsuFCHFqt 7+8/EXHkFq4ybvkuTk1j8l3U/2S3Czmbm9p0cekECF7dv1q4ej8N4pDCQuLUU7XlEKO3guWCI H/2yyF8QhCEb0PaMTX+PaL9fO2fK1knJ5bhSxh4kOeczudDtj7dN4NVa/lGKYjBn7cKo8bk0x 1rBumgFSugCt6d59 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Friday, July 15, 2016 1:15:58 PM CEST Wan Zongshun wrote: > > Actually, I have two choice to implement this function: > > option1: > > void __exception_irq_entry aic_handle_irq(struct pt_regs *regs) > { > u32 hwirq; > > (void)readl(aic_base + REG_AIC_IPER); > hwirq = readl(aic_base + REG_AIC_ISNR); > > handle_IRQ((irq_find_mapping(aic_domain, hwirq)), regs); > } (side note: I think you want handle_domain_irq()) > option2: > > void __exception_irq_entry aic_handle_irq(struct pt_regs *regs) > { > u32 hwirq; > > hwirq = readl(aic_base + REG_AIC_IPER); > hwirq <<= 2; > > handle_IRQ((irq_find_mapping(aic_domain, hwirq)), regs); > } > > Though the option2 do shift for hwirq, but it seems better than do io > operation by readl,so I prefer to option2, agree? That will only return an irq number that is a multiple of four, which seems wrong since the numbers are not that. Did you mean to write hwirq = ilog2(hwirq); ? That assumes that REG_AIC_IPER contains a 32-bit value with one single bit set to indicate which IRQ was triggered. If the difference is only in performance, you could try measuring which of the two ends up being faster. Arnd