diff options
author | Or Gerlitz <ogerlitz@mellanox.com> | 2014-12-14 09:18:05 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-15 11:34:54 -0500 |
commit | c78e25edbf3ed87b23709c9b0732be5fa00d5f9f (patch) | |
tree | d585c494c1abfbc156da51e5872930542128667a | |
parent | da315679e80635021e98de1306ff4eee0759ba57 (diff) |
net/mlx4_core: Avoid double dumping of the PF device capabilities
To support asymmetric EQ allocations, we should query the device
capabilities prior to enabling SRIOV. As a side effect of adding that,
we are dumping the PF device capabilities twice. Avoid that by moving
the printing into a helper function which is called once.
Fixes: 7ae0e400cd93 ('net/mlx4_core: Flexible (asymmetric) allocation of
EQs and MSI-X vectors for PF/VFs')
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/fw.c | 26 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/fw.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/main.c | 1 |
3 files changed, 17 insertions, 11 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c index ef3b95bac2ad..51807bb7546e 100644 --- a/drivers/net/ethernet/mellanox/mlx4/fw.c +++ b/drivers/net/ethernet/mellanox/mlx4/fw.c | |||
@@ -787,11 +787,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
787 | if ((1 << (field & 0x3f)) > (PAGE_SIZE / dev_cap->bf_reg_size)) | 787 | if ((1 << (field & 0x3f)) > (PAGE_SIZE / dev_cap->bf_reg_size)) |
788 | field = 3; | 788 | field = 3; |
789 | dev_cap->bf_regs_per_page = 1 << (field & 0x3f); | 789 | dev_cap->bf_regs_per_page = 1 << (field & 0x3f); |
790 | mlx4_dbg(dev, "BlueFlame available (reg size %d, regs/page %d)\n", | ||
791 | dev_cap->bf_reg_size, dev_cap->bf_regs_per_page); | ||
792 | } else { | 790 | } else { |
793 | dev_cap->bf_reg_size = 0; | 791 | dev_cap->bf_reg_size = 0; |
794 | mlx4_dbg(dev, "BlueFlame not available\n"); | ||
795 | } | 792 | } |
796 | 793 | ||
797 | MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_SG_SQ_OFFSET); | 794 | MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_SG_SQ_OFFSET); |
@@ -902,9 +899,6 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
902 | goto out; | 899 | goto out; |
903 | } | 900 | } |
904 | 901 | ||
905 | mlx4_dbg(dev, "Base MM extensions: flags %08x, rsvd L_Key %08x\n", | ||
906 | dev_cap->bmme_flags, dev_cap->reserved_lkey); | ||
907 | |||
908 | /* | 902 | /* |
909 | * Each UAR has 4 EQ doorbells; so if a UAR is reserved, then | 903 | * Each UAR has 4 EQ doorbells; so if a UAR is reserved, then |
910 | * we can't use any EQs whose doorbell falls on that page, | 904 | * we can't use any EQs whose doorbell falls on that page, |
@@ -916,6 +910,21 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
916 | else | 910 | else |
917 | dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_SYS_EQS; | 911 | dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_SYS_EQS; |
918 | 912 | ||
913 | out: | ||
914 | mlx4_free_cmd_mailbox(dev, mailbox); | ||
915 | return err; | ||
916 | } | ||
917 | |||
918 | void mlx4_dev_cap_dump(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | ||
919 | { | ||
920 | if (dev_cap->bf_reg_size > 0) | ||
921 | mlx4_dbg(dev, "BlueFlame available (reg size %d, regs/page %d)\n", | ||
922 | dev_cap->bf_reg_size, dev_cap->bf_regs_per_page); | ||
923 | else | ||
924 | mlx4_dbg(dev, "BlueFlame not available\n"); | ||
925 | |||
926 | mlx4_dbg(dev, "Base MM extensions: flags %08x, rsvd L_Key %08x\n", | ||
927 | dev_cap->bmme_flags, dev_cap->reserved_lkey); | ||
919 | mlx4_dbg(dev, "Max ICM size %lld MB\n", | 928 | mlx4_dbg(dev, "Max ICM size %lld MB\n", |
920 | (unsigned long long) dev_cap->max_icm_sz >> 20); | 929 | (unsigned long long) dev_cap->max_icm_sz >> 20); |
921 | mlx4_dbg(dev, "Max QPs: %d, reserved QPs: %d, entry size: %d\n", | 930 | mlx4_dbg(dev, "Max QPs: %d, reserved QPs: %d, entry size: %d\n", |
@@ -949,13 +958,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
949 | dev_cap->dmfs_high_rate_qpn_base); | 958 | dev_cap->dmfs_high_rate_qpn_base); |
950 | mlx4_dbg(dev, "DMFS high rate steer QPn range: %d\n", | 959 | mlx4_dbg(dev, "DMFS high rate steer QPn range: %d\n", |
951 | dev_cap->dmfs_high_rate_qpn_range); | 960 | dev_cap->dmfs_high_rate_qpn_range); |
952 | |||
953 | dump_dev_cap_flags(dev, dev_cap->flags); | 961 | dump_dev_cap_flags(dev, dev_cap->flags); |
954 | dump_dev_cap_flags2(dev, dev_cap->flags2); | 962 | dump_dev_cap_flags2(dev, dev_cap->flags2); |
955 | |||
956 | out: | ||
957 | mlx4_free_cmd_mailbox(dev, mailbox); | ||
958 | return err; | ||
959 | } | 963 | } |
960 | 964 | ||
961 | int mlx4_QUERY_PORT(struct mlx4_dev *dev, int port, struct mlx4_port_cap *port_cap) | 965 | int mlx4_QUERY_PORT(struct mlx4_dev *dev, int port, struct mlx4_port_cap *port_cap) |
diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.h b/drivers/net/ethernet/mellanox/mlx4/fw.h index 794e2826609a..62562b60fa87 100644 --- a/drivers/net/ethernet/mellanox/mlx4/fw.h +++ b/drivers/net/ethernet/mellanox/mlx4/fw.h | |||
@@ -224,6 +224,7 @@ struct mlx4_set_ib_param { | |||
224 | u32 cap_mask; | 224 | u32 cap_mask; |
225 | }; | 225 | }; |
226 | 226 | ||
227 | void mlx4_dev_cap_dump(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap); | ||
227 | int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap); | 228 | int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap); |
228 | int mlx4_QUERY_PORT(struct mlx4_dev *dev, int port, struct mlx4_port_cap *port_cap); | 229 | int mlx4_QUERY_PORT(struct mlx4_dev *dev, int port, struct mlx4_port_cap *port_cap); |
229 | int mlx4_QUERY_FUNC_CAP(struct mlx4_dev *dev, u8 gen_or_port, | 230 | int mlx4_QUERY_FUNC_CAP(struct mlx4_dev *dev, u8 gen_or_port, |
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index c2ef266ad7c1..b935bf3d0bb3 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c | |||
@@ -305,6 +305,7 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
305 | mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting\n"); | 305 | mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting\n"); |
306 | return err; | 306 | return err; |
307 | } | 307 | } |
308 | mlx4_dev_cap_dump(dev, dev_cap); | ||
308 | 309 | ||
309 | if (dev_cap->min_page_sz > PAGE_SIZE) { | 310 | if (dev_cap->min_page_sz > PAGE_SIZE) { |
310 | mlx4_err(dev, "HCA minimum page size of %d bigger than kernel PAGE_SIZE of %ld, aborting\n", | 311 | mlx4_err(dev, "HCA minimum page size of %d bigger than kernel PAGE_SIZE of %ld, aborting\n", |