This fixes orabug
12687487 and backported fixes for RHBZ 712000.
When a VN is configured to invalid Max BW, we only need to be told once.
Signed-off-by: Joe Jin <joe.jin@oracle.com>
Reported-by: Sriharsha Devdas <sriharsha.devdas@oracle.com>
(cherry picked from commit
8cac1300f2d0dd18b2104ccc20aa00ca237343e1)
struct cmng_struct_per_port cmng;
u32 vn_weight_sum;
u32 mf_config[E1HVN_MAX];
+ bool prev_max_cfg_invalid[E1HVN_MAX];
u32 mf2_config[E2_FUNC_MAX];
u32 path_has_ovlan; /* E3 */
u16 mf_ov;
{
u16 line_speed = bp->link_vars.line_speed;
if (IS_MF(bp)) {
- u16 maxCfg = bnx2x_extract_max_cfg(bp,
- bp->mf_config[BP_VN(bp)]);
+ u16 maxCfg = bnx2x_extract_max_cfg(bp, BP_VN(bp));
/* Calculate the current MAX line speed limit for the MF
* devices
/* load old values */
u32 mf_cfg = bp->mf_config[BP_VN(bp)];
- if (value != bnx2x_extract_max_cfg(bp, mf_cfg)) {
+ if (value != bnx2x_extract_max_cfg(bp, BP_VN(bp))) {
/* leave all but MAX value */
mf_cfg &= ~FUNC_MF_CFG_MAX_BW_MASK;
void bnx2x_release_phy_lock(struct bnx2x *bp);
/**
- * bnx2x_extract_max_cfg - extract MAX BW part from MF configuration.
- *
- * @bp: driver handle
- * @mf_cfg: MF configuration
- *
- */
-static inline u16 bnx2x_extract_max_cfg(struct bnx2x *bp, u32 mf_cfg)
+ * bnx2x_extract_max_cfg - extract MAX BW part from MF configuration.
+ *
+ * @bp: driver handle
+ * @vn: vnic index
+ *
+ */
+static inline u16 bnx2x_extract_max_cfg(struct bnx2x *bp, int vn)
{
- u16 max_cfg = (mf_cfg & FUNC_MF_CFG_MAX_BW_MASK) >>
- FUNC_MF_CFG_MAX_BW_SHIFT;
- if (!max_cfg) {
- BNX2X_ERR("Illegal configuration detected for Max BW - "
- "using 100 instead\n");
- max_cfg = 100;
- }
- return max_cfg;
+ u16 max_cfg = (bp->mf_config[vn] & FUNC_MF_CFG_MAX_BW_MASK) >>
+ FUNC_MF_CFG_MAX_BW_SHIFT;
+
+ if (!max_cfg && !bp->prev_max_cfg_invalid[vn])
+ BNX2X_ERR("Illegal configuration detected for Max BW "
+ "on vn %d - using 100 instead\n", vn);
+ bp->prev_max_cfg_invalid[vn] = !max_cfg;
+
+ return max_cfg ?: 100;
}
#endif /* BNX2X_CMN_H */
vn_max_rate = 0;
} else {
- u32 maxCfg = bnx2x_extract_max_cfg(bp, vn_cfg);
+ u32 maxCfg = bnx2x_extract_max_cfg(bp, vn);
vn_min_rate = ((vn_cfg & FUNC_MF_CFG_MIN_BW_MASK) >>
FUNC_MF_CFG_MIN_BW_SHIFT) * 100;