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 A5893C3DA63 for ; Fri, 26 Jul 2024 05:56:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 434BF6B0085; Fri, 26 Jul 2024 01:56:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3BCFE6B008A; Fri, 26 Jul 2024 01:56:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 25E166B009D; Fri, 26 Jul 2024 01:56:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 05D0A6B0085 for ; Fri, 26 Jul 2024 01:56:23 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id B759B1215F7 for ; Fri, 26 Jul 2024 05:56:23 +0000 (UTC) X-FDA: 82380843846.11.78BB234 Received: from mail-ua1-f41.google.com (mail-ua1-f41.google.com [209.85.222.41]) by imf03.hostedemail.com (Postfix) with ESMTP id E8C2620021 for ; Fri, 26 Jul 2024 05:56:21 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CsqPzT9c; spf=pass (imf03.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.222.41 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721973356; a=rsa-sha256; cv=none; b=BfYd4L4aUPmz5bcErHX8uKjRMs1LILyeoqSrK7PLq9X55NRg5N1K7p4SKXqjD7jNFWu396 9MzB9sODVRIIIY7YHfePKuSYrZtJMrhAYNMbSz8lXRRxUhVgqWmgGWujUFHKF1NZYzQVCl z4xCCyXxwoZtcHeYe2hfXh73+4Jlzrc= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CsqPzT9c; spf=pass (imf03.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.222.41 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721973356; 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=VGpoY2/4xuj38ahX+M7aufbGrz4/0fAluE9A3lAurRQ=; b=V5ig7VwzAqa7eDYql46RfYPw1Mwcse6AOJo9uuGZ8LLSsNC51YtuWKb0xlPKKqHl0qCDUC jzAJOP0izVmFqavWBIpNFthRZuS9ZCJwQj2NjQxBlVyqQkdExXxLMc9ym8P1Nnkp26mi8S nlQooto93yEG1LB3zQjyb68RxEF6aUE= Received: by mail-ua1-f41.google.com with SMTP id a1e0cc1a2514c-822eb80f6e4so103315241.2 for ; Thu, 25 Jul 2024 22:56:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721973381; x=1722578181; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=VGpoY2/4xuj38ahX+M7aufbGrz4/0fAluE9A3lAurRQ=; b=CsqPzT9c6MOQ82g4ptUziNU6MSlzP7ogFo9349gfD0Lci661m5CX5qH4PGBajuctsL GgkbQPbfGG7mwd/O7nR5xTpzsJNYMWIfjQgd8ePdPFnV2uj42jFOQMvMjR8iWz2s3XG2 L79ADKkn1D0M2c4iL1yRycedGB3BcMyRFoULxFW6mBSgKF2x9X+J7b8i99jF6rD4MGH/ NAOaFB5yCQkg6CYYGP9/0XqhBgTtsfYmzlH8k9IxsLPDgqF3NsfaHzN7NC7pQWLWjPSs oCj9pyF7+joFnPX/1C1bHC57hvOmksEh8ZBfP3qbC0W71vYnvADw2oR9udzrtvmsAsSS tL5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721973381; x=1722578181; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VGpoY2/4xuj38ahX+M7aufbGrz4/0fAluE9A3lAurRQ=; b=seDMysYIezVpTNPY3rCvt0eqLgQFS3I4Bi8w1c3e9+5YEqhSTcqJnBfoxiNjWIKbkl McRuf83ro4EewbUoebRD2DLWYV6kRuY1b8y4fUGDOS3Q8qhPnM7msjisJZzb3/W7GytU sJljYneQBofjphXfNmm7FhQxxdLKm3oPZLurMeWIfPcBm/hE5u0u5O4PuT5PiGWEo0Q6 RNSBLTh3ObFjkKWSDMbXKL7oAHghgAMP6PIWkuR5NBtMtcE6j28+gc673TUEoZScxKYZ 2byonf0/BzI8wgkDIS7nF5ryEJZ26ultn6roEtUu2S4P4V1Nzkn5gQDlZD6pwFeboBtC VL1w== X-Forwarded-Encrypted: i=1; AJvYcCWodvRnt08+JyVriQFfS9nxaBzT72HGoprOAcKkL2B5dGlT9EVu03Oic7eMByyr04jtMDJ7O1jmrqcUQP11rrHAEKc= X-Gm-Message-State: AOJu0YyRQwS+/us2cB+7mq+aaOE9Mq1uyWRje973ezEuJmL5VLUEgDJe dtG/PlCZa3Fm5/vv4I2rTCdMX1tKh7RWyfoBcpUbbJsgN1ISeF2cMYlN3BizIXIW6I3MefWwp8q JDADwsIVSCcXaGv6pFwM/B5YRNyo= X-Google-Smtp-Source: AGHT+IF+HFN7Ty940krUIqBx2EB+g6yBraUBRVlJaZEP6MmECj0uAOPrun8NkhW3iWt1mviqzdPYhB6Sc+9SFMiZ+zk= X-Received: by 2002:a05:6102:2ad2:b0:492:9dbe:1741 with SMTP id ada2fe7eead31-493d9b713dcmr6102365137.27.1721973380845; Thu, 25 Jul 2024 22:56:20 -0700 (PDT) MIME-Version: 1.0 References: <20240711021317.596178-1-yuzhao@google.com> <20240711021317.596178-6-yuzhao@google.com> In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Fri, 26 Jul 2024 17:56:10 +1200 Message-ID: Subject: Re: [PATCH mm-unstable v1 5/5] mm/swap: remove boilerplate To: Yu Zhao Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: s8tdcn7yi45c68dcqxqo3o8ra9m4h3pb X-Rspamd-Queue-Id: E8C2620021 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1721973381-819237 X-HE-Meta: U2FsdGVkX1/dHAzvPhaNlt0EX9WzfmZkHMHUa1hAOC1YNdG87Bz1lljklkbOb3YnJyyQtLcbJsxCcQ62L+nOyk6jO+VMUDb8K8pFOR7gOtWZ9dN4k4hbTezANzmylNMAPMxu7j7L9fteffMKP94puyTIgU9qtXLZ1jeSMd3DsKaFWJvUtjmYdcyRTRcAkVZ0l1y7NTRPPtKHR7e6I8grVDhZtNbaq2THhsQYVFcikryuymCoMly2xovp45Ffrdsn8jINGsDqnQUEcurkLZjyhFPI/nWC9BQRoR1mQ34ODIu3Fz2KpjCqQIoroNNJtNQCQ+6y7TmUaMhvkfBxC2RAvdR4uZwrGK57uxNqsxHHm7vqWFytFHHMhsgWX8j3iSkPYHBopD/UO7BKLBayb1nIHuwnOIVczGdt4H4sNLBVkbNxrLQG9l1IPcqMNe7UWpKmStozLfPheZxQy5crSS22G9hVDR3vAdF0ySIQZSsY2wr3omXYOtHj257NuQlsaLA5Z16iQbtBaF7sRyq9AFMGNbzo/gTAdV/ugu4V6SCjY9SsG4MxmSW2R+DoXSRrNarlDbZNPFNmTinz8ntxE8wOnwF7D3Bf8foO/CLbLzffH0ZRTryQmm9kpFlXZtTVDPcuiD1/if7djLcv6LNylvWYuXr7npgPj4+5zmiOGOpvdy/HEa0qRinyaPQnexbRzK2obIWkvI2j44P5No4US/4oeKZTVofZHQK1QSgLKMPGrok+LfQ89ZGlrHNYgTtjRIQixx2KuoLVKxg9sbAdcY2AcXtEzi5bm6gMMzgtCEVg5+53pb7zH/HryIcoDkc8tKjrY/Mn1++TobvaCqYnurjMUis2adqYAIFc9XpsaCVsnN6/uVD4w3y5kL+el3o9G1KSm810dw6m1iO/8WnKziNh0cUrjDdN/ahZbzvbBllFNBOjg9EIQGWu7oyO/vaD3cgrS2JFZLSjJMUcGi163Xm RxOW2j+a vSc0i5jpuJFKaRkHPPe9mIVMx9dYFwBKWY5yPxHDT12pemluwHSZO0lZGTyg5YaojcIOAij6S72RJaZIkclAyFw7nQVU/rHeS2lYDmqSr+sh6f4d2KCak6fAjN9MbWtDhxCpGESyqy/HkwjIGDL/EPO3s4AT1YeT0S0zCy0NDIEbefopS4Kz1Q0ZXsTos23NnHtuvQgo5ObL7zEKDOnFKKK4yxuraW5S+q0xOM0p02cUwowe9ztuDEkKW9+CbZWkxrCNIODZ3bd+hJBpA2uSc9ush6hl4O/xEpdAgK9d5NIV0CVt6njvF+95kcWZPqqiDHxUiASdMRljgrQgns+cbMnLm9A== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000061, 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 Fri, Jul 26, 2024 at 5:48=E2=80=AFPM Barry Song <21cnbao@gmail.com> wrot= e: > > On Thu, Jul 11, 2024 at 2:15=E2=80=AFPM Yu Zhao wrote= : > > > > Remove boilerplate by using a macro to choose the corresponding lock > > and handler for each folio_batch in cpu_fbatches. > > > > Signed-off-by: Yu Zhao > > --- > > mm/swap.c | 107 +++++++++++++++++++----------------------------------- > > 1 file changed, 37 insertions(+), 70 deletions(-) > > > > diff --git a/mm/swap.c b/mm/swap.c > > index 4a66d2f87f26..342ff4e39ba4 100644 > > --- a/mm/swap.c > > +++ b/mm/swap.c > > @@ -220,16 +220,45 @@ static void folio_batch_move_lru(struct folio_bat= ch *fbatch, move_fn_t move_fn) > > folios_put(fbatch); > > } > > > > -static void folio_batch_add_and_move(struct folio_batch *fbatch, > > - struct folio *folio, move_fn_t move_fn) > > +static void __folio_batch_add_and_move(struct folio_batch *fbatch, > > + struct folio *folio, move_fn_t move_fn, > > + bool on_lru, bool disable_irq) > > { > > + unsigned long flags; > > + > > + folio_get(folio); > > + > > + if (on_lru && !folio_test_clear_lru(folio)) { > > + folio_put(folio); > > + return; > > + } > > + > > if (folio_batch_add(fbatch, folio) && !folio_test_large(folio) = && > > !lru_cache_disabled()) > > return; > > > > + if (disable_irq) > > + local_lock_irqsave(&cpu_fbatches.lock_irq, flags); > > + else > > + local_lock(&cpu_fbatches.lock); > > + > > folio_batch_move_lru(fbatch, move_fn); > > + > > + if (disable_irq) > > + local_unlock_irqrestore(&cpu_fbatches.lock_irq, flags); > > + else > > + local_unlock(&cpu_fbatches.lock); > > } > > > > +#define folio_batch_add_and_move(folio, op, on_lru) = \ > > + __folio_batch_add_and_move( = \ > > + this_cpu_ptr(&cpu_fbatches.op), = \ > > + folio, = \ > > + op, = \ > > + on_lru, = \ > > + offsetof(struct cpu_fbatches, op) > offsetof(struct cpu= _fbatches, lock_irq) \ > > + ) > > I am running into this BUG, is it relevant? > > / # [ 64.908801] check_preemption_disabled: 1804 callbacks suppressed > [ 64.908915] BUG: using smp_processor_id() in preemptible [00000000] > code: jbd2/vda-8/96 > [ 64.909912] caller is debug_smp_processor_id+0x20/0x30 > [ 64.911743] CPU: 0 UID: 0 PID: 96 Comm: jbd2/vda-8 Not tainted > 6.10.0-gef32eccacce2 #59 > [ 64.912373] Hardware name: linux,dummy-virt (DT) > [ 64.912741] Call trace: > [ 64.913048] dump_backtrace+0x9c/0x100 > [ 64.913414] show_stack+0x20/0x38 > [ 64.913761] dump_stack_lvl+0xc4/0x150 > [ 64.914197] dump_stack+0x18/0x28 > [ 64.914557] check_preemption_disabled+0xd8/0x120 > [ 64.914944] debug_smp_processor_id+0x20/0x30 > [ 64.915321] folio_add_lru+0x30/0xa8 > [ 64.915680] filemap_add_folio+0xe4/0x118 > [ 64.916082] __filemap_get_folio+0x178/0x450 > [ 64.916455] __getblk_slow+0xb0/0x310 > [ 64.916816] bdev_getblk+0x94/0xc0 > [ 64.917169] jbd2_journal_get_descriptor_buffer+0x6c/0x1b0 > [ 64.917590] jbd2_journal_commit_transaction+0x7f0/0x1c88 > [ 64.917994] kjournald2+0xd4/0x278 > [ 64.918344] kthread+0x11c/0x128 > [ 64.918693] ret_from_fork+0x10/0x20 > [ 64.928277] BUG: using smp_processor_id() in preemptible [00000000] > code: jbd2/vda-8/96 > [ 64.928878] caller is debug_smp_processor_id+0x20/0x30 > [ 64.929381] CPU: 0 UID: 0 PID: 96 Comm: jbd2/vda-8 Not tainted > 6.10.0-gef32eccacce2 #59 > [ 64.929886] Hardware name: linux,dummy-virt (DT) > [ 64.930252] Call trace: > [ 64.930544] dump_backtrace+0x9c/0x100 > [ 64.930907] show_stack+0x20/0x38 > [ 64.931255] dump_stack_lvl+0xc4/0x150 > [ 64.931616] dump_stack+0x18/0x28 > [ 64.932022] check_preemption_disabled+0xd8/0x120 > [ 64.932486] debug_smp_processor_id+0x20/0x30 > [ 64.933023] folio_add_lru+0x30/0xa8 > [ 64.933523] filemap_add_folio+0xe4/0x118 > [ 64.933892] __filemap_get_folio+0x178/0x450 > [ 64.934265] __getblk_slow+0xb0/0x310 > [ 64.934626] bdev_getblk+0x94/0xc0 > [ 64.934977] jbd2_journal_get_descriptor_buffer+0x6c/0x1b0 > [ 64.935418] journal_submit_commit_record.part.0.constprop.0+0x48/0x28= 8 > [ 64.935919] jbd2_journal_commit_transaction+0x1590/0x1c88 > [ 64.936519] kjournald2+0xd4/0x278 > [ 64.936908] kthread+0x11c/0x128 > [ 64.937323] ret_from_fork+0x10/0x20 This removes the BUG complaint, but I'm unsure if it's the correct fix: diff --git a/mm/swap.c b/mm/swap.c index 342ff4e39ba4..a2781edeceef 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -252,7 +252,7 @@ static void __folio_batch_add_and_move(struct folio_batch *fbatch, #define folio_batch_add_and_move(folio, op, on_lru) \ __folio_batch_add_and_move( \ - this_cpu_ptr(&cpu_fbatches.op), \ + raw_cpu_ptr(&cpu_fbatches.op), \ folio, \ op, \ on_lru, \ > > > + > > static void lru_move_tail(struct lruvec *lruvec, struct folio *folio) > > { > > if (folio_test_unevictable(folio)) > > @@ -250,23 +279,11 @@ static void lru_move_tail(struct lruvec *lruvec, = struct folio *folio) > > */ > > void folio_rotate_reclaimable(struct folio *folio) > > { > > - struct folio_batch *fbatch; > > - unsigned long flags; > > - > > if (folio_test_locked(folio) || folio_test_dirty(folio) || > > folio_test_unevictable(folio)) > > return; > > > > - folio_get(folio); > > - if (!folio_test_clear_lru(folio)) { > > - folio_put(folio); > > - return; > > - } > > - > > - local_lock_irqsave(&cpu_fbatches.lock_irq, flags); > > - fbatch =3D this_cpu_ptr(&cpu_fbatches.lru_move_tail); > > - folio_batch_add_and_move(fbatch, folio, lru_move_tail); > > - local_unlock_irqrestore(&cpu_fbatches.lock_irq, flags); > > + folio_batch_add_and_move(folio, lru_move_tail, true); > > } > > > > void lru_note_cost(struct lruvec *lruvec, bool file, > > @@ -355,21 +372,10 @@ static void folio_activate_drain(int cpu) > > > > void folio_activate(struct folio *folio) > > { > > - struct folio_batch *fbatch; > > - > > if (folio_test_active(folio) || folio_test_unevictable(folio)) > > return; > > > > - folio_get(folio); > > - if (!folio_test_clear_lru(folio)) { > > - folio_put(folio); > > - return; > > - } > > - > > - local_lock(&cpu_fbatches.lock); > > - fbatch =3D this_cpu_ptr(&cpu_fbatches.lru_activate); > > - folio_batch_add_and_move(fbatch, folio, lru_activate); > > - local_unlock(&cpu_fbatches.lock); > > + folio_batch_add_and_move(folio, lru_activate, true); > > } > > > > #else > > @@ -513,8 +519,6 @@ EXPORT_SYMBOL(folio_mark_accessed); > > */ > > void folio_add_lru(struct folio *folio) > > { > > - struct folio_batch *fbatch; > > - > > VM_BUG_ON_FOLIO(folio_test_active(folio) && > > folio_test_unevictable(folio), folio); > > VM_BUG_ON_FOLIO(folio_test_lru(folio), folio); > > @@ -524,11 +528,7 @@ void folio_add_lru(struct folio *folio) > > lru_gen_in_fault() && !(current->flags & PF_MEMALLOC)) > > folio_set_active(folio); > > > > - folio_get(folio); > > - local_lock(&cpu_fbatches.lock); > > - fbatch =3D this_cpu_ptr(&cpu_fbatches.lru_add); > > - folio_batch_add_and_move(fbatch, folio, lru_add); > > - local_unlock(&cpu_fbatches.lock); > > + folio_batch_add_and_move(folio, lru_add, false); > > } > > EXPORT_SYMBOL(folio_add_lru); > > > > @@ -702,22 +702,11 @@ void lru_add_drain_cpu(int cpu) > > */ > > void deactivate_file_folio(struct folio *folio) > > { > > - struct folio_batch *fbatch; > > - > > /* Deactivating an unevictable folio will not accelerate reclai= m */ > > if (folio_test_unevictable(folio)) > > return; > > > > - folio_get(folio); > > - if (!folio_test_clear_lru(folio)) { > > - folio_put(folio); > > - return; > > - } > > - > > - local_lock(&cpu_fbatches.lock); > > - fbatch =3D this_cpu_ptr(&cpu_fbatches.lru_deactivate_file); > > - folio_batch_add_and_move(fbatch, folio, lru_deactivate_file); > > - local_unlock(&cpu_fbatches.lock); > > + folio_batch_add_and_move(folio, lru_deactivate_file, true); > > } > > > > /* > > @@ -730,21 +719,10 @@ void deactivate_file_folio(struct folio *folio) > > */ > > void folio_deactivate(struct folio *folio) > > { > > - struct folio_batch *fbatch; > > - > > if (folio_test_unevictable(folio) || !(folio_test_active(folio)= || lru_gen_enabled())) > > return; > > > > - folio_get(folio); > > - if (!folio_test_clear_lru(folio)) { > > - folio_put(folio); > > - return; > > - } > > - > > - local_lock(&cpu_fbatches.lock); > > - fbatch =3D this_cpu_ptr(&cpu_fbatches.lru_deactivate); > > - folio_batch_add_and_move(fbatch, folio, lru_deactivate); > > - local_unlock(&cpu_fbatches.lock); > > + folio_batch_add_and_move(folio, lru_deactivate, true); > > } > > > > /** > > @@ -756,22 +734,11 @@ void folio_deactivate(struct folio *folio) > > */ > > void folio_mark_lazyfree(struct folio *folio) > > { > > - struct folio_batch *fbatch; > > - > > if (!folio_test_anon(folio) || !folio_test_swapbacked(folio) || > > folio_test_swapcache(folio) || folio_test_unevictable(folio= )) > > return; > > > > - folio_get(folio); > > - if (!folio_test_clear_lru(folio)) { > > - folio_put(folio); > > - return; > > - } > > - > > - local_lock(&cpu_fbatches.lock); > > - fbatch =3D this_cpu_ptr(&cpu_fbatches.lru_lazyfree); > > - folio_batch_add_and_move(fbatch, folio, lru_lazyfree); > > - local_unlock(&cpu_fbatches.lock); > > + folio_batch_add_and_move(folio, lru_lazyfree, true); > > } > > > > void lru_add_drain(void) > > -- > > 2.45.2.803.g4e1b14247a-goog > > > > > > Thanks > Barry