[ofw][patch][CORE] bugfix in debug prints

Leonid Keller leonid at mellanox.co.il
Sun Jan 18 08:22:30 PST 2009


On x86 platform casting expression like 
    (LONG_PTR)p_obj 
doesn't increase the size of pointer.
As a result printf() function - driven by %I64 size modifier - takes the
next parameter as a second part of the previous one.
It causes a corrupted print at least and a crash at most.
 
The patch replaces %I64Ix fixed-size format modifier by the
variable-sized %p one.
 
Index: core/al/al_common.c
===================================================================
--- core/al/al_common.c (revision 1835)
+++ core/al/al_common.c (working copy)
@@ -180,7 +180,7 @@
  CL_ASSERT( p_obj && pfn_free );
  CL_ASSERT( p_obj->state == CL_UNINITIALIZED );
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_AL_OBJ,
-  ("%016I64x\n", (LONG_PTR)p_obj ) );
+  ("%p\n", p_obj ) );
 
  /* Initialize the object. */
  p_obj->async_item.pfn_callback = async_destroy_cb;
@@ -278,9 +278,9 @@
  CL_ASSERT( p_child_obj->state == CL_INITIALIZED );
 
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_AL_OBJ,
-  ("%016I64x(%s) to %016I64x(%s)\n",
-  (LONG_PTR)p_child_obj, ib_get_obj_type( p_child_obj ),
-  (LONG_PTR)p_parent_obj, ib_get_obj_type( p_parent_obj ) ) );
+  ("%p(%s) to %p(%s)\n",
+  p_child_obj, ib_get_obj_type( p_child_obj ),
+  p_parent_obj, ib_get_obj_type( p_parent_obj ) ) );
 
  /* Insert the object into the parent's object tracking list. */
  p_child_obj->p_ci_ca = p_parent_obj->p_ci_ca;
@@ -347,9 +347,9 @@
   p_parent_obj->state == CL_DESTROYING );
 
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_AL_OBJ,
-  ("%016I64x(%s) from %016I64x(%s)\n",
-  (LONG_PTR)p_obj, ib_get_obj_type( p_obj ),
-  (LONG_PTR)p_parent_obj, ib_get_obj_type( p_parent_obj ) ) );
+  ("%p(%s) from %p(%s)\n",
+  p_obj, ib_get_obj_type( p_obj ),
+  p_parent_obj, ib_get_obj_type( p_parent_obj ) ) );
 
  /* Remove the object from the parent's list. */
  cl_spinlock_acquire( &p_parent_obj->lock );
@@ -373,7 +373,7 @@
 
  AL_ENTER( AL_DBG_AL_OBJ );
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_AL_OBJ,
-  ("%016I64x(%s)\n", (LONG_PTR)p_obj, ib_get_obj_type( p_obj ) ) );
+  ("%p(%s)\n", p_obj, ib_get_obj_type( p_obj ) ) );
  ref_cnt = cl_atomic_inc( &p_obj->ref_cnt );
  CL_ASSERT( ref_cnt != 1 || p_obj->type == AL_OBJ_TYPE_H_CQ );
 
@@ -401,7 +401,7 @@
  CL_ASSERT( p_obj->ref_cnt );
 
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_AL_OBJ,
-  ("%016I64x(%s)\n", (LONG_PTR)p_obj, ib_get_obj_type( p_obj ) ) );
+  ("%p(%s)\n", p_obj, ib_get_obj_type( p_obj ) ) );
 
  ref_cnt = cl_atomic_dec( &p_obj->ref_cnt );
 
@@ -569,7 +569,7 @@
   p_obj->state == CL_DESTROYING );
 
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_AL_OBJ,
-  ("%016I64x(%s)\n", (LONG_PTR)p_obj, ib_get_obj_type( p_obj ) ) );
+  ("%p(%s)\n", p_obj, ib_get_obj_type( p_obj ) ) );
 
  /*
   * Lock to synchronize with asynchronous event processing.
@@ -614,7 +614,7 @@
   p_child_obj = PARENT_STRUCT( p_list_item, al_obj_t, pool_item );
   CL_ASSERT( p_child_obj->pfn_destroy );
   AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_AL_OBJ,
-   ("bye bye: %016I64x(%s)\n", (LONG_PTR)p_child_obj,
+   ("bye bye: %p(%s)\n", p_child_obj,
    ib_get_obj_type( p_child_obj ) ) );
   ref_al_obj( p_child_obj );
   p_child_obj->pfn_destroy( p_child_obj, NULL );
@@ -659,7 +659,7 @@
  CL_ASSERT( !p_obj->ref_cnt );
 
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_AL_OBJ,
-  ("%016I64x\n", (LONG_PTR)p_obj ) );
+  ("%p\n", p_obj ) );
 
  /* Cleanup any hardware related resources. */
  if( p_obj->pfn_cleanup )
