Vikram Hegde wrote: > Hi Matthew, >> No, sorry. > Any reason why FORCE_PHYSICAL is not acceptable ? It has been around > for the SPARC side for some time now and seems to meet the needs of > everyone on that side. It provides exactly the same functionality as > you want. > Because it changes the effective semantics of what it was previously. Previously it was a performance hack to get 36 bit MBus addresses and get around the IOMMU limitations (at least IIRC) and as such it encapsulated a semantic that was specific to SPARC. So much so that the man page even mentions it.
S/G DMA on the other hand, has been specific more to non-SPARC and has been the default there. Turning around and now making it /not/ the default on the /hope/ that those who don't want that change will get around to recompiling and changing their drivers ignores the intent of what the DDI is about. In short, similarity in names of objects does not mean similarity in effective and assumed semantics. In general I think it's bad policy for Sun to create interfaces that consumers of those interfaces cannot disable if there are workable alternates. It's even more problematic when the default underlying implementation just changes. Furthermore, even if you classified such interfaces as evolving, things that have been long standing have at least some expectation of remaining the same from (minor) release to release. The /whole /point of the DDI is to create a framework that is friendly and usable and reliable for third parties to use. It does /not/ exist to have private side interfaces for Sun internal use only, although nearly all of the DDI has ended up that way (which was /not/ the intent of some of us when we ent through the effort of starting this). You have in some senses two goals here now, though. The first is the DDI idea. The second is to improve the underlying framework in a way that is believable and measurable and helps support broadest framework within Sun itself. As such, the IOMMU addition is probably a good idea- certainly the people proposing it believe so or they wouldn't be doing it. However, if you're not making this a major release type of change (in which case, IMHO, such as it is, lots of things should be thrown out and redone from scratch), then the addition of the IOMMU as the underlying transport instead of S/G DMA should be done in a less invasive way so that previous binaries don't actually do anything different (as a default). If it turns out that they are /provably/ correct in environments where the IOMMU is used instead, then the P-teams and the third parties could then either recompile or otherwise turn on that usage. That is prudent. So if you're going to make such a big underlying change, I would suggest instead that until it's a major release, you could add a FORCE_IOMMU flag. This would have the effect of taking driver binaries to work exactly as they have done before and allow drivers written by both Sun and third parties to /try out/ the IOMMU environment as needed or desired. The above isn't probably reasoned out as well as it should be, but it does seem to me that you should either dump the DDI and it's overcautious "let's not change things (for decades)" approach (and take an approach more like (the good parts) of Linux), or if you're going to treat the DDI in its multiple roles, err very much on the side of caution. -matt