lkml.org 
[lkml]   [2018]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 141/310] IB/rdmavt: Allocate CQ memory on the correct node
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Mike Marciniszyn <mike.marciniszyn@intel.com>


    [ Upstream commit db9a2c6f9b6196b889b98e961cb9a37617b11ccf ]

    CQ allocation does not ensure that completion queue entries
    and the completion queue structure are allocated on the correct
    numa node.

    Fix by allocating the rvt_cq and kernel CQ entries on the device node,
    leaving the user CQ entries on the default local node. Also ensure
    CQ resizes use the correct allocator when extending a CQ.

    Reviewed-by: Sebastian Sanchez <sebastian.sanchez@intel.com>
    Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/infiniband/sw/rdmavt/cq.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    --- a/drivers/infiniband/sw/rdmavt/cq.c
    +++ b/drivers/infiniband/sw/rdmavt/cq.c
    @@ -197,7 +197,7 @@ struct ib_cq *rvt_create_cq(struct ib_de
    return ERR_PTR(-EINVAL);

    /* Allocate the completion queue structure. */
    - cq = kzalloc(sizeof(*cq), GFP_KERNEL);
    + cq = kzalloc_node(sizeof(*cq), GFP_KERNEL, rdi->dparms.node);
    if (!cq)
    return ERR_PTR(-ENOMEM);

    @@ -213,7 +213,9 @@ struct ib_cq *rvt_create_cq(struct ib_de
    sz += sizeof(struct ib_uverbs_wc) * (entries + 1);
    else
    sz += sizeof(struct ib_wc) * (entries + 1);
    - wc = vmalloc_user(sz);
    + wc = udata ?
    + vmalloc_user(sz) :
    + vzalloc_node(sz, rdi->dparms.node);
    if (!wc) {
    ret = ERR_PTR(-ENOMEM);
    goto bail_cq;
    @@ -368,7 +370,9 @@ int rvt_resize_cq(struct ib_cq *ibcq, in
    sz += sizeof(struct ib_uverbs_wc) * (cqe + 1);
    else
    sz += sizeof(struct ib_wc) * (cqe + 1);
    - wc = vmalloc_user(sz);
    + wc = udata ?
    + vmalloc_user(sz) :
    + vzalloc_node(sz, rdi->dparms.node);
    if (!wc)
    return -ENOMEM;


    \
     
     \ /
      Last update: 2018-04-11 21:46    [W:4.086 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site