Index: core/al/al_common.h
===================================================================
--- core/al/al_common.h (revision 1835)
+++ core/al/al_common.h (working copy)
@@ -326,7 +326,7 @@
 ib_get_obj_type(
  IN    al_obj_t * const   p_obj )
 {
- if( AL_BASE_TYPE( p_obj->type ) > AL_OBJ_TYPE_INVALID )
+ if( AL_BASE_TYPE( p_obj->type ) >= AL_OBJ_TYPE_INVALID )
   return( ib_obj_type_str[AL_OBJ_TYPE_UNKNOWN] );
 
  return( ib_obj_type_str[ AL_BASE_TYPE( p_obj->type ) ] );
Index: core/al/al_mad.c
===================================================================
--- core/al/al_mad.c (revision 1835)
+++ core/al/al_mad.c (working copy)
@@ -680,13 +680,13 @@
    cl_ptr_vector_set( p_method_ptr_vector, i, h_mad_reg );
 
    AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_MAD_SVC,
-    ("Register version:%u (%u) class:0x%02X(%u) method:0x%02X
Hdl:%016I64x\n",
+    ("Register version:%u (%u) class:0x%02X(%u) method:0x%02X
Hdl:%p\n",
     p_mad_svc->mgmt_version,
     __mgmt_version_index( p_mad_svc->mgmt_version ),
     p_mad_svc->mgmt_class,
     __mgmt_class_index( p_mad_svc->mgmt_class ),
     i,
-    (LONG_PTR)h_mad_reg) );
+    h_mad_reg) );
   }
  }
 
@@ -841,7 +841,7 @@
  AL_ENTER( AL_DBG_MAD_SVC );
 
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_MAD_SVC,
-  ("p_mad_wr 0x%016I64x\n", (LONG_PTR)p_mad_wr ) );
+  ("p_mad_wr 0x%p\n", p_mad_wr ) );
 
  /* Get the MAD header. */
  p_mad_hdr = get_mad_hdr_from_wr( p_mad_wr );
Index: core/al/kernel/al_dev.c
===================================================================
--- core/al/kernel/al_dev.c (revision 1835)
+++ core/al/kernel/al_dev.c (working copy)
@@ -443,8 +443,8 @@
  p_open_context = p_io_stack->FileObject->FsContext;
 
  AL_PRINT( TRACE_LEVEL_INFORMATION, AL_DBG_DEV,
-  ("al_dev_ioctl: buf_size (%d) p_buf (%016I64x).\n",
-  cl_ioctl_in_size( h_ioctl ), (LONG_PTR)cl_ioctl_in_buf( h_ioctl )) );
+  ("al_dev_ioctl: buf_size (%d) p_buf (%p).\n",
+  cl_ioctl_in_size( h_ioctl ), cl_ioctl_in_buf( h_ioctl )) );
 
  /* Process the ioctl command. */
  if( IS_AL_PROXY_IOCTL(cl_ioctl_ctl_code( h_ioctl )) )
Index: core/al/kernel/al_mad_pool.c
===================================================================
--- core/al/kernel/al_mad_pool.c (revision 1835)
+++ core/al/kernel/al_mad_pool.c (working copy)
@@ -271,7 +271,7 @@
  if( busy )
  {
   AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-   ("h_pool (0x%016I64x) is busy!.\n", (ULONG64)(ULONG_PTR)h_pool) );
+   ("h_pool (0x%p) is busy!.\n", h_pool) );
   return IB_RESOURCE_BUSY;
  }
 
Index: core/al/kernel/al_proxy.c
===================================================================
--- core/al/kernel/al_proxy.c (revision 1835)
+++ core/al/kernel/al_proxy.c (working copy)
@@ -301,8 +301,8 @@
  if( (uintn_t)p_io_stack->FileObject->FsContext2 != AL_OBJ_TYPE_H_CQ )
  {
   AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-   ("Invalid file object type for request: %016I64x\n",
-   (LONG_PTR)p_io_stack->FileObject->FsContext2) );
+   ("Invalid file object type for request: %p\n",
+   p_io_stack->FileObject->FsContext2) );
   return CL_INVALID_PARAMETER;
  }
 
