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