Message ID | 1560105348-459129-2-git-send-email-andrey.shinkevich@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Allow Valgrind checking all QEMU processes | expand |
On 6/9/19 1:35 PM, Andrey Shinkevich wrote: > With the '-valgrind' option, let all the QEMU processes be run under > the Valgrind tool. The Valgrind own parameters may be set with its > environment variable VALGRIND_OPTS, e.g. > VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind <test#> Let's spell this --valgrind; long options should prefer the use of -- (as in getopt_long), whether or not we also have a reason to support -valgrind (as in getopt_long_only). Yes, qemu is an oddball in this regards, but no need to make it worse. > > Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> > --- > tests/qemu-iotests/common.rc | 65 ++++++++++++++++++++++++++++++++------------ > 1 file changed, 48 insertions(+), 17 deletions(-) > > diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc > index 93f8738..3caaca4 100644
On 10/06/2019 17:24, Eric Blake wrote: > On 6/9/19 1:35 PM, Andrey Shinkevich wrote: >> With the '-valgrind' option, let all the QEMU processes be run under >> the Valgrind tool. The Valgrind own parameters may be set with its >> environment variable VALGRIND_OPTS, e.g. >> VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind <test#> > > Let's spell this --valgrind; long options should prefer the use of -- > (as in getopt_long), whether or not we also have a reason to support > -valgrind (as in getopt_long_only). Yes, qemu is an oddball in this > regards, but no need to make it worse. > Thank you, Eric. That sounds good but the short option'-valgrind' is preexisting in QEMU. Should I create a new patch for the long option? If so, will we have both options supported by QEMU? Andrey >> >> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> >> --- >> tests/qemu-iotests/common.rc | 65 ++++++++++++++++++++++++++++++++------------ >> 1 file changed, 48 insertions(+), 17 deletions(-) >> >> diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc >> index 93f8738..3caaca4 100644 > >
On 6/10/19 10:02 AM, Andrey Shinkevich wrote: > > > On 10/06/2019 17:24, Eric Blake wrote: >> On 6/9/19 1:35 PM, Andrey Shinkevich wrote: >>> With the '-valgrind' option, let all the QEMU processes be run under >>> the Valgrind tool. The Valgrind own parameters may be set with its >>> environment variable VALGRIND_OPTS, e.g. >>> VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind <test#> >> >> Let's spell this --valgrind; long options should prefer the use of -- >> (as in getopt_long), whether or not we also have a reason to support >> -valgrind (as in getopt_long_only). Yes, qemu is an oddball in this >> regards, but no need to make it worse. >> > > Thank you, Eric. That sounds good but the short option'-valgrind' is > preexisting in QEMU. Should I create a new patch for the long option? > If so, will we have both options supported by QEMU? Oh, you're talking about qemu-iotests/check already supporting merely '-valgrind', not 'qemu-kvm' or '*/qemu-system-*'. ./check is already an oddball for not permitting double dash, but at this point, normalizing it is a lot of churn. So it becomes a tradeoff on how much grunt work do you really want to do.
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc index 93f8738..3caaca4 100644 --- a/tests/qemu-iotests/common.rc +++ b/tests/qemu-iotests/common.rc @@ -60,19 +60,52 @@ if ! . ./common.config exit 1 fi +_qemu_proc_wrapper() +{ + local VALGRIND_LOGFILE="$1" + shift + if [ "${VALGRIND_QEMU}" == "y" ]; then + exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$@" + else + exec "$@" + fi +} + +_qemu_proc_valgrind_log() +{ + local VALGRIND_LOGFILE="$1" + local RETVAL="$2" + if [ "${VALGRIND_QEMU}" == "y" ]; then + if [ $RETVAL == 99 ]; then + cat "${VALGRIND_LOGFILE}" + fi + rm -f "${VALGRIND_LOGFILE}" + fi +} + _qemu_wrapper() { + local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind ( if [ -n "${QEMU_NEED_PID}" ]; then echo $BASHPID > "${QEMU_TEST_DIR}/qemu-${_QEMU_HANDLE}.pid" fi - exec "$QEMU_PROG" $QEMU_OPTIONS "$@" + _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_PROG" $QEMU_OPTIONS "$@" ) + RETVAL=$? + _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL + return $RETVAL } _qemu_img_wrapper() { - (exec "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@") + local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind + ( + _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@" + ) + RETVAL=$? + _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL + return $RETVAL } _qemu_io_wrapper() @@ -85,38 +118,36 @@ _qemu_io_wrapper() QEMU_IO_ARGS="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IO_ARGS" fi fi - local RETVAL ( - if [ "${VALGRIND_QEMU}" == "y" ]; then - exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" - else - exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" - fi + _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" ) RETVAL=$? - if [ "${VALGRIND_QEMU}" == "y" ]; then - if [ $RETVAL == 99 ]; then - cat "${VALGRIND_LOGFILE}" - fi - rm -f "${VALGRIND_LOGFILE}" - fi - (exit $RETVAL) + _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL + return $RETVAL } _qemu_nbd_wrapper() { + local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind ( echo $BASHPID > "${QEMU_TEST_DIR}/qemu-nbd.pid" - exec "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS "$@" + _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS "$@" ) + RETVAL=$? + _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL + return $RETVAL } _qemu_vxhs_wrapper() { + local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind ( echo $BASHPID > "${TEST_DIR}/qemu-vxhs.pid" - exec "$QEMU_VXHS_PROG" $QEMU_VXHS_OPTIONS "$@" + _qemu_proc_wrapper "${VALGRIND_LOGFILE}" "$QEMU_VXHS_PROG" $QEMU_VXHS_OPTIONS "$@" ) + RETVAL=$? + _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL + return $RETVAL } export QEMU=_qemu_wrapper
With the '-valgrind' option, let all the QEMU processes be run under the Valgrind tool. The Valgrind own parameters may be set with its environment variable VALGRIND_OPTS, e.g. VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind <test#> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> --- tests/qemu-iotests/common.rc | 65 ++++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 17 deletions(-)