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 AC7CAEE7FF4 for ; Mon, 11 Sep 2023 03:58:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F36F06B0165; Sun, 10 Sep 2023 23:58:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EE6536B0166; Sun, 10 Sep 2023 23:58:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DD5476B0167; Sun, 10 Sep 2023 23:58:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id CDF026B0165 for ; Sun, 10 Sep 2023 23:58:26 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id BE466160842 for ; Mon, 11 Sep 2023 03:58:25 +0000 (UTC) X-FDA: 81222959370.03.3B46673 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf28.hostedemail.com (Postfix) with ESMTP id DDC57C0015 for ; Mon, 11 Sep 2023 03:58:23 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=YLhV1KX3; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf28.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1694404704; 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=HBHlcKoN3c5yczq5rx1M3pZOqy+cae4xcEc6Zh1bvkI=; b=xIg44/QHDKnt1XRCTwoAzGOiu404mxJkWi5bjgAwciiX/4cIq1aSZWRYewITjnO8ZlDYHs fxHu5qaS1rLLJwL8hnSXUzDpP5BhEDf+zlzbasm2aFQVS3sesOuOrzzxdejNzYJXV+uOPC xPHCCLvucfVoDbPsT2ge476dgxO2oao= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=YLhV1KX3; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf28.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694404704; a=rsa-sha256; cv=none; b=QXIAEC0aDkZY3FXuXmA0tuiJKqDYwOprnSobYQ3NudQOxmzqBvhzFQianK7oabBeVVS/hI /Ns71IwaAkVpu3/GU0NkBUj48YM/i2fkc84D9To1AWJIQuPbJgh2JxNvuQM+xA5BJ+EzYB PfjqTfo5JTklOE5DrqkIGT0HEm507JA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1694404703; 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=HBHlcKoN3c5yczq5rx1M3pZOqy+cae4xcEc6Zh1bvkI=; b=YLhV1KX3AeepOuRydqycSC0sd+8J8fChb3+w/mzkVLfFqEifWsm2zJxg2nY5ytRbac+sl+ 0pDNIrn3cKtYKIsmJQvGwOkeTlGMcaa97lfloTZADX6pLIdBgRFpTcJbLuWo1MtlwN0gbC Wv2CPV8CQwxlDGQDHYFxIy5BTezujIg= 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-576-gjf6X0SpO_-4nlawRMxxkQ-1; Sun, 10 Sep 2023 23:58:18 -0400 X-MC-Unique: gjf6X0SpO_-4nlawRMxxkQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (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 9E431944DC2; Mon, 11 Sep 2023 03:58:17 +0000 (UTC) Received: from localhost (unknown [10.72.112.35]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DC347403F4F6; Mon, 11 Sep 2023 03:58:16 +0000 (UTC) Date: Mon, 11 Sep 2023 11:58:13 +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 7/9] mm: vmalloc: Support multiple nodes in vread_iter Message-ID: References: <20230829081142.3619-1-urezki@gmail.com> <20230829081142.3619-8-urezki@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230829081142.3619-8-urezki@gmail.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Rspamd-Queue-Id: DDC57C0015 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: noycok76ei1dbsqatw5xn9zq1bywify7 X-HE-Tag: 1694404703-245288 X-HE-Meta: U2FsdGVkX18rnh1rjsy7io35oTCB2SA3/KNKLt/ZH2ctHApUDi6vC7xAImHaO6SMKNZrFo9u2GvVkCdQ0X3x9Tsupt9UM9ZvQZ9kLGRHIHk51dBxGChIcuXa/GmZJolQPb9mlaMmDhjuDAXSNdUEInxQH+Ybd/j2Apv/f3pvOGytvGDKEQH8pkNqTHafK2BBBl49apTl21Vpt1JlZGHG3s99pdTm4YMw3viupbHHArmV+UF9Q8DXkTXky37h1Ji5poJko9lmD/Q7+8Q3nlS8cx/G1x6oqR2qH3YRfuNDc6EMQ2aaoaZS44Wn6j+DBWMfuvJV3XqS5cVBzOnCuf1b6l5B4hAqU6EM0m1kRdx/Awb3iBSqgvKSSR/7xqEC4fAczv0lckkQI3o4R5f7QmjOhPdvy8ZDZlrQN+7Dz+wXIkiNNyifPbVXtSrDuT1KvYiR8/5jHF5h8tR0cOH6mJ6SoSMWfGlFsJwsyXPJMtpXxVHKxt3aRLhdAfaik5e6hOCPYP3F2LoEdinl+MqBfXlxq5hNypkdpqA/OFgza5GGH4WRxryz7le7fMiSftbxzf6BqE5PHpsBBq7g5a1oSqnwHCkOvofTuso9yBSzqK+BLc2L7M7NS1kQrdgI4/sRTC1YieHIiKFpKwK8WiTXaKXVDA/VVGiZDi9vD9bFKtO57B5AZlTbYxI9yev1tNVp3QJE8RoZLnR3ocxBY8NpEEv7VCuN4Gfex5gfQ4FnUSzUqkhFfdUnQnsirj3XcPmvBWm+bIbJ/33cpFzn1++28mSD27TypEB2u6132paJRbJGkh0xsRC80UkPN8xS1fDtilEVdeK+XBjvItIQDCIAynG8/YWpAMeQKhiiS6WDs80FWLtql1WF0g+tb8VWVNXTdZ75w7/RvRoyg75k5kp/0UtdnCY2aRd+DzBZ7GjJOvqvUPjPYgT90+uOS4LUD73Js9ddXJm4XTisKLtjbwHYRdf gmDYY/Fv igTL15+RHZc7Xqdc8gnAc3SWYR3nJQFrvcKaroNLoVKN+Dm7fFzGulC2431FH0mi8OtJzjgTd5wWo3wh0URPFAwciI0ooCcDFJu3XVQFYX1h/GLk79kYqd/zSKxt0YGm3vtYyWVC2vF0MXS6x25ES4PkH9MfBlqR0dA+U1x2TW/Q52VlTcl7Y6QkD4Axm12d2bcz7NybyjMnlHhJ8SlGOadFqBgsxOjTeYU1uVs4+XTGuxxFI6DKR6sD4CIiV7AFwp03awXcn7cSKeY+0yTtAm8zcdORTRzD+ONQBOe1b47a/TQ4= 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: > Extend the vread_iter() to be able to perform a sequential > reading of VAs which are spread among multiple nodes. So a > data read over the /dev/kmem correctly reflects a vmalloc > memory layout. > > Signed-off-by: Uladzislau Rezki (Sony) > --- > mm/vmalloc.c | 67 +++++++++++++++++++++++++++++++++++++++++----------- > 1 file changed, 53 insertions(+), 14 deletions(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 4fd4915c532d..968144c16237 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c ...... > @@ -4057,19 +4093,15 @@ long vread_iter(struct iov_iter *iter, const char *addr, size_t count) > > remains = count; > > - /* Hooked to node_0 so far. */ > - vn = addr_to_node(0); > - spin_lock(&vn->busy.lock); This could change the vread behaviour a little bit. Before, once we take vmap_area_lock, the vread will read out the content of snapshot at the moment. Now, reading out in one node's tree won't disrupt other nodes' tree accessing. Not sure if this matters when people need access /proc/kcore, e.g dynamic debugging. And, the reading will be a little slower because each va finding need iterate all vmap_nodes[]. Otherwise, the patch itself looks good to me. Reviewed-by: Baoquan He > - > - va = find_vmap_area_exceed_addr((unsigned long)addr, &vn->busy.root); > - if (!va) > + vn = find_vmap_area_exceed_addr_lock((unsigned long) addr, &va); > + if (!vn) > goto finished_zero; > > /* no intersects with alive vmap_area */ > if ((unsigned long)addr + remains <= va->va_start) > goto finished_zero; > > - list_for_each_entry_from(va, &vn->busy.head, list) { > + do { > size_t copied; > > if (remains == 0) > @@ -4084,10 +4116,10 @@ long vread_iter(struct iov_iter *iter, const char *addr, size_t count) > WARN_ON(flags == VMAP_BLOCK); > > if (!vm && !flags) > - continue; > + goto next_va; > > if (vm && (vm->flags & VM_UNINITIALIZED)) > - continue; > + goto next_va; > > /* Pair with smp_wmb() in clear_vm_uninitialized_flag() */ > smp_rmb(); > @@ -4096,7 +4128,7 @@ long vread_iter(struct iov_iter *iter, const char *addr, size_t count) > size = vm ? get_vm_area_size(vm) : va_size(va); > > if (addr >= vaddr + size) > - continue; > + goto next_va; > > if (addr < vaddr) { > size_t to_zero = min_t(size_t, vaddr - addr, remains); > @@ -4125,15 +4157,22 @@ long vread_iter(struct iov_iter *iter, const char *addr, size_t count) > > if (copied != n) > goto finished; > - } > + > + next_va: > + next = va->va_end; > + spin_unlock(&vn->busy.lock); > + } while ((vn = find_vmap_area_exceed_addr_lock(next, &va))); > > finished_zero: > - spin_unlock(&vn->busy.lock); > + if (vn) > + spin_unlock(&vn->busy.lock); > + > /* zero-fill memory holes */ > return count - remains + zero_iter(iter, remains); > finished: > /* Nothing remains, or We couldn't copy/zero everything. */ > - spin_unlock(&vn->busy.lock); > + if (vn) > + spin_unlock(&vn->busy.lock); > > return count - remains; > } > -- > 2.30.2 >