<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7226.0">
<TITLE>[openib-general] 1/2 core kernel changes for query QP</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">Add support to uverbs to handle querying userspace QPs (Queue</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">Pair), including adding an ABI for marshalling requests and</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">responses.  The kernel midlayer already has ib_query_qp().</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">Signed-off-by: Dotan Barak <dotanb@mellanox.co.il></FONT></P>
<BR>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">Index: latest/drivers/infiniband/core/uverbs.h</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">===================================================================</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">--- latest.orig/drivers/infiniband/core/uverbs.h        2006-02-09 08:03:56.000000000 +0200</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+++ latest/drivers/infiniband/core/uverbs.h     2006-02-09 17:16:58.000000000 +0200</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">@@ -191,6 +191,7 @@ IB_UVERBS_DECLARE_CMD(req_notify_cq);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> IB_UVERBS_DECLARE_CMD(destroy_cq);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> IB_UVERBS_DECLARE_CMD(create_qp);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> IB_UVERBS_DECLARE_CMD(modify_qp);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+IB_UVERBS_DECLARE_CMD(query_qp);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> IB_UVERBS_DECLARE_CMD(destroy_qp);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> IB_UVERBS_DECLARE_CMD(post_send);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> IB_UVERBS_DECLARE_CMD(post_recv);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">Index: latest/drivers/infiniband/core/uverbs_cmd.c</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">===================================================================</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">--- latest.orig/drivers/infiniband/core/uverbs_cmd.c    2006-02-09 08:03:56.000000000 +0200</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+++ latest/drivers/infiniband/core/uverbs_cmd.c 2006-02-09 17:35:51.000000000 +0200</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">@@ -1079,6 +1079,110 @@ out:</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        return ret;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> }</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> </FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+ssize_t ib_uverbs_query_qp(struct ib_uverbs_file *file,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+                          const char __user *buf, int in_len,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+                          int out_len)</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+{</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       struct ib_uverbs_query_qp      cmd;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       struct ib_uverbs_query_qp_resp resp;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       struct ib_qp                   *qp;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       struct ib_qp_attr              *attr;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       struct ib_qp_init_attr         *init_attr;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       int                            ret;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       if (copy_from_user(&cmd, buf, sizeof cmd))</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+               return -EFAULT;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       attr = kmalloc(sizeof *attr, GFP_KERNEL);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       if (!attr)</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+               return -ENOMEM;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       init_attr = kmalloc(sizeof *init_attr, GFP_KERNEL);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       if (!init_attr) {</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+               kfree(attr);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+               return -ENOMEM;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       }</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       mutex_lock(&ib_uverbs_idr_mutex);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       qp = idr_find(&ib_uverbs_qp_idr, cmd.qp_handle);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       if (!qp || qp->uobject->context != file->ucontext) {</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+               ret = -EINVAL;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+               goto out1;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       }</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       ret = ib_query_qp(qp, attr, cmd.attr_mask, init_attr);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+out1:</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       mutex_unlock(&ib_uverbs_idr_mutex);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       if (ret)</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+               goto out2;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       memset(&resp, 0, sizeof resp);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.qp_state               = attr->qp_state;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.cur_qp_state           = attr->cur_qp_state;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.path_mtu               = attr->path_mtu;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.path_mig_state         = attr->path_mig_state;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.qkey                   = attr->qkey;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.rq_psn                 = attr->rq_psn;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.sq_psn                 = attr->sq_psn;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest_qp_num            = attr->dest_qp_num;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.qp_access_flags        = attr->qp_access_flags;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.pkey_index             = attr->pkey_index;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_pkey_index         = attr->alt_pkey_index;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.en_sqd_async_notify    = attr->en_sqd_async_notify;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.max_rd_atomic          = attr->max_rd_atomic;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.max_dest_rd_atomic     = attr->max_dest_rd_atomic;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.min_rnr_timer          = attr->min_rnr_timer;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.port_num               = attr->port_num;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.timeout                = attr->timeout;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.retry_cnt              = attr->retry_cnt;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.rnr_retry              = attr->rnr_retry;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_port_num           = attr->alt_port_num;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_timeout            = attr->alt_timeout;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       memcpy(resp.dest.dgid, attr->ah_attr.grh.dgid.raw, 16);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.flow_label        = attr->ah_attr.grh.flow_label;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.sgid_index        = attr->ah_attr.grh.sgid_index;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.hop_limit         = attr->ah_attr.grh.hop_limit;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.traffic_class     = attr->ah_attr.grh.traffic_class;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.dlid              = attr->ah_attr.dlid;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.sl                = attr->ah_attr.sl;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.src_path_bits     = attr->ah_attr.src_path_bits;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.static_rate       = attr->ah_attr.static_rate;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.is_global         = (attr->ah_attr.ah_flags & IB_AH_GRH);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.dest.port_num          = attr->ah_attr.port_num;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       memcpy(resp.alt_dest.dgid, attr->alt_ah_attr.grh.dgid.raw, 16);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.flow_label    = attr->alt_ah_attr.grh.flow_label;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.sgid_index    = attr->alt_ah_attr.grh.sgid_index;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.hop_limit     = attr->alt_ah_attr.grh.hop_limit;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.traffic_class = attr->alt_ah_attr.grh.traffic_class;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.dlid          = attr->alt_ah_attr.dlid;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.sl            = attr->alt_ah_attr.sl;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.src_path_bits = attr->alt_ah_attr.src_path_bits;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.static_rate   = attr->alt_ah_attr.static_rate;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.is_global     = !!(attr->alt_ah_attr.ah_flags & IB_AH_GRH);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.alt_dest.port_num      = attr->alt_ah_attr.port_num;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.max_send_wr            = init_attr->cap.max_send_wr;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.max_recv_wr            = init_attr->cap.max_recv_wr;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.max_send_sge           = init_attr->cap.max_send_sge;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.max_recv_sge           = init_attr->cap.max_recv_sge;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.max_inline_data        = init_attr->cap.max_inline_data;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       resp.sq_sig_all             = !!init_attr->sq_sig_type;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       if (copy_to_user((void __user *) (unsigned long) cmd.response,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+                        &resp, sizeof resp))</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+               ret = -EFAULT;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+out2:</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       kfree(attr);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       kfree(init_attr);</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       return ret ? ret : in_len;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+}</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> ssize_t ib_uverbs_destroy_qp(struct ib_uverbs_file *file,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">                             const char __user *buf, int in_len,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">                             int out_len)</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">Index: latest/drivers/infiniband/core/uverbs_main.c</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">===================================================================</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">--- latest.orig/drivers/infiniband/core/uverbs_main.c   2006-02-09 17:05:56.000000000 +0200</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+++ latest/drivers/infiniband/core/uverbs_main.c        2006-02-09 17:17:29.000000000 +0200</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">@@ -97,6 +97,7 @@ static ssize_t (*uverbs_cmd_table[])(str</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        [IB_USER_VERBS_CMD_DESTROY_CQ]          = ib_uverbs_destroy_cq,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        [IB_USER_VERBS_CMD_CREATE_QP]           = ib_uverbs_create_qp,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        [IB_USER_VERBS_CMD_MODIFY_QP]           = ib_uverbs_modify_qp,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       [IB_USER_VERBS_CMD_QUERY_QP]            = ib_uverbs_query_qp,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        [IB_USER_VERBS_CMD_DESTROY_QP]          = ib_uverbs_destroy_qp,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        [IB_USER_VERBS_CMD_POST_SEND]           = ib_uverbs_post_send,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        [IB_USER_VERBS_CMD_POST_RECV]           = ib_uverbs_post_recv,</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">Index: latest/drivers/infiniband/include/rdma/ib_user_verbs.h</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">===================================================================</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">--- latest.orig/drivers/infiniband/include/rdma/ib_user_verbs.h 2006-02-09 08:03:53.000000000 +0200</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+++ latest/drivers/infiniband/include/rdma/ib_user_verbs.h      2006-02-09 17:21:02.000000000 +0200</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">@@ -461,6 +461,47 @@ struct ib_uverbs_modify_qp {</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> struct ib_uverbs_modify_qp_resp {</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> };</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> </FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+struct ib_uverbs_query_qp {</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u64 response;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 qp_handle;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 attr_mask;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u64 driver_data[0];</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+};</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+struct ib_uverbs_query_qp_resp {</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       struct ib_uverbs_qp_dest dest;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       struct ib_uverbs_qp_dest alt_dest;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 max_send_wr;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 max_recv_wr;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 max_send_sge;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 max_recv_sge;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 max_inline_data;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 qkey;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 rq_psn;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 sq_psn;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 dest_qp_num;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u32 qp_access_flags;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u16 pkey_index;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u16 alt_pkey_index;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  qp_state;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  cur_qp_state;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  path_mtu;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  path_mig_state;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  en_sqd_async_notify;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  max_rd_atomic;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  max_dest_rd_atomic;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  min_rnr_timer;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  port_num;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  timeout;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  retry_cnt;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  rnr_retry;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  alt_port_num;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  alt_timeout;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  sq_sig_all;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u8  reserved[5];</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+       __u64 driver_data[0];</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+};</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">+</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New"> struct ib_uverbs_destroy_qp {</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        __u64 response;</FONT></P>

<P DIR=LTR><FONT SIZE=2 FACE="Courier New">        __u32 qp_handle;</FONT></P>
<BR>
<BR>

<P DIR=LTR><B><I><FONT COLOR="#008080" SIZE=6 FACE="Script">Dotan Barak</FONT></I></B></P>

<P DIR=LTR><FONT FACE="Times New Roman">Software Verification Engineer</FONT></P>

<P DIR=LTR><FONT FACE="Times New Roman">Mellanox Technologies</FONT></P>

<P DIR=LTR><FONT FACE="Times New Roman">Tel: +972-4-9097200 Ext: 231 Fax: +972-4-9593245</FONT></P>

<P DIR=LTR><FONT FACE="Times New Roman">P.O. Box 86 Yokneam 20692 ISRAEL.</FONT></P>

<P DIR=LTR><FONT FACE="Times New Roman">Home: +972-77-8841095  Cell: 0</FONT><FONT SIZE=2 FACE="Arial">52-4222383</FONT></P>

<P DIR=LTR><FONT COLOR="#008080" SIZE=2 FACE="Arial">[ May the fork be with you ]</FONT></P>

</BODY>
</HTML>