Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1382443 > unrolled thread

[PATCH 1/3 v6] drm: Introduce drm_connector_register_all() helper

Started byAlexey Brodkin <Alexey.Brodkin@synopsys.com>
First post2016-04-19 14:30 +0200
Last post2016-04-20 16:40 +0200
Articles 3 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 1/3 v6] drm: Introduce drm_connector_register_all() helper Alexey Brodkin <Alexey.Brodkin@synopsys.com> - 2016-04-19 14:30 +0200
    Re: [PATCH 1/3 v6] drm: Introduce drm_connector_register_all() helper Daniel Vetter <daniel@ffwll.ch> - 2016-04-20 13:30 +0200
      Re: [PATCH 1/3 v6] drm: Introduce drm_connector_register_all()  helper Alexey Brodkin <Alexey.Brodkin@synopsys.com> - 2016-04-20 16:40 +0200

#1382443 — [PATCH 1/3 v6] drm: Introduce drm_connector_register_all() helper

FromAlexey Brodkin <Alexey.Brodkin@synopsys.com>
Date2016-04-19 14:30 +0200
Subject[PATCH 1/3 v6] drm: Introduce drm_connector_register_all() helper
Message-ID<rpCX1-6Oi-41@gated-at.bofh.it>
As a pair to already existing drm_connector_unregister_all() we're adding
generic implementation of what is already done in some drivers.

Once this helper is implemented we'll be ready to switch existing
driver-specific implementations with the generic one.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: David Airlie <airlied@linux.ie>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
---

No changes v5 -> v6.

Changes v4 -> v5:
 * Added missing mutex unlock on a fail path in drm_connector_register_all().
   Thanks David for his attention and patience!

Changes v3 -> v4:
 * In drm_connector_register_all() fail path which calls unregister_all()
   is moved outside of loop&locked section (as suggested by Daniel)

Changes v2 -> v3:
 * Updated title with capital after colon
 * Simplified failure path with direct and unconditional invocation of
   unregister_all()
 * Updated kerneldoc description of the drm_connector_register_all()

Changes v1 -> v2:
 * Rename drm_connector_unplug_all() to drm_connector_unregister_all()
 * Use drm_for_each_connector() instead of list_for_each_entry()
 * Updated kerneldoc for drm_dev_register()

 drivers/gpu/drm/drm_crtc.c | 40 ++++++++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/drm_drv.c  |  6 +++++-
 include/drm/drm_crtc.h     |  3 ++-
 3 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index f7fe9e1..ee549a3 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -1068,6 +1068,46 @@ void drm_connector_unregister(struct drm_connector *connector)
 EXPORT_SYMBOL(drm_connector_unregister);
 
 /**
+ * drm_connector_register_all - register all connectors
+ * @dev: drm device
+ *
+ * This function registers all connectors in sysfs and other places so that
+ * userspace can start to access them. Drivers can call it after calling
+ * drm_dev_register() to complete the device registration, if they don't call
+ * drm_connector_register() on each connector individually.
+ *
+ * When a device is unplugged and should be removed from userspace access,
+ * call drm_connector_unregister_all(), which is the inverse of this
+ * function.
+ *
+ * Returns:
+ * Zero on success, error code on failure.
+ */
+int drm_connector_register_all(struct drm_device *dev)
+{
+	struct drm_connector *connector;
+	int ret;
+
+	mutex_lock(&dev->mode_config.mutex);
+
+	drm_for_each_connector(connector, dev) {
+		ret = drm_connector_register(connector);
+		if (ret)
+			goto err;
+	}
+
+	mutex_unlock(&dev->mode_config.mutex);
+
+	return 0;
+
+err:
+	mutex_unlock(&dev->mode_config.mutex);
+	drm_connector_unregister_all(dev);
+	return ret;
+}
+EXPORT_SYMBOL(drm_connector_register_all);
+
+/**
  * drm_connector_unregister_all - unregister connector userspace interfaces
  * @dev: drm device
  *
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 167c8d3..2c9a2b6 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -715,7 +715,11 @@ EXPORT_SYMBOL(drm_dev_unref);
  *
  * Register the DRM device @dev with the system, advertise device to user-space
  * and start normal device operation. @dev must be allocated via drm_dev_alloc()
- * previously.
+ * previously. Right after drm_dev_register() the driver should call
+ * drm_connector_register_all() to register all connectors in sysfs. This is
+ * a separate call for backward compatibility with drivers still using
+ * the deprecated ->load() callback, where connectors are registered from within
+ * the ->load() callback.
  *
  * Never call this twice on any device!
  *
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 6d46842..f9d2274 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -2249,7 +2249,8 @@ static inline unsigned drm_connector_index(struct drm_connector *connector)
 	return connector->connector_id;
 }
 
-/* helper to unregister all connectors from sysfs for device */
+/* helpers to {un}register all connectors from sysfs for device */
+extern int drm_connector_register_all(struct drm_device *dev);
 extern void drm_connector_unregister_all(struct drm_device *dev);
 
 extern int drm_bridge_add(struct drm_bridge *bridge);
