Hi!
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...
@@ -567,8 +567,8 @@ static int dmatest_func(void *data) flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT; ktime = ktime_get();
- while (!kthread_should_stop()
&& !(params->iterations && total_tests >= params->iterations)) {
- while (!(kthread_should_stop() ||
struct dma_async_tx_descriptor *tx = NULL; struct dmaengine_unmap_data *um; dma_addr_t *dsts;(params->iterations && total_tests >= params->iterations))) {
let a = kthread_should_stop() let b = (params->iterations && total_tests >= params->iterations)
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?
Best regards, Pavel