diff options
author | Alexander Schmidt <alexs@linux.vnet.ibm.com> | 2010-07-05 20:19:25 +0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2010-07-21 23:46:29 +0400 |
commit | e675b6db1245649f91bb1bfb10baef9af6d3f8e6 (patch) | |
tree | 83a471d78fb6b118aedd269f8eb5ac0b9b8b9336 /drivers/infiniband/hw/ehca/hcp_phyp.c | |
parent | 91fb0dd9cb71ab1a90ab1f48c34b935fdbca55b9 (diff) | |
download | linux-e675b6db1245649f91bb1bfb10baef9af6d3f8e6.tar.xz |
IB/ehca: Catch failing ioremap()
When ioremap() fails with a NULL pointer, catch the error and pass it
to the caller of create_qp() or create_cq() instead of trying to
dereference the NULL pointer later on.
Signed-off-by: Alexander Schmidt <alexs@linux.vnet.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/ehca/hcp_phyp.c')
-rw-r--r-- | drivers/infiniband/hw/ehca/hcp_phyp.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/infiniband/hw/ehca/hcp_phyp.c b/drivers/infiniband/hw/ehca/hcp_phyp.c index b3e0e72e8a73..077376ff3d28 100644 --- a/drivers/infiniband/hw/ehca/hcp_phyp.c +++ b/drivers/infiniband/hw/ehca/hcp_phyp.c @@ -42,10 +42,9 @@ #include "ehca_classes.h" #include "hipz_hw.h" -int hcall_map_page(u64 physaddr, u64 *mapaddr) +u64 hcall_map_page(u64 physaddr) { - *mapaddr = (u64)(ioremap(physaddr, EHCA_PAGESIZE)); - return 0; + return (u64)ioremap(physaddr, EHCA_PAGESIZE); } int hcall_unmap_page(u64 mapaddr) @@ -58,9 +57,9 @@ int hcp_galpas_ctor(struct h_galpas *galpas, int is_user, u64 paddr_kernel, u64 paddr_user) { if (!is_user) { - int ret = hcall_map_page(paddr_kernel, &galpas->kernel.fw_handle); - if (ret) - return ret; + galpas->kernel.fw_handle = hcall_map_page(paddr_kernel); + if (!galpas->kernel.fw_handle) + return -ENOMEM; } else galpas->kernel.fw_handle = 0; |