sctp: flush if we can't fit another DATA chunk
[cascardo/linux.git] / net / rds / ib.c
index 9481d55..b5342fd 100644 (file)
 
 #include "rds.h"
 #include "ib.h"
+#include "ib_mr.h"
 
-unsigned int rds_ib_fmr_1m_pool_size = RDS_FMR_1M_POOL_SIZE;
-unsigned int rds_ib_fmr_8k_pool_size = RDS_FMR_8K_POOL_SIZE;
+unsigned int rds_ib_mr_1m_pool_size = RDS_MR_1M_POOL_SIZE;
+unsigned int rds_ib_mr_8k_pool_size = RDS_MR_8K_POOL_SIZE;
 unsigned int rds_ib_retry_count = RDS_IB_DEFAULT_RETRY_COUNT;
 
-module_param(rds_ib_fmr_1m_pool_size, int, 0444);
-MODULE_PARM_DESC(rds_ib_fmr_1m_pool_size, " Max number of 1M fmr per HCA");
-module_param(rds_ib_fmr_8k_pool_size, int, 0444);
-MODULE_PARM_DESC(rds_ib_fmr_8k_pool_size, " Max number of 8K fmr per HCA");
+module_param(rds_ib_mr_1m_pool_size, int, 0444);
+MODULE_PARM_DESC(rds_ib_mr_1m_pool_size, " Max number of 1M mr per HCA");
+module_param(rds_ib_mr_8k_pool_size, int, 0444);
+MODULE_PARM_DESC(rds_ib_mr_8k_pool_size, " Max number of 8K mr per HCA");
 module_param(rds_ib_retry_count, int, 0444);
 MODULE_PARM_DESC(rds_ib_retry_count, " Number of hw retries before reporting an error");
 
@@ -139,14 +140,20 @@ static void rds_ib_add_one(struct ib_device *device)
        rds_ibdev->max_wrs = device->attrs.max_qp_wr;
        rds_ibdev->max_sge = min(device->attrs.max_sge, RDS_IB_MAX_SGE);
 
+       rds_ibdev->has_fr = (device->attrs.device_cap_flags &
+                                 IB_DEVICE_MEM_MGT_EXTENSIONS);
+       rds_ibdev->has_fmr = (device->alloc_fmr && device->dealloc_fmr &&
+                           device->map_phys_fmr && device->unmap_fmr);
+       rds_ibdev->use_fastreg = (rds_ibdev->has_fr && !rds_ibdev->has_fmr);
+
        rds_ibdev->fmr_max_remaps = device->attrs.max_map_per_fmr?: 32;
-       rds_ibdev->max_1m_fmrs = device->attrs.max_mr ?
+       rds_ibdev->max_1m_mrs = device->attrs.max_mr ?
                min_t(unsigned int, (device->attrs.max_mr / 2),
-                     rds_ib_fmr_1m_pool_size) : rds_ib_fmr_1m_pool_size;
+                     rds_ib_mr_1m_pool_size) : rds_ib_mr_1m_pool_size;
 
-       rds_ibdev->max_8k_fmrs = device->attrs.max_mr ?
+       rds_ibdev->max_8k_mrs = device->attrs.max_mr ?
                min_t(unsigned int, ((device->attrs.max_mr / 2) * RDS_MR_8K_SCALE),
-                     rds_ib_fmr_8k_pool_size) : rds_ib_fmr_8k_pool_size;
+                     rds_ib_mr_8k_pool_size) : rds_ib_mr_8k_pool_size;
 
        rds_ibdev->max_initiator_depth = device->attrs.max_qp_init_rd_atom;
        rds_ibdev->max_responder_resources = device->attrs.max_qp_rd_atom;
@@ -172,10 +179,14 @@ static void rds_ib_add_one(struct ib_device *device)
                goto put_dev;
        }
 
-       rdsdebug("RDS/IB: max_mr = %d, max_wrs = %d, max_sge = %d, fmr_max_remaps = %d, max_1m_fmrs = %d, max_8k_fmrs = %d\n",
+       rdsdebug("RDS/IB: max_mr = %d, max_wrs = %d, max_sge = %d, fmr_max_remaps = %d, max_1m_mrs = %d, max_8k_mrs = %d\n",
                 device->attrs.max_fmr, rds_ibdev->max_wrs, rds_ibdev->max_sge,
-                rds_ibdev->fmr_max_remaps, rds_ibdev->max_1m_fmrs,
-                rds_ibdev->max_8k_fmrs);
+                rds_ibdev->fmr_max_remaps, rds_ibdev->max_1m_mrs,
+                rds_ibdev->max_8k_mrs);
+
+       pr_info("RDS/IB: %s: %s supported and preferred\n",
+               device->name,
+               rds_ibdev->use_fastreg ? "FRMR" : "FMR");
 
        INIT_LIST_HEAD(&rds_ibdev->ipaddr_list);
        INIT_LIST_HEAD(&rds_ibdev->conn_list);
@@ -364,7 +375,7 @@ void rds_ib_exit(void)
        rds_ib_sysctl_exit();
        rds_ib_recv_exit();
        rds_trans_unregister(&rds_ib_transport);
-       rds_ib_fmr_exit();
+       rds_ib_mr_exit();
 }
 
 struct rds_transport rds_ib_transport = {
@@ -400,13 +411,13 @@ int rds_ib_init(void)
 
        INIT_LIST_HEAD(&rds_ib_devices);
 
-       ret = rds_ib_fmr_init();
+       ret = rds_ib_mr_init();
        if (ret)
                goto out;
 
        ret = ib_register_client(&rds_ib_client);
        if (ret)
-               goto out_fmr_exit;
+               goto out_mr_exit;
 
        ret = rds_ib_sysctl_init();
        if (ret)
@@ -430,8 +441,8 @@ out_sysctl:
        rds_ib_sysctl_exit();
 out_ibreg:
        rds_ib_unregister_client();
-out_fmr_exit:
-       rds_ib_fmr_exit();
+out_mr_exit:
+       rds_ib_mr_exit();
 out:
        return ret;
 }