]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bnx2x: prevent flooded warnning kernel info
authorJoe Jin <joe.jin@oracle.com>
Tue, 27 Sep 2011 07:17:10 +0000 (15:17 +0800)
committerBob Picco <bob.picco@oracle.com>
Fri, 3 Feb 2012 19:59:50 +0000 (14:59 -0500)
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)

drivers/net/bnx2x/bnx2x.h
drivers/net/bnx2x/bnx2x_cmn.c
drivers/net/bnx2x/bnx2x_cmn.h
drivers/net/bnx2x/bnx2x_main.c

index 69fc7280be303ecbb6d03dc837495beb5e4f6118..05e29368dc7a15a4e92723a2c0b7dbc5037027c1 100644 (file)
@@ -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;
index 9137b0afa5a6ae771e2609388cc2cb1e117a5e5d..9327fcdf79155279a75a19fad383c6a7b6ae6306 100644 (file)
@@ -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;
 
index 057d9826555a226288bf1596014d2588686e8362..5da42d70944aa53a95739bc769e0e49afa480c68 100644 (file)
@@ -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 */
index 1bfd57c231d0cd403dc46955674363f3c24d457b..9901dd26baa5534dbd5c1187a42156de5df8e4ee 100644 (file)
@@ -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;