lkml.org 
[lkml]   [2016]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [PATCH] mlx4: Use kernel sizeof and alloc styles
    From
    Date
    On Sun, 2016-12-04 at 12:58 -0800, Eric Dumazet wrote:
    > On Sun, 2016-12-04 at 12:11 -0800, Joe Perches wrote:
    > > Convert sizeof foo to sizeof(foo) and allocations with multiplications
    > > to the appropriate kcalloc/kmalloc_array styles.
    > >
    > > Signed-off-by: Joe Perches <joe@perches.com>
    > > ---
    >
    > Gah.
    >
    > This is one of the hotest NIC driver on linux at this moment,
    > with XDP and other efforts going on.
    >
    > Some kmalloc() are becoming kmalloc_node() in some dev branches, and
    > there is no kmalloc_array_node() yet.

    Well that kmalloc_array_node, like this patch, is pretty trivial to add.
    Something like the attached for kmalloc_array_node and kcalloc_node.

    > This kind of patch is making rebases/backports very painful.

    That's really not an issue for me.

    > Could we wait ~6 months before doing such cleanup/changes please ?

    This is certainly a trivial patch that could be
    done at almost any time.

    > If you believe a bug needs a fix, please send a patch to address it.
    >
    > Thanks.

    No worries. include/linux/slab.h | 31 +++++++++++++++++++++++++++++++
    1 file changed, 31 insertions(+)

    diff --git a/include/linux/slab.h b/include/linux/slab.h
    index 084b12bad198..d98c07713c03 100644
    --- a/include/linux/slab.h
    +++ b/include/linux/slab.h
    @@ -647,6 +647,37 @@ static inline void *kzalloc_node(size_t size, gfp_t flags, int node)
    return kmalloc_node(size, flags | __GFP_ZERO, node);
    }

    +/**
    + * kmalloc_array_node - allocate memory for an array
    + * from a particular memory node.
    + * @n: number of elements.
    + * @size: element size.
    + * @flags: the type of memory to allocate (see kmalloc).
    + * @node: memory node from which to allocate
    + */
    +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);
    +}
    +
    +/**
    + * kcalloc_node - allocate memory for an array from a particular memory node.
    + * The memory is set to zero.
    + * @n: number of elements.
    + * @size: element size.
    + * @flags: the type of memory to allocate (see kmalloc).
    + * @node: memory node from which to allocate
    + */
    +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);
    +}
    +
    unsigned int kmem_cache_size(struct kmem_cache *s);
    void __init kmem_cache_init_late(void);
    \
     
     \ /
      Last update: 2016-12-04 23:57    [W:5.303 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site