Merge tag 'slab-for-6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 Jun 2023 23:34:12 +0000 (16:34 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 Jun 2023 23:34:12 +0000 (16:34 -0700)
Pull slab updates from Vlastimil Babka:

 - SLAB deprecation:

   Following the discussion at LSF/MM 2023 [1] and no objections, the
   SLAB allocator is deprecated by renaming the config option (to make
   its users notice) to CONFIG_SLAB_DEPRECATED with updated help text.
   SLUB should be used instead. Existing defconfigs with CONFIG_SLAB are
   also updated.

 - SLAB_NO_MERGE kmem_cache flag (Jesper Dangaard Brouer):

   There are (very limited) cases where kmem_cache merging is
   undesirable, and existing ways to prevent it are hacky. Introduce a
   new flag to do that cleanly and convert the existing hacky users.
   Btrfs plans to use this for debug kernel builds (that use case is
   always fine), networking for performance reasons (that should be very
   rare).

 - Replace the usage of weak PRNGs (David Keisar Schmidt):

   In addition to using stronger RNGs for the security related features,
   the code is a bit cleaner.

 - Misc code cleanups (SeongJae Parki, Xiongwei Song, Zhen Lei, and
   zhaoxinchao)

Link: https://lwn.net/Articles/932201/
* tag 'slab-for-6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab:
  mm/slab_common: use SLAB_NO_MERGE instead of negative refcount
  mm/slab: break up RCU readers on SLAB_TYPESAFE_BY_RCU example code
  mm/slab: add a missing semicolon on SLAB_TYPESAFE_BY_RCU example code
  mm/slab_common: reduce an if statement in create_cache()
  mm/slab: introduce kmem_cache flag SLAB_NO_MERGE
  mm/slab: rename CONFIG_SLAB to CONFIG_SLAB_DEPRECATED
  mm/slab: remove HAVE_HARDENED_USERCOPY_ALLOCATOR
  mm/slab_common: Replace invocation of weak PRNG
  mm/slab: Replace invocation of weak PRNG
  slub: Don't read nr_slabs and total_objects directly
  slub: Remove slabs_node() function
  slub: Remove CONFIG_SMP defined check
  slub: Put objects_show() into CONFIG_SLUB_DEBUG enabled block
  slub: Correct the error code when slab_kset is NULL
  mm/slab: correct return values in comment for _kmem_cache_create()

20 files changed:
1  2 
arch/arm/configs/shmobile_defconfig
arch/m68k/configs/amiga_defconfig
arch/m68k/configs/apollo_defconfig
arch/m68k/configs/atari_defconfig
arch/m68k/configs/bvme6000_defconfig
arch/m68k/configs/hp300_defconfig
arch/m68k/configs/mac_defconfig
arch/m68k/configs/multi_defconfig
arch/m68k/configs/mvme147_defconfig
arch/m68k/configs/mvme16x_defconfig
arch/m68k/configs/q40_defconfig
arch/m68k/configs/sun3_defconfig
arch/m68k/configs/sun3x_defconfig
arch/mips/configs/ci20_defconfig
include/linux/slab.h
mm/Kconfig
mm/slab.c
mm/slab.h
mm/slab_common.c
mm/slub.c

Simple merge
@@@ -41,9 -41,7 +41,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -37,9 -37,7 +37,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -44,9 -44,7 +44,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -34,9 -34,7 +34,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -36,9 -36,7 +36,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -35,9 -35,7 +35,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -55,9 -55,7 +55,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -33,9 -33,7 +33,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -34,9 -34,7 +34,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -35,9 -35,7 +35,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
Simple merge
@@@ -31,9 -31,7 +31,8 @@@ CONFIG_MQ_IOSCHED_KYBER=
  CONFIG_IOSCHED_BFQ=m
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
  CONFIG_BINFMT_MISC=m
- CONFIG_SLAB=y
  # CONFIG_COMPACTION is not set
 +CONFIG_DMAPOOL_TEST=m
  CONFIG_USERFAULTFD=y
  CONFIG_NET=y
  CONFIG_PACKET=y
@@@ -23,15 -25,12 +23,14 @@@ CONFIG_MACH_INGENIC_SOC=
  CONFIG_JZ4780_CI20=y
  CONFIG_HIGHMEM=y
  CONFIG_HZ_100=y
 -# CONFIG_SECCOMP is not set
  # CONFIG_SUSPEND is not set
 +# CONFIG_SECCOMP is not set
  CONFIG_MODULES=y
  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
- CONFIG_SLAB=y
 +# CONFIG_COMPAT_BRK is not set
  # CONFIG_COMPACTION is not set
  CONFIG_CMA=y
 +# CONFIG_VM_EVENT_COUNTERS is not set
  CONFIG_NET=y
  CONFIG_PACKET=y
  CONFIG_UNIX=y
Simple merge
diff --cc mm/Kconfig
Simple merge
diff --cc mm/slab.c
Simple merge
diff --cc mm/slab.h
Simple merge
@@@ -892,24 -876,17 +890,24 @@@ new_kmalloc_cache(int idx, enum kmalloc
                flags |= SLAB_CACHE_DMA;
        }
  
 -      kmalloc_caches[type][idx] = create_kmalloc_cache(
 -                                      kmalloc_info[idx].name[type],
 -                                      kmalloc_info[idx].size, flags, 0,
 -                                      kmalloc_info[idx].size);
+       /*
+        * If CONFIG_MEMCG_KMEM is enabled, disable cache merging for
+        * KMALLOC_NORMAL caches.
+        */
+       if (IS_ENABLED(CONFIG_MEMCG_KMEM) && (type == KMALLOC_NORMAL))
+               flags |= SLAB_NO_MERGE;
-       /*
-        * If CONFIG_MEMCG_KMEM is enabled, disable cache merging for
-        * KMALLOC_NORMAL caches.
-        */
-       if (IS_ENABLED(CONFIG_MEMCG_KMEM) && (type == KMALLOC_NORMAL))
-               kmalloc_caches[type][idx]->refcount = -1;
 +      if (minalign > ARCH_KMALLOC_MINALIGN) {
 +              aligned_size = ALIGN(aligned_size, minalign);
 +              aligned_idx = __kmalloc_index(aligned_size, false);
 +      }
 +
 +      if (!kmalloc_caches[type][aligned_idx])
 +              kmalloc_caches[type][aligned_idx] = create_kmalloc_cache(
 +                                      kmalloc_info[aligned_idx].name[type],
 +                                      aligned_size, flags);
 +      if (idx != aligned_idx)
 +              kmalloc_caches[type][idx] = kmalloc_caches[type][aligned_idx];
  }
  
  /*
diff --cc mm/slub.c
Simple merge