IB/mthca: Fix driver when sizeof (phys_addr_t) > sizeof (long)
authorJohn L. Burr <jlburr@cadence.com>
Wed, 12 Jan 2011 04:39:46 +0000 (20:39 -0800)
committerRoland Dreier <rolandd@cisco.com>
Wed, 12 Jan 2011 04:39:47 +0000 (20:39 -0800)
Some systems have PCI addresses that don't fit in unsigned long (eg some
32-bit PowerPC 440 systems have 36-bit bus addresses).  Fix up the driver
by using phys_addr_t where appropriate, so we don't truncate any PCI
resource addresses before ioremapping them.

Signed-off-by: John L. Burr <jlburr@cadence.com>
[ Update to apply to current driver source.  - Roland ]

Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/mthca/mthca_catas.c
drivers/infiniband/hw/mthca/mthca_cmd.c
drivers/infiniband/hw/mthca/mthca_eq.c
drivers/infiniband/hw/mthca/mthca_main.c
drivers/infiniband/hw/mthca/mthca_mr.c

index 0aa0110..e4a08c2 100644 (file)
@@ -146,7 +146,7 @@ static void poll_catas(unsigned long dev_ptr)
 
 void mthca_start_catas_poll(struct mthca_dev *dev)
 {
-       unsigned long addr;
+       phys_addr_t addr;
 
        init_timer(&dev->catas_err.timer);
        dev->catas_err.map  = NULL;
@@ -158,7 +158,8 @@ void mthca_start_catas_poll(struct mthca_dev *dev)
        dev->catas_err.map = ioremap(addr, dev->catas_err.size * 4);
        if (!dev->catas_err.map) {
                mthca_warn(dev, "couldn't map catastrophic error region "
-                          "at 0x%lx/0x%x\n", addr, dev->catas_err.size * 4);
+                          "at 0x%llx/0x%x\n", (unsigned long long) addr,
+                          dev->catas_err.size * 4);
                return;
        }
 
index f4ceecd..7bfa2a1 100644 (file)
@@ -713,7 +713,7 @@ int mthca_RUN_FW(struct mthca_dev *dev, u8 *status)
 
 static void mthca_setup_cmd_doorbells(struct mthca_dev *dev, u64 base)
 {
-       unsigned long addr;
+       phys_addr_t addr;
        u16 max_off = 0;
        int i;
 
index 8e8c728..76785c6 100644 (file)
@@ -653,7 +653,7 @@ static int mthca_map_reg(struct mthca_dev *dev,
                         unsigned long offset, unsigned long size,
                         void __iomem **map)
 {
-       unsigned long base = pci_resource_start(dev->pdev, 0);
+       phys_addr_t base = pci_resource_start(dev->pdev, 0);
 
        *map = ioremap(base + offset, size);
        if (!*map)
index 5eee666..8a40cd5 100644 (file)
@@ -790,7 +790,7 @@ static int mthca_setup_hca(struct mthca_dev *dev)
                goto err_uar_table_free;
        }
 
-       dev->kar = ioremap(dev->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE);
+       dev->kar = ioremap((phys_addr_t) dev->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE);
        if (!dev->kar) {
                mthca_err(dev, "Couldn't map kernel access region, "
                          "aborting.\n");
index 065b208..44045c8 100644 (file)
@@ -853,7 +853,7 @@ void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
 
 int mthca_init_mr_table(struct mthca_dev *dev)
 {
-       unsigned long addr;
+       phys_addr_t addr;
        int mpts, mtts, err, i;
 
        err = mthca_alloc_init(&dev->mr_table.mpt_alloc,