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 X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 63D79C3F2D2 for ; Fri, 28 Feb 2020 12:15:43 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 222642087F for ; Fri, 28 Feb 2020 12:15:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="BHL4wMaq" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 222642087F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject: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=OlzJiMUsuos3jkUbCYpBXfVHBtjbgmTHl5LyomPceNs=; b=BHL4wMaq2L6/nb 1db9g3Hej7RzP0XOd4dAgY1qd6N+oO4gimCeqKaIliuw/xBUOsZZh2a+VuylXm8uEQa8OVwmdK083 iETI73JQtRvi+6DlqafArE2FGuHQoYOQxam7fH+5xaoyyejk2dR7XN0oCise3d3pRH105b9hehbAe PJXWTWRXz72f4ykxEjDKToLJQJfoUOZtU4O8oMri1/IMQDIA5iltyvf+2nHOd3VrN9qj8FFrCN5bN K90WdP1wqJMhGNQBK1Re8cHsJggqokrVFDmEPNiEXZhnNFercEX7nB9NVtOqMTwTNygSN+XWZJd2j 1uxoNU9m9Zp/ut4h324A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j7eYQ-0004NY-DT; Fri, 28 Feb 2020 12:15:42 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j7eYM-0004Mv-I5 for linux-arm-kernel@lists.infradead.org; Fri, 28 Feb 2020 12:15:40 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7A7374B2; Fri, 28 Feb 2020 04:15:37 -0800 (PST) Received: from lakrids.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AF4F93F7B4; Fri, 28 Feb 2020 04:15:36 -0800 (PST) Date: Fri, 28 Feb 2020 12:15:34 +0000 From: Mark Rutland To: Robin Murphy Subject: Re: [PATCH v2 4/5] arm64: perf: Refactor PMU init callbacks Message-ID: <20200228121534.GE36089@lakrids.cambridge.arm.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.1+11 (2f07cb52) (2018-12-01) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200228_041538_687070_243C09FF X-CRM114-Status: GOOD ( 17.84 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: catalin.marinas@arm.com, will@kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Feb 21, 2020 at 07:35:31PM +0000, Robin Murphy wrote: > The PMU init callbacks are already drowning in boilerplate, so before > doubling the number of supported PMU models, give it a sensible refactor > to significantly reduce the bloat, both in source and object code. > Although nobody uses non-default sysfs attributes today, there's minimal > impact to preserving the notion that maybe, some day, somebody might, so > we may as well keep up appearances. > > Signed-off-by: Robin Murphy Acked-by: Mark Rutland Mark. > --- > > v2: new > > arch/arm64/kernel/perf_event.c | 124 +++++++-------------------------- > 1 file changed, 27 insertions(+), 97 deletions(-) > > diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c > index e40b65645c86..1e0b04da2f3a 100644 > --- a/arch/arm64/kernel/perf_event.c > +++ b/arch/arm64/kernel/perf_event.c > @@ -953,7 +953,10 @@ static int armv8pmu_probe_pmu(struct arm_pmu *cpu_pmu) > return probe.present ? 0 : -ENODEV; > } > > -static int armv8_pmu_init(struct arm_pmu *cpu_pmu) > +static int armv8_pmu_init(struct arm_pmu *cpu_pmu, char *name, > + int (*map_event)(struct perf_event *event), > + const struct attribute_group *events, > + const struct attribute_group *format) > { > int ret = armv8pmu_probe_pmu(cpu_pmu); > if (ret) > @@ -972,135 +975,62 @@ static int armv8_pmu_init(struct arm_pmu *cpu_pmu) > cpu_pmu->set_event_filter = armv8pmu_set_event_filter; > cpu_pmu->filter_match = armv8pmu_filter_match; > > + cpu_pmu->name = name; > + cpu_pmu->map_event = map_event; > + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = events ? > + events : &armv8_pmuv3_events_attr_group; > + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = format ? > + format : &armv8_pmuv3_format_attr_group; > + > return 0; > } > > static int armv8_pmuv3_init(struct arm_pmu *cpu_pmu) > { > - int ret = armv8_pmu_init(cpu_pmu); > - if (ret) > - return ret; > - > - cpu_pmu->name = "armv8_pmuv3"; > - cpu_pmu->map_event = armv8_pmuv3_map_event; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = > - &armv8_pmuv3_events_attr_group; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = > - &armv8_pmuv3_format_attr_group; > - > - return 0; > + return armv8_pmu_init(cpu_pmu, "armv8_pmuv3", > + armv8_pmuv3_map_event, NULL, NULL); > } > > static int armv8_a35_pmu_init(struct arm_pmu *cpu_pmu) > { > - int ret = armv8_pmu_init(cpu_pmu); > - if (ret) > - return ret; > - > - cpu_pmu->name = "armv8_cortex_a35"; > - cpu_pmu->map_event = armv8_a53_map_event; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = > - &armv8_pmuv3_events_attr_group; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = > - &armv8_pmuv3_format_attr_group; > - > - return 0; > + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a35", > + armv8_a53_map_event, NULL, NULL); > } > > static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu) > { > - int ret = armv8_pmu_init(cpu_pmu); > - if (ret) > - return ret; > - > - cpu_pmu->name = "armv8_cortex_a53"; > - cpu_pmu->map_event = armv8_a53_map_event; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = > - &armv8_pmuv3_events_attr_group; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = > - &armv8_pmuv3_format_attr_group; > - > - return 0; > + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a53", > + armv8_a53_map_event, NULL, NULL); > } > > static int armv8_a57_pmu_init(struct arm_pmu *cpu_pmu) > { > - int ret = armv8_pmu_init(cpu_pmu); > - if (ret) > - return ret; > - > - cpu_pmu->name = "armv8_cortex_a57"; > - cpu_pmu->map_event = armv8_a57_map_event; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = > - &armv8_pmuv3_events_attr_group; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = > - &armv8_pmuv3_format_attr_group; > - > - return 0; > + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a57", > + armv8_a57_map_event, NULL, NULL); > } > > static int armv8_a72_pmu_init(struct arm_pmu *cpu_pmu) > { > - int ret = armv8_pmu_init(cpu_pmu); > - if (ret) > - return ret; > - > - cpu_pmu->name = "armv8_cortex_a72"; > - cpu_pmu->map_event = armv8_a57_map_event; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = > - &armv8_pmuv3_events_attr_group; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = > - &armv8_pmuv3_format_attr_group; > - > - return 0; > + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a72", > + armv8_a57_map_event, NULL, NULL); > } > > static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu) > { > - int ret = armv8_pmu_init(cpu_pmu); > - if (ret) > - return ret; > - > - cpu_pmu->name = "armv8_cortex_a73"; > - cpu_pmu->map_event = armv8_a73_map_event; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = > - &armv8_pmuv3_events_attr_group; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = > - &armv8_pmuv3_format_attr_group; > - > - return 0; > + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a73", > + armv8_a73_map_event, NULL, NULL); > } > > static int armv8_thunder_pmu_init(struct arm_pmu *cpu_pmu) > { > - int ret = armv8_pmu_init(cpu_pmu); > - if (ret) > - return ret; > - > - cpu_pmu->name = "armv8_cavium_thunder"; > - cpu_pmu->map_event = armv8_thunder_map_event; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = > - &armv8_pmuv3_events_attr_group; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = > - &armv8_pmuv3_format_attr_group; > - > - return 0; > + return armv8_pmu_init(cpu_pmu, "armv8_cavium_thunder", > + armv8_thunder_map_event, NULL, NULL); > } > > static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu) > { > - int ret = armv8_pmu_init(cpu_pmu); > - if (ret) > - return ret; > - > - cpu_pmu->name = "armv8_brcm_vulcan"; > - cpu_pmu->map_event = armv8_vulcan_map_event; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = > - &armv8_pmuv3_events_attr_group; > - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = > - &armv8_pmuv3_format_attr_group; > - > - return 0; > + return armv8_pmu_init(cpu_pmu, "armv8_brcm_vulcan", > + armv8_vulcan_map_event, NULL, NULL); > } > > static const struct of_device_id armv8_pmu_of_device_ids[] = { > -- > 2.23.0.dirty > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel