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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2F02EEE645C for ; Fri, 15 Sep 2023 13:02:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A00746B0365; Fri, 15 Sep 2023 09:02:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9B0F16B0366; Fri, 15 Sep 2023 09:02:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8A0206B0367; Fri, 15 Sep 2023 09:02:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 770366B0365 for ; Fri, 15 Sep 2023 09:02:50 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 49D41A0332 for ; Fri, 15 Sep 2023 13:02:50 +0000 (UTC) X-FDA: 81238846500.17.C9BA9E3 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf02.hostedemail.com (Postfix) with ESMTP id 68FE58001D for ; Fri, 15 Sep 2023 13:02:47 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=cOwpv+C1; spf=pass (imf02.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1694782967; 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=8bHS8Nm1L36VGlRSDu87qJxdfk+i3aQtvW/QfYsZ1nE=; b=nhhFZUy604e4YM1D3ZFArMgGR9FcPpPVoF45DkybOqhcu9MrsZJvHtaZpIbHXl/RFYi5ob soKT5o87osX16V2z0ZXU96De1/RCVnr5We+cjQKWz3qyr2etkT5+CHp7GK7IGX0QLSpr0l pJvrg8a4jpvSNiWdtNZl8AC8cTZLZQ8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694782967; a=rsa-sha256; cv=none; b=2UOSgOsSxQW3U2cdsT532v0moysuhUzL3l27nNe90x9bbFzx7zEGSfjVRPxDRRC2miL1c3 w5wOg59fvB42N9cp7q2WVgMJ0vWLxEpxM3GBjze4j5rcY/RZa19+FEToLG5srzZJ/RQHql ceVJ3xsVS4WDEpCGw2ivQr7IhgTdLQI= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=cOwpv+C1; spf=pass (imf02.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com; dmarc=pass (policy=none) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1694782966; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=8bHS8Nm1L36VGlRSDu87qJxdfk+i3aQtvW/QfYsZ1nE=; b=cOwpv+C1sVRp9Qxo/BI1knfsU+tNBFv8lKtLmCjJnULxpodcsEQ6r5t9Kmv4Thw8r2ufJE t5KBsZQuziI8gNLHV+R+87zy0OYR3KuMxG0eDK6SldIBJfVIClRH/NEDrExhSk3FPgZ1ez j1vML+t/iy71Cr6oT+QjarAsuXoJ//Q= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-646-D5haY_jWNNmo41bUVAnvJw-1; Fri, 15 Sep 2023 09:02:43 -0400 X-MC-Unique: D5haY_jWNNmo41bUVAnvJw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 74C58858F1D; Fri, 15 Sep 2023 13:02:42 +0000 (UTC) Received: from localhost (unknown [10.72.113.71]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 88AD8170EC; Fri, 15 Sep 2023 13:02:41 +0000 (UTC) Date: Fri, 15 Sep 2023 21:02:37 +0800 From: Baoquan He To: "Uladzislau Rezki (Sony)" Cc: linux-mm@kvack.org, Andrew Morton , LKML , Lorenzo Stoakes , Christoph Hellwig , Matthew Wilcox , "Liam R . Howlett" , Dave Chinner , "Paul E . McKenney" , Joel Fernandes , Oleksiy Avramchenko Subject: Re: [PATCH v2 8/9] mm: vmalloc: Support multiple nodes in vmallocinfo Message-ID: References: <20230829081142.3619-1-urezki@gmail.com> <20230829081142.3619-9-urezki@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230829081142.3619-9-urezki@gmail.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 X-Rspamd-Queue-Id: 68FE58001D X-Rspam-User: X-Stat-Signature: qd3xbt5zpqwcescckuqdtb8e8iuu4b4p X-Rspamd-Server: rspam03 X-HE-Tag: 1694782967-587031 X-HE-Meta: U2FsdGVkX1+5PmJL3Npkqm3okGFQfQraQZ27jSJ5Cmite2r0blVn/mt6kkyBiOMI6rhIfU73JbihxJUb5ZJV5xpJm4F/sXaQsTGT5AONmmCo6uj+Cz2y6m7DlN34Us0LyNENhqw90xQI62s3pQnjy8aD85DP1JlV8tFMcOIM4KdHda6azFW1fdPZUEKKcBbX8p7P1lTqE6cVw4zXaj9DbocfmXaYIz9LHXhpUm+cKas11x90Vez869GHAzmrPhanGRKM5PruIE3mqpNTj07QVoufrgGacqSb2/tA538lHjYjoYkcnBBRZbYfezLkbPm4ZOI/lDIw9xmDwDemugreR9dpiJiAiNhMlYwjVMd2JzM0oAuokkijX4d14YFHu9CEKNc+MhHt/gTKQowrVq0EeZO2+l3Lof/cXsMLhBtxwt3srhP5kD2lhyoe3Fsja9yYzuhgOTe7ZZ9qH8DgD1s1ugxqot+G/DDORPJXkhPnpFfLSzyl2GiNE5WSA6jX8FrLsns6vpk9EYBP7wOnOs6ir0jLoatGB0o4h+in9TbPJ+zGHGni6z3/+MdmeTDNbYCaCuiDcGuI9C2oQfd7zfWN4V/SmS+KlcGyrTNtMEtLJruDR4c8YwjbyGkbD2C5Vt7aSSo8dKGOy9chkyf0W+yrbk7V41osAhl8M3RZPBcfN869pEamF5leRQ0O8vPdJ9qMK6e+sb6WvDMNNPAiHaAu7+BwgCsWfIDWm4ezXutEQrof5651aqQIL/zMtljZiNUnHmAuTQ91I5YqL8GzOuUvr7XE7cW03JH7euKlFo52zEV1Zco78uHg6mUCkar9oFHY3OV4/YJx+PfCMIRGVZ4PMSalPFxoxX5ia18AYwRGDtpH58K1ck9p3Sj6BSKruxP3W/HbXVKqIaXTpCRuLXzYJZnwJpPFN9imCUcw46iU16CJDFWv9odyRcPEHPI3e12XnZFF2N25kdRtIRfaiHa OIHLNUt/ j+qJonBSGvS39/l6N8pHx9l23oQsi46F1+S0PXgDVDza1u/jeqx3YQqdpArhCeL99F/NhWQlbhREtpMUmwO1FQ2Qvn2McgA1IjTwinYtEeF6uh7UN3klgvscLT4DKrM/U/cAPTY8s9fio5UG1oi7xqYVZUzlsyh7lxwC/rg6fYoGVwjKU/T4q4wM6v714LnRviyooEvrUcSD1Rv+nzoqNNyg1JZfBY1Rga6dGuEjMT9O2VDGVhcdHb7yQ7g== 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: On 08/29/23 at 10:11am, Uladzislau Rezki (Sony) wrote: > Allocated areas are spread among nodes, it implies that > the scanning has to be performed individually of each node > in order to dump all existing VAs. > > Signed-off-by: Uladzislau Rezki (Sony) > --- > mm/vmalloc.c | 120 ++++++++++++++++++++------------------------------- > 1 file changed, 47 insertions(+), 73 deletions(-) LGTM, Reviewed-by: Baoquan He > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 968144c16237..9cce012aecdb 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -4636,30 +4636,6 @@ bool vmalloc_dump_obj(void *object) > #endif > > #ifdef CONFIG_PROC_FS > -static void *s_start(struct seq_file *m, loff_t *pos) > -{ > - struct vmap_node *vn = addr_to_node(0); > - > - mutex_lock(&vmap_purge_lock); > - spin_lock(&vn->busy.lock); > - > - return seq_list_start(&vn->busy.head, *pos); > -} > - > -static void *s_next(struct seq_file *m, void *p, loff_t *pos) > -{ > - struct vmap_node *vn = addr_to_node(0); > - return seq_list_next(p, &vn->busy.head, pos); > -} > - > -static void s_stop(struct seq_file *m, void *p) > -{ > - struct vmap_node *vn = addr_to_node(0); > - > - spin_unlock(&vn->busy.lock); > - mutex_unlock(&vmap_purge_lock); > -} > - > static void show_numa_info(struct seq_file *m, struct vm_struct *v) > { > if (IS_ENABLED(CONFIG_NUMA)) { > @@ -4703,84 +4679,82 @@ static void show_purge_info(struct seq_file *m) > } > } > > -static int s_show(struct seq_file *m, void *p) > +static int vmalloc_info_show(struct seq_file *m, void *p) > { > struct vmap_node *vn; > struct vmap_area *va; > struct vm_struct *v; > + int i; > > - vn = addr_to_node(0); > - va = list_entry(p, struct vmap_area, list); > + for (i = 0; i < nr_nodes; i++) { > + vn = &nodes[i]; > > - if (!va->vm) { > - if (va->flags & VMAP_RAM) > - seq_printf(m, "0x%pK-0x%pK %7ld vm_map_ram\n", > - (void *)va->va_start, (void *)va->va_end, > - va->va_end - va->va_start); > + spin_lock(&vn->busy.lock); > + list_for_each_entry(va, &vn->busy.head, list) { > + if (!va->vm) { > + if (va->flags & VMAP_RAM) > + seq_printf(m, "0x%pK-0x%pK %7ld vm_map_ram\n", > + (void *)va->va_start, (void *)va->va_end, > + va->va_end - va->va_start); > > - goto final; > - } > + continue; > + } > > - v = va->vm; > + v = va->vm; > > - seq_printf(m, "0x%pK-0x%pK %7ld", > - v->addr, v->addr + v->size, v->size); > + seq_printf(m, "0x%pK-0x%pK %7ld", > + v->addr, v->addr + v->size, v->size); > > - if (v->caller) > - seq_printf(m, " %pS", v->caller); > + if (v->caller) > + seq_printf(m, " %pS", v->caller); > > - if (v->nr_pages) > - seq_printf(m, " pages=%d", v->nr_pages); > + if (v->nr_pages) > + seq_printf(m, " pages=%d", v->nr_pages); > > - if (v->phys_addr) > - seq_printf(m, " phys=%pa", &v->phys_addr); > + if (v->phys_addr) > + seq_printf(m, " phys=%pa", &v->phys_addr); > > - if (v->flags & VM_IOREMAP) > - seq_puts(m, " ioremap"); > + if (v->flags & VM_IOREMAP) > + seq_puts(m, " ioremap"); > > - if (v->flags & VM_ALLOC) > - seq_puts(m, " vmalloc"); > + if (v->flags & VM_ALLOC) > + seq_puts(m, " vmalloc"); > > - if (v->flags & VM_MAP) > - seq_puts(m, " vmap"); > + if (v->flags & VM_MAP) > + seq_puts(m, " vmap"); > > - if (v->flags & VM_USERMAP) > - seq_puts(m, " user"); > + if (v->flags & VM_USERMAP) > + seq_puts(m, " user"); > > - if (v->flags & VM_DMA_COHERENT) > - seq_puts(m, " dma-coherent"); > + if (v->flags & VM_DMA_COHERENT) > + seq_puts(m, " dma-coherent"); > > - if (is_vmalloc_addr(v->pages)) > - seq_puts(m, " vpages"); > + if (is_vmalloc_addr(v->pages)) > + seq_puts(m, " vpages"); > > - show_numa_info(m, v); > - seq_putc(m, '\n'); > + show_numa_info(m, v); > + seq_putc(m, '\n'); > + } > + spin_unlock(&vn->busy.lock); > + } > > /* > * As a final step, dump "unpurged" areas. > */ > -final: > - if (list_is_last(&va->list, &vn->busy.head)) > - show_purge_info(m); > - > + show_purge_info(m); > return 0; > } > > -static const struct seq_operations vmalloc_op = { > - .start = s_start, > - .next = s_next, > - .stop = s_stop, > - .show = s_show, > -}; > - > static int __init proc_vmalloc_init(void) > { > + void *priv_data = NULL; > + > if (IS_ENABLED(CONFIG_NUMA)) > - proc_create_seq_private("vmallocinfo", 0400, NULL, > - &vmalloc_op, > - nr_node_ids * sizeof(unsigned int), NULL); > - else > - proc_create_seq("vmallocinfo", 0400, NULL, &vmalloc_op); > + priv_data = kmalloc(nr_node_ids * sizeof(unsigned int), GFP_KERNEL); > + > + proc_create_single_data("vmallocinfo", > + 0400, NULL, vmalloc_info_show, priv_data); > + > return 0; > } > module_init(proc_vmalloc_init); > -- > 2.30.2 >