diff options
author | Roland Dreier <rolandd@cisco.com> | 2008-09-30 00:37:33 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-09-30 00:37:33 -0400 |
commit | 208dde28b0f73c0e2dc6be74040fa562e129a6e8 (patch) | |
tree | e4ef7fa60a3411fb6fba868ec1c8549c083e799c /drivers/infiniband/hw/mthca/mthca_eq.c | |
parent | 9824b8f11373b0df806c135a342da9319ef1d893 (diff) |
IB/mthca: Use pci_request_regions()
Back in prehistoric (pre-git!) days, the kernel's MSI-X support did
request_mem_region() on a device's MSI-X tables, which meant that a
driver that enabled MSI-X couldn't use pci_request_regions() (since
that would clash with the PCI layer's MSI-X request).
However, that was removed (by me!) years ago, so mthca can just use
pci_request_regions() and pci_release_regions() instead of its own
much more complicated code that avoids requesting the MSI-X tables.
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/mthca/mthca_eq.c')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_eq.c | 51 |
1 files changed, 10 insertions, 41 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_eq.c b/drivers/infiniband/hw/mthca/mthca_eq.c index cc6858f0b65b..28f0e0c40d7d 100644 --- a/drivers/infiniband/hw/mthca/mthca_eq.c +++ b/drivers/infiniband/hw/mthca/mthca_eq.c | |||
@@ -652,27 +652,13 @@ static int mthca_map_reg(struct mthca_dev *dev, | |||
652 | { | 652 | { |
653 | unsigned long base = pci_resource_start(dev->pdev, 0); | 653 | unsigned long base = pci_resource_start(dev->pdev, 0); |
654 | 654 | ||
655 | if (!request_mem_region(base + offset, size, DRV_NAME)) | ||
656 | return -EBUSY; | ||
657 | |||
658 | *map = ioremap(base + offset, size); | 655 | *map = ioremap(base + offset, size); |
659 | if (!*map) { | 656 | if (!*map) |
660 | release_mem_region(base + offset, size); | ||
661 | return -ENOMEM; | 657 | return -ENOMEM; |
662 | } | ||
663 | 658 | ||
664 | return 0; | 659 | return 0; |
665 | } | 660 | } |
666 | 661 | ||
667 | static void mthca_unmap_reg(struct mthca_dev *dev, unsigned long offset, | ||
668 | unsigned long size, void __iomem *map) | ||
669 | { | ||
670 | unsigned long base = pci_resource_start(dev->pdev, 0); | ||
671 | |||
672 | release_mem_region(base + offset, size); | ||
673 | iounmap(map); | ||
674 | } | ||
675 | |||
676 | static int mthca_map_eq_regs(struct mthca_dev *dev) | 662 | static int mthca_map_eq_regs(struct mthca_dev *dev) |
677 | { | 663 | { |
678 | if (mthca_is_memfree(dev)) { | 664 | if (mthca_is_memfree(dev)) { |
@@ -699,9 +685,7 @@ static int mthca_map_eq_regs(struct mthca_dev *dev) | |||
699 | dev->fw.arbel.eq_arm_base) + 4, 4, | 685 | dev->fw.arbel.eq_arm_base) + 4, 4, |
700 | &dev->eq_regs.arbel.eq_arm)) { | 686 | &dev->eq_regs.arbel.eq_arm)) { |
701 | mthca_err(dev, "Couldn't map EQ arm register, aborting.\n"); | 687 | mthca_err(dev, "Couldn't map EQ arm register, aborting.\n"); |
702 | mthca_unmap_reg(dev, (pci_resource_len(dev->pdev, 0) - 1) & | 688 | iounmap(dev->clr_base); |
703 | dev->fw.arbel.clr_int_base, MTHCA_CLR_INT_SIZE, | ||
704 | dev->clr_base); | ||
705 | return -ENOMEM; | 689 | return -ENOMEM; |
706 | } | 690 | } |
707 | 691 | ||
@@ -710,12 +694,8 @@ static int mthca_map_eq_regs(struct mthca_dev *dev) | |||
710 | MTHCA_EQ_SET_CI_SIZE, | 694 | MTHCA_EQ_SET_CI_SIZE, |
711 | &dev->eq_regs.arbel.eq_set_ci_base)) { | 695 | &dev->eq_regs.arbel.eq_set_ci_base)) { |
712 | mthca_err(dev, "Couldn't map EQ CI register, aborting.\n"); | 696 | mthca_err(dev, "Couldn't map EQ CI register, aborting.\n"); |
713 | mthca_unmap_reg(dev, ((pci_resource_len(dev->pdev, 0) - 1) & | 697 | iounmap(dev->eq_regs.arbel.eq_arm); |
714 | dev->fw.arbel.eq_arm_base) + 4, 4, | 698 | iounmap(dev->clr_base); |
715 | dev->eq_regs.arbel.eq_arm); | ||
716 | mthca_unmap_reg(dev, (pci_resource_len(dev->pdev, 0) - 1) & | ||
717 | dev->fw.arbel.clr_int_base, MTHCA_CLR_INT_SIZE, | ||
718 | dev->clr_base); | ||
719 | return -ENOMEM; | 699 | return -ENOMEM; |
720 | } | 700 | } |
721 | } else { | 701 | } else { |
@@ -731,8 +711,7 @@ static int mthca_map_eq_regs(struct mthca_dev *dev) | |||
731 | &dev->eq_regs.tavor.ecr_base)) { | 711 | &dev->eq_regs.tavor.ecr_base)) { |
732 | mthca_err(dev, "Couldn't map ecr register, " | 712 | mthca_err(dev, "Couldn't map ecr register, " |
733 | "aborting.\n"); | 713 | "aborting.\n"); |
734 | mthca_unmap_reg(dev, MTHCA_CLR_INT_BASE, MTHCA_CLR_INT_SIZE, | 714 | iounmap(dev->clr_base); |
735 | dev->clr_base); | ||
736 | return -ENOMEM; | 715 | return -ENOMEM; |
737 | } | 716 | } |
738 | } | 717 | } |
@@ -744,22 +723,12 @@ static int mthca_map_eq_regs(struct mthca_dev *dev) | |||
744 | static void mthca_unmap_eq_regs(struct mthca_dev *dev) | 723 | static void mthca_unmap_eq_regs(struct mthca_dev *dev) |
745 | { | 724 | { |
746 | if (mthca_is_memfree(dev)) { | 725 | if (mthca_is_memfree(dev)) { |
747 | mthca_unmap_reg(dev, (pci_resource_len(dev->pdev, 0) - 1) & | 726 | iounmap(dev->eq_regs.arbel.eq_set_ci_base); |
748 | dev->fw.arbel.eq_set_ci_base, | 727 | iounmap(dev->eq_regs.arbel.eq_arm); |
749 | MTHCA_EQ_SET_CI_SIZE, | 728 | iounmap(dev->clr_base); |
750 | dev->eq_regs.arbel.eq_set_ci_base); | ||
751 | mthca_unmap_reg(dev, ((pci_resource_len(dev->pdev, 0) - 1) & | ||
752 | dev->fw.arbel.eq_arm_base) + 4, 4, | ||
753 | dev->eq_regs.arbel.eq_arm); | ||
754 | mthca_unmap_reg(dev, (pci_resource_len(dev->pdev, 0) - 1) & | ||
755 | dev->fw.arbel.clr_int_base, MTHCA_CLR_INT_SIZE, | ||
756 | dev->clr_base); | ||
757 | } else { | 729 | } else { |
758 | mthca_unmap_reg(dev, MTHCA_ECR_BASE, | 730 | iounmap(dev->eq_regs.tavor.ecr_base); |
759 | MTHCA_ECR_SIZE + MTHCA_ECR_CLR_SIZE, | 731 | iounmap(dev->clr_base); |
760 | dev->eq_regs.tavor.ecr_base); | ||
761 | mthca_unmap_reg(dev, MTHCA_CLR_INT_BASE, MTHCA_CLR_INT_SIZE, | ||
762 | dev->clr_base); | ||
763 | } | 732 | } |
764 | } | 733 | } |
765 | 734 | ||