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 9B520EE6455 for ; Fri, 15 Sep 2023 10:59:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 25BE06B034E; Fri, 15 Sep 2023 06:59:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 20BAE6B0350; Fri, 15 Sep 2023 06:59:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0D2246B0351; Fri, 15 Sep 2023 06:59:46 -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 EEB476B034E for ; Fri, 15 Sep 2023 06:59:45 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id CAD161CA134 for ; Fri, 15 Sep 2023 10:59:45 +0000 (UTC) X-FDA: 81238536330.14.446D0B0 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) by imf08.hostedemail.com (Postfix) with ESMTP id F3616160004 for ; Fri, 15 Sep 2023 10:59:43 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Tp6AVVrR; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf08.hostedemail.com: domain of 3HjkEZQsKCM87vEEz9C3KK919916z.x97638FI-775Gvx5.9C1@flex--matteorizzo.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=3HjkEZQsKCM87vEEz9C3KK919916z.x97638FI-775Gvx5.9C1@flex--matteorizzo.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1694775584; 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=ZucAKzByYrFaSau/ORvEIe6Pa38oq3gYlqLtnctNAqY=; b=jypGym1nvqIyZwqufSUoAMYvpOIBXaaJ9yFqiLcw18TsxBFsKwvSgD/3CuKXyl7F78y54w i9UQ1SSNBc9yGjST+I6m4x0VEztNNYy7+vQFHFTFcQwbzjMNk7WimNDtjhxXyOjgijqbq1 ISwlyPqaFsQLFUKwQY1WG9doopfdDc8= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Tp6AVVrR; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf08.hostedemail.com: domain of 3HjkEZQsKCM87vEEz9C3KK919916z.x97638FI-775Gvx5.9C1@flex--matteorizzo.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=3HjkEZQsKCM87vEEz9C3KK919916z.x97638FI-775Gvx5.9C1@flex--matteorizzo.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694775584; a=rsa-sha256; cv=none; b=hlQZjIOFUk5J7Gh3cW2vUrqkGj6jZ2BpIF/FE57XSKOYLefZcpzKtLkcF9Ki2AYPyiW3Xd uVBAp/PifH55bWIQcQlcWJbfml7qDLVMbAx0W4rDCS9GMuUfmFtjSXiF5rH+2S9S6x/T0i VzJugcXmoIfAalumzABlmlEgUYxjzcI= Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-59b50b45481so25191247b3.1 for ; Fri, 15 Sep 2023 03:59:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1694775583; x=1695380383; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=ZucAKzByYrFaSau/ORvEIe6Pa38oq3gYlqLtnctNAqY=; b=Tp6AVVrRjvnVYuHuqf3FiGCZEL+zCREKNVgINN6hlEth4mP5B7lWGbMkbVMuI1FmWk jJ6x7EZ9r225MLx6MqLe6JI+6X4luREh+Cd4NgF0fZGk3KFzcSyalh1tHutKOBfIuVew 2U5aH7UYGQbFybWfsHdIySaYBGMoAkUtnCwWJuVs91h1rLLDhdz6lCVt9wZKJKyVhrEs 9djoR8L6QOitGRWR0Tck/eRq2jXNuwE82gUuIVKdXQAsKcn0guudKd4nEe0OJz+q76C3 6/+EWtNgm1a2Z7/QZlDocDfcuCYrDlFv7azKdH0cTIg/IKf/n4ulOOYCU9qCoEudJgt1 Xzgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694775583; x=1695380383; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZucAKzByYrFaSau/ORvEIe6Pa38oq3gYlqLtnctNAqY=; b=bWeRpbnG0wB+Z99VoLsl9AjL8dVABeu51wuXwQG1wGLbVWt/+3lFQUgUROQKjc5Vdz IPg15YoDRP3Zj7d2FuA6XrCy3K00yx3i82z8HCSznb1DWDd+FeXIqiw7bFdFLB3kb0t2 NhQGB/Oy9xWQe7r0Oj7c4UnPgp3IHnyy22rS07aCqqvrbCK7Rws/v7Hzh1TPGKvX4LO9 +0idkTIFuMZDWt7be6wsOrZq2mfMPzbmpB+2Biddhg9HNKPjpnux56cwog70UM0eomfJ 5Yvo6Cfp76KiXvM0fOA7LhKYJ957Z2ujo/+sWaAEG4kTyX17aCKBOhCrhsBT8IEzkmca TP1w== X-Gm-Message-State: AOJu0YwObgsrCrATGDLqwuwUUE6YjEB7Lwiiw3xz4pzDPYRaHOXA/qCL PNnX/BtYNBuFiYeXoexGrG1yKYYwr3VwpG/SNg== X-Google-Smtp-Source: AGHT+IEAnaaQu/BWsVFGNIRiv6lcplWzZAAkMq3yz1aqKWinKyMc9fRYJHvcl3uXxi5mNmOlrck3nzUMRNpgDaT5wA== X-Received: from mr-cloudtop2.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:2a6]) (user=matteorizzo job=sendgmr) by 2002:a81:b612:0:b0:565:9bee:22e0 with SMTP id u18-20020a81b612000000b005659bee22e0mr34824ywh.0.1694775582994; Fri, 15 Sep 2023 03:59:42 -0700 (PDT) Date: Fri, 15 Sep 2023 10:59:21 +0000 In-Reply-To: <20230915105933.495735-1-matteorizzo@google.com> Mime-Version: 1.0 References: <20230915105933.495735-1-matteorizzo@google.com> X-Mailer: git-send-email 2.42.0.459.ge4e396fd5e-goog Message-ID: <20230915105933.495735-3-matteorizzo@google.com> Subject: [RFC PATCH 02/14] mm/slub: add is_slab_addr/is_slab_page helpers From: Matteo Rizzo To: cl@linux.com, penberg@kernel.org, rientjes@google.com, iamjoonsoo.kim@lge.com, akpm@linux-foundation.org, vbabka@suse.cz, roman.gushchin@linux.dev, 42.hyeyoo@gmail.com, keescook@chromium.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-hardening@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, corbet@lwn.net, luto@kernel.org, peterz@infradead.org Cc: jannh@google.com, matteorizzo@google.com, evn@google.com, poprdi@google.com, jordyzomer@google.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: F3616160004 X-Stat-Signature: 6piu3e35frw8wj6tyra1jyon9cnaok3x X-Rspam-User: X-HE-Tag: 1694775583-123765 X-HE-Meta: U2FsdGVkX1+dC50WzKwEukRNTDOhOvGQXvI5r0b2ZVQ+LLbgwqdHXIb+G2fWKe8HXpM8BO0hhcE8oEn3abx3nRPHGprjcfUP9G9GYQyZTHmhms6hYpwc2RGxqW2coftOh44bzlyDlXSI7uNSSh73GCJ2nWerY/vnp1FkQULgAwDJry2yclZ1qaeh4lpQn6pWH/SDQd/7SW+6B3YZvGR9Q6zEDZ7CT7Y16Vhtjh1M9WtGn6rUcyS3MZZXicqtB1fRN3iLqi8et5qjlIGErH3hub/gkYuyXuPD3ROqTcz7Z+WzcyZhZujejQjNmchcVElI3TYFw8/98X5kseRRZhCX56iWLIMUGXO2EGsx9v/12V6IZj7k3wEO9wLjteSclujzhNTQh1Pp5kG9rBQffdY0d6AX0DwwJkI7kIwnbMFZQ0CMxCrMgOiq2ocD/iZzC7AW4csTmirVQCiLIo/7aD+p89rXCvcluv5NoSXP+5ol5VXecNahOShxma2MZKLEeBXIqCGxAnhynPVgdAT9c0D2bR4MeYw244wK3ZILpQJflXcHcVpxUmvqy02UQHA6G80IbT054xk1WVY4RO+KFbT6NbqB1hvwoGXksxLmuaWxYuoxdxfaPQ7UuLJBd0dqShk3zjDI3YhdLo1xyQ9kj3/k+VgTe85hiCj5Sdf2Cbw3Fa1JJEP3smAPMwzVstPIL+Ktslamc77zQfPRyhEdSWnW4TS4237+/gVyjIpDZOfJU5iaICvWJHD7MRxzo6FByJYuC3KUzecfJly+0nbvCigKzK/q7fMn+EGzh16OQGFCZPVgXjoInaAA6IBkkngeLxHdIB1dpORblg9EQNjToMeSkM6BS1afPH8CQwMfpd5m5AndtoP3SjM4048Coe6+Lw3sx8qMpMv7Q0roaA/3t/MskqrqezUBZ4TdPRw4Bbq0cz71PLRji1UYMr8pzOcH8xRh3N8O7Nok7w5ufG4bbgz fZWwvSVV hNcadEuucHrXqoMKMIbN4TnA9yDB+u3j1138rCy4o2Om9auYst8o+0Jv/Lc/5RKtbR/m2lrMszNLaNg9kMIJBFtrDF2B3VJoGv1mzF62sbILjxcKgHMxfD7SAXqn+7DrRW3F2ax3uT46emkP8PiLG3JfbZ/js9kaoO84XuDuGoNKPphNeFy68SLgeQ3N0URY9hULI8jKMPRX8cmSJ8e47exoCghAkf1i7aGm9NNF7qEsCpjwtMUpHwcF0UtKOk28REPENVDMYGKF37ZTIycASKbIDfjrifjsXGsrKx0YDchUDfN+kzGb9VedcVs51CenB4e9mD4MZyk9TWbZunUN36E5poIUqQouKrB6wZ8Mc+xcJTzNQbPaScp+RK65/LI/AkW9PcO02NzE3MDLoOqUjIAuxra7T7bhZADN3IwDSa1H69qxWlU65S1RdV3+tOvSEv93JSZfd7Am5LGoSBvmwuyWLn24NjHfp8X6Nu/s8BGhO/DxWU6vG5crGKEQzOHM/araBC+Ptr4BJH4bBuUyDDMvttEcj/AkAe1KQ007PndgFIhFMSgjo4W4qyaa+pFRuOBD+T96JahC+kre2HKwC9/BI+HXcTeghIEPsgiKyRnim94dbNFs0MjTTH3rpVpUXhc3f9tvlpY+HT6examHpekE67QdbpQzcTFZBuDCIhkfjky1NNoHqsStXcR15+QAIptzVLN10+5gc5PH6NMwbjR+mTU5AJt3z4J7LxIIbxEGh9K5UjjQmkp/j0h7bI1sNAYhM 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: From: Jann Horn This is refactoring in preparation for adding two different implementations (for SLAB_VIRTUAL enabled and disabled). virt_to_folio(x) expands to _compound_head(virt_to_page(x)) and virt_to_head_page(x) also expands to _compound_head(virt_to_page(x)) so PageSlab(virt_to_head_page(res)) should be equivalent to is_slab_addr(res). Signed-off-by: Jann Horn Co-developed-by: Matteo Rizzo Signed-off-by: Matteo Rizzo --- include/linux/slab.h | 1 + kernel/resource.c | 2 +- mm/slab.h | 9 +++++++++ mm/slab_common.c | 5 ++--- mm/slub.c | 6 +++--- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/include/linux/slab.h b/include/linux/slab.h index 8228d1276a2f..a2d82010d269 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -793,4 +793,5 @@ int slab_dead_cpu(unsigned int cpu); #define slab_dead_cpu NULL #endif +#define is_slab_addr(addr) folio_test_slab(virt_to_folio(addr)) #endif /* _LINUX_SLAB_H */ diff --git a/kernel/resource.c b/kernel/resource.c index b1763b2fd7ef..c829e5f97292 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -158,7 +158,7 @@ static void free_resource(struct resource *res) * buddy and trying to be smart and reusing them eventually in * alloc_resource() overcomplicates resource handling. */ - if (res && PageSlab(virt_to_head_page(res))) + if (res && is_slab_addr(res)) kfree(res); } diff --git a/mm/slab.h b/mm/slab.h index 799a315695c6..25e41dd6087e 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -169,6 +169,15 @@ static_assert(IS_ALIGNED(offsetof(struct slab, freelist), sizeof(freelist_aba_t) */ #define slab_page(s) folio_page(slab_folio(s), 0) +/** + * is_slab_page - Checks if a page is really a slab page + * @s: The slab + * + * Checks if s points to a slab page. + * + * Return: true if s points to a slab and false otherwise. + */ +#define is_slab_page(s) folio_test_slab(slab_folio(s)) /* * If network-based swap is enabled, sl*b must keep track of whether pages * were allocated from pfmemalloc reserves. diff --git a/mm/slab_common.c b/mm/slab_common.c index e99e821065c3..79102d24f099 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -1063,7 +1063,7 @@ void kfree(const void *object) return; folio = virt_to_folio(object); - if (unlikely(!folio_test_slab(folio))) { + if (unlikely(!is_slab_addr(object))) { free_large_kmalloc(folio, (void *)object); return; } @@ -1094,8 +1094,7 @@ size_t __ksize(const void *object) return 0; folio = virt_to_folio(object); - - if (unlikely(!folio_test_slab(folio))) { + if (unlikely(!is_slab_addr(object))) { if (WARN_ON(folio_size(folio) <= KMALLOC_MAX_CACHE_SIZE)) return 0; if (WARN_ON(object != folio_address(folio))) diff --git a/mm/slub.c b/mm/slub.c index a7dae207c2d2..b69916ab7aa8 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1259,7 +1259,7 @@ static int check_slab(struct kmem_cache *s, struct slab *slab) { int maxobj; - if (!folio_test_slab(slab_folio(slab))) { + if (!is_slab_page(slab)) { slab_err(s, slab, "Not a valid slab page"); return 0; } @@ -1454,7 +1454,7 @@ static noinline bool alloc_debug_processing(struct kmem_cache *s, return true; bad: - if (folio_test_slab(slab_folio(slab))) { + if (is_slab_page(slab)) { /* * If this is a slab page then lets do the best we can * to avoid issues in the future. Marking all objects @@ -1484,7 +1484,7 @@ static inline int free_consistency_checks(struct kmem_cache *s, return 0; if (unlikely(s != slab->slab_cache)) { - if (!folio_test_slab(slab_folio(slab))) { + if (!is_slab_page(slab)) { slab_err(s, slab, "Attempt to free object(0x%p) outside of slab", object); } else if (!slab->slab_cache) { -- 2.42.0.459.ge4e396fd5e-goog