From a2a9f8ddbcde2012ad9f09e819d242d9bd89ba04 Mon Sep 17 00:00:00 2001 From: Roland Dreier Date: Mon, 4 Feb 2008 20:20:42 -0800 Subject: [PATCH] --- yaml --- r: 83240 b: refs/heads/master c: 0d89fe2c0ca12ad2ee4e35a0661319746af6e94a h: refs/heads/master v: v3 --- [refs] | 2 +- .../infiniband/hw/mthca/mthca_provider.c | 20 +++---------------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/[refs] b/[refs] index 4f86397e45ca..79a713355284 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2b5e6b120e58d44cace68e6c7204b541a8b0b43f +refs/heads/master: 0d89fe2c0ca12ad2ee4e35a0661319746af6e94a diff --git a/trunk/drivers/infiniband/hw/mthca/mthca_provider.c b/trunk/drivers/infiniband/hw/mthca/mthca_provider.c index 6bcde1cb9688..19b7f61cf04c 100644 --- a/trunk/drivers/infiniband/hw/mthca/mthca_provider.c +++ b/trunk/drivers/infiniband/hw/mthca/mthca_provider.c @@ -923,17 +923,13 @@ static struct ib_mr *mthca_reg_phys_mr(struct ib_pd *pd, struct mthca_mr *mr; u64 *page_list; u64 total_size; - u64 mask; + unsigned long mask; int shift; int npages; int err; int i, j, n; - /* First check that we have enough alignment */ - if ((*iova_start & ~PAGE_MASK) != (buffer_list[0].addr & ~PAGE_MASK)) - return ERR_PTR(-EINVAL); - - mask = 0; + mask = buffer_list[0].addr ^ *iova_start; total_size = 0; for (i = 0; i < num_phys_buf; ++i) { if (i != 0) @@ -947,17 +943,7 @@ static struct ib_mr *mthca_reg_phys_mr(struct ib_pd *pd, if (mask & ~PAGE_MASK) return ERR_PTR(-EINVAL); - /* Find largest page shift we can use to cover buffers */ - for (shift = PAGE_SHIFT; shift < 31; ++shift) - if (num_phys_buf > 1) { - if ((1ULL << shift) & mask) - break; - } else { - if (1ULL << shift >= - buffer_list[0].size + - (buffer_list[0].addr & ((1ULL << shift) - 1))) - break; - } + shift = __ffs(mask | 1 << 31); buffer_list[0].size += buffer_list[0].addr & ((1ULL << shift) - 1); buffer_list[0].addr &= ~0ull << shift;