From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7719BC001DF for ; Tue, 1 Aug 2023 14:50:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=VXtRQJqWmTTkpJUMnfKiZ5xBhBGDNJ5AVJx4V+4OC+E=; b=cvSgy02R4+Emgf DEvniY8WjeETPec4irWEIrkMOL/Bi/1ujJNmjpF+16T275t3L9sNr1j9qrA5g3h+rVvI5UootKvCH sWFNTPZbYkFNc434KPfXh4YZladKm3vNCZHIQVcK66znvzpyBWWzwiroQc9d9yGOrCYGbdzJ595DM ir0Fo51NCQ4zDtB1wh1O5lMKVJYmkB62OEMyCyWoAg89JnxQJ9Ab5pGYKTa49G8lLddiICACTBmac 1sM959eGcq2tKXQyjZ53cfi8WR/S0RlfncrKmWtfhYDqFL9mzqoitQfbXaul4TlY85GHZETmMlAsE nwsdT788ns0MRpE7oI6A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qQqgz-002e05-2V; Tue, 01 Aug 2023 14:49:45 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qQqgx-002dzb-18 for linux-arm-kernel@lists.infradead.org; Tue, 01 Aug 2023 14:49:44 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id CB639615C9; Tue, 1 Aug 2023 14:49:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 05A07C433C8; Tue, 1 Aug 2023 14:49:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690901382; bh=INsuVNO/wR50prZmg2Ysz1eWgtnwO2EveqPcDa30rzo=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YdoAuptvxrc+JwCibFkcOHgjU84uQetNEEwlwQMLHwQLZzF17eNth6qX5y6gt6Xn0 FdDY0m3yYld0AAszLNGg1KIU9pwh21QcMIcWTZhjOjKnhLZQs+vMdsQj0lzwwYO0OI nQtiZ7BrwOFMklnJI50tyNNAVvRuB9AxnLC3oearNF/O4OzWyg+TTPegCA8wOoFn5i UZEXuKriYfdYgsX+/SWXl8/5B8us6N4kX/KNr/ZHfn0OtaT+mmfgpAMIjMC8g88xsZ gE6F3iWj1ZhbEyPFLV0gDb8cPrdhU0I39vUS7GO5dmwmi+PpZk48w9tDFhinuzEcu6 F5MiOQGToY5Pg== Date: Tue, 1 Aug 2023 15:49:37 +0100 From: Will Deacon To: Anshuman Khandual Cc: linux-arm-kernel@lists.infradead.org, suzuki.poulose@arm.com, Catalin Marinas , Mark Rutland , linux-kernel@vger.kernel.org Subject: Re: [PATCH V2 1/4] arm_pmu: acpi: Refactor arm_spe_acpi_register_device() Message-ID: <20230801144936.GE26253@willie-the-truck> References: <20230801094052.750416-1-anshuman.khandual@arm.com> <20230801094052.750416-2-anshuman.khandual@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20230801094052.750416-2-anshuman.khandual@arm.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230801_074943_473741_A7B23A33 X-CRM114-Status: GOOD ( 23.80 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Tue, Aug 01, 2023 at 03:10:49PM +0530, Anshuman Khandual wrote: > Sanity checking all the GICC tables for same interrupt number, and ensuring > a homogeneous ACPI based machine, could be used for other platform devices > as well. Hence this refactors arm_spe_acpi_register_device() into a common > helper arm_acpi_register_pmu_device(). > > Cc: Catalin Marinas > Cc: Will Deacon > Cc: Mark Rutland > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Co-developed-by: Will Deacon > Signed-off-by: Will Deacon > Signed-off-by: Anshuman Khandual > --- > drivers/perf/arm_pmu_acpi.c | 110 +++++++++++++++++++++++------------- > 1 file changed, 70 insertions(+), 40 deletions(-) > > diff --git a/drivers/perf/arm_pmu_acpi.c b/drivers/perf/arm_pmu_acpi.c > index 90815ad762eb..d9d5a7bbb92f 100644 > --- a/drivers/perf/arm_pmu_acpi.c > +++ b/drivers/perf/arm_pmu_acpi.c > @@ -70,6 +70,68 @@ static void arm_pmu_acpi_unregister_irq(int cpu) > } > > #if IS_ENABLED(CONFIG_ARM_SPE_PMU) > +static int > +arm_acpi_register_pmu_device(struct platform_device *pdev, u8 len, > + u16 (*parse_gsi)(struct acpi_madt_generic_interrupt *)) > +{ > + int cpu, hetid, irq, ret; > + bool matched = false; > + u16 gsi = 0; > + > + /* > + * Ensure that platform device must have IORESOURCE_IRQ > + * resource to hold gsi interrupt. > + */ > + if (pdev->num_resources != 1) > + return -ENXIO; > + > + if (pdev->resource[0].flags != IORESOURCE_IRQ) > + return -ENXIO; > + > + /* > + * Sanity check all the GICC tables for the same interrupt > + * number. For now, only support homogeneous ACPI machines. > + */ > + for_each_possible_cpu(cpu) { > + struct acpi_madt_generic_interrupt *gicc; > + u16 this_gsi; > + > + gicc = acpi_cpu_get_madt_gicc(cpu); > + if (gicc->header.length < len) > + return matched ? -ENXIO : 0; > + > + this_gsi = parse_gsi(gicc); > + if (!this_gsi) > + return matched ? -ENXIO : 0; I think you can push this check into the conditional below... > + > + if (!matched) { > + hetid = find_acpi_cpu_topology_hetero_id(cpu); ... i.e. add a: if (!this_gsi) return -ENXIO; here. > + gsi = this_gsi; > + matched = true; And then, come to think of it, can we get rid of 'matched' altogether? Since a gsi of 0 is treated as invalid, we could just check that instead, no? So this becomes: gicc = acpi_cpu_get_madt_gicc(cpu); if (gicc->header.length < len) return gsi ? -ENXIO : 0; this_hetid = find_acpi_cpu_topology_hetero_id(cpu); this_gsi = parse_gsi(gicc); if (!gsi) { if (!this_gsi) return -ENXIO; gsi = this_gsi; hetid = this_hetid; } else if (hetid != this_hetid || gsi != this_gsi) { pr_warn("ACPI: %s: must be homogeneous\n", pdev->name); return -ENXIO; } What do you reckon? Will _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel