On Sat, 2008-01-12 at 17:04 -0600, Robert Hancock wrote: > I don't think the problem is that there's some buffer which is getting > allocated above 4GB and never bounced, since the problem goes away if > ADMA is disabled entirely and the DMA mask remains 32-bit always. My > guess is something is basing its decision on whether to bounce or not on > the device DMA mask. That can't possibly work properly for sata_nv since > the same PCI device has 2 ports, one of which can be in ADMA mode and > 64-bit capable and the other can be in legacy mode and only 32-bit capable. Erm, well, you can't decouple them. Having a differing blk queue bounce mask and device mask is going to cause huge trouble. The reason is this insidious nasty called swiotlb. Basically, with it enabled (and again, it can be on ia64 or x86_64), the kernel can bypass the bounce limit safe in the knowledge that swiotlb will fix up behind in the dma_map_ Unfortunately, if the device mask doesn't match the queue mask then swiotlb will never kick in and you'll end up with mapped pages beyond the 4GB limit. > Tejun, I believe you had a patch that was printing warnings when libata > tried to program a legacy PRD with an address over 4GB. Could we change > that to WARN_ON and get someone experiencing this to try it and > see what the stack trace points to? Unfortunately, the stack trace probably won't help, since the command likely gets issued from the block request function, so the trace won't go back to the culpable initiator; that's why the command would be helpful. James - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html