Re: [PATCH v2 1/8] drm/fb-helper: Handle function NULL argument

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Den 17.10.2017 14.38, skrev Daniel Vetter:
On Sun, Oct 15, 2017 at 06:30:35PM +0200, Noralf Trønnes wrote:
Make functions tolerate that the drm_fb_helper argument is NULL.
This is useful for drivers that continue probing when fbdev emulation
fails and not having to do this check themselves.
Update docs for functions that already handles this.

Signed-off-by: Noralf Trønnes <noralf@xxxxxxxxxxx>
Is there callsites that we can now simplify? Should we add a todo.rst
entry if there's too many?

A quick scan didn't reveal any except for some .lastclose implementations
that will be taken care of by the new lastclose helper.

Noralf.

Patch itself looks good.

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

---
  drivers/gpu/drm/drm_fb_helper.c | 28 +++++++++++++++++-----------
  1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 116d1f1337c7..954cdd48de92 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -150,6 +150,9 @@ int drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper,
  {
  	int err;
+ if (!fb_helper)
+		return 0;
+
  	mutex_lock(&fb_helper->lock);
  	err = __drm_fb_helper_add_one_connector(fb_helper, connector);
  	mutex_unlock(&fb_helper->lock);
@@ -161,7 +164,7 @@ EXPORT_SYMBOL(drm_fb_helper_add_one_connector);
  /**
   * drm_fb_helper_single_add_all_connectors() - add all connectors to fbdev
   * 					       emulation helper
- * @fb_helper: fbdev initialized with drm_fb_helper_init
+ * @fb_helper: fbdev initialized with drm_fb_helper_init, can be NULL
   *
   * This functions adds all the available connectors for use with the given
   * fb_helper. This is a separate step to allow drivers to freely assign
@@ -179,7 +182,7 @@ int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
  	struct drm_connector_list_iter conn_iter;
  	int i, ret = 0;
- if (!drm_fbdev_emulation)
+	if (!drm_fbdev_emulation || !fb_helper)
  		return 0;
mutex_lock(&fb_helper->lock);
@@ -245,6 +248,9 @@ int drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
  {
  	int err;
+ if (!fb_helper)
+		return 0;
+
  	mutex_lock(&fb_helper->lock);
  	err = __drm_fb_helper_remove_one_connector(fb_helper, connector);
  	mutex_unlock(&fb_helper->lock);
@@ -484,7 +490,7 @@ static int restore_fbdev_mode(struct drm_fb_helper *fb_helper)
/**
   * drm_fb_helper_restore_fbdev_mode_unlocked - restore fbdev configuration
- * @fb_helper: fbcon to restore
+ * @fb_helper: driver-allocated fbdev helper, can be NULL
   *
   * This should be called from driver's drm &drm_driver.lastclose callback
   * when implementing an fbcon on top of kms using this helper. This ensures that
@@ -498,7 +504,7 @@ int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper)
  	bool do_delayed;
  	int ret;
- if (!drm_fbdev_emulation)
+	if (!drm_fbdev_emulation || !fb_helper)
  		return -ENODEV;
if (READ_ONCE(fb_helper->deferred_setup))
@@ -883,7 +889,7 @@ EXPORT_SYMBOL(drm_fb_helper_alloc_fbi);
/**
   * drm_fb_helper_unregister_fbi - unregister fb_info framebuffer device
- * @fb_helper: driver-allocated fbdev helper
+ * @fb_helper: driver-allocated fbdev helper, can be NULL
   *
   * A wrapper around unregister_framebuffer, to release the fb_info
   * framebuffer device. This must be called before releasing all resources for
@@ -898,7 +904,7 @@ EXPORT_SYMBOL(drm_fb_helper_unregister_fbi);
/**
   * drm_fb_helper_fini - finialize a &struct drm_fb_helper
- * @fb_helper: driver-allocated fbdev helper
+ * @fb_helper: driver-allocated fbdev helper, can be NULL
   *
   * This cleans up all remaining resources associated with @fb_helper. Must be
   * called after drm_fb_helper_unlink_fbi() was called.
@@ -937,7 +943,7 @@ EXPORT_SYMBOL(drm_fb_helper_fini);
/**
   * drm_fb_helper_unlink_fbi - wrapper around unlink_framebuffer
- * @fb_helper: driver-allocated fbdev helper
+ * @fb_helper: driver-allocated fbdev helper, can be NULL
   *
   * A wrapper around unlink_framebuffer implemented by fbdev core
   */
@@ -1138,7 +1144,7 @@ EXPORT_SYMBOL(drm_fb_helper_cfb_imageblit);
/**
   * drm_fb_helper_set_suspend - wrapper around fb_set_suspend
- * @fb_helper: driver-allocated fbdev helper
+ * @fb_helper: driver-allocated fbdev helper, can be NULL
   * @suspend: whether to suspend or resume
   *
   * A wrapper around fb_set_suspend implemented by fbdev core.
@@ -1155,7 +1161,7 @@ EXPORT_SYMBOL(drm_fb_helper_set_suspend);
  /**
   * drm_fb_helper_set_suspend_unlocked - wrapper around fb_set_suspend that also
   *                                      takes the console lock
- * @fb_helper: driver-allocated fbdev helper
+ * @fb_helper: driver-allocated fbdev helper, can be NULL
   * @suspend: whether to suspend or resume
   *
   * A wrapper around fb_set_suspend() that takes the console lock. If the lock
@@ -2568,7 +2574,7 @@ EXPORT_SYMBOL(drm_fb_helper_initial_config);
  /**
   * drm_fb_helper_hotplug_event - respond to a hotplug notification by
   *                               probing all the outputs attached to the fb
- * @fb_helper: the drm_fb_helper
+ * @fb_helper: driver-allocated fbdev helper, can be NULL
   *
   * Scan the connectors attached to the fb_helper and try to put together a
   * setup after notification of a change in output configuration.
@@ -2590,7 +2596,7 @@ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
  {
  	int err = 0;
- if (!drm_fbdev_emulation)
+	if (!drm_fbdev_emulation || !fb_helper)
  		return 0;
mutex_lock(&fb_helper->lock);
--
2.14.2


_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux