Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b299a52 authored by NeilBrown's avatar NeilBrown Committed by Greg Kroah-Hartman
Browse files

staging: lustre: libcfs: simplify memory allocation.



1/ Use kvmalloc() instead of kmalloc or vmalloc
2/ Discard the _GFP() interfaces that are never used.
  We only ever do GFP_NOFS and GFP_ATOMIC allocations,
  so support each of those explicitly.

Signed-off-by: default avatarNeilBrown <neilb@suse.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 47d59e75
Loading
Loading
Loading
Loading
+12 −30
Original line number Diff line number Diff line
@@ -84,14 +84,6 @@ do { \
	lbug_with_loc(&msgdata);					\
} while (0)

#ifndef LIBCFS_VMALLOC_SIZE
#define LIBCFS_VMALLOC_SIZE	(2 << PAGE_SHIFT) /* 2 pages */
#endif

#define LIBCFS_ALLOC_PRE(size, mask)					\
	LASSERT(!in_interrupt() || ((size) <= LIBCFS_VMALLOC_SIZE &&	\
				    !gfpflags_allow_blocking(mask)))

#define LIBCFS_ALLOC_POST(ptr, size)					    \
do {									    \
	if (unlikely(!(ptr))) {						    \
@@ -103,46 +95,36 @@ do { \
} while (0)

/**
 * allocate memory with GFP flags @mask
 * default allocator
 */
#define LIBCFS_ALLOC_GFP(ptr, size, mask)				    \
#define LIBCFS_ALLOC(ptr, size)						    \
do {									    \
	LIBCFS_ALLOC_PRE((size), (mask));				    \
	(ptr) = (size) <= LIBCFS_VMALLOC_SIZE ?				    \
		kmalloc((size), (mask)) : vmalloc(size);	    \
	LASSERT(!in_interrupt());					    \
	(ptr) = kvmalloc((size), GFP_NOFS);				    \
	LIBCFS_ALLOC_POST((ptr), (size));				    \
} while (0)

/**
 * default allocator
 */
#define LIBCFS_ALLOC(ptr, size) \
	LIBCFS_ALLOC_GFP(ptr, size, GFP_NOFS)

/**
 * non-sleeping allocator
 */
#define LIBCFS_ALLOC_ATOMIC(ptr, size)					\
	LIBCFS_ALLOC_GFP(ptr, size, GFP_ATOMIC)
do {									\
	(ptr) = kmalloc((size), GFP_ATOMIC);				\
	LIBCFS_ALLOC_POST(ptr, size);					\
} while (0)

/**
 * allocate memory for specified CPU partition
 *   \a cptab != NULL, \a cpt is CPU partition id of \a cptab
 *   \a cptab == NULL, \a cpt is HW NUMA node id
 */
#define LIBCFS_CPT_ALLOC_GFP(ptr, cptab, cpt, size, mask)		    \
#define LIBCFS_CPT_ALLOC(ptr, cptab, cpt, size)				    \
do {									    \
	LIBCFS_ALLOC_PRE((size), (mask));				    \
	(ptr) = (size) <= LIBCFS_VMALLOC_SIZE ?				    \
		kmalloc_node((size), (mask), cfs_cpt_spread_node(cptab, cpt)) :\
		vmalloc_node(size, cfs_cpt_spread_node(cptab, cpt));	    \
	LASSERT(!in_interrupt());					    \
	(ptr) = kvmalloc_node((size), GFP_NOFS, cfs_cpt_spread_node(cptab, cpt)); \
	LIBCFS_ALLOC_POST((ptr), (size));				    \
} while (0)

/** default numa allocator */
#define LIBCFS_CPT_ALLOC(ptr, cptab, cpt, size)				    \
	LIBCFS_CPT_ALLOC_GFP(ptr, cptab, cpt, size, GFP_NOFS)

#define LIBCFS_FREE(ptr, size)					  \
do {								    \
	if (unlikely(!(ptr))) {						\