All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 10/18] drm/irq: track the irq installed in drm_irq_install in dev->irq
Date: Tue, 22 Apr 2014 11:46:45 +0200	[thread overview]
Message-ID: <20140422094645.GN10722@phenom.ffwll.local> (raw)
In-Reply-To: <1978319.Njcif9FTVM@avalon>

On Thu, Apr 17, 2014 at 12:02:07AM +0200, Laurent Pinchart wrote:
> And another comment...
> 
> On Friday 11 April 2014 23:36:07 Daniel Vetter wrote:
> > To get rid of the dev->bus->get_irq callback we need to pass in the
> > desired irq explicitly into drm_irq_install. To avoid having to do the
> > same for drm_irq_unistall just track it internally. That leaves
> > drivers with less room to botch things up.
> > 
> > v2: Add the hunk lost in an earlier patch to this one (Thierry).
> > 
> > Cc: Thierry Reding <thierry.reding@gmail.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > ---
> >  drivers/gpu/drm/drm_irq.c | 18 +++++++++++-------
> >  include/drm/drmP.h        |  2 ++
> >  2 files changed, 13 insertions(+), 7 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
> > index 330e85b19115..1c3b6229363d 100644
> > --- a/drivers/gpu/drm/drm_irq.c
> > +++ b/drivers/gpu/drm/drm_irq.c
> > @@ -249,14 +249,16 @@ static inline int drm_dev_to_irq(struct drm_device
> > *dev) */
> >  int drm_irq_install(struct drm_device *dev)
> >  {
> > -	int ret;
> > +	int ret, irq;
> >  	unsigned long sh_flags = 0;
> >  	char *irqname;
> > 
> > +	irq = drm_dev_to_irq(dev);
> > +
> >  	if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
> >  		return -EINVAL;
> > 
> > -	if (drm_dev_to_irq(dev) == 0)
> > +	if (irq == 0)
> 
> Isn't 0 a valid IRQ number ? Shouldn't you check for irq < 0 instead ? At 
> least platform_get_irq() returns a negative error value on failure.

tbh I'm not really clear on how this works. If we want to change this then
I think that should be a separate patch. Also it might be better to
extract this check into drm_control, which is the only function that
really needs it since it is called by userspace.

For all other places it is a simple driver bug and I'm not sure how much
we should care - request_irq should catch any abuse already.

In any case this should be a separate patch.
-Daniel

> 
> >  		return -EINVAL;
> > 
> >  	/* Driver must have been initialized */
> > @@ -267,7 +269,7 @@ int drm_irq_install(struct drm_device *dev)
> >  		return -EBUSY;
> >  	dev->irq_enabled = true;
> > 
> > -	DRM_DEBUG("irq=%d\n", drm_dev_to_irq(dev));
> > +	DRM_DEBUG("irq=%d\n", dev->irq);
> > 
> >  	/* Before installing handler */
> >  	if (dev->driver->irq_preinstall)
> > @@ -282,7 +284,7 @@ int drm_irq_install(struct drm_device *dev)
> >  	else
> >  		irqname = dev->driver->name;
> > 
> > -	ret = request_irq(drm_dev_to_irq(dev), dev->driver->irq_handler,
> > +	ret = request_irq(dev->irq, dev->driver->irq_handler,
> >  			  sh_flags, irqname, dev);
> > 
> >  	if (ret < 0) {
> > @@ -301,7 +303,9 @@ int drm_irq_install(struct drm_device *dev)
> >  		dev->irq_enabled = false;
> >  		if (!drm_core_check_feature(dev, DRIVER_MODESET))
> >  			vga_client_register(dev->pdev, NULL, NULL, NULL);
> > -		free_irq(drm_dev_to_irq(dev), dev);
> > +		free_irq(dev->irq, dev);
> > +	} else {
> > +		dev->irq = irq;
> >  	}
> > 
> >  	return ret;
> > @@ -344,7 +348,7 @@ int drm_irq_uninstall(struct drm_device *dev)
> >  	if (!irq_enabled)
> >  		return -EINVAL;
> > 
> > -	DRM_DEBUG("irq=%d\n", drm_dev_to_irq(dev));
> > +	DRM_DEBUG("irq=%d\n", dev->irq);
> > 
> >  	if (!drm_core_check_feature(dev, DRIVER_MODESET))
> >  		vga_client_register(dev->pdev, NULL, NULL, NULL);
> > @@ -352,7 +356,7 @@ int drm_irq_uninstall(struct drm_device *dev)
> >  	if (dev->driver->irq_uninstall)
> >  		dev->driver->irq_uninstall(dev);
> > 
> > -	free_irq(drm_dev_to_irq(dev), dev);
> > +	free_irq(dev->irq, dev);
> > 
> >  	return 0;
> >  }
> > diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> > index 8b23a34a103e..6f512cd97cd5 100644
> > --- a/include/drm/drmP.h
> > +++ b/include/drm/drmP.h
> > @@ -1107,6 +1107,8 @@ struct drm_device {
> >  	/** \name Context support */
> >  	/*@{ */
> >  	bool irq_enabled;		/**< True if irq handler is enabled */
> > +	int irq;
> > +
> >  	__volatile__ long context_flag;	/**< Context swapping flag */
> >  	int last_context;		/**< Last current context */
> >  	/*@} */
> 
> -- 
> Regards,
> 
> Laurent Pinchart
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

  reply	other threads:[~2014-04-22  9:46 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-11 21:35 [PATCH 00/18] drm_bus cleanups and other cruft removal Daniel Vetter
2014-04-11 21:35 ` [PATCH 01/18] drm/omap: fix up pdev_remove Daniel Vetter
2014-04-12 15:26   ` Rob Clark
2014-04-14  6:26   ` Tomi Valkeinen
2014-04-16  8:15     ` Daniel Vetter
2014-04-16  8:27       ` Tomi Valkeinen
2014-04-16 17:05         ` Daniel Vetter
2014-04-11 21:35 ` [PATCH 02/18] drm/irq: simplify irq checks in drm_wait_vblank Daniel Vetter
2014-04-14 20:55   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 03/18] drm/pci: fold in irq_by_busid support Daniel Vetter
2014-04-17 14:33   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 04/18] drm/irq: drm_control is a legacy ioctl, so pci devices only Daniel Vetter
2014-04-17 14:38   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 05/18] drm/irq: remove cargo-culted locking from irq_install/unistall Daniel Vetter
2014-04-17 14:43   ` Thierry Reding
2014-04-17 14:44     ` Thierry Reding
2014-04-11 21:36 ` [PATCH 06/18] drm: remove drm_dev_to_irq from drivers Daniel Vetter
2014-04-17 14:47   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 07/18] drm: kill drm_bus->bus_type Daniel Vetter
2014-04-17 14:50   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 08/18] drm: Rip out totally bogus vga_switcheroo->can_switch locking Daniel Vetter
2014-04-17 14:56   ` Thierry Reding
2014-04-22 20:45     ` [PATCH] " Daniel Vetter
2014-04-23  7:28       ` Thierry Reding
2014-04-11 21:36 ` [PATCH 09/18] drm: rename dev->count_lock to dev->buf_lock Daniel Vetter
2014-04-17 14:57   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 10/18] drm/irq: track the irq installed in drm_irq_install in dev->irq Daniel Vetter
2014-04-16 21:57   ` Laurent Pinchart
2014-04-16 22:02   ` Laurent Pinchart
2014-04-22  9:46     ` Daniel Vetter [this message]
2014-04-22 10:49       ` Thierry Reding
2014-04-17 15:03   ` Thierry Reding
2014-04-22 20:44   ` [PATCH] " Daniel Vetter
2014-04-23  7:27     ` Thierry Reding
2014-04-23  8:31       ` Daniel Vetter
2014-04-11 21:36 ` [PATCH 11/18] drm/irq: Look up the pci irq directly in the drm_control ioctl Daniel Vetter
2014-04-11 21:36 ` [PATCH 12/18] drm: pass the irq explicitly to drm_irq_install Daniel Vetter
2014-04-17 15:06   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 13/18] drm: remove bus->get_irq implementations Daniel Vetter
2014-04-17 15:07   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 14/18] drm: inline drm_pci_set_unique Daniel Vetter
2014-04-17 15:10   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 15/18] drm: rip out dev->devname Daniel Vetter
2014-04-17 15:11   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 16/18] drm: remove drm_bus->get_name Daniel Vetter
2014-04-17 15:12   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 17/18] drm: Remove dev->kdriver Daniel Vetter
2014-04-17 15:13   ` Thierry Reding
2014-04-11 21:36 ` [PATCH 18/18] drm/<drivers>: don't set driver->dev_priv_size to 0 Daniel Vetter
2014-04-17 15:14   ` Thierry Reding
2014-04-16 22:10 ` [PATCH 00/18] drm_bus cleanups and other cruft removal Laurent Pinchart
2014-04-22  7:30 ` David Herrmann

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=20140422094645.GN10722@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=laurent.pinchart@ideasonboard.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.