diff --git a/drivers/infiniband/sw/rdmavt/mr.c b/drivers/infiniband/sw/rdmavt/mr.c
index 4d5ef73e729163c776b4d67191c48d1d194e6baf..0ff765bfd619070a54d50c67caa61b85893d220b 100644
--- a/drivers/infiniband/sw/rdmavt/mr.c
+++ b/drivers/infiniband/sw/rdmavt/mr.c
@@ -76,8 +76,6 @@ int rvt_driver_mr_init(struct rvt_dev_info *rdi)
 
 	spin_lock_init(&rdi->lkey_table.lock);
 
-	rdi->lkey_table.max = 1 << lkey_table_size;
-
 	/* ensure generation is at least 4 bits */
 	if (lkey_table_size > RVT_MAX_LKEY_TABLE_BITS) {
 		rvt_pr_warn(rdi, "lkey bits %u too large, reduced to %u\n",
@@ -85,6 +83,7 @@ int rvt_driver_mr_init(struct rvt_dev_info *rdi)
 		rdi->dparms.lkey_table_size = RVT_MAX_LKEY_TABLE_BITS;
 		lkey_table_size = rdi->dparms.lkey_table_size;
 	}
+	rdi->lkey_table.max = 1 << lkey_table_size;
 	lk_tab_size = rdi->lkey_table.max * sizeof(*rdi->lkey_table.table);
 	rdi->lkey_table.table = (struct rvt_mregion __rcu **)
 			       vmalloc_node(lk_tab_size, rdi->dparms.node);