From: Joe Jin Date: Tue, 27 Sep 2011 07:17:10 +0000 (+0800) Subject: bnx2x: prevent flooded warnning kernel info X-Git-Tag: v2.6.39-400.9.0~615^2~2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ad4ab8219259919c36f0ee60687e82519a23b987;p=users%2Fjedix%2Flinux-maple.git bnx2x: prevent flooded warnning kernel info 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 Reported-by: Sriharsha Devdas (cherry picked from commit 8cac1300f2d0dd18b2104ccc20aa00ca237343e1) --- diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index 69fc7280be30..05e29368dc7a 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h @@ -1182,6 +1182,7 @@ struct bnx2x { 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; diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c index 9137b0afa5a6..9327fcdf7915 100644 --- a/drivers/net/bnx2x/bnx2x_cmn.c +++ b/drivers/net/bnx2x/bnx2x_cmn.c @@ -818,8 +818,7 @@ u16 bnx2x_get_mf_speed(struct bnx2x *bp) { 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 @@ -1125,7 +1124,7 @@ void bnx2x_update_max_mf_config(struct bnx2x *bp, u32 value) /* 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; diff --git a/drivers/net/bnx2x/bnx2x_cmn.h b/drivers/net/bnx2x/bnx2x_cmn.h index 057d9826555a..5da42d70944a 100644 --- a/drivers/net/bnx2x/bnx2x_cmn.h +++ b/drivers/net/bnx2x/bnx2x_cmn.h @@ -1438,22 +1438,23 @@ void bnx2x_acquire_phy_lock(struct bnx2x *bp); 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 */ diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c index 1bfd57c231d0..9901dd26baa5 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c @@ -2297,7 +2297,7 @@ static void bnx2x_init_vn_minmax(struct bnx2x *bp, int vn) 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;