<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=us-ascii" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18812"></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=450072416-17092009><FONT color=#0000ff 
size=2 face=Arial>Hello,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=450072416-17092009><FONT color=#0000ff 
size=2 face=Arial>  These patches have the feel of swinging a very larger 
hammer at a small problem. It's really only the power path structs and pnp 
structs which can not tolerate a page-fault.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=450072416-17092009><FONT color=#0000ff 
size=2 face=Arial>Given that non-paged pool is a somewhat limited system 
resource, we need to be careful about wholesale allocation from non-paged 
pool.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=450072416-17092009><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=450072416-17092009><FONT color=#0000ff 
size=2 face=Arial>Initially I would suggest changing only those cases where PNP 
structs and power-down path structs are accessed.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=450072416-17092009><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=450072416-17092009><FONT color=#0000ff 
size=2 face=Arial>stan.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=450072416-17092009><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV><BR>
<DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>
<HR tabIndex=-1>
<FONT size=2 face=Tahoma><B>From:</B> Leonid Keller 
[mailto:leonid@mellanox.co.il] <BR><B>Sent:</B> Thursday, September 17, 2009 
3:33 AM<BR><B>To:</B> Smith, Stan<BR><B>Cc:</B> ofw_list<BR><B>Subject:</B> RE: 
[ofw][patch][ibal] use non-pageable memory to prevent possibleproblems on power 
down<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV><FONT color=#0000ff size=2 face=Arial><SPAN class=356542910-17092009>To be 
yet more safe, we can change other usings of PagedPool by 
NonPagedPool.</SPAN></FONT></DIV>
<DIV><FONT color=#0000ff size=2 face=Arial><SPAN class=356542910-17092009>What 
do you think ?</SPAN></FONT></DIV>
<DIV><FONT color=#0000ff size=2 face=Arial><SPAN class=356542910-17092009>(I 
have not included winverbs and winmad drivers, leaving that to 
Sean).</SPAN></FONT></DIV>
<DIV><FONT color=#0000ff size=2 face=Arial></FONT> </DIV>
<DIV><FONT color=#0000ff size=2 face=Arial>Index: 
V:/svn/winib/trunk/core/complib/kernel/cl_pnp_po.c<BR>===================================================================<BR>--- 
V:/svn/winib/trunk/core/complib/kernel/cl_pnp_po.c (revision 4835)<BR>+++ 
V:/svn/winib/trunk/core/complib/kernel/cl_pnp_po.c (revision 4836)<BR>@@ 
-1185,7 +1185,7 @@<BR>   alloc_size += (sizeof(PDEVICE_OBJECT) * 
p_old_rel->Count);<BR> <BR>  /* Allocate the new relations 
structure. */<BR>- p_rel = ExAllocatePoolWithTag( PagedPool, alloc_size, 
'ralc' );<BR>+ p_rel = ExAllocatePoolWithTag( NonPagedPool, alloc_size, 
'ralc' );<BR>  p_irp->IoStatus.Information = 
(ULONG_PTR)p_rel;<BR>  if( !p_rel )<BR>  {<BR>Index: 
V:/svn/winib/trunk/core/complib/kernel/cl_memory_osd.c<BR>===================================================================<BR>--- 
V:/svn/winib/trunk/core/complib/kernel/cl_memory_osd.c (revision 
4835)<BR>+++ 
V:/svn/winib/trunk/core/complib/kernel/cl_memory_osd.c (revision 
4836)<BR>@@ -41,7 +41,7 @@<BR>  if( pageable 
)<BR>  {<BR>   CL_ASSERT( KeGetCurrentIrql() < 
DISPATCH_LEVEL );<BR>-  return( ExAllocatePoolWithTag( PagedPool, 
size, 'virp' ) );<BR>+  return( ExAllocatePoolWithTag( NonPagedPool, 
size, 'virp' ) 
);<BR>  }<BR>  else<BR>  {<BR>Index: 
V:/svn/winib/trunk/core/bus/kernel/bus_port_mgr.c<BR>===================================================================<BR>--- 
V:/svn/winib/trunk/core/bus/kernel/bus_port_mgr.c (revision 4835)<BR>+++ 
V:/svn/winib/trunk/core/bus/kernel/bus_port_mgr.c (revision 4836)<BR>@@ 
-1599,7 +1599,7 @@<BR>  dev_id_size = 
p_ext->pdo.p_pdo_device_info->device_id_size;<BR> <BR>  /* 
Device ID is "IBA\SID_<sid> where <sid> is the IO device Service ID. 
*/<BR>- p_string = ExAllocatePoolWithTag( PagedPool, dev_id_size, 'vedq' 
);<BR>+ p_string = ExAllocatePoolWithTag( NonPagedPool, dev_id_size, 'vedq' 
);<BR>  if( !p_string 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR,<BR>@@ 
-1635,7 +1635,7 @@<BR> <BR>  dev_id_size = 
p_ext->pdo.p_pdo_device_info->hardware_id_size;<BR> <BR>- p_string 
= ExAllocatePoolWithTag( PagedPool, dev_id_size, 'ihqp' );<BR>+ p_string = 
ExAllocatePoolWithTag( NonPagedPool, dev_id_size, 'ihqp' );<BR>  if( 
!p_string )<BR>  {<BR>   BUS_TRACE_EXIT( 
BUS_DBG_ERROR,<BR>@@ -1670,7 +1670,7 @@<BR> <BR>  dev_id_size = 
p_ext->pdo.p_pdo_device_info->compatible_id_size;<BR> <BR>- p_string 
= ExAllocatePoolWithTag( PagedPool, dev_id_size, 'ihqp' );<BR>+ p_string = 
ExAllocatePoolWithTag( NonPagedPool, dev_id_size, 'ihqp' );<BR>  if( 
!p_string )<BR>  {<BR>   BUS_TRACE_EXIT( 
BUS_DBG_ERROR,<BR>@@ -1710,7 +1710,7 
@@<BR>  }<BR> <BR>  /* The instance ID is the port 
GUID. */<BR>- p_string = ExAllocatePoolWithTag( PagedPool, sizeof(WCHAR) * 
21, 'iuqp' );<BR>+ p_string = ExAllocatePoolWithTag( NonPagedPool, 
sizeof(WCHAR) * 21, 'iuqp' );<BR>  if( !p_string 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR,<BR>@@ 
-1754,7 +1754,7 @@<BR>  }<BR> <BR> <BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, 
p_ext->pdo.p_pdo_device_info->description_size, 'edqp' 
);<BR>+ p_string = ExAllocatePoolWithTag( NonPagedPool, 
p_ext->pdo.p_pdo_device_info->description_size, 'edqp' 
);<BR> <BR>  if( !p_string )<BR>  {<BR>@@ -1822,7 
+1822,7 @@<BR>   return 
STATUS_INSUFFICIENT_RESOURCES;<BR>  }<BR> <BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, size, 'olqp' );<BR>+ p_string = 
ExAllocatePoolWithTag( NonPagedPool, size, 'olqp' );<BR>  if( 
!p_string )<BR>  {<BR>   BUS_TRACE_EXIT( 
BUS_DBG_ERROR,<BR>@@ -1875,7 +1875,7 @@<BR> <BR>  *p_action = 
IrpComplete;<BR> <BR>- p_bus_info = ExAllocatePoolWithTag( PagedPool, 
sizeof(PNP_BUS_INFORMATION), 'ibqp' );<BR>+ p_bus_info = 
ExAllocatePoolWithTag( NonPagedPool, sizeof(PNP_BUS_INFORMATION), 'ibqp' 
);<BR>  if( !p_bus_info 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR,<BR>Index: 
V:/svn/winib/trunk/core/bus/kernel/bus_iou_mgr.c<BR>===================================================================<BR>--- 
V:/svn/winib/trunk/core/bus/kernel/bus_iou_mgr.c (revision 4835)<BR>+++ 
V:/svn/winib/trunk/core/bus/kernel/bus_iou_mgr.c (revision 4836)<BR>@@ 
-1164,7 +1164,7 @@<BR>  }<BR> <BR>  /* Device ID is 
"IBA\SID_<sid> where <sid> is the IPoIB Service ID. 
*/<BR>- p_string = ExAllocatePoolWithTag( PagedPool, IOU_DEV_ID_SIZE, 
'didq' );<BR>+ p_string = ExAllocatePoolWithTag( NonPagedPool, 
IOU_DEV_ID_SIZE, 'didq' );<BR>  if( !p_string 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR, <BR>@@ 
-1209,7 +1209,7 @@<BR>   return 
STATUS_NO_SUCH_DEVICE;<BR>  }<BR> <BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, IOU_HW_ID_SIZE, 'dihq' );<BR>+ p_string = 
ExAllocatePoolWithTag( NonPagedPool, IOU_HW_ID_SIZE, 'dihq' 
);<BR>  if( !p_string 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR, <BR>@@ 
-1263,7 +1263,7 @@<BR> <BR>  UNUSED_PARAM( p_dev_obj 
);<BR> <BR>- p_string = ExAllocatePoolWithTag( PagedPool, 
sizeof(IOU_COMPAT_ID), 'dicq' );<BR>+ p_string = ExAllocatePoolWithTag( 
NonPagedPool, sizeof(IOU_COMPAT_ID), 'dicq' );<BR>  if( !p_string 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR, <BR>@@ 
-1299,7 +1299,7 @@<BR>  }<BR> <BR>  /* The instance ID 
is the port GUID. */<BR>- p_string = ExAllocatePoolWithTag( PagedPool, 
sizeof(WCHAR) * 33, 'diuq' );<BR>+ p_string = ExAllocatePoolWithTag( 
NonPagedPool, sizeof(WCHAR) * 33, 'diuq' );<BR>  if( !p_string 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR, <BR>@@ 
-1345,7 +1345,7 @@<BR>  }<BR> <BR>  /* The instance ID 
is the port GUID. */<BR>- p_string = ExAllocatePoolWithTag( 
PagedPool,<BR>+ p_string = ExAllocatePoolWithTag( 
NonPagedPool,<BR>            
sizeof(WCHAR) * 
sizeof(p_ext->desc),<BR>            
'sedq' );<BR>  if( !p_string )<BR>@@ -1391,7 +1391,7 
@@<BR>   return 
STATUS_NO_SUCH_DEVICE;<BR>  }<BR> <BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, IOU_LOCATION_SIZE, 'colq' 
);<BR>+ p_string = ExAllocatePoolWithTag( NonPagedPool, IOU_LOCATION_SIZE, 
'colq' );<BR>  if( !p_string 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR, <BR>@@ 
-1430,7 +1430,7 @@<BR> <BR>  *p_action = 
IrpComplete;<BR> <BR>- p_bus_info = ExAllocatePoolWithTag( PagedPool, 
sizeof(PNP_BUS_INFORMATION), 'subq' );<BR>+ p_bus_info = 
ExAllocatePoolWithTag( NonPagedPool, sizeof(PNP_BUS_INFORMATION), 'subq' 
);<BR>  if( !p_bus_info 
)<BR>  {<BR>   BUS_TRACE_EXIT( BUS_DBG_ERROR,<BR>Index: 
V:/svn/winib/trunk/core/iou/kernel/iou_ioc_mgr.c<BR>===================================================================<BR>--- 
V:/svn/winib/trunk/core/iou/kernel/iou_ioc_mgr.c (revision 4835)<BR>+++ 
V:/svn/winib/trunk/core/iou/kernel/iou_ioc_mgr.c (revision 4836)<BR>@@ 
-952,7 +952,7 @@<BR>  {<BR> <BR>   dev_id_size = 
(p_ext->pdo.p_pdo_device_info)->device_id_size;<BR>-  p_string = 
ExAllocatePoolWithTag( PagedPool, dev_id_size, 'didq' 
);<BR>+  p_string = ExAllocatePoolWithTag( NonPagedPool, dev_id_size, 
'didq' );<BR> <BR>   if( !p_string 
)<BR>   {<BR>@@ -968,7 +968,7 @@<BR>  } 
<BR>  else <BR>  {<BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, IOC_DEV_ID_SIZE, 'didq' );<BR>+ p_string 
= ExAllocatePoolWithTag( NonPagedPool, IOC_DEV_ID_SIZE, 'didq' 
);<BR>  if( !p_string 
)<BR>  {<BR>   IOU_PRINT_EXIT( TRACE_LEVEL_ERROR, 
IOU_DBG_ERROR,<BR>@@ -1027,7 +1027,7 
@@<BR>  {<BR>   hw_id_size = 
p_ext->pdo.p_pdo_device_info->hardware_id_size;<BR> <BR>-  p_string 
= ExAllocatePoolWithTag( PagedPool, hw_id_size, 'ihqi' 
);<BR>+  p_string = ExAllocatePoolWithTag( NonPagedPool, hw_id_size, 
'ihqi' );<BR>   if( !p_string 
)<BR>   {<BR>    IOU_PRINT_EXIT( 
TRACE_LEVEL_ERROR, IOU_DBG_ERROR,<BR>@@ -1042,7 +1042,7 @@<BR>  } 
<BR>  else <BR>  {<BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, IOC_HW_ID_SIZE, 'ihqi' );<BR>+ p_string = 
ExAllocatePoolWithTag( NonPagedPool, IOC_HW_ID_SIZE, 'ihqi' 
);<BR>  if( !p_string 
)<BR>  {<BR>   IOU_PRINT_EXIT( TRACE_LEVEL_ERROR, 
IOU_DBG_ERROR,<BR>@@ -1143,7 +1143,7 
@@<BR> <BR>   compat_id_size = 
p_ext->pdo.p_pdo_device_info->compatible_id_size;<BR> <BR>-  p_string 
= ExAllocatePoolWithTag( PagedPool, compat_id_size, 'icqi' 
);<BR>+  p_string = ExAllocatePoolWithTag( NonPagedPool, 
compat_id_size, 'icqi' );<BR> <BR>   if( !p_string 
)<BR>   {<BR>@@ -1159,7 +1159,7 @@<BR>  } 
<BR>  else <BR>  {<BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, IOC_COMPAT_ID_SIZE, 'icqi' 
);<BR>+ p_string = ExAllocatePoolWithTag( NonPagedPool, IOC_COMPAT_ID_SIZE, 
'icqi' );<BR>  if( !p_string 
)<BR>  {<BR>   IOU_PRINT_EXIT( TRACE_LEVEL_ERROR, 
IOU_DBG_ERROR,<BR>@@ -1229,7 +1229,7 @@<BR>  if ( 
p_ext->pdo.p_pdo_device_info ) 
<BR>  {<BR> <BR>-  p_string = ExAllocatePoolWithTag( 
PagedPool, sizeof(WCHAR) * 41, 'iuqi' );<BR>+  p_string = 
ExAllocatePoolWithTag( NonPagedPool, sizeof(WCHAR) * 41, 'iuqi' 
);<BR>   if( !p_string 
)<BR>   {<BR>    IOU_PRINT_EXIT( 
TRACE_LEVEL_ERROR, IOU_DBG_ERROR,<BR>@@ -1252,7 +1252,7 @@<BR>  } 
<BR>  else <BR>  {<BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, sizeof(WCHAR) * 33, 'iuqi' 
);<BR>+ p_string = ExAllocatePoolWithTag( NonPagedPool, sizeof(WCHAR) * 33, 
'iuqi' );<BR>  if( !p_string 
)<BR>  {<BR>   IOU_PRINT_EXIT( TRACE_LEVEL_ERROR, 
IOU_DBG_ERROR,<BR>@@ -1302,7 +1302,7 @@<BR> <BR>  if ( 
p_ext->pdo.p_pdo_device_info ) <BR>  {<BR>-  p_string = 
ExAllocatePoolWithTag( PagedPool, 
p_ext->pdo.p_pdo_device_info->description_size, <BR>+  p_string 
= ExAllocatePoolWithTag( NonPagedPool, 
p_ext->pdo.p_pdo_device_info->description_size, 
<BR>       'edqi' );<BR>   if( 
!p_string )<BR>   {<BR>@@ -1320,7 +1320,7 @@<BR>  } 
<BR>  else <BR>  {<BR>- p_string = 
ExAllocatePoolWithTag( PagedPool,<BR>+ p_string = ExAllocatePoolWithTag( 
NonPagedPool,<BR>            
sizeof(WCHAR) * 
sizeof(p_ext->info.profile.id_string),<BR>            
'edqi');<BR>  if( !p_string )<BR>@@ -1387,7 +1387,7 
@@<BR>   return 
STATUS_NO_SUCH_DEVICE;<BR>  }<BR> <BR>- p_string = 
ExAllocatePoolWithTag( PagedPool, <BR>+ p_string = ExAllocatePoolWithTag( 
NonPagedPool, 
<BR>            max( 
IOC_LOCATION_SIZE, sizeof( WCHAR ) 
*<BR>                 
( sizeof( p_ext->info.profile.id_string ) + 1 
)),<BR>            
'olqi');<BR>@@ -1447,7 +1447,7 @@<BR> <BR>  *p_action = 
IrpComplete;<BR> <BR>- p_iou_info = ExAllocatePoolWithTag( PagedPool, 
sizeof(PNP_BUS_INFORMATION), 'ibqi' );<BR>+ p_iou_info = 
ExAllocatePoolWithTag( NonPagedPool, sizeof(PNP_BUS_INFORMATION), 'ibqi' 
);<BR>  if( !p_iou_info 
)<BR>  {<BR>   IOU_PRINT_EXIT( TRACE_LEVEL_ERROR, 
IOU_DBG_ERROR,<BR>Index: 
V:/svn/winib/trunk/etc/kernel/index_list.c<BR>===================================================================<BR>--- 
V:/svn/winib/trunk/etc/kernel/index_list.c (revision 4835)<BR>+++ 
V:/svn/winib/trunk/etc/kernel/index_list.c (revision 4836)<BR>@@ -37,7 
+37,7 @@<BR>  SIZE_T  size, i;<BR> <BR>  size 
= pIndexList->Size + (PAGE_SIZE / sizeof(INDEX_ENTRY));<BR>- array = 
ExAllocatePoolWithTag(PagedPool, size * sizeof(INDEX_ENTRY), 
'xdni');<BR>+ array = ExAllocatePoolWithTag(NonPagedPool, size * 
sizeof(INDEX_ENTRY), 'xdni');<BR>  if (array == NULL) 
{<BR>   return FALSE;<BR>  }<BR>Index: 
V:/svn/winib/trunk/hw/mlx4/kernel/hca/drv.c<BR>===================================================================<BR>--- 
V:/svn/winib/trunk/hw/mlx4/kernel/hca/drv.c (revision 4835)<BR>+++ 
V:/svn/winib/trunk/hw/mlx4/kernel/hca/drv.c (revision 4836)<BR>@@ -85,7 
+85,7 @@<BR>  HCA_ENTER( HCA_DBG_PNP );<BR> <BR>  pIfc 
=<BR>-  (ci_interface_t*)ExAllocatePoolWithTag( PagedPool, 
sizeof(ci_interface_t), MT_TAG_KERNEL 
);<BR>+  (ci_interface_t*)ExAllocatePoolWithTag( NonPagedPool, 
sizeof(ci_interface_t), MT_TAG_KERNEL );<BR>  if( !pIfc 
)<BR>  {<BR>   HCA_PRINT( 
TRACE_LEVEL_ERROR,HCA_DBG_PNP, <BR>@@ -877,7 +877,7 
@@<BR> <BR>  HCA_ENTER( HCA_DBG_PNP );<BR> <BR>- pIfc = 
(ci_interface_t*)ExAllocatePoolWithTag( PagedPool,<BR>+ pIfc = 
(ci_interface_t*)ExAllocatePoolWithTag( 
NonPagedPool,<BR>   sizeof(ci_interface_t), MT_TAG_KERNEL 
);<BR>  if( !pIfc )<BR>  {<BR>Index: 
V:/svn/winib/trunk/hw/mthca/kernel/hca_pnp.c<BR>===================================================================<BR>--- 
V:/svn/winib/trunk/hw/mthca/kernel/hca_pnp.c (revision 4835)<BR>+++ 
V:/svn/winib/trunk/hw/mthca/kernel/hca_pnp.c (revision 4836)<BR>@@ -227,7 
+227,7 @@<BR> <BR>  HCA_ENTER( HCA_DBG_PNP 
);<BR> <BR>- pIfc = (ci_interface_t*)ExAllocatePoolWithTag( 
PagedPool,<BR>+ pIfc = (ci_interface_t*)ExAllocatePoolWithTag( 
NonPagedPool,<BR>                
sizeof(ci_interface_t),<BR>                
'pnpa' );<BR>  if( !pIfc )<BR></DIV></FONT><BR>
<BLOCKQUOTE 
style="BORDER-LEFT: #0000ff 2px solid; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px" 
dir=ltr>
  <DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>
  <HR tabIndex=-1>
  <FONT size=2 face=Tahoma><B>From:</B> Smith, Stan 
  [mailto:stan.smith@intel.com] <BR><B>Sent:</B> Wednesday, September 16, 2009 
  7:01 PM<BR><B>To:</B> Leonid Keller<BR><B>Cc:</B> ofw_list<BR><B>Subject:</B> 
  RE: [ofw][patch][ibal] use non-pageable memory to prevent possibleproblems on 
  power down<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV dir=ltr align=left><SPAN class=515565515-16092009><FONT color=#0000ff 
  size=2 face=Arial>Hello,</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=515565515-16092009><FONT color=#0000ff 
  size=2 face=Arial>  This patch appears to have cured the sometimes BSOD 
  on power-down. After 53 uninstalls I have yet to witness a 
  BSOD!!</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=515565515-16092009><FONT color=#0000ff 
  size=2 face=Arial>There was a similar patch to winverbs (paged vs. non-paged 
  PNP struct allocation) which also cured a power-down BSOD, so it's not too 
  surprising this patch has the same effect.</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=515565515-16092009><FONT color=#0000ff 
  size=2 face=Arial>I will be including it in the WinOF 2.1 release (upcoming 
  RC5).</FONT></SPAN></DIV>
  <DIV dir=ltr align=left><SPAN class=515565515-16092009><FONT color=#0000ff 
  size=2 face=Arial></FONT></SPAN> </DIV>
  <DIV dir=ltr align=left><SPAN class=515565515-16092009><FONT color=#0000ff 
  size=2 face=Arial>stan.</FONT></SPAN></DIV><BR>
  <DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>
  <HR tabIndex=-1>
  <FONT size=2 face=Tahoma><B>From:</B> ofw-bounces@lists.openfabrics.org 
  [mailto:ofw-bounces@lists.openfabrics.org] <B>On Behalf Of </B>Leonid 
  Keller<BR><B>Sent:</B> Tuesday, September 15, 2009 1:15 AM<BR><B>To:</B> 
  ofw_list<BR><B>Subject:</B> [ofw][patch][ibal] use non-pageable memory to 
  prevent possible problems on power down<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV><FONT size=2 face=Arial><SPAN class=362050208-15092009>IBAL uses pageable 
  memory to create PnP context.</SPAN></FONT></DIV>
  <DIV><FONT size=2 face=Arial><SPAN class=362050208-15092009>It can create 
  possible problems in power down flows at the time of system 
  contention.</SPAN></FONT></DIV>
  <DIV><FONT size=2 face=Arial><SPAN 
  class=362050208-15092009></SPAN></FONT> </DIV>
  <DIV><FONT size=2 face=Arial><SPAN class=362050208-15092009>We saw some 
  similar case at a customer.</SPAN></FONT></DIV>
  <DIV><FONT size=2 face=Arial><SPAN class=362050208-15092009>There is no strong 
  evidence that that is what influenced, but with this patch IBAL will be more 
  safe and at no cost.</SPAN></FONT></DIV>
  <DIV><FONT size=2 face=Arial><SPAN 
  class=362050208-15092009></SPAN></FONT> </DIV>
  <DIV><FONT size=2 face=Arial><SPAN class=362050208-15092009>Found by Hobin Lee 
  (Xsigo).</SPAN></FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT> </DIV>
  <DIV><FONT size=2 face=Arial>Index: 
  kernel/al_pnp.c<BR>===================================================================<BR>--- 
  kernel/al_pnp.c (revision 2421)<BR>+++ kernel/al_pnp.c (working 
  copy)<BR>@@ -587,7 +587,7 @@<BR>  CL_ASSERT( p_reg 
  );<BR> <BR>  /* No context exists for this port.  Create 
  one. */<BR>- p_context = (al_pnp_context_t*)cl_pzalloc( 
  sizeof(al_pnp_context_t) );<BR>+ p_context = 
  (al_pnp_context_t*)cl_zalloc( sizeof(al_pnp_context_t) );<BR>  if( 
  !p_context )<BR>  {<BR>   AL_PRINT( 
  TRACE_LEVEL_ERROR, AL_DBG_ERROR,<BR></FONT></DIV></BLOCKQUOTE></BODY></HTML>