Message ID | 20180331000652.2855-1-vinicius.gomes@intel.com |
---|---|
State | Accepted |
Delegated to: | Jeff Kirsher |
Headers | show |
Series | [next-queue] igb: Fix the transmission mode of queue 0 for Qav mode | expand |
> From: netdev-owner@vger.kernel.org [mailto:netdev- > owner@vger.kernel.org] On Behalf Of Vinicius Costa Gomes > Sent: Friday, March 30, 2018 5:07 PM > To: intel-wired-lan@lists.osuosl.org > Cc: Gomes, Vinicius <vinicius.gomes@intel.com>; Kirsher, Jeffrey T > <jeffrey.t.kirsher@intel.com>; netdev@vger.kernel.org; Sanchez-Palencia, > Jesus <jesus.sanchez-palencia@intel.com>; Guedes, Andre > <andre.guedes@intel.com> > Subject: [next-queue PATCH] igb: Fix the transmission mode of queue 0 for > Qav mode > > When Qav mode is enabled, queue 0 should be kept on Stream Reservation > mode. From the i210 datasheet, section 8.12.19: > > "Note: Queue0 QueueMode must be set to 1b when TransmitMode is set to > Qav." ("QueueMode 1b" represents the Stream Reservation mode) > > The solution is to give queue 0 the all the credits it might need, so > it has priority over queue 1. > > A situation where this can happen is when cbs is "installed" only on > queue 1, leaving queue 0 alone. For example: > > $ tc qdisc replace dev enp2s0 handle 100: parent root mqprio num_tc 3 \ > map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@1 2@2 hw 0 > > $ tc qdisc replace dev enp2s0 parent 100:2 cbs locredit -1470 \ > hicredit 30 sendslope -980000 idleslope 20000 offload 1 > > Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> > --- > drivers/net/ethernet/intel/igb/igb_main.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > Tested by: Aaron Brown <aaron.f.brown@intel.com>
> From: Brown, Aaron F > Sent: Friday, April 13, 2018 7:28 PM > To: 'Vinicius Costa Gomes' <vinicius.gomes@intel.com>; intel-wired- > lan@lists.osuosl.org > Cc: Gomes, Vinicius <vinicius.gomes@intel.com>; Kirsher, Jeffrey T > <jeffrey.t.kirsher@intel.com>; netdev@vger.kernel.org; Sanchez-Palencia, > Jesus <jesus.sanchez-palencia@intel.com>; Guedes, Andre > <andre.guedes@intel.com> > Subject: RE: [next-queue PATCH] igb: Fix the transmission mode of queue 0 > for Qav mode > > > From: netdev-owner@vger.kernel.org [mailto:netdev- > > owner@vger.kernel.org] On Behalf Of Vinicius Costa Gomes > > Sent: Friday, March 30, 2018 5:07 PM > > To: intel-wired-lan@lists.osuosl.org > > Cc: Gomes, Vinicius <vinicius.gomes@intel.com>; Kirsher, Jeffrey T > > <jeffrey.t.kirsher@intel.com>; netdev@vger.kernel.org; Sanchez-Palencia, > > Jesus <jesus.sanchez-palencia@intel.com>; Guedes, Andre > > <andre.guedes@intel.com> > > Subject: [next-queue PATCH] igb: Fix the transmission mode of queue 0 for > > Qav mode > > > > When Qav mode is enabled, queue 0 should be kept on Stream > Reservation > > mode. From the i210 datasheet, section 8.12.19: > > > > "Note: Queue0 QueueMode must be set to 1b when TransmitMode is set > to > > Qav." ("QueueMode 1b" represents the Stream Reservation mode) > > > > The solution is to give queue 0 the all the credits it might need, so > > it has priority over queue 1. > > > > A situation where this can happen is when cbs is "installed" only on > > queue 1, leaving queue 0 alone. For example: > > > > $ tc qdisc replace dev enp2s0 handle 100: parent root mqprio num_tc 3 \ > > map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@1 2@2 hw 0 > > > > $ tc qdisc replace dev enp2s0 parent 100:2 cbs locredit -1470 \ > > hicredit 30 sendslope -980000 idleslope 20000 offload 1 > > > > Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> > > --- > > drivers/net/ethernet/intel/igb/igb_main.c | 17 ++++++++++++++++- > > 1 file changed, 16 insertions(+), 1 deletion(-) > > > > Tested by: Aaron Brown <aaron.f.brown@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com>
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index c1c0bc30a16d..cce7ada89255 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -1700,7 +1700,22 @@ static void igb_configure_cbs(struct igb_adapter *adapter, int queue, WARN_ON(hw->mac.type != e1000_i210); WARN_ON(queue < 0 || queue > 1); - if (enable) { + if (enable || queue == 0) { + /* i210 does not allow the queue 0 to be in the Strict + * Priority mode while the Qav mode is enabled, so, + * instead of disabling strict priority mode, we give + * queue 0 the maximum of credits possible. + * + * See section 8.12.19 of the i210 datasheet, "Note: + * Queue0 QueueMode must be set to 1b when + * TransmitMode is set to Qav." + */ + if (queue == 0 && !enable) { + /* max "linkspeed" idleslope in kbps */ + idleslope = 1000000; + hicredit = ETH_FRAME_LEN; + } + set_tx_desc_fetch_prio(hw, queue, TX_QUEUE_PRIO_HIGH); set_queue_mode(hw, queue, QUEUE_MODE_STREAM_RESERVATION);
When Qav mode is enabled, queue 0 should be kept on Stream Reservation mode. From the i210 datasheet, section 8.12.19: "Note: Queue0 QueueMode must be set to 1b when TransmitMode is set to Qav." ("QueueMode 1b" represents the Stream Reservation mode) The solution is to give queue 0 the all the credits it might need, so it has priority over queue 1. A situation where this can happen is when cbs is "installed" only on queue 1, leaving queue 0 alone. For example: $ tc qdisc replace dev enp2s0 handle 100: parent root mqprio num_tc 3 \ map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@1 2@2 hw 0 $ tc qdisc replace dev enp2s0 parent 100:2 cbs locredit -1470 \ hicredit 30 sendslope -980000 idleslope 20000 offload 1 Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> --- drivers/net/ethernet/intel/igb/igb_main.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)