Add a NVMe test group and a tracepoint test as the first test case. Signed-off-by: Johannes Thumshirn <jthumshirn@xxxxxxx> --- common/nvme | 28 +++++++++++++++++++++++ tests/nvme/001 | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/nvme/001.out | 12 ++++++++++ tests/nvme/group | 28 +++++++++++++++++++++++ 4 files changed, 134 insertions(+) create mode 100644 common/nvme create mode 100755 tests/nvme/001 create mode 100644 tests/nvme/001.out create mode 100644 tests/nvme/group diff --git a/common/nvme b/common/nvme new file mode 100644 index 000000000000..ec3986f43e21 --- /dev/null +++ b/common/nvme @@ -0,0 +1,28 @@ +#!/bin/bash +# +# Default helper functions for NVMe devices. +# +# Copyright (C) 2018 Johannes Thumshirn +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +shopt -s extglob + +_test_dev_is_nvme() { + if ! readlink -f "$TEST_DEV_SYSFS/device" | grep -q nvme; then + SKIP_REASON="$TEST_DEV is not a NVMe device" + return 1 + fi + return 0 +} diff --git a/tests/nvme/001 b/tests/nvme/001 new file mode 100755 index 000000000000..ff4a9047c884 --- /dev/null +++ b/tests/nvme/001 @@ -0,0 +1,66 @@ +#!/bin/bash +# +# Regression test for commit 3d030e41d96f ("nvme: add tracepoint for +# nvme_setup_cmd") +# +# Copyright (C) 2018 Johannes Thumshirn +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +DESCRIPTION="enable nvme_setup_nvm_cmd trace point and submit I/O to the +device" + +QUICK=1 + +# This function normalizes the variable parts of the trace on the individual +# test system so the known good result in test/nvme/001.out matches if all is +# OK. +# If anyone finds a readable way of definig this filter I'm all ears. +filter_trace() { + sed -r "s/dd-[0-9]+\s+\[[0-9]+\]\s+\.{4}\s+[0-9]+\.[0-9]+: nvme_setup_nvm_cmd:\s+qid=[0-9]+, nsid=[0-9]+, cmdid=[0-9]+, flags=0x0, meta=0x0, cmd=\(nvme_cmd_read slba=0, len=31, ctrl=0x0, dsmgmt=0, reftag=0\)/dd-XXX [XXX] .... X.XXXXXX: nvme_setup_nvm_cmd: qid=X, nsid=X, cmdid=X, flags=0x0, meta=0x0, cmd=(nvme_cmd_read slba=0, len=31, ctrl=0x0, dsmgmt=0, reftag=0)/" +} + +test_device() { + echo "Running ${TEST_NAME}" + cleanup_debugfs=0 + cleanup_tracefs=0 + + if ! grep -q debugfs /proc/mounts; then + mount -t debugfs none /sys/kernel/debug + cleanup_debugfs=1 + fi + + if ! grep -q tracefs /proc/mounts; then + mount -t tracefs none /sys/kernel/debug/tracing + cleanup_tracefs=1 + fi + + echo 1 > /sys/kernel/debug/tracing/events/nvme/nvme_setup_nvm_cmd/enable + + dd if=${TEST_DEV} of=/dev/null bs=512 count=1 >>$FULL 2> /dev/null + + cat /sys/kernel/debug/tracing/trace | filter_trace + + echo 0 > /sys/kernel/debug/tracing/events/nvme/nvme_setup_nvm_cmd/enable + + if [[ $cleanup_tracefs == 1 ]]; then + umount /sys/kernel/debug/tracing + fi + + if [[ $cleanup_debugfs == 1 ]]; then + umount /sys/kernel/debug + fi + + echo "Test complete" +} diff --git a/tests/nvme/001.out b/tests/nvme/001.out new file mode 100644 index 000000000000..bca1d0fc27b1 --- /dev/null +++ b/tests/nvme/001.out @@ -0,0 +1,12 @@ +Running nvme/001 +# tracer: nop +# +# _-----=> irqs-off +# / _----=> need-resched +# | / _---=> hardirq/softirq +# || / _--=> preempt-depth +# ||| / delay +# TASK-PID CPU# |||| TIMESTAMP FUNCTION +# | | | |||| | | + dd-XXX [XXX] .... X.XXXXXX: nvme_setup_nvm_cmd: qid=X, nsid=X, cmdid=X, flags=0x0, meta=0x0, cmd=(nvme_cmd_read slba=0, len=31, ctrl=0x0, dsmgmt=0, reftag=0) +Test complete diff --git a/tests/nvme/group b/tests/nvme/group new file mode 100644 index 000000000000..5e4e65c922c7 --- /dev/null +++ b/tests/nvme/group @@ -0,0 +1,28 @@ +#!/bin/bash +# +# Test specific to NVMe devices +# +# Copyright (C) 2018 Johannes Thumshirn +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. common/nvme + +group_requires() { + _have_root +} + +group_device_requires() { + _test_dev_is_nvme +} -- 2.13.6