> Code incorrectly failed memory registration if the buffer was
 > not page aligned.  Also, the length field is mangled causing
 > the hardware to think the registration is much larger than it
 > really is.

This doesn't look quite right:

-               if (buffer_list[i].addr & ~PAGE_MASK) {
-                       /* TODO: Unwind allocated buffers */
-                       nes_free_resource(nesadapter, 
nesadapter->allocated_mrs, stag_index);
-                       nes_debug(NES_DBG_MR, "Unaligned Memory Buffer: 0x%x\n",
-                                       (unsigned int) buffer_list[i].addr);
-                       ibmr = ERR_PTR(-EINVAL);
-                       kfree(nesmr);
-                       goto reg_phys_err;
-               }

if a buffer after the first one is not aligned, then I suspect you
can't handle the registration -- ie you want to allow:

        addr    len
        0x1800  0x 800
        0x3000  0x1000
        0x5000  0x 800

but not cases like

        addr    len
        0x1800  0x 800
        0x3800  0x 800
        0x5000  0x 800

you could take a look at the code in mthca_reg_phys_mr() to see what I
think is required (although I wouldn't be shocked if you spot a bug
there too)

 - R.
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to