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 BB4FFC83F1B for ; Wed, 16 Jul 2025 17:36:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4AE078D0002; Wed, 16 Jul 2025 13:36:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 485AF8D0001; Wed, 16 Jul 2025 13:36:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3C2468D0002; Wed, 16 Jul 2025 13:36:46 -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 2D4258D0001 for ; Wed, 16 Jul 2025 13:36:46 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 747E1B9B17 for ; Wed, 16 Jul 2025 17:36:45 +0000 (UTC) X-FDA: 83670832770.28.14C3F8C Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf27.hostedemail.com (Postfix) with ESMTP id 222B94000D for ; Wed, 16 Jul 2025 17:36:42 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=jTobFrvJ; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf27.hostedemail.com: domain of luizcap@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=luizcap@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752687403; 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:dkim-signature; bh=TtR1aatzbtQ5lskqHrgYtiRweRhyZx8oW0GotUtgZsc=; b=BScnEnox5oid7AR0KzFa5AiNdo8g3FkuEjR6PGxR+ZA6jUiyCrvUlRrEahB8LIO825Zkfq OGwI3z1qQ4kNpIXyjEvdjie4T0P/eoFM0ugUBKEqyqMBMKpZrTuR7pY5aIfx7NT4YM1/nP fEZZGo2fLBqTGX+g25lm/c3VlnEYdR8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752687403; a=rsa-sha256; cv=none; b=WF1PPKYCUe5ZKiU9menjn3tLA0f/nrDDsZc+sjqU7FFBUM6QN4QHjA66tXRDvS+clCRULe tXFE+tVobVxNdwZ49wsIX6sPgAb7fRx+UK45WHPURKT3XFJv/VndmwCYnQO2bYu6V+4xEn WEBQ2Jsy1ZMLJ4lCe9ynsusyFdpXgBQ= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=jTobFrvJ; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf27.hostedemail.com: domain of luizcap@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=luizcap@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1752687402; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TtR1aatzbtQ5lskqHrgYtiRweRhyZx8oW0GotUtgZsc=; b=jTobFrvJPnzFnFK6TaGeifkzc9zb+qGnsNxECfd1tcN8+ZnAzX/oYwccvnTy1tBr1A6r0I iKuLwgeTnUXsfKpTx3XTanRTjQRXSN/td63/H+hyENfLcG+AdTu1MESdkwizAgTa+hqEP4 OPtNMXb8eYuWZMtI6XtnjKLewaMrA6A= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-561-cw7iosshOc6Ycq0FB8YIWw-1; Wed, 16 Jul 2025 13:36:41 -0400 X-MC-Unique: cw7iosshOc6Ycq0FB8YIWw-1 X-Mimecast-MFC-AGG-ID: cw7iosshOc6Ycq0FB8YIWw_1752687400 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7e338e627f1so21469785a.0 for ; Wed, 16 Jul 2025 10:36:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752687400; x=1753292200; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=TtR1aatzbtQ5lskqHrgYtiRweRhyZx8oW0GotUtgZsc=; b=jhpT4VOl2tP3k0m2q/lETcpy4u6r5RK7sNOCYj6lxMdd9nntY1INvjvBKkCtPSFwIP YF/KddA/AnYwDmv+ABFpIgUn76Cjni/POUhM5JXmYxfoLSaiWQIr4REVcI3dgg7b80SV 8vRTzB/AJhpyKJbrlKHVmpNo6W0K5UtTj/KPr1kMLxHUSQi9g4omh+TVqy0M+GB8/aq0 FB8R2CU8+EE9knFgjNi+t/WzBbORNjjmwg0FZRP1deM9i6bqskfzhJUPljuheSYEIoMo Q+cWMNwo0sfyOV7Klkjjt9R/yxh8/v+WM5xP67QmGVhu/yDitn2oh28/Ft/zC2VoIe6R yxLQ== X-Forwarded-Encrypted: i=1; AJvYcCVw/U7vqPT09mO4EdpYpT593He1X6LECJY/wGDhMVdwYLOJkeaEu5y0mvczQyuAHKU6zzCENAavOg==@kvack.org X-Gm-Message-State: AOJu0Yw0zoHYMeqWkToaegxmc5YdzKxrANO9G4dL73FCtgj9ZCaKNYai p0LUKwzFayJdQnbJbwhbEGQdQ/LLp3N3DAJic6qJ2LF8gr8FFXpzemFKQV402favRkQM/PciBpF FCZ6xDPTot57FpYXJ1hR6nh9nEcfTcvBFK8GaXTJ2fr7Xsl/HJ76b X-Gm-Gg: ASbGncvAZiWYVV5S1JvDfnYCLIfqXkjJ+1bm7Jvc0FSGkqoAub72bu+ISptTldDN34h ebkjSV2RUYUvTmWFHO3k0PmCu1NuKxnRNZPlbQL6kfo/SVsBJUQeGEXXx9D5Ys8f7XXcfqp1ZlE 9QYAhc2x6irxKqYmzgQyMXW/eo0YfP072rMHlJ3cKeSxbBQXqOcyilpPL70KFugO/AWSK9rdU7o sJEJh4piyDkO/B+vjbkj/HPHs00Se/CqZ8kAF0KvVtbGLu3yLcp7y4HBLwYnOtjMDS+rPhZND0G ZseOUqVLCHU68FDPqfx88S3AeJEw9MVQzBpcsH9l X-Received: by 2002:a05:620a:394a:b0:7e1:f16c:16d6 with SMTP id af79cd13be357-7e342a6299fmr581667985a.8.1752687400251; Wed, 16 Jul 2025 10:36:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IELv/kV+iJPcIdqfWF4DteQ0Nc4eWrTc1AcTHSF0tcLeAByLigE6eo60muIAn3RRRBcBXHMTQ== X-Received: by 2002:a05:620a:394a:b0:7e1:f16c:16d6 with SMTP id af79cd13be357-7e342a6299fmr581662485a.8.1752687399636; Wed, 16 Jul 2025 10:36:39 -0700 (PDT) Received: from [192.168.2.110] ([70.29.229.84]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7e345a80685sm102004985a.105.2025.07.16.10.36.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 16 Jul 2025 10:36:39 -0700 (PDT) Message-ID: <900252c7-b16c-49b9-8c01-60e6a7a48683@redhat.com> Date: Wed, 16 Jul 2025 13:36:28 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 2/4] mm/util: introduce snapshot_page() To: David Hildenbrand , willy@infradead.org, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, shivankg@amd.com, sj@kernel.org, harry.yoo@oracle.com References: <637a03a05cb2e3df88f84ff9e9f9642374ef813a.1752499009.git.luizcap@redhat.com> From: Luiz Capitulino In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ObyMq6ZVlHyMYzzd274eoNyAUqidlSYc9DlWuYZuCDo_1752687400 X-Mimecast-Originator: redhat.com Content-Language: en-US, en-CA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Stat-Signature: 1up4n4gqztrrmgtuqsf1z4utjonjoumt X-Rspamd-Queue-Id: 222B94000D X-Rspamd-Server: rspam10 X-Rspam-User: X-HE-Tag: 1752687402-119308 X-HE-Meta: U2FsdGVkX18QpILF7CBZY41sXUh2DsWGbOVhNiqrSiHNkloNU4q6mi8LXc8Ek7lWOfm9Ukugv8rXVZS+0nW29Hi+OFaWbuYD21hio3JkdxtAp4qWCgC7VcaKLEPHY4yo6DBfCmKOdOg9m3fOE9kTD2HItEY3BxZ5UBdeLvdP+cBftL9HNgo5FpK/IZewS0XTAB6QSvTuRvAX91wh0fRMW6KwCl5/27M0auNwnTlmmZQN1squkD70iFh7KG9j1aQfTo7ZFicGUtAlyZ6aBtfk4UglqtngqIok7NuAzqE8GyuIy177c2hSEs09W+D6mol4oMrSPFJrBO23MNrLPgyjGN6Ke7dt9Ily4GNIeIgg57ZHMqp/8h7j3rJ+LdXpOKfJdCx0tNmp/94wSN/ttdZh/kpU+IFNW5Qi2fctqaPXZZ/B1yt9Twv+Lyy9/GFnOJRAI4FIAMNUPJpNV52jzABAlm9ia/32LlTop8JuiF4bO0T/SJhnKdk/xGhW9e7f5+iFKIx0o/Z4PmbvupKKh2/3sZhDZfclb65PWsulQguiZuU15BUSLJtI+sNDePdAbW6NBg5aP2leZGeBodUoJq+4DFj/z3SAGtlJiZgyertwF0mkaWOUuJVB4xV+CwIJKgULLrZmIXuR/saH7WgxsBx69CeOMhc6dhjvLZIOiGn9d3HHS5iqlZCH0UqBXik50C0mw+EG9/HeND9sj7sY1UxXlqLv5iSd5+Qg4Opt3fcR18FbPbl1X78SCNbRXxMDg54NJWZ9qkoMov5Yn50IAny+YO2S+T4PZlN/WpiJuYuqRwLNCluV/C8h+8UlSWH63HByL2i3yAeqNRIzEbUlipgDPpHk6ABvTgTL2yZIUTpYEm6sZQeXmNFWzc2LolpYb0uJ6VK4nLzqcw1l6oUvopHPDdFSIKZ9aGa/Iqq4aPi3t4CwvbYdEWvm2NI65BNs6p5L7eQYPyCGNrg4KVlRI7T kqZOB2qJ j14pS9JegOozVcO7XhnlK+C8oZeR6pStbSnH0VroMLS8h3BRYmhRhe1ml82McdFDEoJgLEAMjXVZV1DCD6Fafd2F+wkYy6KPUZSwMF55VQZCVHaXPUkNvfgBCDzls4zq19vFkv2Cv+uFR6106NYfv3pWiTgyvQ12CW6U0pD6bMtNVGwr1907oMsS+CGclYUG14XrjcaZFloCoaXaNhARPI5h+CNvbY/3qeP54lVfgstNzx0UcZMXIb7jfjmUgXmStDrn3anPMKF1PY+dNm76zyTv9ptLOBf3ZbmicgXDvCC+W9/T5wuMGf72SqaRVlcANP6pKlR/ALjAdrRsXNwNuHjzX/a7UHk3GRFdvJ1246zg+h7hg5oEhhuC0rS290ZIKCMHQK1ZTzpljQv2GjnioDjgjuKWUpuSh1P99EVVWCg1qBgx39qHkmhCc18/ESlzAKPhF1C1irHihto0HWTNm6CEhfT6fHSjcg/JFrhDBToWEZSOBdGfEVN71gJduSGX269rAF6oFz4T4k5UcVRtqXO1c0vJN6KYpGMusHGuWBo9IjMRFDiUT/P6XahaUwwKyXNiOTiGq5JMmyOMWbT4v5aj+CMPkOC7wf18UeBksQK7ZSCg= 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: List-Subscribe: List-Unsubscribe: On 2025-07-16 06:16, David Hildenbrand wrote: > [...] > >> -dump: >> - __dump_folio(foliop, &precise, pfn, idx); >> + __dump_folio(&ps.folio_snapshot, &ps.page_snapshot, ps.pfn, ps.idx); > > Nit that can be cleaned up later on top: > > We should probably call this > > __dump_page_snapshot() and then just pass ... the page_snapshot. > >> } >> void dump_page(const struct page *page, const char *reason) >> diff --git a/mm/util.c b/mm/util.c >> index 0b270c43d7d1..f270bf42465b 100644 >> --- a/mm/util.c >> +++ b/mm/util.c >> @@ -25,6 +25,7 @@ >> #include >> #include >> #include >> +#include >> #include >> @@ -1171,3 +1172,81 @@ int compat_vma_mmap_prepare(struct file *file, struct vm_area_struct *vma) >> return 0; >> } >> EXPORT_SYMBOL(compat_vma_mmap_prepare); >> + >> +static void set_ps_flags(struct page_snapshot *ps, const struct folio *folio, >> + const struct page *page) >> +{ >> + /* >> + * Only the first page of a high-order buddy page has PageBuddy() set. >> + * So we have to check manually whether this page is part of a high- >> + * order buddy page. >> + */ >> + if (PageBuddy(page)) >> + ps->flags |= PAGE_SNAPSHOT_PG_BUDDY; >> + else if (page_count(page) == 0 && is_free_buddy_page(page)) >> + ps->flags |= PAGE_SNAPSHOT_PG_BUDDY; >> + >> + if (folio_test_idle(folio)) >> + ps->flags |= PAGE_SNAPSHOT_PG_IDLE; >> +} >> + >> +/** >> + * snapshot_page() - Create a snapshot of a struct page >> + * @ps: Pointer to a struct page_snapshot to store the page snapshot >> + * @page: The page to snapshot >> + * >> + * Create a snapshot of the page and store both its struct page and struct >> + * folio representations in @ps. >> + * >> + * Note that creating a faithful snapshot may fail if the compound > > Maybe highlight that this is not really expected to happen, ever. > >> + * state of the page keeps changing (e.g., due to a folio split). In >> + * this case, ps->faithful is set to false, and the snapshot assumes > > There is no ps->faithful. Yes, good catch. This was from an earlier version. Is it fine if I fix only this with a follow up patch for Andrew in this thread or would you prefer that I post v4 with all the other changes as well? > >> + * that @page refers to a single page. >> + */ >> +void snapshot_page(struct page_snapshot *ps, const struct page *page) >> +{ >> + unsigned long head, nr_pages = 1; >> + struct folio *foliop; >> + int loops = 5; >> + >> + ps->pfn = page_to_pfn(page); >> + ps->flags = PAGE_SNAPSHOT_FAITHFUL; >> + >> +again: >> + memset(&ps->folio_snapshot, 0, sizeof(struct folio)); >> + memcpy(&ps->page_snapshot, page, sizeof(*page)); >> + head = ps->page_snapshot.compound_head; >> + if ((head & 1) == 0) { >> + ps->idx = 0; >> + foliop = (struct folio *)&ps->page_snapshot; >> + if (!folio_test_large(foliop)) { >> + set_ps_flags(ps, page_folio(page), page); >> + memcpy(&ps->folio_snapshot, foliop, >> + sizeof(struct page)); >> + return; >> + } >> + foliop = (struct folio *)page; >> + } else { >> + foliop = (struct folio *)(head - 1); >> + ps->idx = folio_page_idx(foliop, page); >> + } > > Condition could be cleaned up by reversing both things > > if (head & 1) { > /* Tail page, lookup the actual head. */ > foliop = (struct folio *)(head - 1); > ps->idx = folio_page_idx(foliop, page); > } else > ... > } > > But you're just moving that code, so no need to do that now. > > > I think we could improve some of that in the future a bit to > make it even more faithful. > > But for now this should be just fine. > > Acked-by: David Hildenbrand >