• Faizal Rahim's avatar
    igc: Fix qbv_config_change_errors logics · f8d6acae
    Faizal Rahim authored
    When user issues these cmds:
    1. Either a) or b)
       a) mqprio with hardware offload disabled
       b) taprio with txtime-assist feature enabled
    2. etf
    3. tc qdisc delete
    4. taprio with base time in the past
    
    At step 4, qbv_config_change_errors wrongly increased by 1.
    
    Excerpt from IEEE 802.1Q-2018 8.6.9.3.1:
    "If AdminBaseTime specifies a time in the past, and the current schedule
    is running, then: Increment ConfigChangeError counter"
    
    qbv_config_change_errors should only increase if base time is in the past
    and no taprio is active. In user perspective, taprio was not active when
    first triggered at step 4. However, i225/6 reuses qbv for etf, so qbv is
    enabled with a dummy schedule at step 2 where it enters
    igc_tsn_enable_offload() and qbv_count got incremented to 1. At step 4, it
    enters igc_tsn_enable_offload() again, qbv_count is incremented to 2.
    Because taprio is running, tc_setup_type is TC_SETUP_QDISC_ETF and
    qbv_count > 1, qbv_config_change_errors value got incremented.
    
    This issue happens due to reliance on qbv_count field where a non-zero
    value indicates that taprio is running. But qbv_count increases
    regardless if taprio is triggered by user or by other tsn feature. It does
    not align with qbv_config_change_errors expectation where it is only
    concerned with taprio triggered by user.
    
    Fixing this by relocating the qbv_config_change_errors logic to
    igc_save_qbv_schedule(), eliminating reliance on qbv_count and its
    inaccuracies from i225/6's multiple uses of qbv feature for other TSN
    features.
    
    The new function created: igc_tsn_is_taprio_activated_by_user() uses
    taprio_offload_enable field to indicate that the current running taprio
    was triggered by user, instead of triggered by non-qbv feature like etf.
    
    Fixes: ae4fe469 ("igc: Add qbv_config_change_errors counter")
    Signed-off-by: default avatarFaizal Rahim <faizal.abdul.rahim@linux.intel.com>
    Reviewed-by: default avatarSimon Horman <horms@kernel.org>
    Acked-by: default avatarVinicius Costa Gomes <vinicius.gomes@intel.com>
    Tested-by: default avatarMor Bar-Gabay <morx.bar.gabay@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    f8d6acae
igc_main.c 191 KB