[Pdbg] [PATCH v2 08/15] main: Switch to path based target selection

Amitay Isaacs amitay at ozlabs.org
Tue Nov 13 16:34:53 AEDT 2018


On Tue, 2018-11-13 at 15:19 +1100, Alistair Popple wrote:
> On Tuesday, 13 November 2018 3:16:22 PM AEDT Alistair Popple wrote:
> > Looks good, happy to see this code start to disappear.
> > 
> > > @@ -523,19 +519,12 @@ static bool parse_options(int argc, char
> > > *argv[])
> > > 
> > >  void target_select(struct pdbg_target *target)
> > >  {
> > > 
> > > -	/* We abuse the private data pointer atm to indicate the target
> > > is
> > > -	 * selected */
> > > -	pdbg_target_priv_set(target, (void *) 1);
> > > -}
> > > -
> > > -void target_unselect(struct pdbg_target *target)
> > > -{
> > > -	pdbg_target_priv_set(target, NULL);
> > > +	path_target_add(target);
> > 
> > Do you think there's any value in keeping this function rather than
> > just
> > changing the existing code to call path_target_add() directly? It's
> > not part
> > of any external API so it seems to just add an unnecessary
> > indirection.
> 
> Actually better yet might be to just delete these functions and
> rename the new 
> path_target_add() and path_target_selected() to target_select() and 
> target_selected()?

The only reason, I left those functions because they are used in htm.c
and pdbgproxy.c.  As we convert those commands, we can call the path
api directly. Eventually target_*() functions will become unused and
then we can drop them.

This way less chances of breaking the existing functionality.

> 
> - Alistair
> 
> > >  }
> > >  
> > >  bool target_selected(struct pdbg_target *target)
> > >  {
> > > 
> > > -	return (bool) pdbg_target_priv(target);
> > > +	return path_target_selected(target);
> > 
> > Ditto.
> > 
> > - Alistair
> > 
> > >  }
> > >  
> > >  /* Returns the sum of return codes. This can be used to count
> > > how many
> > > 
> > > targets the callback was run on. */ @@ -554,7 +543,6 @@ int
> > > for_each_child_target(char *class, struct pdbg_target *parent,
> > > 
> > >  		index = pdbg_target_index(target);
> > >  		assert(index != -1);
> > > 
> > > -		pdbg_target_probe(target);
> > > 
> > >  		status = pdbg_target_status(target);
> > >  		if (status != PDBG_TARGET_ENABLED)
> > >  		
> > >  			continue;
> > > 
> > > @@ -578,7 +566,6 @@ int for_each_target(char *class, int
> > > (*cb)(struct
> > > pdbg_target *, uint32_t, uint6
> > > 
> > >  		index = pdbg_target_index(target);
> > >  		assert(index != -1);
> > > 
> > > -		pdbg_target_probe(target);
> > > 
> > >  		status = pdbg_target_status(target);
> > >  		if (status != PDBG_TARGET_ENABLED)
> > >  		
> > >  			continue;
> > > 
> > > @@ -603,8 +590,6 @@ void for_each_target_release(char *class)
> > > 
> > >  static bool target_selection(void)
> > >  {
> > > 
> > > -	struct pdbg_target *fsi, *pib, *chip, *thread;
> > > -
> > > 
> > >  	switch (backend) {
> > >  
> > >  #ifdef TARGET_ARM
> > >  
> > >  	case I2C:
> > > @@ -671,63 +656,17 @@ static bool target_selection(void)
> > > 
> > >  		return false;
> > >  	
> > >  	}
> > > 
> > > -	/* At this point we should have a device-tree loaded. We want
> > > -	 * to walk the tree and disabled nodes we don't care about
> > > -	 * prior to probing. */
> > > -	pdbg_for_each_class_target("pib", pib) {
> > > -		int proc_index = pdbg_target_index(pib);
> > > -
> > > -		if (backend == I2C && device_node)
> > > -			pdbg_target_set_property(pib, "bus",
> > > device_node,
> > 
> > strlen(device_node) +
> > 
> > > 1); -
> > > -		if (processorsel[proc_index]) {
> > > -			target_select(pib);
> > > -			pdbg_for_each_target("core", pib, chip) {
> > > -				int chip_index =
> > > pdbg_target_index(chip);
> > > -				if (pdbg_parent_index(chip, "pib") !=
> > > proc_index)
> > > -					continue;
> > > -
> > > -				if (chipsel[proc_index][chip_index]) {
> > > -					target_select(chip);
> > > -					pdbg_for_each_target("thread",
> > > chip, thread) {
> > > -						int thread_index =
> > > pdbg_target_index(thread);
> > > -						if
> > > (threadsel[proc_index][chip_index][thread_index])
> > > -							target_select(t
> > > hread);
> > > -						else
> > > -							target_unselect
> > > (thread);
> > > -					}
> > > -				} else
> > > -					target_unselect(chip);
> > > -			}
> > > -
> > > -			/* This is kinda broken as we're overloading
> > > what '-c'
> > > -			 * means - it's now up to each command to
> > > select targets
> > > -			 * based on core/chiplet. We really need a
> > > better
> > > -			 * solution to target selection. */
> > > -			pdbg_for_each_target("chiplet", pib, chip) {
> > > -				int chip_index =
> > > pdbg_target_index(chip);
> > > -				if (chipsel[proc_index][chip_index]) {
> > > -					target_select(chip);
> > > -				} else
> > > -					target_unselect(chip);
> > > -			}
> > > -		} else
> > > -			target_unselect(pib);
> > > -	}
> > > -
> > > -	pdbg_for_each_class_target("fsi", fsi) {
> > > -		int index = pdbg_target_index(fsi);
> > > -		if (processorsel[index])
> > > -			target_select(fsi);
> > > -		else
> > > -			target_unselect(fsi);
> > > -	}
> > > -
> > > 
> > >  	if (pathsel_count) {
> > >  	
> > >  		if (!path_target_parse(pathsel, pathsel_count))
> > >  		
> > >  			return false;
> > >  	
> > >  	}
> > > 
> > > +	if (!path_target_present()) {
> > > +		printf("No valid targets found or specified. Try adding
> > > -p/-c/-t
> > 
> > options
> > 
> > > to specify a target.\n"); +		printf("Alternatively
> > > run 'pdbg -a probe' 
> to
> > > get a list of all valid targets\n"); +		return false;
> > > +	}
> > > +
> > > 
> > >  	return true;
> > >  
> > >  }
> > > 
> > > @@ -860,8 +799,5 @@ found_action:
> > >  	if (rc > 0)
> > >  	
> > >  		return 0;
> > > 
> > > -	printf("No valid targets found or specified. Try adding -p/-c/-
> > > t options
> > > to specify a target.\n"); -	printf("Alternatively run '%s
> > > -a probe' to 
> get
> > > a list of all valid targets\n", -	       basename(argv[0]));
> > > 
> > >  	return 1;
> > >  
> > >  }
> 
> 

Amitay.
-- 

Real generosity is doing something nice for someone who'll never find it out.
- Frank A. Clark



More information about the Pdbg mailing list