On Wed, Jul 11, 2018 at 07:41:26PM +0530, Ramalingam C wrote: > If all the components associated to a component master is not added > to the component framework due to the HW capability or Kconfig > selection, component_match will be NULL at > component_master_add_with_match(). > > To avoid this, component_match_alloc() is added to the framework, > to allcoate the struct component_match with zero associated components. > Hence component master can be added with a component_match with zero > associated components. > > This helps the component master bind call to get triggered always, > even if no component is registered for that particular master. > > This is useful if we use the component master for waiting for few > components(features), only if they are registered, else proceed with > the normal flow. registered is a bit confusing here, I'd go with "supported by the underlying hw". And maybe also explain that this is for big pci device drivers where only some small/optional things are external components, so different use-case from SoC drivers where the entire driver is always built up from lots of small components. When you submit this for real please also run script/get_maintainers.pl for the full Cc: list. > Signed-off-by: Ramalingam C <ramalingam.c@xxxxxxxxx> > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> Uh, don't do this, ever. I didn't put my s-o-b onto this patch. If you want to credit me for the suggestion, use Suggested-by: ... s-o-b has legal meaning and is like signing a contract, you've just forged my signature here. Same applies to reviewed-by tags btw. -Daniel > --- > drivers/base/component.c | 30 ++++++++++++++++++++++++++++++ > include/linux/component.h | 2 ++ > 2 files changed, 32 insertions(+) > > diff --git a/drivers/base/component.c b/drivers/base/component.c > index 8946dfee4768..007fb738263a 100644 > --- a/drivers/base/component.c > +++ b/drivers/base/component.c > @@ -312,6 +312,36 @@ static int component_match_realloc(struct device *dev, > } > > /* > + * Allocate the match without any component_match_array elements. > + * > + * This function is useful when the component master might end up > + * registering itself without any matching components. > + */ > +void component_match_alloc(struct device *master, > + struct component_match **matchptr) > +{ > + struct component_match *match = *matchptr; > + > + if (IS_ERR(match)) > + return; > + > + if (match) > + return; > + > + match = devres_alloc(devm_component_match_release, > + sizeof(*match), GFP_KERNEL); > + if (!match) { > + *matchptr = ERR_PTR(-ENOMEM); > + return; > + } > + > + devres_add(master, match); > + > + *matchptr = match; > +} > +EXPORT_SYMBOL(component_match_alloc); > + > +/* > * Add a component to be matched, with a release function. > * > * The match array is first created or extended if necessary. > diff --git a/include/linux/component.h b/include/linux/component.h > index e71fbbbc74e2..3f6b420a58f8 100644 > --- a/include/linux/component.h > +++ b/include/linux/component.h > @@ -37,6 +37,8 @@ void component_match_add_release(struct device *master, > struct component_match **matchptr, > void (*release)(struct device *, void *), > int (*compare)(struct device *, void *), void *compare_data); > +void component_match_alloc(struct device *master, > + struct component_match **matchptr); > > static inline void component_match_add(struct device *master, > struct component_match **matchptr, > -- > 2.7.4 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx