Kurt Kanzenbach <[email protected]> writes: > The Multi-queue Priority (MQPRIO) and Earliest TxTime First (ETF) offloads > utilize the Time Sensitive Networking (TSN) Tx mode. This mode is always > coupled to IEEE 802.1Qbv time aware shaper (Qbv). Therefore, the driver > sets a default Qbv schedule of all gates opened and a cycle time of > 1s. This schedule is set during probe. > > However, the following sequence of events lead to Tx issues: > > - Boot a dual core system > igc_probe(): > igc_tsn_clear_schedule(): > -> Default Schedule is set > Note: At this point the driver has allocated two Tx/Rx queues, because > there are only two CPUs. > > - ethtool -L enp3s0 combined 4 > igc_ethtool_set_channels(): > igc_reinit_queues() > -> Default schedule is gone, per Tx ring start and end time are zero > > - tc qdisc replace dev enp3s0 handle 100 parent root mqprio \ > num_tc 4 map 3 3 2 2 0 1 1 1 3 3 3 3 3 3 3 3 \ > queues 1@0 1@1 1@2 1@3 hw 1 > igc_tsn_offload_apply(): > igc_tsn_enable_offload(): > -> Writes zeros to IGC_STQT(i) and IGC_ENDQT(i), causing Tx to > stall/fail > > Therefore, restore the default Qbv schedule after changing the number of > channels. > > Furthermore, add a restriction to not allow queue reconfiguration when > TSN/Qbv is enabled, because it may lead to inconsistent states. > > Fixes: c814a2d2d48f ("igc: Use default cycle 'start' and 'end' values for > queues") > Signed-off-by: Kurt Kanzenbach <[email protected]> > --- > Changes in v3: > - Adjust commit message and comments (Aleksandr) > - Link to v2: > https://lore.kernel.org/r/[email protected] > > Changes in v2: > - Explain abbreviations (Aleksandr) > - Only clear schedule if no error happened (Aleksandr) > - Add restriction to avoid inconsistent states (Vinicius) > - Target net tree (Vinicius) > - Link to v1: > https://lore.kernel.org/r/[email protected] > ---
Acked-by: Vinicius Costa Gomes <[email protected]> Cheers, -- Vinicius
