Author: markj
Date: Fri Jul 29 21:01:04 2016
New Revision: 303512
URL: https://svnweb.freebsd.org/changeset/base/303512

Log:
  sdp: Use malloc(9) instead of the Linux compat layer.
  
  SDP transmit and receive rings are always created in a sleepable context,
  so we can use M_WAITOK and remove error checks.
  
  Sponsored by: EMC / Isilon Storage Division

Modified:
  head/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h
  head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c
  head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_rx.c
  head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_tx.c

Modified: head/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h
==============================================================================
--- head/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h      Fri Jul 29 20:54:43 
2016        (r303511)
+++ head/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h      Fri Jul 29 21:01:04 
2016        (r303512)
@@ -455,6 +455,8 @@ struct sdp_sock {
 #define        SDP_RLOCK_ASSERT(ssk)   rw_assert(&(ssk)->lock, RA_RLOCKED)
 #define        SDP_LOCK_ASSERT(ssk)    rw_assert(&(ssk)->lock, RA_LOCKED)
 
+MALLOC_DECLARE(M_SDP);
+
 static inline void tx_sa_reset(struct tx_srcavail_state *tx_sa)
 {
        memset((void *)&tx_sa->busy, 0,

Modified: head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Fri Jul 29 20:54:43 
2016        (r303511)
+++ head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Fri Jul 29 21:01:04 
2016        (r303512)
@@ -64,6 +64,10 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+
 #include "sdp.h"
 
 #include <net/if.h>
@@ -86,7 +90,7 @@ RW_SYSINIT(sdplockinit, &sdp_lock, "SDP 
 #define        SDP_LIST_RLOCK_ASSERT() rw_assert(&sdp_lock, RW_RLOCKED)
 #define        SDP_LIST_LOCK_ASSERT()  rw_assert(&sdp_lock, RW_LOCKED)
 
-static MALLOC_DEFINE(M_SDP, "sdp", "Socket Direct Protocol");
+MALLOC_DEFINE(M_SDP, "sdp", "Sockets Direct Protocol");
 
 static void sdp_stop_keepalive_timer(struct socket *so);
 

Modified: head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_rx.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_rx.c   Fri Jul 29 20:54:43 
2016        (r303511)
+++ head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_rx.c   Fri Jul 29 21:01:04 
2016        (r303512)
@@ -701,25 +701,16 @@ sdp_rx_ring_create(struct sdp_sock *ssk,
        struct ib_cq *rx_cq;
        int rc = 0;
 
-
        sdp_dbg(ssk->socket, "rx ring created");
        INIT_WORK(&ssk->rx_comp_work, sdp_rx_comp_work);
        atomic_set(&ssk->rx_ring.head, 1);
        atomic_set(&ssk->rx_ring.tail, 1);
 
-       ssk->rx_ring.buffer = kmalloc(
-                       sizeof *ssk->rx_ring.buffer * SDP_RX_SIZE, GFP_KERNEL);
-       if (!ssk->rx_ring.buffer) {
-               sdp_warn(ssk->socket,
-                       "Unable to allocate RX Ring size %zd.\n",
-                        sizeof(*ssk->rx_ring.buffer) * SDP_RX_SIZE);
-
-               return -ENOMEM;
-       }
+       ssk->rx_ring.buffer = malloc(sizeof(*ssk->rx_ring.buffer) * SDP_RX_SIZE,
+           M_SDP, M_WAITOK);
 
        rx_cq = ib_create_cq(device, sdp_rx_irq, sdp_rx_cq_event_handler,
            ssk, SDP_RX_SIZE, 0);
-
        if (IS_ERR(rx_cq)) {
                rc = PTR_ERR(rx_cq);
                sdp_warn(ssk->socket, "Unable to allocate RX CQ: %d.\n", rc);
@@ -732,7 +723,7 @@ sdp_rx_ring_create(struct sdp_sock *ssk,
        return 0;
 
 err_cq:
-       kfree(ssk->rx_ring.buffer);
+       free(ssk->rx_ring.buffer, M_SDP);
        ssk->rx_ring.buffer = NULL;
        return rc;
 }
@@ -746,8 +737,7 @@ sdp_rx_ring_destroy(struct sdp_sock *ssk
 
        if (ssk->rx_ring.buffer) {
                sdp_rx_ring_purge(ssk);
-
-               kfree(ssk->rx_ring.buffer);
+               free(ssk->rx_ring.buffer, M_SDP);
                ssk->rx_ring.buffer = NULL;
        }
 

Modified: head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_tx.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_tx.c   Fri Jul 29 20:54:43 
2016        (r303511)
+++ head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_tx.c   Fri Jul 29 21:01:04 
2016        (r303512)
@@ -427,19 +427,11 @@ sdp_tx_ring_create(struct sdp_sock *ssk,
        atomic_set(&ssk->tx_ring.head, 1);
        atomic_set(&ssk->tx_ring.tail, 1);
 
-       ssk->tx_ring.buffer = kzalloc(
-                       sizeof *ssk->tx_ring.buffer * SDP_TX_SIZE, GFP_KERNEL);
-       if (!ssk->tx_ring.buffer) {
-               rc = -ENOMEM;
-               sdp_warn(ssk->socket, "Can't allocate TX Ring size %zd.\n",
-                        sizeof(*ssk->tx_ring.buffer) * SDP_TX_SIZE);
-
-               goto out;
-       }
+       ssk->tx_ring.buffer = malloc(sizeof(*ssk->tx_ring.buffer) * SDP_TX_SIZE,
+           M_SDP, M_WAITOK);
 
        tx_cq = ib_create_cq(device, sdp_tx_irq, sdp_tx_cq_event_handler,
                          ssk, SDP_TX_SIZE, 0);
-
        if (IS_ERR(tx_cq)) {
                rc = PTR_ERR(tx_cq);
                sdp_warn(ssk->socket, "Unable to allocate TX CQ: %d.\n", rc);
@@ -452,9 +444,8 @@ sdp_tx_ring_create(struct sdp_sock *ssk,
        return 0;
 
 err_cq:
-       kfree(ssk->tx_ring.buffer);
+       free(ssk->tx_ring.buffer, M_SDP);
        ssk->tx_ring.buffer = NULL;
-out:
        return rc;
 }
 
@@ -472,8 +463,7 @@ sdp_tx_ring_destroy(struct sdp_sock *ssk
 
        if (ssk->tx_ring.buffer) {
                sdp_tx_ring_purge(ssk);
-
-               kfree(ssk->tx_ring.buffer);
+               free(ssk->tx_ring.buffer, M_SDP);
                ssk->tx_ring.buffer = NULL;
        }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to