On 09/02/2015 11:16 PM, Ivan Khoronzhuk wrote: > > > On 02.09.15 12:42, Nicolas Morey-Chaisemartin wrote: >> >> On 08/26/2015 05:47 PM, Ivan Khoronzhuk wrote: >>> >>> >>> On 26.08.15 18:22, Stuart Haslam wrote: >>>> On Wed, Aug 26, 2015 at 06:11:13PM +0300, Ivan Khoronzhuk wrote: >>>>> It's needed because time resolution can be a little more than 1ns >>>>> and in this case odp_schedule_wait_time(1) returns 0, and test >>>>> generates warn w/o reason. So increase scheduler wait time check >>>>> from 1ns to 100ns. >>>>> >>>>> It's hard to imagine time source with resolution more than 100ns, >>>>> so every implementation can return positive value from >>>>> odp_schedule_wait_time(). In case if resolution is more than 100ns >>>>> it's normal to warn about it at validation stage, >>>>> >>>> >>>> The wait parameter is documented as the *minimum* time to wait for an >>>> event so the existing check looks OK to me. Implementations with a lower >>>> resolution should round up. >>>> >>> >>> It defined as "minimum" time to wait for odp_schedule and others, >>> for odp_schedule_wait_time() it's not defined as minimum, it's simple >>> convert function. >>> >>> Not shure, but any of the functions I saw in linux-generic doesn't round >>> ticks up. >>> It seems that it was decided to allow application to do it, if needed. >>> >>> But if so, we have much more to change ). >>> >>> In case if you are right, linux-generic implementation should be corrected, >>> as it doesn't round it up. >>> >>> Thanks. >>> >> I ran into this issue with our port as our clock are < 1GHz. >> So 1 ns is < 1 cycle which tends to break a few things on the linux generic >> port. >> >> I fix this particular issue like this: >> uint64_t odp_schedule_wait_time(uint64_t ns) >> { >> uint64_t cycle = odp_time_ns_to_cycles(ns); >> if(cycle == 0) >> cycle = 1; >> return cycle; >> } >> >> Not the nicest patch but it works. >> The test should probably be changed to if(ns && !cycle) so ns=0 returns 0; > Yes. > > As said Stuart it may cause collisions with ODP_SCHED_WAIT (0) > and ODP_SCHED_NO_WAIT (1) > > I will correct it a little later. > I don't think the collision with ODP_SCHED_NO_WAIT is too bad. We only fall into this case if a cycle is larger than 1 ns so waiting not waiting or waiting less thana cycle is close to the same thing.
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp