static bool allow_ext_sg;
 static bool prefer_fr = true;
 static bool register_always = true;
+static bool never_register;
 static int topspin_workarounds = 1;
 
 module_param(srp_sg_tablesize, uint, 0444);
 MODULE_PARM_DESC(register_always,
                 "Use memory registration even for contiguous memory regions");
 
+module_param(never_register, bool, 0444);
+MODULE_PARM_DESC(never_register, "Never register memory");
+
 static const struct kernel_param_ops srp_tmo_ops;
 
 static int srp_reconnect_delay = 10;
                            device->map_phys_fmr && device->unmap_fmr);
        srp_dev->has_fr = (device->attrs.device_cap_flags &
                           IB_DEVICE_MEM_MGT_EXTENSIONS);
-       if (!srp_dev->has_fmr && !srp_dev->has_fr) {
+       if (!never_register && !srp_dev->has_fmr && !srp_dev->has_fr) {
                dev_warn(&device->dev, "neither FMR nor FR is supported\n");
-       } else if (device->attrs.max_mr_size >= 2 * srp_dev->mr_page_size) {
+       } else if (!never_register &&
+                  device->attrs.max_mr_size >= 2 * srp_dev->mr_page_size) {
                srp_dev->use_fast_reg = (srp_dev->has_fr &&
                                         (!srp_dev->has_fmr || prefer_fr));
                srp_dev->use_fmr = !srp_dev->use_fast_reg && srp_dev->has_fmr;
        if (IS_ERR(srp_dev->pd))
                goto free_dev;
 
-       if (!register_always || (!srp_dev->has_fmr && !srp_dev->has_fr)) {
+       if (never_register || !register_always ||
+           (!srp_dev->has_fmr && !srp_dev->has_fr)) {
                srp_dev->global_mr = ib_get_dma_mr(srp_dev->pd,
                                                   IB_ACCESS_LOCAL_WRITE |
                                                   IB_ACCESS_REMOTE_READ |