Message ID | 20200809141904.4317-4-hdegoede@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | usb: typec: ucsi: Fix various locking issues | expand |
Hi [This is an automated email] This commit has been processed because it contains a -stable tag. The stable tag indicates that it's relevant for the following trees: all The bot has tested the following trees: v5.8, v5.7.14, v5.4.57, v4.19.138, v4.14.193, v4.9.232, v4.4.232. v5.8: Build OK! v5.7.14: Failed to apply! Possible dependencies: 4dbc6a4ef06d ("usb: typec: ucsi: save power data objects in PD mode") e969b61a4e49 ("usb: typec: ucsi: Fix 2 unlocked ucsi_run_command calls") v5.4.57: Failed to apply! Possible dependencies: 170a6726d0e2 ("usb: typec: ucsi: add support for separate DP altmode devices") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 30381171978a ("usb: typec: ucsi: Fix AB BA lock inversion") 3cf657f07918 ("usb: typec: ucsi: Remove all bit-fields") 470ce43a1a81 ("usb: typec: ucsi: Remove struct ucsi_control") 4dbc6a4ef06d ("usb: typec: ucsi: save power data objects in PD mode") 6df475f804e6 ("usb: typec: ucsi: Start using struct typec_operations") 71a1fa0df2a3 ("usb: typec: ucsi: Store the notification mask") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") e969b61a4e49 ("usb: typec: ucsi: Fix 2 unlocked ucsi_run_command calls") v4.19.138: Failed to apply! Possible dependencies: 247c554a14aa ("usb: typec: ucsi: add support for Cypress CCGx") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 470ce43a1a81 ("usb: typec: ucsi: Remove struct ucsi_control") 5c9ae5a87573 ("usb: typec: ucsi: ccg: add firmware flashing support") 5d438e200215 ("usb: typec: ucsi: ccg: add get_fw_info function") 6df475f804e6 ("usb: typec: ucsi: Start using struct typec_operations") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") a94ecde41f7e ("usb: typec: ucsi: ccg: enable runtime pm support") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") f2372b87c386 ("usb: typec: ucsi: displayport: Fix for the mode entering routine") v4.14.193: Failed to apply! Possible dependencies: 0a4c005bd171 ("usb: typec: driver for TI TPS6598x USB Power Delivery controllers") 3c4fb9f16921 ("usb: typec: wcove: start using tcpm for USB PD support") 44262fad12a7 ("staging: typec: tcpm: Drop commented out code") 4b4e02c83167 ("typec: tcpm: Move out of staging") 70cd90be3300 ("staging: typec: pd: Document struct pd_message") 76f0c53d08b9 ("usb: typec: fusb302: Move out of staging") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") 956c36c297a2 ("USB: typec: add SPDX identifiers to some files") 98076fa64a05 ("staging: typec: tcpm: Document data structures") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") cf6e06cddf29 ("usb: typec: Start using ERR_PTR") v4.9.232: Failed to apply! Possible dependencies: 0c744ea4f77d ("Linux 4.10-rc2") 2bd6bf03f4c1 ("Linux 4.14-rc1") 2ea659a9ef48 ("Linux 4.12-rc1") 49def1853334 ("Linux 4.10-rc4") 566cf877a1fc ("Linux 4.10-rc6") 5771a8c08880 ("Linux v4.13-rc1") 7089db84e356 ("Linux 4.10-rc8") 7a308bb3016f ("Linux 4.10-rc5") 7ce7d89f4883 ("Linux 4.10-rc1") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") a121103c9228 ("Linux 4.10-rc3") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") c1ae3cfa0e89 ("Linux 4.11-rc1") c1b0bc2dabfa ("usb: typec: Add support for UCSI interface") c470abd4fde4 ("Linux 4.10") d2061f9cc32d ("usb: typec: add driver for Intel Whiskey Cove PMIC USB Type-C PHY") d5adbfcd5f7b ("Linux 4.10-rc7") fab9288428ec ("usb: USB Type-C connector class") v4.4.232: Failed to apply! Possible dependencies: 1001354ca341 ("Linux 4.9-rc1") 18558cae0272 ("Linux 4.5-rc4") 1a695a905c18 ("Linux 4.7-rc1") 29b4817d4018 ("Linux 4.8-rc1") 2bd6bf03f4c1 ("Linux 4.14-rc1") 2ea659a9ef48 ("Linux 4.12-rc1") 36f90b0a2ddd ("Linux 4.5-rc2") 388f7b1d6e8c ("Linux 4.5-rc3") 5771a8c08880 ("Linux v4.13-rc1") 6406c3d22637 ("usb: Kconfig: let USB_ULPI_BUS depends on USB_COMMON") 7ce7d89f4883 ("Linux 4.10-rc1") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") 81f70ba233d5 ("Linux 4.5-rc5") 92e963f50fc7 ("Linux 4.5-rc1") 9360575c5837 ("usbip: vudc: Add vudc to Kconfig") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") ad764c49f65a ("usb: Kconfig: move ulpi bus support out of host") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") b562e44f507e ("Linux 4.5") b5a2a8ecb204 ("usbip: vudc: fix Kconfig dependencies") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") c1ae3cfa0e89 ("Linux 4.11-rc1") c1b0bc2dabfa ("usb: typec: Add support for UCSI interface") cb9c1cfc8692 ("usb: Kconfig: using select for USB_COMMON dependency") d2061f9cc32d ("usb: typec: add driver for Intel Whiskey Cove PMIC USB Type-C PHY") f55532a0c0b8 ("Linux 4.6-rc1") f6cede5b49e8 ("Linux 4.5-rc7") fab9288428ec ("usb: USB Type-C connector class") fc77dbd34c5c ("Linux 4.5-rc6") NOTE: The patch will not be queued to stable trees until it is upstream. How should we proceed with this patch?
Hi [This is an automated email] This commit has been processed because it contains a -stable tag. The stable tag indicates that it's relevant for the following trees: all The bot has tested the following trees: v5.8.1, v5.7.15, v5.4.58, v4.19.139, v4.14.193, v4.9.232, v4.4.232. v5.8.1: Build OK! v5.7.15: Failed to apply! Possible dependencies: 4dbc6a4ef06d ("usb: typec: ucsi: save power data objects in PD mode") 7987296aedbd ("usb: typec: ucsi: Fix 2 unlocked ucsi_run_command calls") v5.4.58: Failed to apply! Possible dependencies: 170a6726d0e2 ("usb: typec: ucsi: add support for separate DP altmode devices") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 3c7fad6cfc79 ("usb: typec: ucsi: Fix AB BA lock inversion") 3cf657f07918 ("usb: typec: ucsi: Remove all bit-fields") 470ce43a1a81 ("usb: typec: ucsi: Remove struct ucsi_control") 4dbc6a4ef06d ("usb: typec: ucsi: save power data objects in PD mode") 6df475f804e6 ("usb: typec: ucsi: Start using struct typec_operations") 71a1fa0df2a3 ("usb: typec: ucsi: Store the notification mask") 7987296aedbd ("usb: typec: ucsi: Fix 2 unlocked ucsi_run_command calls") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") v4.19.139: Failed to apply! Possible dependencies: 247c554a14aa ("usb: typec: ucsi: add support for Cypress CCGx") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 470ce43a1a81 ("usb: typec: ucsi: Remove struct ucsi_control") 5c9ae5a87573 ("usb: typec: ucsi: ccg: add firmware flashing support") 5d438e200215 ("usb: typec: ucsi: ccg: add get_fw_info function") 6df475f804e6 ("usb: typec: ucsi: Start using struct typec_operations") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") a94ecde41f7e ("usb: typec: ucsi: ccg: enable runtime pm support") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") f2372b87c386 ("usb: typec: ucsi: displayport: Fix for the mode entering routine") v4.14.193: Failed to apply! Possible dependencies: 0a4c005bd171 ("usb: typec: driver for TI TPS6598x USB Power Delivery controllers") 3c4fb9f16921 ("usb: typec: wcove: start using tcpm for USB PD support") 44262fad12a7 ("staging: typec: tcpm: Drop commented out code") 4b4e02c83167 ("typec: tcpm: Move out of staging") 70cd90be3300 ("staging: typec: pd: Document struct pd_message") 76f0c53d08b9 ("usb: typec: fusb302: Move out of staging") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") 956c36c297a2 ("USB: typec: add SPDX identifiers to some files") 98076fa64a05 ("staging: typec: tcpm: Document data structures") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") cf6e06cddf29 ("usb: typec: Start using ERR_PTR") v4.9.232: Failed to apply! Possible dependencies: 0c744ea4f77d ("Linux 4.10-rc2") 2bd6bf03f4c1 ("Linux 4.14-rc1") 2ea659a9ef48 ("Linux 4.12-rc1") 49def1853334 ("Linux 4.10-rc4") 566cf877a1fc ("Linux 4.10-rc6") 5771a8c08880 ("Linux v4.13-rc1") 7089db84e356 ("Linux 4.10-rc8") 7a308bb3016f ("Linux 4.10-rc5") 7ce7d89f4883 ("Linux 4.10-rc1") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") a121103c9228 ("Linux 4.10-rc3") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") c1ae3cfa0e89 ("Linux 4.11-rc1") c1b0bc2dabfa ("usb: typec: Add support for UCSI interface") c470abd4fde4 ("Linux 4.10") d2061f9cc32d ("usb: typec: add driver for Intel Whiskey Cove PMIC USB Type-C PHY") d5adbfcd5f7b ("Linux 4.10-rc7") fab9288428ec ("usb: USB Type-C connector class") v4.4.232: Failed to apply! Possible dependencies: 1001354ca341 ("Linux 4.9-rc1") 18558cae0272 ("Linux 4.5-rc4") 1a695a905c18 ("Linux 4.7-rc1") 29b4817d4018 ("Linux 4.8-rc1") 2bd6bf03f4c1 ("Linux 4.14-rc1") 2ea659a9ef48 ("Linux 4.12-rc1") 36f90b0a2ddd ("Linux 4.5-rc2") 388f7b1d6e8c ("Linux 4.5-rc3") 5771a8c08880 ("Linux v4.13-rc1") 6406c3d22637 ("usb: Kconfig: let USB_ULPI_BUS depends on USB_COMMON") 7ce7d89f4883 ("Linux 4.10-rc1") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") 81f70ba233d5 ("Linux 4.5-rc5") 92e963f50fc7 ("Linux 4.5-rc1") 9360575c5837 ("usbip: vudc: Add vudc to Kconfig") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") ad764c49f65a ("usb: Kconfig: move ulpi bus support out of host") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") b562e44f507e ("Linux 4.5") b5a2a8ecb204 ("usbip: vudc: fix Kconfig dependencies") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") c1ae3cfa0e89 ("Linux 4.11-rc1") c1b0bc2dabfa ("usb: typec: Add support for UCSI interface") cb9c1cfc8692 ("usb: Kconfig: using select for USB_COMMON dependency") d2061f9cc32d ("usb: typec: add driver for Intel Whiskey Cove PMIC USB Type-C PHY") f55532a0c0b8 ("Linux 4.6-rc1") f6cede5b49e8 ("Linux 4.5-rc7") fab9288428ec ("usb: USB Type-C connector class") fc77dbd34c5c ("Linux 4.5-rc6") NOTE: The patch will not be queued to stable trees until it is upstream. How should we proceed with this patch?
Hi [This is an automated email] This commit has been processed because it contains a -stable tag. The stable tag indicates that it's relevant for the following trees: all The bot has tested the following trees: v5.8.2, v5.7.16, v5.4.59, v4.19.140, v4.14.193, v4.9.232, v4.4.232. v5.8.2: Build OK! v5.7.16: Failed to apply! Possible dependencies: 4dbc6a4ef06d ("usb: typec: ucsi: save power data objects in PD mode") e2ac86ebc787 ("usb: typec: ucsi: Fix 2 unlocked ucsi_run_command calls") v5.4.59: Failed to apply! Possible dependencies: 170a6726d0e2 ("usb: typec: ucsi: add support for separate DP altmode devices") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 3cf657f07918 ("usb: typec: ucsi: Remove all bit-fields") 470ce43a1a81 ("usb: typec: ucsi: Remove struct ucsi_control") 4dbc6a4ef06d ("usb: typec: ucsi: save power data objects in PD mode") 6df475f804e6 ("usb: typec: ucsi: Start using struct typec_operations") 71a1fa0df2a3 ("usb: typec: ucsi: Store the notification mask") abfe9cb3f1f9 ("usb: typec: ucsi: Fix AB BA lock inversion") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") e2ac86ebc787 ("usb: typec: ucsi: Fix 2 unlocked ucsi_run_command calls") v4.19.140: Failed to apply! Possible dependencies: 247c554a14aa ("usb: typec: ucsi: add support for Cypress CCGx") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 470ce43a1a81 ("usb: typec: ucsi: Remove struct ucsi_control") 5c9ae5a87573 ("usb: typec: ucsi: ccg: add firmware flashing support") 5d438e200215 ("usb: typec: ucsi: ccg: add get_fw_info function") 6df475f804e6 ("usb: typec: ucsi: Start using struct typec_operations") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") a94ecde41f7e ("usb: typec: ucsi: ccg: enable runtime pm support") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") f2372b87c386 ("usb: typec: ucsi: displayport: Fix for the mode entering routine") v4.14.193: Failed to apply! Possible dependencies: 0a4c005bd171 ("usb: typec: driver for TI TPS6598x USB Power Delivery controllers") 3c4fb9f16921 ("usb: typec: wcove: start using tcpm for USB PD support") 44262fad12a7 ("staging: typec: tcpm: Drop commented out code") 4b4e02c83167 ("typec: tcpm: Move out of staging") 70cd90be3300 ("staging: typec: pd: Document struct pd_message") 76f0c53d08b9 ("usb: typec: fusb302: Move out of staging") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") 956c36c297a2 ("USB: typec: add SPDX identifiers to some files") 98076fa64a05 ("staging: typec: tcpm: Document data structures") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") cf6e06cddf29 ("usb: typec: Start using ERR_PTR") v4.9.232: Failed to apply! Possible dependencies: 0c744ea4f77d ("Linux 4.10-rc2") 2bd6bf03f4c1 ("Linux 4.14-rc1") 2ea659a9ef48 ("Linux 4.12-rc1") 49def1853334 ("Linux 4.10-rc4") 566cf877a1fc ("Linux 4.10-rc6") 5771a8c08880 ("Linux v4.13-rc1") 7089db84e356 ("Linux 4.10-rc8") 7a308bb3016f ("Linux 4.10-rc5") 7ce7d89f4883 ("Linux 4.10-rc1") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") a121103c9228 ("Linux 4.10-rc3") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") c1ae3cfa0e89 ("Linux 4.11-rc1") c1b0bc2dabfa ("usb: typec: Add support for UCSI interface") c470abd4fde4 ("Linux 4.10") d2061f9cc32d ("usb: typec: add driver for Intel Whiskey Cove PMIC USB Type-C PHY") d5adbfcd5f7b ("Linux 4.10-rc7") fab9288428ec ("usb: USB Type-C connector class") v4.4.232: Failed to apply! Possible dependencies: 1001354ca341 ("Linux 4.9-rc1") 18558cae0272 ("Linux 4.5-rc4") 1a695a905c18 ("Linux 4.7-rc1") 29b4817d4018 ("Linux 4.8-rc1") 2bd6bf03f4c1 ("Linux 4.14-rc1") 2ea659a9ef48 ("Linux 4.12-rc1") 36f90b0a2ddd ("Linux 4.5-rc2") 388f7b1d6e8c ("Linux 4.5-rc3") 5771a8c08880 ("Linux v4.13-rc1") 6406c3d22637 ("usb: Kconfig: let USB_ULPI_BUS depends on USB_COMMON") 7ce7d89f4883 ("Linux 4.10-rc1") 81534d5fa973 ("usb: typec: ucsi: Remove debug.h file") 81f70ba233d5 ("Linux 4.5-rc5") 92e963f50fc7 ("Linux 4.5-rc1") 9360575c5837 ("usbip: vudc: Add vudc to Kconfig") ad74b8649bea ("usb: typec: ucsi: Preliminary support for alternate modes") ad764c49f65a ("usb: Kconfig: move ulpi bus support out of host") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") b562e44f507e ("Linux 4.5") b5a2a8ecb204 ("usbip: vudc: fix Kconfig dependencies") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API") c1ae3cfa0e89 ("Linux 4.11-rc1") c1b0bc2dabfa ("usb: typec: Add support for UCSI interface") cb9c1cfc8692 ("usb: Kconfig: using select for USB_COMMON dependency") d2061f9cc32d ("usb: typec: add driver for Intel Whiskey Cove PMIC USB Type-C PHY") f55532a0c0b8 ("Linux 4.6-rc1") f6cede5b49e8 ("Linux 4.5-rc7") fab9288428ec ("usb: USB Type-C connector class") fc77dbd34c5c ("Linux 4.5-rc6") NOTE: The patch will not be queued to stable trees until it is upstream. How should we proceed with this patch?
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 2f586d6c54f4..182e34aa65ed 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -146,42 +146,33 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd) return UCSI_CCI_LENGTH(cci); } -static int ucsi_run_command(struct ucsi *ucsi, u64 command, - void *data, size_t size) +int ucsi_send_command(struct ucsi *ucsi, u64 command, + void *data, size_t size) { u8 length; int ret; - WARN_ON(!mutex_is_locked(&ucsi->ppm_lock)); + mutex_lock(&ucsi->ppm_lock); ret = ucsi_exec_command(ucsi, command); if (ret < 0) - return ret; + goto out; length = ret; if (data) { ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, data, size); if (ret) - return ret; + goto out; } ret = ucsi_acknowledge_command(ucsi); if (ret) - return ret; - - return length; -} + goto out; -int ucsi_send_command(struct ucsi *ucsi, u64 command, - void *retval, size_t size) -{ - int ret; - - mutex_lock(&ucsi->ppm_lock); - ret = ucsi_run_command(ucsi, command, retval, size); + ret = length; +out: mutex_unlock(&ucsi->ppm_lock); - return ret; } EXPORT_SYMBOL_GPL(ucsi_send_command); @@ -738,20 +729,24 @@ static int ucsi_reset_ppm(struct ucsi *ucsi) u32 cci; int ret; + mutex_lock(&ucsi->ppm_lock); + ret = ucsi->ops->async_write(ucsi, UCSI_CONTROL, &command, sizeof(command)); if (ret < 0) - return ret; + goto out; tmo = jiffies + msecs_to_jiffies(UCSI_TIMEOUT_MS); do { - if (time_is_before_jiffies(tmo)) - return -ETIMEDOUT; + if (time_is_before_jiffies(tmo)) { + ret = -ETIMEDOUT; + goto out; + } ret = ucsi->ops->read(ucsi, UCSI_CCI, &cci, sizeof(cci)); if (ret) - return ret; + goto out; /* If the PPM is still doing something else, reset it again. */ if (cci & ~UCSI_CCI_RESET_COMPLETE) { @@ -759,13 +754,15 @@ static int ucsi_reset_ppm(struct ucsi *ucsi) &command, sizeof(command)); if (ret < 0) - return ret; + goto out; } msleep(20); } while (!(cci & UCSI_CCI_RESET_COMPLETE)); - return 0; +out: + mutex_unlock(&ucsi->ppm_lock); + return ret; } static int ucsi_role_cmd(struct ucsi_connector *con, u64 command) @@ -777,9 +774,7 @@ static int ucsi_role_cmd(struct ucsi_connector *con, u64 command) u64 c; /* PPM most likely stopped responding. Resetting everything. */ - mutex_lock(&con->ucsi->ppm_lock); ucsi_reset_ppm(con->ucsi); - mutex_unlock(&con->ucsi->ppm_lock); c = UCSI_SET_NOTIFICATION_ENABLE | con->ucsi->ntfy; ucsi_send_command(con->ucsi, c, NULL, 0); @@ -1010,8 +1005,6 @@ int ucsi_init(struct ucsi *ucsi) int ret; int i; - mutex_lock(&ucsi->ppm_lock); - /* Reset the PPM */ ret = ucsi_reset_ppm(ucsi); if (ret) { @@ -1022,13 +1015,13 @@ int ucsi_init(struct ucsi *ucsi) /* Enable basic notifications */ ucsi->ntfy = UCSI_ENABLE_NTFY_CMD_COMPLETE | UCSI_ENABLE_NTFY_ERROR; command = UCSI_SET_NOTIFICATION_ENABLE | ucsi->ntfy; - ret = ucsi_run_command(ucsi, command, NULL, 0); + ret = ucsi_send_command(ucsi, command, NULL, 0); if (ret < 0) goto err_reset; /* Get PPM capabilities */ command = UCSI_GET_CAPABILITY; - ret = ucsi_run_command(ucsi, command, &ucsi->cap, sizeof(ucsi->cap)); + ret = ucsi_send_command(ucsi, command, &ucsi->cap, sizeof(ucsi->cap)); if (ret < 0) goto err_reset; @@ -1045,8 +1038,6 @@ int ucsi_init(struct ucsi *ucsi) goto err_reset; } - mutex_unlock(&ucsi->ppm_lock); - /* Register all connectors */ for (i = 0; i < ucsi->cap.num_connectors; i++) { ret = ucsi_register_port(ucsi, i); @@ -1072,12 +1063,9 @@ int ucsi_init(struct ucsi *ucsi) con->port = NULL; } - mutex_lock(&ucsi->ppm_lock); err_reset: ucsi_reset_ppm(ucsi); err: - mutex_unlock(&ucsi->ppm_lock); - return ret; } EXPORT_SYMBOL_GPL(ucsi_init);
The ppm_lock really only needs to be hold during 2 functions: ucsi_reset_ppm() and ucsi_run_command(). Push the taking of the lock down into these 2 functions, renaming ucsi_run_command() to ucsi_send_command() which was an existing wrapper already taking the lock for its callers. This simplifies things for the callers and removes the difference between ucsi_send_command() and ucsi_run_command() which has led to various locking bugs in the past. Cc: stable@vger.kernel.org Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/usb/typec/ucsi/ucsi.c | 56 ++++++++++++++--------------------- 1 file changed, 22 insertions(+), 34 deletions(-)