@@ -343,8 +343,8 @@
  if( (uintn_t)p_io_stack->FileObject->FsContext2 != AL_OBJ_TYPE_AL_MGR
)
  {
   AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-   ("Invalid file object type for request: %016I64x\n",
-   (LONG_PTR)p_io_stack->FileObject->FsContext2) );
+   ("Invalid file object type for request: %p\n",
+   p_io_stack->FileObject->FsContext2) );
   return CL_INVALID_PARAMETER;
  }
 
@@ -891,8 +891,8 @@
  if( (uintn_t)p_io_stack->FileObject->FsContext2 != AL_OBJ_TYPE_PNP_MGR
)
  {
   AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-   ("Invalid file object type for request: %016I64x\n",
-   (LONG_PTR)p_io_stack->FileObject->FsContext2) );
+   ("Invalid file object type for request: %p\n",
+   p_io_stack->FileObject->FsContext2) );
   return CL_INVALID_PARAMETER;
  }
 
@@ -1035,8 +1035,8 @@
  if( (uintn_t)p_io_stack->FileObject->FsContext2 != AL_OBJ_TYPE_PNP_MGR
)
  {
   AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-   ("Invalid file object type for request: %016I64x\n",
-   (LONG_PTR)p_io_stack->FileObject->FsContext2) );
+   ("Invalid file object type for request: %p\n",
+   p_io_stack->FileObject->FsContext2) );
   return CL_INVALID_PARAMETER;
  }
 
@@ -1117,8 +1117,8 @@
  if( (uintn_t)p_io_stack->FileObject->FsContext2 != AL_OBJ_TYPE_PNP_MGR
)
  {
   AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-   ("Invalid file object type for request: %016I64x\n",
-   (LONG_PTR)p_io_stack->FileObject->FsContext2) );
+   ("Invalid file object type for request: %p\n",
+   p_io_stack->FileObject->FsContext2) );
   return CL_INVALID_PARAMETER;
  }
 
Index: core/al/kernel/al_proxy_cep.c
===================================================================
--- core/al/kernel/al_proxy_cep.c (revision 1835)
+++ core/al/kernel/al_proxy_cep.c (working copy)
@@ -835,8 +835,8 @@
  if( (uintn_t)p_io_stack->FileObject->FsContext2 != AL_OBJ_TYPE_CM )
  {
   AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-   ("Invalid file object type for request: %016I64x\n",
-   (LONG_PTR)p_io_stack->FileObject->FsContext2) );
+   ("Invalid file object type for request: %p\n",
+   p_io_stack->FileObject->FsContext2) );
   return CL_INVALID_PARAMETER;
  }
 
Index: core/al/kernel/al_proxy_subnet.c
===================================================================
--- core/al/kernel/al_proxy_subnet.c (revision 1835)
+++ core/al/kernel/al_proxy_subnet.c (working copy)
@@ -230,8 +230,8 @@
   (uintn_t)p_io_stack->FileObject->FsContext2 != AL_OBJ_TYPE_SA_REQ_SVC
)
  {
   AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-   ("Invalid file object type for request: %016I64x\n",
-   (LONG_PTR)p_io_stack->FileObject->FsContext2) );
+   ("Invalid file object type for request: %p\n",
+   p_io_stack->FileObject->FsContext2) );
   return CL_INVALID_PARAMETER;
  }
 
Index: core/al/kernel/al_smi.c
===================================================================
--- core/al/kernel/al_smi.c (revision 1835)
+++ core/al/kernel/al_smi.c (working copy)
@@ -3430,8 +3430,8 @@
   if( status != IB_SUCCESS )
   {
    AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
-    ("Failed to post receive %016I64x\n",
-    (LONG_PTR)p_al_element) );
+    ("Failed to post receive %p\n",
+    p_al_element) );
    cl_qlist_remove_item( &p_spl_qp_svc->recv_queue,
     &p_al_element->list_item );
 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20090118/26f98706/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: al_prints_fix.patch
Type: application/octet-stream
Size: 9682 bytes
Desc: al_prints_fix.patch
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20090118/26f98706/attachment.obj>


More information about the ofw mailing list