[PATCH 13/25] drm: remove FASYNC support

David Herrmann dh.herrmann at gmail.com
Tue Aug 13 12:26:00 PDT 2013


Hi

On Thu, Aug 8, 2013 at 3:41 PM, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> So I've stumbled over drm_fasync and wondered what it does. Digging
> that up is quite a story.
>
> First I've had to read up on what this does and ended up being rather
> bewildered why peopled loved signals so much back in the days that
> they've created SIGIO just for that ...
>
> Then I wondered how this ever works, and what that strange "No-op."
> comment right above it should mean. After all calling the core fasync
> helper is pretty obviously not a noop. After reading through the
> kernels FASYNC implementation I've noticed that signals are only sent
> out to the processes attached with FASYNC by calling kill_fasync.
>
> No merged drm driver has ever done that.
>
> After more digging I've found out that the only driver that ever used
> this is the so called GAMMA driver. I've frankly never heard of such a
> gpu brand ever before. Now FASYNC seems to not have been the only bad
> thing with that driver, since Dave Airlie removed it from the drm
> driver with prejudice:
>
> commit 1430163b4bbf7b00367ea1066c1c5fe85dbeefed
> Author: Dave Airlie <airlied at linux.ie>
> Date:   Sun Aug 29 12:04:35 2004 +0000
>
>     Drop GAMMA DRM from a great height ...
>
> Long story short, the drm fasync support seems to be doing absolutely
> nothing. And the only user of it was never merged into the upstream
> kernel. And we don't need any fops->fasync callback since the fcntl
> implementation in the kernel already implements the noop case
> correctly.
>
> So stop this particular cargo-cult and rip it all out.
>
> v2: Kill drm_fasync assignments in rcar (newly added) and imx drivers
> (somehow I've missed that one in staging). Also drop the reference in
> the drm DocBook. ARM compile-fail reported by Rob Clark.
>
> v3: Move the removal of dev->buf_asnyc assignment in drm_setup to this
> patch here.
>
> v4: Actually git add ... tsk.
>
> Cc: Dave Airlie <airlied at linux.ie>
> Cc: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Cc: Rob Clark <robdclark at gmail.com>
> Acked-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>

Looks good now. It reminds me that I should resend the O_NONBLOCK
implementation of drm_read() which would properly replace any SIGIO
uses...

Reviewed-by: David Herrmann <dh.herrmann at gmail.com>

Regards
David

> ---
>  Documentation/DocBook/drm.tmpl           |  1 -
>  drivers/gpu/drm/ast/ast_drv.c            |  1 -
>  drivers/gpu/drm/cirrus/cirrus_drv.c      |  1 -
>  drivers/gpu/drm/drm_fops.c               | 14 --------------
>  drivers/gpu/drm/gma500/psb_drv.c         |  1 -
>  drivers/gpu/drm/i810/i810_dma.c          |  1 -
>  drivers/gpu/drm/i810/i810_drv.c          |  1 -
>  drivers/gpu/drm/i915/i915_drv.c          |  1 -
>  drivers/gpu/drm/mga/mga_drv.c            |  1 -
>  drivers/gpu/drm/mgag200/mgag200_drv.c    |  1 -
>  drivers/gpu/drm/nouveau/nouveau_drm.c    |  1 -
>  drivers/gpu/drm/omapdrm/omap_drv.c       |  1 -
>  drivers/gpu/drm/qxl/qxl_drv.c            |  1 -
>  drivers/gpu/drm/r128/r128_drv.c          |  1 -
>  drivers/gpu/drm/radeon/radeon_drv.c      |  2 --
>  drivers/gpu/drm/rcar-du/rcar_du_drv.c    |  1 -
>  drivers/gpu/drm/savage/savage_drv.c      |  1 -
>  drivers/gpu/drm/shmobile/shmob_drm_drv.c |  1 -
>  drivers/gpu/drm/sis/sis_drv.c            |  1 -
>  drivers/gpu/drm/tdfx/tdfx_drv.c          |  1 -
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c      |  1 -
>  drivers/gpu/drm/udl/udl_drv.c            |  1 -
>  drivers/gpu/drm/via/via_drv.c            |  1 -
>  drivers/gpu/drm/vmwgfx/vmwgfx_drv.c      |  1 -
>  drivers/gpu/host1x/drm/drm.c             |  1 -
>  drivers/staging/imx-drm/imx-drm-core.c   |  1 -
>  include/drm/drmP.h                       |  3 ---
>  27 files changed, 43 deletions(-)
>
> diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl
> index c62d2d4..d51d157 100644
> --- a/Documentation/DocBook/drm.tmpl
> +++ b/Documentation/DocBook/drm.tmpl
> @@ -2509,7 +2509,6 @@ void (*postclose) (struct drm_device *, struct drm_file *);</synopsis>
>         <programlisting>
>         .poll = drm_poll,
>         .read = drm_read,
> -       .fasync = drm_fasync,
>         .llseek = no_llseek,
>         </programlisting>
>        </para>
> diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
> index a144fb0..60f1ce3 100644
> --- a/drivers/gpu/drm/ast/ast_drv.c
> +++ b/drivers/gpu/drm/ast/ast_drv.c
> @@ -190,7 +190,6 @@ static const struct file_operations ast_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = ast_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
> index d35d99c..dd9c908 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_drv.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
> @@ -85,7 +85,6 @@ static const struct file_operations cirrus_driver_fops = {
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> -       .fasync = drm_fasync,
>  };
>  static struct drm_driver driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_USE_MTRR,
> diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
> index dd47fef..5679971 100644
> --- a/drivers/gpu/drm/drm_fops.c
> +++ b/drivers/gpu/drm/drm_fops.c
> @@ -74,8 +74,6 @@ static int drm_setup(struct drm_device * dev)
>         dev->last_context = 0;
>         dev->if_version = 0;
>
> -       dev->buf_async = NULL;
> -
>         DRM_DEBUG("\n");
>
>         /*
> @@ -373,18 +371,6 @@ out_put_pid:
>         return ret;
>  }
>
> -/** No-op. */
> -int drm_fasync(int fd, struct file *filp, int on)
> -{
> -       struct drm_file *priv = filp->private_data;
> -       struct drm_device *dev = priv->minor->dev;
> -
> -       DRM_DEBUG("fd = %d, device = 0x%lx\n", fd,
> -                 (long)old_encode_dev(priv->minor->device));
> -       return fasync_helper(fd, filp, on, &dev->buf_async);
> -}
> -EXPORT_SYMBOL(drm_fasync);
> -
>  static void drm_master_release(struct drm_device *dev, struct file *filp)
>  {
>         struct drm_file *file_priv = filp->private_data;
> diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
> index d13c2fc..99b5293 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.c
> +++ b/drivers/gpu/drm/gma500/psb_drv.c
> @@ -622,7 +622,6 @@ static const struct file_operations psb_gem_fops = {
>         .unlocked_ioctl = psb_unlocked_ioctl,
>         .mmap = drm_gem_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>         .read = drm_read,
>  };
>
> diff --git a/drivers/gpu/drm/i810/i810_dma.c b/drivers/gpu/drm/i810/i810_dma.c
> index eac755b..ab1892eb 100644
> --- a/drivers/gpu/drm/i810/i810_dma.c
> +++ b/drivers/gpu/drm/i810/i810_dma.c
> @@ -113,7 +113,6 @@ static const struct file_operations i810_buffer_fops = {
>         .release = drm_release,
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = i810_mmap_buffers,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/i810/i810_drv.c b/drivers/gpu/drm/i810/i810_drv.c
> index 2e91fc3..d85c05b 100644
> --- a/drivers/gpu/drm/i810/i810_drv.c
> +++ b/drivers/gpu/drm/i810/i810_drv.c
> @@ -49,7 +49,6 @@ static const struct file_operations i810_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 13457e3e..9411a74 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -994,7 +994,6 @@ static const struct file_operations i915_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_gem_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>         .read = drm_read,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = i915_compat_ioctl,
> diff --git a/drivers/gpu/drm/mga/mga_drv.c b/drivers/gpu/drm/mga/mga_drv.c
> index 17d0a63..fe71e1e 100644
> --- a/drivers/gpu/drm/mga/mga_drv.c
> +++ b/drivers/gpu/drm/mga/mga_drv.c
> @@ -50,7 +50,6 @@ static const struct file_operations mga_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = mga_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
> index bd91964..b570127 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
> @@ -81,7 +81,6 @@ static const struct file_operations mgag200_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = mgag200_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 1faa75f..b29d04b 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -673,7 +673,6 @@ nouveau_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = nouveau_ttm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>         .read = drm_read,
>  #if defined(CONFIG_COMPAT)
>         .compat_ioctl = nouveau_compat_ioctl,
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> index 47e64f9..2603d90 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -592,7 +592,6 @@ static const struct file_operations omapdriver_fops = {
>                 .release = drm_release,
>                 .mmap = omap_gem_mmap,
>                 .poll = drm_poll,
> -               .fasync = drm_fasync,
>                 .read = drm_read,
>                 .llseek = noop_llseek,
>  };
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index 48f2dfd..514118a 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -84,7 +84,6 @@ static const struct file_operations qxl_fops = {
>         .release = drm_release,
>         .unlocked_ioctl = drm_ioctl,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>         .mmap = qxl_mmap,
>  };
>
> diff --git a/drivers/gpu/drm/r128/r128_drv.c b/drivers/gpu/drm/r128/r128_drv.c
> index 472c38f..c2338cb 100644
> --- a/drivers/gpu/drm/r128/r128_drv.c
> +++ b/drivers/gpu/drm/r128/r128_drv.c
> @@ -48,7 +48,6 @@ static const struct file_operations r128_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = r128_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index 3585f22..3e52331 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -266,7 +266,6 @@ static const struct file_operations radeon_driver_old_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>         .read = drm_read,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = radeon_compat_ioctl,
> @@ -375,7 +374,6 @@ static const struct file_operations radeon_driver_kms_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = radeon_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>         .read = drm_read,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = radeon_kms_compat_ioctl,
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> index 5069d9c..c9f7fbd 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -230,7 +230,6 @@ static const struct file_operations rcar_du_fops = {
>  #endif
>         .poll           = drm_poll,
>         .read           = drm_read,
> -       .fasync         = drm_fasync,
>         .llseek         = no_llseek,
>         .mmap           = drm_gem_cma_mmap,
>  };
> diff --git a/drivers/gpu/drm/savage/savage_drv.c b/drivers/gpu/drm/savage/savage_drv.c
> index 71b2081..9135c8b 100644
> --- a/drivers/gpu/drm/savage/savage_drv.c
> +++ b/drivers/gpu/drm/savage/savage_drv.c
> @@ -42,7 +42,6 @@ static const struct file_operations savage_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index 7f2ea1a..0155518 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -257,7 +257,6 @@ static const struct file_operations shmob_drm_fops = {
>  #endif
>         .poll           = drm_poll,
>         .read           = drm_read,
> -       .fasync         = drm_fasync,
>         .llseek         = no_llseek,
>         .mmap           = drm_gem_cma_mmap,
>  };
> diff --git a/drivers/gpu/drm/sis/sis_drv.c b/drivers/gpu/drm/sis/sis_drv.c
> index 5a5325e..b88b2d3 100644
> --- a/drivers/gpu/drm/sis/sis_drv.c
> +++ b/drivers/gpu/drm/sis/sis_drv.c
> @@ -72,7 +72,6 @@ static const struct file_operations sis_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/tdfx/tdfx_drv.c b/drivers/gpu/drm/tdfx/tdfx_drv.c
> index ddfa743..951ec13 100644
> --- a/drivers/gpu/drm/tdfx/tdfx_drv.c
> +++ b/drivers/gpu/drm/tdfx/tdfx_drv.c
> @@ -48,7 +48,6 @@ static const struct file_operations tdfx_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 14801c2..116da19 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -497,7 +497,6 @@ static const struct file_operations fops = {
>  #endif
>         .poll               = drm_poll,
>         .read               = drm_read,
> -       .fasync             = drm_fasync,
>         .llseek             = no_llseek,
>         .mmap               = drm_gem_cma_mmap,
>  };
> diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> index bb0af58..7650dc0 100644
> --- a/drivers/gpu/drm/udl/udl_drv.c
> +++ b/drivers/gpu/drm/udl/udl_drv.c
> @@ -65,7 +65,6 @@ static const struct file_operations udl_driver_fops = {
>         .read = drm_read,
>         .unlocked_ioctl = drm_ioctl,
>         .release = drm_release,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/via/via_drv.c b/drivers/gpu/drm/via/via_drv.c
> index f4ae203..4487999 100644
> --- a/drivers/gpu/drm/via/via_drv.c
> +++ b/drivers/gpu/drm/via/via_drv.c
> @@ -64,7 +64,6 @@ static const struct file_operations via_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> index 9c27d42..0dcfa6b 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> @@ -1103,7 +1103,6 @@ static const struct file_operations vmwgfx_driver_fops = {
>         .mmap = vmw_mmap,
>         .poll = vmw_fops_poll,
>         .read = vmw_fops_read,
> -       .fasync = drm_fasync,
>  #if defined(CONFIG_COMPAT)
>         .compat_ioctl = drm_compat_ioctl,
>  #endif
> diff --git a/drivers/gpu/host1x/drm/drm.c b/drivers/gpu/host1x/drm/drm.c
> index b128b90..15684bf 100644
> --- a/drivers/gpu/host1x/drm/drm.c
> +++ b/drivers/gpu/host1x/drm/drm.c
> @@ -508,7 +508,6 @@ static const struct file_operations tegra_drm_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = tegra_drm_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>         .read = drm_read,
>  #ifdef CONFIG_COMPAT
>         .compat_ioctl = drm_compat_ioctl,
> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
> index 2c58533..e826086 100644
> --- a/drivers/staging/imx-drm/imx-drm-core.c
> +++ b/drivers/staging/imx-drm/imx-drm-core.c
> @@ -199,7 +199,6 @@ static const struct file_operations imx_drm_driver_fops = {
>         .unlocked_ioctl = drm_ioctl,
>         .mmap = drm_gem_cma_mmap,
>         .poll = drm_poll,
> -       .fasync = drm_fasync,
>         .read = drm_read,
>         .llseek = noop_llseek,
>  };
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index d05beac..a79dcb0 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1168,8 +1168,6 @@ struct drm_device {
>
>         /*@} */
>
> -       struct fasync_struct *buf_async;/**< Processes waiting for SIGIO */
> -
>         struct drm_agp_head *agp;       /**< AGP data */
>
>         struct device *dev;             /**< Device structure */
> @@ -1276,7 +1274,6 @@ extern int drm_lastclose(struct drm_device *dev);
>  extern struct mutex drm_global_mutex;
>  extern int drm_open(struct inode *inode, struct file *filp);
>  extern int drm_stub_open(struct inode *inode, struct file *filp);
> -extern int drm_fasync(int fd, struct file *filp, int on);
>  extern ssize_t drm_read(struct file *filp, char __user *buffer,
>                         size_t count, loff_t *offset);
>  extern int drm_release(struct inode *inode, struct file *filp);
> --
> 1.8.3.2
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list