coresight: Fixes for v6.1

Fixes for coresight drivers for v6.1
 
   - Fix possible deadlock CTI mutexes (LOCKDEP)
   - Fix hang in CTI with runtime power management
 
 Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEuFy0byloRoXZHaWBxcXRZPKyBqEFAmNRv5sACgkQxcXRZPKy
 BqEv4xAAlbI4TYJJUcxRdFYoAnPBOs7RR+h1IdFCxVVz0EMGJavICKp6Q2pZ8NoO
 GL5NND9N+Sfde5LQwAgMcg5i4sK/1xZCXpdWA+mb56FhaC6FKdT3LpjglAOmO+cd
 R0JZEheyhlzUswT6AegHr1gGGl5xRDaUrqiiGeHauTadvJsze7IM6tMWPjYa6DIR
 x+Iz1YOkUJ3WofygiV+7qkyQ/WOw4p9TSSZTSQ0fuyCh1AHufCXUI+cCigVVUTga
 fXwHbesXKPsBSkfYMnfFJgeDWBAHSKdQy4slzQZcm19yZp0xCFdX24tMHDCjL4zO
 O/jR4rwFu6LNqG6qYHNdmCtocVmMPK4GClApMzLf09g/gllqEHz6fhtjMlafJiQt
 IzNmk8yTjGkMBx3fjHbrgvvsdWGG0pMqG8fwHXuG6rHsWkh1iOlY34cXe/ffKP6Z
 /MbsW3liioWQkeLOY4GuV76dWO9bAd/t6bikhJYMbHCTw4a5jgF/rWZGXrQJJgAU
 e2kWTNsZLHUCl+2SkJ7/n/o9SG1J/4/LGjgCkPI4TRZzD9/m635ybvUHYAayvfCx
 /I82AQlAamgUrIB25/rCrX86Dc3uw64XBMHoaAw6eCnxJsMqMgtHCgxnB8rRvMgW
 IcKp3tbeJTbxyUxpapSixEYnHnDJeZIz12AaNvGeRCfrRWPeXPQ=
 =rSck
 -----END PGP SIGNATURE-----

Merge tag 'coresight-fixes-v6.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/coresight/linux into char-misc-next

Suzuki writes:
   "coresight: Fixes for v6.1

    Fixes for coresight drivers for v6.1
     - Fix possible deadlock CTI mutexes (LOCKDEP)
     - Fix hang in CTI with runtime power management"

* tag 'coresight-fixes-v6.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/coresight/linux:
  coresight: cti: Fix hang in cti_disable_hw()
  coresight: Fix possible deadlock with lock dependency
This commit is contained in:
Greg Kroah-Hartman 2022-10-22 12:22:11 +02:00
commit da95cf6655
2 changed files with 7 additions and 8 deletions

View File

@ -1687,14 +1687,15 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
ret = coresight_fixup_device_conns(csdev);
if (!ret)
ret = coresight_fixup_orphan_conns(csdev);
if (!ret && cti_assoc_ops && cti_assoc_ops->add)
cti_assoc_ops->add(csdev);
out_unlock:
mutex_unlock(&coresight_mutex);
/* Success */
if (!ret)
if (!ret) {
if (cti_assoc_ops && cti_assoc_ops->add)
cti_assoc_ops->add(csdev);
return csdev;
}
/* Unregister the device if needed */
if (registered) {

View File

@ -94,7 +94,6 @@ static int cti_enable_hw(struct cti_drvdata *drvdata)
unsigned long flags;
int rc = 0;
pm_runtime_get_sync(dev->parent);
spin_lock_irqsave(&drvdata->spinlock, flags);
/* no need to do anything if enabled or unpowered*/
@ -119,7 +118,6 @@ cti_state_unchanged:
/* cannot enable due to error */
cti_err_not_enabled:
spin_unlock_irqrestore(&drvdata->spinlock, flags);
pm_runtime_put(dev->parent);
return rc;
}
@ -175,7 +173,6 @@ static int cti_disable_hw(struct cti_drvdata *drvdata)
coresight_disclaim_device_unlocked(csdev);
CS_LOCK(drvdata->base);
spin_unlock(&drvdata->spinlock);
pm_runtime_put(dev->parent);
return 0;
/* not disabled this call */
@ -541,7 +538,7 @@ cti_match_fixup_csdev(struct cti_device *ctidev, const char *node_name,
/*
* Search the cti list to add an associated CTI into the supplied CS device
* This will set the association if CTI declared before the CS device.
* (called from coresight_register() with coresight_mutex locked).
* (called from coresight_register() without coresight_mutex locked).
*/
static void cti_add_assoc_to_csdev(struct coresight_device *csdev)
{
@ -569,7 +566,8 @@ static void cti_add_assoc_to_csdev(struct coresight_device *csdev)
* if we found a matching csdev then update the ECT
* association pointer for the device with this CTI.
*/
csdev->ect_dev = ect_item->csdev;
coresight_set_assoc_ectdev_mutex(csdev->ect_dev,
ect_item->csdev);
break;
}
}