-- 
2.5.5

[toc] | [next] | [standalone]


#1383309

FromDaniel Vetter <daniel@ffwll.ch>
Date2016-04-20 13:30 +0200
Message-ID<rpYuu-75L-17@gated-at.bofh.it>
In reply to#1382443
On Tue, Apr 19, 2016 at 03:24:51PM +0300, Alexey Brodkin wrote:
> As a pair to already existing drm_connector_unregister_all() we're adding
> generic implementation of what is already done in some drivers.
> 
> Once this helper is implemented we'll be ready to switch existing
> driver-specific implementations with the generic one.
> 
> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
> 
> No changes v5 -> v6.
> 
> Changes v4 -> v5:
>  * Added missing mutex unlock on a fail path in drm_connector_register_all().
>    Thanks David for his attention and patience!

When resending, please add everyone who commmented on previous versions of
your patches to the cc: list. Just to make sure they have a chance to look
at the next version.
-Daniel

> 
> Changes v3 -> v4:
>  * In drm_connector_register_all() fail path which calls unregister_all()
>    is moved outside of loop&locked section (as suggested by Daniel)
> 
> Changes v2 -> v3:
>  * Updated title with capital after colon
>  * Simplified failure path with direct and unconditional invocation of
>    unregister_all()
>  * Updated kerneldoc description of the drm_connector_register_all()
> 
> Changes v1 -> v2:
>  * Rename drm_connector_unplug_all() to drm_connector_unregister_all()
>  * Use drm_for_each_connector() instead of list_for_each_entry()
>  * Updated kerneldoc for drm_dev_register()
> 
>  drivers/gpu/drm/drm_crtc.c | 40 ++++++++++++++++++++++++++++++++++++++++
>  drivers/gpu/drm/drm_drv.c  |  6 +++++-
>  include/drm/drm_crtc.h     |  3 ++-
>  3 files changed, 47 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index f7fe9e1..ee549a3 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -1068,6 +1068,46 @@ void drm_connector_unregister(struct drm_connector *connector)
>  EXPORT_SYMBOL(drm_connector_unregister);
>  
>  /**
> + * drm_connector_register_all - register all connectors
> + * @dev: drm device
> + *
> + * This function registers all connectors in sysfs and other places so that
> + * userspace can start to access them. Drivers can call it after calling
> + * drm_dev_register() to complete the device registration, if they don't call
> + * drm_connector_register() on each connector individually.
> + *
> + * When a device is unplugged and should be removed from userspace access,
> + * call drm_connector_unregister_all(), which is the inverse of this
> + * function.
> + *
> + * Returns:
> + * Zero on success, error code on failure.
> + */
> +int drm_connector_register_all(struct drm_device *dev)
> +{
> +	struct drm_connector *connector;
> +	int ret;
> +
> +	mutex_lock(&dev->mode_config.mutex);
> +
> +	drm_for_each_connector(connector, dev) {
> +		ret = drm_connector_register(connector);
> +		if (ret)
> +			goto err;
> +	}
> +
> +	mutex_unlock(&dev->mode_config.mutex);
> +
> +	return 0;
> +
> +err:
> +	mutex_unlock(&dev->mode_config.mutex);
> +	drm_connector_unregister_all(dev);
> +	return ret;
> +}
> +EXPORT_SYMBOL(drm_connector_register_all);
> +
> +/**
>   * drm_connector_unregister_all - unregister connector userspace interfaces
>   * @dev: drm device
>   *
> diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
> index 167c8d3..2c9a2b6 100644
> --- a/drivers/gpu/drm/drm_drv.c
> +++ b/drivers/gpu/drm/drm_drv.c
> @@ -715,7 +715,11 @@ EXPORT_SYMBOL(drm_dev_unref);
>   *
>   * Register the DRM device @dev with the system, advertise device to user-space
>   * and start normal device operation. @dev must be allocated via drm_dev_alloc()
> - * previously.
> + * previously. Right after drm_dev_register() the driver should call
> + * drm_connector_register_all() to register all connectors in sysfs. This is
> + * a separate call for backward compatibility with drivers still using
> + * the deprecated ->load() callback, where connectors are registered from within
> + * the ->load() callback.
>   *
>   * Never call this twice on any device!
>   *
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index 6d46842..f9d2274 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -2249,7 +2249,8 @@ static inline unsigned drm_connector_index(struct drm_connector *connector)
>  	return connector->connector_id;
>  }
>  
> -/* helper to unregister all connectors from sysfs for device */
> +/* helpers to {un}register all connectors from sysfs for device */
> +extern int drm_connector_register_all(struct drm_device *dev);
>  extern void drm_connector_unregister_all(struct drm_device *dev);
>  
>  extern int drm_bridge_add(struct drm_bridge *bridge);
> -- 
> 2.5.5
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

