From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UmLS9-0007Wy-TR for qemu-devel@nongnu.org; Tue, 11 Jun 2013 06:05:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UmLS7-0008I3-Ia for qemu-devel@nongnu.org; Tue, 11 Jun 2013 06:05:25 -0400 Received: from cantor2.suse.de ([195.135.220.15]:39745 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UmLS7-0008Hs-9T for qemu-devel@nongnu.org; Tue, 11 Jun 2013 06:05:23 -0400 Message-ID: <51B6F660.5090004@suse.de> Date: Tue, 11 Jun 2013 12:05:20 +0200 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1370888600-25388-1-git-send-email-mdroth@linux.vnet.ibm.com> In-Reply-To: <1370888600-25388-1-git-send-email-mdroth@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] ide-test: fix failure for test_flush List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Michael Roth , Kevin Wolf Cc: Anthony Liguori , qemu-devel@nongnu.org, stefanha@redhat.com Am 10.06.2013 20:23, schrieb Michael Roth: > bd07684aacfb61668ae2c25b7dd00b64f3d7c7f3 added a test to ensure BSY > flag is set when a flush request is in flight. It does this by setting > a blkdebug breakpoint on flush_to_os before issuing a CMD_FLUSH_CACHE. > It then resumes CMD_FLUSH_CACHE operation and checks that BSY is unset. >=20 > The actual unsetting of BSY does not occur until ide_flush_cb gets > called in a bh, however, so in some cases this check will race with > the actual completion. >=20 > Fix this by polling the ide status register until BSY flag gets unset > before we do our final sanity checks. According to > f68ec8379e88502b4841a110c070e9b118d3151c this is in line with how a gue= st > would determine whether or not the device is still busy. >=20 > Signed-off-by: Michael Roth > --- > tests/ide-test.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) >=20 > diff --git a/tests/ide-test.c b/tests/ide-test.c > index 828e71a..7e2eb94 100644 > --- a/tests/ide-test.c > +++ b/tests/ide-test.c > @@ -455,7 +455,10 @@ static void test_flush(void) > data =3D inb(IDE_BASE + reg_device); > g_assert_cmpint(data & DEV, =3D=3D, 0); > =20 > - data =3D inb(IDE_BASE + reg_status); > + do { > + data =3D inb(IDE_BASE + reg_status); > + } while (data & BSY); Is a busy loop really a good idea for a qtest? CC'ing Anthony. For the theoretical case that BSY is not cleared it might be better to terminate the loop with some timeout to get an assertion failure or at least use some form of sleep() to yield the thread while waiting? > + > assert_bit_set(data, DRDY); > assert_bit_clear(data, BSY | DF | ERR | DRQ); This BSY clear assertion will always be true now due to the above while condition; it won't if we change it though. Regards, Andreas > =20 --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg