On Thu, 2010-08-19 at 23:10 -0500, Sonny Rao wrote:
> 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.

I'm going to send patch 1/2 to Linus today or tomorrow, so this patch
can then be picked up by the infiniband maintainers.

Cheers,
Ben.
 
> cc: Joachim Fenkes <fen...@de.ibm.com>
> cc: Christoph Raisch <rai...@de.ibm.com>
> cc: Hoan-Ham Hguyen <hngu...@de.ibm.com>
> Signed-off-by: Sonny Rao <sonny...@us.ibm.com>
> 
> 
> 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
> _______________________________________________
> Linuxppc-dev mailing list
> linuxppc-...@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev


--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to