Re: DMA reordering possible ?

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

 



Thanks Grant for the info.

On Thu, Feb 4, 2010 at 8:27 AM, Grant Grundler
<grundler@xxxxxxxxxxxxxxxx> wrote:
> On Fri, Jan 29, 2010 at 12:05:47PM +0530, yogeshwar sonawane wrote:
>> Hi all,
>>
>> Following questions can be of naïve nature. Kindly, help me to clarify
>> the points.
>> Thanks in Advance.
>>
>> 1) Consider a situation where a PCIe device has requested a DMA Write
>> operation followed by an MSI based interrupt. Upon receiving the
>> interrupt, the software will read/check the DMAed data. Now, even if
>> the device is guaranteeing the ordering between the two (issuing one
>> after the other), whether the I/O controller OR chipset can
>> reorder/buffer them?
>
> "can" == PCIe spec allows transactions to bypass DMA writes only in
> one circumstance: Relaxed Ordering bit is set in the DMA write transaction.
> Look at a PCIe trace to determine if that bit is set (or not). In this case,
> due to the data dependency this bit should not be set.
>
>> This may result into getting interrupt before the
>> data is DMAed resulting into software reading invalid data. Here data
>> is residing into internal buffers of I/O controller and CPU is trying
>> to read from memory. Whether such DMA reordering can happen/is allowed
>> at all? Whether I/O controller can employ such intelligence(any kind
>> of DMA reordering) for gaining some performance advantage?
>
> By "I/O Controller" do you mean the PCIe mother board chipset?
>
> I'm wondering if there is something else going on - e.g. non-cache
> coherent DMA, bug in I/O controller causing DMA Write to get stuck
> in a coalesce buffer or something like that.
>
> IIRC, tg3 driver lists examples of chipsets that do NOT
> support PCI ordering correctly.
>
>> Mainly,
>> focus is on high-end server class platforms having 8 or 16 cores with
>> many peripherals.
>
> Which architecture? x86-64 CPUs and corresponding chipsets?  IA64? Power?

x86_64 arch. Mainly, i have not faced any problem, but i am wondering
whether the problem can occur ? and how to handle that ?

>
>> 2) If above situation is at all possible, then to avoid such situation
>> is the responsibility of the device or the driver for that device?
>> Mainly, both the components (device and driver) expected to be generic
>> in nature (platform, I/O controller independent).
>
> As noted, read Documentation/DMA-API.txt
>
>> 3) In continuation, if driver has to handle such situations, then how
>> to handle such cases in Linux device driver? Any API is there for
>> pending DMA flush/sync in I/O controller? I am aware of rmb(), wmb() &
>> mb() which ensures ordering from CPU side i.e. slave read/writes.
>> Anythings similar for DMA operations ?
>
> mmiowb() is also *required* on some platforms (e.g. SGI Altix)
>
> hth,
> grant
>
>>


Thanks and Regards,
Yogeshwar
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux