public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v9 04/39] component: alloc component_match without any comp to match
       [not found] <1544650998-31192-1-git-send-email-ramalingam.c@intel.com>
@ 2018-12-12 21:42 ` Ramalingam C
  0 siblings, 0 replies; 4+ messages in thread
From: Ramalingam C @ 2018-12-12 21:42 UTC (permalink / raw)
  To: intel-gfx-trybot
  Cc: Ramalingam C, Greg Kroah-Hartman, Kate Stewart, Thomas Gleixner,
	Philippe Ombredanne, linux-kernel

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,
even if no component is registered for that particular master.

This is meant for big PCI device drivers where small/optional
features are external components, and based on usecases different
combination of components are build as entire driver.

In such PCI device driver Load, if we use the component master for
waiting for few  components(features) availability, only if they are
supported by the underlying HW, then we need to allocate memory for
component_match using the API introduced in this change before
the call to component_master_add_with_match.

v2:
  No Change.

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: linux-kernel@vger.kernel.org
---
 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 e8d676fad0c9..0ab36b2255ea 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


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v9 04/39] component: alloc component_match without any comp to match
       [not found] <1544673701-6353-1-git-send-email-ramalingam.c@intel.com>
@ 2018-12-13  4:01 ` Ramalingam C
  2018-12-19 13:42   ` Daniel Vetter
  0 siblings, 1 reply; 4+ messages in thread
From: Ramalingam C @ 2018-12-13  4:01 UTC (permalink / raw)
  To: intel-gfx, dri-devel, seanpaul, daniel.vetter, tomas.winkler,
	uma.shankar
  Cc: ville.syrjala, chris, Ramalingam C, Greg Kroah-Hartman,
	Kate Stewart, Thomas Gleixner, Philippe Ombredanne, linux-kernel

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,
even if no component is registered for that particular master.

This is meant for big PCI device drivers where small/optional
features are external components, and based on usecases different
combination of components are build as entire driver.

In such PCI device driver Load, if we use the component master for
waiting for few  components(features) availability, only if they are
supported by the underlying HW, then we need to allocate memory for
component_match using the API introduced in this change before
the call to component_master_add_with_match.

v2:
  No Change.

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: linux-kernel@vger.kernel.org
---
 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 e8d676fad0c9..0ab36b2255ea 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


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v9 04/39] component: alloc component_match without any comp to match
  2018-12-13  4:01 ` [PATCH v9 04/39] component: alloc component_match without any comp to match Ramalingam C
@ 2018-12-19 13:42   ` Daniel Vetter
  2018-12-19 15:04     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 4+ messages in thread
From: Daniel Vetter @ 2018-12-19 13:42 UTC (permalink / raw)
  To: Ramalingam C
  Cc: intel-gfx, dri-devel, seanpaul, daniel.vetter, tomas.winkler,
	uma.shankar, ville.syrjala, chris, Greg Kroah-Hartman,
	Kate Stewart, Thomas Gleixner, Philippe Ombredanne, linux-kernel

On Thu, Dec 13, 2018 at 09:31:06AM +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,
> even if no component is registered for that particular master.
> 
> This is meant for big PCI device drivers where small/optional
> features are external components, and based on usecases different
> combination of components are build as entire driver.
> 
> In such PCI device driver Load, if we use the component master for
> waiting for few  components(features) availability, only if they are
> supported by the underlying HW, then we need to allocate memory for
> component_match using the API introduced in this change before
> the call to component_master_add_with_match.
> 
> v2:
>   No Change.
> 
> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
> Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Kate Stewart <kstewart@linuxfoundation.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Philippe Ombredanne <pombredanne@nexb.com>
> Cc: linux-kernel@vger.kernel.org

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Greg, I expect the i915 feature that needs this will only land in 4.22.
I'm also not aware of anyone else using this (all the other component
users always use components). How do you want to get this landed?

I think either getting this into 4.21, or an ack for merging through drm
trees would work well for us.
-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 e8d676fad0c9..0ab36b2255ea 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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v9 04/39] component: alloc component_match without any comp to match
  2018-12-19 13:42   ` Daniel Vetter
@ 2018-12-19 15:04     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 4+ messages in thread
From: Greg Kroah-Hartman @ 2018-12-19 15:04 UTC (permalink / raw)
  To: Ramalingam C, intel-gfx, dri-devel, seanpaul, tomas.winkler,
	uma.shankar, ville.syrjala, chris, Kate Stewart, Thomas Gleixner,
	Philippe Ombredanne, linux-kernel

On Wed, Dec 19, 2018 at 02:42:45PM +0100, Daniel Vetter wrote:
> On Thu, Dec 13, 2018 at 09:31:06AM +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,
> > even if no component is registered for that particular master.
> > 
> > This is meant for big PCI device drivers where small/optional
> > features are external components, and based on usecases different
> > combination of components are build as entire driver.
> > 
> > In such PCI device driver Load, if we use the component master for
> > waiting for few  components(features) availability, only if they are
> > supported by the underlying HW, then we need to allocate memory for
> > component_match using the API introduced in this change before
> > the call to component_master_add_with_match.
> > 
> > v2:
> >   No Change.
> > 
> > Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
> > Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Cc: Kate Stewart <kstewart@linuxfoundation.org>
> > Cc: Thomas Gleixner <tglx@linutronix.de>
> > Cc: Philippe Ombredanne <pombredanne@nexb.com>
> > Cc: linux-kernel@vger.kernel.org
> 
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> 
> Greg, I expect the i915 feature that needs this will only land in 4.22.
> I'm also not aware of anyone else using this (all the other component
> users always use components). How do you want to get this landed?
> 
> I think either getting this into 4.21, or an ack for merging through drm
> trees would work well for us.

I have no objection to you taking this through the drm tree.  As I
really do not know the component code at all (that would be Russell
King), feel free to add my:

	Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

as it looks sane to me.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-12-19 15:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1544673701-6353-1-git-send-email-ramalingam.c@intel.com>
2018-12-13  4:01 ` [PATCH v9 04/39] component: alloc component_match without any comp to match Ramalingam C
2018-12-19 13:42   ` Daniel Vetter
2018-12-19 15:04     ` Greg Kroah-Hartman
     [not found] <1544650998-31192-1-git-send-email-ramalingam.c@intel.com>
2018-12-12 21:42 ` Ramalingam C

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox