From: Linus Torvalds <torvalds@linux-foundation.org>
Date: Tue, 24 Jul 2012 20:56:26 +0000 (-0700)
Subject: Merge tag 'rdma-for-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/roland... 
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=5dedb9f3bd5bcb186313ea0c0cff8f2c525d4122;p=GitHub%2Fexynos8895%2Fandroid_kernel_samsung_universal8895.git

Merge tag 'rdma-for-3.6' of git://git./linux/kernel/git/roland/infiniband

Pull InfiniBand/RDMA changes from Roland Dreier:
 - Updates to the qib low-level driver
 - First chunk of changes for SR-IOV support for mlx4 IB
 - RDMA CM support for IPv6-only binding
 - Other misc cleanups and fixes

Fix up some add-add conflicts in include/linux/mlx4/device.h and
drivers/net/ethernet/mellanox/mlx4/main.c

* tag 'rdma-for-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (30 commits)
  IB/qib: checkpatch fixes
  IB/qib: Add congestion control agent implementation
  IB/qib: Reduce sdma_lock contention
  IB/qib: Fix an incorrect log message
  IB/qib: Fix QP RCU sparse warnings
  mlx4: Put physical GID and P_Key table sizes in mlx4_phys_caps struct and paravirtualize them
  mlx4_core: Allow guests to have IB ports
  mlx4_core: Implement mechanism for reserved Q_Keys
  net/mlx4_core: Free ICM table in case of error
  IB/cm: Destroy idr as part of the module init error flow
  mlx4_core: Remove double function declarations
  IB/mlx4: Fill the masked_atomic_cap attribute in query device
  IB/mthca: Fill in sq_sig_type in query QP
  IB/mthca: Warning about event for non-existent QPs should show event type
  IB/qib: Fix sparse RCU warnings in qib_keys.c
  net/mlx4_core: Initialize IB port capabilities for all slaves
  mlx4: Use port management change event instead of smp_snoop
  IB/qib: RCU locking for MR validation
  IB/qib: Avoid returning EBUSY from MR deregister
  IB/qib: Fix UC MR refs for immediate operations
  ...
---

5dedb9f3bd5bcb186313ea0c0cff8f2c525d4122
diff --cc drivers/net/ethernet/mellanox/mlx4/main.c
index 42645166bae2,5df3ac40a490..e8f8ebb4ae65
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@@ -1231,26 -1232,10 +1258,29 @@@ static int mlx4_init_hca(struct mlx4_de
  			goto err_stop_fw;
  		}
  
+ 		if (mlx4_is_master(dev))
+ 			mlx4_parav_master_pf_caps(dev);
+ 
 +		priv->fs_hash_mode = MLX4_FS_L2_HASH;
 +
 +		switch (priv->fs_hash_mode) {
 +		case MLX4_FS_L2_HASH:
 +			init_hca.fs_hash_enable_bits = 0;
 +			break;
 +
 +		case MLX4_FS_L2_L3_L4_HASH:
 +			/* Enable flow steering with
 +			 * udp unicast and tcp unicast
 +			 */
 +			init_hca.fs_hash_enable_bits =
 +				MLX4_FS_UDP_UC_EN | MLX4_FS_TCP_UC_EN;
 +			break;
 +		}
 +
  		profile = default_profile;
 +		if (dev->caps.steering_mode ==
 +		    MLX4_STEERING_MODE_DEVICE_MANAGED)
 +			profile.num_mcg = MLX4_FS_NUM_MCG;
  
  		icm_size = mlx4_make_profile(dev, &profile, &dev_cap,
  					     &init_hca);
diff --cc include/linux/mlx4/device.h
index 4d7761f8c3f6,441caf1a497d..bd6c9fcdf2dd
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@@ -543,10 -540,83 +574,85 @@@ struct mlx4_dev 
  	u8			rev_id;
  	char			board_id[MLX4_BOARD_ID_LEN];
  	int			num_vfs;
 +	u64			regid_promisc_array[MLX4_MAX_PORTS + 1];
 +	u64			regid_allmulti_array[MLX4_MAX_PORTS + 1];
  };
  
+ struct mlx4_eqe {
+ 	u8			reserved1;
+ 	u8			type;
+ 	u8			reserved2;
+ 	u8			subtype;
+ 	union {
+ 		u32		raw[6];
+ 		struct {
+ 			__be32	cqn;
+ 		} __packed comp;
+ 		struct {
+ 			u16	reserved1;
+ 			__be16	token;
+ 			u32	reserved2;
+ 			u8	reserved3[3];
+ 			u8	status;
+ 			__be64	out_param;
+ 		} __packed cmd;
+ 		struct {
+ 			__be32	qpn;
+ 		} __packed qp;
+ 		struct {
+ 			__be32	srqn;
+ 		} __packed srq;
+ 		struct {
+ 			__be32	cqn;
+ 			u32	reserved1;
+ 			u8	reserved2[3];
+ 			u8	syndrome;
+ 		} __packed cq_err;
+ 		struct {
+ 			u32	reserved1[2];
+ 			__be32	port;
+ 		} __packed port_change;
+ 		struct {
+ 			#define COMM_CHANNEL_BIT_ARRAY_SIZE	4
+ 			u32 reserved;
+ 			u32 bit_vec[COMM_CHANNEL_BIT_ARRAY_SIZE];
+ 		} __packed comm_channel_arm;
+ 		struct {
+ 			u8	port;
+ 			u8	reserved[3];
+ 			__be64	mac;
+ 		} __packed mac_update;
+ 		struct {
+ 			__be32	slave_id;
+ 		} __packed flr_event;
+ 		struct {
+ 			__be16  current_temperature;
+ 			__be16  warning_threshold;
+ 		} __packed warming;
+ 		struct {
+ 			u8 reserved[3];
+ 			u8 port;
+ 			union {
+ 				struct {
+ 					__be16 mstr_sm_lid;
+ 					__be16 port_lid;
+ 					__be32 changed_attr;
+ 					u8 reserved[3];
+ 					u8 mstr_sm_sl;
+ 					__be64 gid_prefix;
+ 				} __packed port_info;
+ 				struct {
+ 					__be32 block_ptr;
+ 					__be32 tbl_entries_mask;
+ 				} __packed tbl_change_info;
+ 			} params;
+ 		} __packed port_mgmt_change;
+ 	}			event;
+ 	u8			slave_id;
+ 	u8			reserved3[2];
+ 	u8			owner;
+ } __packed;
+ 
  struct mlx4_init_port_param {
  	int			set_guid0;
  	int			set_node_guid;
@@@ -795,8 -783,6 +910,10 @@@ int mlx4_wol_write(struct mlx4_dev *dev
  int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx);
  void mlx4_counter_free(struct mlx4_dev *dev, u32 idx);
  
 +int mlx4_flow_attach(struct mlx4_dev *dev,
 +		     struct mlx4_net_trans_rule *rule, u64 *reg_id);
 +int mlx4_flow_detach(struct mlx4_dev *dev, u64 reg_id);
 +
+ int mlx4_get_parav_qkey(struct mlx4_dev *dev, u32 qpn, u32 *qkey);
+ 
  #endif /* MLX4_DEVICE_H */