mmc: mmc_spi: Simplify busy loop in mmc_spi_skip()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 23 Jun 2021 10:17:31 +0000 (13:17 +0300)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 24 Aug 2021 08:15:31 +0000 (10:15 +0200)
Infinite loops are hard to read and understand because of
hidden main loop condition. Simplify such one in mmc_spi_skip().

Using schedule() to schedule (and be friendly to others)
is discouraged and cond_resched() should be used instead.
Hence, replace schedule() with cond_resched() at the same
time.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20210623101731.87885-1-andriy.shevchenko@linux.intel.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/mmc_spi.c

index 65c65bb..a1bcde3 100644 (file)
@@ -180,7 +180,7 @@ static int mmc_spi_skip(struct mmc_spi_host *host, unsigned long timeout,
        u8 *cp = host->data->status;
        unsigned long start = jiffies;
 
-       while (1) {
+       do {
                int             status;
                unsigned        i;
 
@@ -193,16 +193,9 @@ static int mmc_spi_skip(struct mmc_spi_host *host, unsigned long timeout,
                                return cp[i];
                }
 
-               if (time_is_before_jiffies(start + timeout))
-                       break;
-
-               /* If we need long timeouts, we may release the CPU.
-                * We use jiffies here because we want to have a relation
-                * between elapsed time and the blocking of the scheduler.
-                */
-               if (time_is_before_jiffies(start + 1))
-                       schedule();
-       }
+               /* If we need long timeouts, we may release the CPU */
+               cond_resched();
+       } while (time_is_after_jiffies(start + timeout));
        return -ETIMEDOUT;
 }