<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.2963" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=577450511-04092006><FONT face=Arial
size=2>Fab</FONT></SPAN></DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial size=2>The patch for the
former problem indeed help </FONT></SPAN></DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial size=2>( I guess
that that the fact you are not calling to srp_free_hca solve the double
freeing, I also did not understand fully why ).</FONT></SPAN></DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial size=2>Still I was left
with the LOCAL_PROTECTION_ERR , the reason for that is casting issue in 32 bit
machines</FONT></SPAN></DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial size=2>Because SRP register
kernel memory the cast from 32 bit to 64 bit use sign extension and
:</FONT></SPAN></DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial size=2>0x89830000 move to
0xffffffff89830000</FONT></SPAN></DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial size=2>this change solve
tyhe problem (its just suggestion but the idea is to force the cast to
ignore sign of the address)</FONT></SPAN></DIV>
<DIV><SPAN class=577450511-04092006></SPAN><SPAN
class=577450511-04092006></SPAN><SPAN class=577450511-04092006><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial size=2>Index:
kernel/srp_descriptors.c<BR>===================================================================<BR>---
kernel/srp_descriptors.c (revision 1647)<BR>+++
kernel/srp_descriptors.c (working copy)<BR>@@ -91,10 +91,12
@@<BR> }<BR> <BR> /* Register the data segments array
memory */<BR>- mr_create.vaddr =
p_descriptors->p_recv_data_segments_array;<BR>+ mr_create.vaddr = (void*
__ptr64)(uint64_t)(ULONG_PTR)p_descriptors->p_recv_data_segments_array;<BR> mr_create.length
= p_descriptors->recv_descriptor_count *
p_descriptors->recv_data_segment_size;<BR> mr_create.access_ctrl =
IB_AC_LOCAL_WRITE;<BR>@@ -124,7 +126,7
@@<BR> p_descriptor->wr.num_ds =
1;<BR> p_descriptor->wr.ds_array =
p_descriptor->ds;<BR> <BR>- p_descriptor->ds[0].vaddr =
(uint64_t)((void*
__ptr64)p_data_segment);<BR>+ p_descriptor->ds[0].vaddr =
(uint64_t)(ULONG_PTR)p_data_segment;<BR> p_descriptor->ds[0].length
=
p_descriptors->recv_data_segment_size;<BR> p_descriptor->ds[0].lkey
= p_descriptors->recv_lkey;<BR> <BR></FONT></SPAN></DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=577450511-04092006><FONT face=Arial
size=2></FONT></SPAN> </DIV></BODY></HTML>