RDMA/cxgb3: sgl/pbl offset calculation needs 64 bits

The variable 'offset' in iwch_sgl2pbl_map() needs to be a u64.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
Steve Wise 2009-02-10 16:38:22 -08:00 коммит произвёл Roland Dreier
Родитель f3b8436ad9
Коммит 900f4c16c3
1 изменённых файлов: 3 добавлений и 6 удалений

Просмотреть файл

@ -195,15 +195,12 @@ static int build_inv_stag(union t3_wr *wqe, struct ib_send_wr *wr,
return 0; return 0;
} }
/*
* TBD: this is going to be moved to firmware. Missing pdid/qpid check for now.
*/
static int iwch_sgl2pbl_map(struct iwch_dev *rhp, struct ib_sge *sg_list, static int iwch_sgl2pbl_map(struct iwch_dev *rhp, struct ib_sge *sg_list,
u32 num_sgle, u32 * pbl_addr, u8 * page_size) u32 num_sgle, u32 * pbl_addr, u8 * page_size)
{ {
int i; int i;
struct iwch_mr *mhp; struct iwch_mr *mhp;
u32 offset; u64 offset;
for (i = 0; i < num_sgle; i++) { for (i = 0; i < num_sgle; i++) {
mhp = get_mhp(rhp, (sg_list[i].lkey) >> 8); mhp = get_mhp(rhp, (sg_list[i].lkey) >> 8);
@ -235,8 +232,8 @@ static int iwch_sgl2pbl_map(struct iwch_dev *rhp, struct ib_sge *sg_list,
return -EINVAL; return -EINVAL;
} }
offset = sg_list[i].addr - mhp->attr.va_fbo; offset = sg_list[i].addr - mhp->attr.va_fbo;
offset += ((u32) mhp->attr.va_fbo) % offset += mhp->attr.va_fbo &
(1UL << (12 + mhp->attr.page_size)); ((1UL << (12 + mhp->attr.page_size)) - 1);
pbl_addr[i] = ((mhp->attr.pbl_addr - pbl_addr[i] = ((mhp->attr.pbl_addr -
rhp->rdev.rnic_info.pbl_base) >> 3) + rhp->rdev.rnic_info.pbl_base) >> 3) +
(offset >> (12 + mhp->attr.page_size)); (offset >> (12 + mhp->attr.page_size));