IB/mlx4: Add report for RSS capabilities by vendor channel
authorGuy Levi <guyle@mellanox.com>
Wed, 25 Oct 2017 19:39:34 +0000 (22:39 +0300)
committerDoug Ledford <dledford@redhat.com>
Fri, 10 Nov 2017 18:04:09 +0000 (13:04 -0500)
The mlx4's RSS patches submission missed a report of RSS capabilities
which should be reported by the vendor channel in query_device.

Signed-off-by: Guy Levi <guyle@mellanox.com>
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/mlx4/main.c
drivers/infiniband/hw/mlx4/mlx4_ib.h

index c636842c5be0e07ac976b094ac2d70d61d3b768b..d8f0b94f1dc446cc9ae0a994f21ced9d03c17e01 100644 (file)
@@ -581,6 +581,23 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
                        sizeof(struct mlx4_wqe_data_seg);
        }
 
+       if (uhw->outlen >= resp.response_length + sizeof(resp.rss_caps)) {
+               resp.response_length += sizeof(resp.rss_caps);
+               if (props->rss_caps.supported_qpts) {
+                       resp.rss_caps.rx_hash_function =
+                               MLX4_IB_RX_HASH_FUNC_TOEPLITZ;
+                       resp.rss_caps.rx_hash_fields_mask =
+                               MLX4_IB_RX_HASH_SRC_IPV4 |
+                               MLX4_IB_RX_HASH_DST_IPV4 |
+                               MLX4_IB_RX_HASH_SRC_IPV6 |
+                               MLX4_IB_RX_HASH_DST_IPV6 |
+                               MLX4_IB_RX_HASH_SRC_PORT_TCP |
+                               MLX4_IB_RX_HASH_DST_PORT_TCP |
+                               MLX4_IB_RX_HASH_SRC_PORT_UDP |
+                               MLX4_IB_RX_HASH_DST_PORT_UDP;
+               }
+       }
+
        if (uhw->outlen) {
                err = ib_copy_to_udata(uhw, &resp, resp.response_length);
                if (err)
index 1fa19820355af04390c73db824709b03e3dd3fa5..d09d4e7b27068d7354c2fa42457502ec06ec3478 100644 (file)
@@ -644,12 +644,18 @@ enum query_device_resp_mask {
        QUERY_DEVICE_RESP_MASK_TIMESTAMP = 1UL << 0,
 };
 
+struct mlx4_ib_rss_caps {
+       __u64 rx_hash_fields_mask; /* enum mlx4_rx_hash_fields */
+       __u8 rx_hash_function; /* enum mlx4_rx_hash_function_flags */
+       __u8 reserved[7];
+};
+
 struct mlx4_uverbs_ex_query_device_resp {
-       __u32 comp_mask;
-       __u32 response_length;
-       __u64 hca_core_clock_offset;
-       __u32 max_inl_recv_sz;
-       __u32 reserved;
+       __u32                   comp_mask;
+       __u32                   response_length;
+       __u64                   hca_core_clock_offset;
+       __u32                   max_inl_recv_sz;
+       struct mlx4_ib_rss_caps rss_caps;
 };
 
 static inline struct mlx4_ib_dev *to_mdev(struct ib_device *ibdev)