Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: ublk: add test for checking zero copy related parameter

ublk zero copy usually requires to set dma and segment parameter correctly,
so hard-code null target's dma & segment parameter in non-default value,
and verify if they are setup correctly by ublk driver.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250327095123.179113-12-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Ming Lei and committed by
Jens Axboe
c78ae7b7 8c778614

+39 -1
+1
tools/testing/selftests/ublk/Makefile
··· 5 5 6 6 TEST_PROGS := test_generic_01.sh 7 7 TEST_PROGS += test_generic_02.sh 8 + TEST_PROGS += test_generic_03.sh 8 9 9 10 TEST_PROGS += test_null_01.sh 10 11 TEST_PROGS += test_null_02.sh
+10 -1
tools/testing/selftests/ublk/null.c
··· 17 17 18 18 dev->tgt.dev_size = dev_size; 19 19 dev->tgt.params = (struct ublk_params) { 20 - .types = UBLK_PARAM_TYPE_BASIC, 20 + .types = UBLK_PARAM_TYPE_BASIC | UBLK_PARAM_TYPE_DMA_ALIGN | 21 + UBLK_PARAM_TYPE_SEGMENT, 21 22 .basic = { 22 23 .logical_bs_shift = 9, 23 24 .physical_bs_shift = 12, ··· 26 25 .io_min_shift = 9, 27 26 .max_sectors = info->max_io_buf_bytes >> 9, 28 27 .dev_sectors = dev_size >> 9, 28 + }, 29 + .dma = { 30 + .alignment = 4095, 31 + }, 32 + .seg = { 33 + .seg_boundary_mask = 4095, 34 + .max_segment_size = 32 << 10, 35 + .max_segments = 32, 29 36 }, 30 37 }; 31 38
+28
tools/testing/selftests/ublk/test_generic_03.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + . "$(cd "$(dirname "$0")" && pwd)"/test_common.sh 5 + 6 + TID="generic_03" 7 + ERR_CODE=0 8 + 9 + _prep_test "null" "check dma & segment limits for zero copy" 10 + 11 + dev_id=$(_add_ublk_dev -t null -z) 12 + _check_add_dev $TID $? 13 + 14 + sysfs_path=/sys/block/ublkb"${dev_id}" 15 + dma_align=$(cat "$sysfs_path"/queue/dma_alignment) 16 + max_segments=$(cat "$sysfs_path"/queue/max_segments) 17 + max_segment_size=$(cat "$sysfs_path"/queue/max_segment_size) 18 + if [ "$dma_align" != "4095" ]; then 19 + ERR_CODE=255 20 + fi 21 + if [ "$max_segments" != "32" ]; then 22 + ERR_CODE=255 23 + fi 24 + if [ "$max_segment_size" != "32768" ]; then 25 + ERR_CODE=255 26 + fi 27 + _cleanup_test "null" 28 + _show_result $TID $ERR_CODE