xref: /openbmc/qemu/tests/qemu-iotests/033 (revision 61815d6e)
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 Bonzinitmp=/tmp/$$
29ee3a315eSPaolo Bonzinistatus=1	# failure is the default!
30ee3a315eSPaolo Bonzini
31ee3a315eSPaolo Bonzini_cleanup()
32ee3a315eSPaolo Bonzini{
33ee3a315eSPaolo Bonzini	_cleanup_test_img
34ee3a315eSPaolo Bonzini}
35ee3a315eSPaolo Bonzinitrap "_cleanup; exit \$status" 0 1 2 3 15
36ee3a315eSPaolo Bonzini
37ee3a315eSPaolo Bonzini# get standard environment, filters and checks
38ee3a315eSPaolo Bonzini. ./common.rc
39ee3a315eSPaolo Bonzini. ./common.filter
40ee3a315eSPaolo Bonzini
41ee3a315eSPaolo Bonzini_supported_fmt generic
42ee3a315eSPaolo Bonzini_supported_proto generic
43ee3a315eSPaolo Bonzini_supported_os Linux
44ee3a315eSPaolo Bonzini
45ee3a315eSPaolo Bonzini
46ee3a315eSPaolo Bonzinisize=128M
47ee3a315eSPaolo Bonzini_make_test_img $size
48ee3a315eSPaolo Bonzini
49*61815d6eSFam Zhengdo_test()
50*61815d6eSFam Zheng{
51*61815d6eSFam Zheng	local align=$1
52*61815d6eSFam Zheng	local iocmd=$2
53*61815d6eSFam Zheng	local img=$3
54*61815d6eSFam Zheng	{
55*61815d6eSFam Zheng		echo "open -o driver=$IMGFMT,file.align=$align blkdebug::$img"
56*61815d6eSFam Zheng		echo $iocmd
57*61815d6eSFam Zheng	} | $QEMU_IO
58*61815d6eSFam Zheng}
59*61815d6eSFam Zheng
60*61815d6eSFam Zhengfor align in 512 4k; do
61ee3a315eSPaolo Bonzini	echo
62ee3a315eSPaolo Bonzini	echo "== preparing image =="
63*61815d6eSFam Zheng	do_test $align "write -P 0xa 0x200 0x400" "$TEST_IMG" | _filter_qemu_io
64*61815d6eSFam Zheng	do_test $align "write -P 0xa 0x20000 0x600" "$TEST_IMG" | _filter_qemu_io
65*61815d6eSFam Zheng	do_test $align "write -z 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io
66ee3a315eSPaolo Bonzini
67ee3a315eSPaolo Bonzini	echo
68ee3a315eSPaolo Bonzini	echo "== verifying patterns (1) =="
69*61815d6eSFam Zheng	do_test $align "read -P 0xa 0x200 0x200" "$TEST_IMG" | _filter_qemu_io
70*61815d6eSFam Zheng	do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io
71*61815d6eSFam Zheng	do_test $align "read -P 0xa 0x20400 0x200" "$TEST_IMG" | _filter_qemu_io
72ee3a315eSPaolo Bonzini
73ee3a315eSPaolo Bonzini	echo
74ee3a315eSPaolo Bonzini	echo "== rewriting zeroes =="
75*61815d6eSFam Zheng	do_test $align "write -P 0xb 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io
76*61815d6eSFam Zheng	do_test $align "write -z 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io
77ee3a315eSPaolo Bonzini
78ee3a315eSPaolo Bonzini	echo
79ee3a315eSPaolo Bonzini	echo "== verifying patterns (2) =="
80*61815d6eSFam Zheng	do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io
81*61815d6eSFam Zhengdone
82ee3a315eSPaolo Bonzini
83ee3a315eSPaolo Bonzini# success, all done
84ee3a315eSPaolo Bonziniecho "*** done"
85ee3a315eSPaolo Bonzinirm -f $seq.full
86ee3a315eSPaolo Bonzinistatus=0
87