It was observed in a crosslink NT setup with two hosts having different
numbers of requester IDs that the traffic can go only in one direction.
In the setup, the switch of host A connects to CPU1, while the switch
of host B connects to CPU0. After loading the driver, the two hosts
have the following requester IDs. And the traffic only goes from B to A.
Host A
Host B
0:0.0
0:0.0
80:3.0
When a TLP gose from host A to host B, it first goes from host A CPU to
the local crosslink partition (there are a pair of virtual partitions in
between the two switches in the crosslink NTB setup), with the original
requester ID be replaced with a proxy ID, then be routed to the peer
crosslink partition. If the new requester ID (prxoy ID of the local
crosslink partition) hit one entry in the requester ID table of the peer
crosslink partition, it will finally be routed to Host B. Otherwise, it
will be dropped.
The reason for the above phenomenon is that the driver wrongly registers
the requester IDs to the local crosslink partition, instead of to its
peer. So when the traffic from host A with requester ID reaches the
crosslink partition of host B and hits no entry, it goes nowhere.
This PR fix this by registering the proper requester IDs to the
peer crosslink partition. Another internal LUT window is allocated for
routing the configuration traffic to the GAS region of the peer
crosslink partition.
It was observed in a crosslink NT setup with two hosts having different numbers of requester IDs that the traffic can go only in one direction.
In the setup, the switch of host A connects to CPU1, while the switch of host B connects to CPU0. After loading the driver, the two hosts have the following requester IDs. And the traffic only goes from B to A.
When a TLP gose from host A to host B, it first goes from host A CPU to the local crosslink partition (there are a pair of virtual partitions in between the two switches in the crosslink NTB setup), with the original requester ID be replaced with a proxy ID, then be routed to the peer crosslink partition. If the new requester ID (prxoy ID of the local crosslink partition) hit one entry in the requester ID table of the peer crosslink partition, it will finally be routed to Host B. Otherwise, it will be dropped.
The reason for the above phenomenon is that the driver wrongly registers the requester IDs to the local crosslink partition, instead of to its peer. So when the traffic from host A with requester ID reaches the crosslink partition of host B and hits no entry, it goes nowhere.
This PR fix this by registering the proper requester IDs to the peer crosslink partition. Another internal LUT window is allocated for routing the configuration traffic to the GAS region of the peer crosslink partition.