On 07/01/2014 07:49 AM, Alexander Graf wrote:

On 01.07.14 13:36, Kevin Wolf wrote:
Am 01.07.2014 um 13:13 hat reza.jel...@tuhh.de geschrieben:
From: Reza Jelveh <reza.jel...@tuhh.de>

The data byte count(DBC) read from the description information is defined for bits 21:00. Bits 30:22 are reserved and bit 31 is the Interrupt on Completion
(I) flag.

Completion interrupts are triggered after every transaction instead of on I-flag in QEMU. tbl_entry_size is a signed integer and improperly reading the
DBC leads to a negative offset that causes sglist allocation to fail.

Signed-off-by: Reza Jelveh <reza.jel...@tuhh.de>
---
This requires a custom ovmf image with sata controller for testing:

http://reza.jelveh.me/assets/OVMF.fd.bz2

Signed-off-by: Reza Jelveh <reza.jel...@tuhh.de>
Reviewed-by: Kevin Wolf <kw...@redhat.com>

The spec also seems to require an even byte count, which we don't seem
to check. Do we want to add this? (In a separate patch, of course.)

We could just remove the lowest bit in the mask, no? ;)


Alex

Reviewed-by: John Snow <js...@redhat.com>

Taking a look at the spec, AHCI 1.3 sec 4.2.3.3 p. 40; a value of 0x00 implies one byte, and 0x01 implies two bytes. Masking off the one bit would probably lead to an off-by-one somewhere. The spec does state that it requires the 0th bit to be set, so in a separate patch we should check to make sure, but the mask as-is is appropriate.

--John

Reply via email to