mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 17:24:17 +08:00
IB/mthca: Fix driver when sizeof (phys_addr_t) > sizeof (long)
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>
This commit is contained in:
parent
4162cf6497
commit
eb4a7cbf27
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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");
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user