On 23/06/17 07:18 AM, Allen Hubbe wrote: > By "remote" do you mean the source or destination of a write?
Look at how these calls are used in ntb_transport and ntb_perf: They both call ntb_peer_mw_get_addr to get the size of the BAR. The size is sent via spads to the other side. The other side then uses ntb_mw_get_align and applies align_size to the received size. > Yes, clients should transfer the address and size information to the peer. But then they also need to technically transfer the alignment information as well. Which neither of the clients do. > Maybe this is the confusion. None of these api calls are to reach across to > the peer port, as to get the size of the peer's bar. They are to get > information from the local port, or to configure the local port. I like the rule that these api calls are not to reach across the port. But then API looks very wrong. Why are we calling one peer_mw_get addr and the other mw_get_align? And why does mw_get_align have a peer index? > Some snippets of code would help me understand your interpretation of the api > semantics more exactly. I'm not sure the code to best show this in code, but let me try describing an example situation: Lets say we have the following mws on each side (this is something that is possible with Switchtec hardware): Host A BARs: mwA0: 2MB size, aligned to 4k, size aligned to 4k mwA1: 4MB size, aligned to 4k, size aligned to 4k mwA2: 64k size, aligned to 64k, size aligned to 64k Host B BARs: mwB0: 2MB size, aligned to 4k, size aligned to 4k mwB1: 64k size, aligned to 64k, size aligned to 64k So on Host A: peer_mw_get_addr(idx=1) should return size=4M (from mwA1), but it's not clear what mw_get_align(widx=1) should do. I see two possibilities: 1) Given that it has the opposite sense of peer_mw_get_addr (ie. there is no peer in it's name) and that this new api also has a peer index, it should return align_size=64k (from mwB1). However, in order to do this, Host B must be fully configured (technically the link doesn't have to be fully up, but having a link up is the only way for a client to tell if Host B is configured or not). 2) Given your assertion that these APIs should never reach across the link, then one could say it should return align_size=4k. However, in this situation the name is really confusing. And the fact that it has a pidx argument makes no sense. And the way ntb_transport and ntb_perf use it is wrong because they will end up masking the 64K size of mwB1 with the 4k align_size from mwA1. Does that make more sense? Thanks, Logan