The branch main has been updated by hselasky:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=376e130b4707d97a047a0d1e85cd8ce29035138b

commit 376e130b4707d97a047a0d1e85cd8ce29035138b
Author:     Hans Petter Selasky <hsela...@freebsd.org>
AuthorDate: 2021-01-08 11:22:18 +0000
Commit:     Hans Petter Selasky <hsela...@freebsd.org>
CommitDate: 2021-01-08 11:35:55 +0000

    Fix memory leaks in error paths in krping.
    
    MFC after: 1 week
    Sponsored by: Mellanox Technologies // NVIDIA Networking
---
 sys/contrib/rdma/krping/krping.c | 52 ++++++++++++++++++++++------------------
 1 file changed, 29 insertions(+), 23 deletions(-)

diff --git a/sys/contrib/rdma/krping/krping.c b/sys/contrib/rdma/krping/krping.c
index e9a379984dec..75c874411bb3 100644
--- a/sys/contrib/rdma/krping/krping.c
+++ b/sys/contrib/rdma/krping/krping.c
@@ -992,9 +992,11 @@ static void wlat_test(struct krping_cb *cb)
        volatile char *poll_buf = (char *) cb->start_buf;
        char *buf = (char *)cb->rdma_buf;
        struct timeval start_tv, stop_tv;
-       cycles_t *post_cycles_start, *post_cycles_stop;
-       cycles_t *poll_cycles_start, *poll_cycles_stop;
-       cycles_t *last_poll_cycles_start;
+       cycles_t *post_cycles_start = NULL;
+       cycles_t *post_cycles_stop = NULL;
+       cycles_t *poll_cycles_start = NULL;
+       cycles_t *poll_cycles_stop = NULL;
+       cycles_t *last_poll_cycles_start = NULL;
        cycles_t sum_poll = 0, sum_post = 0, sum_last_poll = 0;
        int i;
        int cycle_iters = 1000;
@@ -1006,28 +1008,28 @@ static void wlat_test(struct krping_cb *cb)
        post_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL);
        if (!post_cycles_start) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        post_cycles_stop = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL);
        if (!post_cycles_stop) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        poll_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL);
        if (!poll_cycles_start) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        poll_cycles_stop = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL);
        if (!poll_cycles_stop) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        last_poll_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), 
                GFP_KERNEL);
        if (!last_poll_cycles_start) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        cb->rdma_sq_wr.wr.opcode = IB_WR_RDMA_WRITE;
        cb->rdma_sq_wr.rkey = cb->remote_rkey;
@@ -1046,7 +1048,7 @@ static void wlat_test(struct krping_cb *cb)
                                if (cb->state == ERROR) {
                                        printk(KERN_ERR PFX 
                                                "state = ERROR, bailing\n");
-                                       return;
+                                       goto done;
                                }
                        }
                }
@@ -1061,7 +1063,7 @@ static void wlat_test(struct krping_cb *cb)
                                printk(KERN_ERR PFX  
                                        "Couldn't post send: scnt=%d\n",
                                        scnt);
-                               return;
+                               goto done;
                        }
                        if (scnt < cycle_iters)
                                post_cycles_stop[scnt] = get_cycles();
@@ -1086,7 +1088,7 @@ static void wlat_test(struct krping_cb *cb)
 
                        if (ne < 0) {
                                printk(KERN_ERR PFX "poll CQ failed %d\n", ne);
-                               return;
+                               goto done;
                        }
                        if (wc.status != IB_WC_SUCCESS) {
                                printk(KERN_ERR PFX 
@@ -1098,7 +1100,7 @@ static void wlat_test(struct krping_cb *cb)
                                printk(KERN_ERR PFX 
                                        "scnt=%d, rcnt=%d, ccnt=%d\n",
                                        scnt, rcnt, ccnt);
-                               return;
+                               goto done;
                        }
                }
        }
@@ -1122,6 +1124,7 @@ static void wlat_test(struct krping_cb *cb)
                scnt, cb->size, cycle_iters,
                (unsigned long long)sum_post, (unsigned long long)sum_poll, 
                (unsigned long long)sum_last_poll);
+done:
        kfree(post_cycles_start);
        kfree(post_cycles_stop);
        kfree(poll_cycles_start);
@@ -1134,9 +1137,11 @@ static void bw_test(struct krping_cb *cb)
        int ccnt, scnt, rcnt;
        int iters=cb->count;
        struct timeval start_tv, stop_tv;
-       cycles_t *post_cycles_start, *post_cycles_stop;
-       cycles_t *poll_cycles_start, *poll_cycles_stop;
-       cycles_t *last_poll_cycles_start;
+       cycles_t *post_cycles_start = NULL;
+       cycles_t *post_cycles_stop = NULL;
+       cycles_t *poll_cycles_start = NULL;
+       cycles_t *poll_cycles_stop = NULL;
+       cycles_t *last_poll_cycles_start = NULL;
        cycles_t sum_poll = 0, sum_post = 0, sum_last_poll = 0;
        int i;
        int cycle_iters = 1000;
@@ -1148,28 +1153,28 @@ static void bw_test(struct krping_cb *cb)
        post_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL);
        if (!post_cycles_start) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        post_cycles_stop = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL);
        if (!post_cycles_stop) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        poll_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL);
        if (!poll_cycles_start) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        poll_cycles_stop = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL);
        if (!poll_cycles_stop) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        last_poll_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), 
                GFP_KERNEL);
        if (!last_poll_cycles_start) {
                printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__);
-               return;
+               goto done;
        }
        cb->rdma_sq_wr.wr.opcode = IB_WR_RDMA_WRITE;
        cb->rdma_sq_wr.rkey = cb->remote_rkey;
@@ -1190,7 +1195,7 @@ static void bw_test(struct krping_cb *cb)
                                printk(KERN_ERR PFX  
                                        "Couldn't post send: scnt=%d\n",
                                        scnt);
-                               return;
+                               goto done;
                        }
                        if (scnt < cycle_iters)
                                post_cycles_stop[scnt] = get_cycles();
@@ -1215,7 +1220,7 @@ static void bw_test(struct krping_cb *cb)
 
                        if (ne < 0) {
                                printk(KERN_ERR PFX "poll CQ failed %d\n", ne);
-                               return;
+                               goto done;
                        }
                        if (wc.status != IB_WC_SUCCESS) {
                                printk(KERN_ERR PFX 
@@ -1224,7 +1229,7 @@ static void bw_test(struct krping_cb *cb)
                                printk(KERN_ERR PFX 
                                        "Failed status %d: wr_id %d\n",
                                        wc.status, (int) wc.wr_id);
-                               return;
+                               goto done;
                        }
                }
        }
@@ -1248,6 +1253,7 @@ static void bw_test(struct krping_cb *cb)
                scnt, cb->size, cycle_iters, 
                (unsigned long long)sum_post, (unsigned long long)sum_poll, 
                (unsigned long long)sum_last_poll);
+done:
        kfree(post_cycles_start);
        kfree(post_cycles_stop);
        kfree(poll_cycles_start);
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to