[bug report] spi: Split bus and I/O locking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Mark Brown,

The patch ef4d96ec4ad9: "spi: Split bus and I/O locking" from Jul 21,
2016, leads to the following static checker warning:

	drivers/spi/spi.c:1214 __spi_pump_messages()
	warn: inconsistent returns 'mutex:&master->io_mutex'.

drivers/spi/spi.c
  1155          mutex_lock(&master->io_mutex);
  1156  
  1157          if (!was_busy && master->auto_runtime_pm) {
  1158                  ret = pm_runtime_get_sync(master->dev.parent);
  1159                  if (ret < 0) {
  1160                          dev_err(&master->dev, "Failed to power device: %d\n",
  1161                                  ret);
  1162                          return;

goto out?

  1163                  }
  1164          }
  1165  
  1166          if (!was_busy)
  1167                  trace_spi_master_busy(master);
  1168  
  1169          if (!was_busy && master->prepare_transfer_hardware) {
  1170                  ret = master->prepare_transfer_hardware(master);
  1171                  if (ret) {
  1172                          dev_err(&master->dev,
  1173                                  "failed to prepare transfer hardware\n");
  1174  
  1175                          if (master->auto_runtime_pm)
  1176                                  pm_runtime_put(master->dev.parent);
  1177                          return;

Same.

  1178                  }
  1179          }
  1180  
  1181          trace_spi_message_start(master->cur_msg);
  1182  
  1183          if (master->prepare_message) {
  1184                  ret = master->prepare_message(master, master->cur_msg);
  1185                  if (ret) {
  1186                          dev_err(&master->dev,
  1187                                  "failed to prepare message: %d\n", ret);
  1188                          master->cur_msg->status = ret;
  1189                          spi_finalize_current_message(master);
  1190                          goto out;
  1191                  }
  1192                  master->cur_msg_prepared = true;
  1193          }
  1194  
  1195          ret = spi_map_msg(master, master->cur_msg);
  1196          if (ret) {
  1197                  master->cur_msg->status = ret;
  1198                  spi_finalize_current_message(master);
  1199                  goto out;
  1200          }
  1201  
  1202          ret = master->transfer_one_message(master, master->cur_msg);
  1203          if (ret) {
  1204                  dev_err(&master->dev,
  1205                          "failed to transfer one message from queue\n");
  1206                  goto out;
  1207          }
  1208  
  1209  out:
  1210          mutex_unlock(&master->io_mutex);
  1211  
  1212          /* Prod the scheduler in case transfer_one() was busy waiting */
  1213          if (!ret)
  1214                  cond_resched();
  1215  }

regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux