[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 08/16] ahci: clear error register before NCQ cmd
From: |
John Snow |
Subject: |
Re: [Qemu-devel] [PATCH 08/16] ahci: clear error register before NCQ cmd |
Date: |
Mon, 22 Jun 2015 10:43:52 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 |
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 <address@hidden> --- 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.
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.
Thanks.
--js
[Qemu-devel] [PATCH 07/16] ahci: ncq sector count correction, John Snow, 2015/06/19
[Qemu-devel] [PATCH 09/16] libqos/ahci: fix cmd_sanity for ncq, John Snow, 2015/06/19
[Qemu-devel] [PATCH 10/16] libqos/ahci: add NCQ frame support, John Snow, 2015/06/19
[Qemu-devel] [PATCH 11/16] libqos/ahci: edit wait to be ncq aware, John Snow, 2015/06/19
[Qemu-devel] [PATCH 12/16] libqos/ahci: adjust expected NCQ interrupts, John Snow, 2015/06/19
[Qemu-devel] [PATCH 13/16] libqos/ahci: set the NCQ tag on command_commit, John Snow, 2015/06/19
[Qemu-devel] [PATCH 14/16] libqos/ahci: Force all NCQ commands to be LBA48, John Snow, 2015/06/19
[Qemu-devel] [PATCH 16/16] qtest/ahci: ncq migration test, John Snow, 2015/06/19