lkml.org 
[lkml]   [2018]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.15 055/124] IB/rdmavt: Allocate CQ memory on the correct node
    Date
    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>
    ---
    drivers/infiniband/sw/rdmavt/cq.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    diff --git a/drivers/infiniband/sw/rdmavt/cq.c b/drivers/infiniband/sw/rdmavt/cq.c
    index 97d71e49c092..88fa4d44ab5f 100644
    --- a/drivers/infiniband/sw/rdmavt/cq.c
    +++ b/drivers/infiniband/sw/rdmavt/cq.c
    @@ -198,7 +198,7 @@ struct ib_cq *rvt_create_cq(struct ib_device *ibdev,
    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);

    @@ -214,7 +214,9 @@ struct ib_cq *rvt_create_cq(struct ib_device *ibdev,
    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;
    @@ -369,7 +371,9 @@ int rvt_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
    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;

    --
    2.14.1
    \
     
     \ /
      Last update: 2018-03-19 23:32    [W:4.856 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site