[ofa-general] Re: [PATCH] RDMA/nes: Physical memory registration is	incorrect
    Roland Dreier 
    rdreier at cisco.com
       
    Wed Apr  8 14:06:56 PDT 2009
    
    
  
 > 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.
    
    
More information about the general
mailing list