diff options
author | Vasundhara Volam <vasundhara-v.volam@broadcom.com> | 2018-12-16 18:46:21 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-12-18 02:08:53 -0500 |
commit | c027c6b4e91f21dfa4feab91e2155c8403f49f5c (patch) | |
tree | 7e9eb27bce322cbd6a40836ba6a0ff70cec489e4 /drivers/net/ethernet/broadcom | |
parent | e916b0815a11c6cbc82f2d8510982ea022628880 (diff) |
bnxt_en: get rid of num_stat_ctxs variable
For bnxt_en driver, stat_ctxs created will always be same as
cp_nr_rings. Remove extra variable that duplicates the value.
Also introduce bnxt_get_avail_stat_ctxs_for_en() helper to get
available stat_ctxs and bnxt_get_ulp_stat_ctxs() helper to return
number of stat_ctxs used by RDMA.
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.c | 14 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.h | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 1 |
7 files changed, 25 insertions, 16 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index bf228cf10bb3..8d6c811b5428 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | |||
@@ -7081,6 +7081,15 @@ unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp) | |||
7081 | return cp - bp->cp_nr_rings; | 7081 | return cp - bp->cp_nr_rings; |
7082 | } | 7082 | } |
7083 | 7083 | ||
7084 | unsigned int bnxt_get_avail_stat_ctxs_for_en(struct bnxt *bp) | ||
7085 | { | ||
7086 | unsigned int stat; | ||
7087 | |||
7088 | stat = bnxt_get_max_func_stat_ctxs(bp) - bnxt_get_ulp_stat_ctxs(bp); | ||
7089 | stat -= bp->cp_nr_rings; | ||
7090 | return stat; | ||
7091 | } | ||
7092 | |||
7084 | int bnxt_get_avail_msix(struct bnxt *bp, int num) | 7093 | int bnxt_get_avail_msix(struct bnxt *bp, int num) |
7085 | { | 7094 | { |
7086 | int max_cp = bnxt_get_max_func_cp_rings(bp); | 7095 | int max_cp = bnxt_get_max_func_cp_rings(bp); |
@@ -7242,7 +7251,6 @@ int bnxt_reserve_rings(struct bnxt *bp) | |||
7242 | bp->tx_nr_rings_per_tc = bp->tx_nr_rings; | 7251 | bp->tx_nr_rings_per_tc = bp->tx_nr_rings; |
7243 | return -ENOMEM; | 7252 | return -ENOMEM; |
7244 | } | 7253 | } |
7245 | bp->num_stat_ctxs = bp->cp_nr_rings; | ||
7246 | return 0; | 7254 | return 0; |
7247 | } | 7255 | } |
7248 | 7256 | ||
@@ -9309,7 +9317,6 @@ int bnxt_setup_mq_tc(struct net_device *dev, u8 tc) | |||
9309 | bp->tx_nr_rings += bp->tx_nr_rings_xdp; | 9317 | bp->tx_nr_rings += bp->tx_nr_rings_xdp; |
9310 | bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) : | 9318 | bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) : |
9311 | bp->tx_nr_rings + bp->rx_nr_rings; | 9319 | bp->tx_nr_rings + bp->rx_nr_rings; |
9312 | bp->num_stat_ctxs = bp->cp_nr_rings; | ||
9313 | 9320 | ||
9314 | if (netif_running(bp->dev)) | 9321 | if (netif_running(bp->dev)) |
9315 | return bnxt_open_nic(bp, true, false); | 9322 | return bnxt_open_nic(bp, true, false); |
@@ -9849,7 +9856,7 @@ static void _bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx, | |||
9849 | *max_cp = bnxt_get_max_func_cp_rings_for_en(bp); | 9856 | *max_cp = bnxt_get_max_func_cp_rings_for_en(bp); |
9850 | max_irq = min_t(int, bnxt_get_max_func_irqs(bp) - | 9857 | max_irq = min_t(int, bnxt_get_max_func_irqs(bp) - |
9851 | bnxt_get_ulp_msix_num(bp), | 9858 | bnxt_get_ulp_msix_num(bp), |
9852 | bnxt_get_max_func_stat_ctxs(bp)); | 9859 | hw_resc->max_stat_ctxs - bnxt_get_ulp_stat_ctxs(bp)); |
9853 | if (!(bp->flags & BNXT_FLAG_CHIP_P5)) | 9860 | if (!(bp->flags & BNXT_FLAG_CHIP_P5)) |
9854 | *max_cp = min_t(int, *max_cp, max_irq); | 9861 | *max_cp = min_t(int, *max_cp, max_irq); |
9855 | max_ring_grps = hw_resc->max_hw_ring_grps; | 9862 | max_ring_grps = hw_resc->max_hw_ring_grps; |
@@ -9980,7 +9987,6 @@ static int bnxt_set_dflt_rings(struct bnxt *bp, bool sh) | |||
9980 | netdev_warn(bp->dev, "2nd rings reservation failed.\n"); | 9987 | netdev_warn(bp->dev, "2nd rings reservation failed.\n"); |
9981 | bp->tx_nr_rings_per_tc = bp->tx_nr_rings; | 9988 | bp->tx_nr_rings_per_tc = bp->tx_nr_rings; |
9982 | } | 9989 | } |
9983 | bp->num_stat_ctxs = bp->cp_nr_rings; | ||
9984 | if (BNXT_CHIP_TYPE_NITRO_A0(bp)) { | 9990 | if (BNXT_CHIP_TYPE_NITRO_A0(bp)) { |
9985 | bp->rx_nr_rings++; | 9991 | bp->rx_nr_rings++; |
9986 | bp->cp_nr_rings++; | 9992 | bp->cp_nr_rings++; |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index adce7fb37148..df9a80973258 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h | |||
@@ -1417,8 +1417,6 @@ struct bnxt { | |||
1417 | int cp_nr_pages; | 1417 | int cp_nr_pages; |
1418 | int cp_nr_rings; | 1418 | int cp_nr_rings; |
1419 | 1419 | ||
1420 | int num_stat_ctxs; | ||
1421 | |||
1422 | /* grp_info indexed by completion ring index */ | 1420 | /* grp_info indexed by completion ring index */ |
1423 | struct bnxt_ring_grp_info *grp_info; | 1421 | struct bnxt_ring_grp_info *grp_info; |
1424 | struct bnxt_vnic_info *vnic_info; | 1422 | struct bnxt_vnic_info *vnic_info; |
@@ -1690,6 +1688,7 @@ int __bnxt_hwrm_get_tx_rings(struct bnxt *bp, u16 fid, int *tx_rings); | |||
1690 | int bnxt_hwrm_set_coal(struct bnxt *); | 1688 | int bnxt_hwrm_set_coal(struct bnxt *); |
1691 | unsigned int bnxt_get_max_func_stat_ctxs(struct bnxt *bp); | 1689 | unsigned int bnxt_get_max_func_stat_ctxs(struct bnxt *bp); |
1692 | void bnxt_set_max_func_stat_ctxs(struct bnxt *bp, unsigned int max); | 1690 | void bnxt_set_max_func_stat_ctxs(struct bnxt *bp, unsigned int max); |
1691 | unsigned int bnxt_get_avail_stat_ctxs_for_en(struct bnxt *bp); | ||
1693 | unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp); | 1692 | unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp); |
1694 | unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp); | 1693 | unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp); |
1695 | int bnxt_get_avail_msix(struct bnxt *bp, int num); | 1694 | int bnxt_get_avail_msix(struct bnxt *bp, int num); |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index 6cc69a58478a..5a746aed7f3c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | |||
@@ -663,8 +663,6 @@ static int bnxt_set_channels(struct net_device *dev, | |||
663 | bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) : | 663 | bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) : |
664 | bp->tx_nr_rings + bp->rx_nr_rings; | 664 | bp->tx_nr_rings + bp->rx_nr_rings; |
665 | 665 | ||
666 | bp->num_stat_ctxs = bp->cp_nr_rings; | ||
667 | |||
668 | /* After changing number of rx channels, update NTUPLE feature. */ | 666 | /* After changing number of rx channels, update NTUPLE feature. */ |
669 | netdev_update_features(dev); | 667 | netdev_update_features(dev); |
670 | if (netif_running(dev)) { | 668 | if (netif_running(dev)) { |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c index 5a09f03b23e1..e7fdcb289072 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | |||
@@ -452,7 +452,7 @@ static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs) | |||
452 | bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_VF_RESOURCE_CFG, -1, -1); | 452 | bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_VF_RESOURCE_CFG, -1, -1); |
453 | 453 | ||
454 | vf_cp_rings = bnxt_get_avail_cp_rings_for_en(bp); | 454 | vf_cp_rings = bnxt_get_avail_cp_rings_for_en(bp); |
455 | vf_stat_ctx = hw_resc->max_stat_ctxs - bp->num_stat_ctxs; | 455 | vf_stat_ctx = bnxt_get_avail_stat_ctxs_for_en(bp); |
456 | if (bp->flags & BNXT_FLAG_AGG_RINGS) | 456 | if (bp->flags & BNXT_FLAG_AGG_RINGS) |
457 | vf_rx_rings = hw_resc->max_rx_rings - bp->rx_nr_rings * 2; | 457 | vf_rx_rings = hw_resc->max_rx_rings - bp->rx_nr_rings * 2; |
458 | else | 458 | else |
@@ -539,18 +539,16 @@ static int bnxt_hwrm_func_cfg(struct bnxt *bp, int num_vfs) | |||
539 | u32 rc = 0, mtu, i; | 539 | u32 rc = 0, mtu, i; |
540 | u16 vf_tx_rings, vf_rx_rings, vf_cp_rings, vf_stat_ctx, vf_vnics; | 540 | u16 vf_tx_rings, vf_rx_rings, vf_cp_rings, vf_stat_ctx, vf_vnics; |
541 | struct bnxt_hw_resc *hw_resc = &bp->hw_resc; | 541 | struct bnxt_hw_resc *hw_resc = &bp->hw_resc; |
542 | u16 vf_ring_grps, max_stat_ctxs; | ||
543 | struct hwrm_func_cfg_input req = {0}; | 542 | struct hwrm_func_cfg_input req = {0}; |
544 | struct bnxt_pf_info *pf = &bp->pf; | 543 | struct bnxt_pf_info *pf = &bp->pf; |
545 | int total_vf_tx_rings = 0; | 544 | int total_vf_tx_rings = 0; |
545 | u16 vf_ring_grps; | ||
546 | 546 | ||
547 | bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1); | 547 | bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1); |
548 | 548 | ||
549 | max_stat_ctxs = hw_resc->max_stat_ctxs; | ||
550 | |||
551 | /* Remaining rings are distributed equally amongs VF's for now */ | 549 | /* Remaining rings are distributed equally amongs VF's for now */ |
552 | vf_cp_rings = bnxt_get_avail_cp_rings_for_en(bp) / num_vfs; | 550 | vf_cp_rings = bnxt_get_avail_cp_rings_for_en(bp) / num_vfs; |
553 | vf_stat_ctx = (max_stat_ctxs - bp->num_stat_ctxs) / num_vfs; | 551 | vf_stat_ctx = bnxt_get_avail_stat_ctxs_for_en(bp) / num_vfs; |
554 | if (bp->flags & BNXT_FLAG_AGG_RINGS) | 552 | if (bp->flags & BNXT_FLAG_AGG_RINGS) |
555 | vf_rx_rings = (hw_resc->max_rx_rings - bp->rx_nr_rings * 2) / | 553 | vf_rx_rings = (hw_resc->max_rx_rings - bp->rx_nr_rings * 2) / |
556 | num_vfs; | 554 | num_vfs; |
@@ -644,7 +642,7 @@ static int bnxt_sriov_enable(struct bnxt *bp, int *num_vfs) | |||
644 | vfs_supported = *num_vfs; | 642 | vfs_supported = *num_vfs; |
645 | 643 | ||
646 | avail_cp = bnxt_get_avail_cp_rings_for_en(bp); | 644 | avail_cp = bnxt_get_avail_cp_rings_for_en(bp); |
647 | avail_stat = hw_resc->max_stat_ctxs - bp->num_stat_ctxs; | 645 | avail_stat = bnxt_get_avail_stat_ctxs_for_en(bp); |
648 | avail_cp = min_t(int, avail_cp, avail_stat); | 646 | avail_cp = min_t(int, avail_cp, avail_stat); |
649 | 647 | ||
650 | while (vfs_supported) { | 648 | while (vfs_supported) { |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c index 0a3097baafde..8ef71a001ebc 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | |||
@@ -48,7 +48,7 @@ static int bnxt_register_dev(struct bnxt_en_dev *edev, int ulp_id, | |||
48 | 48 | ||
49 | max_stat_ctxs = bnxt_get_max_func_stat_ctxs(bp); | 49 | max_stat_ctxs = bnxt_get_max_func_stat_ctxs(bp); |
50 | if (max_stat_ctxs <= BNXT_MIN_ROCE_STAT_CTXS || | 50 | if (max_stat_ctxs <= BNXT_MIN_ROCE_STAT_CTXS || |
51 | bp->num_stat_ctxs == max_stat_ctxs) | 51 | bp->cp_nr_rings == max_stat_ctxs) |
52 | return -ENOMEM; | 52 | return -ENOMEM; |
53 | bnxt_set_max_func_stat_ctxs(bp, max_stat_ctxs - | 53 | bnxt_set_max_func_stat_ctxs(bp, max_stat_ctxs - |
54 | BNXT_MIN_ROCE_STAT_CTXS); | 54 | BNXT_MIN_ROCE_STAT_CTXS); |
@@ -218,6 +218,14 @@ int bnxt_get_ulp_msix_base(struct bnxt *bp) | |||
218 | return 0; | 218 | return 0; |
219 | } | 219 | } |
220 | 220 | ||
221 | int bnxt_get_ulp_stat_ctxs(struct bnxt *bp) | ||
222 | { | ||
223 | if (bnxt_ulp_registered(bp->edev, BNXT_ROCE_ULP)) | ||
224 | return BNXT_MIN_ROCE_STAT_CTXS; | ||
225 | |||
226 | return 0; | ||
227 | } | ||
228 | |||
221 | static int bnxt_send_msg(struct bnxt_en_dev *edev, int ulp_id, | 229 | static int bnxt_send_msg(struct bnxt_en_dev *edev, int ulp_id, |
222 | struct bnxt_fw_msg *fw_msg) | 230 | struct bnxt_fw_msg *fw_msg) |
223 | { | 231 | { |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h index d9bea37cd211..cd78453d0bf0 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h | |||
@@ -90,6 +90,7 @@ static inline bool bnxt_ulp_registered(struct bnxt_en_dev *edev, int ulp_id) | |||
90 | 90 | ||
91 | int bnxt_get_ulp_msix_num(struct bnxt *bp); | 91 | int bnxt_get_ulp_msix_num(struct bnxt *bp); |
92 | int bnxt_get_ulp_msix_base(struct bnxt *bp); | 92 | int bnxt_get_ulp_msix_base(struct bnxt *bp); |
93 | int bnxt_get_ulp_stat_ctxs(struct bnxt *bp); | ||
93 | void bnxt_ulp_stop(struct bnxt *bp); | 94 | void bnxt_ulp_stop(struct bnxt *bp); |
94 | void bnxt_ulp_start(struct bnxt *bp); | 95 | void bnxt_ulp_start(struct bnxt *bp); |
95 | void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs); | 96 | void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs); |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c index bf6de02be396..0184ef6f05a7 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | |||
@@ -199,7 +199,6 @@ static int bnxt_xdp_set(struct bnxt *bp, struct bpf_prog *prog) | |||
199 | bp->tx_nr_rings_xdp = tx_xdp; | 199 | bp->tx_nr_rings_xdp = tx_xdp; |
200 | bp->tx_nr_rings = bp->tx_nr_rings_per_tc * tc + tx_xdp; | 200 | bp->tx_nr_rings = bp->tx_nr_rings_per_tc * tc + tx_xdp; |
201 | bp->cp_nr_rings = max_t(int, bp->tx_nr_rings, bp->rx_nr_rings); | 201 | bp->cp_nr_rings = max_t(int, bp->tx_nr_rings, bp->rx_nr_rings); |
202 | bp->num_stat_ctxs = bp->cp_nr_rings; | ||
203 | bnxt_set_tpa_flags(bp); | 202 | bnxt_set_tpa_flags(bp); |
204 | bnxt_set_ring_params(bp); | 203 | bnxt_set_ring_params(bp); |
205 | 204 | ||