xpmem: truncates the size of xpmem_attach at the page boundary (workaround for fjmpi)
Fujitsu MPI tries to attach a segment with the size of the source range size plus one. Change-Id: Iab3801727f938dfb6242b6b90c88e4986b84d08e Refs: #1507
This commit is contained in:
committed by
Masamichi Takagi
parent
4d1d53b335
commit
63443383e9
@ -83,6 +83,23 @@ if(ENABLE_FUGAKU_HACKS)
|
|||||||
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DENABLE_FUGAKU_HACKS")
|
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DENABLE_FUGAKU_HACKS")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Fujitsu MPI tries to xpmem-attach segment with size of range size + 1?
|
||||||
|
set(FJMPI_VERSION_COMMAND "a=\$(which mpifcc); b=\${a%/*/*}; c=\${b##*/}; d=\${c#*-}; echo \$d")
|
||||||
|
execute_process(COMMAND bash -c "${FJMPI_VERSION_COMMAND}"
|
||||||
|
OUTPUT_VARIABLE FJMPI_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
message("FJMPI_VERSION: ${FJMPI_VERSION}")
|
||||||
|
|
||||||
|
if(NOT "${FJMPI_VERSION}" STREQUAL "")
|
||||||
|
option(ENABLE_FJMPI_WORKAROUND "Fujitsu MPI workaround" ON)
|
||||||
|
else()
|
||||||
|
option(ENABLE_FJMPI_WORKAROUND "Fujitsu MPI workaround" OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_FJMPI_WORKAROUND)
|
||||||
|
add_definitions(-DENABLE_FJMPI_WORKAROUND)
|
||||||
|
set(KBUILD_C_FLAGS "${KBUILD_C_FLAGS} -DENABLE_FJMPI_WORKAROUND")
|
||||||
|
endif()
|
||||||
|
|
||||||
# krm that mandates reserved memory amount >= available at boot time?
|
# krm that mandates reserved memory amount >= available at boot time?
|
||||||
execute_process(COMMAND bash -c "rpm -qi FJSVpxkrm-plugin-mckernel | awk '$1 == \"Version\" && $2 == \":\" { print $3 }'"
|
execute_process(COMMAND bash -c "rpm -qi FJSVpxkrm-plugin-mckernel | awk '$1 == \"Version\" && $2 == \":\" { print $3 }'"
|
||||||
OUTPUT_VARIABLE KRM_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_VARIABLE KRM_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
@ -315,6 +332,7 @@ message("ENABLE_TOFU: ${ENABLE_TOFU}")
|
|||||||
message("ENABLE_FUGAKU_HACKS: ${ENABLE_FUGAKU_HACKS}")
|
message("ENABLE_FUGAKU_HACKS: ${ENABLE_FUGAKU_HACKS}")
|
||||||
message("ENABLE_FUGAKU_DEBUG: ${ENABLE_FUGAKU_DEBUG}")
|
message("ENABLE_FUGAKU_DEBUG: ${ENABLE_FUGAKU_DEBUG}")
|
||||||
message("ENABLE_KRM_WORKAROUND: ${ENABLE_KRM_WORKAROUND}")
|
message("ENABLE_KRM_WORKAROUND: ${ENABLE_KRM_WORKAROUND}")
|
||||||
|
message("ENABLE_FJMPI_WORKAROUND: ${ENABLE_FJMPI_WORKAROUND}")
|
||||||
message("PROFILE_ENABLE: ${PROFILE_ENABLE}")
|
message("PROFILE_ENABLE: ${PROFILE_ENABLE}")
|
||||||
message("ENABLE_RUSAGE: ${ENABLE_RUSAGE}")
|
message("ENABLE_RUSAGE: ${ENABLE_RUSAGE}")
|
||||||
message("ENABLE_QLMPI: ${ENABLE_QLMPI}")
|
message("ENABLE_QLMPI: ${ENABLE_QLMPI}")
|
||||||
|
|||||||
@ -1027,10 +1027,19 @@ static int xpmem_attach(
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_FJMPI_WORKAROUND
|
||||||
|
/* Truncate size at page boundary because Fujitsu MPI
|
||||||
|
* erroneously passes (source range size + 1) as "size"
|
||||||
|
*/
|
||||||
|
size = (size & ~(PAGE_SIZE - 1));
|
||||||
|
#else
|
||||||
/* If the size is not page aligned, fix it */
|
/* If the size is not page aligned, fix it */
|
||||||
if (offset_in_page(size) != 0) {
|
if (offset_in_page(size) != 0) {
|
||||||
size += PAGE_SIZE - offset_in_page(size);
|
size += PAGE_SIZE - offset_in_page(size);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
XPMEM_DEBUG("size after fix: 0x%lx", size);
|
||||||
|
|
||||||
ap_tg = xpmem_tg_ref_by_apid(apid);
|
ap_tg = xpmem_tg_ref_by_apid(apid);
|
||||||
if (IS_ERR(ap_tg))
|
if (IS_ERR(ap_tg))
|
||||||
|
|||||||
Reference in New Issue
Block a user