From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, Intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 7/7] drm/i915: GEM operations need to be done under the big lock
Date: Mon, 11 Jan 2016 15:16:16 +0000 [thread overview]
Message-ID: <5693C740.3040801@linux.intel.com> (raw)
In-Reply-To: <20160111150458.GI652@nuc-i3427.alporthouse.com>
On 11/01/16 15:04, Chris Wilson wrote:
> On Mon, Jan 11, 2016 at 03:00:20PM +0000, Chris Wilson wrote:
>> On Mon, Jan 11, 2016 at 02:47:17PM +0000, Tvrtko Ursulin wrote:
>>>
>>> On 11/01/16 14:38, Chris Wilson wrote:
>>>> On Mon, Jan 11, 2016 at 02:08:41PM +0000, Tvrtko Ursulin wrote:
>>>>> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>>>>
>>>>> VMA creation and GEM list management need the big lock.
>>>>>
>>>>> v2:
>>>>>
>>>>> Mutex unlock ended on the wrong path somehow. (0-day, Julia Lawall)
>>>>>
>>>>> Not to mention drm_gem_object_unreference was there in existing
>>>>> code with no mutex held.
>>>>>
>>>>> v3:
>>>>>
>>>>> Some callers of i915_gem_object_create_stolen_for_preallocated
>>>>> already hold the lock so move the mutex into the other caller
>>>>> as well.
>>>>
>>>> intel_pm.c valleyview_setup_pctx?
>>>
>>> Already holds it traced by the WARN_ON at its top.
>>
>> Which is a nice little mutex inversion of its own. :|
>> i.e. rpm vs struct_mutex bug
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index b1fb43fcfeea..c8f684f8799c 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -16018,9 +16018,7 @@ void intel_modeset_gem_init(struct drm_device *dev)
> struct drm_crtc *c;
> struct drm_i915_gem_object *obj;
>
> - mutex_lock(&dev->struct_mutex);
> intel_init_gt_powersave(dev);
> - mutex_unlock(&dev->struct_mutex);
>
> intel_modeset_init_hw(dev);
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index a082b4577599..90e5bf7a2402 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -5224,8 +5224,6 @@ static void cherryview_setup_pctx(struct drm_device *dev)
> u32 pcbr;
> int pctx_size = 32*1024;
>
> - WARN_ON(!mutex_is_locked(&dev->struct_mutex));
> -
> pcbr = I915_READ(VLV_PCBR);
> if ((pcbr >> VLV_PCBR_ADDR_SHIFT) == 0) {
> DRM_DEBUG_DRIVER("BIOS didn't set up PCBR, fixing up\n");
> @@ -5247,8 +5245,7 @@ static void valleyview_setup_pctx(struct drm_device *dev)
> u32 pcbr;
> int pctx_size = 24*1024;
>
> - WARN_ON(!mutex_is_locked(&dev->struct_mutex));
> -
> + mutex_lock(&dev->struct_mutex);
> pcbr = I915_READ(VLV_PCBR);
> if (pcbr) {
> /* BIOS set it up already, grab the pre-alloc'd space */
> @@ -5275,7 +5272,7 @@ static void valleyview_setup_pctx(struct drm_device *dev)
> pctx = i915_gem_object_create_stolen(dev, pctx_size);
> if (!pctx) {
> DRM_DEBUG("not enough stolen space for PCTX, disabling\n");
> - return;
> + goto out;
> }
>
> pctx_paddr = dev_priv->mm.stolen_base + pctx->stolen->start;
> @@ -5284,6 +5281,7 @@ static void valleyview_setup_pctx(struct drm_device *dev)
> out:
> DRM_DEBUG_DRIVER("PCBR: 0x%08x\n", I915_READ(VLV_PCBR));
> dev_priv->vlv_pctx = pctx;
> + mutex_unlock(&dev->struct_mutex);
> }
>
> static void valleyview_cleanup_pctx(struct drm_device *dev)
Don't know, I leave this one to whoever grabbed the lock around
intel_init_gt_powersave in the first place. Maybe there was a special
reason.. after git blame od intel_display.c eventually completed, adding
Imre and Ville to cc.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-01-11 15:16 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-11 14:08 [PATCH v3 0/7] Misc cleanups and locking fixes Tvrtko Ursulin
2016-01-11 14:08 ` [PATCH 1/7] drm/i915/bdw+: Replace list_del+list_add_tail with list_move_tail Tvrtko Ursulin
2016-01-11 14:08 ` [PATCH 2/7] drm/i915: Do not call API requiring struct_mutex where it is not available Tvrtko Ursulin
2016-01-11 14:35 ` Chris Wilson
2016-01-12 11:41 ` [PATCH v2 " Tvrtko Ursulin
2016-01-12 15:47 ` Dave Gordon
2016-01-13 16:16 ` [PATCH v3] " Tvrtko Ursulin
2016-01-13 19:34 ` Chris Wilson
2016-01-11 14:08 ` [PATCH 3/7] drm/i915: Cache ringbuffer GTT address Tvrtko Ursulin
2016-01-11 14:30 ` Chris Wilson
2016-01-11 14:31 ` Chris Wilson
2016-01-11 15:06 ` Tvrtko Ursulin
2016-01-11 14:08 ` [PATCH 4/7] drm/i915: Cache LRC state page in the context Tvrtko Ursulin
2016-01-11 14:29 ` Chris Wilson
2016-01-11 15:07 ` Tvrtko Ursulin
2016-01-12 11:43 ` [PATCH v2 " Tvrtko Ursulin
2016-01-12 11:56 ` [PATCH v3 " Tvrtko Ursulin
2016-01-12 12:12 ` Chris Wilson
2016-01-12 12:54 ` Tvrtko Ursulin
2016-01-12 13:11 ` Chris Wilson
2016-01-12 16:45 ` Dave Gordon
2016-01-13 1:37 ` Chris Wilson
2016-01-13 13:49 ` Tvrtko Ursulin
2016-01-11 14:08 ` [PATCH 5/7] drm/i915: Don't need a timer to wake us up Tvrtko Ursulin
2016-01-11 14:33 ` Chris Wilson
2016-01-12 10:20 ` Tvrtko Ursulin
2016-01-11 14:08 ` [PATCH 6/7] drm/i915: Only grab timestamps when needed Tvrtko Ursulin
2016-01-11 14:36 ` Chris Wilson
2016-01-11 15:04 ` Tvrtko Ursulin
2016-01-12 15:52 ` Dave Gordon
2016-01-12 17:14 ` Daniel Vetter
2016-01-13 13:54 ` [PATCH v2] " Tvrtko Ursulin
2016-01-11 14:08 ` [PATCH 7/7] drm/i915: GEM operations need to be done under the big lock Tvrtko Ursulin
2016-01-11 14:38 ` Chris Wilson
2016-01-11 14:47 ` Tvrtko Ursulin
2016-01-11 15:00 ` Chris Wilson
2016-01-11 15:04 ` Chris Wilson
2016-01-11 15:16 ` Tvrtko Ursulin [this message]
2016-01-11 15:36 ` Ville Syrjälä
2016-01-11 16:56 ` Chris Wilson
2016-01-13 12:46 ` Tvrtko Ursulin
2016-01-13 13:36 ` Imre Deak
2016-01-13 14:11 ` Tvrtko Ursulin
2016-01-13 14:32 ` Chris Wilson
2016-01-13 14:41 ` Imre Deak
2016-01-13 14:53 ` Tvrtko Ursulin
2016-01-13 15:25 ` Imre Deak
2016-01-13 15:55 ` Daniel Vetter
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=5693C740.3040801@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=Intel-gfx@lists.freedesktop.org \
--cc=chris@chris-wilson.co.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).