the eHCA driver registers a MR for all of kernel memory, but makes the
assumption that valid memory exists at KERNELBASE.  This assumption
may not be true in the case of a relocatable kernel, so use KERNELBASE
+ PHYSICAL_START to get the true beginning of usable kernel memory.

This patch depends on the earlier patch which exports the necessary
symbol for PHYSICAL_START in a relocatable kernel.

cc: Joachim Fenkes <[email protected]>
cc: Christoph Raisch <[email protected]>
cc: Hoan-Ham Hguyen <[email protected]>
Signed-off-by: Sonny Rao <[email protected]>


Index: linux-2.6/drivers/infiniband/hw/ehca/ehca_mrmw.c
===================================================================
--- linux-2.6.orig/drivers/infiniband/hw/ehca/ehca_mrmw.c       2010-08-09 
22:16:57.688652613 -0500
+++ linux-2.6/drivers/infiniband/hw/ehca/ehca_mrmw.c    2010-08-19 
22:53:03.451507146 -0500
@@ -171,7 +171,7 @@
                }
 
                ret = ehca_reg_maxmr(shca, e_maxmr,
-                                    (void *)ehca_map_vaddr((void *)KERNELBASE),
+                                    (void *)ehca_map_vaddr((void *)(KERNELBASE 
+ PHYSICAL_START)),
                                     mr_access_flags, e_pd,
                                     &e_maxmr->ib.ib_mr.lkey,
                                     &e_maxmr->ib.ib_mr.rkey);
@@ -1636,7 +1636,7 @@
 
        /* register internal max-MR on HCA */
        size_maxmr = ehca_mr_len;
-       iova_start = (u64 *)ehca_map_vaddr((void *)KERNELBASE);
+       iova_start = (u64 *)ehca_map_vaddr((void *)(KERNELBASE + 
PHYSICAL_START));
        ib_pbuf.addr = 0;
        ib_pbuf.size = size_maxmr;
        num_kpages = NUM_CHUNKS(((u64)iova_start % PAGE_SIZE) + size_maxmr,
@@ -2209,7 +2209,7 @@
 {
        /* a MR is treated as max-MR only if it fits following: */
        if ((size == ehca_mr_len) &&
-           (iova_start == (void *)ehca_map_vaddr((void *)KERNELBASE))) {
+           (iova_start == (void *)ehca_map_vaddr((void *)(KERNELBASE + 
PHYSICAL_START)))) {
                ehca_gen_dbg("this is a max-MR");
                return 1;
        } else
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to