On Tue 2020-05-05 15:51:16, Andy Shevchenko wrote: > On Tue, May 5, 2020 at 3:37 PM Pavel Machek <[email protected]> wrote: > > > So, to the point, the conditional of checking the thread to be stopped > > > being > > > first part of conjunction logic prevents to check iterations. Thus, we > > > have to > > > always check both conditions to be able to stop after given > > > iterations. > > > > I ... don't understand. AFAICT the code is equivalent. Both && and || > > operators permit "short" execution... but second part of expression > > has no sideeffects, so... > > .. > > > You are changing !a & !b into !(a | b). But that's equivalent > > expression. I hate to admit, but I had to draw truth table to prove > > that. ... > > What am I missing? > > Basic stuff. Compiler doesn't consider second part of conjunction when > first one (see operator precedence) is already false, so, it means: > > a & b > 0 x -> false > 1 0 -> false > 1 1 -> true > > x is not being considered at all. So, logically it's equivalent, > run-time it's not.
Yeah, I pointed that out above. Both && and || permit short
execution. But that does not matter, as neither "params->iterations"
nor "total_tests >= params->iterations" have side effects.
Where is the runtime difference?
- while (!kthread_should_stop()
- && !(params->iterations && total_tests >=
- params->iterations)) {
+ while (!(kthread_should_stop() ||
+ (params->iterations && total_tests >= params->iterations))) {
Pavel
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
signature.asc
Description: Digital signature

