aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/ehca/hcp_phyp.c
diff options
context:
space:
mode:
authorAlexander Schmidt <alexs@linux.vnet.ibm.com>2010-07-05 12:19:25 -0400
committerRoland Dreier <rolandd@cisco.com>2010-07-21 15:46:29 -0400
commite675b6db1245649f91bb1bfb10baef9af6d3f8e6 (patch)
tree83a471d78fb6b118aedd269f8eb5ac0b9b8b9336 /drivers/infiniband/hw/ehca/hcp_phyp.c
parent91fb0dd9cb71ab1a90ab1f48c34b935fdbca55b9 (diff)
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.c11
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 b3e0e72e8a7..077376ff3d2 100644
--- a/drivers/infiniband/hw/ehca/hcp_phyp.c
+++ b/drivers/infiniband/hw/ehca/hcp_phyp.c
@@ -42,10 +42,9 @@
42#include "ehca_classes.h" 42#include "ehca_classes.h"
43#include "hipz_hw.h" 43#include "hipz_hw.h"
44 44
45int hcall_map_page(u64 physaddr, u64 *mapaddr) 45u64 hcall_map_page(u64 physaddr)
46{ 46{
47 *mapaddr = (u64)(ioremap(physaddr, EHCA_PAGESIZE)); 47 return (u64)ioremap(physaddr, EHCA_PAGESIZE);
48 return 0;
49} 48}
50 49
51int hcall_unmap_page(u64 mapaddr) 50int hcall_unmap_page(u64 mapaddr)
@@ -58,9 +57,9 @@ int hcp_galpas_ctor(struct h_galpas *galpas, int is_user,
58 u64 paddr_kernel, u64 paddr_user) 57 u64 paddr_kernel, u64 paddr_user)
59{ 58{
60 if (!is_user) { 59 if (!is_user) {
61 int ret = hcall_map_page(paddr_kernel, &galpas->kernel.fw_handle); 60 galpas->kernel.fw_handle = hcall_map_page(paddr_kernel);
62 if (ret) 61 if (!galpas->kernel.fw_handle)
63 return ret; 62 return -ENOMEM;
64 } else 63 } else
65 galpas->kernel.fw_handle = 0; 64 galpas->kernel.fw_handle = 0;
66 65