[Openib-windows] RE: [PATCH] Support 32-bit kernel bypass on 64-bit kernel

Leonid Keller leonid at mellanox.co.il
Mon Jan 30 09:01:46 PST 2006


 Hi Fab,
I'd like first to understand the reasons of adding of this patch.
I mean, we are preparing now a new release, which will support the work
of 32-bit applications over a 64-bit kernel.
Therefore I don't see as worth an effort of adding and testing of your
patch.
What do you think ?

> -----Original Message-----
> From: Tzachi Dar 
> Sent: Thursday, January 26, 2006 2:11 PM
> To: Leonid Keller
> Cc: Erez Cohen
> Subject: FW: [PATCH] Support 32-bit kernel bypass on 64-bit kernel
> 
>  leonid, please take care.
> 
> -----Original Message-----
> From: Fab Tillier [mailto:ftillier at silverstorm.com]
> Sent: Thursday, January 26, 2006 7:09 AM
> To: Tzachi Dar
> Cc: openib-windows at openib.org
> Subject: [PATCH] Support 32-bit kernel bypass on 64-bit kernel
> 
> Hi Tzachi,
> 
> Here's a patch that adds support for a 32-bit app taking 
> advantage of kernel bypass functionality when running on a 
> 64-bit kernel.
> 
> This patch changes the structure definitions for any 
> structures that are exchanged between user-mode and 
> kernel-mode so that they are the same size regardless of 
> architecture.  Most of the changes take advantage of the 
> unnamed union support so that the original type doesn't have 
> to change, avoiding a myriad of truncation cast errors.  All 
> embedded pointers in these structures are decorated with the 
> __ptr64 keyword, which makes them 64-bits wide even on 32-bit 
> platforms.
> 
> Please take a look and commit as you see fit.
> 
> - Fab
> 
> Signed-off-by: Fab Tillier (ftillier at silverstorm.com)
> 
> Index: hw/mt23108/vapi/Hca/hcahal/hh.h
> ===================================================================
> --- hw/mt23108/vapi/Hca/hcahal/hh.h (revision 215)
> +++ hw/mt23108/vapi/Hca/hcahal/hh.h (working copy)
> @@ -62,28 +62,48 @@
>   * Device information (public object/context)
>   *
>   */
> -
> +#pragma warning( disable : 4201 )
>  typedef struct HH_hca_dev_st {
> -  char               *dev_desc;         /* Device 
> description (name, etc.) */
> -  char               *user_lib;         /* User level 
> library (dyn-link) */
> +  char               * __ptr64 dev_desc;         /* Device 
> description (name,
> etc.) */
> +  char               * __ptr64 user_lib;         /* User 
> level library
> (dyn-link) */
>    u_int32_t           vendor_id;        /* IEEE's 24 bit 
> Device Vendor ID */
>    u_int32_t           dev_id;           /* Device ID */
>    u_int32_t           hw_ver;           /* Hardware version 
> (step/rev)  */
>    u_int64_t           fw_ver;
> -  struct hh_if_ops*   if_ops;           /* Interface operations */
> +  struct hh_if_ops* __ptr64  if_ops;           /* Interface 
> operations */
>  
>                                          /* Size (bytes) of 
> user-level ...  */
> +  union
> +  {
>    MT_size_t       hca_ul_resources_sz;  /* .. resources 
> context for an HCA */
> +  void* __ptr64        resv0;
> +  };
> +  union
> +  {
>    MT_size_t       pd_ul_resources_sz;   /* .. resources 
> context for a PD   */
> +  void* __ptr64        resv1;
> +  };
> +  union
> +  {
>    MT_size_t       cq_ul_resources_sz;   /* .. resources 
> context for a CQ   */
> +  void* __ptr64        resv2;
> +  };
> +  union
> +  {
>    MT_size_t       srq_ul_resources_sz;  /* .. resources 
> context for a SRQ  */
> +  void* __ptr64        resv3;
> +  };
> +  union
> +  {
>    MT_size_t       qp_ul_resources_sz;   /* .. resources 
> context for a QP   */
> +  void* __ptr64        resv4;
> +  };
>  
> -  void*               device;           /* Device private data */
> +  void* __ptr64              device;           /* Device 
> private data */
>    HH_hca_status_t     status;           /* Device Status */
>  } HH_hca_dev_t;
> +#pragma warning( default : 4201 )
>  
> -
>  typedef enum {
>      HH_TPT_PAGE,
>      HH_TPT_BUF,
> Index: hw/mt23108/vapi/Hca/hcahal/tavor/thh_common.h
> ===================================================================
> --- hw/mt23108/vapi/Hca/hcahal/tavor/thh_common.h   (revision 215)
> +++ hw/mt23108/vapi/Hca/hcahal/tavor/thh_common.h   (working copy)
> @@ -54,6 +54,8 @@
>  typedef struct THH_uar_st     *THH_uar_t;
>  
>  
> +#pragma warning( disable : 4201 )
> +
>  /* VERSION INFORMATION: used in order to retrieve major 
> version numbers 
>     in order to deal with differences in different versions. 
> */  typedef struct THH_ver_info_st { @@ -68,12 +70,16 @@
>    HH_hca_hndl_t hh_hca_hndl;
>    THH_ver_info_t version;
>    THH_uar_index_t uar_index;
> +  union
> +  {
>    MT_virt_addr_t   uar_map;
> +  void* __ptr64        resv0;
> +  };
>    /* HCA capabilities to validate or use in THHUL */
>    MT_bool         priv_ud_av; /* Privileged UD AV are enforced ? */
>    u_int32_t       log2_mpt_size;
> -  char *av_ddr_base;
> -  char *av_host_base;
> +  char * __ptr64 av_ddr_base;
> +  char * __ptr64 av_host_base;
>  
>    u_int32_t       max_qp_ous_wr;       /* Maximum Number of 
> oustanding WR on
> any WQ.         */             
>    u_int32_t       max_srq_ous_wr;       /* Maximum Number of 
> oustanding WR on
> any WQ.         */             
> @@ -90,34 +96,71 @@
>       * needed.  Therefore, the udavm_buf_size value is the 
> size of the actual udavm
>       * table, not the size of the malloc'ed buffer.
>       */
> +   union
> +   {
>      MT_virt_addr_t   udavm_buf;            /* IN */
> +   void* __ptr64   resv0;
> +   };
> +   union
> +   {
>      MT_size_t     udavm_buf_sz;         /* IN */
> +   void* __ptr64   resv1;
> +   };
>      HH_pdm_pd_flags_t  pd_flags;      /* IN - if non-zero, 
> is a PD for a
> special QP*/
>      VAPI_lkey_t   udavm_buf_memkey;     /* OUT - set by THH_uldm */
>  } THH_pd_ul_resources_t;
>  
>  typedef struct
>  {
> +   union
> +   {
>    MT_virt_addr_t      cqe_buf;     /* CQE buffer virtual 
> addr. CQE size aligned
> */
> +  void* __ptr64    resv0;
> +   };
> +   union
> +   {
>    MT_size_t        cqe_buf_sz;  /* Buffer size in bytes 
> (mult of CQE size) */
> +  void* __ptr64 resv1;
> +   };
>    THH_uar_index_t  uar_index;   /* Index of UAR used for this CQ. */
>    u_int32_t        new_producer_index;     /* New producer 
> index after
> "resize_cq" (OUT)*/
>  } THH_cq_ul_resources_t;
>  
>  typedef struct
>  {
> +   union
> +   {
>    MT_virt_addr_t      wqes_buf;     /* WQEs buffer virtual address */
> +  void* __ptr64    resv0;
> +   };
> +   union
> +   {
>    MT_size_t        wqes_buf_sz;  /* Buffer size in bytes */
> +  void* __ptr64    resv1;
> +   };
>    THH_uar_index_t  uar_index;    /* index of UAR used for this QP */
>    /*  ER: Not used anywhere: MT_virt_addr_t      uar_map;    
> */ /* Address in
> user space of UAR */
>  } THH_qp_ul_resources_t;
>  
>  typedef struct
>  {
> +   union
> +   {
>    MT_virt_addr_t      wqes_buf;     /* WQEs buffer virtual address */
> +  void* __ptr64    resv0;
> +   };
> +   union
> +   {
>    MT_size_t           wqes_buf_sz;  /* Buffer size in bytes */
> +  void* __ptr64    resv1;
> +   };
> +   union
> +   {
>    MT_size_t           wqe_sz;       /* WQE (descriptor) size 
> in bytes */
> +  void* __ptr64    resv2;
> +   };
>    THH_uar_index_t     uar_index;    /* index of UAR used for 
> this QP */
>  } THH_srq_ul_resources_t;
>  
> +#pragma warning( default : 4201 )
>  #endif  /* H_THH_COMMON_H */
> Index: hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.h
> ===================================================================
> --- hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.h  (revision 215)
> +++ hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.h  (working copy)
> @@ -336,8 +336,8 @@
>  DLL_API HH_ret_t THH_hob_free_ul_res(HH_hca_hndl_t 
> hca_hndl,void *hca_ul_resources_p);  DLL_API HH_ret_t 
> THH_hob_alloc_pd(HH_hca_hndl_t hca_hndl, 
> MOSAL_protection_ctx_t prot_ctx, void * 
> pd_ul_resources_p,HH_pd_hndl_t *pd_num_p);  DLL_API HH_ret_t 
> THH_hob_free_pd(HH_hca_hndl_t hca_hndl, HH_pd_hndl_t pd_num); 
> -DLL_API HH_ret_t THH_hob_alloc_rdd(HH_hca_dev_t *hh_dev_p, 
> HH_rdd_hndl_t *rdd_p); -DLL_API HH_ret_t 
> THH_hob_free_rdd(HH_hca_dev_t *hh_dev_p, HH_rdd_hndl_t rdd);
> +DLL_API HH_ret_t THH_hob_alloc_rdd(HH_hca_hndl_t hh_dev_p, 
> +HH_rdd_hndl_t
> *rdd_p);
> +DLL_API HH_ret_t THH_hob_free_rdd(HH_hca_hndl_t hh_dev_p, 
> HH_rdd_hndl_t 
> +rdd);
>  DLL_API HH_ret_t THH_hob_create_ud_av(HH_hca_hndl_t 
> hca_hndl,HH_pd_hndl_t pd,VAPI_ud_av_t *av_p, HH_ud_av_hndl_t 
> *ah_p);  DLL_API HH_ret_t THH_hob_modify_ud_av(HH_hca_hndl_t 
> hca_hndl, HH_ud_av_hndl_t ah,VAPI_ud_av_t *av_p);  DLL_API 
> HH_ret_t THH_hob_query_ud_av(HH_hca_hndl_t hca_hndl, 
> HH_ud_av_hndl_t ah,VAPI_ud_av_t *av_p);
> Index: hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.c
> ===================================================================
> --- hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.c  (revision 215)
> +++ hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.c  (working copy)
> @@ -5000,7 +5000,7 @@
>  
> /*************************************************************
> *****************
>   *  Function:     THH_hob_alloc_rdd <==> THH_eecm_alloc_rdd
>   
> **************************************************************
> ***************/
> -HH_ret_t THH_hob_alloc_rdd(HH_hca_dev_t *hh_dev_p, 
> +HH_ret_t THH_hob_alloc_rdd(HH_hca_hndl_t hh_dev_p,
>                                   HH_rdd_hndl_t *rdd_p)  {  
> #if 0 @@ -5039,7 +5039,7 @@
>  
> /*************************************************************
> *****************
>   *  Function:     THH_hob_free_rdd <==> THH_eecm_free_rdd
>   
> **************************************************************
> ***************/
> -HH_ret_t THH_hob_free_rdd(HH_hca_dev_t *hh_dev_p, HH_rdd_hndl_t rdd)
> +HH_ret_t THH_hob_free_rdd(HH_hca_hndl_t hh_dev_p, HH_rdd_hndl_t rdd)
>  {
>  #if 0
>    THH_hob_t  thh_hob_p;
> Index: hw/mt23108/vapi/Hca/hcahal/hh_common.h
> ===================================================================
> --- hw/mt23108/vapi/Hca/hcahal/hh_common.h  (revision 215)
> +++ hw/mt23108/vapi/Hca/hcahal/hh_common.h  (working copy)
> @@ -44,7 +44,7 @@
>   *
>   */
>  
> -typedef struct HH_hca_dev_st*  HH_hca_hndl_t;
> +typedef struct HH_hca_dev_st* __ptr64 HH_hca_hndl_t;
>  typedef struct HHUL_sr_wqe_st  HHUL_sr_wqe_t;  typedef 
> struct HHUL_rr_wqe_st  HHUL_rr_wqe_t;
>  
> Index: hw/mt23108/user/hca_data.h
> ===================================================================
> --- hw/mt23108/user/hca_data.h  (revision 215)
> +++ hw/mt23108/user/hca_data.h  (working copy)
> @@ -35,7 +35,7 @@
>  
>  typedef struct _ib_ca
>  {
> -   HH_hca_dev_t        *p_hca_ul_info;
> +   HH_hca_dev_t        * __ptr64 p_hca_ul_info;
>     void                *p_hca_ul_resources;
>     ib_ca_attr_t        *p_hca_attr;
>     HHUL_hca_hndl_t     hhul_hca_hndl;
> 



More information about the ofw mailing list