qcacld-3.0: Modify DSC trans assert to check ancestors

Currently, APIs in the dsc_*_trans_assert() family assert a transition
is in flight on the given node itself. Instead, replace this API family
with another, dsc_*_assert_trans_protected(), which assert a
transition is in flight on the given node or any of its ancestors.

Change-Id: I5fb07000f955a49a4e5529806f4e49d9dbc8acb7
CRs-Fixed: 2347789
This commit is contained in:
Dustin Brown
2018-11-09 14:50:45 -08:00
committed by nshrivas
parent 8c282e4087
commit c35ea2d785
6 changed files with 28 additions and 20 deletions

View File

@@ -96,12 +96,13 @@ dsc_driver_trans_start_wait(struct dsc_driver *driver, const char *desc);
void dsc_driver_trans_stop(struct dsc_driver *driver); void dsc_driver_trans_stop(struct dsc_driver *driver);
/** /**
* dsc_driver_trans_assert() - assert transition in flight on @driver * dsc_driver_assert_trans_protected() - assert @driver is protected by a
* @driver: the driver to assert transition in flight on * transition
* @driver: the driver to check
* *
* Return: None * Return: None
*/ */
void dsc_driver_trans_assert(struct dsc_driver *driver); void dsc_driver_assert_trans_protected(struct dsc_driver *driver);
/** /**
* dsc_driver_op_start() - start an operation on @driver * dsc_driver_op_start() - start an operation on @driver

View File

@@ -101,12 +101,14 @@ QDF_STATUS dsc_psoc_trans_start_wait(struct dsc_psoc *psoc, const char *desc);
void dsc_psoc_trans_stop(struct dsc_psoc *psoc); void dsc_psoc_trans_stop(struct dsc_psoc *psoc);
/** /**
* dsc_psoc_trans_assert() - assert transition in flight on @psoc * dsc_psoc_assert_trans_protected() - assert @psoc is protected by a transition
* @psoc: the psoc to assert transition in flight on * @psoc: the psoc to check
*
* The protecting transition may be in flight on @psoc or its parent.
* *
* Return: None * Return: None
*/ */
void dsc_psoc_trans_assert(struct dsc_psoc *psoc); void dsc_psoc_assert_trans_protected(struct dsc_psoc *psoc);
/** /**
* dsc_psoc_op_start() - start an operation on @psoc * dsc_psoc_op_start() - start an operation on @psoc

View File

@@ -99,12 +99,14 @@ QDF_STATUS dsc_vdev_trans_start_wait(struct dsc_vdev *vdev, const char *desc);
void dsc_vdev_trans_stop(struct dsc_vdev *vdev); void dsc_vdev_trans_stop(struct dsc_vdev *vdev);
/** /**
* dsc_vdev_trans_assert() - assert transition in flight on @vdev * dsc_vdev_assert_trans_protected() - assert @vdev is protected by a transition
* @vdev: the vdev to assert transition in flight on * @vdev: the vdev to check
*
* The protecting transition may be in flight on @vdev or its ancestors.
* *
* Return: None * Return: None
*/ */
void dsc_vdev_trans_assert(struct dsc_vdev *vdev); void dsc_vdev_assert_trans_protected(struct dsc_vdev *vdev);
/** /**
* dsc_vdev_op_start() - start an operation on @vdev * dsc_vdev_op_start() - start an operation on @vdev

View File

@@ -271,7 +271,7 @@ void dsc_driver_trans_stop(struct dsc_driver *driver)
dsc_exit(); dsc_exit();
} }
static void __dsc_driver_trans_assert(struct dsc_driver *driver) static void __dsc_driver_assert_trans_protected(struct dsc_driver *driver)
{ {
if (!dsc_assert(driver)) if (!dsc_assert(driver))
return; return;
@@ -281,10 +281,10 @@ static void __dsc_driver_trans_assert(struct dsc_driver *driver)
__dsc_unlock(driver); __dsc_unlock(driver);
} }
void dsc_driver_trans_assert(struct dsc_driver *driver) void dsc_driver_assert_trans_protected(struct dsc_driver *driver)
{ {
dsc_enter(); dsc_enter();
__dsc_driver_trans_assert(driver); __dsc_driver_assert_trans_protected(driver);
dsc_exit(); dsc_exit();
} }

View File

@@ -260,20 +260,21 @@ void dsc_psoc_trans_stop(struct dsc_psoc *psoc)
dsc_exit(); dsc_exit();
} }
static void __dsc_psoc_trans_assert(struct dsc_psoc *psoc) static void __dsc_psoc_assert_trans_protected(struct dsc_psoc *psoc)
{ {
if (!dsc_assert(psoc)) if (!dsc_assert(psoc))
return; return;
__dsc_driver_lock(psoc); __dsc_driver_lock(psoc);
dsc_assert(__dsc_trans_active(&psoc->trans)); dsc_assert(__dsc_trans_active(&psoc->trans) ||
__dsc_trans_active(&psoc->driver->trans));
__dsc_driver_unlock(psoc); __dsc_driver_unlock(psoc);
} }
void dsc_psoc_trans_assert(struct dsc_psoc *psoc) void dsc_psoc_assert_trans_protected(struct dsc_psoc *psoc)
{ {
dsc_enter(); dsc_enter();
__dsc_psoc_trans_assert(psoc); __dsc_psoc_assert_trans_protected(psoc);
dsc_exit(); dsc_exit();
} }

View File

@@ -231,20 +231,22 @@ void dsc_vdev_trans_stop(struct dsc_vdev *vdev)
dsc_exit(); dsc_exit();
} }
static void __dsc_vdev_trans_assert(struct dsc_vdev *vdev) static void __dsc_vdev_assert_trans_protected(struct dsc_vdev *vdev)
{ {
if (!dsc_assert(vdev)) if (!dsc_assert(vdev))
return; return;
__dsc_driver_lock(vdev); __dsc_driver_lock(vdev);
dsc_assert(__dsc_trans_active(&vdev->trans)); dsc_assert(__dsc_trans_active(&vdev->trans) ||
__dsc_trans_active(&vdev->psoc->trans) ||
__dsc_trans_active(&vdev->psoc->driver->trans));
__dsc_driver_unlock(vdev); __dsc_driver_unlock(vdev);
} }
void dsc_vdev_trans_assert(struct dsc_vdev *vdev) void dsc_vdev_assert_trans_protected(struct dsc_vdev *vdev)
{ {
dsc_enter(); dsc_enter();
__dsc_vdev_trans_assert(vdev); __dsc_vdev_assert_trans_protected(vdev);
dsc_exit(); dsc_exit();
} }