Skip to content

Commit e19e1b4

Browse files
committed
add default_gfp() helper macro and use it in the new *alloc_obj() helpers
Most simple allocations use GFP_KERNEL, and with the new allocation helpers being introduced, let's just take advantage of that to simplify that default case. It's a numbers game: git grep 'alloc_obj(' | sed 's/.*\(GFP_[_A-Z]*\).*/\1/' | sort | uniq -c | sort -n | tail shows that about 90% of all those new allocator instances just use that standard GFP_KERNEL. Those helpers are already macros, and we can easily just make it be the default case when the gfp argument is missing. And yes, we could do that for all the legacy interfaces too, but let's keep it to just the new ones at least for now, since those all got converted recently anyway, so this is not any "extra" noise outside of that limited conversion. And, in fact, I want to do this before doing the -rc1 release, exactly so that we don't get extra merge conflicts. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent fa5c82f commit e19e1b4

2 files changed

Lines changed: 28 additions & 24 deletions

File tree

include/linux/gfp.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
struct vm_area_struct;
1414
struct mempolicy;
1515

16+
/* Helper macro to avoid gfp flags if they are the default one */
17+
#define __default_gfp(a,...) a
18+
#define default_gfp(...) __default_gfp(__VA_ARGS__ __VA_OPT__(,) GFP_KERNEL)
19+
1620
/* Convert GFP flags to their corresponding migrate type */
1721
#define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
1822
#define GFP_MOVABLE_SHIFT 3

include/linux/slab.h

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,8 +1017,8 @@ void *kmalloc_nolock_noprof(size_t size, gfp_t gfp_flags, int node);
10171017
* Returns: newly allocated pointer to a @VAR_OR_TYPE on success, or NULL
10181018
* on failure.
10191019
*/
1020-
#define kmalloc_obj(VAR_OR_TYPE, GFP) \
1021-
__alloc_objs(kmalloc, GFP, typeof(VAR_OR_TYPE), 1)
1020+
#define kmalloc_obj(VAR_OR_TYPE, ...) \
1021+
__alloc_objs(kmalloc, default_gfp(__VA_ARGS__), typeof(VAR_OR_TYPE), 1)
10221022

10231023
/**
10241024
* kmalloc_objs - Allocate an array of the given type
@@ -1029,8 +1029,8 @@ void *kmalloc_nolock_noprof(size_t size, gfp_t gfp_flags, int node);
10291029
* Returns: newly allocated pointer to array of @VAR_OR_TYPE on success,
10301030
* or NULL on failure.
10311031
*/
1032-
#define kmalloc_objs(VAR_OR_TYPE, COUNT, GFP) \
1033-
__alloc_objs(kmalloc, GFP, typeof(VAR_OR_TYPE), COUNT)
1032+
#define kmalloc_objs(VAR_OR_TYPE, COUNT, ...) \
1033+
__alloc_objs(kmalloc, default_gfp(__VA_ARGS__), typeof(VAR_OR_TYPE), COUNT)
10341034

10351035
/**
10361036
* kmalloc_flex - Allocate a single instance of the given flexible structure
@@ -1044,32 +1044,32 @@ void *kmalloc_nolock_noprof(size_t size, gfp_t gfp_flags, int node);
10441044
* will immediately fail if @COUNT is larger than what the type of the
10451045
* struct's counter variable can represent.
10461046
*/
1047-
#define kmalloc_flex(VAR_OR_TYPE, FAM, COUNT, GFP) \
1048-
__alloc_flex(kmalloc, GFP, typeof(VAR_OR_TYPE), FAM, COUNT)
1047+
#define kmalloc_flex(VAR_OR_TYPE, FAM, COUNT, ...) \
1048+
__alloc_flex(kmalloc, default_gfp(__VA_ARGS__), typeof(VAR_OR_TYPE), FAM, COUNT)
10491049

10501050
/* All kzalloc aliases for kmalloc_(obj|objs|flex). */
1051-
#define kzalloc_obj(P, GFP) \
1052-
__alloc_objs(kzalloc, GFP, typeof(P), 1)
1053-
#define kzalloc_objs(P, COUNT, GFP) \
1054-
__alloc_objs(kzalloc, GFP, typeof(P), COUNT)
1055-
#define kzalloc_flex(P, FAM, COUNT, GFP) \
1056-
__alloc_flex(kzalloc, GFP, typeof(P), FAM, COUNT)
1051+
#define kzalloc_obj(P, ...) \
1052+
__alloc_objs(kzalloc, default_gfp(__VA_ARGS__), typeof(P), 1)
1053+
#define kzalloc_objs(P, COUNT, ...) \
1054+
__alloc_objs(kzalloc, default_gfp(__VA_ARGS__), typeof(P), COUNT)
1055+
#define kzalloc_flex(P, FAM, COUNT, ...) \
1056+
__alloc_flex(kzalloc, default_gfp(__VA_ARGS__), typeof(P), FAM, COUNT)
10571057

10581058
/* All kvmalloc aliases for kmalloc_(obj|objs|flex). */
1059-
#define kvmalloc_obj(P, GFP) \
1060-
__alloc_objs(kvmalloc, GFP, typeof(P), 1)
1061-
#define kvmalloc_objs(P, COUNT, GFP) \
1062-
__alloc_objs(kvmalloc, GFP, typeof(P), COUNT)
1063-
#define kvmalloc_flex(P, FAM, COUNT, GFP) \
1064-
__alloc_flex(kvmalloc, GFP, typeof(P), FAM, COUNT)
1059+
#define kvmalloc_obj(P, ...) \
1060+
__alloc_objs(kvmalloc, default_gfp(__VA_ARGS__), typeof(P), 1)
1061+
#define kvmalloc_objs(P, COUNT, ...) \
1062+
__alloc_objs(kvmalloc, default_gfp(__VA_ARGS__), typeof(P), COUNT)
1063+
#define kvmalloc_flex(P, FAM, COUNT, ...) \
1064+
__alloc_flex(kvmalloc, default_gfp(__VA_ARGS__), typeof(P), FAM, COUNT)
10651065

10661066
/* All kvzalloc aliases for kmalloc_(obj|objs|flex). */
1067-
#define kvzalloc_obj(P, GFP) \
1068-
__alloc_objs(kvzalloc, GFP, typeof(P), 1)
1069-
#define kvzalloc_objs(P, COUNT, GFP) \
1070-
__alloc_objs(kvzalloc, GFP, typeof(P), COUNT)
1071-
#define kvzalloc_flex(P, FAM, COUNT, GFP) \
1072-
__alloc_flex(kvzalloc, GFP, typeof(P), FAM, COUNT)
1067+
#define kvzalloc_obj(P, ...) \
1068+
__alloc_objs(kvzalloc, default_gfp(__VA_ARGS__), typeof(P), 1)
1069+
#define kvzalloc_objs(P, COUNT, ...) \
1070+
__alloc_objs(kvzalloc, default_gfp(__VA_ARGS__), typeof(P), COUNT)
1071+
#define kvzalloc_flex(P, FAM, COUNT, ...) \
1072+
__alloc_flex(kvzalloc, default_gfp(__VA_ARGS__), typeof(P), FAM, COUNT)
10731073

10741074
#define kmem_buckets_alloc(_b, _size, _flags) \
10751075
alloc_hooks(__kmalloc_node_noprof(PASS_BUCKET_PARAMS(_size, _b), _flags, NUMA_NO_NODE))

0 commit comments

Comments
 (0)