xref: /openbmc/qemu/tests/qemu-iotests/033 (revision 13a1d4a71bdbc0968886ed656dee0e35dfaaf906)
1ee3a315eSPaolo Bonzini#!/bin/bash
2ee3a315eSPaolo Bonzini#
3ee3a315eSPaolo Bonzini# Test aligned and misaligned write zeroes operations.
4ee3a315eSPaolo Bonzini#
5ee3a315eSPaolo Bonzini# Copyright (C) 2012 Red Hat, Inc.
6ee3a315eSPaolo Bonzini#
7ee3a315eSPaolo Bonzini# This program is free software; you can redistribute it and/or modify
8ee3a315eSPaolo Bonzini# it under the terms of the GNU General Public License as published by
9ee3a315eSPaolo Bonzini# the Free Software Foundation; either version 2 of the License, or
10ee3a315eSPaolo Bonzini# (at your option) any later version.
11ee3a315eSPaolo Bonzini#
12ee3a315eSPaolo Bonzini# This program is distributed in the hope that it will be useful,
13ee3a315eSPaolo Bonzini# but WITHOUT ANY WARRANTY; without even the implied warranty of
14ee3a315eSPaolo Bonzini# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15ee3a315eSPaolo Bonzini# GNU General Public License for more details.
16ee3a315eSPaolo Bonzini#
17ee3a315eSPaolo Bonzini# You should have received a copy of the GNU General Public License
18ee3a315eSPaolo Bonzini# along with this program.  If not, see <http://www.gnu.org/licenses/>.
19ee3a315eSPaolo Bonzini#
20ee3a315eSPaolo Bonzini
21ee3a315eSPaolo Bonzini# creator
22ee3a315eSPaolo Bonziniowner=pbonzini@redhat.com
23ee3a315eSPaolo Bonzini
24ee3a315eSPaolo Bonziniseq=`basename $0`
25ee3a315eSPaolo Bonziniecho "QA output created by $seq"
26ee3a315eSPaolo Bonzini
27ee3a315eSPaolo Bonzinihere=`pwd`
28ee3a315eSPaolo Bonzinistatus=1	# failure is the default!
29ee3a315eSPaolo Bonzini
30ee3a315eSPaolo Bonzini_cleanup()
31ee3a315eSPaolo Bonzini{
32ee3a315eSPaolo Bonzini	_cleanup_test_img
33ee3a315eSPaolo Bonzini}
34ee3a315eSPaolo Bonzinitrap "_cleanup; exit \$status" 0 1 2 3 15
35ee3a315eSPaolo Bonzini
36ee3a315eSPaolo Bonzini# get standard environment, filters and checks
37ee3a315eSPaolo Bonzini. ./common.rc
38ee3a315eSPaolo Bonzini. ./common.filter
39ee3a315eSPaolo Bonzini
40ee3a315eSPaolo Bonzini_supported_fmt generic
41ee3a315eSPaolo Bonzini_supported_proto generic
42ee3a315eSPaolo Bonzini_supported_os Linux
43ee3a315eSPaolo Bonzini
44ee3a315eSPaolo Bonzini
45ee3a315eSPaolo Bonzinisize=128M
46ee3a315eSPaolo Bonzini_make_test_img $size
47ee3a315eSPaolo Bonzini
4861815d6eSFam Zhengdo_test()
4961815d6eSFam Zheng{
5061815d6eSFam Zheng	local align=$1
5161815d6eSFam Zheng	local iocmd=$2
5261815d6eSFam Zheng	local img=$3
53*13a1d4a7SDaniel P. Berrange	if [ "$IMGOPTSSYNTAX" = "true" ]
54*13a1d4a7SDaniel P. Berrange	then
55*13a1d4a7SDaniel P. Berrange	    IO_OPEN_ARG="$img"
56*13a1d4a7SDaniel P. Berrange	    IO_EXTRA_ARGS="--image-opts"
57*13a1d4a7SDaniel P. Berrange	else
58*13a1d4a7SDaniel P. Berrange	    IO_OPEN_ARG="-o driver=$IMGFMT,file.align=$align blkdebug::$img"
59*13a1d4a7SDaniel P. Berrange	    IO_EXTRA_ARGS=""
60*13a1d4a7SDaniel P. Berrange	fi
6161815d6eSFam Zheng	{
62*13a1d4a7SDaniel P. Berrange		echo "open $IO_OPEN_ARG"
6361815d6eSFam Zheng		echo $iocmd
64*13a1d4a7SDaniel P. Berrange	} | $QEMU_IO $IO_EXTRA_ARGS
6561815d6eSFam Zheng}
6661815d6eSFam Zheng
677fa84cd8SKevin Wolffor write_zero_cmd in "write -z" "aio_write -z"; do
6861815d6eSFam Zhengfor align in 512 4k; do
69ee3a315eSPaolo Bonzini	echo
70ee3a315eSPaolo Bonzini	echo "== preparing image =="
7161815d6eSFam Zheng	do_test $align "write -P 0xa 0x200 0x400" "$TEST_IMG" | _filter_qemu_io
7261815d6eSFam Zheng	do_test $align "write -P 0xa 0x20000 0x600" "$TEST_IMG" | _filter_qemu_io
737fa84cd8SKevin Wolf	do_test $align "$write_zero_cmd 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io
74ee3a315eSPaolo Bonzini
75ee3a315eSPaolo Bonzini	echo
76ee3a315eSPaolo Bonzini	echo "== verifying patterns (1) =="
7761815d6eSFam Zheng	do_test $align "read -P 0xa 0x200 0x200" "$TEST_IMG" | _filter_qemu_io
7861815d6eSFam Zheng	do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io
7961815d6eSFam Zheng	do_test $align "read -P 0xa 0x20400 0x200" "$TEST_IMG" | _filter_qemu_io
80ee3a315eSPaolo Bonzini
81ee3a315eSPaolo Bonzini	echo
82ee3a315eSPaolo Bonzini	echo "== rewriting zeroes =="
8361815d6eSFam Zheng	do_test $align "write -P 0xb 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io
847fa84cd8SKevin Wolf	do_test $align "$write_zero_cmd 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io
85ee3a315eSPaolo Bonzini
86ee3a315eSPaolo Bonzini	echo
87ee3a315eSPaolo Bonzini	echo "== verifying patterns (2) =="
8861815d6eSFam Zheng	do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io
89ab53c447SFam Zheng
90ab53c447SFam Zheng	echo
91ab53c447SFam Zheng	echo "== rewriting unaligned zeroes =="
92ab53c447SFam Zheng	do_test $align "write -P 0xb 0x0 0x1000" "$TEST_IMG" | _filter_qemu_io
937fa84cd8SKevin Wolf	do_test $align "$write_zero_cmd 0x200 0x200" "$TEST_IMG" | _filter_qemu_io
94ab53c447SFam Zheng
95ab53c447SFam Zheng	echo
96ab53c447SFam Zheng	echo "== verifying patterns (3) =="
97ab53c447SFam Zheng	do_test $align "read -P 0xb 0x0 0x200" "$TEST_IMG" | _filter_qemu_io
98ab53c447SFam Zheng	do_test $align "read -P 0x0 0x200 0x200" "$TEST_IMG" | _filter_qemu_io
99ab53c447SFam Zheng	do_test $align "read -P 0xb 0x400 0xc00" "$TEST_IMG" | _filter_qemu_io
100ab53c447SFam Zheng
101ab53c447SFam Zheng	echo
10261815d6eSFam Zhengdone
1037fa84cd8SKevin Wolfdone
104ee3a315eSPaolo Bonzini
105ee3a315eSPaolo Bonzini# success, all done
106ee3a315eSPaolo Bonziniecho "*** done"
107ee3a315eSPaolo Bonzinirm -f $seq.full
108ee3a315eSPaolo Bonzinistatus=0
109