From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm: Improve manual IRQ installation documentation Date: Thu, 20 Jun 2013 16:55:03 +0200 Message-ID: <20130620145503.GB4206@bremse> References: <1371643245-8325-1-git-send-email-laurent.pinchart+renesas@ideasonboard.com> <13858203.X70ZrUFadi@avalon> <20130620104026.GA28308@manwe> <4413102.6AHlGAblh3@avalon> <20130620110034.GA28718@manwe> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-la0-f48.google.com (mail-la0-f48.google.com [209.85.215.48]) by gabe.freedesktop.org (Postfix) with ESMTP id 60B6CE5BFB for ; Thu, 20 Jun 2013 07:55:10 -0700 (PDT) Received: by mail-la0-f48.google.com with SMTP id lx15so5631487lab.21 for ; Thu, 20 Jun 2013 07:55:07 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20130620110034.GA28718@manwe> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: Thierry Reding Cc: Laurent Pinchart , Laurent Pinchart , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org On Thu, Jun 20, 2013 at 01:00:36PM +0200, Thierry Reding wrote: > On Thu, Jun 20, 2013 at 12:46:21PM +0200, Laurent Pinchart wrote: > > Hi Thierry, > > > > On Thursday 20 June 2013 12:40:26 Thierry Reding wrote: > > > On Thu, Jun 20, 2013 at 12:17:25PM +0200, Laurent Pinchart wrote: > > > > On Thursday 20 June 2013 12:10:47 Thierry Reding wrote: > > > > > On Wed, Jun 19, 2013 at 02:00:45PM +0200, Laurent Pinchart wrote: > > > > > > Signed-off-by: Laurent Pinchart > > > > > > > > > > > > --- > > > > > > > > > > > > Documentation/DocBook/drm.tmpl | 14 ++++++++------ > > > > > > 1 file changed, 8 insertions(+), 6 deletions(-) > > > > > > > > > > > > diff --git a/Documentation/DocBook/drm.tmpl > > > > > > b/Documentation/DocBook/drm.tmpl index f9df3b8..738b727 100644 > > > > > > --- a/Documentation/DocBook/drm.tmpl > > > > > > +++ b/Documentation/DocBook/drm.tmpl > > > > > > @@ -186,11 +186,12 @@ > > > > > > > > > > > > > > > > > > > > > > > > DRIVER_HAVE_IRQDRIVER_IRQ_SHARED > > > > > > > > > > > > > > > > > > > > > > > > - DRIVER_HAVE_IRQ indicates whether the driver has an IRQ > > > > > > handler. The - DRM core will automatically register an > > > > > > interrupt handler when the - flag is set. > > > > > > DRIVER_IRQ_SHARED > > > > > > indicates whether the device & - handler support > > > > > > shared > > > > > > IRQs (note that this is required of PCI - drivers). > > > > > > + DRIVER_HAVE_IRQ indicates whether the driver has an IRQ > > > > > > handler + managed by the DRM Core. The core will support > > > > > > simple IRQ handler + installation when the flag is set. > > > > > > The > > > > > > installation process is + described in > > > > > linkend="drm-irq-registration"/>. + > > > > > > DRIVER_IRQ_SHARED indicates whether the device & handler + > > > > > > > > > > > > support shared IRQs (note that this is required of PCI > > > > > > drivers).> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > @@ -344,7 +345,8 @@ char *date; > > > > > > > > > > > > The DRM core tries to facilitate IRQ handler registration > > > > > > and > > > > > > unregistration by providing > > > > > > drm_irq_install and > > > > > > drm_irq_uninstall functions. Those > > > > > > functions only > > > > > > > > > > > > - support a single interrupt per device. > > > > > > + support a single interrupt per device, devices that use > > > > > > more > > > > > > than one + IRQs need to be handled manually. > > > > > > > > > > Perhaps this should mention that if you handle IRQ installation manually > > > > > you also need to manually set drm->irq_enabled = 1, as otherwise things > > > > > like DRM_IOCTL_WAIT_VBLANK won't work properly. > > > > > > > > That's only needed if DRIVER_HAVE_IRQ is set, otherwise the > > > > drm_wait_vblank() function skips the irq_enabled check. > > > > > > Not quite. There's another check for dev->irq_enabled in the > > > DRM_WAIT_ON() so it'll never actually block. > > > > Indeed. > > > > > Arguably this could be solved by making the DRM_WAIT_ON() condition drop the > > > !dev->irq_enabled in case DRIVER_HAVE_IRQ isn't set. > > > > Or we could force drivers to set drm->irq_enabled, I'm fine with that as well. > > I can fix the documentation if that would be the preferred solution. > > Thinking about it some more, the latter seems more appropriate. Consider > some driver that doesn't set DRIVER_HAVE_IRQ but also doesn't initialize > interrupts manually. If so it'll cause DRM_IOCTL_WAIT_VBLANK to block > indefinitely. > > On the other hand perhaps the check at the beginning of drm_wait_vblank > should be improved. Maybe make it something like this: > > if (drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) > if (!drm_dev_to_irq(dev)) > return -EINVAL; > > if (!dev->irq_enabled) > return -EINVAL; I think the vblank subsystem is ripe for rework, and I have a few plans for that. But till that happens I guess we could just roll forward with whatever hacks we currently have ... -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch