From patchwork Fri Mar 17 10:43:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vlastimil Babka X-Patchwork-Id: 13178863 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 7DB67C7618B for ; Fri, 17 Mar 2023 10:43:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 513ED6B0078; Fri, 17 Mar 2023 06:43:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 44D9A6B007B; Fri, 17 Mar 2023 06:43:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 251DB6B007D; Fri, 17 Mar 2023 06:43:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 0CDE86B0078 for ; Fri, 17 Mar 2023 06:43:28 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id DE3B3AAE84 for ; Fri, 17 Mar 2023 10:43:27 +0000 (UTC) X-FDA: 80578053654.09.4761262 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf01.hostedemail.com (Postfix) with ESMTP id A18BD4001F for ; Fri, 17 Mar 2023 10:43:25 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=rfobxMXN; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=A8esHta5; dmarc=none; spf=pass (imf01.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679049805; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=qGaRszx5m5MV4LTvKa8CX10/5dVJHJJrEA3zOyDBp1g=; b=TuwShTuIctpv+fTxoG/zMbkSz9rK7b7t0EiGUhUBcJIIJGAWkfwbrPtedi9johTypVH6lV Q5gQHPEIhJ5vUTd7hoi3s6wPf2AMla5fQanFkUp+nkhhr1ni/cpwm4cp3fb2vft5RvG+bf erQL3kp3jZaGYoyzTodXGxDMDveCjkc= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=rfobxMXN; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=A8esHta5; dmarc=none; spf=pass (imf01.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679049805; a=rsa-sha256; cv=none; b=TsCXx5i12WU1fXWsev/wavzsJUA6TUAfCMuV4GFjhj0DgNSFuK25d4AcCQScDlVY3ERrtQ qJxq77F9dhM71b0XVerr2AYUIt/IOIKIvC6Qd3OzEDiwp0/pF/Z5yTrwbUBr5dKdk+hly3 dS2Ym0dFkkJthQgLUr3vIB3iAYXIfV8= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id D3ADD1FE62; Fri, 17 Mar 2023 10:43:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1679049802; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qGaRszx5m5MV4LTvKa8CX10/5dVJHJJrEA3zOyDBp1g=; b=rfobxMXNiUA5LdvvrB8bLLFFM8Wu+N4fLxrpje4bcuYb/u8FupYisx5sMUPzVuH331a9tE I36yc5FVwct1GS92zDkInL3aZOTmNM4igDLK2BPYh0OyxoLeWKD1wtrATHQGPi7g9bXjfm gBFNh1eU0q93yd/fBp8rph+gCsic3qc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1679049802; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qGaRszx5m5MV4LTvKa8CX10/5dVJHJJrEA3zOyDBp1g=; b=A8esHta5sd4hYruqYcTmfFoQLhufqcN22xpwszK8r3G0ZlJ+1csam4cy+jfRUSjIoi1LuE xUptyGgow68Z9hAQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 9FDCF13A3E; Fri, 17 Mar 2023 10:43:22 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id cHhuJkpEFGRgdwAAMHmgww (envelope-from ); Fri, 17 Mar 2023 10:43:22 +0000 From: Vlastimil Babka To: Christoph Lameter , David Rientjes , Joonsoo Kim , Pekka Enberg Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>, Roman Gushchin , Andrew Morton , linux-mm@kvack.org, rcu@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, linux-doc@vger.kernel.org, Vlastimil Babka , Lorenzo Stoakes Subject: [PATCH v2 1/6] mm/slob: remove CONFIG_SLOB Date: Fri, 17 Mar 2023 11:43:02 +0100 Message-Id: <20230317104307.29328-2-vbabka@suse.cz> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230317104307.29328-1-vbabka@suse.cz> References: <20230317104307.29328-1-vbabka@suse.cz> MIME-Version: 1.0 X-Rspamd-Queue-Id: A18BD4001F X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: 4xjsaobtsmp6uz1k9888abpnbq96byzs X-HE-Tag: 1679049805-681129 X-HE-Meta: U2FsdGVkX1+Ln3ZS0nva6Bx79R5FN/LUdbGdsSMoss3j2pu8BLjNg/6jpj0AU0AaM+MDhBf9wIqNrce13qDzUhq/4bs5aeu/OtdUuJQJkDDeC7He1+WMwOqwnk4EiY4dCGBWBWv6llCBQsrW0TDgskDiJ2oUjoGnJoz3YZoKmm4y07bH+mPZRsMWs028OnkBNPyAwetnoC/g6Eu7ndLJ4IpE4rkIlVAPfArXSKG1n4oF6HwtKvsQYsbU2Jy60K+InLP1LJHYxLhJacOL/KSbLadu00cuKNlju3Mqo/HRaRCPX669hG44cushljfCDDMAE0jJTkzxl7TOkV+j2Vx8nG0xjY0314UhjHN68ONW5p5fjvaAgz1877teKPWwLIf6wqjvMqUlKJOS6SjSrNdvBvsq7S0BxexKqAF8mObh07jth/YNHaS72f9r5Ac4ESWUbim1hNdm8mlVX7R485YY+RRYF6LjutHQNWi5VE/RR3uQSocjH03l7N63Fm64v092wIiSrNWFuHvd4tsRR0HcjZtlU3aIAzeR1waJz3mqy6o4WAADv+K6hwDmZEvfdHHPsm6JwCf1MP7zrV+terp4MKKkc8OboQfj4D5z8CmERhs3KZX3a7LDQt3eM2NLlsAhmbv0gw453XFWDgfyfLri9m3QtU8tbHVnkg9lUElqFBxMV35RiHKRwD7F3ZWgCvMktJZgp+CLPph4mYhkbxNDrYWEhPD0Fpszlf8pwUlTPVjlzCRsViMRKs95ArTX9JpPi+J4RbkDC3yH2n6rfZEyHjdJ7Wwb7ln38UwLCKCXDr01IwSXD+MlMLMQbn3n/3s/yOfawNUtn9c9xNgPMqJ/1PDtpaFzSpxwHTIZzQK80cO9+qZ/DpKsZiCw8vOYQDCLMme8fw7e+ciTeUO+D9Y+vcSr0s7vyDiEbrwc2/rYrO6qj6ce4k+q5cTMTzD2vtQDAY38aJq3KpEF8ybfvT8 uNArutXA oczxCmuABSgeWTfMUL2x1Ts6kHl3mAMZzO7qbOKamFc/vq4Trbm6CrsAggSgID+UPkxiulhTvydPzl84zAbyqtMYJ3G8BBupKcDDd7ywqW/wUfWUx1YEdOf+Oak9zmjR3wuwkCQRaRjvpxzLeL/1Jc/FnYuWjT+4tTnG2RCLnH0IJH2OZUsRou4H8KslC1UyNvrQ4qMaF/osHJwNeGvt8MFTLLg1IxTq8p/1vSu2NdKv0+DZXIOEiqZCoNRI2AIxnq588PNJ0x+jsYG69WgvLo42LKAJ6VffRj8YS+n+A+6dTIAEUF51MNLHKK2i58pymtoSstlm8o3xfqSMpoUHVR8Bo/4ymiiUOqeOuNOHp2l87XAL87BKHoSvsARrn+5MHjwg9FyKI7q2bu/rSKA2fR68xvDtFi/DZDG6SbHkT53fFRnU= 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: Remove SLOB from Kconfig and Makefile. Everything under #ifdef CONFIG_SLOB, and mm/slob.c is now dead code. Signed-off-by: Vlastimil Babka Acked-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Acked-by: Lorenzo Stoakes Acked-by: Mike Rapoport (IBM) --- init/Kconfig | 2 +- kernel/configs/tiny.config | 1 - mm/Kconfig | 22 ---------------------- mm/Makefile | 2 -- 4 files changed, 1 insertion(+), 26 deletions(-) diff --git a/init/Kconfig b/init/Kconfig index 1fb5f313d18f..72ac3f66bc27 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -973,7 +973,7 @@ config MEMCG config MEMCG_KMEM bool - depends on MEMCG && !SLOB + depends on MEMCG default y config BLK_CGROUP diff --git a/kernel/configs/tiny.config b/kernel/configs/tiny.config index c2f9c912df1c..144b2bd86b14 100644 --- a/kernel/configs/tiny.config +++ b/kernel/configs/tiny.config @@ -7,6 +7,5 @@ CONFIG_KERNEL_XZ=y # CONFIG_KERNEL_LZO is not set # CONFIG_KERNEL_LZ4 is not set # CONFIG_SLAB is not set -# CONFIG_SLOB_DEPRECATED is not set CONFIG_SLUB=y CONFIG_SLUB_TINY=y diff --git a/mm/Kconfig b/mm/Kconfig index 4751031f3f05..669399ab693c 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -238,30 +238,8 @@ config SLUB and has enhanced diagnostics. SLUB is the default choice for a slab allocator. -config SLOB_DEPRECATED - depends on EXPERT - bool "SLOB (Simple Allocator - DEPRECATED)" - depends on !PREEMPT_RT - help - Deprecated and scheduled for removal in a few cycles. SLUB - recommended as replacement. CONFIG_SLUB_TINY can be considered - on systems with 16MB or less RAM. - - If you need SLOB to stay, please contact linux-mm@kvack.org and - people listed in the SLAB ALLOCATOR section of MAINTAINERS file, - with your use case. - - SLOB replaces the stock allocator with a drastically simpler - allocator. SLOB is generally more space efficient but - does not perform as well on large systems. - endchoice -config SLOB - bool - default y - depends on SLOB_DEPRECATED - config SLUB_TINY bool "Configure SLUB for minimal memory footprint" depends on SLUB && EXPERT diff --git a/mm/Makefile b/mm/Makefile index 8e105e5b3e29..e347958fc6b2 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -22,7 +22,6 @@ KCSAN_INSTRUMENT_BARRIERS := y # flaky coverage that is not a function of syscall inputs. E.g. slab is out of # free pages, or a task is migrated between nodes. KCOV_INSTRUMENT_slab_common.o := n -KCOV_INSTRUMENT_slob.o := n KCOV_INSTRUMENT_slab.o := n KCOV_INSTRUMENT_slub.o := n KCOV_INSTRUMENT_page_alloc.o := n @@ -81,7 +80,6 @@ obj-$(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP) += hugetlb_vmemmap.o obj-$(CONFIG_NUMA) += mempolicy.o obj-$(CONFIG_SPARSEMEM) += sparse.o obj-$(CONFIG_SPARSEMEM_VMEMMAP) += sparse-vmemmap.o -obj-$(CONFIG_SLOB) += slob.o obj-$(CONFIG_MMU_NOTIFIER) += mmu_notifier.o obj-$(CONFIG_KSM) += ksm.o obj-$(CONFIG_PAGE_POISONING) += page_poison.o From patchwork Fri Mar 17 10:43:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vlastimil Babka X-Patchwork-Id: 13178862 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 A619FC74A5B for ; Fri, 17 Mar 2023 10:43:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 560AB6B0074; Fri, 17 Mar 2023 06:43:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5100A6B0078; Fri, 17 Mar 2023 06:43:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D76B6B007B; Fri, 17 Mar 2023 06:43:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 164EE6B0074 for ; Fri, 17 Mar 2023 06:43:27 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C3A76161751 for ; Fri, 17 Mar 2023 10:43:26 +0000 (UTC) X-FDA: 80578053612.17.EDC75E4 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by imf20.hostedemail.com (Postfix) with ESMTP id B507B1C001E for ; Fri, 17 Mar 2023 10:43:24 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=IIfCQbwF; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=JiVFg+HO; spf=pass (imf20.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679049805; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=NFIOCOGE4+gnWEsQLJoiR09v/cWZg0CYXPe4OxiWK88=; b=Qi8JKt+X9HjGQznEOCZDutIFBkQ7IfIuURPUHyBeE8bE47QlLBemNp7CSaTabjYmOZUgHz ZobKnYHOjjj/TXVUGSUu6GQZbT8knCxSuWku+bFmjkpQi2iphlAor6cYWZR9d0HFmpi7kU Aov/Th5ETm0AUFUyamgBogG7PWxCzZY= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=IIfCQbwF; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=JiVFg+HO; spf=pass (imf20.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679049805; a=rsa-sha256; cv=none; b=5/nbbZnLYL3xNnmIXDgUWP056EqrMVKVrc/q/wJ5zn9S/M0pJOuvDeJzeQDOUltj5levJ3 PcjOgrHlV+Jpu678mMKj3WgmNN3VebKJQ8AokOU4fCZbRND8Zk0IiYctt77AZfmozjghFv GKnKFTfFjGq4JVRTXbEu+4GoCu+eMnM= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 10CAC21A6F; Fri, 17 Mar 2023 10:43:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1679049803; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NFIOCOGE4+gnWEsQLJoiR09v/cWZg0CYXPe4OxiWK88=; b=IIfCQbwFMxyjvD3/CEB/1oAWxBEiCEe8ZVXYc+BxqdDZr4rEAmVIICMlkfntfyZG0iIpNa pvMgHTtIa0kumpAKtZ0ZVfIPLijpm6W+EI3FSGS70KqSiQ3RY6VdwY8+X1pSIkczRCWqtz vNEMZoJrBFinL+sXyaunDXV0457vZiQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1679049803; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NFIOCOGE4+gnWEsQLJoiR09v/cWZg0CYXPe4OxiWK88=; b=JiVFg+HObo45Zdm5MnMt6MuM1rc2U6pKEKZS8SAZjTDjnbme9BJNB7mMYm+5Dwu42It35u TYOaJ1XwSLDUaZCg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id D26751346F; Fri, 17 Mar 2023 10:43:22 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id aNzYMkpEFGRgdwAAMHmgww (envelope-from ); Fri, 17 Mar 2023 10:43:22 +0000 From: Vlastimil Babka To: Christoph Lameter , David Rientjes , Joonsoo Kim , Pekka Enberg Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>, Roman Gushchin , Andrew Morton , linux-mm@kvack.org, rcu@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, linux-doc@vger.kernel.org, Vlastimil Babka , Lorenzo Stoakes Subject: [PATCH v2 2/6] mm, page_flags: remove PG_slob_free Date: Fri, 17 Mar 2023 11:43:03 +0100 Message-Id: <20230317104307.29328-3-vbabka@suse.cz> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230317104307.29328-1-vbabka@suse.cz> References: <20230317104307.29328-1-vbabka@suse.cz> MIME-Version: 1.0 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: B507B1C001E X-Rspam-User: X-Stat-Signature: rmuatpu6ypr7dfyf3s9jdfnb1xwpupz6 X-HE-Tag: 1679049804-481952 X-HE-Meta: U2FsdGVkX1/NW9SdkfHqrtOHLN+nmvVZbHlxQ4Dx4S0xloqV/gUV2bSWkOn8QkI488dTmyt3I3jLSeBEhFmM2qCGuhFaX3OwIHQordLnxEMwD2CBr+GuZWqYIG2S2xiX5qymWzCTQfkhK0wZI9mjRbPnQJBeRuqbtV/vqNMaA769mzvhGwQV30AMZqqebvgAatMWYhUln+rKXvs9VRQmAq7fDKngggQF+zjO5zLxmRpSxpcNT2ONtHv8WqU+jYWizZNxfmzLb990UQtK9Ews2iayd3pp1RFbOafOsL5dLTohZvgvGjNNvenzNPDEGG5uYlM1lyMghs+9kKQnB6rUkrWKjlLxez0/5KsSAQPWnK0RDPY/SMlq+vSWXVMwqxyee6Dpi4TRP7iL1OA2bVf2MOuSz2ypoDfrl+9CSt0vJSGBIs+xqbMaKzN50vIzddFR4h91MDkC68NbXa/2Fa+9zPm0N9q01FiaYx8JgifrGDGmxPTKVCbeKZzOZDGWXzI8wsIsjPs22G6nOt3Ogp8+5M0AX1K3dU3xMH7G34eZxQl6mNISd6SldIKhvExnsTcNrpFzoGzmvFOx/68xBbHMXgKdXQV1Re8W7xSCPQCEeJiWBmTn3DtlGekcR7lgJ0PsQJgT5eP0f8tBrGWdTc1EDuP0Ye9ViPqCh7YJcN1KjPBCIYimbIOgrsAuPyWLMko0R6edBVIKT5lewKABWiqjl99/ajCgosqyPQGzanGe6dL+lHiwWVeHBoIELLp0vUc/FDfTGDEorbSFsorgahhj3I9Y9t2hkikI9e/oGFQyZH+15AvO6KtiKGEsDhh2YtNIp5y8TpKlqIy9H4pcD/zD79IDXDmHGIYn+suhk/kYRzfIwDSifrIKn8ol52++84VGC1u/mRI4mA5/uAPH0sO9bFjFr0L+oMdo+crJhT6DMYJJaaNEuuEtcIzvCq0tMeGDG3vBWU9WVZelTvzZ0vX fnB+iHLk /Dp1Z7q4G+FPEQWBSY51OiRdn/RvLPY8wcJKaOBrmYkj0uMrDcU3em1rI3NwzGlIOvymHPKRFDWIIKyxD8VntokEplsU4oNf6/1HDIBzwVxqz6G7RKILnUoiUIOn33NgaPYUxNy44eCkpQXoC/fy7HAGIbMGV2FnCVVTFmz+xFxN2TEvbZZ9A/ltRMoRXHRPJtKVkeihQOsWH2kwI+hOPqjzexH1dW4RD5fg2pkNC/Aix7An2OzDZ+gw0yRSUXn78mpCxmeRV/kv0V2xpXkk4FUZOdgvQuf2oWZKzcnxYj3m3itZyRRDbeVNOkrTHqCzxkdb7QLLF8pIMrcn88hpPKFTPPw== 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: With SLOB removed we no longer need the PG_slob_free alias for PG_private. Also update tools/mm/page-types. Signed-off-by: Vlastimil Babka Acked-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Acked-by: Lorenzo Stoakes Acked-by: Mike Rapoport (IBM) --- include/linux/page-flags.h | 4 ---- tools/mm/page-types.c | 6 +----- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index a7e3a3405520..2bdc41cb0594 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -174,9 +174,6 @@ enum pageflags { /* Remapped by swiotlb-xen. */ PG_xen_remapped = PG_owner_priv_1, - /* SLOB */ - PG_slob_free = PG_private, - #ifdef CONFIG_MEMORY_FAILURE /* * Compound pages. Stored in first tail page's flags. @@ -483,7 +480,6 @@ PAGEFLAG(Active, active, PF_HEAD) __CLEARPAGEFLAG(Active, active, PF_HEAD) PAGEFLAG(Workingset, workingset, PF_HEAD) TESTCLEARFLAG(Workingset, workingset, PF_HEAD) __PAGEFLAG(Slab, slab, PF_NO_TAIL) -__PAGEFLAG(SlobFree, slob_free, PF_NO_TAIL) PAGEFLAG(Checked, checked, PF_NO_COMPOUND) /* Used by some filesystems */ /* Xen */ diff --git a/tools/mm/page-types.c b/tools/mm/page-types.c index 381dcc00cb62..8d5595b6c59f 100644 --- a/tools/mm/page-types.c +++ b/tools/mm/page-types.c @@ -85,7 +85,6 @@ */ #define KPF_ANON_EXCLUSIVE 47 #define KPF_READAHEAD 48 -#define KPF_SLOB_FREE 49 #define KPF_SLUB_FROZEN 50 #define KPF_SLUB_DEBUG 51 #define KPF_FILE 61 @@ -141,7 +140,6 @@ static const char * const page_flag_names[] = { [KPF_ANON_EXCLUSIVE] = "d:anon_exclusive", [KPF_READAHEAD] = "I:readahead", - [KPF_SLOB_FREE] = "P:slob_free", [KPF_SLUB_FROZEN] = "A:slub_frozen", [KPF_SLUB_DEBUG] = "E:slub_debug", @@ -478,10 +476,8 @@ static uint64_t expand_overloaded_flags(uint64_t flags, uint64_t pme) if ((flags & BIT(ANON)) && (flags & BIT(MAPPEDTODISK))) flags ^= BIT(MAPPEDTODISK) | BIT(ANON_EXCLUSIVE); - /* SLOB/SLUB overload several page flags */ + /* SLUB overloads several page flags */ if (flags & BIT(SLAB)) { - if (flags & BIT(PRIVATE)) - flags ^= BIT(PRIVATE) | BIT(SLOB_FREE); if (flags & BIT(ACTIVE)) flags ^= BIT(ACTIVE) | BIT(SLUB_FROZEN); if (flags & BIT(ERROR)) From patchwork Fri Mar 17 10:43:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vlastimil Babka X-Patchwork-Id: 13178864 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 19F2BC76195 for ; Fri, 17 Mar 2023 10:43:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9F6B46B007B; Fri, 17 Mar 2023 06:43:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 957E66B007D; Fri, 17 Mar 2023 06:43:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 81DC46B007E; Fri, 17 Mar 2023 06:43:28 -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 6D7636B007D for ; Fri, 17 Mar 2023 06:43:28 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 398901A1727 for ; Fri, 17 Mar 2023 10:43:28 +0000 (UTC) X-FDA: 80578053696.04.952ED1A Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf25.hostedemail.com (Postfix) with ESMTP id 50FF4A0013 for ; Fri, 17 Mar 2023 10:43:26 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=NmQ1hyth; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=+NeEMil1; spf=pass (imf25.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679049806; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=deQFA7TD3kp7a2tFPZHUMYv9MT3jjYq+TC4fiGinDEs=; b=NDnEBycxHMcCnMW2oHt5X5McfM5Z3q+caUHnr6E6qKyVacIELQAmTY5a2R6TDYnQvx2LJQ 0S27IU6p0L07kbeaVLHDJQxR0z32BTPg8HIFQCSfAQCAcpXYhXRB5fw/MpD6TRz9CQaeZE Nw6kXz6wqS7sq2gWmMc8ZCnsr399Gos= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=NmQ1hyth; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=+NeEMil1; spf=pass (imf25.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679049806; a=rsa-sha256; cv=none; b=zcd9uXkhf3/BUJGjSkB8LQ60nccX1X85xQIRx7qvoEFhhqcUwGSWSt8Bkb4DEpmfLGlOd8 ewt5vFQnTmE1S/lDcOlXPXpWhmmtxwb5npwozZy6ZEWypNnemrGZE+aS6EUx4SGLVT36BK 7rsehinHGl9KKaohTIhb9KKEP7c281M= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 449631FE73; Fri, 17 Mar 2023 10:43:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1679049803; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=deQFA7TD3kp7a2tFPZHUMYv9MT3jjYq+TC4fiGinDEs=; b=NmQ1hyth5qRE678Uo3LQnyTdg0QQSYpHOUPH7Uhuc4G43s/Q0vvr/DUvri19hj91joa5LE hFCEleVrUuJbUsG+BimyBZBOCIfxBJiIDV80Z9fsxXw1oySqpE4cp+/zsI1b/NzEN98+ko T131W4JpotVd1/+2SSdSDPm2mvLWoZM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1679049803; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=deQFA7TD3kp7a2tFPZHUMYv9MT3jjYq+TC4fiGinDEs=; b=+NeEMil1mpgbidAjq5vNwGwIMLmjxya2mK0WEBJXywic5vP42eTHWjt9xpdFzGx4iMCyG/ Za3BUsW4qdht6PCg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 1478B13A3E; Fri, 17 Mar 2023 10:43:23 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id gEpjBEtEFGRgdwAAMHmgww (envelope-from ); Fri, 17 Mar 2023 10:43:23 +0000 From: Vlastimil Babka To: Christoph Lameter , David Rientjes , Joonsoo Kim , Pekka Enberg Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>, Roman Gushchin , Andrew Morton , linux-mm@kvack.org, rcu@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, linux-doc@vger.kernel.org, Vlastimil Babka , Lorenzo Stoakes Subject: [PATCH v2 3/6] mm, pagemap: remove SLOB and SLQB from comments and documentation Date: Fri, 17 Mar 2023 11:43:04 +0100 Message-Id: <20230317104307.29328-4-vbabka@suse.cz> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230317104307.29328-1-vbabka@suse.cz> References: <20230317104307.29328-1-vbabka@suse.cz> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: 6xi7o771b553cp7jo5tb6w88cb5mq6um X-Rspamd-Queue-Id: 50FF4A0013 X-HE-Tag: 1679049806-721024 X-HE-Meta: U2FsdGVkX1+bGfAfQ4EHQvR2jZz6kJ/8iYlvrzUBPmy/Cue40krH8DW4VIZSCN/K1folW8eSUfq65fpqb3WAr6aJnxdjNlNfwJL5F8oIIWolT7D9iKBW4G3881iSpaE+h4dQkC5jn8xDlGNErKTLw1J2yGqi6xYzNVnCkDHBcBH+fJHXXTCuoGdGvLO4KgzAtKC/IPscf/Zs5w0nIIR5p7Hbnu5hoXQ3IhkfBnqX10pRmOkOiEs3/Plhotb2vTexmUckoN0DE6YjzQH7lKwTPwTT8qln/Zl23gG5IYOWY6EPk4M2QvMV91PuOkICi6DIzJw2YZo52RqfosPNZRJnZ3CNf4VXTddIp/2HyebH1ZPQ9GWzexpnLnysBJ9cUaz7cKkWU7Orxo5vCcAYQRcfMrciss0olCzc9vVWL+uRz/BFhnyenDOTkeLoCd/N2kEo+ehlFZvrQKiFdHx9S3aFNr/JFhzw4TTbLQ4QWS/HiXVBlNQAWEM+NlHmBZCEunzW2e6796B9K283C7+ufHrJ6zt3JPBjyADpwUQXW5pXEldZRgjLZ0W4Loj/dxgX2PmDLjf1RRefEj4dQzFsf84Y3ZzMvoeeO7L2JRVJ1wHNVA70jqqLHiia4kAkIanDKtDJ6Opmrnvx/RkqT1cI9LPahwNI2nbPW9WFDJQwXD4G+5KObOw7HzGSWL6EmEqiQ9NMCVbHPBkqeTTQhHrimO8+VEQHlfjucKGLl4xzNCdXEgaCjiOd8Vdm/GgUpmPrj/A7uXNZ/ZDh8dv9WxDSTC7IvP9eMRgVdkk5lPzPYmNcFMNpN1vUTIJ1CZg9A0UxqGXgMXCOqRr/bAv/3efEiRPq4TDuxE6Ht+vJZwvliQXpVvP4oQhA/bI+yznXKDRlGfjh+nGRZPnBW15swRre2zNccliS0k3bZCVMM1KboGYsKs6alrp6cXBjYlssD2wp7USmgpWsmRbwu1XYgPXCA7r WbyBxZqz 6OisEj+ypLmEN4KO8Ir4dN9rC6LgbPcq7/up6PqGJFFPC6jsiFMgdQwjdYbwyOoVtV7JlXLvckmn5fkgPLfK68OEytF2OA4yzgIRaAhjB1yqnZ+m3q+Epp5ef2UjADq5TfllppwBNg3VpIzCQDNShW+G34D1ERCptRpcd6fvhnTDPlMe/6zeJt5M601LITSvCY2M+AZs38FQK72V+IkT56l4jSTuRBdLYUgYplLOLQRWwiKsZNV6Ry8tREMB3y9E8OIHyMY5+VdOc30DuorgbAvwtn2y4T8qbZdgif5T1m4O+pr8= 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: SLOB has been removed and SLQB never merged, so remove their mentions from comments and documentation of pagemap. In stable_page_flags() also correct an outdated comment mentioning that PageBuddy() means a page->_refcount of -1, and remove compound_head() from the PageSlab() call, as that's already implicitly there thanks to PF_NO_TAIL. Signed-off-by: Vlastimil Babka Acked-by: Lorenzo Stoakes Acked-by: Mike Rapoport (IBM) --- Documentation/admin-guide/mm/pagemap.rst | 6 +++--- fs/proc/page.c | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Documentation/admin-guide/mm/pagemap.rst b/Documentation/admin-guide/mm/pagemap.rst index b5f970dc91e7..c8f380271cad 100644 --- a/Documentation/admin-guide/mm/pagemap.rst +++ b/Documentation/admin-guide/mm/pagemap.rst @@ -91,9 +91,9 @@ Short descriptions to the page flags The page is being locked for exclusive access, e.g. by undergoing read/write IO. 7 - SLAB - The page is managed by the SLAB/SLOB/SLUB/SLQB kernel memory allocator. - When compound page is used, SLUB/SLQB will only set this flag on the head - page; SLOB will not flag it at all. + The page is managed by the SLAB/SLUB kernel memory allocator. + When compound page is used, either will only set this flag on the head + page. 10 - BUDDY A free memory block managed by the buddy system allocator. The buddy system organizes free memory in blocks of various orders. diff --git a/fs/proc/page.c b/fs/proc/page.c index 6249c347809a..195b077c0fac 100644 --- a/fs/proc/page.c +++ b/fs/proc/page.c @@ -125,7 +125,7 @@ u64 stable_page_flags(struct page *page) /* * pseudo flags for the well known (anonymous) memory mapped pages * - * Note that page->_mapcount is overloaded in SLOB/SLUB/SLQB, so the + * Note that page->_mapcount is overloaded in SLAB, so the * simple test in page_mapped() is not enough. */ if (!PageSlab(page) && page_mapped(page)) @@ -165,9 +165,8 @@ u64 stable_page_flags(struct page *page) /* - * Caveats on high order pages: page->_refcount will only be set - * -1 on the head page; SLUB/SLQB do the same for PG_slab; - * SLOB won't set PG_slab at all on compound pages. + * Caveats on high order pages: PG_buddy and PG_slab will only be set + * on the head page. */ if (PageBuddy(page)) u |= 1 << KPF_BUDDY; @@ -185,7 +184,7 @@ u64 stable_page_flags(struct page *page) u |= kpf_copy_bit(k, KPF_LOCKED, PG_locked); u |= kpf_copy_bit(k, KPF_SLAB, PG_slab); - if (PageTail(page) && PageSlab(compound_head(page))) + if (PageTail(page) && PageSlab(page)) u |= 1 << KPF_SLAB; u |= kpf_copy_bit(k, KPF_ERROR, PG_error); From patchwork Fri Mar 17 10:43:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vlastimil Babka X-Patchwork-Id: 13178865 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 638D0C74A5B for ; Fri, 17 Mar 2023 10:43:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9F5776B007E; Fri, 17 Mar 2023 06:43:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9AB076B0082; Fri, 17 Mar 2023 06:43:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 781AB6B0081; Fri, 17 Mar 2023 06:43:29 -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 659726B007E for ; Fri, 17 Mar 2023 06:43:29 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 2BE8F14182A for ; Fri, 17 Mar 2023 10:43:29 +0000 (UTC) X-FDA: 80578053738.23.0417700 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf19.hostedemail.com (Postfix) with ESMTP id 38E351A0009 for ; Fri, 17 Mar 2023 10:43:26 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=MZZjD9hV; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=T6CRAZ6R; spf=pass (imf19.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679049807; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=opZ9dJXQ/gPy1wKFz1HBnlxilBrCid46x5IMRJNZcJ0=; b=Kxki+z24IkZaxbOZCLzjfTn4u7e8BqYGXGC/Gc6Ju6quxLX/pOXV6C2Tha/6v6E6clcVC7 PE+mp2NDEVR8oQiEPtRMaEt2gFpTvVNcPHaCMg7Wqm9udtTR3Ac+PW/BM+w46YZ8XgJaj6 E0Cv8eNx4iz4zI4NQ7jFlxs/RwoprfQ= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=MZZjD9hV; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=T6CRAZ6R; spf=pass (imf19.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679049807; a=rsa-sha256; cv=none; b=w/m+VfKqbQMYuqjBiPQIuirvS2YnMhIu08ybAsLkLmGZ/RivHDpCOZcY7sORerlfRjMkX+ sRMFkIA3tGu3DsLY3I09n6Z7ZgQpnz1iDWUWIs+5wYROZVYkCI3laRizb+YZ8OWhWSDaZb gugvh+/sZ7KZ6h1OrxZCPw21eCRWKxg= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 833B11FE24; Fri, 17 Mar 2023 10:43:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1679049803; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=opZ9dJXQ/gPy1wKFz1HBnlxilBrCid46x5IMRJNZcJ0=; b=MZZjD9hVHM7gKzHwGK4akYEL8msOyHYMlyDt1C5GfocojC6f+NXkIb+al3LmVC+wD1dlw6 SOQ490rm0HAqVokXr+TPDIl3hoIBWf/9pfJWq+JLan9h7JX7I+7swrBGOo8d+1QnzOMcDw KAAFqj4QupURTMJrCxmCwiMCbNG6WD8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1679049803; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=opZ9dJXQ/gPy1wKFz1HBnlxilBrCid46x5IMRJNZcJ0=; b=T6CRAZ6RCxmyHubQmeWmaZWKtEYx5DoL+HGigMmLs233TXhuIdl+b8XlcMYNTVTGiIpPxv fWFFC4pxQr+iy4CQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 4B37E1346F; Fri, 17 Mar 2023 10:43:23 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id MJR6EUtEFGRgdwAAMHmgww (envelope-from ); Fri, 17 Mar 2023 10:43:23 +0000 From: Vlastimil Babka To: Christoph Lameter , David Rientjes , Joonsoo Kim , Pekka Enberg Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>, Roman Gushchin , Andrew Morton , linux-mm@kvack.org, rcu@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, linux-doc@vger.kernel.org, Vlastimil Babka , Lorenzo Stoakes Subject: [PATCH v2 4/6] mm/slab: remove CONFIG_SLOB code from slab common code Date: Fri, 17 Mar 2023 11:43:05 +0100 Message-Id: <20230317104307.29328-5-vbabka@suse.cz> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230317104307.29328-1-vbabka@suse.cz> References: <20230317104307.29328-1-vbabka@suse.cz> MIME-Version: 1.0 X-Rspamd-Queue-Id: 38E351A0009 X-Stat-Signature: f4w613rs8smsygxhwmmuqby3qi9kk86d X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1679049806-401185 X-HE-Meta: U2FsdGVkX18+iwGQK+YJ2TdiS/RAL6L7xM4lipSMI8B9k90vnGpD6P2BJEQs4D396zmLZDsc6KHgY6RQX1dm5HJxtULHY9zDXf5AJw8kHDZnwkOMgU4Hfa6KBoXLT9ooCdh+Vfgn05iu8VTIHylZdrI4uSnKZ7S2M6FxZwLZLFSLG1jk7dBYj3MPpZmZxSH8gQAc/4cNAWFi4lZ6EJIcCv8S5w5PXgq1YoI90NjLTQKLFQj3TTNi7/TreotXjiZzTJHuqLJglHDcsMqm4mnlqxM2UnwH/rPefDAQX4iECGGKlXbxSiVAwU5Cn+fj/sAZKje473ntii6zCAspSxOwuK57WuIH6uX9+RytVS43Dt98iGk+sj9frYumIiDqIJgctMC6Z4WGI2muFME+SnZOZXL7Wy53azpDR/n/U0AvhIL4tugUYi0XBvkwuM2i4WfHxIkkHbbRrUjF4yPe2EGZXoTcnZ0nk8+dSCKL6RTPI6ftTCZuvwfGxRrWIzlUErM2Runx/ENiTH0sCU5urYdshAuWbi0RE8x0QBn2M6TgUorv1zPH6yY/LVaxhEB7mbInXH4NcEE2zIYBVx4EmAvrf6Zsr8V/97UsfMc3KS5AHeSvwrkowQ6YUzlddH7ytGJVTpAQ9RVYZHGeibRrtBkxZFUTNvPwG5sOBRSEZ+Kk+w0LRNIlQb44UtInpiPk6FFlNqK1GveOdsdZm7rWhe3hrU5DmUXjEft3zo5L2Rw2DQxDIJIrxEoOxXKkTVOZ/K3mHHsfHP+60O9RQz2diCJQD6Rp0LFpxDomuuUic+YnGq18g6B2d/dABIDLd73Mnl1ki2Mwn9y1Q4it4XfkKfJ5T722mzZMvprfYHtPY+LbimfnY6OFNAvTGW1coyvKd9xkkQm89OsKSnrUZVbdhyS36grNxYOUBlXaTS2g3v4elA7zXtHAVUMqs7e0zp2rGYSA4GTZJuW0IOm92mycrTA iIIrL7eK T+LGSCAeNuTLh0cmmEKqwMpcAkXsLz6+XpETC7cEV107ceACAX5P/NkGYSTZkFsgrQpSRcpVAgcJX0LGVJfm8YHVSJ12ry5u0oNizTEQH1AtGttFP63tdvbJyH4YFkbkHmrCDmccL7SAmWTZOygXoRREgBM51p/P8OzhUpCzggd4GefzTPZrXdPPkSOQ1O7qgGrgrvhZ77iBjtrfeWB5oP1MZVvh1KamdNl73yp/qSXnsNXswtzTt83sAiOB/bCdQAlN/m7AH1RZq80/5EElKmCNf2XCqu/9gp1mWEGdUvj+QrtpLIkY38bzFftH99dTlVgtf2zEY6wPgidyVC5ahZ43Ty2V6fnklQ3O5 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: CONFIG_SLOB has been removed from Kconfig. Remove code and #ifdef's specific to SLOB in the slab headers and common code. Signed-off-by: Vlastimil Babka Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Acked-by: Lorenzo Stoakes Acked-by: Mike Rapoport (IBM) --- include/linux/slab.h | 39 ---------------------------- mm/slab.h | 61 -------------------------------------------- mm/slab_common.c | 2 -- 3 files changed, 102 deletions(-) diff --git a/include/linux/slab.h b/include/linux/slab.h index 45af70315a94..7f645a4c1298 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -298,19 +298,6 @@ static inline unsigned int arch_slab_minalign(void) #endif #endif -#ifdef CONFIG_SLOB -/* - * SLOB passes all requests larger than one page to the page allocator. - * No kmalloc array is necessary since objects of different sizes can - * be allocated from the same page. - */ -#define KMALLOC_SHIFT_HIGH PAGE_SHIFT -#define KMALLOC_SHIFT_MAX (MAX_ORDER + PAGE_SHIFT - 1) -#ifndef KMALLOC_SHIFT_LOW -#define KMALLOC_SHIFT_LOW 3 -#endif -#endif - /* Maximum allocatable size */ #define KMALLOC_MAX_SIZE (1UL << KMALLOC_SHIFT_MAX) /* Maximum size for which we actually use a slab cache */ @@ -366,7 +353,6 @@ enum kmalloc_cache_type { NR_KMALLOC_TYPES }; -#ifndef CONFIG_SLOB extern struct kmem_cache * kmalloc_caches[NR_KMALLOC_TYPES][KMALLOC_SHIFT_HIGH + 1]; @@ -458,7 +444,6 @@ static __always_inline unsigned int __kmalloc_index(size_t size, } static_assert(PAGE_SHIFT <= 20); #define kmalloc_index(s) __kmalloc_index(s, true) -#endif /* !CONFIG_SLOB */ void *__kmalloc(size_t size, gfp_t flags) __assume_kmalloc_alignment __alloc_size(1); @@ -487,10 +472,6 @@ void kmem_cache_free(struct kmem_cache *s, void *objp); void kmem_cache_free_bulk(struct kmem_cache *s, size_t size, void **p); int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size, void **p); -/* - * Caller must not use kfree_bulk() on memory not originally allocated - * by kmalloc(), because the SLOB allocator cannot handle this. - */ static __always_inline void kfree_bulk(size_t size, void **p) { kmem_cache_free_bulk(NULL, size, p); @@ -567,7 +548,6 @@ void *kmalloc_large_node(size_t size, gfp_t flags, int node) __assume_page_align * Try really hard to succeed the allocation but fail * eventually. */ -#ifndef CONFIG_SLOB static __always_inline __alloc_size(1) void *kmalloc(size_t size, gfp_t flags) { if (__builtin_constant_p(size) && size) { @@ -583,17 +563,7 @@ static __always_inline __alloc_size(1) void *kmalloc(size_t size, gfp_t flags) } return __kmalloc(size, flags); } -#else -static __always_inline __alloc_size(1) void *kmalloc(size_t size, gfp_t flags) -{ - if (__builtin_constant_p(size) && size > KMALLOC_MAX_CACHE_SIZE) - return kmalloc_large(size, flags); - - return __kmalloc(size, flags); -} -#endif -#ifndef CONFIG_SLOB static __always_inline __alloc_size(1) void *kmalloc_node(size_t size, gfp_t flags, int node) { if (__builtin_constant_p(size) && size) { @@ -609,15 +579,6 @@ static __always_inline __alloc_size(1) void *kmalloc_node(size_t size, gfp_t fla } return __kmalloc_node(size, flags, node); } -#else -static __always_inline __alloc_size(1) void *kmalloc_node(size_t size, gfp_t flags, int node) -{ - if (__builtin_constant_p(size) && size > KMALLOC_MAX_CACHE_SIZE) - return kmalloc_large_node(size, flags, node); - - return __kmalloc_node(size, flags, node); -} -#endif /** * kmalloc_array - allocate memory for an array. diff --git a/mm/slab.h b/mm/slab.h index 43966aa5fadf..399966b3ce52 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -51,14 +51,6 @@ struct slab { }; unsigned int __unused; -#elif defined(CONFIG_SLOB) - - struct list_head slab_list; - void *__unused_1; - void *freelist; /* first free block */ - long units; - unsigned int __unused_2; - #else #error "Unexpected slab allocator configured" #endif @@ -72,11 +64,7 @@ struct slab { #define SLAB_MATCH(pg, sl) \ static_assert(offsetof(struct page, pg) == offsetof(struct slab, sl)) SLAB_MATCH(flags, __page_flags); -#ifndef CONFIG_SLOB SLAB_MATCH(compound_head, slab_cache); /* Ensure bit 0 is clear */ -#else -SLAB_MATCH(compound_head, slab_list); /* Ensure bit 0 is clear */ -#endif SLAB_MATCH(_refcount, __page_refcount); #ifdef CONFIG_MEMCG SLAB_MATCH(memcg_data, memcg_data); @@ -200,31 +188,6 @@ static inline size_t slab_size(const struct slab *slab) return PAGE_SIZE << slab_order(slab); } -#ifdef CONFIG_SLOB -/* - * Common fields provided in kmem_cache by all slab allocators - * This struct is either used directly by the allocator (SLOB) - * or the allocator must include definitions for all fields - * provided in kmem_cache_common in their definition of kmem_cache. - * - * Once we can do anonymous structs (C11 standard) we could put a - * anonymous struct definition in these allocators so that the - * separate allocations in the kmem_cache structure of SLAB and - * SLUB is no longer needed. - */ -struct kmem_cache { - unsigned int object_size;/* The original size of the object */ - unsigned int size; /* The aligned/padded/added on size */ - unsigned int align; /* Alignment as calculated */ - slab_flags_t flags; /* Active flags on the slab */ - const char *name; /* Slab name for sysfs */ - int refcount; /* Use counter */ - void (*ctor)(void *); /* Called on object slot creation */ - struct list_head list; /* List of all slab caches on the system */ -}; - -#endif /* CONFIG_SLOB */ - #ifdef CONFIG_SLAB #include #endif @@ -274,7 +237,6 @@ extern const struct kmalloc_info_struct { unsigned int size; } kmalloc_info[]; -#ifndef CONFIG_SLOB /* Kmalloc array related functions */ void setup_kmalloc_cache_index_table(void); void create_kmalloc_caches(slab_flags_t); @@ -286,7 +248,6 @@ void *__kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, int node, size_t orig_size, unsigned long caller); void __kmem_cache_free(struct kmem_cache *s, void *x, unsigned long caller); -#endif gfp_t kmalloc_fix_flags(gfp_t flags); @@ -303,33 +264,16 @@ extern void create_boot_cache(struct kmem_cache *, const char *name, int slab_unmergeable(struct kmem_cache *s); struct kmem_cache *find_mergeable(unsigned size, unsigned align, slab_flags_t flags, const char *name, void (*ctor)(void *)); -#ifndef CONFIG_SLOB struct kmem_cache * __kmem_cache_alias(const char *name, unsigned int size, unsigned int align, slab_flags_t flags, void (*ctor)(void *)); slab_flags_t kmem_cache_flags(unsigned int object_size, slab_flags_t flags, const char *name); -#else -static inline struct kmem_cache * -__kmem_cache_alias(const char *name, unsigned int size, unsigned int align, - slab_flags_t flags, void (*ctor)(void *)) -{ return NULL; } - -static inline slab_flags_t kmem_cache_flags(unsigned int object_size, - slab_flags_t flags, const char *name) -{ - return flags; -} -#endif static inline bool is_kmalloc_cache(struct kmem_cache *s) { -#ifndef CONFIG_SLOB return (s->flags & SLAB_KMALLOC); -#else - return false; -#endif } /* Legal flag mask for kmem_cache_create(), for various configurations */ @@ -634,7 +578,6 @@ static inline void memcg_slab_free_hook(struct kmem_cache *s, struct slab *slab, } #endif /* CONFIG_MEMCG_KMEM */ -#ifndef CONFIG_SLOB static inline struct kmem_cache *virt_to_cache(const void *obj) { struct slab *slab; @@ -684,8 +627,6 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x) void free_large_kmalloc(struct folio *folio, void *object); -#endif /* CONFIG_SLOB */ - size_t __ksize(const void *objp); static inline size_t slab_ksize(const struct kmem_cache *s) @@ -777,7 +718,6 @@ static inline void slab_post_alloc_hook(struct kmem_cache *s, memcg_slab_post_alloc_hook(s, objcg, flags, size, p); } -#ifndef CONFIG_SLOB /* * The slab lists for all objects. */ @@ -824,7 +764,6 @@ static inline struct kmem_cache_node *get_node(struct kmem_cache *s, int node) for (__node = 0; __node < nr_node_ids; __node++) \ if ((__n = get_node(__s, __node))) -#endif #if defined(CONFIG_SLAB) || defined(CONFIG_SLUB_DEBUG) void dump_unreclaimable_slab(void); diff --git a/mm/slab_common.c b/mm/slab_common.c index bf4e777cfe90..1522693295f5 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -625,7 +625,6 @@ void kmem_dump_obj(void *object) EXPORT_SYMBOL_GPL(kmem_dump_obj); #endif -#ifndef CONFIG_SLOB /* Create a cache during boot when no slab services are available yet */ void __init create_boot_cache(struct kmem_cache *s, const char *name, unsigned int size, slab_flags_t flags, @@ -1079,7 +1078,6 @@ void *kmalloc_node_trace(struct kmem_cache *s, gfp_t gfpflags, return ret; } EXPORT_SYMBOL(kmalloc_node_trace); -#endif /* !CONFIG_SLOB */ gfp_t kmalloc_fix_flags(gfp_t flags) { From patchwork Fri Mar 17 10:43:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vlastimil Babka X-Patchwork-Id: 13178866 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 60348C6FD1D for ; Fri, 17 Mar 2023 10:43:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D784D6B0080; Fri, 17 Mar 2023 06:43:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D529C6B0081; Fri, 17 Mar 2023 06:43:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A67E66B0083; Fri, 17 Mar 2023 06:43:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 8E8346B0080 for ; Fri, 17 Mar 2023 06:43:29 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 54436141835 for ; Fri, 17 Mar 2023 10:43:29 +0000 (UTC) X-FDA: 80578053738.21.B6629AA Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf14.hostedemail.com (Postfix) with ESMTP id 5C962100019 for ; Fri, 17 Mar 2023 10:43:27 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=TSZGBbk3; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=irSxCy2w; spf=pass (imf14.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679049807; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jRHmZbhepcvvf9XAXEpMP9jVYUGG0i8cIsC7hFteLX0=; b=v8t+uwVgO6KBOL/nK3taDRBFBxuYw7ebv/xlxLZOSnFFZtjvEpItlff5oqO5kUgdHxQpB8 wiwy9kQqIMhaiiPrlv1AicvKSSZiHP1rkSa5sHVMg+8fdMl3KssESXga60hNSgsABqHUVx LvC5siBdTtaYT40yPYnyr9EUy4Jk0/k= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=TSZGBbk3; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=irSxCy2w; spf=pass (imf14.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679049807; a=rsa-sha256; cv=none; b=5s8VaRh4xpLZulMpWOA+7i/ETEAfMyVwZHwzjnf8/stfj6Ug/y2FXC6X4hb333UPsIiXrv QnsOd7hY0K/aWa/MG1dm5Ds6NxbpzRDuPoIDyI8TrGgl0aqE0/jyY0fI4Eg5AoAyDrdotg Yh2W+e0qS56C0dkX7dolRdhC5QOex9Q= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id CFE4C1FE25; Fri, 17 Mar 2023 10:43:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1679049803; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jRHmZbhepcvvf9XAXEpMP9jVYUGG0i8cIsC7hFteLX0=; b=TSZGBbk3UK6bUbHEOYZV7Uwqu3pFnHpGtEQteoqljRloTDO89e0Uo2udXZYYI/3EPsoBjh /iYiyYh/7T5mC+fHY7EiDQkyPjIRAg/vDZXPL4T40zbBJA+CaZdehGjrRg4XGuNRxeaBik Ww2YURyaTwyttaM/lJWBQGaJEJljWmA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1679049803; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jRHmZbhepcvvf9XAXEpMP9jVYUGG0i8cIsC7hFteLX0=; b=irSxCy2w8rRzLvrNbJH5q7u7nJdQawIA21dbk2/uLGGYkS9JF9KOQCgSa7hlz8JiGH8BdL ufJcdA5ZNj3dpqDg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 8814813A3E; Fri, 17 Mar 2023 10:43:23 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id QIWmIEtEFGRgdwAAMHmgww (envelope-from ); Fri, 17 Mar 2023 10:43:23 +0000 From: Vlastimil Babka To: Christoph Lameter , David Rientjes , Joonsoo Kim , Pekka Enberg Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>, Roman Gushchin , Andrew Morton , linux-mm@kvack.org, rcu@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, linux-doc@vger.kernel.org, Vlastimil Babka , Lorenzo Stoakes Subject: [PATCH v2 5/6] mm/slob: remove slob.c Date: Fri, 17 Mar 2023 11:43:06 +0100 Message-Id: <20230317104307.29328-6-vbabka@suse.cz> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230317104307.29328-1-vbabka@suse.cz> References: <20230317104307.29328-1-vbabka@suse.cz> MIME-Version: 1.0 X-Stat-Signature: do1dx7fs1tor5nt4pze3cbhc8sj14kmg X-Rspam-User: X-Rspamd-Queue-Id: 5C962100019 X-Rspamd-Server: rspam06 X-HE-Tag: 1679049807-877681 X-HE-Meta: U2FsdGVkX1+8eKtStC7aAnJQSp85afBjTJgWElGaSsxSYBvqaWgTOxl6NpT+Ohnzia2T+5k6UhepbpozFYGsd5Fhn7QYLE5NYAj4p/aj6OS0qR3JZXoG0b8w6xz+g8MtW1/Kr7AkN+bb8hNf2FqVpPStLRp050YIlLqxYjzTc8vmYA3PmVV0bACmHCo2dkHg09jKlK6e1slpd2rtP+SC4jML2AAXOm2+wXlaRndTpN++5XN4zyYkVqLAcljIoeyMZzSK1Lf7NzI+JsRQOSAZ9YcRPvPbCaC6cys1TejUFB7XvkKfX3pIz7R6itkRB9OLCoLFZR0hHolvYpOoEDQjtKYj2m2S5uVH8Cj4B5TNs4aBWO10yArrMqzSSCNrhSqVPe1ZoNE4Nz5NUi68NfIH1hqFSzOUZq/ZGAPLVe2/CH5TGGevRHL+/n8MMCoxf4tDxcFg2rvDVtZTbGFgcGXwIwuANqogiA7Knx721Ehkc6GUdbGSCzMoCUhgKB3o4niVBIKw7DU4syPt6PfnWkxlWjZudQygmSZcOzF1b+XdEA72hvO+Rt9t3X9/bHRMv51aqOCUi0Uwj0lexAyepn+tHLGrADNGbWTrk1phb1USSeHpusZRNVTI93zc414q3VcE/muvDfScgXIHwGon6xiBVuZLWavy+d+e/InRNMhAftRj9EYSLTXejBGNk24tdTFYi1Kb3T4gUk1Do6CzNINhPEVYzQ8jWWQkegF2cADpRUeASkT3tQ7f9anQojGWwfRHCBz5r7ImJ4Ku/QO1kpGpZH4t/H2dgLW/te6WM5CObKi5Ao0FW0LzvPppAJOt60TjhU/R957q5hkHaZnH2j6efByOSeIuAqTUrjwiDprfsp6yKHNO2gbrokmdBi8ORpKDzTu4dZ2HVDxIYXi7PYVBwgcAwaRb33ZrP1IomoD4Z3fftsLI0q+bpz0LM8wNPOl0/13bOj0ArtZdVwjAWs+ L6x1mFYA MXKerHcnaYENau1oQlcQ6HwH9mbnnPD0uEGDwOzKI+mW0PxLuMLioywsqFofY1RrjcNRjB6RAI/+VilQsQW0rn18v4U2bh3PTdDsrQCqbPB8KXbeMOC95IwSswhT/IoiBjIP0S7lD/0yjsFYI8k0BMro15qKZ49R9UX8qmgIchmmda517J2hucARMP98TOjO27gB4Z6wohs/K48u9zZ80ddloQpAg3HGGYi/etx23DsW7F6NNPpN3kzIFbUr/5ViKqjNg/OgZt6q8vVr+jQ/rk6Si+wBBOfGmfFiRgPGF6ElPwmpIMqKRA3Ij/j/8JNYLtYnETykoUrLa74trGuZm4GuZRK2lrIq6LqFNnxpROkR6P2w= 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: Remove the SLOB implementation. RIP SLOB allocator (2006 - 2023) Signed-off-by: Vlastimil Babka Acked-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Acked-by: Lorenzo Stoakes Acked-by: Roman Gushchin Acked-by: Mike Rapoport (IBM) --- mm/slob.c | 757 ------------------------------------------------------ 1 file changed, 757 deletions(-) delete mode 100644 mm/slob.c diff --git a/mm/slob.c b/mm/slob.c deleted file mode 100644 index fe567fcfa3a3..000000000000 --- a/mm/slob.c +++ /dev/null @@ -1,757 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * SLOB Allocator: Simple List Of Blocks - * - * Matt Mackall 12/30/03 - * - * NUMA support by Paul Mundt, 2007. - * - * How SLOB works: - * - * The core of SLOB is a traditional K&R style heap allocator, with - * support for returning aligned objects. The granularity of this - * allocator is as little as 2 bytes, however typically most architectures - * will require 4 bytes on 32-bit and 8 bytes on 64-bit. - * - * The slob heap is a set of linked list of pages from alloc_pages(), - * and within each page, there is a singly-linked list of free blocks - * (slob_t). The heap is grown on demand. To reduce fragmentation, - * heap pages are segregated into three lists, with objects less than - * 256 bytes, objects less than 1024 bytes, and all other objects. - * - * Allocation from heap involves first searching for a page with - * sufficient free blocks (using a next-fit-like approach) followed by - * a first-fit scan of the page. Deallocation inserts objects back - * into the free list in address order, so this is effectively an - * address-ordered first fit. - * - * Above this is an implementation of kmalloc/kfree. Blocks returned - * from kmalloc are prepended with a 4-byte header with the kmalloc size. - * If kmalloc is asked for objects of PAGE_SIZE or larger, it calls - * alloc_pages() directly, allocating compound pages so the page order - * does not have to be separately tracked. - * These objects are detected in kfree() because folio_test_slab() - * is false for them. - * - * SLAB is emulated on top of SLOB by simply calling constructors and - * destructors for every SLAB allocation. Objects are returned with the - * 4-byte alignment unless the SLAB_HWCACHE_ALIGN flag is set, in which - * case the low-level allocator will fragment blocks to create the proper - * alignment. Again, objects of page-size or greater are allocated by - * calling alloc_pages(). As SLAB objects know their size, no separate - * size bookkeeping is necessary and there is essentially no allocation - * space overhead, and compound pages aren't needed for multi-page - * allocations. - * - * NUMA support in SLOB is fairly simplistic, pushing most of the real - * logic down to the page allocator, and simply doing the node accounting - * on the upper levels. In the event that a node id is explicitly - * provided, __alloc_pages_node() with the specified node id is used - * instead. The common case (or when the node id isn't explicitly provided) - * will default to the current node, as per numa_node_id(). - * - * Node aware pages are still inserted in to the global freelist, and - * these are scanned for by matching against the node id encoded in the - * page flags. As a result, block allocations that can be satisfied from - * the freelist will only be done so on pages residing on the same node, - * in order to prevent random node placement. - */ - -#include -#include - -#include -#include /* struct reclaim_state */ -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include "slab.h" -/* - * slob_block has a field 'units', which indicates size of block if +ve, - * or offset of next block if -ve (in SLOB_UNITs). - * - * Free blocks of size 1 unit simply contain the offset of the next block. - * Those with larger size contain their size in the first SLOB_UNIT of - * memory, and the offset of the next free block in the second SLOB_UNIT. - */ -#if PAGE_SIZE <= (32767 * 2) -typedef s16 slobidx_t; -#else -typedef s32 slobidx_t; -#endif - -struct slob_block { - slobidx_t units; -}; -typedef struct slob_block slob_t; - -/* - * All partially free slob pages go on these lists. - */ -#define SLOB_BREAK1 256 -#define SLOB_BREAK2 1024 -static LIST_HEAD(free_slob_small); -static LIST_HEAD(free_slob_medium); -static LIST_HEAD(free_slob_large); - -/* - * slob_page_free: true for pages on free_slob_pages list. - */ -static inline int slob_page_free(struct slab *slab) -{ - return PageSlobFree(slab_page(slab)); -} - -static void set_slob_page_free(struct slab *slab, struct list_head *list) -{ - list_add(&slab->slab_list, list); - __SetPageSlobFree(slab_page(slab)); -} - -static inline void clear_slob_page_free(struct slab *slab) -{ - list_del(&slab->slab_list); - __ClearPageSlobFree(slab_page(slab)); -} - -#define SLOB_UNIT sizeof(slob_t) -#define SLOB_UNITS(size) DIV_ROUND_UP(size, SLOB_UNIT) - -/* - * struct slob_rcu is inserted at the tail of allocated slob blocks, which - * were created with a SLAB_TYPESAFE_BY_RCU slab. slob_rcu is used to free - * the block using call_rcu. - */ -struct slob_rcu { - struct rcu_head head; - int size; -}; - -/* - * slob_lock protects all slob allocator structures. - */ -static DEFINE_SPINLOCK(slob_lock); - -/* - * Encode the given size and next info into a free slob block s. - */ -static void set_slob(slob_t *s, slobidx_t size, slob_t *next) -{ - slob_t *base = (slob_t *)((unsigned long)s & PAGE_MASK); - slobidx_t offset = next - base; - - if (size > 1) { - s[0].units = size; - s[1].units = offset; - } else - s[0].units = -offset; -} - -/* - * Return the size of a slob block. - */ -static slobidx_t slob_units(slob_t *s) -{ - if (s->units > 0) - return s->units; - return 1; -} - -/* - * Return the next free slob block pointer after this one. - */ -static slob_t *slob_next(slob_t *s) -{ - slob_t *base = (slob_t *)((unsigned long)s & PAGE_MASK); - slobidx_t next; - - if (s[0].units < 0) - next = -s[0].units; - else - next = s[1].units; - return base+next; -} - -/* - * Returns true if s is the last free block in its page. - */ -static int slob_last(slob_t *s) -{ - return !((unsigned long)slob_next(s) & ~PAGE_MASK); -} - -static void *slob_new_pages(gfp_t gfp, int order, int node) -{ - struct page *page; - -#ifdef CONFIG_NUMA - if (node != NUMA_NO_NODE) - page = __alloc_pages_node(node, gfp, order); - else -#endif - page = alloc_pages(gfp, order); - - if (!page) - return NULL; - - mod_node_page_state(page_pgdat(page), NR_SLAB_UNRECLAIMABLE_B, - PAGE_SIZE << order); - return page_address(page); -} - -static void slob_free_pages(void *b, int order) -{ - struct page *sp = virt_to_page(b); - - if (current->reclaim_state) - current->reclaim_state->reclaimed_slab += 1 << order; - - mod_node_page_state(page_pgdat(sp), NR_SLAB_UNRECLAIMABLE_B, - -(PAGE_SIZE << order)); - __free_pages(sp, order); -} - -/* - * slob_page_alloc() - Allocate a slob block within a given slob_page sp. - * @sp: Page to look in. - * @size: Size of the allocation. - * @align: Allocation alignment. - * @align_offset: Offset in the allocated block that will be aligned. - * @page_removed_from_list: Return parameter. - * - * Tries to find a chunk of memory at least @size bytes big within @page. - * - * Return: Pointer to memory if allocated, %NULL otherwise. If the - * allocation fills up @page then the page is removed from the - * freelist, in this case @page_removed_from_list will be set to - * true (set to false otherwise). - */ -static void *slob_page_alloc(struct slab *sp, size_t size, int align, - int align_offset, bool *page_removed_from_list) -{ - slob_t *prev, *cur, *aligned = NULL; - int delta = 0, units = SLOB_UNITS(size); - - *page_removed_from_list = false; - for (prev = NULL, cur = sp->freelist; ; prev = cur, cur = slob_next(cur)) { - slobidx_t avail = slob_units(cur); - - /* - * 'aligned' will hold the address of the slob block so that the - * address 'aligned'+'align_offset' is aligned according to the - * 'align' parameter. This is for kmalloc() which prepends the - * allocated block with its size, so that the block itself is - * aligned when needed. - */ - if (align) { - aligned = (slob_t *) - (ALIGN((unsigned long)cur + align_offset, align) - - align_offset); - delta = aligned - cur; - } - if (avail >= units + delta) { /* room enough? */ - slob_t *next; - - if (delta) { /* need to fragment head to align? */ - next = slob_next(cur); - set_slob(aligned, avail - delta, next); - set_slob(cur, delta, aligned); - prev = cur; - cur = aligned; - avail = slob_units(cur); - } - - next = slob_next(cur); - if (avail == units) { /* exact fit? unlink. */ - if (prev) - set_slob(prev, slob_units(prev), next); - else - sp->freelist = next; - } else { /* fragment */ - if (prev) - set_slob(prev, slob_units(prev), cur + units); - else - sp->freelist = cur + units; - set_slob(cur + units, avail - units, next); - } - - sp->units -= units; - if (!sp->units) { - clear_slob_page_free(sp); - *page_removed_from_list = true; - } - return cur; - } - if (slob_last(cur)) - return NULL; - } -} - -/* - * slob_alloc: entry point into the slob allocator. - */ -static void *slob_alloc(size_t size, gfp_t gfp, int align, int node, - int align_offset) -{ - struct folio *folio; - struct slab *sp; - struct list_head *slob_list; - slob_t *b = NULL; - unsigned long flags; - bool _unused; - - if (size < SLOB_BREAK1) - slob_list = &free_slob_small; - else if (size < SLOB_BREAK2) - slob_list = &free_slob_medium; - else - slob_list = &free_slob_large; - - spin_lock_irqsave(&slob_lock, flags); - /* Iterate through each partially free page, try to find room */ - list_for_each_entry(sp, slob_list, slab_list) { - bool page_removed_from_list = false; -#ifdef CONFIG_NUMA - /* - * If there's a node specification, search for a partial - * page with a matching node id in the freelist. - */ - if (node != NUMA_NO_NODE && slab_nid(sp) != node) - continue; -#endif - /* Enough room on this page? */ - if (sp->units < SLOB_UNITS(size)) - continue; - - b = slob_page_alloc(sp, size, align, align_offset, &page_removed_from_list); - if (!b) - continue; - - /* - * If slob_page_alloc() removed sp from the list then we - * cannot call list functions on sp. If so allocation - * did not fragment the page anyway so optimisation is - * unnecessary. - */ - if (!page_removed_from_list) { - /* - * Improve fragment distribution and reduce our average - * search time by starting our next search here. (see - * Knuth vol 1, sec 2.5, pg 449) - */ - if (!list_is_first(&sp->slab_list, slob_list)) - list_rotate_to_front(&sp->slab_list, slob_list); - } - break; - } - spin_unlock_irqrestore(&slob_lock, flags); - - /* Not enough space: must allocate a new page */ - if (!b) { - b = slob_new_pages(gfp & ~__GFP_ZERO, 0, node); - if (!b) - return NULL; - folio = virt_to_folio(b); - __folio_set_slab(folio); - sp = folio_slab(folio); - - spin_lock_irqsave(&slob_lock, flags); - sp->units = SLOB_UNITS(PAGE_SIZE); - sp->freelist = b; - INIT_LIST_HEAD(&sp->slab_list); - set_slob(b, SLOB_UNITS(PAGE_SIZE), b + SLOB_UNITS(PAGE_SIZE)); - set_slob_page_free(sp, slob_list); - b = slob_page_alloc(sp, size, align, align_offset, &_unused); - BUG_ON(!b); - spin_unlock_irqrestore(&slob_lock, flags); - } - if (unlikely(gfp & __GFP_ZERO)) - memset(b, 0, size); - return b; -} - -/* - * slob_free: entry point into the slob allocator. - */ -static void slob_free(void *block, int size) -{ - struct slab *sp; - slob_t *prev, *next, *b = (slob_t *)block; - slobidx_t units; - unsigned long flags; - struct list_head *slob_list; - - if (unlikely(ZERO_OR_NULL_PTR(block))) - return; - BUG_ON(!size); - - sp = virt_to_slab(block); - units = SLOB_UNITS(size); - - spin_lock_irqsave(&slob_lock, flags); - - if (sp->units + units == SLOB_UNITS(PAGE_SIZE)) { - /* Go directly to page allocator. Do not pass slob allocator */ - if (slob_page_free(sp)) - clear_slob_page_free(sp); - spin_unlock_irqrestore(&slob_lock, flags); - __folio_clear_slab(slab_folio(sp)); - slob_free_pages(b, 0); - return; - } - - if (!slob_page_free(sp)) { - /* This slob page is about to become partially free. Easy! */ - sp->units = units; - sp->freelist = b; - set_slob(b, units, - (void *)((unsigned long)(b + - SLOB_UNITS(PAGE_SIZE)) & PAGE_MASK)); - if (size < SLOB_BREAK1) - slob_list = &free_slob_small; - else if (size < SLOB_BREAK2) - slob_list = &free_slob_medium; - else - slob_list = &free_slob_large; - set_slob_page_free(sp, slob_list); - goto out; - } - - /* - * Otherwise the page is already partially free, so find reinsertion - * point. - */ - sp->units += units; - - if (b < (slob_t *)sp->freelist) { - if (b + units == sp->freelist) { - units += slob_units(sp->freelist); - sp->freelist = slob_next(sp->freelist); - } - set_slob(b, units, sp->freelist); - sp->freelist = b; - } else { - prev = sp->freelist; - next = slob_next(prev); - while (b > next) { - prev = next; - next = slob_next(prev); - } - - if (!slob_last(prev) && b + units == next) { - units += slob_units(next); - set_slob(b, units, slob_next(next)); - } else - set_slob(b, units, next); - - if (prev + slob_units(prev) == b) { - units = slob_units(b) + slob_units(prev); - set_slob(prev, units, slob_next(b)); - } else - set_slob(prev, slob_units(prev), b); - } -out: - spin_unlock_irqrestore(&slob_lock, flags); -} - -#ifdef CONFIG_PRINTK -void __kmem_obj_info(struct kmem_obj_info *kpp, void *object, struct slab *slab) -{ - kpp->kp_ptr = object; - kpp->kp_slab = slab; -} -#endif - -/* - * End of slob allocator proper. Begin kmem_cache_alloc and kmalloc frontend. - */ - -static __always_inline void * -__do_kmalloc_node(size_t size, gfp_t gfp, int node, unsigned long caller) -{ - unsigned int *m; - unsigned int minalign; - void *ret; - - minalign = max_t(unsigned int, ARCH_KMALLOC_MINALIGN, - arch_slab_minalign()); - gfp &= gfp_allowed_mask; - - might_alloc(gfp); - - if (size < PAGE_SIZE - minalign) { - int align = minalign; - - /* - * For power of two sizes, guarantee natural alignment for - * kmalloc()'d objects. - */ - if (is_power_of_2(size)) - align = max_t(unsigned int, minalign, size); - - if (!size) - return ZERO_SIZE_PTR; - - m = slob_alloc(size + minalign, gfp, align, node, minalign); - - if (!m) - return NULL; - *m = size; - ret = (void *)m + minalign; - - trace_kmalloc(caller, ret, size, size + minalign, gfp, node); - } else { - unsigned int order = get_order(size); - - if (likely(order)) - gfp |= __GFP_COMP; - ret = slob_new_pages(gfp, order, node); - - trace_kmalloc(caller, ret, size, PAGE_SIZE << order, gfp, node); - } - - kmemleak_alloc(ret, size, 1, gfp); - return ret; -} - -void *__kmalloc(size_t size, gfp_t gfp) -{ - return __do_kmalloc_node(size, gfp, NUMA_NO_NODE, _RET_IP_); -} -EXPORT_SYMBOL(__kmalloc); - -void *__kmalloc_node_track_caller(size_t size, gfp_t gfp, - int node, unsigned long caller) -{ - return __do_kmalloc_node(size, gfp, node, caller); -} -EXPORT_SYMBOL(__kmalloc_node_track_caller); - -void kfree(const void *block) -{ - struct folio *sp; - - trace_kfree(_RET_IP_, block); - - if (unlikely(ZERO_OR_NULL_PTR(block))) - return; - kmemleak_free(block); - - sp = virt_to_folio(block); - if (folio_test_slab(sp)) { - unsigned int align = max_t(unsigned int, - ARCH_KMALLOC_MINALIGN, - arch_slab_minalign()); - unsigned int *m = (unsigned int *)(block - align); - - slob_free(m, *m + align); - } else { - unsigned int order = folio_order(sp); - - mod_node_page_state(folio_pgdat(sp), NR_SLAB_UNRECLAIMABLE_B, - -(PAGE_SIZE << order)); - __free_pages(folio_page(sp, 0), order); - - } -} -EXPORT_SYMBOL(kfree); - -size_t kmalloc_size_roundup(size_t size) -{ - /* Short-circuit the 0 size case. */ - if (unlikely(size == 0)) - return 0; - /* Short-circuit saturated "too-large" case. */ - if (unlikely(size == SIZE_MAX)) - return SIZE_MAX; - - return ALIGN(size, ARCH_KMALLOC_MINALIGN); -} - -EXPORT_SYMBOL(kmalloc_size_roundup); - -/* can't use ksize for kmem_cache_alloc memory, only kmalloc */ -size_t __ksize(const void *block) -{ - struct folio *folio; - unsigned int align; - unsigned int *m; - - BUG_ON(!block); - if (unlikely(block == ZERO_SIZE_PTR)) - return 0; - - folio = virt_to_folio(block); - if (unlikely(!folio_test_slab(folio))) - return folio_size(folio); - - align = max_t(unsigned int, ARCH_KMALLOC_MINALIGN, - arch_slab_minalign()); - m = (unsigned int *)(block - align); - return SLOB_UNITS(*m) * SLOB_UNIT; -} - -int __kmem_cache_create(struct kmem_cache *c, slab_flags_t flags) -{ - if (flags & SLAB_TYPESAFE_BY_RCU) { - /* leave room for rcu footer at the end of object */ - c->size += sizeof(struct slob_rcu); - } - - /* Actual size allocated */ - c->size = SLOB_UNITS(c->size) * SLOB_UNIT; - c->flags = flags; - return 0; -} - -static void *slob_alloc_node(struct kmem_cache *c, gfp_t flags, int node) -{ - void *b; - - flags &= gfp_allowed_mask; - - might_alloc(flags); - - if (c->size < PAGE_SIZE) { - b = slob_alloc(c->size, flags, c->align, node, 0); - trace_kmem_cache_alloc(_RET_IP_, b, c, flags, node); - } else { - b = slob_new_pages(flags, get_order(c->size), node); - trace_kmem_cache_alloc(_RET_IP_, b, c, flags, node); - } - - if (b && c->ctor) { - WARN_ON_ONCE(flags & __GFP_ZERO); - c->ctor(b); - } - - kmemleak_alloc_recursive(b, c->size, 1, c->flags, flags); - return b; -} - -void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags) -{ - return slob_alloc_node(cachep, flags, NUMA_NO_NODE); -} -EXPORT_SYMBOL(kmem_cache_alloc); - - -void *kmem_cache_alloc_lru(struct kmem_cache *cachep, struct list_lru *lru, gfp_t flags) -{ - return slob_alloc_node(cachep, flags, NUMA_NO_NODE); -} -EXPORT_SYMBOL(kmem_cache_alloc_lru); - -void *__kmalloc_node(size_t size, gfp_t gfp, int node) -{ - return __do_kmalloc_node(size, gfp, node, _RET_IP_); -} -EXPORT_SYMBOL(__kmalloc_node); - -void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t gfp, int node) -{ - return slob_alloc_node(cachep, gfp, node); -} -EXPORT_SYMBOL(kmem_cache_alloc_node); - -static void __kmem_cache_free(void *b, int size) -{ - if (size < PAGE_SIZE) - slob_free(b, size); - else - slob_free_pages(b, get_order(size)); -} - -static void kmem_rcu_free(struct rcu_head *head) -{ - struct slob_rcu *slob_rcu = (struct slob_rcu *)head; - void *b = (void *)slob_rcu - (slob_rcu->size - sizeof(struct slob_rcu)); - - __kmem_cache_free(b, slob_rcu->size); -} - -void kmem_cache_free(struct kmem_cache *c, void *b) -{ - kmemleak_free_recursive(b, c->flags); - trace_kmem_cache_free(_RET_IP_, b, c); - if (unlikely(c->flags & SLAB_TYPESAFE_BY_RCU)) { - struct slob_rcu *slob_rcu; - slob_rcu = b + (c->size - sizeof(struct slob_rcu)); - slob_rcu->size = c->size; - call_rcu(&slob_rcu->head, kmem_rcu_free); - } else { - __kmem_cache_free(b, c->size); - } -} -EXPORT_SYMBOL(kmem_cache_free); - -void kmem_cache_free_bulk(struct kmem_cache *s, size_t nr, void **p) -{ - size_t i; - - for (i = 0; i < nr; i++) { - if (s) - kmem_cache_free(s, p[i]); - else - kfree(p[i]); - } -} -EXPORT_SYMBOL(kmem_cache_free_bulk); - -int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t nr, - void **p) -{ - size_t i; - - for (i = 0; i < nr; i++) { - void *x = p[i] = kmem_cache_alloc(s, flags); - - if (!x) { - kmem_cache_free_bulk(s, i, p); - return 0; - } - } - return i; -} -EXPORT_SYMBOL(kmem_cache_alloc_bulk); - -int __kmem_cache_shutdown(struct kmem_cache *c) -{ - /* No way to check for remaining objects */ - return 0; -} - -void __kmem_cache_release(struct kmem_cache *c) -{ -} - -int __kmem_cache_shrink(struct kmem_cache *d) -{ - return 0; -} - -static struct kmem_cache kmem_cache_boot = { - .name = "kmem_cache", - .size = sizeof(struct kmem_cache), - .flags = SLAB_PANIC, - .align = ARCH_KMALLOC_MINALIGN, -}; - -void __init kmem_cache_init(void) -{ - kmem_cache = &kmem_cache_boot; - slab_state = UP; -} - -void __init kmem_cache_init_late(void) -{ - slab_state = FULL; -} From patchwork Fri Mar 17 10:43:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vlastimil Babka X-Patchwork-Id: 13178867 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 45554C74A5B for ; Fri, 17 Mar 2023 10:43:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 42C706B0081; Fri, 17 Mar 2023 06:43:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3DA846B0082; Fri, 17 Mar 2023 06:43:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A0A96B0083; Fri, 17 Mar 2023 06:43:30 -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 174A56B0081 for ; Fri, 17 Mar 2023 06:43:30 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id F2F401C5B5C for ; Fri, 17 Mar 2023 10:43:29 +0000 (UTC) X-FDA: 80578053738.17.6015205 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf12.hostedemail.com (Postfix) with ESMTP id 0164F4000F for ; Fri, 17 Mar 2023 10:43:27 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=3RpsWYEB; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=L+rlwaT8; dmarc=none; spf=pass (imf12.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679049808; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=QMYqXFz2IaKT3NUuszy4Agqdpp++dYT+bm01yseqepo=; b=7k7NW0n1Lo60avSLrqJgQXT0wkCbnBHrEeEgtg+SMjf160CTRu/Mg0vhoBJzF//BE46Sbj CZfKqSHQogNQUotEBpo7ocEK6sssrxZlJtV1y9cwQeTP+TJwEbubRWIVK3Vznr5jWNCDB+ Y62ftKP9+rASkgjCGcJMDKLQxAawYoo= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=3RpsWYEB; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=L+rlwaT8; dmarc=none; spf=pass (imf12.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679049808; a=rsa-sha256; cv=none; b=yjCwb6wHOXI2OjPfVUlZ4hC/vCsqdxVR5gKnhCLy5d1G9XvcsaJTsJiA9ELz+HedQy/wve KnXHwstzWXsLIVXGF/1vyLA/JtwZ7sfvW3lUH1U0lMkL1mDlB7m29FAMqyLnesQL9OY+Pb 3AEMMHEu3MbT3AqA8GS4M04So8o2Axs= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 6441E1FE12; Fri, 17 Mar 2023 10:43:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1679049804; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QMYqXFz2IaKT3NUuszy4Agqdpp++dYT+bm01yseqepo=; b=3RpsWYEBsUt1LFWxCtGa654D5WiAY6xlDzmguCq7ZIYVl2lubbeAt4r2RFSsxW0nlHA/eC c3wX6HGC3gUendkoyOfqOmUfJnYC2pOdF4XUXI+knSdJQj7iD7m2tiRkWNW32AwwO/Wf7W +qXw0+FixUwDXTRG+OSphmXADh28IKA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1679049804; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QMYqXFz2IaKT3NUuszy4Agqdpp++dYT+bm01yseqepo=; b=L+rlwaT8LS9vjdsg9XHVyHNS5hCWePW/zbB/fIp1ejwCCCjFDK4vtitN8q9Zka3g3gxPfG K86/MFNPW7+ZsxAQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id CF23E1346F; Fri, 17 Mar 2023 10:43:23 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id yMbfMUtEFGRgdwAAMHmgww (envelope-from ); Fri, 17 Mar 2023 10:43:23 +0000 From: Vlastimil Babka To: Christoph Lameter , David Rientjes , Joonsoo Kim , Pekka Enberg Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>, Roman Gushchin , Andrew Morton , linux-mm@kvack.org, rcu@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, linux-doc@vger.kernel.org, Vlastimil Babka , Mike Rapoport , Jonathan Corbet , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , Joel Fernandes Subject: [PATCH v2 6/6] mm/slab: document kfree() as allowed for kmem_cache_alloc() objects Date: Fri, 17 Mar 2023 11:43:07 +0100 Message-Id: <20230317104307.29328-7-vbabka@suse.cz> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230317104307.29328-1-vbabka@suse.cz> References: <20230317104307.29328-1-vbabka@suse.cz> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 0164F4000F X-Stat-Signature: snj3mgdutmnpspeuhx5daw7958pn1w4e X-HE-Tag: 1679049807-769201 X-HE-Meta: U2FsdGVkX19zoO551bMoahOHVOh2NvfemI2pMH3c/wqFG6ok0JeFX25C4Rzww7u5ju1gzQPGk8psCwQEUE3PNBHteox+8cTmF9MzJiHIN6L5CGDqppN5U6NLuVx4uzFpUeoyI+1erS5OEajL/VKHHMK6Fl/ABzIVFzg6hvlx+G5nrASM6G+Se3E8M2dVZSCb26bU/47Gji4zo3VJ14etcI1aOtYugXL5QPpzjzVMh0YyCm8BuJrkTNiDecNxkCfoOFAQFwjR3OQKDsT4/03z/LJ2FcTEUGWZLTWMGkSD1MCxyLPm6UI/vLz+Hu/azDNajEdGg8/Bx9yA4Ua6wF3AQUGgeEg0e7ZL6rRQS8Nx0248mWAOjV+bWK76U7DC7Rzainsk9n6Dv1QSUDaFZrtz6bcN62KWZIbjSnCl8VkHaWyDbaHw1e7WXXA3pmsf/Zgv/VH/57ROhWgIf9SBUnVIy8E57erSLpqwiz05l0uSjlWcNCTSiwGnw6uBDYnVX6jGnCjya/WSHkW1IVw38QvpwE8g27GyFIdtoS54uTmF3YboxncP1L4dKPMkuY1tHyk0l3FH2O8A0sJgaClnoLa445Qgyz5y7JDSVj8P//CES5AYcijxD/ABUazIc8W5XpX/nqefmnVrFTbxIRfBeP+N9WQCs9Ol6vtismXDp3SN/YRWNiqpQjVkYOD/03pbfmf6RuxU6wItzf3xs7j1gl6MiuGPmFb+t0idvVQq0tzJaNPA1yeW5z5ZZ4qRxxwusn7US+qiZqN8Pc39ei3tfUn17EVpVXpBh/9P6Sk23AR2vQrWAp2j/ijZQzJCBhj+fQxPsiP+Hz1lE1XCaL/yupS/Qjjr1tufTo+WBGeYhFJeS194/HkLapfrgLbFJbgOL26NsVlzYjflp6bTcwApoKXpwduvtfh/PQe6uOaHFKCnWNcca43evdB4kHN3hNkTPUDNe5ZdABHnSQMZlTzI8vp cVvGlk5z qhfTzJ2tzjMNeHYw0w/LjVdz3BqS0PNNK2OSn4spONpFi7u/rJw/1CTETVSMP+ypDdh8yLHHwZIkTxvWePl+PNFMIQbMRGk08IbrJZGVYCrLlBgbVaYD2gwyhkBXLSH18lwYvusXpYlClkvfXYnc6J9M8uoCMZpSUtkZmt9E1gHuux6zTMv3iLqocMW+ZbpPP+6tJ7FRlwXWn+oeexe84Qf8zaQxEPb3aHjzwVx2MhSrzQMbanjwjDciD6aojlh9YABrpKPSWJpcGXZh2cQ3+3C5hrpNpEJvTJznkb+7oGlbUYqbzce0iGFWfywawvI6orr4AjDWtuFxuNGvPljmet7v53znaqOXbL/iJzo9gS57VTygwBrVVn+CdgNoN+m4OyYvMsxKsl1ief/2MTxDd7gOHOproHqpgyGSiPV5EC1fYZnNt6Z7QEFgfhXNoT/qndY6amy2yVi4R6GF+WTKDAJntsUK3oQVUcIjFde+j/kXcpfumziBq6ZAXY8yIf/XwiGBG1JaG+DO9zH6MI2IKqb4nhpuqNp9bCWxnZmY/Q2Eo7xPOWiRimqCe+WKwkdAWfeIO0hKBWW1WGPQXjEWKuaBQknNsmTl4/5C5ywJql+NidRdmKbVjS/CFMl9cbh4F4thQTUL2a6SMJdpW+6Rj8YnSiZuyxmYZXhsZTetcD+qAqFLCDDuNuCwW1cTx0QR/tpbcxRqD2IrIxF4/fHzHe9fqCtQTeZUEZ6uiow1R8Q6/ZICPWWh46mM66QSyE1ZKMyu4 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: This will make it easier to free objects in situations when they can come from either kmalloc() or kmem_cache_alloc(), and also allow kfree_rcu() for freeing objects from kmem_cache_alloc(). For the SLAB and SLUB allocators this was always possible so with SLOB gone, we can document it as supported. Signed-off-by: Vlastimil Babka Cc: Mike Rapoport Cc: Jonathan Corbet Cc: "Paul E. McKenney" Cc: Frederic Weisbecker Cc: Neeraj Upadhyay Cc: Josh Triplett Cc: Steven Rostedt Cc: Mathieu Desnoyers Cc: Lai Jiangshan Cc: Joel Fernandes Reviewed-by: Mike Rapoport (IBM) --- Documentation/core-api/memory-allocation.rst | 17 +++++++++++++---- include/linux/rcupdate.h | 6 ++++-- mm/slab_common.c | 5 +---- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Documentation/core-api/memory-allocation.rst b/Documentation/core-api/memory-allocation.rst index 5954ddf6ee13..1c58d883b273 100644 --- a/Documentation/core-api/memory-allocation.rst +++ b/Documentation/core-api/memory-allocation.rst @@ -170,7 +170,16 @@ should be used if a part of the cache might be copied to the userspace. After the cache is created kmem_cache_alloc() and its convenience wrappers can allocate memory from that cache. -When the allocated memory is no longer needed it must be freed. You can -use kvfree() for the memory allocated with `kmalloc`, `vmalloc` and -`kvmalloc`. The slab caches should be freed with kmem_cache_free(). And -don't forget to destroy the cache with kmem_cache_destroy(). +When the allocated memory is no longer needed it must be freed. + +Objects allocated by `kmalloc` can be freed by `kfree` or `kvfree`. Objects +allocated by `kmem_cache_alloc` can be freed with `kmem_cache_free`, `kfree` +or `kvfree`, where the latter two might be more convenient thanks to not +needing the kmem_cache pointer. + +The same rules apply to _bulk and _rcu flavors of freeing functions. + +Memory allocated by `vmalloc` can be freed with `vfree` or `kvfree`. +Memory allocated by `kvmalloc` can be freed with `kvfree`. +Caches created by `kmem_cache_create` should be freed with +`kmem_cache_destroy` only after freeing all the allocated objects first. diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 094321c17e48..dcd2cf1e8326 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -976,8 +976,10 @@ static inline notrace void rcu_read_unlock_sched_notrace(void) * either fall back to use of call_rcu() or rearrange the structure to * position the rcu_head structure into the first 4096 bytes. * - * Note that the allowable offset might decrease in the future, for example, - * to allow something like kmem_cache_free_rcu(). + * The object to be freed can be allocated either by kmalloc() or + * kmem_cache_alloc(). + * + * Note that the allowable offset might decrease in the future. * * The BUILD_BUG_ON check must not involve any function calls, hence the * checks are done in macros here. diff --git a/mm/slab_common.c b/mm/slab_common.c index 1522693295f5..607249785c07 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -989,12 +989,9 @@ EXPORT_SYMBOL(__kmalloc_node_track_caller); /** * kfree - free previously allocated memory - * @object: pointer returned by kmalloc. + * @object: pointer returned by kmalloc() or kmem_cache_alloc() * * If @object is NULL, no operation is performed. - * - * Don't free memory not originally allocated by kmalloc() - * or you will run into trouble. */ void kfree(const void *object) {