All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: kwolf@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org,
	qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 08/16] ahci: clear error register before NCQ cmd
Date: Mon, 22 Jun 2015 17:51:10 -0400	[thread overview]
Message-ID: <5588834E.6080306@redhat.com> (raw)
In-Reply-To: <55881F28.5050801@redhat.com>



On 06/22/2015 10:43 AM, John Snow wrote:
> 
> 
> On 06/22/2015 10:38 AM, Stefan Hajnoczi wrote:
>> On Fri, Jun 19, 2015 at 09:50:39PM -0400, John Snow wrote:
>>> The legacy ide command execution layer will clear any errors
>>> outstanding before execution, but the NCQ layer doesn't. Even on
>>> success, this register will remain clogged.
>>>
>>> Clear it out before each NCQ command so the guest can tell if
>>> the error code produced after completion is meaningful or not.
>>>
>>> Signed-off-by: John Snow <jsnow@redhat.com> --- hw/ide/ahci.c | 2
>>> ++ 1 file changed, 2 insertions(+)
>>>
>>> diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 6bded67..e63ba9b
>>> 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -1048,6 +1048,8
>>> @@ static void process_ncq_command(AHCIState *s, int port,
>>> uint8_t *cmd_fis, ncq_tfs->lba, ncq_tfs->lba +
>>> ncq_tfs->sector_count - 1, ide_state->nb_sectors - 1);
>>>
>>> +    ide_state->error = 0;
>>
>> I'm not sure it makes sense use ide_state at all in NCQ.
>>
>> ide_state is per-port and NCQ can issue multiple asynchronous
>> commands per port.  If process_ncq_command() modifies ide_state, it
>> may do that while other commands are still pending or about to be
>> processed.
>>
>> This will clobber ide_state->error.
>>
> 
> Good point. The real problem that we need to fix then is in the core
> IDE layer, which tends to set a "default error" and waits for
> ide_exec_cmd to clear it before execution.
> 
> If we don't clear that bit somehow, we will get failed commands.
> 
> I'll have to do a little research to see if it's safe to remove our
> startup error, since it might be part of an ATA signature handshake.
> 

It is indeed part of a startup signature and should not be removed.

> Hmm.
> 
> Maybe it's not actually a problem because any real OS should probably
> have issued ATA IDENTIFY (which will clear ERR) by the time they get
> to NCQ, so maybe we can scrap this, and I'll adjust the test accordingly
> to issue at least IDENTIFY before attempting NCQ.

It's not exquisitely clear what the NCQ state machine for SATA should
look like -- I need to figure out what a real device might do if you
attempt to send it an NCQ command before a "hello."

Or I'll just ignore this whole train of thought under the premise that
every OS alive will always send an IDENTIFY packet first, and be on my way.

  reply	other threads:[~2015-06-22 21:51 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-20  1:50 [Qemu-devel] [PATCH 00/16] ahci: ncq cleanup, part 1 John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 01/16] ahci: Rename NCQFIS structure fields John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 02/16] ahci: use shorter variables John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 03/16] ahci: add ncq_err helper John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 04/16] ahci: check for ncq prdtl overflow John Snow
2015-06-22 14:06   ` Stefan Hajnoczi
2015-06-22 14:08     ` John Snow
2015-06-23 13:46       ` Stefan Hajnoczi
2015-06-23 15:55         ` John Snow
2015-06-22 14:16   ` Stefan Hajnoczi
2015-06-20  1:50 ` [Qemu-devel] [PATCH 05/16] ahci: separate prdtl from opts John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 06/16] ahci: add ncq debug checks John Snow
2015-06-22 14:14   ` Stefan Hajnoczi
2015-06-20  1:50 ` [Qemu-devel] [PATCH 07/16] ahci: ncq sector count correction John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 08/16] ahci: clear error register before NCQ cmd John Snow
2015-06-22 14:38   ` Stefan Hajnoczi
2015-06-22 14:43     ` John Snow
2015-06-22 21:51       ` John Snow [this message]
2015-06-23 13:49         ` Stefan Hajnoczi
2015-06-20  1:50 ` [Qemu-devel] [PATCH 09/16] libqos/ahci: fix cmd_sanity for ncq John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 10/16] libqos/ahci: add NCQ frame support John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 11/16] libqos/ahci: edit wait to be ncq aware John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 12/16] libqos/ahci: adjust expected NCQ interrupts John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 13/16] libqos/ahci: set the NCQ tag on command_commit John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 14/16] libqos/ahci: Force all NCQ commands to be LBA48 John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 15/16] qtest/ahci: simple ncq data test John Snow
2015-06-20  1:50 ` [Qemu-devel] [PATCH 16/16] qtest/ahci: ncq migration test John Snow
2015-06-20  2:08   ` John Snow
2015-06-22 14:56 ` [Qemu-devel] [PATCH 00/16] ahci: ncq cleanup, part 1 Stefan Hajnoczi

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=5588834E.6080306@redhat.com \
    --to=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.