Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bf5927d8 authored by Tom Tucker's avatar Tom Tucker
Browse files

svcrdma: Create a kmem cache for the WR contexts



Create a kmem cache to hold WR contexts. Next we will convert
the WR context get and put services to use this kmem cache.

Signed-off-by: default avatarTom Tucker <tom@opengridcomputing.com>
parent 902a94e0
Loading
Loading
Loading
Loading
+19 −4
Original line number Original line Diff line number Diff line
@@ -69,8 +69,9 @@ atomic_t rdma_stat_rq_prod;
atomic_t rdma_stat_sq_poll;
atomic_t rdma_stat_sq_poll;
atomic_t rdma_stat_sq_prod;
atomic_t rdma_stat_sq_prod;


/* Temporary NFS request map cache */
/* Temporary NFS request map and context caches */
struct kmem_cache *svc_rdma_map_cachep;
struct kmem_cache *svc_rdma_map_cachep;
struct kmem_cache *svc_rdma_ctxt_cachep;


/*
/*
 * This function implements reading and resetting an atomic_t stat
 * This function implements reading and resetting an atomic_t stat
@@ -246,6 +247,7 @@ void svc_rdma_cleanup(void)
	}
	}
	svc_unreg_xprt_class(&svc_rdma_class);
	svc_unreg_xprt_class(&svc_rdma_class);
	kmem_cache_destroy(svc_rdma_map_cachep);
	kmem_cache_destroy(svc_rdma_map_cachep);
	kmem_cache_destroy(svc_rdma_ctxt_cachep);
}
}


int svc_rdma_init(void)
int svc_rdma_init(void)
@@ -268,14 +270,27 @@ int svc_rdma_init(void)
						NULL);
						NULL);
	if (!svc_rdma_map_cachep) {
	if (!svc_rdma_map_cachep) {
		printk(KERN_INFO "Could not allocate map cache.\n");
		printk(KERN_INFO "Could not allocate map cache.\n");
		goto err;
		goto err0;
	}

	/* Create the temporary context cache */
	svc_rdma_ctxt_cachep =
		kmem_cache_create("svc_rdma_ctxt_cache",
				  sizeof(struct svc_rdma_op_ctxt),
				  0,
				  SLAB_HWCACHE_ALIGN,
				  NULL);
	if (!svc_rdma_ctxt_cachep) {
		printk(KERN_INFO "Could not allocate WR ctxt cache.\n");
		goto err1;
	}
	}


	/* Register RDMA with the SVC transport switch */
	/* Register RDMA with the SVC transport switch */
	svc_reg_xprt_class(&svc_rdma_class);
	svc_reg_xprt_class(&svc_rdma_class);
	return 0;
	return 0;

 err1:
 err:
	kmem_cache_destroy(svc_rdma_map_cachep);
 err0:
	unregister_sysctl_table(svcrdma_table_header);
	unregister_sysctl_table(svcrdma_table_header);
	return -ENOMEM;
	return -ENOMEM;
}
}