Commit a71b7845 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Mark Brown

spi: Refactor spi_stop_queue()

The refactoring makes code less verbose and easier to read.
Besides that the binary size is also reduced, which sounds
like a win-win case:

  add/remove: 0/1 grow/shrink: 2/2 up/down: 210/-226 (-16)
  Function                            old     new   delta
  spi_destroy_queue                    42     156    +114
  spi_controller_suspend              101     197     +96
  spi_unregister_controller           346     319     -27
  spi_register_controller            1834    1794     -40
  spi_stop_queue                      159       -    -159
  Total: Before=49230, After=49214, chg -0.03%
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://msgid.link/r/20240510204945.2581944-1-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 85ce0dc2
...@@ -2219,11 +2219,8 @@ static int spi_start_queue(struct spi_controller *ctlr) ...@@ -2219,11 +2219,8 @@ static int spi_start_queue(struct spi_controller *ctlr)
static int spi_stop_queue(struct spi_controller *ctlr) static int spi_stop_queue(struct spi_controller *ctlr)
{ {
unsigned int limit = 500;
unsigned long flags; unsigned long flags;
unsigned limit = 500;
int ret = 0;
spin_lock_irqsave(&ctlr->queue_lock, flags);
/* /*
* This is a bit lame, but is optimized for the common execution path. * This is a bit lame, but is optimized for the common execution path.
...@@ -2231,20 +2228,18 @@ static int spi_stop_queue(struct spi_controller *ctlr) ...@@ -2231,20 +2228,18 @@ static int spi_stop_queue(struct spi_controller *ctlr)
* execution path (pump_messages) would be required to call wake_up or * execution path (pump_messages) would be required to call wake_up or
* friends on every SPI message. Do this instead. * friends on every SPI message. Do this instead.
*/ */
while ((!list_empty(&ctlr->queue) || ctlr->busy) && limit--) { do {
spin_lock_irqsave(&ctlr->queue_lock, flags);
if (list_empty(&ctlr->queue) && !ctlr->busy) {
ctlr->running = false;
spin_unlock_irqrestore(&ctlr->queue_lock, flags);
return 0;
}
spin_unlock_irqrestore(&ctlr->queue_lock, flags); spin_unlock_irqrestore(&ctlr->queue_lock, flags);
usleep_range(10000, 11000); usleep_range(10000, 11000);
spin_lock_irqsave(&ctlr->queue_lock, flags); } while (--limit);
}
if (!list_empty(&ctlr->queue) || ctlr->busy)
ret = -EBUSY;
else
ctlr->running = false;
spin_unlock_irqrestore(&ctlr->queue_lock, flags); return -EBUSY;
return ret;
} }
static int spi_destroy_queue(struct spi_controller *ctlr) static int spi_destroy_queue(struct spi_controller *ctlr)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment