]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ib_core: Usermode FMR config params
authorDotan Barak <dotanb@dev.mellanox.co.il>
Wed, 11 Jul 2012 12:14:40 +0000 (15:14 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Fri, 11 Sep 2015 17:15:01 +0000 (10:15 -0700)
Orabug: 21517998

Signed-off-by: Arun Kaimalettu <gotoarunk@gmail.com>
(Ported from UEK2/Mellanox OFED1.5.5R2)

Signed-off-by: Mukesh Kacker <mukesh.kacker@oracle.com>
drivers/infiniband/core/uverbs.h
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_main.c

index a579dca7d8f7f9d61a829c75b124c4023702ad93..034d38c86c44d6554bcc4f04be1dcf87c4381100 100644 (file)
@@ -259,6 +259,12 @@ IB_UVERBS_DECLARE_CMD(reg_mr_relaxed);
 IB_UVERBS_DECLARE_CMD(dereg_mr_relaxed);
 IB_UVERBS_DECLARE_CMD(flush_relaxed_mr);
 
+/* UFMR parameters */
+extern int ufmr_pool1_blocksize;
+extern int ufmr_pool1_nelems;
+extern int ufmr_pool2_blocksize;
+extern int ufmr_pool2_nelems;
+
 #define IB_UVERBS_DECLARE_EX_CMD(name)                         \
        int ib_uverbs_ex_##name(struct ib_uverbs_file *file,    \
                                struct ib_udata *ucore,         \
index 51731346c3a6e88dbf11fba25bcf41501e8e6d21..10fa5b8466734a983f83c7670562ef8c54a80828 100644 (file)
 #include "uverbs.h"
 #include "core_priv.h"
 
+/* UFMR parameters */
+/* default Pool 1 block size */
+int ufmr_pool1_blocksize = 8 * 1024;
+/* default  no of fmrs in Pool 1 */
+int ufmr_pool1_nelems = 32 * 1024;
+/* default Pool 2 block size */
+int ufmr_pool2_blocksize = 1 * 1024 * 1024;
+/* default  no of fmrs in Pool 2 */
+int ufmr_pool2_nelems = 4 * 1024;
+
 struct uverbs_lock_class {
        struct lock_class_key   key;
        char                    name[16];
@@ -326,7 +336,7 @@ static int fmr_pin_pages(unsigned long user_addr, unsigned int nr_pages,
        return ret;
 }
 
-static int create_fmr_pool(struct ib_pd *pd, int pages,  u32 access)
+static int create_fmr_pool(struct ib_pd *pd, int pages, int size, u32 access)
 {
 
        int ret = 0;
@@ -338,7 +348,7 @@ static int create_fmr_pool(struct ib_pd *pd, int pages,  u32 access)
 
        /*create pools - 32k fmrs of 8k buf, 4k fmrs of 1meg  */
        memset(&fmr_param, 0, sizeof(fmr_param));
-       fmr_param.pool_size         = (pages > 20) ? 8 * 1024 : 32*1024;
+       fmr_param.pool_size         = size;
        fmr_param.dirty_watermark   = 512;
        fmr_param.cache             = 0;
        fmr_param.relaxed           = 1;
@@ -1580,17 +1590,21 @@ ssize_t ib_uverbs_reg_mr_relaxed(struct ib_uverbs_file *file,
        }
 
        if (!found) {
-               int pagesin8K = (8*1024 + PAGE_SIZE) >> PAGE_SHIFT;
-               int pagesin1M = (1024*1024 + PAGE_SIZE) >> PAGE_SHIFT;
+               int pool1pages =
+                       (ufmr_pool1_blocksize + PAGE_SIZE) >> PAGE_SHIFT;
+               int pool2pages =
+                       (ufmr_pool2_blocksize + PAGE_SIZE) >> PAGE_SHIFT;
                struct ib_pd *pool_pd = file->device->ib_dev->relaxed_pd;
 
                /* Create pool for 8kb buffers */
-               ret = create_fmr_pool(pool_pd, pagesin8K, cmd.access_flags);
+               ret = create_fmr_pool(pool_pd, pool1pages, ufmr_pool1_nelems,
+                                        cmd.access_flags);
                if (ret < 0)
                        goto err_put;
 
                /* Create pool for 1mb buffers */
-               ret = create_fmr_pool(pool_pd, pagesin1M, cmd.access_flags);
+               ret = create_fmr_pool(pool_pd, pool2pages, ufmr_pool2_nelems,
+                                       cmd.access_flags);
                if (ret < 0)
                        goto err_put;
 
index c8b3ada3d4ca8d8d69041aba0f24dd5420b97837..229772bb4050bca0283fb5378f0c49466b778a72 100644 (file)
@@ -54,6 +54,18 @@ MODULE_AUTHOR("Roland Dreier");
 MODULE_DESCRIPTION("InfiniBand userspace verbs access");
 MODULE_LICENSE("Dual BSD/GPL");
 
+module_param(ufmr_pool1_blocksize, int, 0444);
+MODULE_PARM_DESC(ufmr_pool1_blocksize, "Block size for Usermode FMR Pool 1");
+
+module_param(ufmr_pool1_nelems, int, 0444);
+MODULE_PARM_DESC(ufmr_pool1_nelems, "No of FMRs in Usermode FMR Pool 1");
+
+module_param(ufmr_pool2_blocksize, int, 0444);
+MODULE_PARM_DESC(ufmr_pool2_blocksize, "Block size for Usermode FMR Pool 2");
+
+module_param(ufmr_pool2_nelems, int, 0444);
+MODULE_PARM_DESC(ufmr_pool2_nelems, "No of FMRs in Usermode FMR Pool 2");
+
 enum {
        IB_UVERBS_MAJOR       = 231,
        IB_UVERBS_BASE_MINOR  = 192,