<br><font size=2 face="sans-serif">Hi Roland,</font>
<br>
<br><font size=2 face="sans-serif">> In particular, the memory pinning
code in in uverbs_mem.c could stand a looking over.</font>
<br>
<br><font size=2 face="sans-serif">1. In ib_umem_get(), I see you set ret
= 0, which is unnecessary because chunk->nents</font>
<br><font size=2 face="sans-serif">    is set based on ret value.
Plus you already have a "while (ret)" to break out. "ret
= 0"</font>
<br><font size=2 face="sans-serif">    can be safely removed.</font>
<br>
<br><font size=2 face="sans-serif">2. Also, as an optimization, in __ib_umem_release(),
you could add another argument</font>
<br><font size=2 face="sans-serif">    "page_dirty"
which if set will do set_page_dirty_lock() (it seems to be a costly routine),</font>
<br><font size=2 face="sans-serif">    and pass that argument
as 0 in ib_umem_get() and 1 in ib_umem_release().</font>
<br>
<br><font size=2 face="sans-serif">3. In __ib_umem_unmark() (sorry, I don't
fully know this code very well and could be wrong),</font>
<br><font size=2 face="sans-serif">    should the for loop have
cur_base = vma->vm_start (instead of vm_end) since vma is set</font>
<br><font size=2 face="sans-serif">    to the next one before
this statement is executed ?</font>
<br>
<br><font size=2 face="sans-serif">thanks,</font>
<br>
<br><font size=2 face="sans-serif">- KK</font>
<br>