Hello Shuah, thanks for the feedback, I will send v2 for these. Cheers On Sat, Jun 24, 2017 at 12:03 AM, Shuah Khan <shuah@xxxxxxxxxx> wrote: > Hi Po-Hsu Lin, > > On 06/18/2017 09:04 PM, Po-Hsu Lin wrote: > > Please split the typo correction and fixes. Please send a patch > for each individual fix. I am seeing several fixes bundled in this > one single patch. > >> Typo correction for hotpluggable_offline_memory() function> Check for hot-pluggable memory availability in prerequisite(). >> Check for precentage range for -r flag> >> Fix the memory offline test, the $ratio was used with RANDOM as the >> possibility to get it offlined, correct it to become the portion of >> available removable memory blocks. >> Also ask the tool to try to offline the next available memory block >> if the attempt is unsuccessful. It will only fail if all removable >> memory blocks are busy. >> >> An nice example: >> PHLin@Latitude:~$ sudo ./test.sh > > Remove the user info from this output. Same comment for the rest if > this output. > >> Test scope: 10% hotplug memory >> online all hot-pluggable memory in offline state: >> SKIPPED - no hot-pluggable memory in offline state >> offline 10% hot-pluggable memory in online state >> trying to offline 3 out of 28 memory block(s): >> online->offline memory1 >> online->offline memory10 >> ./test.sh: line 74: echo: write error: Resource temporarily unavailable >> offline_memory_expect_success 10: unexpected fail >> online->offline memory100 >> online->offline memory101 >> online all hot-pluggable memory in offline state: >> offline->online memory1 >> offline->online memory100 >> offline->online memory101 >> skip extra tests: debugfs is not mounted >> PHLin@Latitude:~$ echo $? >> 0 >> >> Signed-off-by: Po-Hsu Lin <po-hsu.lin@xxxxxxxxxxxxx> > > thanks, > -- Shuah > >> --- >> .../selftests/memory-hotplug/mem-on-off-test.sh | 86 +++++++++++++++----- >> 1 file changed, 67 insertions(+), 19 deletions(-) >> >> diff --git a/tools/testing/selftests/memory-hotplug/mem-on-off-test.sh b/tools/testing/selftests/memory-hotplug/mem-on-off-test.sh >> index 6cddde0..f1603e6 100755 >> --- a/tools/testing/selftests/memory-hotplug/mem-on-off-test.sh >> +++ b/tools/testing/selftests/memory-hotplug/mem-on-off-test.sh >> @@ -22,6 +22,11 @@ prerequisite() >> echo $msg memory hotplug is not supported >&2 >> exit 0 >> fi >> + >> + if ! grep -q 1 $SYSFS/devices/system/memory/memory*/removable; then >> + echo $msg no hot-pluggable memory >&2 >> + exit 0 >> + fi >> } >> >> # >> @@ -39,7 +44,7 @@ hotpluggable_memory() >> done >> } >> >> -hotplaggable_offline_memory() >> +hotpluggable_offline_memory() >> { >> hotpluggable_memory offline >> } >> @@ -75,9 +80,12 @@ online_memory_expect_success() >> >> if ! online_memory $memory; then >> echo $FUNCNAME $memory: unexpected fail >&2 >> + return 1 >> elif ! memory_is_online $memory; then >> echo $FUNCNAME $memory: unexpected offline >&2 >> + return 1 >> fi >> + return 0 >> } >> >> online_memory_expect_fail() >> @@ -86,9 +94,12 @@ online_memory_expect_fail() >> >> if online_memory $memory 2> /dev/null; then >> echo $FUNCNAME $memory: unexpected success >&2 >> + return 1 >> elif ! memory_is_offline $memory; then >> echo $FUNCNAME $memory: unexpected online >&2 >> + return 1 >> fi >> + return 0 >> } >> >> offline_memory_expect_success() >> @@ -97,9 +108,12 @@ offline_memory_expect_success() >> >> if ! offline_memory $memory; then >> echo $FUNCNAME $memory: unexpected fail >&2 >> + return 1 >> elif ! memory_is_offline $memory; then >> echo $FUNCNAME $memory: unexpected offline >&2 >> + return 1 >> fi >> + return 0 >> } >> >> offline_memory_expect_fail() >> @@ -108,14 +122,18 @@ offline_memory_expect_fail() >> >> if offline_memory $memory 2> /dev/null; then >> echo $FUNCNAME $memory: unexpected success >&2 >> + return 1 >> elif ! memory_is_online $memory; then >> echo $FUNCNAME $memory: unexpected offline >&2 >> + return 1 >> fi >> + return 0 >> } >> >> error=-12 >> priority=0 >> ratio=10 >> +retval=0 >> >> while getopts e:hp:r: opt; do >> case $opt in >> @@ -131,6 +149,10 @@ while getopts e:hp:r: opt; do >> ;; >> r) >> ratio=$OPTARG >> + if [ "$ratio" -gt 100 ] || [ "$ratio" -lt 0 ]; then >> + echo "The percentage should be an integer within 0~100 range" >> + exit >> + fi >> ;; >> esac >> done >> @@ -143,35 +165,58 @@ fi >> prerequisite >> >> echo "Test scope: $ratio% hotplug memory" >> -echo -e "\t online all hotplug memory in offline state" >> -echo -e "\t offline $ratio% hotplug memory in online state" >> -echo -e "\t online all hotplug memory in offline state" >> >> # >> # Online all hot-pluggable memory >> # >> -for memory in `hotplaggable_offline_memory`; do >> - echo offline-online $memory >> - online_memory_expect_success $memory >> -done >> +hotpluggable_num=`hotpluggable_offline_memory | wc -l` >> +echo -e "\t online all hot-pluggable memory in offline state:" >> +if [ "$hotpluggable_num" -gt 0 ]; then >> + for memory in `hotpluggable_offline_memory`; do >> + echo "offline->online memory$memory" >> + if ! online_memory_expect_success $memory; then >> + retval=1 >> + fi >> + done >> +else >> + echo -e "\t\t SKIPPED - no hot-pluggable memory in offline state" >> +fi >> >> # >> # Offline $ratio percent of hot-pluggable memory >> # >> +hotpluggable_num=`hotpluggable_online_memory | wc -l` >> +target=`echo "a=$hotpluggable_num*$ratio; if ( a%100 ) a/100+1 else a/100" | bc` >> +echo -e "\t offline $ratio% hot-pluggable memory in online state" >> +echo -e "\t trying to offline $target out of $hotpluggable_num memory block(s):" >> for memory in `hotpluggable_online_memory`; do >> - if [ $((RANDOM % 100)) -lt $ratio ]; then >> - echo online-offline $memory >> - offline_memory_expect_success $memory >> + if [ "$target" -gt 0 ]; then >> + echo "online->offline memory$memory" >> + if offline_memory_expect_success $memory; then >> + target=$(($target - 1)) >> + fi >> fi >> done >> +if [ "$target" -gt 0 ]; then >> + retval=1 >> + echo -e "\t\t FAILED - unable to offline some memory blocks, device busy?" >> +fi >> >> # >> # Online all hot-pluggable memory again >> # >> -for memory in `hotplaggable_offline_memory`; do >> - echo offline-online $memory >> - online_memory_expect_success $memory >> -done >> +hotpluggable_num=`hotpluggable_offline_memory | wc -l` >> +echo -e "\t online all hot-pluggable memory in offline state:" >> +if [ "$hotpluggable_num" -gt 0 ]; then >> + for memory in `hotpluggable_offline_memory`; do >> + echo "offline->online memory$memory" >> + if ! online_memory_expect_success $memory; then >> + retval=1 >> + fi >> + done >> +else >> + echo -e "\t\t SKIPPED - no hot-pluggable memory in offline state" >> +fi >> >> # >> # Test with memory notifier error injection >> @@ -189,15 +234,16 @@ prerequisite_extra() >> >> if [ ! -d "$DEBUGFS" ]; then >> echo $msg debugfs is not mounted >&2 >> - exit 0 >> + exit $((0+$retval)) >> fi >> >> if [ ! -d $NOTIFIER_ERR_INJECT_DIR ]; then >> echo $msg memory-notifier-error-inject module is not available >&2 >> - exit 0 >> + exit $((0+$retval)) >> fi >> } >> >> +echo -e "\t Test with memory notifier error injection" >> prerequisite_extra >> >> # >> @@ -214,7 +260,7 @@ done >> # Test memory hot-add error handling (offline => online) >> # >> echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_ONLINE/error >> -for memory in `hotplaggable_offline_memory`; do >> +for memory in `hotpluggable_offline_memory`; do >> online_memory_expect_fail $memory >> done >> >> @@ -222,7 +268,7 @@ done >> # Online all hot-pluggable memory >> # >> echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_ONLINE/error >> -for memory in `hotplaggable_offline_memory`; do >> +for memory in `hotpluggable_offline_memory`; do >> online_memory_expect_success $memory >> done >> >> @@ -236,3 +282,5 @@ done >> >> echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_OFFLINE/error >> /sbin/modprobe -q -r memory-notifier-error-inject >> + >> +exit $retval >> > -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html