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.

The fix is to remove the page alignment restriction as well the
incorrect length adjustment.

Signed-off-by: Don Wood <[email protected]>
---
 drivers/infiniband/hw/nes/nes_verbs.c |   13 +------------
 1 files changed, 1 insertions(+), 12 deletions(-)

diff --git a/drivers/infiniband/hw/nes/nes_verbs.c 
b/drivers/infiniband/hw/nes/nes_verbs.c
index 7e5b5ba..0374e7d 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -2215,15 +2215,6 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
                        root_pbl_index++;
                        cur_pbl_index = 0;
                }
-               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 (!buffer_list[i].size) {
                        nes_free_resource(nesadapter, 
nesadapter->allocated_mrs, stag_index);
@@ -2238,7 +2229,7 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
                        if ((buffer_list[i-1].addr+PAGE_SIZE) != 
buffer_list[i].addr)
                                single_page = 0;
                }
-               vpbl.pbl_vbase[cur_pbl_index].pa_low = 
cpu_to_le32((u32)buffer_list[i].addr);
+               vpbl.pbl_vbase[cur_pbl_index].pa_low = 
cpu_to_le32((u32)buffer_list[i].addr & PAGE_MASK);
                vpbl.pbl_vbase[cur_pbl_index++].pa_high =
                                cpu_to_le32((u32)((((u64)buffer_list[i].addr) 
>> 32)));
        }
@@ -2251,8 +2242,6 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
                        " length = 0x%016lX, index = 0x%08X\n",
                        stag, (unsigned long)*iova_start, (unsigned 
long)region_length, stag_index);
 
-       region_length -= (*iova_start)&PAGE_MASK;
-
        /* Make the leaf PBL the root if only one PBL */
        if (root_pbl_index == 1) {
                root_vpbl.pbl_pbase = vpbl.pbl_pbase;
-- 
1.5.3.3

_______________________________________________
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