ixgbe: Use num_tcs.pg_tcs as upper limit for TC when checking based on UP
[firefly-linux-kernel-4.4.55.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_dcb.c
index 5442b359141e256455a9c9aa41858c884343b697..9bc17c0cb97207a9dd7eee14c3d1721a65b3c1bf 100644 (file)
@@ -232,18 +232,22 @@ u8 ixgbe_dcb_get_tc_from_up(struct ixgbe_dcb_config *cfg, int direction, u8 up)
 {
        struct tc_configuration *tc_config = &cfg->tc_config[0];
        u8 prio_mask = 1 << up;
-       u8 tc;
+       u8 tc = cfg->num_tcs.pg_tcs;
+
+       /* If tc is 0 then DCB is likely not enabled or supported */
+       if (!tc)
+               goto out;
 
        /*
-        * Test for TCs 7 through 1 and report the first match we find.  If
+        * Test from maximum TC to 1 and report the first match we find.  If
         * we find no match we can assume that the TC is 0 since the TC must
         * be set for all user priorities
         */
-       for (tc = MAX_TRAFFIC_CLASS - 1; tc; tc--) {
+       for (tc--; tc; tc--) {
                if (prio_mask & tc_config[tc].path[direction].up_to_tc_bitmap)
                        break;
        }
-
+out:
        return tc;
 }