[openib-general] [iSER]use iSER on x86_64

Dan Bar Dov danb at voltaire.com
Mon Aug 8 10:09:24 PDT 2005


Ian, hi

Please send patches for the modifications you made for x86_64. In any case, we'll be upgrading the ISER implementation to be openIB/kDAPL based (DAT1.2, but with the openIB DAT headers). It will support x86_64.

To test you'll have to have InfiniBand hardware (HCA+switch) plus an ISER target.

Dan 

> -----Original Message-----
> From: openib-general-bounces at openib.org 
> [mailto:openib-general-bounces at openib.org] On Behalf Of Ian Jiang
> Sent: Sunday, August 07, 2005 3:36 AM
> To: openib-general at openib.org
> Subject: [openib-general] [iSER]use iSER on x86_64
> 
> [I sent this mail the day before yesterday, but it did not 
> appear on the list. So I just try again.]
> 
> I modified several files under iSER/datamover/ to use it on 
> my x86_64 machine.
> I also edited the iSER/make.conf file where necessary.
> I could compile the iSER without any errors by now, but I am 
> not sure if it can works with the iSCSI initiator or the 
> kDAPL, because I have no idea to test it yet.
> 
> The iSER is obtained from
>        https://openib.org/svn/gen2/ulps/iser/
> The dat headers related could be either
>        http://sourceforge.net/projects/dapl/dapl_beta2.06/dat/
> or
>        http://www.datcollaborative.org/dat_headers_1.2.tgz/
> 
> Any suggestion is appriciated!
> 
> 
> Ian Jiang
> ianjiang91 at hotmail.com
> ----
> Computer Architecture Laboratory
> Institute of Computing Technology
> Chinese Academy of Sciences
> Beijing,P.R.China
> Zip code: 100080
> Tel: +86-10-62564394(office)
> 
> 
> ======================
> iser-datamover.patches
> ======================
> 
> --- iser_conn.c.old     2005-08-04 01:40:23.000000000 +0800
> +++ iser_conn.c 2005-08-05 06:36:56.000000000 +0800
> @@ -602,8 +602,11 @@
>        /* Find the connection */
>        p_iser_conn = hash_find_iser_conn(iscsi_conn_h);
>        if (p_iser_conn == NULL) {
> -               IERROR("Connection not found, conn_h: %d\n",
> -                      (unsigned) iscsi_conn_h);
> + /* by IanJiang, ianjiang at ict.ac.cn */
> +       //      IERROR("Connection not found, conn_h: %d\n",
> +               IERROR("Connection not found, conn_h: %ld\n",
> +                       // (unsigned) iscsi_conn_h);
> +                       (unsigned long) iscsi_conn_h);
>                return ISER_INVALID_CONN;
>        }
> 
> --- iser_dto.c.old      2005-08-04 05:59:17.000000000 +0800
> +++ iser_dto.c  2005-08-05 06:37:28.000000000 +0800
> @@ -356,7 +356,9 @@
> 
>        /* Get the VA of the headers registered memory */
>        p_recv_buf =
> -           (unsigned char *) (unsigned int) 
> p_dto->regd[0]->virt_buf.p_buf;
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//         (unsigned char *) (unsigned int) 
> p_dto->regd[0]->virt_buf.p_buf;
> +           (unsigned char *) (unsigned long)
> p_dto->regd[0]->virt_buf.p_buf;
>        /* Account for the offset within it */
>        p_recv_buf += p_dto->offset[0];
>        /* Skip the iSER header to get the iSCSI PDU BHS */
> --- iser_global.c.old   2005-08-04 01:40:04.000000000 +0800
> +++ iser_global.c       2005-08-05 06:38:06.000000000 +0800
> @@ -571,7 +571,9 @@
>                  unsigned port)        /*!< IN - listening port */
>  {
>        struct iser_entity_t *p_entity;
> -       unsigned entity_index = (unsigned) api_h;
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +       unsigned long entity_index = (unsigned long) api_h;
> +//     unsigned entity_index = (unsigned) api_h;
> 
>        if (entity_index >= iser_global.num_entities) {
>                return ISER_ILLEGAL_PARAM;
> --- iser_initiator.c.old        2005-08-04 01:39:47.000000000 +0800
> +++ iser_initiator.c    2005-08-05 06:45:48.000000000 +0800
> @@ -276,15 +276,21 @@
>        p_iser_conn = hash_find_iser_conn(iscsi_conn_h);
> 
>        if (p_iser_conn == NULL) {
> -               IERROR("Failed to find connection, 
> iscsi_conn_h: %X\n",
> -                      (unsigned) iscsi_conn_h);
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +               //IERROR("Failed to find connection, 
> iscsi_conn_h: %X\n",
> +               IERROR("Failed to find connection, 
> iscsi_conn_h: %lX\n",
> +                      //(unsigned) iscsi_conn_h);
> +                      (unsigned long) iscsi_conn_h);
>                iser_pdu_print((char *) __func__, NULL, 
> p_bhs->buf, NULL);
>                iser_ret = ISER_INVALID_CONN;
>                goto send_control_error;
>        }
>        if (atomic_read(&p_iser_conn->state) != ISER_CONN_UP) {
> -               IERROR("Connection is not up, iscsi_conn_h: 
> %X, p_conn: 
> 0x%p\n",
> -                      (unsigned) iscsi_conn_h, p_iser_conn);
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +               //IERROR("Connection is not up, iscsi_conn_h: 
> %X, p_conn: 
> 0x%p\n",
> +               IERROR("Connection is not up, iscsi_conn_h: 
> %lX, p_conn: 
> 0x%p\n",
> +                      //(unsigned ) iscsi_conn_h, p_iser_conn);
> +                      (unsigned long) iscsi_conn_h, p_iser_conn);
>                iser_pdu_print((char *) __func__, NULL, 
> p_bhs->buf, NULL);
>                iser_ret = ISER_FAILURE;
>                goto send_control_error;
> --- iser_kdapl.c.old    2005-08-04 02:12:25.000000000 +0800
> +++ iser_kdapl.c        2005-08-05 06:46:13.000000000 +0800
> @@ -49,6 +49,9 @@
>  #include "iser_procfs.h"
>  #include "iser_trace.h"
> 
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +#define DAT_MEM_OPT_DONT_CARE DAT_MEM_OPTIMIZE_DONT_CARE
> +
>  /* 
> ---------------------------------------------------------------------
>  * CONSTANTS & MACROS
>  * 
> ------------------------------------------------------------------ */
> --- iser_memory.c.old   2005-08-04 02:14:55.000000000 +0800
> +++ iser_memory.c       2005-08-05 06:47:51.000000000 +0800
> @@ -683,10 +683,14 @@
>                    list_entry(p_list, struct iser_buf_pool_region_t,
>                               pool_list);
>                n += sprintf(p_str + n,
> -                            "\t%3d: mem[0x%p sz:%7d t:%d] 
> lmr[h:0x%08x 
> va:0x%08x sz:%7d]\n",
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//                          "\t%3d: mem[0x%p sz:%7d t:%d] 
> lmr[h:0x%08x 
> va:0x%08x sz:%7d]\n",
> +                            "\t%3d: mem[0x%p sz:%7d t:%d] 
> lmr[h:0x%08lx
> va:0x%08x sz:%7d]\n",
>                             p_pool_region->id, 
> p_pool_region->buf.p_buf,
>                             p_pool_region->buf.size, 
> p_pool_region->buf.type,
> -                            (unsigned) 
> p_pool_region->mem_reg.lmr_handle,
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//                          (unsigned) 
> p_pool_region->mem_reg.lmr_handle,
> +                            (unsigned long)
> p_pool_region->mem_reg.lmr_handle,
>                             (unsigned) 
> p_pool_region->mem_reg.lmr_triplet.
>                             virtual_address,
>                             (unsigned) 
> p_pool_region->mem_reg.lmr_triplet.
> @@ -958,13 +962,18 @@
>        ITRACE_ENTRY();
> 
>        if (p_iser_adaptor->regd_mem.virt_buf.size > 0) {      
>  /* if any 
> pre-regd
> buffer */
> -               unsigned start_regd_buf =
> -                   (unsigned) 
> p_iser_adaptor->regd_mem.virt_buf.p_buf;
> -               unsigned end_regd_buf =
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//             unsigned start_regd_buf =
> +               unsigned long start_regd_buf =
> +//                 (unsigned) 
> p_iser_adaptor->regd_mem.virt_buf.p_buf;
> +                   (unsigned long)
> p_iser_adaptor->regd_mem.virt_buf.p_buf;
> +//             unsigned end_regd_buf =
> +               unsigned long end_regd_buf =
>                    start_regd_buf + 
> p_iser_adaptor->regd_mem.virt_buf.size;
> 
>                ITRACE(ISER_TRACE_BUFFERS,
> -                      "Looking up buf: 0x%08x - 0x%08x in 
> cache: 0x%08x - 
> 0x%08x\n",
> +//                    "Looking up buf: 0x%08x - 0x%08x in 
> cache: 0x%08x - 
> 0x%08x\n",
> +                      "Looking up buf: 0x%08x - 0x%08x in cache: 
> + 0x%08lx -
> 0x%08lx\n",
>                       buf_addr, buf_addr + buf_size, start_regd_buf,
>                       end_regd_buf);
>                if (start_regd_buf <= buf_addr
> --- iser_procfs.c.old   2005-08-04 06:01:50.000000000 +0800
> +++ iser_procfs.c       2005-08-05 06:48:33.000000000 +0800
> @@ -207,9 +207,13 @@
>        p_iser_conn = (struct iser_conn_t *) data;
> 
>        page[0] = '\0';
> -       n += sprintf(buf, "iSCSI handle: 0x%08X\nkDAPL EP handle: 
> 0x%08X\n",
> -                    (unsigned) p_iser_conn->iscsi_conn_h,
> -                    (unsigned) p_iser_conn->ep_handle);
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//     n += sprintf(buf, "iSCSI handle: 0x%08X\nkDAPL EP handle: 
> 0x%08X\n",
> +       n += sprintf(buf, "iSCSI handle: 0x%08lX\nkDAPL EP handle: 
> 0x%08lX\n",
> +//                  (unsigned) p_iser_conn->iscsi_conn_h,
> +                    (unsigned long) p_iser_conn->iscsi_conn_h,
> +//                  (unsigned along) p_iser_conn->ep_handle);
> +                    (unsigned long) p_iser_conn->ep_handle);
>        strcat(page, buf);
> 
>        n += sprintf(buf, "State: %s\n", 
> iser_conn_get_state_name(p_iser_conn));
> --- iser_utils.c.old    2005-08-04 02:42:16.000000000 +0800
> +++ iser_utils.c        2005-08-05 06:48:55.000000000 +0800
> @@ -32,6 +32,10 @@
>  * $Id: iser_utils.c,v 1.38 2005/01/31 08:02:00 danb Exp $  */
> 
> +/* by IanJiang, ianjiang at ict.ac.cn
> + * replace u32 by u64 in 5 places
> + */
> +
>  #include <linux/module.h>
>  #include <linux/kernel.h>
>  #include <linux/slab.h>
> @@ -102,7 +106,7 @@
> 
>        ITRACE_ENTRY();
> 
> -       hash_val = hash_func(iser_task->itt ^ (u32) 
> iser_task->p_conn);
> +       hash_val = hash_func(iser_task->itt ^ (u64) 
> iser_task->p_conn);
> 
>        ITRACE(ISER_TRACE_HASHTABLES,
>               "p_task: 0x%p, p_conn: 0x%p, itt: %d, hash_val 
> = %d\n", @@ -126,7 +130,7 @@  */  struct iser_task_t *
>  hash_find_iser_task(struct iser_conn_t *iser_conn,     /*!< 
> IN - part of 
> hash
> key */
> -                   u32 itt)    /*!< IN -  part of hash key */
> +                   u64 itt)    /*!< IN -  part of hash key */
>  {
>        int hash_val;
>        struct list_head *p_bucket;
> @@ -135,7 +139,7 @@
> 
>        ITRACE_ENTRY();
> 
> -       hash_val = hash_func(itt ^ (u32) iser_conn);
> +       hash_val = hash_func(itt ^ (u64) iser_conn);
>        p_bucket = &(iser_global.task_hash.bucket_head[hash_val]);
> 
>        spin_lock(&iser_global.task_hash.lock);
> @@ -151,8 +155,11 @@
>        spin_unlock(&iser_global.task_hash.lock);
> 
>        ITRACE(ISER_TRACE_HASHTABLES,
> -              "p_conn: 0x%p, itt: %d, hash_val = %d, found p_task: 
> 0x%p\n",
> -              iser_conn, itt, hash_val, iser_task);
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//            "p_conn: 0x%p, itt: %d, hash_val = %d, found p_task: 
> 0x%p\n",
> +//            iser_conn, itt, hash_val, iser_task);
> +              "p_conn: 0x%p, itt: %ld, hash_val = %d, found p_task: 
> 0x%p\n",
> +              iser_conn, (unsigned long)itt, hash_val, iser_task);
> 
>        ITRACE_EXIT();
>        return iser_task;
> @@ -188,7 +195,7 @@
> 
>        ITRACE_ENTRY();
> 
> -       hash_val = hash_func((u32) iser_conn->iscsi_conn_h);
> +       hash_val = hash_func((u64) iser_conn->iscsi_conn_h);
> 
>        spin_lock(&iser_global.conn_hash.lock);
>        INIT_LIST_HEAD(&iser_conn->hash_list);
> @@ -216,7 +223,7 @@
> 
>        ITRACE_ENTRY();
> 
> -       hash_val = hash_func((u32) iscsi_conn_h);
> +       hash_val = hash_func((u64) iscsi_conn_h);
>        p_bucket = &(iser_global.conn_hash.bucket_head[hash_val]);
> 
>        spin_lock(&iser_global.conn_hash.lock);
> @@ -349,8 +356,11 @@
>                virt_addr = p_iovec_virt[i].iov_base;
>                p_phys[i].addr = virt_to_phys(virt_addr);
>                ITRACE(ISER_TRACE_BUFFERS,
> -                      "IOVEC[%d] virt: 0x%08X -> phys: 
> 0x%08X, sz: %d\n", 
> i,
> -                      (unsigned) virt_addr, p_phys[i].addr,
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//                    "IOVEC[%d] virt: 0x%08X -> phys: 
> 0x%08X, sz: %d\n", 
> i,
> +//                    (unsigned) virt_addr, p_phys[i].addr,
> +                      "IOVEC[%d] virt: 0x%08lX -> phys: 0x%08X, sz: 
> %ld\n", i,
> +                      (unsigned long) virt_addr, p_phys[i].addr,
>                       p_iovec_virt[i].iov_len);
>                p_phys[i].size = p_iovec_virt[i].iov_len;
>                total_sz += p_iovec_virt[i].iov_len; @@ -393,7 
> +403,9 @@
>        }
> 
>        for (i = 0; i < p_data->size; i++) {
> -               p_phys[i].addr = (uint32_t) p_iovec_phys[i].iov_base;
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//             p_phys[i].addr = (uint32_t) p_iovec_phys[i].iov_base;
> +               p_phys[i].addr = (uint64_t) p_iovec_phys[i].iov_base;
>                p_phys[i].size = p_iovec_phys[i].iov_len;
>                total_sz += p_iovec_phys[i].iov_len;
> 
> @@ -440,10 +452,14 @@
>               "starting scatterlist conversion - %d 
> elements\n", p_data->size);
>        for (i = 0; i < p_data->size; i++) {
>                p_phys[i].addr = page_to_phys(p_sg[i].page) + 
> p_sg[i].offset;
> +/* by IanJiang, ianjiang at ict.ac.cn */
>                ITRACE(ISER_TRACE_BUFFERS,
> -                      "SCATTER[%d] page: 0x%08X + 0x%8X -> 
> phys: 0x%08X, 
> sz: %d\n",
> -                      i, (unsigned) p_sg[i].page, p_sg[i].offset,
> -                      p_phys[i].addr, p_sg[i].length);
> +//                    "SCATTER[%d] page: 0x%08X + 0x%8X -> 
> phys: 0x%08X, 
> sz: %d\n",
> +                      "SCATTER[%d] page: 0x%08lX + 0x%8X -> phys: 
> + 0x%08lX,
> sz: %d\n",
> +//                    i, (unsigned) p_sg[i].page, p_sg[i].offset,
> +                      i, (unsigned long) p_sg[i].page, 
> p_sg[i].offset,
> +//                    p_phys[i].addr, p_sg[i].length);
> +                      (unsigned long) p_phys[i].addr, 
> p_sg[i].length);
>                p_phys[i].size = p_sg[i].length;
>                total_sz += p_sg[i].length;
>        }
> @@ -501,7 +517,9 @@
>  void *
>  iser_phys_to_virt(void *phys_addr)
>  {
> -       return phys_to_virt((unsigned) phys_addr);
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//     return phys_to_virt((unsigned) phys_addr);
> +       return phys_to_virt((unsigned long) phys_addr);
>  }
> 
>  /**
> @@ -535,7 +553,9 @@
>  {
>        struct iovec *p_iovec;
>        p_iovec = (struct iovec *) p_iovec_phys;
> -       return phys_to_virt((unsigned) p_iovec[i].iov_base);
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//     return phys_to_virt((unsigned) p_iovec[i].iov_base);
> +       return phys_to_virt((unsigned long) p_iovec[i].iov_base);
>  }
> 
>  /**
> --- iser_utils.h.old    2005-07-01 17:41:00.000000000 +0800
> +++ iser_utils.h        2005-08-05 06:49:32.000000000 +0800
> @@ -48,7 +48,9 @@
>  * ISER TASK-SPECIFIC HASH MANAGEMENT
>  * 
> ------------------------------------------------------------------ */
> 
> -struct iser_task_t *hash_find_iser_task(struct iser_conn_t 
> *iser_conn, u32 itt);
> +/* by IanJiang, ianjiang at ict.ac.cn */
> +//struct iser_task_t *hash_find_iser_task(struct iser_conn_t 
> +*iser_conn,
> u32 itt);
> +struct iser_task_t *hash_find_iser_task(struct iser_conn_t 
> *iser_conn, 
> +u64
> itt);
> 
>  void
>  hash_add_iser_task(struct iser_task_t *iser_task);
> 
> _________________________________________________________________
> 与联机的朋友进行交流,请使用 MSN Messenger:  http://messenger.msn.com/cn  
> 
> _______________________________________________
> openib-general mailing list
> openib-general at openib.org
> http://openib.org/mailman/listinfo/openib-general
> 
> To unsubscribe, please visit 
> http://openib.org/mailman/listinfo/openib-general
> 



More information about the general mailing list