Cdiff rdma_subr.c
*** /webrev/webrev/usr/src/uts/common/rpc/rdma_subr.c-  Mon Aug 14 13:12:10 2006
--- rdma_subr.c Sun Jul 23 00:43:23 2006

*** 22,44 **** /* * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #pragma ident "@(#)rdma_subr.c 1.11 05/06/08 SMI" #include <sys/systm.h> #include <sys/kstat.h> #include <sys/modctl.h> #include <rpc/rpc_rdma.h> #include <sys/ib/ibtl/ibti.h> - /* - * RDMA chunk size - */ - #define RDMA_MINCHUNK 1024 uint_t rdma_minchunk = RDMA_MINCHUNK; /* * Globals */ --- 22,52 ---- /* * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ + /* Copyright (c) 2006, The Ohio State University. All rights reserved. + * + * Portions of this source code is developed by the team members of + * The Ohio State University's Network-Based Computing Laboratory (NBCL), + * headed by Professor Dhabaleswar K. (DK) Panda. + * + * Acknowledgements to contributions from developors: + * Ranjit Noronha: noronha@cse.ohio-state.edu + * Lei Chai : chail@cse.ohio-state.edu + * Weikuan Yu : yuw@cse.ohio-state.edu + * + */ #pragma ident "@(#)rdma_subr.c 1.11 05/06/08 SMI" #include <sys/systm.h> #include <sys/kstat.h> #include <sys/modctl.h> #include <rpc/rpc_rdma.h> #include <sys/ib/ibtl/ibti.h> uint_t rdma_minchunk = RDMA_MINCHUNK; /* * Globals */
*** 188,205 **** { struct clist *c; int status; for (c = cl; c; c = c->c_next) { if (src) { ! status = RDMA_REGMEMSYNC(conn, (caddr_t)(uintptr_t)c->c_saddr, c->c_len, &c->c_smemhandle, (void **)&c->c_ssynchandle); } else { ! status = RDMA_REGMEMSYNC(conn, (caddr_t)(uintptr_t)c->c_daddr, c->c_len, &c->c_dmemhandle, (void **)&c->c_dsynchandle); } if (status != RDMA_SUCCESS) { (void) clist_deregister(conn, cl, src); return (status); } --- 196,222 ---- { struct clist *c; int status; for (c = cl; c; c = c->c_next) { + if(c->c_len > 0) if (src) { ! status = RDMA_REGMEMSYNC(conn, (caddr_t)(struct as *)cl->c_adspc, (caddr_t)(uintptr_t)c->c_saddr, c->c_len, + #ifdef SERVER_REG_CACHE + &c->c_smemhandle, (void **)&c->c_ssynchandle, (void *)c->long_reply_buf); + #else &c->c_smemhandle, (void **)&c->c_ssynchandle); + #endif } else { ! status = RDMA_REGMEMSYNC(conn, (caddr_t)(struct as *)cl->c_adspc, (caddr_t)(uintptr_t)c->c_daddr, c->c_len, + #ifdef SERVER_REG_CACHE + &c->c_dmemhandle, (void **)&c->c_dsynchandle,(void *)c->long_reply_buf); + #else &c->c_dmemhandle, (void **)&c->c_dsynchandle); + #endif } if (status != RDMA_SUCCESS) { (void) clist_deregister(conn, cl, src); return (status); }
*** 217,236 **** --- 234,261 ---- if (src) { if (c->c_smemhandle.mrc_rmr != 0) { (void) RDMA_DEREGMEMSYNC(conn, (caddr_t)(uintptr_t)c->c_saddr, c->c_smemhandle, + #ifdef SERVER_REG_CACHE + (void *)(uintptr_t)c->c_ssynchandle, (void *)c->long_reply_buf); + #else (void *)(uintptr_t)c->c_ssynchandle); + #endif c->c_smemhandle.mrc_rmr = 0; c->c_ssynchandle = NULL; } } else { if (c->c_dmemhandle.mrc_rmr != 0) { (void) RDMA_DEREGMEMSYNC(conn, (caddr_t)(uintptr_t)c->c_daddr, c->c_dmemhandle, + #ifdef SERVER_REG_CACHE + (void *)(uintptr_t)c->c_dsynchandle, (void *)c->long_reply_buf); + #else (void *)(uintptr_t)c->c_dsynchandle); + #endif c->c_dmemhandle.mrc_rmr = 0; c->c_dsynchandle = NULL; } } }
*** 256,266 **** rdma_stat rdma_clnt_postrecv(CONN *conn, uint32_t xid) { struct clist *cl = NULL; rdma_stat retval; ! rdma_buf_t rbuf; rbuf.type = RECV_BUFFER; if (RDMA_BUF_ALLOC(conn, &rbuf)) { retval = RDMA_NORESOURCE; } else { --- 281,291 ---- rdma_stat rdma_clnt_postrecv(CONN *conn, uint32_t xid) { struct clist *cl = NULL; rdma_stat retval; ! rdma_buf_t rbuf = {0}; rbuf.type = RECV_BUFFER; if (RDMA_BUF_ALLOC(conn, &rbuf)) { retval = RDMA_NORESOURCE; } else {
*** 275,285 **** rdma_stat rdma_svc_postrecv(CONN *conn) { struct clist *cl = NULL; rdma_stat retval; ! rdma_buf_t rbuf; rbuf.type = RECV_BUFFER; if (RDMA_BUF_ALLOC(conn, &rbuf)) { retval = RDMA_NORESOURCE; } else { --- 300,310 ---- rdma_stat rdma_svc_postrecv(CONN *conn) { struct clist *cl = NULL; rdma_stat retval; ! rdma_buf_t rbuf = {0}; rbuf.type = RECV_BUFFER; if (RDMA_BUF_ALLOC(conn, &rbuf)) { retval = RDMA_NORESOURCE; } else {
*** 298,321 **** --- 323,350 ---- rdma_stat status; c = cl; if (src) { while (c != NULL) { + if(c->c_ssynchandle){ status = RDMA_SYNCMEM(conn, (void *)(uintptr_t)c->c_ssynchandle, (caddr_t)(uintptr_t)c->c_saddr, c->c_len, 0); if (status != RDMA_SUCCESS) return (status); + } c = c->c_next; } } else { while (c != NULL) { + if(c->c_ssynchandle){ status = RDMA_SYNCMEM(conn, (void *)(uintptr_t)c->c_dsynchandle, (caddr_t)(uintptr_t)c->c_daddr, c->c_len, 1); if (status != RDMA_SUCCESS) return (status); + } c = c->c_next; } } return (RDMA_SUCCESS); }
*** 328,337 **** --- 357,371 ---- } if (rbuf->type != CHUNK_BUFFER) { /* pool buffer */ RDMA_BUF_FREE(conn, rbuf); } else { + #ifdef SERVER_REG_CACHE + if(rbuf->long_reply_buf) + RDMA_FREE_SERVER_CACHE_BUF(conn, (rib_lrc_entry_t *)rbuf->long_reply_buf); + else + #endif kmem_free(rbuf->addr, rbuf->len); } rbuf->addr = NULL; rbuf->len = 0; }