diff mbox series

[v5,16/30] libpdbg: Probe should traverse virtual nodes also

Message ID 20191014051748.20190-17-amitay@ozlabs.org
State Accepted
Headers show
Series Add system device tree to libpdbg | expand

Commit Message

Amitay Isaacs Oct. 14, 2019, 5:17 a.m. UTC
This ensures that the virtual nodes have correct status in the system
device tree view.

Signed-off-by: Amitay Isaacs <amitay@ozlabs.org>
---
 libpdbg/target.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Alistair Popple Oct. 15, 2019, 3:57 a.m. UTC | #1
Reviewed-by: Alistair Popple <alistair@popple.id.au>

On Monday, 14 October 2019 4:17:34 PM AEDT Amitay Isaacs wrote:
> This ensures that the virtual nodes have correct status in the system
> device tree view.
> 
> Signed-off-by: Amitay Isaacs <amitay@ozlabs.org>
> ---
>  libpdbg/target.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/libpdbg/target.c b/libpdbg/target.c
> index 627a44e..84aa510 100644
> --- a/libpdbg/target.c
> +++ b/libpdbg/target.c
> @@ -360,7 +360,7 @@ struct pdbg_target_class *get_target_class(struct pdbg_target *target)
>   * exist but don't */
>  enum pdbg_target_status pdbg_target_probe(struct pdbg_target *target)
>  {
> -	struct pdbg_target *parent;
> +	struct pdbg_target *parent, *vnode;
>  	enum pdbg_target_status status;
>  
>  	assert(target);
> @@ -374,7 +374,7 @@ enum pdbg_target_status pdbg_target_probe(struct pdbg_target *target)
>  		 * it's status won't have changed */
>  		   return status;
>  
> -	parent = target->parent;
> +	parent = get_parent(target, false);
>  	if (parent) {
>  		/* Recurse up the tree to probe and set parent target status */
>  		pdbg_target_probe(parent);
> @@ -406,6 +406,11 @@ enum pdbg_target_status pdbg_target_probe(struct pdbg_target *target)
>  		}
>  	}
>  
> +	/* Make sure any virtual nodes are also probed */
> +	vnode = target_to_virtual(target, true);
> +	if (vnode)
> +		pdbg_target_probe(vnode);
> +
>  	/* At this point any parents must exist and have already been probed */
>  	if (target->probe && target->probe(target)) {
>  		/* Could not find the target */
>
diff mbox series

Patch

diff --git a/libpdbg/target.c b/libpdbg/target.c
index 627a44e..84aa510 100644
--- a/libpdbg/target.c
+++ b/libpdbg/target.c
@@ -360,7 +360,7 @@  struct pdbg_target_class *get_target_class(struct pdbg_target *target)
  * exist but don't */
 enum pdbg_target_status pdbg_target_probe(struct pdbg_target *target)
 {
-	struct pdbg_target *parent;
+	struct pdbg_target *parent, *vnode;
 	enum pdbg_target_status status;
 
 	assert(target);
@@ -374,7 +374,7 @@  enum pdbg_target_status pdbg_target_probe(struct pdbg_target *target)
 		 * it's status won't have changed */
 		   return status;
 
-	parent = target->parent;
+	parent = get_parent(target, false);
 	if (parent) {
 		/* Recurse up the tree to probe and set parent target status */
 		pdbg_target_probe(parent);
@@ -406,6 +406,11 @@  enum pdbg_target_status pdbg_target_probe(struct pdbg_target *target)
 		}
 	}
 
+	/* Make sure any virtual nodes are also probed */
+	vnode = target_to_virtual(target, true);
+	if (vnode)
+		pdbg_target_probe(vnode);
+
 	/* At this point any parents must exist and have already been probed */
 	if (target->probe && target->probe(target)) {
 		/* Could not find the target */