The patch titled Subject: include/linux/slab.h: add kmalloc_array_node() and kcalloc_node() has been added to the -mm tree. Its filename is mm-add-kmalloc_array_node-and-kcalloc_node.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-add-kmalloc_array_node-and-kcalloc_node.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-add-kmalloc_array_node-and-kcalloc_node.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Johannes Thumshirn <jthumshirn@xxxxxxx> Subject: include/linux/slab.h: add kmalloc_array_node() and kcalloc_node() Patch series "Add kmalloc_array_node() and kcalloc_node()". Our current memeory allocation routines suffer form an API imbalance, for one we have kmalloc_array() and kcalloc() which check for overflows in size multiplication and we have kmalloc_node() and kzalloc_node() which allow for memory allocation on a certain NUMA node but don't check for eventual overflows. This patch (of 6): We have kmalloc_array() and kcalloc() wrappers on top of kmalloc() which ensure us overflow free multiplication for the size of a memory allocation but these implementations are not NUMA-aware. Likewise we have kmalloc_node() which is a NUMA-aware version of kmalloc() but the implementation is not aware of any possible overflows in eventual size calculations. Introduce a combination of the two above cases to have a NUMA-node aware version of kmalloc_array() and kcalloc(). Link: http://lkml.kernel.org/r/20170927082038.3782-2-jthumshirn@xxxxxxx Signed-off-by: Johannes Thumshirn <jthumshirn@xxxxxxx> Cc: Christoph Hellwig <hch@xxxxxx> Cc: Christoph Lameter <cl@xxxxxxxxx> Cc: Damien Le Moal <damien.lemoal@xxxxxxx> Cc: David Rientjes <rientjes@xxxxxxxxxx> Cc: "David S. Miller" <davem@xxxxxxxxxxxxx> Cc: Doug Ledford <dledford@xxxxxxxxxx> Cc: Hal Rosenstock <hal.rosenstock@xxxxxxxxx> Cc: Jens Axboe <axboe@xxxxxxxxx> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> Cc: Mike Marciniszyn <infinipath@xxxxxxxxx> Cc: Pekka Enberg <penberg@xxxxxxxxxx> Cc: Santosh Shilimkar <santosh.shilimkar@xxxxxxxxxx> Cc: Sean Hefty <sean.hefty@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/slab.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff -puN include/linux/slab.h~mm-add-kmalloc_array_node-and-kcalloc_node include/linux/slab.h --- a/include/linux/slab.h~mm-add-kmalloc_array_node-and-kcalloc_node +++ a/include/linux/slab.h @@ -635,6 +635,22 @@ extern void *__kmalloc_track_caller(size #define kmalloc_track_caller(size, flags) \ __kmalloc_track_caller(size, flags, _RET_IP_) +static inline void *kmalloc_array_node(size_t n, size_t size, gfp_t flags, + int node) +{ + if (size != 0 && n > SIZE_MAX / size) + return NULL; + if (__builtin_constant_p(n) && __builtin_constant_p(size)) + return kmalloc_node(n * size, flags, node); + return __kmalloc_node(n * size, flags, node); +} + +static inline void *kcalloc_node(size_t n, size_t size, gfp_t flags, int node) +{ + return kmalloc_array_node(n, size, flags | __GFP_ZERO, node); +} + + #ifdef CONFIG_NUMA extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, unsigned long); #define kmalloc_node_track_caller(size, flags, node) \ _ Patches currently in -mm which might be from jthumshirn@xxxxxxx are mm-add-kmalloc_array_node-and-kcalloc_node.patch block-use-kmalloc_array_node.patch ib-qib-use-kmalloc_array_node.patch ib-rdmavt-use-kmalloc_array_node.patch mm-mempool-use-kmalloc_array_node.patch rds-ib-use-kmalloc_array_node.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html