[openib-general] Race in mthca_cmd_post()

Roland Dreier rdreier at cisco.com
Fri Oct 20 14:14:43 PDT 2006


 > The posted/non-posted write stuff in the spec really only means that a
 > split completion is generated for that transaction on the bus. There
 > is no bus-level requirement that the bus halt while an outstanding
 > split is pending. In fact, the PCI-X ordering rules in this case
 > actually would allow your config read and memory read to be re-ordered
 > by a the bridge (table 8-3). ``Split requests are permitted to be
 > blocked by or pass other split requests.''
 > 
 > Most implementations block the CPU on a non-posted write which
 > provides the necessary serialization, but Altix clearly didn't..

Thanks, I think I get it now.  It does seem like this behavior skirts
right inside the boundary of what the PCI spec allows.  What was
confusing me was the section:

    Non-posted transactions reach their ultimate destination before
    completing at the originating device. The master cannot proceed
    with any other work until the transaction has completed at the
    ultimate destination (if a dependency exists).

I just saw "the master cannot proceed" but the first few times I read
this, I didn't see the "(if a dependency exists)."  Since no
dependency exists between the config write and the subsequent memory
read, the master _can_ proceed in this case.  So I do agree that this
patch looks correct and needed, although the Altix behavior is
somewhat unusual.

Thanks,
  Roland




More information about the general mailing list