Fix 2 unlocked ucsi_run_command calls:
1. ucsi_handle_connector_change() contains one ucsi_send_command() call, which takes the ppm_lock for it; and one ucsi_run_command() call which relies on the caller have taking the ppm_lock. ucsi_handle_connector_change() does not take the lock, so the second (ucsi_run_command) calls should also be ucsi_send_command().
2. ucsi_get_pdos() gets called from ucsi_handle_connector_change() which does not hold the ppm_lock, so it also must use ucsi_send_command().
This commit also adds a WARN_ON(!mutex_is_locked(&ucsi->ppm_lock)); to ucsi_run_command() to avoid similar problems getting re-introduced in the future.
Cc: stable@vger.kernel.org Signed-off-by: Hans de Goede hdegoede@redhat.com --- drivers/usb/typec/ucsi/ucsi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index d9d93f83b2a6..2f586d6c54f4 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -152,6 +152,8 @@ static int ucsi_run_command(struct ucsi *ucsi, u64 command, u8 length; int ret;
+ WARN_ON(!mutex_is_locked(&ucsi->ppm_lock)); + ret = ucsi_exec_command(ucsi, command); if (ret < 0) return ret; @@ -502,7 +504,7 @@ static void ucsi_get_pdos(struct ucsi_connector *con, int is_partner) command |= UCSI_GET_PDOS_PARTNER_PDO(is_partner); command |= UCSI_GET_PDOS_NUM_PDOS(UCSI_MAX_PDOS - 1); command |= UCSI_GET_PDOS_SRC_PDOS; - ret = ucsi_run_command(ucsi, command, con->src_pdos, + ret = ucsi_send_command(ucsi, command, con->src_pdos, sizeof(con->src_pdos)); if (ret < 0) { dev_err(ucsi->dev, "UCSI_GET_PDOS failed (%d)\n", ret); @@ -681,7 +683,7 @@ static void ucsi_handle_connector_change(struct work_struct *work) */ command = UCSI_GET_CAM_SUPPORTED; command |= UCSI_CONNECTOR_NUMBER(con->num); - ucsi_run_command(con->ucsi, command, NULL, 0); + ucsi_send_command(con->ucsi, command, NULL, 0); }
if (con->status.change & UCSI_CONSTAT_PARTNER_CHANGE)
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")
v5.4.57: Failed to apply! Possible dependencies: 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") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API")
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") 247c554a14aa ("usb: typec: ucsi: add support for Cypress CCGx") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 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") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") 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") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 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") a121103c9228 ("Linux 4.10-rc3") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") c1ae3cfa0e89 ("Linux 4.11-rc1") c470abd4fde4 ("Linux 4.10") d5adbfcd5f7b ("Linux 4.10-rc7")
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") 2dcd0af568b0 ("Linux 4.6") 2ea659a9ef48 ("Linux 4.12-rc1") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 36f90b0a2ddd ("Linux 4.5-rc2") 388f7b1d6e8c ("Linux 4.5-rc3") 5771a8c08880 ("Linux v4.13-rc1") 7ce7d89f4883 ("Linux 4.10-rc1") 81f70ba233d5 ("Linux 4.5-rc5") 92e963f50fc7 ("Linux 4.5-rc1") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") b562e44f507e ("Linux 4.5") c1ae3cfa0e89 ("Linux 4.11-rc1") f55532a0c0b8 ("Linux 4.6-rc1") f6cede5b49e8 ("Linux 4.5-rc7") 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")
v5.4.58: Failed to apply! Possible dependencies: 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") 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") 247c554a14aa ("usb: typec: ucsi: add support for Cypress CCGx") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 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") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") 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") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 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") a121103c9228 ("Linux 4.10-rc3") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") c1ae3cfa0e89 ("Linux 4.11-rc1") c470abd4fde4 ("Linux 4.10") d5adbfcd5f7b ("Linux 4.10-rc7")
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") 2dcd0af568b0 ("Linux 4.6") 2ea659a9ef48 ("Linux 4.12-rc1") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 36f90b0a2ddd ("Linux 4.5-rc2") 388f7b1d6e8c ("Linux 4.5-rc3") 5771a8c08880 ("Linux v4.13-rc1") 7ce7d89f4883 ("Linux 4.10-rc1") 81f70ba233d5 ("Linux 4.5-rc5") 92e963f50fc7 ("Linux 4.5-rc1") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") b562e44f507e ("Linux 4.5") c1ae3cfa0e89 ("Linux 4.11-rc1") f55532a0c0b8 ("Linux 4.6-rc1") f6cede5b49e8 ("Linux 4.5-rc7") 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")
v5.4.59: Failed to apply! Possible dependencies: 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") bdc62f2bae8f ("usb: typec: ucsi: Simplified registration and I/O API")
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") 247c554a14aa ("usb: typec: ucsi: add support for Cypress CCGx") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 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") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") 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") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 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") a121103c9228 ("Linux 4.10-rc3") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") c1ae3cfa0e89 ("Linux 4.11-rc1") c470abd4fde4 ("Linux 4.10") d5adbfcd5f7b ("Linux 4.10-rc7")
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") 2dcd0af568b0 ("Linux 4.6") 2ea659a9ef48 ("Linux 4.12-rc1") 2ede55468ca8 ("usb: typec: ucsi: Remove the old API") 36f90b0a2ddd ("Linux 4.5-rc2") 388f7b1d6e8c ("Linux 4.5-rc3") 5771a8c08880 ("Linux v4.13-rc1") 7ce7d89f4883 ("Linux 4.10-rc1") 81f70ba233d5 ("Linux 4.5-rc5") 92e963f50fc7 ("Linux 4.5-rc1") af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") b24413180f56 ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license") b562e44f507e ("Linux 4.5") c1ae3cfa0e89 ("Linux 4.11-rc1") f55532a0c0b8 ("Linux 4.6-rc1") f6cede5b49e8 ("Linux 4.5-rc7") 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?
linux-stable-mirror@lists.linaro.org