From: Daniel Vetter <daniel@ffwll.ch>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-kernel@vger.kernel.org,
Russell King <rmk+kernel@arm.linux.org.uk>
Subject: Re: [RFC 4/5] drm: Introduce drm_set_unique()
Date: Tue, 22 Apr 2014 17:48:07 +0200 [thread overview]
Message-ID: <20140422154807.GT10722@phenom.ffwll.local> (raw)
In-Reply-To: <1398179373-29966-5-git-send-email-thierry.reding@gmail.com>
On Tue, Apr 22, 2014 at 05:09:32PM +0200, Thierry Reding wrote:
> From: Thierry Reding <treding@nvidia.com>
>
> Add a helper function that allows drivers to statically set the unique
> name of the device. This will allow platform and USB drivers to get rid
> of their DRM bus implementations and directly use drm_dev_alloc() and
> drm_dev_register().
>
> Signed-off-by: Thierry Reding <treding@nvidia.com>
> ---
> drivers/gpu/drm/drm_ioctl.c | 37 +++++++++++++++++++++++++++++++------
> drivers/gpu/drm/drm_stub.c | 1 +
> include/drm/drmP.h | 3 +++
> 3 files changed, 35 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> index 2dd3a6d8382b..371db3bef60c 100644
> --- a/drivers/gpu/drm/drm_ioctl.c
> +++ b/drivers/gpu/drm/drm_ioctl.c
> @@ -42,6 +42,20 @@
> #include <asm/mtrr.h>
> #endif
>
> +int drm_set_unique(struct drm_device *dev, const char *fmt, ...)
Can you please add a bit of kerneldoc for this? drm_ioctl.c isn't yet
pulled into the drm reference docbook, but better to have it there
already. With that fixed this is
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> +{
> + va_list ap;
> +
> + kfree(dev->unique);
> +
> + va_start(ap, fmt);
> + dev->unique = kvasprintf(GFP_KERNEL, fmt, ap);
> + va_end(ap);
> +
> + return dev->unique ? 0 : -ENOMEM;
> +}
> +EXPORT_SYMBOL(drm_set_unique);
> +
> /**
> * Get the bus id.
> *
> @@ -131,13 +145,24 @@ static int drm_set_busid(struct drm_device *dev, struct drm_file *file_priv)
> if (master->unique != NULL)
> drm_unset_busid(dev, master);
>
> - ret = dev->driver->bus->set_busid(dev, master);
> - if (ret)
> - goto err;
> + if (dev->driver->bus && dev->driver->bus->set_busid) {
> + ret = dev->driver->bus->set_busid(dev, master);
> + if (ret) {
> + drm_unset_busid(dev, master);
> + return ret;
> + }
> + } else {
> + WARN(dev->unique == NULL,
> + "No drm_bus.set_busid() implementation provided by %ps. "
> + "Set the unique name explicitly using drm_set_unique().",
> + dev->driver);
> +
> + master->unique = kstrdup(dev->unique, GFP_KERNEL);
> + if (master->unique)
> + master->unique_len = strlen(dev->unique);
> + }
> +
> return 0;
> -err:
> - drm_unset_busid(dev, master);
> - return ret;
> }
>
> /**
> diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
> index 3a8e832ad151..9465cf766fe7 100644
> --- a/drivers/gpu/drm/drm_stub.c
> +++ b/drivers/gpu/drm/drm_stub.c
> @@ -646,6 +646,7 @@ static void drm_dev_release(struct kref *ref)
> drm_minor_free(dev, DRM_MINOR_CONTROL);
>
> mutex_destroy(&dev->master_mutex);
> + kfree(dev->unique);
> kfree(dev);
> }
>
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 8c80c1894b41..8fdefcdc4036 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1158,6 +1158,8 @@ struct drm_device {
> struct drm_vma_offset_manager *vma_offset_manager;
> /*@} */
> int switch_power_state;
> +
> + char *unique;
> };
>
> #define DRM_SWITCH_POWER_ON 0
> @@ -1238,6 +1240,7 @@ extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
> /* Misc. IOCTL support (drm_ioctl.h) */
> extern int drm_irq_by_busid(struct drm_device *dev, void *data,
> struct drm_file *file_priv);
> +extern int drm_set_unique(struct drm_device *dev, const char *fmt, ...);
> extern int drm_getunique(struct drm_device *dev, void *data,
> struct drm_file *file_priv);
> extern int drm_setunique(struct drm_device *dev, void *data,
> --
> 1.9.2
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
next prev parent reply other threads:[~2014-04-22 15:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-22 15:09 [RFC 0/5] drm/tegra: Convert to master/component framework Thierry Reding
2014-04-22 15:09 ` [RFC 1/5] drivers/base: Allow multiple masters per device Thierry Reding
2014-04-22 15:09 ` [RFC 2/5] drivers/base: Allow driver-data to be attached to a master Thierry Reding
2014-04-22 15:09 ` [RFC 3/5] drivers/base: Add interface framework Thierry Reding
2014-04-22 15:09 ` [RFC 4/5] drm: Introduce drm_set_unique() Thierry Reding
2014-04-22 15:48 ` Daniel Vetter [this message]
2014-04-23 7:17 ` Thierry Reding
2014-04-23 8:40 ` Daniel Vetter
2014-04-23 10:48 ` David Herrmann
2014-04-23 13:37 ` Thierry Reding
2014-04-22 15:09 ` [RFC 5/5] drm/tegra: Convert to master/component framework Thierry Reding
2014-04-30 22:01 ` [RFC 0/5] " Thierry Reding
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140422154807.GT10722@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=rmk+kernel@arm.linux.org.uk \
--cc=thierry.reding@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).