From: Leon Romanovsky <leon@kernel.org>
To: Florian Kauer <florian.kauer@linutronix.de>
Cc: Tony Nguyen <anthony.l.nguyen@intel.com>,
davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com,
edumazet@google.com, netdev@vger.kernel.org, kurt@linutronix.de,
vinicius.gomes@intel.com, muhammad.husaini.zulkifli@intel.com,
tee.min.tan@linux.intel.com, aravindhan.gunasekaran@intel.com,
sasha.neftin@intel.com, Naama Meir <naamax.meir@linux.intel.com>
Subject: Re: [PATCH net 5/6] igc: Fix launchtime before start of cycle
Date: Tue, 11 Jul 2023 13:12:33 +0300 [thread overview]
Message-ID: <20230711101233.GM41919@unreal> (raw)
In-Reply-To: <7005af42-e546-6a7c-015f-037a5f0e08a9@linutronix.de>
On Tue, Jul 11, 2023 at 10:37:48AM +0200, Florian Kauer wrote:
> On 11.07.23 09:09, Leon Romanovsky wrote:
> > On Mon, Jul 10, 2023 at 09:35:02AM -0700, Tony Nguyen wrote:
> >> From: Florian Kauer <florian.kauer@linutronix.de>
> >>
> >> It is possible (verified on a running system) that frames are processed
> >> by igc_tx_launchtime with a txtime before the start of the cycle
> >> (baset_est).
> >>
> >> However, the result of txtime - baset_est is written into a u32,
> >> leading to a wrap around to a positive number. The following
> >> launchtime > 0 check will only branch to executing launchtime = 0
> >> if launchtime is already 0.
> >>
> >> Fix it by using a s32 before checking launchtime > 0.
> >>
> >> Fixes: db0b124f02ba ("igc: Enhance Qbv scheduling by using first flag bit")
> >> Signed-off-by: Florian Kauer <florian.kauer@linutronix.de>
> >> Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
> >> Tested-by: Naama Meir <naamax.meir@linux.intel.com>
> >> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> >> ---
> >> drivers/net/ethernet/intel/igc/igc_main.c | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
> >> index 5d24930fed8f..4855caa3bae4 100644
> >> --- a/drivers/net/ethernet/intel/igc/igc_main.c
> >> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
> >> @@ -1016,7 +1016,7 @@ static __le32 igc_tx_launchtime(struct igc_ring *ring, ktime_t txtime,
> >> ktime_t base_time = adapter->base_time;
> >> ktime_t now = ktime_get_clocktai();
> >> ktime_t baset_est, end_of_cycle;
> >> - u32 launchtime;
> >> + s32 launchtime;
> >
> > The rest of igc_tx_launchtime() function is very questionable,
> > as ktime_sub_ns() returns ktime_t which is s64.
> >
> > 1049 launchtime = ktime_sub_ns(txtime, baset_est);
> > 1050 if (launchtime > 0)
> > 1051 div_s64_rem(launchtime, cycle_time, &launchtime);
> > 1052 else
> > 1053 launchtime = 0;
> > 1054
> > 1055 return cpu_to_le32(launchtime);
> >
>
> If I understand correctly, ktime_sub_ns(txtime, baset_est) will only return
> something larger than s32 max if cycle_time is larger than s32 max and if that
> is the case everything will be broken anyway since the corresponding hardware
> register only holds 30 bits.
I suggest you to use proper variable types, what about the following
snippet?
ktime_t launchtime;
launchtime = ktime_sub_ns(txtime, baset_est);
WARN_ON(upper_32_bits(launchtime));
div_s64_rem(launchtime, cycle_time, &launchtime);
return cpu_to_le32(lower_32_bits(launchtime));
>
> However, I do not see on first inspection where that case is properly handled
> (probably just by rejecting the TAPRIO schedule).
>
> Can someone with more experience in that area please jump in?
>
> Thanks,
> Florian
>
> >
> >> s64 n;
> >>
> >> n = div64_s64(ktime_sub_ns(now, base_time), cycle_time);
> >> --
> >> 2.38.1
> >>
> >>
>
next prev parent reply other threads:[~2023-07-11 10:12 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-10 16:34 [PATCH net 0/6][pull request] igc: Fix corner cases for TSN offload Tony Nguyen
2023-07-10 16:34 ` [PATCH net 1/6] igc: Rename qbv_enable to taprio_offload_enable Tony Nguyen
2023-07-11 7:01 ` Leon Romanovsky
2023-07-11 7:18 ` Florian Kauer
2023-07-11 7:32 ` Leon Romanovsky
2023-07-11 7:51 ` Florian Kauer
2023-07-12 0:58 ` Jakub Kicinski
2023-07-12 6:53 ` Florian Kauer
2023-07-12 20:37 ` Tony Nguyen
2023-07-10 16:34 ` [PATCH net 2/6] igc: Do not enable taprio offload for invalid arguments Tony Nguyen
2023-07-11 7:03 ` Leon Romanovsky
2023-07-10 16:35 ` [PATCH net 3/6] igc: Handle already enabled taprio offload for basetime 0 Tony Nguyen
2023-07-11 7:03 ` Leon Romanovsky
2023-07-10 16:35 ` [PATCH net 4/6] igc: No strict mode in pure launchtime/CBS offload Tony Nguyen
2023-07-11 7:09 ` Leon Romanovsky
2023-07-10 16:35 ` [PATCH net 5/6] igc: Fix launchtime before start of cycle Tony Nguyen
2023-07-11 7:09 ` Leon Romanovsky
2023-07-11 8:37 ` Florian Kauer
2023-07-11 10:12 ` Leon Romanovsky [this message]
2023-07-12 0:54 ` Jakub Kicinski
2023-07-12 6:11 ` Leon Romanovsky
2023-07-10 16:35 ` [PATCH net 6/6] igc: Fix inserting of empty frame for launchtime Tony Nguyen
2023-07-11 7:11 ` Leon Romanovsky
2023-07-12 9:10 ` [PATCH net 0/6][pull request] igc: Fix corner cases for TSN offload patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230711101233.GM41919@unreal \
--to=leon@kernel.org \
--cc=anthony.l.nguyen@intel.com \
--cc=aravindhan.gunasekaran@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=florian.kauer@linutronix.de \
--cc=kuba@kernel.org \
--cc=kurt@linutronix.de \
--cc=muhammad.husaini.zulkifli@intel.com \
--cc=naamax.meir@linux.intel.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sasha.neftin@intel.com \
--cc=tee.min.tan@linux.intel.com \
--cc=vinicius.gomes@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.