From patchwork Tue Jul 25 09:34:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?S3Vhbi1ZaW5nIExlZSAo5p2O5Yag56mOKQ==?= X-Patchwork-Id: 13326243 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 95330C0015E for ; Tue, 25 Jul 2023 09:55:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1BF9E6B0071; Tue, 25 Jul 2023 05:55:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 171656B0074; Tue, 25 Jul 2023 05:55:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 038626B0075; Tue, 25 Jul 2023 05:55:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id E4AC36B0071 for ; Tue, 25 Jul 2023 05:55:53 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 967CBA0CE9 for ; Tue, 25 Jul 2023 09:55:53 +0000 (UTC) X-FDA: 81049677786.22.C7DDE73 Received: from mailgw01.mediatek.com (mailgw01.mediatek.com [216.200.240.184]) by imf26.hostedemail.com (Postfix) with ESMTP id 46B72140005 for ; Tue, 25 Jul 2023 09:55:50 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=mediatek.com header.s=dk header.b=r2NxIXm8; dmarc=pass (policy=quarantine) header.from=mediatek.com; spf=pass (imf26.hostedemail.com: domain of kuan-ying.lee@mediatek.com designates 216.200.240.184 as permitted sender) smtp.mailfrom=kuan-ying.lee@mediatek.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690278951; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=yPZv3tM9vTtpWd34AkCCKWUdpVmNx/aOuZOzG2VcV74=; b=xdKLcJNcmZGf/LdVw3vygHJF2bQyBYFxc16xypDz9+Xlj/oX9TGU4dQSLI7W7Qdm3cP9f5 8z3OhHz/Q8Fxgpam27NIVaxZByB00+N27HdnT/jZnOMgy7Z8IM3JySV2SYv2f5xlNjI1Je ATHAKIXjc62PWZ2Uvxf4fOK+I0oJKqQ= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=mediatek.com header.s=dk header.b=r2NxIXm8; dmarc=pass (policy=quarantine) header.from=mediatek.com; spf=pass (imf26.hostedemail.com: domain of kuan-ying.lee@mediatek.com designates 216.200.240.184 as permitted sender) smtp.mailfrom=kuan-ying.lee@mediatek.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690278951; a=rsa-sha256; cv=none; b=Cp9ZYiTKNbc3Xb9B/HQMEW4246SdMtr00cOywFCOHobmRZr/QmSzl2W4+tLhs8exFQLJfA U49v8vYO4o2xA/qpPvDDije27G28PRs4sHuXhsSB8Q9RJ1JHC1m7i/UCqh9K1aUeHyDBt4 Y3WYwCcGg79ayI6SeKCbCAzCF/dtbZg= X-UUID: 6888f23a2ad111ee912e1518a6540028-20230725 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=yPZv3tM9vTtpWd34AkCCKWUdpVmNx/aOuZOzG2VcV74=; b=r2NxIXm8d7FUY+Nyld7O5AzqQjHDZ6hIX0c+G1WwpEfMiiUxWmCkSIOPDzJWExF2/+gdoL9BaeXCyAj2SOnFsjmbxKhII/uZQct7ZG52cRk38a/HSBmUhTotz2q+MCZUaeTXdYRMIUKVWwUZsucyvQbDlzZc8oHnDOBI0FUKcUA=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.29,REQID:fcf75e59-db8a-4c80-b36a-bf95183da962,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:e7562a7,CLOUDID:114a6e42-d291-4e62-b539-43d7d78362ba,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:11|1,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1,SPR: NO,DKR:0,DKP:0,BRR:0,BRE:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_ULN X-UUID: 6888f23a2ad111ee912e1518a6540028-20230725 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1047767663; Tue, 25 Jul 2023 02:55:38 -0700 Received: from mtkmbs11n1.mediatek.inc (172.21.101.185) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.26; Tue, 25 Jul 2023 17:35:34 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkmbs11n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.1118.26 via Frontend Transport; Tue, 25 Jul 2023 17:35:34 +0800 From: Kuan-Ying Lee To: Jan Kiszka , Kieran Bingham , Matthias Brugger , AngeloGioacchino Del Regno CC: , , , , , , , Kuan-Ying Lee , , Subject: [PATCH 5/8] scripts/gdb/stackdepot: Add stackdepot support Date: Tue, 25 Jul 2023 17:34:55 +0800 Message-ID: <20230725093458.30064-6-Kuan-Ying.Lee@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20230725093458.30064-1-Kuan-Ying.Lee@mediatek.com> References: <20230725093458.30064-1-Kuan-Ying.Lee@mediatek.com> MIME-Version: 1.0 X-MTK: N X-Rspamd-Queue-Id: 46B72140005 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: 37mnrgde1dwkuhxmfq3gxs6toh4ny8k7 X-HE-Tag: 1690278950-560483 X-HE-Meta: U2FsdGVkX19haC1WA2Yvf+EwX/HlgJ76XLsrRr94xSFkUcWDs4FuFxADS6XzG1r4PF0T+STYY10PlEwuTxhy9UGKBsFBAS/ZyskSOjf5gisQD3voaQDTQfw75mXFb0f8vsBu+d2UV2ym5EHL5T4MtRO677RBkXJvZm1+U3XUieDYOL7vWPSoFj62hSmoANwRbRBtkSe0bIsUlh/8iqgFONhLQHcZwdIp5UNoK5wA++L45Z63Ubm0vd4KEa/SV2hg2+5oy2l/av0EK/KgjwxwZ5CBw2fvaXT85TP9CzJmTav2d9XgvH1MFMPjfUOrfKuJNotRcmqxD8PiWNoMbxFv7zOCz88cdrvL5A0NPw5kOAUKBefLpScQE/3fauWD5UuBYIyO7iL4F905YPtXkXXwie0eoBhUs8vpu7dAhIaVWXLrGCt4oZzSUfg72j/YG6aLsXzJtLYsILKY0wujZykiSrWSKYCm+e85ALF3n/CybcNz/4BSHCLt8H5pc4zmhEPv7DkD4nzNNZ59LeKAqrsxz2dnTSAm/a8GuqvFuq5PjvCUhoWkkKlZjjV1wB3uC7TXn70lyN5H2dU9LEM0ad4n56LlB/75BpQzRiio2x0ZDgqJ400xjEVliI8fChAS1XilK3cwEXf8ETzkFpmBbSD9oayQ4o/d8nwY6n3YR/kxdg5BXl/2V5me7HLuNAhple9m4ToPmH06hO920jIyg2Zy5shQJrnsGqlhRiTtYjlhooOV8fK9h5tn30Y3CoZHkkaIxQmbytyh7rS/AWhqMm/+SynQNDKHVQH3jQ+5gJqzaCTO4EFY8PrNCg2b91RAB5occltGK8zX9P7LJAhUzN0oKRVFqVoC0Tm9EO093S2PM3rUb379zTvLleo4lempp6fjM/2MfHFknn5MZ9MiXbehsh1Aa3bmpjYhgs23bg18qy5p1mK0erBomYQH+b2NtmM4kwQ3S+CG546aY7Xuo/J Xl7VnjbB MXhJDvFmwFRZO/JvGzk73bmKmmYF5GwqvSpu3bhO7IF62yFbqs37m1+uJGwMmYUsWo+wdbha758IlVh7Eg8If2iiPDJG453nUyJ2rueCcEn5rR9+l57N3eHPzAsIrUys9IAqNq5dNrYGa+tDxFqyhpooe1h1HDDsdQ4977iiI7KABcQUAP8S5lvrub8Sj+02wcvy2hbtO7l2huShBzWmajrHOgZHJRcIquBwo+3O0Y9hUZF2ig0aw9oh3wQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Add support for printing the backtrace of stackdepot handle. This is the preparation patch for dumping page_owner, slabtrace usage. Signed-off-by: Kuan-Ying Lee --- scripts/gdb/linux/constants.py.in | 1 + scripts/gdb/linux/stackdepot.py | 54 +++++++++++++++++++++++++++++++ scripts/gdb/vmlinux-gdb.py | 1 + 3 files changed, 56 insertions(+) create mode 100644 scripts/gdb/linux/stackdepot.py diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in index 7c44222bbf23..ec88c9affdd2 100644 --- a/scripts/gdb/linux/constants.py.in +++ b/scripts/gdb/linux/constants.py.in @@ -133,3 +133,4 @@ LX_CONFIG(CONFIG_VMAP_STACK) if IS_BUILTIN(CONFIG_NUMA): LX_VALUE(CONFIG_NODES_SHIFT) LX_CONFIG(CONFIG_DEBUG_VIRTUAL) +LX_CONFIG(CONFIG_STACKDEPOT) diff --git a/scripts/gdb/linux/stackdepot.py b/scripts/gdb/linux/stackdepot.py new file mode 100644 index 000000000000..03b5eb19f056 --- /dev/null +++ b/scripts/gdb/linux/stackdepot.py @@ -0,0 +1,54 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# Copyright (c) 2023 MediaTek Inc. +# +# Authors: +# Kuan-Ying Lee +# + +import gdb +from linux import utils, constants + +stack_record_type = utils.CachedType('struct stack_record') +DEPOT_STACK_ALIGN = 4 + +def stack_depot_fetch(handle): + global DEPOT_STACK_ALIGN + global stack_record_type + + stack_depot_disabled = gdb.parse_and_eval('stack_depot_disabled') + + if stack_depot_disabled: + raise gdb.GdbError("stack_depot_disabled\n") + + handle_parts_t = gdb.lookup_type("union handle_parts") + parts = handle.cast(handle_parts_t) + offset = parts['offset'] << DEPOT_STACK_ALIGN + pool_index_cached = gdb.parse_and_eval('pool_index') + + if parts['pool_index'] > pool_index_cached: + gdb.write("pool index %d out of bounds (%d) for stack id 0x%08x\n" % (parts['pool_index'], pool_index_cached, handle)) + return gdb.Value(0), 0 + + stack_pools = gdb.parse_and_eval('stack_pools') + + try: + pool = stack_pools[parts['pool_index']] + stack = (pool + gdb.Value(offset).cast(utils.get_size_t_type())).cast(stack_record_type.get_type().pointer()) + size = int(stack['size'].cast(utils.get_ulong_type())) + return stack['entries'], size + except Exception as e: + gdb.write("%s\n" % e) + return gdb.Value(0), 0 + +def stack_depot_print(handle): + if not constants.LX_CONFIG_STACKDEPOT: + raise gdb.GdbError("CONFIG_STACKDEPOT is not enabled") + + entries, nr_entries = stack_depot_fetch(handle) + if nr_entries > 0: + for i in range(0, nr_entries): + try: + gdb.execute("x /i 0x%x" % (int(entries[i]))) + except Exception as e: + gdb.write("%s\n" % e) diff --git a/scripts/gdb/vmlinux-gdb.py b/scripts/gdb/vmlinux-gdb.py index fd24574bcec9..24f149694b81 100644 --- a/scripts/gdb/vmlinux-gdb.py +++ b/scripts/gdb/vmlinux-gdb.py @@ -45,3 +45,4 @@ else: import linux.radixtree import linux.interrupts import linux.mm + import linux.stackdepot