From: Daniel Vetter <daniel@ffwll.ch>
To: "Cheng, Yao" <yao.cheng@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>,
"intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>,
"emil.l.velikov@gmail.com" <emil.l.velikov@gmail.com>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"Chehab, John" <john.chehab@intel.com>,
"Jiang, Fei" <fei.jiang@intel.com>,
"Barbalho, Rafael" <rafael.barbalho@intel.com>,
"Beckett, Robert" <robert.beckett@intel.com>
Subject: Re: [RFC PATCH v3 4/4] tests/drv_module_reload: add ipvr support
Date: Wed, 7 Jan 2015 08:33:43 +0100 [thread overview]
Message-ID: <20150107073343.GA26519@phenom.ffwll.local> (raw)
In-Reply-To: <8FF7D634BEE4C2428EFFAB6B7E919E4B01866064@shsmsx102.ccr.corp.intel.com>
On Tue, Jan 06, 2015 at 02:14:27PM +0000, Cheng, Yao wrote:
> > -----Original Message-----
> > From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel
> > Vetter
> > Sent: Monday, January 5, 2015 16:40
> > To: Cheng, Yao
> > Cc: Daniel Vetter; Thierry Reding; intel-gfx@lists.freedesktop.org; dri-
> > devel@lists.freedesktop.org; Kelley, Sean V; Chehab, John;
> > emil.l.velikov@gmail.com; Jiang, Fei; Beckett, Robert; Barbalho, Rafael
> > Subject: Re: [RFC PATCH v3 4/4] tests/drv_module_reload: add ipvr support
> >
> > On Sun, Dec 21, 2014 at 02:40:24PM +0000, Cheng, Yao wrote:
> > > > -----Original Message-----
> > > > From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch]
> > > > Sent: Thursday, December 18, 2014 19:21
> > > > To: Thierry Reding
> > > > Cc: Cheng, Yao; intel-gfx@lists.freedesktop.org; dri-
> > > > devel@lists.freedesktop.org; Kelley, Sean V; Chehab, John;
> > > > emil.l.velikov@gmail.com; Jiang, Fei
> > > > Subject: Re: [RFC PATCH v3 4/4] tests/drv_module_reload: add ipvr
> > > > support
> > > >
> > > > On Thu, Dec 18, 2014 at 11:04 AM, Thierry Reding
> > > > <thierry.reding@gmail.com>
> > > > wrote:
> > > > >> I double checked the symptom and found it was a deadlock on
> > > > drm_global_mutex.
> > > > >> When i915_driver_load() registers the platform device while ipvr
> > > > >> module
> > > > is in the system, ipvr's probe() function tries to lock
> > > > drm_global_mutex which was already held by i915.
> > > > >> I think either of the following 2 actions need to be moved to a
> > > > >> bottom half
> > > > e.g. a work queue:
> > > > >> platform_device_add () call in i915_ved.c (called during
> > > > i915_driver_load())
> > > > >> drm_dev_register() call during ipvr's probe() Which one
> > > > >> makes more sense? pls kindly advise (I personally prefer the former
> > one.).
> > > > >
> > > > > Yes, that's somewhat ugly, but I don't see a way around that. I'd
> > > > > also think that moving platform_device_add() to a workqueue would
> > > > > be the best option here.
> > > >
> > > > Or we simply kill drm_global_mutex for platform drivers that don't
> > > > use the -
> > > > >probe hook. It should work when they have a correct order betwen
> > > > drm_dev_alloc and _register and all the code in between. So just
> > > > ditch the -
> > > > >load callback in teh ipvr driver and rework the load sequence as
> > > > >suggested
> > > > somewhere else and this is fixed already. No need for bottom halfs I
> > think.
> > >
> > > Daniel, sorry I didn't quite understand "platform drivers that don't
> > > use the probe hook". For initialization, the ipvr platform driver's
> > > probe() is called in following 2 possible paths:
> > > 1. ipvr installed before i915. In this case, ipvr's probe() is called
> > > inside i915_driver_load() and falls into the drm_global_mutex dead lock.
> > > 2. i915 installed before ipvr. In this case, ipvr's probe() is called
> > > without drm_global_mutex held by i915 and no dead lock issue.
> > > If we kill drm_global_mutex, will path 2 run into issue? And in your
> > > suggestion, how to rework the load sequence? Do you mean calling
> > > ipvr's
> > > load() callback directly during platform driver probe()?
> >
> > Hm right it's not that simple really. What we need in more detail is:
> > - Move the mutex_lock(&drm_global_mutex) out of drm_dev_register into
> > all the callers. If a driver has a ->load() callback it most likely is
> > racy with the usual load ordering issues.
> >
> > - Rework ipvr to no longer have a ->load callback. Insteaed use the
> > following sequence (in the platform ->probe callback):
> >
> > drm_dev_alloc();
> > ipvr_load();
> > drm_dev_register();
> >
> > With that ordering we don't need the additional guarantees that
> > drm_global_mutex provides and we can avoid to take that lock around
> > drm_dev_registrer() call in the ipvr code.
>
> Thanks for the detailed explanation, Daniel!
> That sounds to be a small refactor on drm core, and need change many drm drivers: nouveau, tegra, udl.
> Should it be a standalone RFC patch?
I think the locking shuffling should be doable in just one patch, but
definitely needs to be split out.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2015-01-07 7:34 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-21 19:10 [RFC PATCH v3 4/4] tests/drv_module_reload: add ipvr support Yao Cheng
2014-11-21 20:27 ` Thierry Reding
2014-11-21 20:36 ` Daniel Vetter
2014-11-24 9:55 ` Thierry Reding
2014-11-24 13:14 ` Daniel Vetter
2014-12-01 3:06 ` Cheng, Yao
2014-12-17 8:13 ` Thierry Reding
2014-12-18 5:44 ` Cheng, Yao
2014-12-18 10:04 ` Thierry Reding
2014-12-18 11:21 ` Daniel Vetter
2014-12-21 14:40 ` Cheng, Yao
2015-01-05 8:39 ` Daniel Vetter
2015-01-06 14:14 ` Cheng, Yao
2015-01-07 7:33 ` Daniel Vetter [this message]
2014-12-17 8:02 ` 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=20150107073343.GA26519@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=emil.l.velikov@gmail.com \
--cc=fei.jiang@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=john.chehab@intel.com \
--cc=rafael.barbalho@intel.com \
--cc=robert.beckett@intel.com \
--cc=yao.cheng@intel.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.