rpcib.c revision 1160694128cd3980cc06abe31af529a887efd310
1N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
(void *)&rib_modldrv,
int plugin_state;
static void rib_deregister_ats();
rib_qp_t **);
rib_qp_t **);
static void rib_async_handler(void *,
ibt_path_info_t *);
typedef struct rpcib_s {
} rpcib_t;
int rib_debug = 0;
static int ats_running = 0;
_init(void)
int error;
if (error != 0) {
return (error);
_fini()
int status;
return (EBUSY);
return (status);
switch (cmd) {
case DDI_INFO_DEVT2DEVINFO:
case DDI_INFO_DEVT2INSTANCE:
return (ret);
switch (cmd) {
case DDI_ATTACH:
case DDI_RESUME:
return (DDI_SUCCESS);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_SUCCESS);
switch (cmd) {
case DDI_DETACH:
case DDI_SUSPEND:
return (DDI_FAILURE);
return (DDI_SUCCESS);
#ifdef DEBUG
if (rib_debug) {
ats_running = 0;
#ifdef DEBUG
if (rib_debug) {
static rdma_stat
&real_size);
goto fail;
goto fail;
return (error);
fail:
if (cq)
return (error);
static rdma_stat
goto fail1;
goto fail1;
goto fail2;
goto fail3;
goto fail3;
goto fail3;
goto fail3;
goto fail3;
goto fail3;
return (RDMA_SUCCESS);
return (RDMA_FAILED);
case IBT_WC_SUCCESS:
case IBT_WC_WR_FLUSHED_ERR:
#ifdef DEBUG
#ifdef DEBUG
struct reply *r;
switch (op) {
case RDMA_MSG:
case RDMA_NOMSG:
case RDMA_MSGP:
if (find_xid == 0) {
#ifdef DEBUG
if (rib_debug) {
#ifdef DEBUG
switch (code) {
case IBT_HCA_ATTACH_EVENT:
case IBT_HCA_DETACH_EVENT:
#ifdef DEBUG
#ifdef DEBUG
case IBT_EVENT_PATH_MIGRATED:
case IBT_EVENT_SQD:
case IBT_EVENT_COM_EST:
case IBT_ERROR_CQ:
case IBT_ERROR_PORT_DOWN:
case IBT_EVENT_PORT_UP:
case IBT_ASYNC_OPAQUE1:
case IBT_ASYNC_OPAQUE2:
case IBT_ASYNC_OPAQUE3:
case IBT_ASYNC_OPAQUE4:
static rdma_stat
return (RDMA_FAILED);
if (ats_running == 0) {
== RDMA_SUCCESS) {
return (RDMA_SUCCESS);
return (RDMA_FAILED);
return (RDMA_SUCCESS);
return (RDMA_FAILED);
static rdma_stat
return (RDMA_SUCCESS);
static rdma_stat
&chan_sizes);
goto fail;
goto fail;
return (RDMA_SUCCESS);
fail:
if (kqp)
return (RDMA_FAILED);
case IBT_CM_EVENT_CONN_CLOSED:
case IBT_CM_CLOSED_DREP_RCVD:
case IBT_CM_CLOSED_DUP:
case IBT_CM_CLOSED_ABORT:
case IBT_CM_CLOSED_ALREADY:
#ifdef DEBUG
if (rib_debug)
return (IBT_CM_ACCEPT);
switch (addr_type) {
case AF_INET:
case AF_INET6:
return (RDMA_INVAL);
for (i = 0; i < npaths; i++) {
sgid =
&ar_result);
#ifdef DEBUG
sizeof (ibt_path_info_t));
return (RDMA_SUCCESS);
#ifdef DEBUG
if (rib_debug) {
return (RDMA_FAILED);
&chan_sizes);
return (RDMA_FAILED);
#ifdef DEBUG
return (RDMA_FAILED);
#ifdef DEBUG
if (rib_debug)
goto refresh;
return (RDMA_FAILED);
return (RDMA_SUCCESS);
switch (addr_type) {
case AF_INET:
case AF_INET6:
#ifdef DEBUG
if (rib_debug) {
return (RDMA_INVAL);
return (RDMA_SUCCESS);
return (RDMA_FAILED);
* If HCA has been DETACHED and the srv/clnt_conn_list is NULL,
return (RDMA_SUCCESS);
static rdma_stat
switch (cv_wait_ret) {
#ifdef DEBUG
switch (cv_wait_ret) {
#ifdef DEBUG
#ifdef DEBUG
(void *)qp);
return (error);
static struct send_wid *
return (wd);
static rdma_stat
return (RDMA_SUCCESS);
return (RDMA_FAILED);
int i, nds;
nds = 0;
total_msg_size = 0;
return (RDMA_FAILED);
nds++;
if (send_sig) {
for (i = 0; i < nds; i++) {
for (i = 0; i < nds; i++) {
#ifdef DEBUG
return (RDMA_FAILED);
if (send_sig) {
if (cv_sig) {
#ifdef DEBUG
if (ret != 0) {
return (ret);
return (RDMA_SUCCESS);
return (ret);
#ifdef DEBUG
goto done;
timout);
if (cv_wait_ret < 0) {
#ifdef DEBUG
goto done;
done:
return (ret);
static struct recv_wid *
return (rwid);
int nds;
nds = 0;
goto done;
nds++;
goto done;
if (rwid) {
goto done;
if (!rep) {
goto done;
#ifdef DEBUG
goto done;
return (RDMA_SUCCESS);
done:
return (ret);
int nds;
nds = 0;
return (RDMA_FAILED);
nds++;
return (RDMA_FAILED);
#ifdef DEBUG
return (RDMA_FAILED);
return (RDMA_SUCCESS);
return (RDMA_SUCCESS);
return (RDMA_FAILED);
switch (cv_wait_ret) {
#ifdef DEBUG
return (ret);
int nds;
int cv_sig;
return (RDMA_FAILED);
nds = 0;
return (RDMA_FAILED);
nds++;
if (wait) {
cv_sig = 0;
return (RDMA_FAILED);
if (wait) {
if (ret != 0) {
return (ret);
return (RDMA_SUCCESS);
int nds;
int cv_sig;
return (RDMA_FAILED);
nds = 0;
return (RDMA_FAILED);
nds++;
if (wait) {
cv_sig = 0;
#ifdef DEBUG
return (RDMA_FAILED);
if (wait) {
if (ret != 0) {
return (ret);
return (RDMA_SUCCESS);
return (zero == 0);
static ibt_cm_status_t
queue_t *q;
case IBT_CM_EVENT_REQ_RCV:
return (IBT_CM_REJECT);
q = rib_stat->q;
if (status) {
#ifdef DEBUG
return (IBT_CM_REJECT);
#ifdef DEBUG
== IBT_SUCCESS) {
for (i = 0; i < preposted_rbufs; i++) {
return (IBT_CM_REJECT);
return (IBT_CM_REJECT);
return (IBT_CM_REJECT);
if (rib_debug) {
&ar_result);
if (rib_debug) {
struct sockaddr_in *s;
KM_SLEEP);
KM_SLEEP);
sizeof (struct in6_addr));
return (IBT_CM_ACCEPT);
case IBT_CM_EVENT_CONN_CLOSED:
case IBT_CM_CLOSED_DREP_RCVD:
case IBT_CM_CLOSED_DUP:
case IBT_CM_CLOSED_ABORT:
case IBT_CM_CLOSED_ALREADY:
#ifdef DEBUG
if (rib_debug)
case IBT_CM_EVENT_CONN_EST:
return (IBT_CM_REJECT);
return (IBT_CM_ACCEPT);
static rdma_stat
return (RDMA_FAILED);
#ifdef DEBUG
if (rib_debug) {
return (RDMA_FAILED);
#ifdef DEBUG
for (i = 0; i < num_ports; i++) {
sizeof (rpcib_ats_t));
return (RDMA_FAILED);
#ifdef DEBUG
sizeof (rpcib_ats_t));
return (RDMA_FAILED);
nbinds = 0;
for (i = 0; i < num_ports; i++) {
sizeof (struct in_addr);
sizeof (struct in_addr));
sizeof (struct in6_addr));
#ifdef DEBUG
KM_SLEEP);
nbinds ++;
#ifdef DEBUG
#ifdef DEBUG
if (nbinds == 0) {
#ifdef DEBUG
return (RDMA_FAILED);
return (RDMA_SUCCESS);
static rdma_stat
char **addrs;
int addr_count;
return (RDMA_FAILED);
#ifdef DEBUG
return (RDMA_FAILED);
#ifdef DEBUG
for (i = 0; i < num_ports; i++) {
#ifdef DEBUG
if (rib_debug) {
return (RDMA_FAILED);
#ifdef DEBUG
for (i = 0; i < addr_count; i++)
nbinds = 0;
#ifdef DEBUG
if (rib_debug) {
for (i = 0; i < num_ports; i++) {
KM_SLEEP);
KM_SLEEP);
#ifdef DEBUG
#ifdef DEBUG
if (rib_debug) {
sizeof (ibt_sbind_hdl_t));
sizeof (rib_service_t));
#ifdef DEBUG
nbinds ++;
#ifdef DEBUG
for (i = 0; i < addr_count; i++) {
if (addrs[i])
if (nbinds == 0) {
#ifdef DEBUG
if (rib_debug) {
return (RDMA_FAILED);
return (RDMA_SUCCESS);
if (ats_running == 0) {
#ifdef DEBUG
if (rib_debug) {
#ifdef DEBUG
sizeof (ibt_sbind_hdl_t));
static struct svc_recv *
return (recvp);
static struct reply *
return (NULL);
return (rep);
static rdma_stat
struct reply *r, *n;
n = r->next;
return (RDMA_SUCCESS);
return (status);
static rdma_stat
return (RDMA_FAILED);
return (RDMA_FAILED);
return (RDMA_SUCCESS);
&mr_desc);
return (status);
return (RDMA_SUCCESS);
return (RDMA_SUCCESS);
if (cpu) {
return (RDMA_FAILED);
return (RDMA_SUCCESS);
#ifdef DEBUG
status);
return (RDMA_FAILED);
static rdma_stat
return (RDMA_SUCCESS);
switch (ptype) {
case SEND_BUFFER:
case RECV_BUFFER:
goto fail;
goto fail;
goto fail;
return (rbp);
fail:
if (bp) {
if (rbp) {
return (NULL);
switch (ptype) {
case SEND_BUFFER:
case RECV_BUFFER:
switch (ptype) {
case SEND_BUFFER:
case RECV_BUFFER:
static rdma_stat
case SEND_BUFFER:
case RECV_BUFFER:
return (RDMA_SUCCESS);
return (RDMA_FAILED);
void *buf;
switch (ptype) {
case SEND_BUFFER:
case RECV_BUFFER:
return (NULL);
return (NULL);
return (NULL);
return (buf);
return (NULL);
switch (ptype) {
case SEND_BUFFER:
case RECV_BUFFER:
static rdma_stat
return (RDMA_SUCCESS);
static rdma_stat
return (RDMA_SUCCESS);
* It has an RC channel associated with it. ibt_post_send/recv are allowed
static rdma_stat
goto again;
return (status);
if (cv_stat == 0) {
return (RDMA_INTR);
if (cv_stat < 0) {
return (RDMA_TIMEDOUT);
return (status);
return (RDMA_TIMEDOUT);
#ifdef DEBUG
if (rib_debug) {
return (RDMA_FAILED);
return (RDMA_FAILED);
#ifdef DEBUG
if (rib_debug) {
return (status);
static rdma_stat
return (RDMA_SUCCESS);
return (RDMA_SUCCESS);
static struct rdma_done_list *
return (rd);
struct rdma_done_list *r;
if (r != NULL) {
if (r != NULL) {
struct rdma_done_list *r, *n;
n = r->next;
r = r->next;
return (atsp);
return (NULL);
return (DDI_WALK_CONTINUE);
return (DDI_WALK_CONTINUE);
int k, ip_cnt;
&kvp) == 0) {
&kvp6) == 0) {
ip_cnt = 0;
sizeof (struct sockaddr_in));
ip_cnt++;
sizeof (struct sockaddr_in6));
ip_cnt++;
if (ip_cnt == 0)
int num_of_ifs;
char **addresses;
int return_code;
if (return_code != 0) {
return (NULL);
if (return_code != 0) {
return (NULL);
return (NULL);
if (return_code <= 0) {
return (NULL);
return (addresses);
int return_code;
if (return_code != 0) {
#ifdef DEBUG
KM_SLEEP);
if (return_code != 0) {
count = 0;
if_data_buf++) {
count ++;
count ++;
return (count);
NULL, 0);
top:
goto top;