Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 18/39] drm/i915: Differentiate between ggtt->mutex and ppgtt->mutex
Date: Thu, 3 Jan 2019 13:43:42 +0000	[thread overview]
Message-ID: <d33900c9-efbd-b399-e8cb-1afd12170c87@linux.intel.com> (raw)
In-Reply-To: <20190102094139.24014-18-chris@chris-wilson.co.uk>


Mika's reply here reminded me that the patch looks familiar and indeed I 
r-b-ed it back in September.

Can keep it after the blank line adjustment and ordering shuffles of course.

Not sure on the is_ggtt vs the subclass id - perhaps even it would make 
more sense to set is_ggtt before the call to i915_address_space_init and 
then inside derive the lock subclass from it. Although even that is not 
fully elegant. Maybe is_ggtt gneneric flag to i915_address_space_init to 
do both tasks?

Regards,

Tvrtko

On 02/01/2019 09:41, Chris Wilson wrote:
> We have two classes of VM, global GTT and per-process GTT. In order to
> allow ourselves the freedom to mix both along call chains, distinguish
> the two classes with regards to their mutex and lockdep maps.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/i915_gem_gtt.c       | 10 +++++-----
>   drivers/gpu/drm/i915/i915_gem_gtt.h       |  2 ++
>   drivers/gpu/drm/i915/selftests/mock_gtt.c |  6 +++---
>   3 files changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 852dbc1f185f..8f93b1dffbb9 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -474,8 +474,7 @@ static void vm_free_page(struct i915_address_space *vm, struct page *page)
>   	spin_unlock(&vm->free_pages.lock);
>   }
>   
> -static void i915_address_space_init(struct i915_address_space *vm,
> -				    struct drm_i915_private *dev_priv)
> +static void i915_address_space_init(struct i915_address_space *vm, int subclass)
>   {
>   	/*
>   	 * The vm->mutex must be reclaim safe (for use in the shrinker).
> @@ -483,6 +482,7 @@ static void i915_address_space_init(struct i915_address_space *vm,
>   	 * attempt holding the lock is immediately reported by lockdep.
>   	 */
>   	mutex_init(&vm->mutex);
> +	lockdep_set_subclass(&vm->mutex, subclass);
>   	i915_gem_shrinker_taints_mutex(&vm->mutex);
>   
>   	GEM_BUG_ON(!vm->total);
> @@ -1548,7 +1548,7 @@ static struct i915_hw_ppgtt *gen8_ppgtt_create(struct drm_i915_private *i915)
>   	/* From bdw, there is support for read-only pages in the PPGTT. */
>   	ppgtt->vm.has_read_only = true;
>   
> -	i915_address_space_init(&ppgtt->vm, i915);
> +	i915_address_space_init(&ppgtt->vm, VM_CLASS_PPGTT);
>   
>   	/* There are only few exceptions for gen >=6. chv and bxt.
>   	 * And we are not sure about the latter so play safe for now.
> @@ -1997,7 +1997,7 @@ static struct i915_hw_ppgtt *gen6_ppgtt_create(struct drm_i915_private *i915)
>   
>   	ppgtt->base.vm.total = I915_PDES * GEN6_PTES * I915_GTT_PAGE_SIZE;
>   
> -	i915_address_space_init(&ppgtt->base.vm, i915);
> +	i915_address_space_init(&ppgtt->base.vm, VM_CLASS_PPGTT);
>   
>   	ppgtt->base.vm.allocate_va_range = gen6_alloc_va_range;
>   	ppgtt->base.vm.clear_range = gen6_ppgtt_clear_range;
> @@ -3434,7 +3434,7 @@ int i915_ggtt_init_hw(struct drm_i915_private *dev_priv)
>   	 * and beyond the end of the GTT if we do not provide a guard.
>   	 */
>   	mutex_lock(&dev_priv->drm.struct_mutex);
> -	i915_address_space_init(&ggtt->vm, dev_priv);
> +	i915_address_space_init(&ggtt->vm, VM_CLASS_GGTT);
>   
>   	ggtt->vm.is_ggtt = true;
>   
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
> index e2360f16427a..9229b03d629b 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.h
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
> @@ -288,6 +288,8 @@ struct i915_address_space {
>   	bool closed;
>   
>   	struct mutex mutex; /* protects vma and our lists */
> +#define VM_CLASS_GGTT 0
> +#define VM_CLASS_PPGTT 1
>   
>   	u64 scratch_pte;
>   	struct i915_page_dma scratch_page;
> diff --git a/drivers/gpu/drm/i915/selftests/mock_gtt.c b/drivers/gpu/drm/i915/selftests/mock_gtt.c
> index 6ae418c76015..976c862b3842 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_gtt.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_gtt.c
> @@ -70,7 +70,7 @@ mock_ppgtt(struct drm_i915_private *i915,
>   	ppgtt->vm.total = round_down(U64_MAX, PAGE_SIZE);
>   	ppgtt->vm.file = ERR_PTR(-ENODEV);
>   
> -	i915_address_space_init(&ppgtt->vm, i915);
> +	i915_address_space_init(&ppgtt->vm, VM_CLASS_PPGTT);
>   
>   	ppgtt->vm.clear_range = nop_clear_range;
>   	ppgtt->vm.insert_page = mock_insert_page;
> @@ -102,6 +102,7 @@ void mock_init_ggtt(struct drm_i915_private *i915)
>   	struct i915_ggtt *ggtt = &i915->ggtt;
>   
>   	ggtt->vm.i915 = i915;
> +	ggtt->vm.is_ggtt = true;
>   
>   	ggtt->gmadr = (struct resource) DEFINE_RES_MEM(0, 2048 * PAGE_SIZE);
>   	ggtt->mappable_end = resource_size(&ggtt->gmadr);
> @@ -117,9 +118,8 @@ void mock_init_ggtt(struct drm_i915_private *i915)
>   	ggtt->vm.vma_ops.set_pages   = ggtt_set_pages;
>   	ggtt->vm.vma_ops.clear_pages = clear_pages;
>   
> -	i915_address_space_init(&ggtt->vm, i915);
>   
> -	ggtt->vm.is_ggtt = true;
> +	i915_address_space_init(&ggtt->vm, VM_CLASS_GGTT);
>   }
>   
>   void mock_fini_ggtt(struct drm_i915_private *i915)
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2019-01-03 13:43 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-02  9:41 [PATCH 01/39] drm: Reorder set_property_atomic to avoid returning with an active ww_ctx Chris Wilson
2019-01-02  9:41 ` [PATCH 02/39] drm/i915/selftests: Take a breath during check_partial_mappings() Chris Wilson
2019-01-02 11:07   ` Mika Kuoppala
2019-01-02 11:14     ` Chris Wilson
2019-01-02  9:41 ` [PATCH 03/39] drm/i915: Return immediately if trylock fails for direct-reclaim Chris Wilson
2019-01-02  9:41 ` [PATCH 04/39] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Chris Wilson
2019-01-02  9:41 ` [PATCH 05/39] drm/i915/userptr: Probe vma range before gup Chris Wilson
2019-01-02  9:41 ` [PATCH 06/39] drm/i915: Always try to reset the GPU on takeover Chris Wilson
2019-01-02 13:19   ` Mika Kuoppala
2019-01-02 13:47     ` Chris Wilson
2019-01-02 14:09       ` Mika Kuoppala
2019-01-02  9:41 ` [PATCH 07/39] drm/i915: Report the number of closed vma held by each context in debugfs Chris Wilson
2019-01-04 13:54   ` Mika Kuoppala
2019-01-02  9:41 ` [PATCH 08/39] drm/i915: Track all held rpm wakerefs Chris Wilson
2019-01-02  9:41 ` [PATCH 09/39] drm/i915: Markup paired operations on wakerefs Chris Wilson
2019-01-03  9:38   ` Jani Nikula
2019-01-03 10:28     ` Chris Wilson
2019-01-02  9:41 ` [PATCH 10/39] drm/i915: Syntatic sugar for using intel_runtime_pm Chris Wilson
2019-01-03  9:48   ` Jani Nikula
2019-01-03 10:35     ` Chris Wilson
2019-01-02  9:41 ` [PATCH 11/39] drm/i915: Markup paired operations on display power domains Chris Wilson
2019-01-02  9:41 ` [PATCH 12/39] drm/i915: Track the wakeref used to initialise " Chris Wilson
2019-01-02  9:41 ` [PATCH 13/39] drm/i915: Combined gt.awake/gt.power wakerefs Chris Wilson
2019-01-02  9:41 ` [PATCH 14/39] drm/i915/dp: Markup pps lock power well Chris Wilson
2019-01-02  9:41 ` [PATCH 15/39] drm/i915: Complain if hsw_get_pipe_config acquires the same power well twice Chris Wilson
2019-01-02  9:41 ` [PATCH 16/39] drm/i915: Mark up Ironlake ips with rpm wakerefs Chris Wilson
2019-01-02  9:41 ` [PATCH 17/39] drm/i915: Serialise concurrent calls to i915_gem_set_wedged() Chris Wilson
2019-01-02  9:41 ` [PATCH 18/39] drm/i915: Differentiate between ggtt->mutex and ppgtt->mutex Chris Wilson
2019-01-03 13:29   ` Mika Kuoppala
2019-01-03 13:43   ` Tvrtko Ursulin [this message]
2019-01-03 13:55     ` Chris Wilson
2019-01-02  9:41 ` [PATCH 19/39] drm/i915: Pull all the reset functionality together into i915_reset.c Chris Wilson
2019-01-02  9:41 ` [PATCH 20/39] drm/i915: Make all GPU resets atomic Chris Wilson
2019-01-02  9:41 ` [PATCH 21/39] drm/i915/guc: Disable global reset Chris Wilson
2019-01-07 18:31   ` Daniele Ceraolo Spurio
2019-01-07 18:50     ` Chris Wilson
2019-01-07 21:28       ` Daniele Ceraolo Spurio
2019-01-07 21:35         ` Chris Wilson
2019-01-07 21:45           ` Daniele Ceraolo Spurio
2019-01-02  9:41 ` [PATCH 22/39] drm/i915: Remove GPU reset dependence on struct_mutex Chris Wilson
2019-01-02  9:41 ` [PATCH 23/39] drm/i915: Issue engine resets onto idle engines Chris Wilson
2019-01-02  9:41 ` [PATCH 24/39] drm/i915: Stop tracking MRU activity on VMA Chris Wilson
2019-01-02 13:13   ` Tvrtko Ursulin
2019-01-02 13:48     ` Chris Wilson
2019-01-02  9:41 ` [PATCH 25/39] drm/i915: Pull VM lists under the VM mutex Chris Wilson
2019-01-02 13:21   ` Tvrtko Ursulin
2019-01-02 13:28     ` Chris Wilson
2019-01-02  9:41 ` [PATCH 26/39] drm/i915: Consolidate the bound/unbound vma lists into one Chris Wilson
2019-01-02 14:22   ` Tvrtko Ursulin
2019-01-02  9:41 ` [PATCH 27/39] drm/i915: Move vma lookup to its own lock Chris Wilson
2019-01-02 15:07   ` Tvrtko Ursulin
2019-01-02  9:41 ` [PATCH 28/39] drm/i915: Move intel_execlists_show_requests() aside Chris Wilson
2019-01-02 15:15   ` Tvrtko Ursulin
2019-01-02  9:41 ` [PATCH 29/39] drm/i915: Use b->irq_enable() as predicate for mock engine Chris Wilson
2019-01-02 15:21   ` Tvrtko Ursulin
2019-01-04 12:13     ` Chris Wilson
2019-01-04 13:24       ` Tvrtko Ursulin
2019-01-02  9:41 ` [PATCH 30/39] drm/i915/selftests: Allocate mock ring/timeline per context Chris Wilson
2019-01-02  9:41 ` [PATCH 31/39] drm/i915/selftests: Make evict tolerant of foreign objects Chris Wilson
2019-01-02  9:41 ` [PATCH 32/39] drm/i915: Remove the intel_engine_notify tracepoint Chris Wilson
2019-01-02  9:41 ` [PATCH 33/39] drm/i915: Move list of timelines under its own lock Chris Wilson
2019-01-02  9:41 ` [PATCH 34/39] drm/i915: Introduce concept of per-timeline (context) HWSP Chris Wilson
2019-01-02  9:41 ` [PATCH 35/39] drm/i915: Enlarge vma->pin_count Chris Wilson
2019-01-02  9:41 ` [PATCH 36/39] drm/i915: Allocate a status page for each timeline Chris Wilson
2019-01-02  9:41 ` [PATCH 37/39] drm/i915: Track the context's seqno in its own timeline HWSP Chris Wilson
2019-01-03 15:08   ` Chris Wilson
2019-01-02  9:41 ` [PATCH 38/39] drm/i915: Identify active requests Chris Wilson
2019-01-02  9:41 ` [PATCH 39/39] drm/i915: Replace global breadcrumbs with per-context interrupt tracking Chris Wilson
2019-01-02 12:09 ` ✗ Fi.CI.BAT: failure for series starting with [01/39] drm: Reorder set_property_atomic to avoid returning with an active ww_ctx Patchwork

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=d33900c9-efbd-b399-e8cb-1afd12170c87@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    /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