[openib-general] [PATCH] mthca updates (2.6.8 dependent)

Grant Grundler iod00d at hp.com
Mon Aug 30 21:00:02 PDT 2004


On Mon, Aug 16, 2004 at 09:27:13PM +0300, Dror Goldenberg wrote:
> In PCI/PCIX, the interrupt is a wire, so it is not guaranteed that by the
> time you got the interrupt, the EQE will be waiting in memory.
> This is because interrupt goes on a separate wire from HCA to interrupt
> controller, while data goes up the PCI bridges.
> Therefore it is required to perform a PIO read to flush all
> posted writes flying upstream.

Dror,
I'm pretty sure you understand the issues but are using confusing
terminology:
o posted write. CPU does not wait for completion of write to IO device
o PIO write. Programmed IO - CPU write to IO device. May or not be posted
	and typically depends on chipset and which "space" (MMIO vs I/O
	Port) is the target.
o PIO read.  Programmed IO - CPU read stalls until completion (may be MMIO
      or I/O port space).
o DMA write: IO Device write to host memory (aka upstream)
o DMA read: Device command to retrieve data from host memory (downstream)
o DMA read return: completion portion of DMA read command (upstream)

A PIO Read "flushes" inflight DMA writes from a CPU perspective
because the CPU stalls until the PIO read completes.

> In PCI-Express, the interrupt is a message, so it will work. The interrupt
> will just flush the data to the memory because it maintain ordering with
> posted writes upstream.

The MSI/MSI-X interrupt doesn't do anything.
The interrupt transaction is just another DMA Write and must follow the
PCI ordering rules like any other DMA write. The destination address is
just not a regular host memory location.

> In the current driver, since it's PCI and PCI-Express we
> don't do it. In the new mode for Arbel we may do it.
> When you do MSI/MSI-X, then architecturally it is guaranteed that by the
> time you get the interrupt, the data already waits for you in memory.

yes.

FYI, PARISC *only* support transaction based interrupts.
The CPU has no interrupt lines going to it.
On IA64, I believe the same is true (for PCI) because the "Local SAPIC"
is integrated into the CPU (same silicon).

hth,
grant



More information about the general mailing list