linux/drivers/infiniband/hw/mlx4
Jack Morgenstein 37bfc7c1e8 IB/mlx4: SR-IOV multiplex and demultiplex MADs
Special QPs are paravirtualized.

vHCAs are not given direct access to QP0/1. Rather, these QPs are
operated by a special context hosted by the PF, which mediates access
to/from vHCAs.  This is done by opening a "tunnel" per vHCA port per
QP0/1. A tunnel comprises a pair of UD QPs: a "Tunnel QP" in the
PF-context and a "Proxy QP" in the vHCA.  All vHCA MAD traffic must
pass through the corresponding tunnel.  vHCA QPs cannot be assigned to
VL15 and are denied of the well-known QKey.

Outgoing messages are "de-multiplexed" (i.e., directed to the wire via
the real special QP).

Incoming messages are "multiplexed" (i.e. steered by the PPF to the
correct VF or to the PF)

QP0 access is restricted to the PF vHCA. VF vHCAs also have (virtual)
QP0s, but they never receive any SMPs and all SMPs sent are discarded.
QP1 traffic is allowed for all vHCAs, but special care is required to
bridge the gap between the host and network views.

Specifically:
- Transaction IDs are mapped to guarantee uniqueness among vHCAs
- CM para-virtualization
  o   Incoming requests are steered to the correct vHCA according to the embedded GID
  o   Local communication IDs are mapped to ensure uniqueness among vHCAs
  (see the patch that adds CM paravirtualization.)
- Multicast para-virtualization
  o   The PF context aggregates membership state from all vHCAs
  o   The SA is contacted only when the aggregate membership changes
  o   If the aggregate does not change, the PF context will provide the
      requesting vHCA with the proper response.
  (see the patch that adds multicast group paravirtualization)

Incoming MADs are steered according to:
- the DGID If a GRH is present
- the mapped transaction ID for response MADs
- the embedded GID in CM requests
- the remote communication ID in other CM messages

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <roland@purestorage.com>
2012-09-30 20:33:34 -07:00
..
ah.c IB/mlx4: Fix SL to 802.1Q priority-bits mapping for IBoE 2012-01-03 21:00:02 -08:00
cq.c IB/mlx4: SR-IOV IB context objects and proxy/tunnel SQP support 2012-09-30 20:33:30 -07:00
doorbell.c IB: expand ib_umem_get() prototype 2008-04-29 08:06:12 -07:00
Kconfig mlx4: Fix infiniband Kconfig dependencies. 2011-08-11 23:05:05 -07:00
mad.c IB/mlx4: SR-IOV multiplex and demultiplex MADs 2012-09-30 20:33:34 -07:00
main.c mlx4: Implement QP paravirtualization and maintain phys_pkey_cache for smp_snoop 2012-09-30 20:33:33 -07:00
Makefile IB/mlx4: Add a driver Mellanox ConnectX InfiniBand adapters 2007-05-08 18:00:38 -07:00
mlx4_ib.h IB/mlx4: Initialize SR-IOV IB support for slaves in master context 2012-09-30 20:33:32 -07:00
mr.c IB/mlx4: Replace printk(KERN_yyy...) with pr_yyy(...) 2012-05-08 11:59:36 -07:00
qp.c IB/mlx4: SR-IOV IB context objects and proxy/tunnel SQP support 2012-09-30 20:33:30 -07:00
srq.c IB/mlx4: Replace printk(KERN_yyy...) with pr_yyy(...) 2012-05-08 11:59:36 -07:00
user.h mlx4: Update/add Mellanox Technologies copyright lines to mlx4 driver files 2008-07-25 10:32:52 -07:00