Attempt to allocate physically contiguous memory, but upon failure, fall back to non-contiguous (vmalloc) allocation. Signed-off-by: Zhu Yanjun <yanjun.zhu@xxxxxxxxxx> --- drivers/infiniband/sw/rxe/rxe_cq.c | 2 +- drivers/infiniband/sw/rxe/rxe_qp.c | 4 ++-- drivers/infiniband/sw/rxe/rxe_queue.c | 6 +++--- drivers/infiniband/sw/rxe/rxe_srq.c | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_cq.c b/drivers/infiniband/sw/rxe/rxe_cq.c index a57276f2cb84..b85ca024fa58 100644 --- a/drivers/infiniband/sw/rxe/rxe_cq.c +++ b/drivers/infiniband/sw/rxe/rxe_cq.c @@ -98,7 +98,7 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe, cq->queue->buf, cq->queue->buf_size, &cq->queue->ip); if (err) { vfree(cq->queue->buf); - kfree(cq->queue); + kvfree(cq->queue); return err; } diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c index b9710907dac2..fd233f93ac1d 100644 --- a/drivers/infiniband/sw/rxe/rxe_qp.c +++ b/drivers/infiniband/sw/rxe/rxe_qp.c @@ -259,7 +259,7 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp, if (err) { vfree(qp->sq.queue->buf); - kfree(qp->sq.queue); + kvfree(qp->sq.queue); return err; } @@ -312,7 +312,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp, &qp->rq.queue->ip); if (err) { vfree(qp->rq.queue->buf); - kfree(qp->rq.queue); + kvfree(qp->rq.queue); return err; } } diff --git a/drivers/infiniband/sw/rxe/rxe_queue.c b/drivers/infiniband/sw/rxe/rxe_queue.c index f84ab4469261..e811a655b286 100644 --- a/drivers/infiniband/sw/rxe/rxe_queue.c +++ b/drivers/infiniband/sw/rxe/rxe_queue.c @@ -91,7 +91,7 @@ struct rxe_queue *rxe_queue_init(struct rxe_dev *rxe, if (*num_elem < 0) goto err1; - q = kmalloc(sizeof(*q), GFP_KERNEL); + q = kvmalloc(sizeof(*q), GFP_KERNEL); if (!q) goto err1; @@ -174,7 +174,7 @@ int rxe_queue_resize(struct rxe_queue *q, new_q->buf_size, &new_q->ip); if (err) { vfree(new_q->buf); - kfree(new_q); + kvfree(new_q); goto err1; } @@ -208,5 +208,5 @@ void rxe_queue_cleanup(struct rxe_queue *q) else vfree(q->buf); - kfree(q); + kvfree(q); } diff --git a/drivers/infiniband/sw/rxe/rxe_srq.c b/drivers/infiniband/sw/rxe/rxe_srq.c index c41a5fee81f7..c9969d157b87 100644 --- a/drivers/infiniband/sw/rxe/rxe_srq.c +++ b/drivers/infiniband/sw/rxe/rxe_srq.c @@ -132,7 +132,7 @@ int rxe_srq_from_init(struct rxe_dev *rxe, struct rxe_srq *srq, q->buf_size, &q->ip); if (err) { vfree(q->buf); - kfree(q); + kvfree(q); return err; } -- 2.17.1