Whamcloud - gitweb
land b1_4_bgl on HEAD (20050404_1913)
[fs/lustre-release.git] / lnet / klnds / viblnd / viblnd.c
index d54d4c8..7995610 100644 (file)
@@ -47,6 +47,131 @@ static ctl_table kibnal_top_ctl_table[] = {
 };
 #endif
 
+void vibnal_assert_wire_constants (void)
+{
+        /* Wire protocol assertions generated by 'wirecheck'
+         * running on Linux robert.bartonsoftware.com 2.6.5-1.358 #1 Sat May 8 09:04:50 EDT 2004 i686
+         * with gcc version 3.3.3 20040412 (Red Hat Linux 3.3.3-7) */
+
+
+        /* Constants... */
+        CLASSERT (IBNAL_MSG_MAGIC == 0x0be91b91);
+        CLASSERT (IBNAL_MSG_VERSION == 6);
+        CLASSERT (IBNAL_MSG_CONNREQ == 0xc0);
+        CLASSERT (IBNAL_MSG_CONNACK == 0xc1);
+        CLASSERT (IBNAL_MSG_NOOP == 0xd0);
+        CLASSERT (IBNAL_MSG_IMMEDIATE == 0xd1);
+        CLASSERT (IBNAL_MSG_PUT_REQ == 0xd2);
+        CLASSERT (IBNAL_MSG_PUT_NAK == 0xd3);
+        CLASSERT (IBNAL_MSG_PUT_ACK == 0xd4);
+        CLASSERT (IBNAL_MSG_PUT_DONE == 0xd5);
+        CLASSERT (IBNAL_MSG_GET_REQ == 0xd6);
+        CLASSERT (IBNAL_MSG_GET_DONE == 0xd7);
+
+        /* Checks for struct kib_connparams_t */
+        CLASSERT ((int)sizeof(kib_connparams_t) == 12);
+        CLASSERT ((int)offsetof(kib_connparams_t, ibcp_queue_depth) == 0);
+        CLASSERT ((int)sizeof(((kib_connparams_t *)0)->ibcp_queue_depth) == 4);
+        CLASSERT ((int)offsetof(kib_connparams_t, ibcp_max_msg_size) == 4);
+        CLASSERT ((int)sizeof(((kib_connparams_t *)0)->ibcp_max_msg_size) == 4);
+        CLASSERT ((int)offsetof(kib_connparams_t, ibcp_max_frags) == 8);
+        CLASSERT ((int)sizeof(((kib_connparams_t *)0)->ibcp_max_frags) == 4);
+
+        /* Checks for struct kib_immediate_msg_t */
+        CLASSERT ((int)sizeof(kib_immediate_msg_t) == 72);
+        CLASSERT ((int)offsetof(kib_immediate_msg_t, ibim_hdr) == 0);
+        CLASSERT ((int)sizeof(((kib_immediate_msg_t *)0)->ibim_hdr) == 72);
+        CLASSERT ((int)offsetof(kib_immediate_msg_t, ibim_payload[13]) == 85);
+        CLASSERT ((int)sizeof(((kib_immediate_msg_t *)0)->ibim_payload[13]) == 1);
+
+        /* Checks for struct kib_rdma_frag_t */
+        CLASSERT ((int)sizeof(kib_rdma_frag_t) == 12);
+        CLASSERT ((int)offsetof(kib_rdma_frag_t, rf_nob) == 0);
+        CLASSERT ((int)sizeof(((kib_rdma_frag_t *)0)->rf_nob) == 4);
+        CLASSERT ((int)offsetof(kib_rdma_frag_t, rf_addr_lo) == 4);
+        CLASSERT ((int)sizeof(((kib_rdma_frag_t *)0)->rf_addr_lo) == 4);
+        CLASSERT ((int)offsetof(kib_rdma_frag_t, rf_addr_hi) == 8);
+        CLASSERT ((int)sizeof(((kib_rdma_frag_t *)0)->rf_addr_hi) == 4);
+
+        /* Checks for struct kib_rdma_desc_t */
+        CLASSERT ((int)sizeof(kib_rdma_desc_t) == 8);
+        CLASSERT ((int)offsetof(kib_rdma_desc_t, rd_key) == 0);
+        CLASSERT ((int)sizeof(((kib_rdma_desc_t *)0)->rd_key) == 4);
+        CLASSERT ((int)offsetof(kib_rdma_desc_t, rd_nfrag) == 4);
+        CLASSERT ((int)sizeof(((kib_rdma_desc_t *)0)->rd_nfrag) == 4);
+        CLASSERT ((int)offsetof(kib_rdma_desc_t, rd_frags[13]) == 164);
+        CLASSERT ((int)sizeof(((kib_rdma_desc_t *)0)->rd_frags[13]) == 12);
+
+        /* Checks for struct kib_putreq_msg_t */
+        CLASSERT ((int)sizeof(kib_putreq_msg_t) == 80);
+        CLASSERT ((int)offsetof(kib_putreq_msg_t, ibprm_hdr) == 0);
+        CLASSERT ((int)sizeof(((kib_putreq_msg_t *)0)->ibprm_hdr) == 72);
+        CLASSERT ((int)offsetof(kib_putreq_msg_t, ibprm_cookie) == 72);
+        CLASSERT ((int)sizeof(((kib_putreq_msg_t *)0)->ibprm_cookie) == 8);
+
+        /* Checks for struct kib_putack_msg_t */
+        CLASSERT ((int)sizeof(kib_putack_msg_t) == 24);
+        CLASSERT ((int)offsetof(kib_putack_msg_t, ibpam_src_cookie) == 0);
+        CLASSERT ((int)sizeof(((kib_putack_msg_t *)0)->ibpam_src_cookie) == 8);
+        CLASSERT ((int)offsetof(kib_putack_msg_t, ibpam_dst_cookie) == 8);
+        CLASSERT ((int)sizeof(((kib_putack_msg_t *)0)->ibpam_dst_cookie) == 8);
+        CLASSERT ((int)offsetof(kib_putack_msg_t, ibpam_rd) == 16);
+        CLASSERT ((int)sizeof(((kib_putack_msg_t *)0)->ibpam_rd) == 8);
+
+        /* Checks for struct kib_get_msg_t */
+        CLASSERT ((int)sizeof(kib_get_msg_t) == 88);
+        CLASSERT ((int)offsetof(kib_get_msg_t, ibgm_hdr) == 0);
+        CLASSERT ((int)sizeof(((kib_get_msg_t *)0)->ibgm_hdr) == 72);
+        CLASSERT ((int)offsetof(kib_get_msg_t, ibgm_cookie) == 72);
+        CLASSERT ((int)sizeof(((kib_get_msg_t *)0)->ibgm_cookie) == 8);
+        CLASSERT ((int)offsetof(kib_get_msg_t, ibgm_rd) == 80);
+        CLASSERT ((int)sizeof(((kib_get_msg_t *)0)->ibgm_rd) == 8);
+
+        /* Checks for struct kib_completion_msg_t */
+        CLASSERT ((int)sizeof(kib_completion_msg_t) == 12);
+        CLASSERT ((int)offsetof(kib_completion_msg_t, ibcm_cookie) == 0);
+        CLASSERT ((int)sizeof(((kib_completion_msg_t *)0)->ibcm_cookie) == 8);
+        CLASSERT ((int)offsetof(kib_completion_msg_t, ibcm_status) == 8);
+        CLASSERT ((int)sizeof(((kib_completion_msg_t *)0)->ibcm_status) == 4);
+
+        /* Checks for struct kib_msg_t */
+        CLASSERT ((int)sizeof(kib_msg_t) == 144);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_magic) == 0);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_magic) == 4);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_version) == 4);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_version) == 2);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_type) == 6);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_type) == 1);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_credits) == 7);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_credits) == 1);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_nob) == 8);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_nob) == 4);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_cksum) == 12);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_cksum) == 4);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_srcnid) == 16);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_srcnid) == 8);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_srcstamp) == 24);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_srcstamp) == 8);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_dstnid) == 32);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_dstnid) == 8);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_dststamp) == 40);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_dststamp) == 8);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_seq) == 48);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_seq) == 8);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_u.connparams) == 56);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_u.connparams) == 12);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_u.immediate) == 56);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_u.immediate) == 72);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_u.putreq) == 56);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_u.putreq) == 80);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_u.putack) == 56);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_u.putack) == 24);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_u.get) == 56);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_u.get) == 88);
+        CLASSERT ((int)offsetof(kib_msg_t, ibm_u.completion) == 56);
+        CLASSERT ((int)sizeof(((kib_msg_t *)0)->ibm_u.completion) == 12);
+}
+
 void
 kibnal_pause(int ticks)
 {
@@ -185,10 +310,7 @@ kibnal_unpack_msg(kib_msg_t *msg, int nob)
                 break;
 
         case IBNAL_MSG_PUT_REQ:
-                /* CAVEAT EMPTOR!  We don't actually put ibprm_rd on the wire;
-                 * it's just there to remember the source buffers while we wait
-                 * for the PUT_ACK */
-                if (msg_nob < offsetof(kib_msg_t, ibm_u.putreq.ibprm_rd)) {
+                if (msg_nob < sizeof(msg->ibm_u.putreq)) {
                         CERROR("Short PUT_REQ: %d(%d)\n", msg_nob,
                                (int)(hdr_size + sizeof(msg->ibm_u.putreq)));
                         return -EPROTO;
@@ -1175,7 +1297,7 @@ kibnal_alloc_pages (kib_pages_t **pp, int npages, int allow_write)
 
         for (i = 0; i < npages; i++) {
                 phys_pages[i].size = PAGE_SIZE;
-                phys_pages[i].start = page_to_phys(p->ibp_pages[i]);
+                phys_pages[i].start = kibnal_page2phys(p->ibp_pages[i]);
         }
 
         VV_ACCESS_CONTROL_MASK_SET_ALL(access);
@@ -1778,6 +1900,8 @@ kibnal_module_init (void)
 {
         int    rc;
 
+        vibnal_assert_wire_constants();
+
         CLASSERT (offsetof(kib_msg_t, ibm_u) + sizeof(kib_connparams_t) 
                   <= cm_REQ_priv_data_len);
         CLASSERT (offsetof(kib_msg_t, ibm_u) + sizeof(kib_connparams_t)