<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns="http://www.w3.org/TR/REC-html40" xmlns:v = 
"urn:schemas-microsoft-com:vml" xmlns:o = 
"urn:schemas-microsoft-com:office:office" xmlns:w = 
"urn:schemas-microsoft-com:office:word" xmlns:m = 
"http://schemas.microsoft.com/office/2004/12/omml"><HEAD>
<META content="text/html; charset=us-ascii" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18928">
<STYLE>@font-face {
        font-family: Cambria Math;
}
@font-face {
        font-family: Calibri;
}
@page WordSection1 {size: 8.5in 11.0in; margin: 1.0in 1.0in 1.0in 1.0in; }
P.MsoNormal {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt
}
LI.MsoNormal {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt
}
DIV.MsoNormal {
        MARGIN: 0in 0in 0pt; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt
}
A:link {
        COLOR: blue; TEXT-DECORATION: underline; mso-style-priority: 99
}
SPAN.MsoHyperlink {
        COLOR: blue; TEXT-DECORATION: underline; mso-style-priority: 99
}
A:visited {
        COLOR: purple; TEXT-DECORATION: underline; mso-style-priority: 99
}
SPAN.MsoHyperlinkFollowed {
        COLOR: purple; TEXT-DECORATION: underline; mso-style-priority: 99
}
SPAN.EmailStyle17 {
        FONT-FAMILY: "Calibri","sans-serif"; COLOR: windowtext; mso-style-type: personal-compose
}
.MsoChpDefault {
        mso-style-type: export-only
}
DIV.WordSection1 {
        page: WordSection1
}
</STYLE>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]--></HEAD>
<BODY lang=EN-US link=blue vLink=purple>
<DIV dir=ltr align=left><SPAN class=926314016-31082010><FONT color=#0000ff 
size=2 face=Arial>Why are <FONT color=#000000>cl_fmap_match() <FONT 
color=#0000ff>and</FONT> cl_fmap_next() </FONT><FONT color=#0000ff>being 
removed?</FONT></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=926314016-31082010><FONT color=#0000ff 
size=2 face=Arial>They are used in opensm.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=926314016-31082010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=926314016-31082010><FONT color=#0000ff 
size=2 face=Arial>I understand the intent of allowing allocation of zero bytes, 
but why not fix the reason for the zero byte allocation in the 1st place instead 
of applying a large cover-up?</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=926314016-31082010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=926314016-31082010><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> ofw-bounces@lists.openfabrics.org 
[mailto:ofw-bounces@lists.openfabrics.org] <B>On Behalf Of </B>Tzachi 
Dar<BR><B>Sent:</B> Tuesday, August 31, 2010 8:45 AM<BR><B>To:</B> 
ofw@lists.openfabrics.org<BR><B>Subject:</B> [ofw] Patch: Replace memory 
allocator with a memory allocator that works natively with 0 bytes 
allocations<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV class=WordSection1>
<P class=MsoNormal>Signed off by: xalex<o:p></o:p></P>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal>This patch was already posted to the community in the past 
and was not fully accepted. I would like to resend it again.<o:p></o:p></P>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal>The main goal of this fix was to allow calling 
ExAllocatePoolWithTag with a value of zero. There have been cases that we have 
noticed in which ExAllocatePoolWithTag was called with a value of zero, and this 
has caused BSOD later.<o:p></o:p></P>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal>Instead of looking for all places in the code where we should 
fix, we have added this save macro that will return null in the case of zero 
size. All callers are handling the return of NULL already.<o:p></o:p></P>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal>Thanks<o:p></o:p></P>
<P class=MsoNormal>Tzachi<o:p></o:p></P>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal>--- 
core/bus/kernel/bus_port_mgr.c      Tue Apr 27 18:39:46 
2010<o:p></o:p></P>
<P class=MsoNormal>+++ core/bus/kernel/bus_port_mgr.c   Mon Jun 28 
10:52:13 2010<o:p></o:p></P>
<P class=MsoNormal>@@ -27,7 +27,7 @@<o:p></o:p></P>
<P class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
DEALINGS IN THE<o:p></o:p></P>
<P class=MsoNormal>  * SOFTWARE.<o:p></o:p></P>
<P class=MsoNormal>  *<o:p></o:p></P>
<P class=MsoNormal>- * $Id: bus_port_mgr.c 2510 2009-10-26 10:05:59Z leonidk 
$<o:p></o:p></P>
<P class=MsoNormal>+ * $Id: bus_port_mgr.c 5186 2009-11-29 11:58:37Z leonid 
$<o:p></o:p></P>
<P class=MsoNormal>  */<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>@@ -1599,7 +1599,7 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
dev_id_size = p_ext->pdo.p_pdo_device_info->device_id_size;<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                
/* Device ID is "IBA\SID_<sid> where <sid> is the IO device Service 
ID. */<o:p></o:p></P>
<P 
class=MsoNormal>-              
p_string = ExAllocatePoolWithTag( NonPagedPool, dev_id_size, 'vedq' 
);<o:p></o:p></P>
<P 
class=MsoNormal>+             
p_string = ExAllocatePoolWithTagSafeEx( NonPagedPool, dev_id_size, 'vedq' 
);<o:p></o:p></P>
<P 
class=MsoNormal>                
if( !p_string )<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P 
class=MsoNormal>                                
BUS_TRACE_EXIT( BUS_DBG_ERROR,<o:p></o:p></P>
<P class=MsoNormal>@@ -1635,7 +1635,7 @@<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                
dev_id_size = 
p_ext->pdo.p_pdo_device_info->hardware_id_size;<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>-              
p_string = ExAllocatePoolWithTag( NonPagedPool, dev_id_size, 'ihqp' 
);<o:p></o:p></P>
<P 
class=MsoNormal>+             
p_string = ExAllocatePoolWithTagSafeEx( NonPagedPool, dev_id_size, 'ihqp' 
);<o:p></o:p></P>
<P 
class=MsoNormal>                
if( !p_string )<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P 
class=MsoNormal>                                
BUS_TRACE_EXIT( BUS_DBG_ERROR,<o:p></o:p></P>
<P class=MsoNormal>@@ -1669,8 +1669,8 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
p_ext = (bus_port_ext_t*)p_dev_obj->DeviceExtension;<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                
dev_id_size = 
p_ext->pdo.p_pdo_device_info->compatible_id_size;<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
p_string = ExAllocatePoolWithTag( NonPagedPool, dev_id_size, 'ihqp' 
);<o:p></o:p></P>
<P 
class=MsoNormal>+             
<o:p></o:p></P>
<P 
class=MsoNormal>+             
p_string = ExAllocatePoolWithTagSafeEx( NonPagedPool, dev_id_size, 'ihqp' 
);<o:p></o:p></P>
<P 
class=MsoNormal>                
if( !p_string )<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P 
class=MsoNormal>                                
BUS_TRACE_EXIT( BUS_DBG_ERROR,<o:p></o:p></P>
<P class=MsoNormal>@@ -1753,8 +1753,7 @@<o:p></o:p></P>
<P 
class=MsoNormal>                                
return STATUS_NO_SUCH_DEVICE;<o:p></o:p></P>
<P 
class=MsoNormal>                
}<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
p_string = ExAllocatePoolWithTag( NonPagedPool, 
p_ext->pdo.p_pdo_device_info->description_size, 'edqp' );<o:p></o:p></P>
<P 
class=MsoNormal>+             
p_string = ExAllocatePoolWithTagSafeEx( NonPagedPool, 
p_ext->pdo.p_pdo_device_info->description_size, 'edqp' );<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                
if( !p_string )<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P class=MsoNormal>@@ -1796,6 +1795,12 @@<o:p></o:p></P>
<P 
class=MsoNormal>                                
return STATUS_NO_SUCH_DEVICE;<o:p></o:p></P>
<P 
class=MsoNormal>                
}<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>+             
if (!p_ext->pdo.h_ca)<o:p></o:p></P>
<P 
class=MsoNormal>+             
{<o:p></o:p></P>
<P 
class=MsoNormal>+                             
BUS_TRACE_EXIT( BUS_DBG_ERROR, ("HCA is still or already not acquired !\n") 
);<o:p></o:p></P>
<P 
class=MsoNormal>+                             
return STATUS_DEVICE_NOT_READY;<o:p></o:p></P>
<P 
class=MsoNormal>+             
}<o:p></o:p></P>
<P 
class=MsoNormal>+                             
<o:p></o:p></P>
<P 
class=MsoNormal>                
p_hca_dev = p_ext->pdo.h_ca->p_hca_dev;<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                
/* Get the length of the HCA's location. */<o:p></o:p></P>
<P class=MsoNormal>--- 
core/complib/kernel/cl_memory_osd.c          
Tue Apr 27 18:39:18 2010<o:p></o:p></P>
<P class=MsoNormal>+++ 
core/complib/kernel/cl_memory_osd.c       Mon Jun 
28 10:52:13 2010<o:p></o:p></P>
<P class=MsoNormal>@@ -26,7 +26,7 @@<o:p></o:p></P>
<P class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
DEALINGS IN THE<o:p></o:p></P>
<P class=MsoNormal>  * SOFTWARE.<o:p></o:p></P>
<P class=MsoNormal>  *<o:p></o:p></P>
<P class=MsoNormal>- * $Id: cl_memory_osd.c 920 2007-12-18 17:39:47Z stansmith 
$<o:p></o:p></P>
<P class=MsoNormal>+ * $Id: cl_memory_osd.c 4989 2009-10-22 16:04:40Z xalex 
$<o:p></o:p></P>
<P class=MsoNormal>  */<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>@@ -38,6 +38,7 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
IN           const 
size_t        size,<o:p></o:p></P>
<P 
class=MsoNormal>                
IN           const 
boolean_t               
pageable )<o:p></o:p></P>
<P class=MsoNormal> {<o:p></o:p></P>
<P class=MsoNormal>+<o:p></o:p></P>
<P 
class=MsoNormal>                
if( pageable )<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P 
class=MsoNormal>                                
CL_ASSERT( KeGetCurrentIrql() < DISPATCH_LEVEL );<o:p></o:p></P>
<P class=MsoNormal>@@ -46,7 +47,7 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
else<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P 
class=MsoNormal>                                
CL_ASSERT( KeGetCurrentIrql() <= DISPATCH_LEVEL );<o:p></o:p></P>
<P 
class=MsoNormal>-                              
return( ExAllocatePoolWithTag( NonPagedPool, size, 'virp' ) );<o:p></o:p></P>
<P 
class=MsoNormal>+                             
return( ExAllocatePoolWithTagSafeEx( NonPagedPool, size, 'virp' ) 
);<o:p></o:p></P>
<P 
class=MsoNormal>                
}<o:p></o:p></P>
<P class=MsoNormal> }<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>--- 
core/complib/cl_map.c           
Mon Aug 09 11:55:34 2010<o:p></o:p></P>
<P class=MsoNormal>+++ 
core/complib/cl_map.c        Mon Jun 28 
10:52:13 2010<o:p></o:p></P>
<P class=MsoNormal>@@ -27,7 +27,7 @@<o:p></o:p></P>
<P class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
DEALINGS IN THE<o:p></o:p></P>
<P class=MsoNormal>  * SOFTWARE.<o:p></o:p></P>
<P class=MsoNormal>  *<o:p></o:p></P>
<P class=MsoNormal>- * $Id: cl_map.c 2799 2010-05-21 19:10:08Z stansmith 
$<o:p></o:p></P>
<P class=MsoNormal>+ * $Id: cl_map.c 5147 2009-11-17 15:42:34Z leonid 
$<o:p></o:p></P>
<P class=MsoNormal>  */<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>@@ -703,6 +703,7 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
return( p_item );<o:p></o:p></P>
<P class=MsoNormal> }<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>+<o:p></o:p></P>
<P class=MsoNormal> void<o:p></o:p></P>
<P class=MsoNormal> cl_qmap_apply_func(<o:p></o:p></P>
<P 
class=MsoNormal>                
IN           const cl_qmap_t* 
const                
p_map,<o:p></o:p></P>
<P class=MsoNormal>@@ -1706,67 +1707,6 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
p_map->state = CL_INITIALIZED;<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                
cl_fmap_remove_all( p_map );<o:p></o:p></P>
<P class=MsoNormal>-}<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P class=MsoNormal>-cl_fmap_item_t*<o:p></o:p></P>
<P class=MsoNormal>-cl_fmap_match(<o:p></o:p></P>
<P 
class=MsoNormal>-              
IN const cl_fmap_t 
*const           
p_map,<o:p></o:p></P>
<P class=MsoNormal>-    IN const void 
*const                 
p_key,<o:p></o:p></P>
<P class=MsoNormal>-    IN 
cl_pfn_fmap_cmp_t                           
pfn_compare)<o:p></o:p></P>
<P class=MsoNormal>-{<o:p></o:p></P>
<P 
class=MsoNormal>-              
cl_fmap_item_t *p_item;<o:p></o:p></P>
<P 
class=MsoNormal>-              
int cmp;<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
CL_ASSERT(p_map);<o:p></o:p></P>
<P 
class=MsoNormal>-              
CL_ASSERT(p_map->state == CL_INITIALIZED);<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
p_item = __cl_fmap_root(p_map);<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
while (p_item != &p_map->nil) {<o:p></o:p></P>
<P 
class=MsoNormal>-                              
cmp = pfn_compare ? pfn_compare(p_key, p_item->p_key) :<o:p></o:p></P>
<P 
class=MsoNormal>-                                              
p_map->pfn_compare(p_key, p_item->p_key);<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-                              
if (!cmp)<o:p></o:p></P>
<P 
class=MsoNormal>-                                              
break;   /* just right */<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-                              
if (cmp < 0)<o:p></o:p></P>
<P 
class=MsoNormal>-                                              
p_item = 
p_item->p_left;            
/* too small */<o:p></o:p></P>
<P 
class=MsoNormal>-                              
else<o:p></o:p></P>
<P 
class=MsoNormal>-                                              
p_item = 
p_item->p_right;          /* too 
big */<o:p></o:p></P>
<P 
class=MsoNormal>-              
}<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
return (p_item);<o:p></o:p></P>
<P class=MsoNormal>-}<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P class=MsoNormal>-cl_fmap_item_t*<o:p></o:p></P>
<P class=MsoNormal>-cl_fmap_get_next(<o:p></o:p></P>
<P 
class=MsoNormal>-              
IN const cl_fmap_t * const          
p_map,<o:p></o:p></P>
<P 
class=MsoNormal>-              
IN const void 
*const                       
p_key)<o:p></o:p></P>
<P class=MsoNormal>-{<o:p></o:p></P>
<P 
class=MsoNormal>-              
cl_fmap_item_t *p_item;<o:p></o:p></P>
<P 
class=MsoNormal>-              
cl_fmap_item_t *p_item_found;<o:p></o:p></P>
<P 
class=MsoNormal>-              
int cmp;<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
CL_ASSERT(p_map);<o:p></o:p></P>
<P 
class=MsoNormal>-              
CL_ASSERT(p_map->state == CL_INITIALIZED);<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
p_item = __cl_fmap_root(p_map);<o:p></o:p></P>
<P 
class=MsoNormal>-              
p_item_found = (cl_fmap_item_t *) & p_map->nil;<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
while (p_item != &p_map->nil) {<o:p></o:p></P>
<P 
class=MsoNormal>-                              
cmp = p_map->pfn_compare(p_key, p_item->p_key);<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-                              
if (cmp < 0) {<o:p></o:p></P>
<P 
class=MsoNormal>-                                              
p_item_found = p_item;<o:p></o:p></P>
<P 
class=MsoNormal>-                                              
p_item = 
p_item->p_left;            
/* too small */<o:p></o:p></P>
<P 
class=MsoNormal>-                              
} else {<o:p></o:p></P>
<P 
class=MsoNormal>-                                              
p_item = 
p_item->p_right;          /* too 
big or match */<o:p></o:p></P>
<P 
class=MsoNormal>-                              
}<o:p></o:p></P>
<P 
class=MsoNormal>-              
}<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
return (p_item_found);<o:p></o:p></P>
<P class=MsoNormal> }<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>--- 
core/iou/kernel/iou_ioc_mgr.c           
Tue Apr 27 18:41:52 2010<o:p></o:p></P>
<P class=MsoNormal>+++ 
core/iou/kernel/iou_ioc_mgr.c        Mon Jun 
28 10:52:15 2010<o:p></o:p></P>
<P class=MsoNormal>@@ -27,7 +27,7 @@<o:p></o:p></P>
<P class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
DEALINGS IN THE<o:p></o:p></P>
<P class=MsoNormal>  * SOFTWARE.<o:p></o:p></P>
<P class=MsoNormal>  *<o:p></o:p></P>
<P class=MsoNormal>- * $Id: iou_ioc_mgr.c 2510 2009-10-26 10:05:59Z leonidk 
$<o:p></o:p></P>
<P class=MsoNormal>+ * $Id: iou_ioc_mgr.c 4989 2009-10-22 16:04:40Z xalex 
$<o:p></o:p></P>
<P class=MsoNormal>  */<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>@@ -952,7 +952,8 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                                
dev_id_size = 
(p_ext->pdo.p_pdo_device_info)->device_id_size;<o:p></o:p></P>
<P 
class=MsoNormal>-                              
p_string = ExAllocatePoolWithTag( NonPagedPool, dev_id_size, 'didq' 
);<o:p></o:p></P>
<P class=MsoNormal>+<o:p></o:p></P>
<P 
class=MsoNormal>+                             
p_string = ExAllocatePoolWithTagSafeEx( NonPagedPool, dev_id_size, 'didq' 
);<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                                
if( !p_string )<o:p></o:p></P>
<P 
class=MsoNormal>                                
{<o:p></o:p></P>
<P class=MsoNormal>@@ -1027,7 +1028,7 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P 
class=MsoNormal>                                
hw_id_size = 
p_ext->pdo.p_pdo_device_info->hardware_id_size;<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>-                              
p_string = ExAllocatePoolWithTag( NonPagedPool, hw_id_size, 'ihqi' 
);<o:p></o:p></P>
<P 
class=MsoNormal>+                             
p_string = ExAllocatePoolWithTagSafeEx( NonPagedPool, hw_id_size, 'ihqi' 
);<o:p></o:p></P>
<P 
class=MsoNormal>                                
if( !p_string )<o:p></o:p></P>
<P 
class=MsoNormal>                                
{<o:p></o:p></P>
<P 
class=MsoNormal>                                                
IOU_PRINT_EXIT( TRACE_LEVEL_ERROR, IOU_DBG_ERROR,<o:p></o:p></P>
<P class=MsoNormal>@@ -1142,8 +1143,8 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                                
compat_id_size = 
p_ext->pdo.p_pdo_device_info->compatible_id_size;<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-                              
p_string = ExAllocatePoolWithTag( NonPagedPool, compat_id_size, 'icqi' 
);<o:p></o:p></P>
<P 
class=MsoNormal>+                             
<o:p></o:p></P>
<P 
class=MsoNormal>+                             
p_string = ExAllocatePoolWithTagSafeEx( NonPagedPool, compat_id_size, 'icqi' 
);<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                                
if( !p_string )<o:p></o:p></P>
<P 
class=MsoNormal>                                
{<o:p></o:p></P>
<P class=MsoNormal>@@ -1302,7 +1303,7 @@<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                
if ( p_ext->pdo.p_pdo_device_info ) <o:p></o:p></P>
<P 
class=MsoNormal>                
{<o:p></o:p></P>
<P 
class=MsoNormal>-                              
p_string = ExAllocatePoolWithTag( NonPagedPool, 
p_ext->pdo.p_pdo_device_info->description_size, <o:p></o:p></P>
<P 
class=MsoNormal>+                             
p_string = ExAllocatePoolWithTagSafeEx( NonPagedPool, 
p_ext->pdo.p_pdo_device_info->description_size, <o:p></o:p></P>
<P 
class=MsoNormal>                                                                                                
'edqi' );<o:p></o:p></P>
<P 
class=MsoNormal>                                
if( !p_string )<o:p></o:p></P>
<P 
class=MsoNormal>                                
{<o:p></o:p></P>
<P class=MsoNormal>--- core/winmad/kernel/wm_driver.c    Tue Apr 
27 18:38:36 2010<o:p></o:p></P>
<P class=MsoNormal>+++ core/winmad/kernel/wm_driver.c Mon Jun 28 10:52:13 
2010<o:p></o:p></P>
<P class=MsoNormal>@@ -238,8 +238,8 @@<o:p></o:p></P>
<P 
class=MsoNormal>                                
attr = NULL;<o:p></o:p></P>
<P 
class=MsoNormal>                                
goto out;<o:p></o:p></P>
<P 
class=MsoNormal>                
}<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
attr = ExAllocatePoolWithTag(PagedPool, size, 'acmw');<o:p></o:p></P>
<P 
class=MsoNormal>+             
<o:p></o:p></P>
<P 
class=MsoNormal>+             
attr = ExAllocatePoolWithTagSafeEx(PagedPool, size, 'acmw');<o:p></o:p></P>
<P 
class=MsoNormal>                
if (attr == NULL) {<o:p></o:p></P>
<P 
class=MsoNormal>                                
goto out;<o:p></o:p></P>
<P 
class=MsoNormal>                
}<o:p></o:p></P>
<P class=MsoNormal>@@ -269,7 +269,8 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
}<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>                
size = sizeof(WM_IB_PORT) * attr->num_ports;<o:p></o:p></P>
<P 
class=MsoNormal>-              
pDevice->pPortArray = ExAllocatePoolWithTag(PagedPool, size, 
'pimw');<o:p></o:p></P>
<P 
class=MsoNormal>+             
<o:p></o:p></P>
<P 
class=MsoNormal>+             
pDevice->pPortArray = ExAllocatePoolWithTagSafeEx(PagedPool, size, 'pimw') 
;<o:p></o:p></P>
<P 
class=MsoNormal>                
if (pDevice->pPortArray == NULL) {<o:p></o:p></P>
<P 
class=MsoNormal>                                
status = STATUS_NO_MEMORY;<o:p></o:p></P>
<P 
class=MsoNormal>                                
goto out;<o:p></o:p></P>
<P class=MsoNormal>--- core/winverbs/kernel/wv_device.c  Tue Apr 27 
18:38:56 2010<o:p></o:p></P>
<P class=MsoNormal>+++ 
core/winverbs/kernel/wv_device.c               
Mon Jun 28 10:52:13 2010<o:p></o:p></P>
<P class=MsoNormal>@@ -178,8 +178,8 @@<o:p></o:p></P>
<P 
class=MsoNormal>                                
attr = NULL;<o:p></o:p></P>
<P 
class=MsoNormal>                                
goto out;<o:p></o:p></P>
<P 
class=MsoNormal>                
}<o:p></o:p></P>
<P class=MsoNormal>-<o:p></o:p></P>
<P 
class=MsoNormal>-              
attr = ExAllocatePoolWithTag(PagedPool, size, 'acvw');<o:p></o:p></P>
<P 
class=MsoNormal>+             
<o:p></o:p></P>
<P 
class=MsoNormal>+             
attr = ExAllocatePoolWithTagSafeEx(PagedPool, size, 'acvw');<o:p></o:p></P>
<P 
class=MsoNormal>                
if (attr == NULL) {<o:p></o:p></P>
<P 
class=MsoNormal>                                
goto out;<o:p></o:p></P>
<P 
class=MsoNormal>                
}<o:p></o:p></P>
<P class=MsoNormal>@@ -210,7 +210,7 @@<o:p></o:p></P>
<P 
class=MsoNormal>                
pDevice->PortCount = attr->num_ports;<o:p></o:p></P>
<P 
class=MsoNormal>                
ExFreePoolWithTag(attr, 'acvw');<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P 
class=MsoNormal>-              
pDevice->pPorts = ExAllocatePoolWithTag(NonPagedPool, sizeof(WV_PORT) 
*<o:p></o:p></P>
<P 
class=MsoNormal>+             
pDevice->pPorts = ExAllocatePoolWithTagSafeEx(NonPagedPool, sizeof(WV_PORT) 
*<o:p></o:p></P>
<P 
class=MsoNormal>                                                                                                                                                                                pDevice->PortCount, 
'cpvw');<o:p></o:p></P>
<P 
class=MsoNormal>                
if (pDevice->pPorts == NULL) {<o:p></o:p></P>
<P 
class=MsoNormal>                                
return STATUS_NO_MEMORY;<o:p></o:p></P>
<P class=MsoNormal>--- inc/complib/cl_memory.h     Tue Apr 
27 18:44:09 2010<o:p></o:p></P>
<P class=MsoNormal>+++ inc/complib/cl_memory.h  Mon Jun 28 10:52:18 
2010<o:p></o:p></P>
<P class=MsoNormal>@@ -27,7 +27,7 @@<o:p></o:p></P>
<P class=MsoNormal>  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
DEALINGS IN THE<o:p></o:p></P>
<P class=MsoNormal>  * SOFTWARE.<o:p></o:p></P>
<P class=MsoNormal>  *<o:p></o:p></P>
<P class=MsoNormal>- * $Id: cl_memory.h 10 2005-05-24 00:33:03Z ftillier 
$<o:p></o:p></P>
<P class=MsoNormal>+ * $Id: cl_memory.h 4991 2009-10-22 16:21:47Z xalex 
$<o:p></o:p></P>
<P class=MsoNormal>  */<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>@@ -919,6 +919,21 @@<o:p></o:p></P>
<P class=MsoNormal> /*<o:p></o:p></P>
<P class=MsoNormal>  * Define allocation macro.<o:p></o:p></P>
<P class=MsoNormal>  */<o:p></o:p></P>
<P class=MsoNormal>+<o:p></o:p></P>
<P class=MsoNormal>+/*         From 
WinDDK: "Avoid calling ExAllocatePoolWithTag with memory size == 0. 
<o:p></o:p></P>
<P 
class=MsoNormal>+             
Doing so will result in pool header wastage"<o:p></o:p></P>
<P class=MsoNormal>+ 
            Verifier with 
low mem simulation will crash with  memory size == 0<o:p></o:p></P>
<P class=MsoNormal>+*/<o:p></o:p></P>
<P class=MsoNormal>+#define ExAllocatePoolWithTagSafeEx( pageable, size, tag ) 
\<o:p></o:p></P>
<P 
class=MsoNormal>+                                             
(size == 0 ? NULL : ExAllocatePoolWithTag(pageable, size, tag))<o:p></o:p></P>
<P class=MsoNormal>+<o:p></o:p></P>
<P class=MsoNormal>+#define ExAllocatePoolWithTagSafeExNonPaged(size, tag ) 
\<o:p></o:p></P>
<P 
class=MsoNormal>+                                             
(size == 0 ? NULL : ExAllocatePoolWithTag(NonPagedPool, size, tag 
))                     
<o:p></o:p></P>
<P 
class=MsoNormal>+                                             
<o:p></o:p></P>
<P class=MsoNormal>+#define ExAllocatePoolWithTagSafeExPaged(size, tag ) 
\<o:p></o:p></P>
<P 
class=MsoNormal>+                                                             
(size == 0 ? NULL : ExAllocatePoolWithTag(PagedPool, size, tag ))<o:p></o:p></P>
<P class=MsoNormal>+<o:p></o:p></P>
<P class=MsoNormal>+<o:p></o:p></P>
<P class=MsoNormal> #if defined( CL_TRACK_MEM )<o:p></o:p></P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal> #define cl_malloc( a )    
\<o:p></o:p></P></DIV></BODY></HTML>