From: John Snow <jsnow@redhat.com>
To: Peter Lieven <pl@kamp.de>, qemu-devel@nongnu.org, qemu-block@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org
Subject: Re: [Qemu-devel] [PATCH] tests: fix cdrom_pio_impl in ide-test
Date: Fri, 20 Nov 2015 12:12:05 -0500 [thread overview]
Message-ID: <564F5465.5070800@redhat.com> (raw)
In-Reply-To: <1448029742-19771-1-git-send-email-pl@kamp.de>
On 11/20/2015 09:29 AM, Peter Lieven wrote:
> The check for the cleared BSY flag has to be performed
> before each data transfer and not just before the
> first one.
>
> Commit 5f81724d revealed this glitch as the BSY flag
> was not set in ATAPI PIO transfers before.
>
> While at it fix the desciptions and add a comment before
Descriptions, if this can be fixed on apply.
> the nested for loop that transfers the data.
>
> Signed-off-by: Peter Lieven <pl@kamp.de>
> ---
> tests/ide-test.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/tests/ide-test.c b/tests/ide-test.c
> index d1014bb..fc1ce52 100644
> --- a/tests/ide-test.c
> +++ b/tests/ide-test.c
> @@ -699,24 +699,19 @@ static void cdrom_pio_impl(int nblocks)
> outb(IDE_BASE + reg_lba_middle, BYTE_COUNT_LIMIT & 0xFF);
> outb(IDE_BASE + reg_lba_high, (BYTE_COUNT_LIMIT >> 8 & 0xFF));
> outb(IDE_BASE + reg_command, CMD_PACKET);
> - /* HPD0: Check_Status_A State */
> + /* HP0: Check_Status_A State */
> nsleep(400);
> data = ide_wait_clear(BSY);
> - /* HPD1: Send_Packet State */
> + /* HP1: Send_Packet State */
> assert_bit_set(data, DRQ | DRDY);
> assert_bit_clear(data, ERR | DF | BSY);
>
> /* SCSI CDB (READ10) -- read n*2048 bytes from block 0 */
> send_scsi_cdb_read10(0, nblocks);
>
> - /* HPD3: INTRQ_Wait */
> + /* HP3: INTRQ_Wait */
> ide_wait_intr(IDE_PRIMARY_IRQ);
>
> - /* HPD2: Check_Status_B */
> - data = ide_wait_clear(BSY);
> - assert_bit_set(data, DRQ | DRDY);
> - assert_bit_clear(data, ERR | DF | BSY);
> -
> /* Read data back: occurs in bursts of 'BYTE_COUNT_LIMIT' bytes.
> * If BYTE_COUNT_LIMIT is odd, we transfer BYTE_COUNT_LIMIT - 1 bytes.
> * We allow an odd limit only when the remaining transfer size is
> @@ -728,6 +723,11 @@ static void cdrom_pio_impl(int nblocks)
> for (i = 0; i < DIV_ROUND_UP(rxsize, limit); i++) {
> size_t offset = i * (limit / 2);
> size_t rem = (rxsize / 2) - offset;
> + /* HP2: Check_Status_B */
> + data = ide_wait_clear(BSY);
> + assert_bit_set(data, DRQ | DRDY);
> + assert_bit_clear(data, ERR | DF | BSY);
> + /* HP4: Transfer_Data */
> for (j = 0; j < MIN((limit / 2), rem); j++) {
> rx[offset + j] = le16_to_cpu(inw(IDE_BASE + reg_data));
> }
>
This looks correct. This will definitely fix the race in the test, since
it was due to a race where we were reading the data when DRQ was not set.
Where I still remain a little confused is the precise flow control that
leads to sending an interrupt where BSY is set and DRQ is clear.
I'd like to investigate that a little more, but for purposes of rc1 and
testing I think this is the right thing to do.
For rc1, however:
Reviewed-by: John Snow <jsnow@redhat.com>
next prev parent reply other threads:[~2015-11-20 17:12 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-20 14:29 [Qemu-devel] [PATCH] tests: fix cdrom_pio_impl in ide-test Peter Lieven
2015-11-20 14:37 ` Peter Maydell
2015-11-20 16:50 ` John Snow
2015-11-20 16:52 ` Kevin Wolf
2015-11-20 17:12 ` John Snow [this message]
2015-11-20 17:38 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=564F5465.5070800@redhat.com \
--to=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=pl@kamp.de \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).