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~885 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=8cac1300f2d0dd18b2104ccc20aa00ca237343e1;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 --- diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index 668a578c49e9b..f5328bf6610d5 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h @@ -1054,6 +1054,7 @@ struct bnx2x { u32 vn_weight_sum; u32 mf_config[E1HVN_MAX]; + bool prev_max_cfg_invalid[E1HVN_MAX]; u32 mf2_config[E2_FUNC_MAX]; u16 mf_ov; u8 mf_mode; diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c index 289044332ed81..c1c58440a4e92 100644 --- a/drivers/net/bnx2x/bnx2x_cmn.c +++ b/drivers/net/bnx2x/bnx2x_cmn.c @@ -785,8 +785,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 @@ -1090,7 +1089,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 1a3545bd8a929..0e044e1543406 100644 --- a/drivers/net/bnx2x/bnx2x_cmn.h +++ b/drivers/net/bnx2x/bnx2x_cmn.h @@ -1111,22 +1111,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 74be989f51c5f..680bcb4f49e57 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c @@ -1968,7 +1968,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;