[PATCH 15/17] drm/tegra: Fix potential bug on driver unload

Thierry Reding thierry.reding at gmail.com
Tue Nov 4 04:30:34 PST 2014


On Tue, Nov 04, 2014 at 11:59:46AM +0100, Andrzej Hajda wrote:
> Hi Thierry,
> 
> Just passing by.
> 
> On 11/03/2014 10:27 AM, Thierry Reding wrote:
> > From: Thierry Reding <treding at nvidia.com>
> > 
> > The HDMI hotplug signal may toggle after the DRM driver has been
> > unloaded. Make sure not to call into DRM if that's the case.
> > 
> > Signed-off-by: Thierry Reding <treding at nvidia.com>
> > ---
> >  drivers/gpu/drm/tegra/output.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c
> > index 6b393cfbb5e7..def74914dd72 100644
> > --- a/drivers/gpu/drm/tegra/output.c
> > +++ b/drivers/gpu/drm/tegra/output.c
> > @@ -181,7 +181,8 @@ static irqreturn_t hpd_irq(int irq, void *data)
> >  {
> >  	struct tegra_output *output = data;
> >  
> > -	drm_helper_hpd_irq_event(output->connector.dev);
> > +	if (output->connector.dev)
> > +		drm_helper_hpd_irq_event(output->connector.dev);
> >  
> >  	return IRQ_HANDLED;
> >  }
> > 
> 
> Since output->connector.dev is not synchronized between irq and other
> code this patch do not solves the issue, it just decreases chances of
> the disaster.

You're right. I guess in addition to this we could call enable_irq()
when the connector is bound to the DRM device and disable_irq() when it
is unbound. Actually, that should even allow drm_helper_hpd_irq_event()
to be called unconditionally because .dev could not be NULL in that
case.

Upon closer inspection it seems like the majority of drivers would fall
prey to this particular race.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20141104/e82f6373/attachment-0001.sig>


More information about the dri-devel mailing list