diff options
| -rw-r--r-- | drivers/infiniband/hw/mthca/mthca_mr.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c index 25e1c1db9a40..a486dec1707e 100644 --- a/drivers/infiniband/hw/mthca/mthca_mr.c +++ b/drivers/infiniband/hw/mthca/mthca_mr.c | |||
| @@ -761,6 +761,7 @@ void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr) | |||
| 761 | 761 | ||
| 762 | int __devinit mthca_init_mr_table(struct mthca_dev *dev) | 762 | int __devinit mthca_init_mr_table(struct mthca_dev *dev) |
| 763 | { | 763 | { |
| 764 | unsigned long addr; | ||
| 764 | int err, i; | 765 | int err, i; |
| 765 | 766 | ||
| 766 | err = mthca_alloc_init(&dev->mr_table.mpt_alloc, | 767 | err = mthca_alloc_init(&dev->mr_table.mpt_alloc, |
| @@ -796,9 +797,12 @@ int __devinit mthca_init_mr_table(struct mthca_dev *dev) | |||
| 796 | goto err_fmr_mpt; | 797 | goto err_fmr_mpt; |
| 797 | } | 798 | } |
| 798 | 799 | ||
| 800 | addr = pci_resource_start(dev->pdev, 4) + | ||
| 801 | ((pci_resource_len(dev->pdev, 4) - 1) & | ||
| 802 | dev->mr_table.mpt_base); | ||
| 803 | |||
| 799 | dev->mr_table.tavor_fmr.mpt_base = | 804 | dev->mr_table.tavor_fmr.mpt_base = |
| 800 | ioremap(dev->mr_table.mpt_base, | 805 | ioremap(addr, (1 << i) * sizeof(struct mthca_mpt_entry)); |
| 801 | (1 << i) * sizeof (struct mthca_mpt_entry)); | ||
| 802 | 806 | ||
| 803 | if (!dev->mr_table.tavor_fmr.mpt_base) { | 807 | if (!dev->mr_table.tavor_fmr.mpt_base) { |
| 804 | mthca_warn(dev, "MPT ioremap for FMR failed.\n"); | 808 | mthca_warn(dev, "MPT ioremap for FMR failed.\n"); |
| @@ -806,9 +810,12 @@ int __devinit mthca_init_mr_table(struct mthca_dev *dev) | |||
| 806 | goto err_fmr_mpt; | 810 | goto err_fmr_mpt; |
| 807 | } | 811 | } |
| 808 | 812 | ||
| 813 | addr = pci_resource_start(dev->pdev, 4) + | ||
| 814 | ((pci_resource_len(dev->pdev, 4) - 1) & | ||
| 815 | dev->mr_table.mtt_base); | ||
| 816 | |||
| 809 | dev->mr_table.tavor_fmr.mtt_base = | 817 | dev->mr_table.tavor_fmr.mtt_base = |
| 810 | ioremap(dev->mr_table.mtt_base, | 818 | ioremap(addr, (1 << i) * MTHCA_MTT_SEG_SIZE); |
| 811 | (1 << i) * MTHCA_MTT_SEG_SIZE); | ||
| 812 | if (!dev->mr_table.tavor_fmr.mtt_base) { | 819 | if (!dev->mr_table.tavor_fmr.mtt_base) { |
| 813 | mthca_warn(dev, "MTT ioremap for FMR failed.\n"); | 820 | mthca_warn(dev, "MTT ioremap for FMR failed.\n"); |
| 814 | err = -ENOMEM; | 821 | err = -ENOMEM; |
