On Wed, Dec 11, 2019 at 11:46:16AM -0800, Jae Hyun Yoo wrote: > This commit adds Aspeed PECI adapter driver for Aspeed > AST24xx/25xx/26xx SoCs. ... > +#define ASPEED_PECI_CMD_IDLE_MASK (ASPEED_PECI_CMD_STS_MASK | \ > + ASPEED_PECI_CMD_PIN_MON) Better looking when the value completely occupies second line without touching the first. ... > +static int aspeed_peci_check_idle(struct aspeed_peci *priv) > +{ > + ulong timeout = jiffies + usecs_to_jiffies(ASPEED_PECI_IDLE_CHECK_TIMEOUT_USEC); > + u32 cmd_sts; Like in the previous patch this one has hard to read timeout loops with inefficient code. > + for (;;) { > + cmd_sts = readl(priv->base + ASPEED_PECI_CMD); > + if (!(cmd_sts & ASPEED_PECI_CMD_IDLE_MASK)) > + break; > + if (time_after(jiffies, timeout)) { This is actually main exit condition (vs. infinite loop). > + cmd_sts = readl(priv->base + ASPEED_PECI_CMD); This make no sense. If you would like to have one more iteration, just spell it explicitly. > + break; > + } > + usleep_range((ASPEED_PECI_IDLE_CHECK_INTERVAL_USEC >> 2) + 1, > + ASPEED_PECI_IDLE_CHECK_INTERVAL_USEC); > + } > + > + return !(cmd_sts & ASPEED_PECI_CMD_IDLE_MASK) ? 0 : -ETIMEDOUT; Ditto. > +} Now look at the other variant: do { ...do something... if (success) return 0; usleep(...); } while (time_before(...)); return -ETIMEDOUT; * Easy * less LOCs * guaranteed always to be at least one iteration * has explicitly spelled exit condition BUT! In this very case you may do even better if you read iopoll.h, i.e readl_poll_timeout() has this functionality embedded in the macro. -- With Best Regards, Andy Shevchenko