lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 5 May 2020 15:51:16 +0300 From: Andy Shevchenko <andy.shevchenko@...il.com> To: Pavel Machek <pavel@...x.de> Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Linux Kernel Mailing List <linux-kernel@...r.kernel.org>, Stable <stable@...r.kernel.org>, Dan Williams <dan.j.williams@...el.com>, Nicolas Ferre <nicolas.ferre@...rochip.com>, Andy Shevchenko <andriy.shevchenko@...ux.intel.com>, Vinod Koul <vkoul@...nel.org> Subject: Re: [PATCH 4.19 28/37] dmaengine: dmatest: Fix iteration non-stop logic On Tue, May 5, 2020 at 3:37 PM Pavel Machek <pavel@...x.de> 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. > > !a & !b 0 0 -> 1 > else -> 0 > > !(a | b) 0 0 -> 1 > else -> 0 > > 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. -- With Best Regards, Andy Shevchenko
Powered by blists - more mailing lists