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 F0638C76196 for ; Tue, 28 Mar 2023 12:06:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 31D9A6B0072; Tue, 28 Mar 2023 08:06:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2CDB36B0074; Tue, 28 Mar 2023 08:06:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 16ED16B0075; Tue, 28 Mar 2023 08:06:13 -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 06B386B0072 for ; Tue, 28 Mar 2023 08:06:13 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id C0D7F40924 for ; Tue, 28 Mar 2023 12:06:12 +0000 (UTC) X-FDA: 80618178984.08.4B88919 Received: from mail-yb1-f176.google.com (mail-yb1-f176.google.com [209.85.219.176]) by imf03.hostedemail.com (Postfix) with ESMTP id 008C72001C for ; Tue, 28 Mar 2023 12:06:09 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=tZa3WmFV; spf=pass (imf03.hostedemail.com: domain of elver@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=elver@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1680005170; 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=3nAcSUy1w+Q3o4Q/OHStFI724GxYk97V8A1XUu2jF9g=; b=E7Uzfbig2Zf2Nr1Wo8nf6xz2/qEe810cGGtt/UXmpSR2ckUhh0usb1M2TnGbPNl30zIQlC csaP3cVcHb+pfOtqqLiQCnc6yJLicSdGE8uZYfxoSeXbp8POFHmzBja8fbT2q71ig4A6a+ v7CkiY6nAamgXMF41lQeBTvRW3YccU0= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=tZa3WmFV; spf=pass (imf03.hostedemail.com: domain of elver@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=elver@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1680005170; a=rsa-sha256; cv=none; b=d1Z814nRRm8qSPUBCi36BLYdXye6Ugzqs0pZE7osr8ibdIk+D9LNwH3kQk2fpF9grFYIIV KFzl640qqYYClxPXCBZbiBuSrZnObzkORGLBio3lddlMZWAj4KltagOMTIx5UoXuiog3Nx IrKzifGSuJ0MkgYYj9Co7qX8fJv3ad0= Received: by mail-yb1-f176.google.com with SMTP id b18so14706572ybp.1 for ; Tue, 28 Mar 2023 05:06:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1680005169; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3nAcSUy1w+Q3o4Q/OHStFI724GxYk97V8A1XUu2jF9g=; b=tZa3WmFVr6RJgCaIfgBSVSh5UJAade1I1QF6Y5qLZX+p5/0pOE+NyAqJb34ijpgvjd a6w/tekWdgzKPOFQrdoYaQh73r3k1rc4X9mt3Ao0AY0PHt72GMO8ZXDSSdUNefdX/+7k Kn+vfIc31GHU4gb0wXLaw/1UTW0uTLE34ZJzIa4WtXMcu67P4SdjX6mPOW+QGdEuMwsV DFZFOBBnZGM2/gfm25X5YqKAz/TPJ0zUmtMLaGRqkYdC5wIwXaUokpflDtQ+WzgP5L65 Zd839NwdPk96D/HoVrbKoCgviUXxXuc58uifBzz4BLe8CLZu1r5+hJYIUK7NdBNjIYHx qqLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680005169; h=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=3nAcSUy1w+Q3o4Q/OHStFI724GxYk97V8A1XUu2jF9g=; b=Xh8P4qUkECeG/tNZzEB1IIswTf5mLAAMj2rCVcvQy2OyqA3nVgjdTC19wBss5RQLIu OsUXA6h87gcnNbZ9lWbaQuwXAH4yl4agt8lVBxYx6ykdOHUy2KQ7jiW2/8eCN16+/t/E oS9wY6Ks72dBME49durs/wFe9TT382veFYrfwMfbxEu/npe0zat20UGDEVBFooJkxcFb beiQvuPFfQlOLmDj8JQ7gcIQ/UpLTk9lCTUToHrESh09uv7dzNEVZ5vCed/7dw16bEAZ teT52LXwxbr5gWRrwTdr0ru4JNvC9AdGFYh4O6BScnodlnb5bodCIUnCpK7jqLo4u/EV p9AA== X-Gm-Message-State: AAQBX9d3BFdNJhTS5HoZKhyPnbo/Gmg3zMD2Ss1pFwUBML48CVMpP1I4 v8tNb0UXbt1hNkOL/EjHoMVK3vPRNtba3CI1CXXNhQ== X-Google-Smtp-Source: AKy350aToJDCkqdHj4cvOy9j5YOCIDb5O0Wx7AGL45KuARN30ai2RSkBk4pWZ82+ReFD4c9+OqF0SoFAI0rKZsxtvQY= X-Received: by 2002:a25:5d7:0:b0:b67:8ad6:7529 with SMTP id 206-20020a2505d7000000b00b678ad67529mr14054216ybf.65.1680005168914; Tue, 28 Mar 2023 05:06:08 -0700 (PDT) MIME-Version: 1.0 References: <20230328095807.7014-1-songmuchun@bytedance.com> <20230328095807.7014-2-songmuchun@bytedance.com> In-Reply-To: From: Marco Elver Date: Tue, 28 Mar 2023 14:05:32 +0200 Message-ID: Subject: Re: [PATCH 1/6] mm: kfence: simplify kfence pool initialization To: Muchun Song Cc: glider@google.com, dvyukov@google.com, akpm@linux-foundation.org, jannh@google.com, sjpark@amazon.de, muchun.song@linux.dev, kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 008C72001C X-Stat-Signature: rnn9xhwrjszdngechisz85qims4ineuz X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1680005169-980897 X-HE-Meta: U2FsdGVkX19np43Gu3zROSr5RUNGFrJ8hXzdVviYJDwTrzR5iC4dgEyVuWY/RUPJ5RmGRlfT+cbe8cLTh+i6JyRvBaBxFxccNqEm6iqbbVp6ow0zoAdirHZaZWT06hm6dBWJiXdis1cmocLD7BjldTvdoOHe/KQ2Dd7S3ccVSZA0ChFeWqAZfjrJ/RpzEVG85oQxfwHnB5iR/hyDIRMQBQeNpWO5eUQ1TYRttMM1JnwdZ9UNy9lO8aqC4yQuPr38KShhxUR34Q/CqjgrB2c8WAzkylYH2Z/U1O5FyLpvN+SYqg5ju549WE4n+9U28c5SXX4pEqvAsL7v9MpaJdl+PwJgQi1zrAXRy8NT7V/l99VkaC2YzrGQNSuihMMkRZHRTe/AiKStDmEd7B/oeTS8s2KKw3fpMxeyButFyERt5Kpqk2gyb9PvtPlWGPKD6tJnx4oDowfCr9O7GWOlVCkgwhnbtz6DEigY3A0IzXyi2OBvVEtxPZuRQOr1gmYM/aTf8Dn9dS/JRreVXyB6n9WbQAGmoBORBtS06fUneJKxazfvEJAU65Rlkrm+TQzc19ZTzIRQGX5FUoMSJHoGcmnMOrRDSUV8WRm73sChWJuPRtt7hPvlgSQKdXkKqd6Uq9k2S9hPEh7UwaQf8Oqbn0xGkODBkLVqNI52KU6F/6J92w2UGxl9AXz1R06PP3Nr6W+njpKCxPvLwRADhCvvO/Fqi2f+Xu2VZuLLGxCUw7oj/mMnU1aujATecO0dj1J1zii/RKXwtRsa2DZC/cWfsN5LD+9laV5lYD3oYOqZ4S262G7+z4zxfcK8kGZj7D+ofv1GM7JcU54BdJN9eOE2Am2WUyshrCNnx621mH4h+A6noWFrZpemRae/DVu+DpzAhD9DEb03O5JcyeNAKMdA8ldlu6bxBuwvjfXIedfOhi5p50Wl4mvzPUe2kiVOsuw3Iz0rBoeoRCGlEmaglPh6N3D kIC4dCM8 ySZinktiMq1Oi9pZXQ5KzNZXkn5GBMYKEfmVkyE9iRybqMar6YkXARYW12xDb04J2M+wdxrcAsRY2Qk1ekIzpDY83fJjLeLRSyRDWtOIrfXyBQbSTB37MbV+T0P2sHqKiHLaePBLXnYxMso/q6yYjeM4pOWHJ24llDKS13JEfGF4qDkkJIpyfOQWcVsh2LDNIvIleO/BV13fhw87SDLODI3CM3VlPllb3/ck/bR6tBfUPAmkexQK6y6h0tIb4yayxoSq7N89prLZ/tar5v9Z1hdJ0HCBUUFKj30LmzzxKd5rS3s8jJKoyTOv82KqGJJeg7UzHPCA8gZrUIOI= 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 Tue, 28 Mar 2023 at 13:55, Marco Elver wrote: > > On Tue, 28 Mar 2023 at 11:58, Muchun Song wrote: > > > > There are three similar loops to initialize kfence pool, we could merge > > all of them into one loop to simplify the code and make code more > > efficient. > > > > Signed-off-by: Muchun Song > > Reviewed-by: Marco Elver > > > --- > > mm/kfence/core.c | 47 ++++++----------------------------------------- > > 1 file changed, 6 insertions(+), 41 deletions(-) > > > > diff --git a/mm/kfence/core.c b/mm/kfence/core.c > > index 7d01a2c76e80..de62a84d4830 100644 > > --- a/mm/kfence/core.c > > +++ b/mm/kfence/core.c > > @@ -539,35 +539,10 @@ static void rcu_guarded_free(struct rcu_head *h) > > static unsigned long kfence_init_pool(void) > > { > > unsigned long addr = (unsigned long)__kfence_pool; > > - struct page *pages; > > int i; > > > > if (!arch_kfence_init_pool()) > > return addr; > > - > > - pages = virt_to_page(__kfence_pool); > > - > > - /* > > - * Set up object pages: they must have PG_slab set, to avoid freeing > > - * these as real pages. > > - * > > - * We also want to avoid inserting kfence_free() in the kfree() > > - * fast-path in SLUB, and therefore need to ensure kfree() correctly > > - * enters __slab_free() slow-path. > > - */ Actually: can you retain this comment somewhere? > > - for (i = 0; i < KFENCE_POOL_SIZE / PAGE_SIZE; i++) { > > - struct slab *slab = page_slab(nth_page(pages, i)); > > - > > - if (!i || (i % 2)) > > - continue; > > - > > - __folio_set_slab(slab_folio(slab)); > > -#ifdef CONFIG_MEMCG > > - slab->memcg_data = (unsigned long)&kfence_metadata[i / 2 - 1].objcg | > > - MEMCG_DATA_OBJCGS; > > -#endif > > - } > > - > > /* > > * Protect the first 2 pages. The first page is mostly unnecessary, and > > * merely serves as an extended guard page. However, adding one > > @@ -581,8 +556,9 @@ static unsigned long kfence_init_pool(void) > > addr += PAGE_SIZE; > > } > > > > - for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++) { > > + for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++, addr += 2 * PAGE_SIZE) { > > struct kfence_metadata *meta = &kfence_metadata[i]; > > + struct slab *slab = page_slab(virt_to_page(addr)); > > > > /* Initialize metadata. */ > > INIT_LIST_HEAD(&meta->list); > > @@ -593,26 +569,15 @@ static unsigned long kfence_init_pool(void) > > > > /* Protect the right redzone. */ > > if (unlikely(!kfence_protect(addr + PAGE_SIZE))) > > - goto reset_slab; > > - > > - addr += 2 * PAGE_SIZE; > > - } > > - > > - return 0; > > - > > -reset_slab: > > - for (i = 0; i < KFENCE_POOL_SIZE / PAGE_SIZE; i++) { > > - struct slab *slab = page_slab(nth_page(pages, i)); > > + return addr; > > > > - if (!i || (i % 2)) > > - continue; > > + __folio_set_slab(slab_folio(slab)); > > #ifdef CONFIG_MEMCG > > - slab->memcg_data = 0; > > + slab->memcg_data = (unsigned long)&meta->objcg | MEMCG_DATA_OBJCGS; > > #endif > > - __folio_clear_slab(slab_folio(slab)); > > } > > > > - return addr; > > + return 0; > > } > > > > static bool __init kfence_init_pool_early(void) > > -- > > 2.11.0 > >