Message ID | 20210626003314.3159402-12-vinicius.gomes@intel.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ethtool: Add support for frame preemption | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | warning | 2 maintainers not CCed: davem@davemloft.net jesse.brandeburg@intel.com |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 26 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
On Fri, Jun 25, 2021 at 05:33:13PM -0700, Vinicius Costa Gomes wrote: > Frame Preemption and LaunchTime cannot be enabled on the same queue. > If that situation happens, emit an error to the user, and log the > error. > > Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> > --- This is a very interesting limitation, considering the fact that much of the frame preemption validation that I did was in conjunction with tc-etf and SO_TXTIME (send packets on 2 queues, one preemptible and one express, and compare the TX timestamps of the express packets with their scheduled TX times). The base-time offset between the ET and the PT packets is varied in small increments in the order of 20 ns or so. If this is not possible with hardware driven by igc, how do you know it works properly? :)
Vladimir Oltean <vladimir.oltean@nxp.com> writes: > On Fri, Jun 25, 2021 at 05:33:13PM -0700, Vinicius Costa Gomes wrote: >> Frame Preemption and LaunchTime cannot be enabled on the same queue. >> If that situation happens, emit an error to the user, and log the >> error. >> >> Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> >> --- > > This is a very interesting limitation, considering the fact that much of > the frame preemption validation that I did was in conjunction with > tc-etf and SO_TXTIME (send packets on 2 queues, one preemptible and one > express, and compare the TX timestamps of the express packets with their > scheduled TX times). The base-time offset between the ET and the PT > packets is varied in small increments in the order of 20 ns or so. > If this is not possible with hardware driven by igc, how do you know it > works properly? :) Good question. My tests were much less accurate than what you were doing, I was basically flooding the link with preemptable packets, and sending some number of express packets, and counting them using some debug counters on the receiving side. Cheers,
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index 038383519b10..20dac04a02f2 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -5432,6 +5432,11 @@ static int igc_save_launchtime_params(struct igc_adapter *adapter, int queue, if (queue < 0 || queue >= adapter->num_tx_queues) return -EINVAL; + if (ring->preemptible) { + netdev_err(adapter->netdev, "Cannot enable LaunchTime on a preemptible queue\n"); + return -EINVAL; + } + ring = adapter->tx_ring[queue]; ring->launchtime_enable = enable; @@ -5573,8 +5578,14 @@ static int igc_save_frame_preemption(struct igc_adapter *adapter, for (i = 0; i < adapter->num_tx_queues; i++) { struct igc_ring *ring = adapter->tx_ring[i]; + bool preemptible = preempt & BIT(i); - ring->preemptible = preempt & BIT(i); + if (ring->launchtime_enable && preemptible) { + netdev_err(adapter->netdev, "Cannot set queue as preemptible if LaunchTime is enabled\n"); + return -EINVAL; + } + + ring->preemptible = preemptible; } return 0;
Frame Preemption and LaunchTime cannot be enabled on the same queue. If that situation happens, emit an error to the user, and log the error. Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> --- drivers/net/ethernet/intel/igc/igc_main.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)