From 3ac9ca085907e77b50afaccbe724b4646c986d38 Mon Sep 17 00:00:00 2001 From: Marti Bolivar Date: Thu, 13 Jul 2017 18:37:41 -0400 Subject: [PATCH] spi: dw: fix spi_dw_init() It is incorrect to call spi_context_release() on a spi_dw_data object's ctx field before data->ctx->config is first set in spi_dw_configure(). This is because spi_context_release() reads ctx->config->operation. In particular, during spi_dw_init(), calling spi_context_release() reads the uninitialized memory in spi->ctx->config->operation. Call spi_context_unlock_unconditionally() instead to properly increase the semaphore count. Without this patch, the first call to spi_transceive() can block forever depending on the value of the uninitialized memory holding spi->ctx->config->operation. Signed-off-by: Marti Bolivar --- drivers/spi/spi_dw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/spi/spi_dw.c b/drivers/spi/spi_dw.c index d8d5c6c2168..c2251ef825d 100644 --- a/drivers/spi/spi_dw.c +++ b/drivers/spi/spi_dw.c @@ -418,7 +418,7 @@ int spi_dw_init(struct device *dev) SYS_LOG_DBG("Designware SPI driver initialized on device: %p", dev); - spi_context_release(&spi->ctx, 0); + spi_context_unlock_unconditionally(&spi->ctx); return 0; }