diff options
author | Or Gerlitz <ogerlitz@voltaire.com> | 2006-02-02 13:43:45 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2006-03-20 13:08:10 -0500 |
commit | d36f34aadf184d8cc4c240de2b6319ccea8334bb (patch) | |
tree | 20b7a77e03f3c75c9043a50ddd720a31048efa99 /drivers/infiniband/hw | |
parent | 6dfc3901b04d1b79fa982d6de6d5af3b50c6cea8 (diff) |
IB: Enable FMR pool user to set page size
This patch allows the consumer to set the page size of "pages" mapped
by the pool FMRs, which is a feature already existing in the base
verbs API. On the cosmetic side it changes ib_fmr_attr.page_size field
to be named page_shift.
Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_mr.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c index 653f1321a13f..0b48048ad0f8 100644 --- a/drivers/infiniband/hw/mthca/mthca_mr.c +++ b/drivers/infiniband/hw/mthca/mthca_mr.c | |||
@@ -491,7 +491,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd, | |||
491 | int err = -ENOMEM; | 491 | int err = -ENOMEM; |
492 | int i; | 492 | int i; |
493 | 493 | ||
494 | if (mr->attr.page_size < 12 || mr->attr.page_size >= 32) | 494 | if (mr->attr.page_shift < 12 || mr->attr.page_shift >= 32) |
495 | return -EINVAL; | 495 | return -EINVAL; |
496 | 496 | ||
497 | /* For Arbel, all MTTs must fit in the same page. */ | 497 | /* For Arbel, all MTTs must fit in the same page. */ |
@@ -543,7 +543,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd, | |||
543 | MTHCA_MPT_FLAG_REGION | | 543 | MTHCA_MPT_FLAG_REGION | |
544 | access); | 544 | access); |
545 | 545 | ||
546 | mpt_entry->page_size = cpu_to_be32(mr->attr.page_size - 12); | 546 | mpt_entry->page_size = cpu_to_be32(mr->attr.page_shift - 12); |
547 | mpt_entry->key = cpu_to_be32(key); | 547 | mpt_entry->key = cpu_to_be32(key); |
548 | mpt_entry->pd = cpu_to_be32(pd); | 548 | mpt_entry->pd = cpu_to_be32(pd); |
549 | memset(&mpt_entry->start, 0, | 549 | memset(&mpt_entry->start, 0, |
@@ -611,7 +611,7 @@ static inline int mthca_check_fmr(struct mthca_fmr *fmr, u64 *page_list, | |||
611 | if (list_len > fmr->attr.max_pages) | 611 | if (list_len > fmr->attr.max_pages) |
612 | return -EINVAL; | 612 | return -EINVAL; |
613 | 613 | ||
614 | page_mask = (1 << fmr->attr.page_size) - 1; | 614 | page_mask = (1 << fmr->attr.page_shift) - 1; |
615 | 615 | ||
616 | /* We are getting page lists, so va must be page aligned. */ | 616 | /* We are getting page lists, so va must be page aligned. */ |
617 | if (iova & page_mask) | 617 | if (iova & page_mask) |
@@ -659,7 +659,7 @@ int mthca_tavor_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list, | |||
659 | } | 659 | } |
660 | 660 | ||
661 | mpt_entry.lkey = cpu_to_be32(key); | 661 | mpt_entry.lkey = cpu_to_be32(key); |
662 | mpt_entry.length = cpu_to_be64(list_len * (1ull << fmr->attr.page_size)); | 662 | mpt_entry.length = cpu_to_be64(list_len * (1ull << fmr->attr.page_shift)); |
663 | mpt_entry.start = cpu_to_be64(iova); | 663 | mpt_entry.start = cpu_to_be64(iova); |
664 | 664 | ||
665 | __raw_writel((__force u32) mpt_entry.lkey, &fmr->mem.tavor.mpt->key); | 665 | __raw_writel((__force u32) mpt_entry.lkey, &fmr->mem.tavor.mpt->key); |
@@ -700,7 +700,7 @@ int mthca_arbel_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list, | |||
700 | 700 | ||
701 | fmr->mem.arbel.mpt->key = cpu_to_be32(key); | 701 | fmr->mem.arbel.mpt->key = cpu_to_be32(key); |
702 | fmr->mem.arbel.mpt->lkey = cpu_to_be32(key); | 702 | fmr->mem.arbel.mpt->lkey = cpu_to_be32(key); |
703 | fmr->mem.arbel.mpt->length = cpu_to_be64(list_len * (1ull << fmr->attr.page_size)); | 703 | fmr->mem.arbel.mpt->length = cpu_to_be64(list_len * (1ull << fmr->attr.page_shift)); |
704 | fmr->mem.arbel.mpt->start = cpu_to_be64(iova); | 704 | fmr->mem.arbel.mpt->start = cpu_to_be64(iova); |
705 | 705 | ||
706 | wmb(); | 706 | wmb(); |