Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp1814413pxb; Mon, 23 Aug 2021 05:26:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzavUR2EWL9nst7mh1qSHNl5oc3fY+a7lyNKfR4y78Up3PUQm5t665nxLocHS4I8rHworWq X-Received: by 2002:a17:906:b286:: with SMTP id q6mr35057913ejz.120.1629721592560; Mon, 23 Aug 2021 05:26:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629721592; cv=none; d=google.com; s=arc-20160816; b=kWbQkjlvGorqrfDSarLXbPaYIZu1oFIpuGpYVK/dNSsjwDdowRV7OlMFScsm+vcR/y cOiDXbNRBcDb/hBEMe0PX7CaG7IAhkTufsS4yB1680usdRvF+L65h+vJDTw5VTiq1jLe Gexw6jLVF753xxFNoYASoYo+00QjZJv5TCfN0vNaN6rHe+RzdbY/+GB2dKmJb29OezwV WEY55VngfTLC4s7Ao3bWipgZDaI2P8fnmEWfCwJbxPezrgXOjnB670FMo7+HtOzKoXjO oGSUap69zUx9NU4A26TZoVWD0axd65hZN4ybcl61nilDv+TgSF3294g+UpQv4yC7nDpS Jq4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:cc :references:to:subject; bh=wzlSl2c1owv8OvE6Dd1qURCuIkAyZxh+kPDrAk87g24=; b=VC7L8CjOVK5M9ghNsd3gLjS1L1qh1lJnvcK6sfaSzJJyQ55wvvyFS8cYtMcAYX2cMo SJzsxAf0WCKLc70n8i1/OO/E6jzqLowJ6y4ofZ0puiO+rbVD/n2JBJ2w5Ort/HpV1si3 zIkauSKlhEDNeWCUa1FiRD4Mfgal1RQvxkfodionpZF5CIALFPReH7KxrNr+XBMEsiId wnlRzb12hBA2vOhrALBkuYXwwXkfmPGivpQCS96jjBT1VdTfUmhHfbQreLco2w76Q4Gh Jsw9PVndwhO0KYiGR9joT2vQ8xjG4V0JKcToSCpe0ys74jpeHWJL2zmEZHw5JRI6/1Mp JS7w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b3si13992174ejb.219.2021.08.23.05.26.09; Mon, 23 Aug 2021 05:26:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237202AbhHWMYa (ORCPT + 99 others); Mon, 23 Aug 2021 08:24:30 -0400 Received: from foss.arm.com ([217.140.110.172]:52734 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236754AbhHWMYa (ORCPT ); Mon, 23 Aug 2021 08:24:30 -0400 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 4D044101E; Mon, 23 Aug 2021 05:23:47 -0700 (PDT) Received: from [10.57.43.155] (unknown [10.57.43.155]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2F3863F766; Mon, 23 Aug 2021 05:23:44 -0700 (PDT) Subject: Re: [PATCH v1 3/3] perf auxtrace arm: Support compat_auxtrace_mmap__{read_head|write_tail} To: Leo Yan References: <20210809112727.596876-1-leo.yan@linaro.org> <20210809112727.596876-4-leo.yan@linaro.org> Cc: Arnaldo Carvalho de Melo , Mike Leach , Will Deacon , Peter Zijlstra , Adrian Hunter , Andi Kleen , Mark Rutland , Catalin Marinas , Russell King , linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Li Huafei , Jin Yao , Riccardo Mancini , Ingo Molnar , Namhyung Kim , Suzuki K Poulose , Mathieu Poirier , Alexander Shishkin , Jiri Olsa , John Garry , coresight@lists.linaro.org, linux-kernel@vger.kernel.org From: James Clark Message-ID: <6ce4057a-57cf-501d-6449-2069cd00ba57@arm.com> Date: Mon, 23 Aug 2021 13:23:42 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210809112727.596876-4-leo.yan@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/08/2021 12:27, Leo Yan wrote: > When the tool runs with compat mode on Arm platform, the kernel is in > 64-bit mode and user space is in 32-bit mode; the user space can use > instructions "ldrd" and "strd" for 64-bit value atomicity. > > This patch adds compat_auxtrace_mmap__{read_head|write_tail} for arm > building, it uses "ldrd" and "strd" instructions to ensure accessing > atomicity for aux head and tail. The file arch/arm/util/auxtrace.c is > built for arm and arm64 building, these two functions are not needed for > arm64, so check the compiler macro "__arm__" to only include them for > arm building. > > Signed-off-by: Leo Yan > --- > tools/perf/arch/arm/util/auxtrace.c | 32 +++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/tools/perf/arch/arm/util/auxtrace.c b/tools/perf/arch/arm/util/auxtrace.c > index b187bddbd01a..c7c7ec0812d5 100644 > --- a/tools/perf/arch/arm/util/auxtrace.c > +++ b/tools/perf/arch/arm/util/auxtrace.c > @@ -107,3 +107,35 @@ struct auxtrace_record > *err = 0; > return NULL; > } > + > +#if defined(__arm__) > +u64 compat_auxtrace_mmap__read_head(struct auxtrace_mmap *mm) > +{ > + struct perf_event_mmap_page *pc = mm->userpg; > + u64 result; > + > + __asm__ __volatile__( > +" ldrd %0, %H0, [%1]" > + : "=&r" (result) > + : "r" (&pc->aux_head), "Qo" (pc->aux_head) > + ); > + > + return result; > +} Hi Leo, I see that this is a duplicate of the atomic read in arch/arm/include/asm/atomic.h For x86, it's possible to include tools/include/asm/atomic.h, but that doesn't include arch/arm/include/asm/atomic.h and there are some other #ifdefs that might make it not so easy for Arm. Just wondering if you considered trying to include the existing one? Or decided that it was easier to duplicate it? Other than that, I have tested that the change works with a 32bit build with snapshot and normal mode. Reviewed by: James Clark Tested by: James Clark > + > +int compat_auxtrace_mmap__write_tail(struct auxtrace_mmap *mm, u64 tail) > +{ > + struct perf_event_mmap_page *pc = mm->userpg; > + > + /* Ensure all reads are done before we write the tail out */ > + smp_mb(); > + > + __asm__ __volatile__( > +" strd %2, %H2, [%1]" > + : "=Qo" (pc->aux_tail) > + : "r" (&pc->aux_tail), "r" (tail) > + ); > + > + return 0; > +} > +#endif >