[toc] | [prev] | [next] | [standalone]


#1383444 — Re: [PATCH 1/3 v6] drm: Introduce drm_connector_register_all() helper

FromAlexey Brodkin <Alexey.Brodkin@synopsys.com>
Date2016-04-20 16:40 +0200
SubjectRe: [PATCH 1/3 v6] drm: Introduce drm_connector_register_all() helper
Message-ID<rq1sm-VS-7@gated-at.bofh.it>
In reply to#1383309
Hi Daniel,

On Wed, 2016-04-20 at 13:28 +-0200, Daniel Vetter wrote:
+AD4- On Tue, Apr 19, 2016 at 03:24:51PM +-0300, Alexey Brodkin wrote:
+AD4- +AD4- 
+AD4- +AD4- As a pair to already existing drm+AF8-connector+AF8-unregister+AF8-all() we're adding
+AD4- +AD4- generic implementation of what is already done in some drivers.
+AD4- +AD4- 
+AD4- +AD4- Once this helper is implemented we'll be ready to switch existing
+AD4- +AD4- driver-specific implementations with the generic one.
+AD4- +AD4- 
+AD4- +AD4- Signed-off-by: Alexey Brodkin +ADw-abrodkin+AEA-synopsys.com+AD4-
+AD4- +AD4- Cc: Daniel Vetter +ADw-daniel+AEA-ffwll.ch+AD4-
+AD4- +AD4- Cc: David Airlie +ADw-airlied+AEA-linux.ie+AD4-
+AD4- +AD4- Cc: Boris Brezillon +ADw-boris.brezillon+AEA-free-electrons.com+AD4-
+AD4- +AD4- ---
+AD4- +AD4- 
+AD4- +AD4- No changes v5 -+AD4- v6.
+AD4- +AD4- 
+AD4- +AD4- Changes v4 -+AD4- v5:
+AD4- +AD4- +AKAAKg- Added missing mutex unlock on a fail path in drm+AF8-connector+AF8-register+AF8-all().
+AD4- +AD4- +AKAAoACg-Thanks David for his attention and patience+ACE-
+AD4- When resending, please add everyone who commmented on previous versions of
+AD4- your patches to the cc: list. Just to make sure they have a chance to look
+AD4- at the next version.

Sure I usually do that but looks like this time I completely forgot to add
more people in Cc.

-Alexey

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web