aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mlx4
diff options
context:
space:
mode:
authorJack Morgenstein <jackm@dev.mellanox.co.il>2012-08-03 04:40:43 -0400
committerRoland Dreier <roland@purestorage.com>2012-09-30 23:33:33 -0400
commit54679e148287f0ca1bdd09264c908bacb9f19b3f (patch)
tree8ef261b3d7a51f8c29c2f625273ae9b399cb0402 /include/linux/mlx4
parentfc06573dfaf8a33bc0533bb70c49de13fa5232a4 (diff)
mlx4: Implement QP paravirtualization and maintain phys_pkey_cache for smp_snoop
This requires: 1. Replacing the paravirtualized P_Key index (inserted by the guest) with the real P_Key index. 2. For UD QPs, placing the guest's true source GID index in the address path structure mgid field, and setting the ud_force_mgid bit so that the mgid is taken from the QP context and not from the WQE when posting sends. 3. For UC and RC QPs, placing the guest's true source GID index in the address path structure mgid field. 4. For tunnel and proxy QPs, setting the Q_Key value reserved for that proxy/tunnel pair. Since not all the above adjustments occur in all the QP transitions, the QP transitions require separate wrapper functions. Secondly, initialize the P_Key virtualization table to its default values: Master virtualized table is 1-1 with the real P_Key table, guest virtualized table has P_Key index 0 mapped to the real P_Key index 0, and all the other P_Key indices mapped to the reserved (invalid) P_Key at index 127. Finally, add logic in smp_snoop for maintaining the phys_P_Key_cache. and generating events on the master only if a P_Key actually changed. Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'include/linux/mlx4')
-rw-r--r--include/linux/mlx4/device.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index b6b8d341b6c8..9803fd5d3dba 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -940,6 +940,9 @@ int mlx4_flow_attach(struct mlx4_dev *dev,
940 struct mlx4_net_trans_rule *rule, u64 *reg_id); 940 struct mlx4_net_trans_rule *rule, u64 *reg_id);
941int mlx4_flow_detach(struct mlx4_dev *dev, u64 reg_id); 941int mlx4_flow_detach(struct mlx4_dev *dev, u64 reg_id);
942 942
943void mlx4_sync_pkey_table(struct mlx4_dev *dev, int slave, int port,
944 int i, int val);
945
943int mlx4_get_parav_qkey(struct mlx4_dev *dev, u32 qpn, u32 *qkey); 946int mlx4_get_parav_qkey(struct mlx4_dev *dev, u32 qpn, u32 *qkey);
944 947
945#endif /* MLX4_DEVICE_H */ 948#endif /* MLX4_DEVICE_H */