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 C3CE4C0219B for ; Tue, 11 Feb 2025 16:00:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3CB576B0093; Tue, 11 Feb 2025 11:00:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 37B736B0095; Tue, 11 Feb 2025 11:00:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 24334280001; Tue, 11 Feb 2025 11:00:16 -0500 (EST) 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 086FE6B0093 for ; Tue, 11 Feb 2025 11:00:16 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 4C9A880464 for ; Tue, 11 Feb 2025 16:00:15 +0000 (UTC) X-FDA: 83108125590.17.2006229 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf25.hostedemail.com (Postfix) with ESMTP id 5B168A001A for ; Tue, 11 Feb 2025 16:00:12 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=Cc58YWv9; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf25.hostedemail.com: domain of luizcap@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=luizcap@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739289612; a=rsa-sha256; cv=none; b=DexYQkAEE/MKb1APb3I5A798+0423Rz4RUlFnuY8I4KdD/X2iMRSOMpkqHDt1yTv75GeR3 +mq75ZSG6FvyZ4Kd76uaIzVIuvSJb5mwX86fNgSpGBEP4klL6/Nwc0fd0etcu9R36G9TSy 9hFYshYNd1+WrNluiZw2Ogb8Yi1haAQ= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=Cc58YWv9; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf25.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=1739289612; 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=5eR6z51HlTDrGEEKuRBQbK6HD1KiQiTJqr1uKdaTpVc=; b=bPuJiTTX9WNXNVOpSn0JiXoYuNoB04A+pF09BYieQLD9NB1Jx6XgsS5g1fmUsXViVdphDT NIdIGttBM9UVnxWcdE9o7i3x+6FPTJQ84S6ft/FovonRytP+TwjnALFXxaOqrxc1IyrtVh d+FwdEUgVz/gZxgCkgWAP6e/O+lWw6g= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739289611; 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=5eR6z51HlTDrGEEKuRBQbK6HD1KiQiTJqr1uKdaTpVc=; b=Cc58YWv9SwUCn9sWLvrrLCsGAyRIa/6tikcTEQfX+jSxN5AI/VWa1Zlc9lTSi5vHGgSf2E 1pJkd3DbrEtTpidL2vea8TP8cqd7JptXtmWRxjHItux6xS+C9wAD5m9zTVKZpDQtAqNJrS vFLzci6YuufAYWixGGSxfK+JNw1nRDU= Received: from mail-oo1-f71.google.com (mail-oo1-f71.google.com [209.85.161.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-649-z8Gdm2G6OmSD6y-wjL02YQ-1; Tue, 11 Feb 2025 11:00:10 -0500 X-MC-Unique: z8Gdm2G6OmSD6y-wjL02YQ-1 X-Mimecast-MFC-AGG-ID: z8Gdm2G6OmSD6y-wjL02YQ Received: by mail-oo1-f71.google.com with SMTP id 006d021491bc7-5f6e3f02e27so1468585eaf.3 for ; Tue, 11 Feb 2025 08:00:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739289609; x=1739894409; 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=5eR6z51HlTDrGEEKuRBQbK6HD1KiQiTJqr1uKdaTpVc=; b=YVcRwlkQY8wXlzTIIZINnkEeOJTbo92MoNreF/VV/JNwjohBnFEffSRyl6TAHERBj2 niuxW73mlgNumbq6fVQQCQh8rBt3+9SjKaDsVR0tpeN5UxglNUNnAkmOaeYoB/QzIOVm +S+LAMFE9loT7y7R9MF+g2lBuQdv6jxfm403AKhOcTVNNCAS4qsfWDLIXzeKDcMZE660 jcdnsxwcWM6rz++Mwyjw+tulCJz7npA0cLH/W5F0EJiNsNWHize/iPWk2M6d0kl5w6db JPEk8q9jw5B1L6x3GjI8zPA3mX7arC+GAxSxid9OVxS6HoXTIxyyOJfB8aJAXePnJ3/w 7Uvw== X-Forwarded-Encrypted: i=1; AJvYcCUqswQd+aSdzJvfW/1nSmNF2wXQhG6877F/cYzXPtsvHqCjO5gHxKdpoJ/EzpX5LAbgWM4dd8+Dww==@kvack.org X-Gm-Message-State: AOJu0YzvO/i0l41yLamRiTf2tallUVkQA1zZiiTCx42BcPePryDxHewx 3jRjaCJuaiu9ABOb8pXA+CrT3RgI4oeFJxM/LPvolX9PhIeeuqaatW37mVG0fjd5erc0Y1LwDfy sNo3LsieFeQCf9Il0aZdpJKEUmxQwg7pf9FI0tpCvh7YIl/Ad X-Gm-Gg: ASbGncvmuYnhx4p6KiI3eqPjCMyIWox8QOxV7qmBwKpPviVgPPIjbwEXSIowM8PHui7 jDrNlEtdz8b93UJrfSkC0UTWH0kJ4YHpSdGfhRYn6mNB3dR6A4DgfdeF3Ss0qog8tX5g5gYD51P W4JDygLjPKVPOoiYOEdyRYUL81nEP9LlyUXLqnHEuPG8GBnZTuZGKWrApj20hmLZFtG8wG6efyW CYZA7B6kYp16OlxTYB4il8WUxsUilZmbUkM2lb0NJs+jd2+ms0Q4DDKS9FuPHwm/joZWnmOJgcx FyFIDnAqx7YzJQdSdnh/vfKJ7v6nmDaIGjo8z3WmPdwD+/0m1c5MnCOepaK+Ct8KuA== X-Received: by 2002:a05:6820:1787:b0:5fc:9430:d747 with SMTP id 006d021491bc7-5fc9430de7emr3490644eaf.1.1739289609513; Tue, 11 Feb 2025 08:00:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IHagic0XDZbhexruw22NPZAkw8lVjDiuwAmK8Si9PD1YR5NxKNSbr/M2JN0NAY4DO07y3JDlw== X-Received: by 2002:a05:6820:1787:b0:5fc:9430:d747 with SMTP id 006d021491bc7-5fc9430de7emr3490615eaf.1.1739289609213; Tue, 11 Feb 2025 08:00:09 -0800 (PST) Received: from [192.168.2.110] (bras-base-aylmpq0104w-grc-14-70-52-22-87.dsl.bell.ca. [70.52.22.87]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-5fc7d808b03sm1807135eaf.24.2025.02.11.08.00.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 11 Feb 2025 08:00:08 -0800 (PST) Message-ID: <4bf1321d-ca18-43d5-9d6a-1b2625be6107@redhat.com> Date: Tue, 11 Feb 2025 11:00:07 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC 2/4] mm: page_owner: use new iteration API To: David Hildenbrand , linux-kernel@vger.kernel.org, linux-mm@kvack.org, yuzhao@google.com Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, muchun.song@linux.dev, lcapitulino@gmail.com References: <712c1e058c58ba0d4c407089fbcc45c55ceb8efc.1737754625.git.luizcap@redhat.com> <40036244-644a-42e0-a5e4-4838a98b1cbc@redhat.com> From: Luiz Capitulino In-Reply-To: <40036244-644a-42e0-a5e4-4838a98b1cbc@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: mqcRMlLZk1ACUb1Rg6-KDtYH6DIbMkjPH8_2Nj4Z43g_1739289609 X-Mimecast-Originator: redhat.com Content-Language: en-US, en-CA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 5B168A001A X-Stat-Signature: uqwe3zi5486qkwb49xczjp99t1njj33f X-Rspam-User: X-HE-Tag: 1739289612-499684 X-HE-Meta: U2FsdGVkX1//PP8P8/TrmDCIbfqdlgMVIvOlIxgvYs93nTYQHxPi71dLs91Fz4b7gQBcBZAbD2sVjddUFZ5DhClW6q+lXbTu34qynLa5eKTLhSO94bLBxnBzGjsHa3ntHXj4zp4CPFIDrVgzNjk3guz3WaVkfxvKnSJY0jwF25sRmuoK+WYxTDytiQ7iVSq+7SwDg1RvxNMtH2ivE8fsj9ehREtCp+YClOtphYPMtaoVaSoyNWdt3WVHv/41bEJWp1rD5S+LZ2Zcnasx4cQm3rAUbAb9LGU2pZ1lKkv+Qkc1W/UsBU6ymJgkjzuvBG8nngnCcCtUQQR383wMSASJ/OVsOPLU8xXZH6591j45HnZ44svegGq319X1oUEBJ3Om6So//4KZWCjFk0LFUMOhdttwkRGfgAW8Z5VvS4XZ9fvno+5QgdHElwP34U+lm69FTv/L2gyPcLMaV7+hGoUT1sjxC2W2uSE1YxF62JTQ4UvJHG27u/+sX0X3Bher+NbVVRZa3och/hsoBIYnoqGRGu5yJcNTlwNds6T6aQ1K2SaLMxBm9QSfmhujyb0biQyqFxqhBMXURwUTjCOyCLQdDhhVtZ4PkNto7I+AwguJ3TsKn1t4PDBpUmpgUqqdIGtb48RQN7UOVVtTJt7p/MxwEyKi6cRXm3ecfRITcbLqGT+ERI8ErHNo5owOCZmDjxEm3o9pZaJJh1UNEaA2iyDk76aZEiCJi26G3bGIJk4PnoGbdE5iwVfLfxLHzYEQVTRamj6WQzT/9O8S0mgIpvPqhHMtRiKlx94hmdVdIoXb5SqSC+siMHNt5iFMH1tuKb3r+9iDmV+IbNIcDwZHOcuTgqUQKH4Oce/M2fdlc7w42pzC0F8S5VQvdqfHlVCNEeSMJEPg6hOgfMnLSN1dHpg2D3u6tzRUHz299PAPRpwVaSzMh7zxcXbP4Jkc4HsQou7XTaOgdiVKYaNxemZVAqR J+dtRS5s mpsaP3XZg8AcFuCjdEPn9HPdzh3zJs8pG1nkyE74Z/nSEk4mEnOSWwoEYhBBR13RxM/lg+s6NWwHMS37eFnh8qZB90TRB9qNmRsC0uuT7aO7sqKcQwXwzohmPb/egPNkVmUkeEAb7TXo3X7HG5iFSW9QaIiAQrT/avJRy9lYQssSlix1Se7IDtSkoBa+UMWX8bzEt2WIsmp1N6T2eNhFTl8H4VJ1cG4n50U10Cq/vQ3qzjznseZkHv4A8tsXjhkas4JZOS9Em2x8c3JcbgSP2/XCvE2+2wIiBA0ZL5MxLFbrUaJO8idzITVdNjbtsAQpy9h3aSlXnzWW1tSDkQmarqHgykHcO94ZI7bOGBvAau6E8ydnfz7QiFZYoMSwTDRoEcdGm/rEHo0pWxHYSp0KVqwAbBErI2s7RmwuoiIjbQ1Q+eNywIOk6mjEwlK6glotdT7P6A1h48MWjKwddkiS1jCra4x54k2kZtE5V X-Bogosity: Ham, tests=bogofilter, spamicity=0.000002, 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-02-11 10:15, David Hildenbrand wrote: > On 24.01.25 22:37, Luiz Capitulino wrote: >> The page_ext_next() function assumes that page extension objects for a >> page order allocation always reside in the same memory section, which >> may not be true and could lead to crashes. Use the page_ext_iter API >> instead. >> >> Fixes: e98337d11bbd ("mm/contig_alloc: support __GFP_COMP") >> Signed-off-by: Luiz Capitulino >> --- > > [...] > >>   void __folio_copy_owner(struct folio *newfolio, struct folio *old) >> @@ -364,24 +376,26 @@ void __folio_copy_owner(struct folio *newfolio, struct folio *old) >>       int i; >>       struct page_ext *old_ext; >>       struct page_ext *new_ext; >> +    struct page_ext_iter old_iter; >> +    struct page_ext_iter new_iter; >>       struct page_owner *old_page_owner; >>       struct page_owner *new_page_owner; >>       depot_stack_handle_t migrate_handle; >> -    old_ext = page_ext_get(&old->page); >> +    old_ext = page_ext_iter_begin(&old_iter, &old->page); >>       if (unlikely(!old_ext)) >>           return; >> -    new_ext = page_ext_get(&newfolio->page); >> +    new_ext = page_ext_iter_begin(&new_iter, &newfolio->page); >>       if (unlikely(!new_ext)) { >> -        page_ext_put(old_ext); >> +        page_ext_iter_end(&old_iter); >>           return; >>       } >>       old_page_owner = get_page_owner(old_ext); >>       new_page_owner = get_page_owner(new_ext); >>       migrate_handle = new_page_owner->handle; >> -    __update_page_owner_handle(new_ext, old_page_owner->handle, >> +    __update_page_owner_handle(&new_iter, old_page_owner->handle, >>                      old_page_owner->order, old_page_owner->gfp_mask, >>                      old_page_owner->last_migrate_reason, >>                      old_page_owner->ts_nsec, old_page_owner->pid, >> @@ -390,8 +404,13 @@ void __folio_copy_owner(struct folio *newfolio, struct folio *old) >>        * Do not proactively clear PAGE_EXT_OWNER{_ALLOCATED} bits as the folio >>        * will be freed after migration. Keep them until then as they may be >>        * useful. >> +     * >> +     * Note that we need to re-grab the page_ext iterator since >> +     * __update_page_owner_handle changed it. >>        */ >> -    __update_page_owner_free_handle(new_ext, 0, old_page_owner->order, >> +    page_ext_iter_end(&new_iter); >> +    page_ext_iter_begin(&new_iter, &newfolio->page); > > So a page_ext_iter_reset() could be helpful, that wouldn't drop the RCU lock. With that, we could probably also drop the comment. That's a good suggestion, I'll give it a try. > >> +    __update_page_owner_free_handle(&new_iter, 0, old_page_owner->order, >>                       old_page_owner->free_pid, >>                       old_page_owner->free_tgid, >>                       old_page_owner->free_ts_nsec); >> @@ -402,12 +421,12 @@ void __folio_copy_owner(struct folio *newfolio, struct folio *old) >>        */ >>       for (i = 0; i < (1 << new_page_owner->order); i++) { >>           old_page_owner->handle = migrate_handle; >> -        old_ext = page_ext_next(old_ext); >> +        old_ext = page_ext_iter_next(&old_iter); >>           old_page_owner = get_page_owner(old_ext); >>       } >> -    page_ext_put(new_ext); >> -    page_ext_put(old_ext); >> +    page_ext_iter_end(&new_iter); >> +    page_ext_iter_end(&old_iter); > > In general, we should look into implementing the iterator without temporarily dropping the RCU lock I think. OK. > > Nothing jumped at me from a quick glimpse, but yes, this usage is not that easy. >