From patchwork Fri Jul 28 05:00:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Kefeng Wang X-Patchwork-Id: 13331189 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 3A7D1C05052 for ; Fri, 28 Jul 2023 04:48:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C865D6B0075; Fri, 28 Jul 2023 00:48:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C0E2E6B0078; Fri, 28 Jul 2023 00:48:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A877C6B007B; Fri, 28 Jul 2023 00:48:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 970116B0075 for ; Fri, 28 Jul 2023 00:48:34 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 49312B138F for ; Fri, 28 Jul 2023 04:48:34 +0000 (UTC) X-FDA: 81059789748.21.CE778AE Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by imf25.hostedemail.com (Postfix) with ESMTP id C423FA0008 for ; Fri, 28 Jul 2023 04:48:30 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=none; spf=pass (imf25.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690519711; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NjF9mahCAmrdY7IQdEpL1zgetsdP4wZLFMpIN91y3YY=; b=17VWvWePTX8VwWzTaxa6mh30bxD7h6suHLzxk6FabVeESoDsCVblvYhkHgZ+p2y9kg/W23 b0ioYdttZTHHRjmanNcwCaZ+HxD9cuOaPl/+lHyAfqoQVVTKERSKbzpRbGdc/rXydBal8m /LPqWowaWvBYrlNwwJLeX895JdsdenA= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=none; spf=pass (imf25.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690519711; a=rsa-sha256; cv=none; b=amYS+iUKy2o7kDrUjzI6WXTlcYGmXClV0syKwucicvHYmaL1yoJEyE2YZx6k+yS/Jo/Qdc Wr5Kkh2nt0VFeizOm2zWldCzPsfWPCCZf+xkF39EdLbRiOicDAoxfOksUfYVlcQRtevJ7r Ab0GKNEcJ1jTubEvW4BYz/JRGS/OJy8= Received: from dggpemm100001.china.huawei.com (unknown [172.30.72.54]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4RBw9G6bpfz1GDKc; Fri, 28 Jul 2023 12:47:30 +0800 (CST) Received: from localhost.localdomain.localdomain (10.175.113.25) by dggpemm100001.china.huawei.com (7.185.36.93) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Fri, 28 Jul 2023 12:48:25 +0800 From: Kefeng Wang To: Andrew Morton CC: , , , , , , , =?utf-8?q?Christian_G=C3=B6ttsche?= , David Hildenbrand , Felix Kuehling , Alex Deucher , , , , , , , , , , Kefeng Wang Subject: [PATCH v3 1/4] mm: factor out VMA stack and heap checks Date: Fri, 28 Jul 2023 13:00:40 +0800 Message-ID: <20230728050043.59880-2-wangkefeng.wang@huawei.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230728050043.59880-1-wangkefeng.wang@huawei.com> References: <20230728050043.59880-1-wangkefeng.wang@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.113.25] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpemm100001.china.huawei.com (7.185.36.93) X-CFilter-Loop: Reflected X-Rspamd-Queue-Id: C423FA0008 X-Rspam-User: X-Stat-Signature: tzf4mbo9c48fzo8zetmicdoczggw1hzd X-Rspamd-Server: rspam01 X-HE-Tag: 1690519710-862722 X-HE-Meta: U2FsdGVkX19QPfgL4CFeVqzG9qo6PPJRdFk9Mh7kpcjQlDbfpwyojVdnbLBuqsSacknsnBAezqLcJnDygcXoYoIfC8OG0YgoAf3Sm2gjTleUCi3VCCSfkQm4frm8RBKRUHVI9OH04pAehmuQ8hdgHGuD2oMS2rYdUagHj5prLRLP0yozpoavBzSzqvAwLhxPuhqhGDP+AGRkzZFmtIz5wOqz2A0O/K4fm53bcp0gmGYR6oqwWMV2f35hDCiVHjwW3xFNaN/dntMvctIGnGPjMQ9Dw37OzQT7yz1+sUPkeNxRRDwGinjD7YZhir0iQfSkVmqmeZoaK/vcOkwW6u4DusweRCrLWhaszYIWyE6BqFMd3ux3TrJqcqOaeaELliqQzpQI5qFcdP5OwVOAD8ufloz4cxMajQZ/zXF/sEIiJAstR4/oBRAYKwNZUrajbum4HcAUzJqpcKV/P54jQnhUVMVl3cdyHShIbCavLzcauz8X7RlgJ03su/Ob2SUWpb1H7jKLJKa6NY5jzRQniaWaGPHZkxdccbnIcCT083lehuoUG7FoSZOlbuU/yxxIUvI62TL+FBsIfNPqkQfHLrLj7/ZLfbWmr6qXOnO3TWXQ54rPpE6j8maXfu7MY/ibDaLe3XYAXeuSrDpBMfpI9I78qn6TpSIMdCA9UXKGRXGdjq/sUrtDHQ4S4dROhmqbEQDCQuvBlDCcY2qB4JBdkJQ7rkUXH3j/Hq2EpfAWUiZ3ql8dsoL02frNWVw8dcNZvPF/qV0EQUmh3eYl4ItjoyE8QIauhIjdXikGb+I44F9OwAOvcLwnrTwoDTGHO3m5gK/cGZTCjZDGiAwifBavJWL7srrBAf5hyUM/EANQUHf7tUzhITpDMtnQfY15BCuXm+dzoApqI0gdoX2zVB7zEV6taXUvKSp1Iyj+rXkQ3PjkFYD7PqMCcuv6OwiQeG0o701MiwZHVZKVhVYpsdM/ODI TQKJ2j8Z Cl+OIG+QxvHqwgrwElqT2Szr4fCFEXZWDRamPihQs5a1im8qwPE5f6Bizrb1GaJJw7EKZ6mSvcYBexB4rs55m9cVnoM5nKA0zmO/3NxAyH/dF5S8yOLwQ/in1DpJb1YwaKIhBmyktNrR8tv10AmlVm9IB0ixWYbR3ILi+dZ+SuZeP88h0XKu8l+5Hq7T4q+eDGVj4DeRcdN9e7xvUXZBuOAw37Wa4LvegArh4uVpODpxbiP6cTR8hkt99vMR8K87bFQZWfFVLcxHz7lMWxuJCLKoSFLv83KA/vqpwxs1svybungt11Rs96b3IWA== 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: Factor out VMA stack and heap checks and name them vma_is_initial_stack() and vma_is_initial_heap() for general use. Cc: Christian Göttsche Cc: David Hildenbrand Reviewed-by: David Hildenbrand Signed-off-by: Kefeng Wang --- fs/proc/task_mmu.c | 24 ++++-------------------- fs/proc/task_nommu.c | 15 +-------------- include/linux/mm.h | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 2b434b3fa2ec..3f063201b1ec 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -236,21 +236,6 @@ static int do_maps_open(struct inode *inode, struct file *file, sizeof(struct proc_maps_private)); } -/* - * Indicate if the VMA is a stack for the given task; for - * /proc/PID/maps that is the stack of the main task. - */ -static int is_stack(struct vm_area_struct *vma) -{ - /* - * We make no effort to guess what a given thread considers to be - * its "stack". It's not even well-defined for programs written - * languages like Go. - */ - return vma->vm_start <= vma->vm_mm->start_stack && - vma->vm_end >= vma->vm_mm->start_stack; -} - static void show_vma_header_prefix(struct seq_file *m, unsigned long start, unsigned long end, vm_flags_t flags, unsigned long long pgoff, @@ -327,13 +312,12 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma) goto done; } - if (vma->vm_start <= mm->brk && - vma->vm_end >= mm->start_brk) { + if (vma_is_initial_heap(vma)) { name = "[heap]"; goto done; } - if (is_stack(vma)) { + if (vma_is_initial_stack(vma)) { name = "[stack]"; goto done; } @@ -1975,9 +1959,9 @@ static int show_numa_map(struct seq_file *m, void *v) if (file) { seq_puts(m, " file="); seq_file_path(m, file, "\n\t= "); - } else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) { + } else if (vma_is_initial_heap(vma)) { seq_puts(m, " heap"); - } else if (is_stack(vma)) { + } else if (vma_is_initial_stack(vma)) { seq_puts(m, " stack"); } diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c index 2c8b62265981..a8ac0dd8041e 100644 --- a/fs/proc/task_nommu.c +++ b/fs/proc/task_nommu.c @@ -121,19 +121,6 @@ unsigned long task_statm(struct mm_struct *mm, return size; } -static int is_stack(struct vm_area_struct *vma) -{ - struct mm_struct *mm = vma->vm_mm; - - /* - * We make no effort to guess what a given thread considers to be - * its "stack". It's not even well-defined for programs written - * languages like Go. - */ - return vma->vm_start <= mm->start_stack && - vma->vm_end >= mm->start_stack; -} - /* * display a single VMA to a sequenced file */ @@ -171,7 +158,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma) if (file) { seq_pad(m, ' '); seq_file_path(m, file, ""); - } else if (mm && is_stack(vma)) { + } else if (mm && vma_is_initial_stack(vma)) { seq_pad(m, ' '); seq_puts(m, "[stack]"); } diff --git a/include/linux/mm.h b/include/linux/mm.h index acaef8d106f0..2fbc6c631764 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -866,6 +866,31 @@ static inline bool vma_is_anonymous(struct vm_area_struct *vma) return !vma->vm_ops; } +/* + * Indicate if the VMA is a heap for the given task; for + * /proc/PID/maps that is the heap of the main task. + */ +static inline bool vma_is_initial_heap(const struct vm_area_struct *vma) +{ + return vma->vm_start <= vma->vm_mm->brk && + vma->vm_end >= vma->vm_mm->start_brk; +} + +/* + * Indicate if the VMA is a stack for the given task; for + * /proc/PID/maps that is the stack of the main task. + */ +static inline bool vma_is_initial_stack(const struct vm_area_struct *vma) +{ + /* + * We make no effort to guess what a given thread considers to be + * its "stack". It's not even well-defined for programs written + * languages like Go. + */ + return vma->vm_start <= vma->vm_mm->start_stack && + vma->vm_end >= vma->vm_mm->start_stack; +} + static inline bool vma_is_temporary_stack(struct vm_area_struct *vma) { int maybe_stack = vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP);