: Powerpc: Fix EHCA driver on relocatable kernel
PATCH 2/2 : Powerpc: Fix EHCA driver on relocatable kernel
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.
drivers/infiniband/hw/ehca/ehca_mrmw.c +3 -3
@@ -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
A message that is not in the archive (sent off-list or not yet received): 20100820041019.GT16505-r/[email protected]
Quoted 7 lines · Sonny Rao
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_STARTto get the true beginning of usable kernel memory.This patch depends on the earlier patch which exports the necessary symbol for
PHYSICAL_STARTin 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.
Quoted 37 lines
cc Joachim Fenkes <[email protected]>cc Christoph Raisch <[email protected]>cc Hoan-Ham Hguyen <[email protected]>Signed-off-by Sonny Rao <sonnyrao-r/[email protected]>Index:
linux-2.6/drivers/infiniband/hw/ehca/ehca_mrmw.c
===================================================================drivers/infiniband/hw/ehca/ehca_mrmw.c +3
-3@@ -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
Quoted 4 lines
_______________________________________________
Linuxppc-dev mailing list Linuxppc-dev-uLR06cmDAlY/[email protected]
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 [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
thanks, applied.
--
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