Re: [PATCH] sata_nv: fix ADMA ATAPI issues with memory over 4GB

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Robert Hancock wrote:
> Tejun Heo wrote:
>> How about always initialize DMA mask to ATA_DMA_MASK regardless of ADMA
>> mode such that PRD and PAD buffers are always accessible by register
>> mode and just raising PCI dma mask and queue bounce limit if ADMA mode
>> is active?
> 
> Could be done.. but, I don't want to constrain the ADMA APRD/CPB area in
> that way (there are some dual-socket Opteron boxes with this controller,
> forcing an allocation below 4GB for this could force a non-optimal node
> allocation I think..) To do this I'd have to raise the mask for the APRD
> allocation, drop it again, then raise it again in ADMA mode, which is
> kind of ugly.

I don't think it really matters.  The table isn't too big and it's not
like access to the table has any processor locality.  Maybe it's better
to allocate to the same node as the irq but raising DMA mask doesn't
help at all.

I think performance impact is nil either way but even in highly unlikely
case it has any impact, allocating PRDs under 4G should be better as it
avoids DAC cycles on the bus.  But again, this is just irrelevant.

I'd say just allocate everything under 4G.

> Also, I'd rather not allocate the legacy PRD at all if we're in ADMA
> mode. That way, if some bug causes us to try and do legacy DMA in ADMA
> mode, we'll crash from null pointer dereference instead of potentially
> transferring incorrect data (as we had in this case) and corrupting things.

Yeap, I can agree with this.  But can you add BUG_ON()/WARN_ON() at
places instead?  I know blanking pointers feel safer but I think it's
best to keep resource allocation / release in ->port_start/stop().

>>> +    /* Set appropriate DMA mask. */
>>> +    pci_set_dma_mask(pdev, bounce_limit);
>>> +    pci_set_consistent_dma_mask(pdev, bounce_limit);
>>
>> These can fail.
> 
> Yes, it should likely do something with these return values. Though
> theoretically it shouldn't fail, since the DMA mask is either 32-bit,
> which shouldn't fail, or one that was successfully set before. Also I
> don't think the SCSI layer actually checks the slave_config return
> value.. sigh.

Then please at least add WARN_ON() && another reason why allocating /
deallocating resources from ->slave_config isn't such a good idea.

>> Also, please separate out the result TF handling to a separate patch.  I
>> know it's a small change but as both introduces important behavior
>> changes, I think it would be nice to have a bisection point inbetween.
> 
> Could do. That change would have to come first though, as the change to
> not allocate the PRD except when necessary would cause some cases there
> to blow up when before they might have worked in some cases.

Yes, please.

Thanks.

-- 
tejun
-
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

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux