mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	mlx4_core: Get the maximum message size from reported device capabilities
Get the maximum message size from the device capabilities returned from the QUERY_DEV_CAP firmware command, rather than hard-coding 2 GB. Signed-off-by: Dotan Barak <dotanb@dev.mellanox.co.il> Signed-off-by: Michael S. Tsirkin <mst@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
		
							parent
							
								
									87427da55b
								
							
						
					
					
						commit
						149983af60
					
				
					 5 changed files with 7 additions and 1 deletions
				
			
		|  | @ -169,7 +169,7 @@ static int mlx4_ib_query_port(struct ib_device *ibdev, u8 port, | ||||||
| 	props->phys_state	= out_mad->data[33] >> 4; | 	props->phys_state	= out_mad->data[33] >> 4; | ||||||
| 	props->port_cap_flags	= be32_to_cpup((__be32 *) (out_mad->data + 20)); | 	props->port_cap_flags	= be32_to_cpup((__be32 *) (out_mad->data + 20)); | ||||||
| 	props->gid_tbl_len	= to_mdev(ibdev)->dev->caps.gid_table_len[port]; | 	props->gid_tbl_len	= to_mdev(ibdev)->dev->caps.gid_table_len[port]; | ||||||
| 	props->max_msg_sz	= 0x80000000; | 	props->max_msg_sz	= to_mdev(ibdev)->dev->caps.max_msg_sz; | ||||||
| 	props->pkey_tbl_len	= to_mdev(ibdev)->dev->caps.pkey_table_len[port]; | 	props->pkey_tbl_len	= to_mdev(ibdev)->dev->caps.pkey_table_len[port]; | ||||||
| 	props->bad_pkey_cntr	= be16_to_cpup((__be16 *) (out_mad->data + 46)); | 	props->bad_pkey_cntr	= be16_to_cpup((__be16 *) (out_mad->data + 46)); | ||||||
| 	props->qkey_viol_cntr	= be16_to_cpup((__be16 *) (out_mad->data + 48)); | 	props->qkey_viol_cntr	= be16_to_cpup((__be16 *) (out_mad->data + 48)); | ||||||
|  |  | ||||||
|  | @ -138,6 +138,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | ||||||
| #define QUERY_DEV_CAP_ACK_DELAY_OFFSET		0x35 | #define QUERY_DEV_CAP_ACK_DELAY_OFFSET		0x35 | ||||||
| #define QUERY_DEV_CAP_MTU_WIDTH_OFFSET		0x36 | #define QUERY_DEV_CAP_MTU_WIDTH_OFFSET		0x36 | ||||||
| #define QUERY_DEV_CAP_VL_PORT_OFFSET		0x37 | #define QUERY_DEV_CAP_VL_PORT_OFFSET		0x37 | ||||||
|  | #define QUERY_DEV_CAP_MAX_MSG_SZ_OFFSET		0x38 | ||||||
| #define QUERY_DEV_CAP_MAX_GID_OFFSET		0x3b | #define QUERY_DEV_CAP_MAX_GID_OFFSET		0x3b | ||||||
| #define QUERY_DEV_CAP_RATE_SUPPORT_OFFSET	0x3c | #define QUERY_DEV_CAP_RATE_SUPPORT_OFFSET	0x3c | ||||||
| #define QUERY_DEV_CAP_MAX_PKEY_OFFSET		0x3f | #define QUERY_DEV_CAP_MAX_PKEY_OFFSET		0x3f | ||||||
|  | @ -220,6 +221,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | ||||||
| 	dev_cap->local_ca_ack_delay = field & 0x1f; | 	dev_cap->local_ca_ack_delay = field & 0x1f; | ||||||
| 	MLX4_GET(field, outbox, QUERY_DEV_CAP_VL_PORT_OFFSET); | 	MLX4_GET(field, outbox, QUERY_DEV_CAP_VL_PORT_OFFSET); | ||||||
| 	dev_cap->num_ports = field & 0xf; | 	dev_cap->num_ports = field & 0xf; | ||||||
|  | 	MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_MSG_SZ_OFFSET); | ||||||
|  | 	dev_cap->max_msg_sz = 1 << (field & 0x1f); | ||||||
| 	MLX4_GET(stat_rate, outbox, QUERY_DEV_CAP_RATE_SUPPORT_OFFSET); | 	MLX4_GET(stat_rate, outbox, QUERY_DEV_CAP_RATE_SUPPORT_OFFSET); | ||||||
| 	dev_cap->stat_rate_support = stat_rate; | 	dev_cap->stat_rate_support = stat_rate; | ||||||
| 	MLX4_GET(dev_cap->flags, outbox, QUERY_DEV_CAP_FLAGS_OFFSET); | 	MLX4_GET(dev_cap->flags, outbox, QUERY_DEV_CAP_FLAGS_OFFSET); | ||||||
|  |  | ||||||
|  | @ -60,6 +60,7 @@ struct mlx4_dev_cap { | ||||||
| 	int max_rdma_global; | 	int max_rdma_global; | ||||||
| 	int local_ca_ack_delay; | 	int local_ca_ack_delay; | ||||||
| 	int num_ports; | 	int num_ports; | ||||||
|  | 	u32 max_msg_sz; | ||||||
| 	int max_mtu[MLX4_MAX_PORTS + 1]; | 	int max_mtu[MLX4_MAX_PORTS + 1]; | ||||||
| 	int max_port_width[MLX4_MAX_PORTS + 1]; | 	int max_port_width[MLX4_MAX_PORTS + 1]; | ||||||
| 	int max_vl[MLX4_MAX_PORTS + 1]; | 	int max_vl[MLX4_MAX_PORTS + 1]; | ||||||
|  |  | ||||||
|  | @ -154,6 +154,7 @@ static int __devinit mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev | ||||||
| 	dev->caps.reserved_uars	     = dev_cap->reserved_uars; | 	dev->caps.reserved_uars	     = dev_cap->reserved_uars; | ||||||
| 	dev->caps.reserved_pds	     = dev_cap->reserved_pds; | 	dev->caps.reserved_pds	     = dev_cap->reserved_pds; | ||||||
| 	dev->caps.mtt_entry_sz	     = MLX4_MTT_ENTRY_PER_SEG * dev_cap->mtt_entry_sz; | 	dev->caps.mtt_entry_sz	     = MLX4_MTT_ENTRY_PER_SEG * dev_cap->mtt_entry_sz; | ||||||
|  | 	dev->caps.max_msg_sz         = dev_cap->max_msg_sz; | ||||||
| 	dev->caps.page_size_cap	     = ~(u32) (dev_cap->min_page_sz - 1); | 	dev->caps.page_size_cap	     = ~(u32) (dev_cap->min_page_sz - 1); | ||||||
| 	dev->caps.flags		     = dev_cap->flags; | 	dev->caps.flags		     = dev_cap->flags; | ||||||
| 	dev->caps.stat_rate_support  = dev_cap->stat_rate_support; | 	dev->caps.stat_rate_support  = dev_cap->stat_rate_support; | ||||||
|  |  | ||||||
|  | @ -172,6 +172,7 @@ struct mlx4_caps { | ||||||
| 	int			num_pds; | 	int			num_pds; | ||||||
| 	int			reserved_pds; | 	int			reserved_pds; | ||||||
| 	int			mtt_entry_sz; | 	int			mtt_entry_sz; | ||||||
|  | 	u32			max_msg_sz; | ||||||
| 	u32			page_size_cap; | 	u32			page_size_cap; | ||||||
| 	u32			flags; | 	u32			flags; | ||||||
| 	u16			stat_rate_support; | 	u16			stat_rate_support; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Dotan Barak
						Dotan Barak