Re: Regarding AHCI_MAX_SG and (ATA_HORKAGE_MAX_SEC_1024)
From: David Milburn <hidden>
Date: 2016-08-10 18:07:36
Also in:
linux-ide, linux-scsi, lkml
Hi, On 08/10/2016 10:14 AM, Tejun Heo wrote:
Hello, Tom. On Wed, Aug 10, 2016 at 06:04:10PM +0800, Tom Yan wrote:quoted
On 10 August 2016 at 11:26, Tejun Heo [off-list ref] wrote:quoted
Hmmm.. why not? The hardware limit is 64k and the driver is using aIs that referring to the maximum number of entries allowed in the PRDT, Physical Region Descriptor Table (which is, more precisely, 65535)?Yeap.quoted
quoted
Not necessarily. A single sg entry can point to an area larger than PAGE_SIZE.You mean the 4MB limit of "Data Byte Count" in "DW3: Description Information" of the PRDT? Is that what max_segment_size (which is set to a general fallback of 65536: http://lxr.free-electrons.com/ident?i=dma_get_max_seg_size) is about in this case?Ah, ahci isn't setting the hardware limit properly but yeah that's the maximum segment size.quoted
And my point was, it will be a multiple of 168 anyway, if 1344 is just an example.quoted
As written above, that probably makes the ahci command table size nicely aligned.I think that's what bothers me ultimately, cause I don't see how 168 makes it (more) nicely aligned (or even, aligned to what?).Hmmm... Looked at the sizes and they don't seem to align to anything meaningful. No idea.
The 168 makes AHCI_CMD_TBL_SZ equal to 2816 AHCI_CMD_TBL_SZ = AHCI_CMD_TBL_HDR_SZ + (AHCI_MAX_SG * 16) AHCI_CMD_TBL_SZ = 128 + (168 * 16) I think if you add in AHCI_CMD_SLOT_SZ (1024) and AHCI_RX_FIS_SZ (256) the DMA is 4K aligned, I think that is where the 168 came from. Thanks, David