Received: by 2002:ab2:6309:0:b0:1fb:d597:ff75 with SMTP id s9csp1516707lqt; Sat, 8 Jun 2024 01:12:10 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVWovWZWwgBTfKsC6VjfMH70laKKDnEo3XaOa1V5v/p3RoJmCtSzAzU1VpDm228j5t3jqrmUvdW2T5f3yGB6zlU1Ac94sCGR6K+lv1TiA== X-Google-Smtp-Source: AGHT+IFtkeq5VQLG43hKBnj4wLTflofDMhi5cek9AwnuywSw1vTH5pPi+bSY+KxLKOuTBBHUxtc5 X-Received: by 2002:a17:902:e802:b0:1f3:f5c:cd80 with SMTP id d9443c01a7336-1f6d02d4655mr54086475ad.5.1717834330597; Sat, 08 Jun 2024 01:12:10 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717834330; cv=pass; d=google.com; s=arc-20160816; b=t/f5h1yaP5CHZvmraynxlr2f69GrDOgtn5lDaosZ7p4qpuym2hnLCT5Ti+gu1LYmSg r1OvXrdgSbiE+cCdfa+Q3sQHaqvusV4zjnZuaAdaRT0HRZff4DqBw1vo+qgBJ16WC2rI 2FTnQ4PnF6mhZXsBVoTDBVjGrARDLRwgae5pjfnAmsnaCHJPJK8TAlqzTAk+GbksMo0p l4+UP0djgFLKxzrp3osbCRChldmRVrnKw19ATky3oz3rwF+7jDWJlewh405id+HUY+Dm rFT4IpAsoIkGcqNfOiZlaeDK9Dp9rbkzeD8LmvXxcWD0zIhTTd/dkAm/l/Ze4+G0O1pn 0GJA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:dkim-signature; bh=HRDLQSZdkkK3Z4B1ucPGx8HDpF++0JqgxubJlry9nZ4=; fh=KVQmWjzmUKrFxGvUWyUohTiW2D21aptx6b1PDFMxXWs=; b=Er/kO4h9vs8epKF3jJ28gH3ubeIoAJnQqlyGl4MThEOStivNW4yeoq/X9GTgUrBi/2 PWmxiulckWgEu6kBsQvnZzItWFW3MIAJCAPUYeLUkE8W4dxz4WlAb7PSWzV0BGDGX0V1 1OO5gfNjKT9tFtUPu6erRlwzcz+YLNl3nUmh7a9whlwAro9upAytPkyL3/uHHWOOkD0F rwFYlgjaOBzT1l9AAiR05PXykwT9BpcW3WCqSEgzr47nNhnaSeRRNQhs4EP77ZEnno3K vMWe2yxSF97Qyo40FhEKOQz3ROo1X3tiuRyOBmYodTd52HYt3Ixo+Rkg9GjbdkxbDdLL /5QQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=BPiwB8yM; arc=pass (i=1 dkim=pass dkdomain=ibm.com dmarc=pass fromdomain=linux.vnet.ibm.com); spf=pass (google.com: domain of linux-kernel+bounces-206918-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-206918-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id d9443c01a7336-1f6bd7e5089si593365ad.412.2024.06.08.01.12.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Jun 2024 01:12:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-206918-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=BPiwB8yM; arc=pass (i=1 dkim=pass dkdomain=ibm.com dmarc=pass fromdomain=linux.vnet.ibm.com); spf=pass (google.com: domain of linux-kernel+bounces-206918-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-206918-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=ibm.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id DBE28B23C8B for ; Sat, 8 Jun 2024 07:06:25 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 11C27347C7; Sat, 8 Jun 2024 07:06:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="BPiwB8yM" Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0A791804F; Sat, 8 Jun 2024 07:06:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717830376; cv=none; b=NrRNA3UnKFZuHKznWfYJ66fxPMeNsXgXJa7TzwjE8liAl5SzsuhOX7HUwkqgUBohanOD6nCCNiA9x5OpwtS8oT8vNyyMitfNlyk/hDPf7uiY6V9Li7pWtJdKwtAKpIXVRTSBF4e8aC8K/fw9GU0MvD1lBrENXUVSNTIhIjbCIUI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717830376; c=relaxed/simple; bh=Yb6EjXvWGb9uTJveaYkb3x1Fzk318WleuxCoUQMAAWE=; h=Content-Type:Mime-Version:Subject:From:In-Reply-To:Date:Cc: Message-Id:References:To; b=c2jqVVYcBvZOQAlR0rcW6qAH+4WO/curyBM3uhkh7w4CrdR9aGwdYP5G4L96hSkRZFetA8ZeGk3m/PgX2OhMnd98PmUFJz5RUcUyY9nBUqNYhlugfdjJNKmWt1ZbCSKoj1oMb36VBWHK3eyBAzxNfOv31n1YDVcpS61Wc+Y5AjU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.vnet.ibm.com; spf=none smtp.mailfrom=linux.vnet.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=BPiwB8yM; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.vnet.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.vnet.ibm.com Received: from pps.filterd (m0353727.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 4586sagK007783; Sat, 8 Jun 2024 07:06:04 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h= content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; s=pp1; bh=H RDLQSZdkkK3Z4B1ucPGx8HDpF++0JqgxubJlry9nZ4=; b=BPiwB8yMi3xd3EXnp gSCMlvgMOSVfY5gILVEaIPyFSVTlJ8w6/LRJDMmyfwZN5c0YodxrN/c5D0BGY3Bm vn8eppwfpSfRg8/zktM0sMxH8PcYFwQA2/VBFiBmtP95y8GbX5Y33jFwS2XRPp/c hS2nkxkOGBVwUxOtu2PJGiFuFQr1tfGDLXQUnscCWAljFm/2Xc3tAo8ENDljF/jO lUf2ozNoeDzvKJUXjEeKBTJHmciXOAxnw/uSx7Xt9fLnxqmKjxMBNovfmNVuSfqW gmrlmAdM2AxHfZDKmxJlVPM7iYNCSoxpXVnl0eugV274vXr5UKKreKxf5SHPjAl6 tB7xA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3ymhf8046b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 08 Jun 2024 07:06:03 +0000 (GMT) Received: from m0353727.ppops.net (m0353727.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 458763uO005770; Sat, 8 Jun 2024 07:06:03 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3ymhf80468-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 08 Jun 2024 07:06:03 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 4583VZeq011504; Sat, 8 Jun 2024 07:06:02 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 3ymffnrtcd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 08 Jun 2024 07:06:01 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 45875u0I52363716 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 8 Jun 2024 07:05:58 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 10EB82004E; Sat, 8 Jun 2024 07:05:56 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 58A7020040; Sat, 8 Jun 2024 07:05:53 +0000 (GMT) Received: from smtpclient.apple (unknown [9.43.125.209]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTPS; Sat, 8 Jun 2024 07:05:53 +0000 (GMT) Content-Type: text/plain; charset=utf-8 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.500.171.1.1\)) Subject: Re: [PATCH V3 10/14] tools/perf: Update instruction tracking for powerpc From: Athira Rajeev In-Reply-To: Date: Sat, 8 Jun 2024 12:35:42 +0530 Cc: Arnaldo Carvalho de Melo , Jiri Olsa , Adrian Hunter , Ian Rogers , Segher Boessenkool , christophe.leroy@csgroup.eu, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, akanksha@linux.ibm.com, maddy@linux.ibm.com, kjain@linux.ibm.com, disgoel@linux.vnet.ibm.com Content-Transfer-Encoding: quoted-printable Message-Id: <100DACC9-508E-4B09-97AA-A771267DF1E8@linux.vnet.ibm.com> References: <20240601060941.13692-1-atrajeev@linux.vnet.ibm.com> <20240601060941.13692-11-atrajeev@linux.vnet.ibm.com> To: Namhyung Kim X-Mailer: Apple Mail (2.3774.500.171.1.1) X-TM-AS-GCONF: 00 X-Proofpoint-GUID: t3_7sXSsx47BnE8iROdaPgUHjbQbL04S X-Proofpoint-ORIG-GUID: 4kmrVUikZH3vEqzI3HDCA_LJoRPgyMEk X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-06-08_01,2024-06-06_02,2024-05-17_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 mlxscore=0 impostorscore=0 lowpriorityscore=0 adultscore=0 priorityscore=1501 mlxlogscore=999 suspectscore=0 malwarescore=0 clxscore=1015 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2405170001 definitions=main-2406080049 > On 6 Jun 2024, at 12:23=E2=80=AFPM, Namhyung Kim = wrote: >=20 > On Sat, Jun 01, 2024 at 11:39:37AM +0530, Athira Rajeev wrote: >> Add instruction tracking function "update_insn_state_powerpc" for >> powerpc. Example sequence in powerpc: >>=20 >> ld r10,264(r3) >> mr r31,r3 >> < >> ld r9,312(r31) >>=20 >> Consider ithe sample is pointing to: "ld r9,312(r31)". >> Here the memory reference is hit at "312(r31)" where 312 is the = offset >> and r31 is the source register. Previous instruction sequence shows = that >> register state of r3 is moved to r31. So to identify the data type = for r31 >> access, the previous instruction ("mr") needs to be tracked and the >> state type entry has to be updated. Current instruction tracking = support >> in perf tools infrastructure is specific to x86. Patch adds this = support >> for powerpc as well. >>=20 >> Signed-off-by: Athira Rajeev >> --- >> .../perf/arch/powerpc/annotate/instructions.c | 65 = +++++++++++++++++++ >> tools/perf/util/annotate-data.c | 9 ++- >> tools/perf/util/disasm.c | 1 + >> 3 files changed, 74 insertions(+), 1 deletion(-) >>=20 >> diff --git a/tools/perf/arch/powerpc/annotate/instructions.c = b/tools/perf/arch/powerpc/annotate/instructions.c >> index db72148eb857..3ecf5a986037 100644 >> --- a/tools/perf/arch/powerpc/annotate/instructions.c >> +++ b/tools/perf/arch/powerpc/annotate/instructions.c >> @@ -231,6 +231,71 @@ static struct ins_ops *check_ppc_insn(int = raw_insn) >> return NULL; >> } >>=20 >> +/* >> + * Instruction tracking function to track register state moves. >> + * Example sequence: >> + * ld r10,264(r3) >> + * mr r31,r3 >> + * < >> + * ld r9,312(r31) >> + * >> + * Previous instruction sequence shows that register state of r3 >> + * is moved to r31. update_insn_state_powerpc tracks these state >> + * changes >> + */ >> +#ifdef HAVE_DWARF_SUPPORT >> +static void update_insn_state_powerpc(struct type_state *state, >> + struct data_loc_info *dloc, Dwarf_Die * cu_die __maybe_unused, >> + struct disasm_line *dl) >> +{ >> + struct annotated_insn_loc loc; >> + struct annotated_op_loc *src =3D &loc.ops[INSN_OP_SOURCE]; >> + struct annotated_op_loc *dst =3D &loc.ops[INSN_OP_TARGET]; >> + struct type_state_reg *tsr; >> + u32 insn_offset =3D dl->al.offset; >> + >> + if (annotate_get_insn_location(dloc->arch, dl, &loc) < 0) >> + return; >> + >> + /* >> + * Value 444 for bits 21:30 is for "mr" >> + * instruction. "mr" is extended OR. So set the >> + * source and destination reg correctly >> + */ >> + if (PPC_21_30(dl->ops.raw_insn) =3D=3D 444) { >> + int src_reg =3D src->reg1; >> + >> + src->reg1 =3D dst->reg1; >> + dst->reg1 =3D src_reg; >> + } >> + >> + if (!has_reg_type(state, dst->reg1)) >> + return; >> + >> + tsr =3D &state->regs[dst->reg1]; >> + >> + if (!has_reg_type(state, src->reg1) || >> + !state->regs[src->reg1].ok) { >> + tsr->ok =3D false; >> + return; >> + } >> + >> + tsr->type =3D state->regs[src->reg1].type; >> + tsr->kind =3D state->regs[src->reg1].kind; >> + tsr->ok =3D true; >> + >> + pr_debug("mov [%x] reg%d -> reg%d", >=20 > pr_debug_dtp() ? Sure, will change this in V4 Thanks Athira >=20 > Thanks, > Namhyung >=20 >=20 >> + insn_offset, src->reg1, dst->reg1); >> + pr_debug_type_name(&tsr->type, tsr->kind); >> +} >> +#else /* HAVE_DWARF_SUPPORT */ >> +static void update_insn_state_powerpc(struct type_state *state = __maybe_unused, struct data_loc_info *dloc __maybe_unused, >> + Dwarf_Die * cu_die __maybe_unused, struct disasm_line *dl = __maybe_unused) >> +{ >> + return; >> +} >> +#endif /* HAVE_DWARF_SUPPORT */ >> + >> static int powerpc__annotate_init(struct arch *arch, char *cpuid = __maybe_unused) >> { >> if (!arch->initialized) { >> diff --git a/tools/perf/util/annotate-data.c = b/tools/perf/util/annotate-data.c >> index 7a48c3d72b89..734acdd8c4b7 100644 >> --- a/tools/perf/util/annotate-data.c >> +++ b/tools/perf/util/annotate-data.c >> @@ -1080,6 +1080,13 @@ static int find_data_type_insn(struct = data_loc_info *dloc, >> return ret; >> } >>=20 >> +static int arch_supports_insn_tracking(struct data_loc_info *dloc) >> +{ >> + if ((arch__is(dloc->arch, "x86")) || (arch__is(dloc->arch, = "powerpc"))) >> + return 1; >> + return 0; >> +} >> + >> /* >> * Construct a list of basic blocks for each scope with variables and = try to find >> * the data type by updating a type state table through instructions. >> @@ -1094,7 +1101,7 @@ static int find_data_type_block(struct = data_loc_info *dloc, >> int ret =3D -1; >>=20 >> /* TODO: other architecture support */ >> - if (!arch__is(dloc->arch, "x86")) >> + if (!arch_supports_insn_tracking(dloc)) >> return -1; >>=20 >> prev_dst_ip =3D dst_ip =3D dloc->ip; >> diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c >> index 57af4dc42a58..d8b357055302 100644 >> --- a/tools/perf/util/disasm.c >> +++ b/tools/perf/util/disasm.c >> @@ -155,6 +155,7 @@ static struct arch architectures[] =3D { >> { >> .name =3D "powerpc", >> .init =3D powerpc__annotate_init, >> + .update_insn_state =3D update_insn_state_powerpc, >> }, >> { >> .name =3D "riscv64", >> --=20 >> 2.43.0