#!/usr/bin/bash run() { tid=05 ng=0 echo "*** C${issue}T${tid} start *******************************" echo "** xpmem testsuite" pushd @WITH_XPMEM_BUILD@/test test -e /tmp/xpmem.share && rm -f /tmp/xpmem.share test -e /tmp/xpmem.lock && rm -f /tmp/xpmem.lock # create TMP_SHARE_SIZE bytes defined in xpmem_test.h for i in `seq 0 31` ; do echo -n 0 >> /tmp/xpmem.share done echo 0 > /tmp/xpmem.lock # Run the main test app @WITH_MCK@/bin/mcexec $PWD/xpmem_master popd # xpmem basic test @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_001 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_002 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_003 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_004 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_005 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_006 sleep 3 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_007 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_008 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_009 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_010 @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_011 } SCRIPT_PATH=$(readlink -m "${BASH_SOURCE[0]}") SCRIPT_NAME="${SCRIPT_PATH##*/}" # prepare recorddir . @CMAKE_INSTALL_PREFIX@/bin/common.sh recorddir=$WORKDIR/output/$SCRIPT_NAME [[ ! -d $recorddir ]] && mkdir -p $recorddir recordfile=$WORKDIR/output/$SCRIPT_NAME.log # define patch function . @CMAKE_INSTALL_PREFIX@/bin/util.sh patch_and_build large_page ihk_kmsg_size || exit 1 # boot patched McKernel if [[ -e ${AUTOTEST_HOME}/bin/config.sh ]]; then ${AUTOTEST_HOME}/bin/boot.sh reboot else . @WITH_MCK_SRC@/test/common.sh fi sudo insmod @WITH_XPMEM@/lib/modules/`uname -r`/xpmem.ko sudo chmod og+rw /dev/xpmem sum_ng=0 issue=1259 tid=01 ng=0 echo "*** C${issue}T${tid} start *******************************" echo "** xpmem_attach to Huge mapped memory range" echo "** end of range is aligned with Large page size" for pgshift in $PGSHIFT_LIST; do ((pgshift == $PAGE_SHIFT)) && continue @WITH_MCK@/sbin/ihkosctl 0 clear_kmsg log_file=$recorddir/C${issue}T${tid}_${pgshift}.log echo pageshift: ${pgshift} @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/huge_page_xpmem ${pgshift} 2 0 > ${log_file} @WITH_MCK@/sbin/ihkosctl 0 kmsg >> ${log_file} EXPECT_PGSIZE=`grep EXPECT_PAGE_SIZE ${log_file} | awk '{ print $2; }'` SEG_ADDR=$(grep -o "anonymous_map_addr: [^ ]* " $log_file | awk '{ print $2; }') SEG_PGSIZE=`cat ${log_file} | awk '/OK/,/DONE/' | \ grep -o "large_page_allocation.*${SEG_ADDR}.*" | awk '{ print $5; }'` XPMEM_ADDR=`grep xpmem_attachment_addr ${log_file} | awk '{ print $NF; }'` XPMEM_PGSIZE=`grep -o "xpmem_page_attach.*${XPMEM_ADDR}.*" ${log_file} | awk '{ print $NF; }'` if [ "${SEG_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then echo "** [ OK ] seg_addr ($SEG_ADDR) is allocated before xpmem_attach" else echo "** [ NG ] seg_addr ($SEG_ADDR) is not allocated before xpmem_attach" let ng++ fi if [ "${XPMEM_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then echo "** [ OK ] xpmem_addr ($XPMEM_ADDR) is allocated using large pages" else echo "** [ NG ] xpmem_addr ($XPMEM_ADDR) is NOT allocated using large pages" let ng++ fi done ((sum_ng += ng)) if [ ${ng} -eq 0 ]; then echo "*** C${issue}T${tid}: PASSED" else echo "*** C${issue}T${tid}: FAILED" fi echo "" tid=02 ng=0 echo "*** C${issue}T${tid} start *******************************" echo "** xpmem_attach to Huge mapped memory range" echo "** end of range is NOT aligned with Large page size" for pgshift in $PGSHIFT_LIST; do ((pgshift == $PAGE_SHIFT)) && continue @WITH_MCK@/sbin/ihkosctl 0 clear_kmsg log_file=$recorddir/C${issue}T${tid}_${pgshift}.log echo pageshift: ${pgshift} @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/huge_page_xpmem ${pgshift} 2 $PAGE_SIZE > ${log_file} @WITH_MCK@/sbin/ihkosctl 0 kmsg >> ${log_file} EXPECT_PGSIZE=`grep EXPECT_PAGE_SIZE ${log_file} | awk '{ print $2; }'` SEG_ADDR=$(grep -o "anonymous_map_addr: [^ ]* " $log_file | awk '{ print $2; }') SEG_PGSIZE=`cat ${log_file} | awk '/OK/,/DONE/' | \ grep -o "large_page_allocation.*${SEG_ADDR}.*" | awk '{ print $5; }'` XPMEM_ADDR=`grep xpmem_attachment_addr ${log_file} | awk '{ print $NF; }'` XPMEM_PGSIZE=`grep -o "xpmem_page_attach.*${XPMEM_ADDR}.*" ${log_file} | awk '{ print $NF; }'` if [ "${SEG_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then printf "** [ OK ] " else printf "** [ NG ] " let ng++ fi echo "size of 1st page of segment at ${SEG_ADDR}: ${SEG_PGSIZE}, expected: ${EXPECT_PGSIZE}" if [ "${XPMEM_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then printf "** [ OK ] " else printf "** [ NG ] " let ng++ fi echo "size of 1st page of attachment at ${XPMEM_ADDR}: ${XPMEM_PGSIZE}, expected: ${EXPECT_PGSIZE}" done ((sum_ng += ng)) if [ ${ng} -eq 0 ]; then echo "*** C${issue}T${tid}: PASSED" else echo "*** C${issue}T${tid}: FAILED" fi echo "" tid=03 ng=0 echo "*** C${issue}T${tid} start *******************************" echo "** xpmem_attach to small mapped memory range" @WITH_MCK@/sbin/ihkosctl 0 clear_kmsg log_file=$recorddir/C${issue}T${tid}.log echo pageshift: small page @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/huge_page_xpmem -1 2 0 > ${log_file} @WITH_MCK@/sbin/ihkosctl 0 kmsg >> ${log_file} EXPECT_PGSIZE=`grep EXPECT_PAGE_SIZE ${log_file} | awk '{ print $2; }'` XPMEM_ADDR=`grep xpmem_attachment_addr ${log_file} | awk '{ print $NF; }'` XPMEM_PGSIZE=`grep -o "xpmem_page_attach.*${XPMEM_ADDR}.*" ${log_file} | awk '{ print $NF; }'` if [ "${XPMEM_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then echo "** [ OK ] xpmem_addr ($XPMEM_ADDR) is allocated using small pages" else echo "** [ NG ] xpmem_addr ($XPMEM_ADDR) is NOT allocated using small pages" ((ng++)) fi ((sum_ng += ng)) if [ ${ng} -eq 0 ]; then echo "*** C${issue}T${tid}: PASSED" else echo "*** C${issue}T${tid}: FAILED" fi echo "" tid=04 ng=0 echo "*** C${issue}T${tid} start *******************************" echo "** xpmem_attach to multi pagesize range" pgshift=$(echo $PGSHIFT_LIST | awk '{print $2}') @WITH_MCK@/sbin/ihkosctl 0 clear_kmsg log_file=$recorddir/C${issue}T${tid}_${pgshift}.log echo pageshift: ${pgshift} @WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/multi_vmr_xpmem ${pgshift} 1 | tee ${log_file} @WITH_MCK@/sbin/ihkosctl 0 kmsg >> ${log_file} EXPECT_PGSIZE=`grep EXPECT_PAGE_SIZE ${log_file} | awk '{ print $2; }'` XPMEM_ADDR=`grep xpmem_large ${log_file} | awk '{ print $NF; }'` XPMEM_PGSIZE=`grep -o "xpmem_page_attach.*${XPMEM_ADDR}.*" ${log_file} | awk '{ print $NF; }'` if [ "${XPMEM_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then echo "** [ OK ] xpmem_addr ($XPMEM_ADDR) is allocated using large pages" else echo "** [ NG ] xpmem_addr ($XPMEM_ADDR) is NOT allocated using large pages" let ng++ fi ((sum_ng += ng)) if [ ${ng} -eq 0 ]; then echo "*** C${issue}T${tid}: PASSED" else echo "*** C${issue}T${tid}: FAILED" fi echo "" run 2>&1 | tee $recordfile grep -E '(FAIL| NG )' $recordfile && ((sum_ng++)) sudo rmmod xpmem.ko exit $sum_ng