diff options
Diffstat (limited to 'drivers/spi/spi.c')
| -rw-r--r-- | drivers/spi/spi.c | 19 | 
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 8f97a3eacdea..32c01e684af3 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -95,7 +95,7 @@ static ssize_t driver_override_show(struct device *dev,  }  static DEVICE_ATTR_RW(driver_override); -static struct spi_statistics *spi_alloc_pcpu_stats(struct device *dev) +static struct spi_statistics __percpu *spi_alloc_pcpu_stats(struct device *dev)  {  	struct spi_statistics __percpu *pcpu_stats; @@ -162,7 +162,7 @@ static struct device_attribute dev_attr_spi_device_##field = {		\  }  #define SPI_STATISTICS_SHOW_NAME(name, file, field)			\ -static ssize_t spi_statistics_##name##_show(struct spi_statistics *stat, \ +static ssize_t spi_statistics_##name##_show(struct spi_statistics __percpu *stat, \  					    char *buf)			\  {									\  	ssize_t len;							\ @@ -309,7 +309,7 @@ static const struct attribute_group *spi_master_groups[] = {  	NULL,  }; -static void spi_statistics_add_transfer_stats(struct spi_statistics *pcpu_stats, +static void spi_statistics_add_transfer_stats(struct spi_statistics __percpu *pcpu_stats,  					      struct spi_transfer *xfer,  					      struct spi_controller *ctlr)  { @@ -1275,8 +1275,8 @@ static int spi_transfer_wait(struct spi_controller *ctlr,  			     struct spi_message *msg,  			     struct spi_transfer *xfer)  { -	struct spi_statistics *statm = ctlr->pcpu_statistics; -	struct spi_statistics *stats = msg->spi->pcpu_statistics; +	struct spi_statistics __percpu *statm = ctlr->pcpu_statistics; +	struct spi_statistics __percpu *stats = msg->spi->pcpu_statistics;  	u32 speed_hz = xfer->speed_hz;  	unsigned long long ms; @@ -1432,8 +1432,8 @@ static int spi_transfer_one_message(struct spi_controller *ctlr,  	struct spi_transfer *xfer;  	bool keep_cs = false;  	int ret = 0; -	struct spi_statistics *statm = ctlr->pcpu_statistics; -	struct spi_statistics *stats = msg->spi->pcpu_statistics; +	struct spi_statistics __percpu *statm = ctlr->pcpu_statistics; +	struct spi_statistics __percpu *stats = msg->spi->pcpu_statistics;  	spi_set_cs(msg->spi, true, false); @@ -1727,8 +1727,7 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)  	spin_unlock_irqrestore(&ctlr->queue_lock, flags);  	ret = __spi_pump_transfer_message(ctlr, msg, was_busy); -	if (!ret) -		kthread_queue_work(ctlr->kworker, &ctlr->pump_messages); +	kthread_queue_work(ctlr->kworker, &ctlr->pump_messages);  	ctlr->cur_msg = NULL;  	ctlr->fallback = false; @@ -4033,7 +4032,7 @@ static int __spi_sync(struct spi_device *spi, struct spi_message *message)  	 * guard against reentrancy from a different context. The io_mutex  	 * will catch those cases.  	 */ -	if (READ_ONCE(ctlr->queue_empty)) { +	if (READ_ONCE(ctlr->queue_empty) && !ctlr->must_async) {  		message->actual_length = 0;  		message->status = -EINPROGRESS;  | 
