> 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