From: John Harrison <John.C.Harrison@Intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 15/42] drm/i915: Use radixtree to jump start intel_partial_pages()
Date: Fri, 7 Oct 2016 14:46:50 +0100 [thread overview]
Message-ID: <b37c5f59-a035-e027-2cbe-bcee433da65d@Intel.com> (raw)
In-Reply-To: <20161007094635.28319-16-chris@chris-wilson.co.uk>
[-- Attachment #1.1: Type: text/plain, Size: 2245 bytes --]
On 07/10/2016 10:46, Chris Wilson wrote:
> We can use the radixtree index of the obj->pages to find the start
> position of the desired partial range.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/i915_gem_gtt.c | 38 +++++++++++++++++++++++--------------
> 1 file changed, 24 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 78b692e5b998..7e0c98576e72 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -3562,35 +3562,45 @@ intel_partial_pages(const struct i915_ggtt_view *view,
> struct drm_i915_gem_object *obj)
> {
> struct sg_table *st;
> - struct scatterlist *sg;
> - struct sg_page_iter obj_sg_iter;
> + struct scatterlist *sg, *iter;
> + unsigned int count = view->params.partial.size;
> + unsigned int offset;
> int ret = -ENOMEM;
>
> st = kmalloc(sizeof(*st), GFP_KERNEL);
> if (!st)
> goto err_st_alloc;
>
> - ret = sg_alloc_table(st, view->params.partial.size, GFP_KERNEL);
> + ret = sg_alloc_table(st, count, GFP_KERNEL);
> if (ret)
> goto err_sg_alloc;
>
> + iter = i915_gem_object_get_sg(obj,
> + view->params.partial.offset,
> + &offset);
> +
> sg = st->sgl;
> st->nents = 0;
> - for_each_sg_page(obj->pages->sgl, &obj_sg_iter, obj->pages->nents,
> - view->params.partial.offset)
> - {
> - if (st->nents >= view->params.partial.size)
> - break;
> + do {
> + unsigned int len =
> + min(iter->length, (count - offset) << PAGE_SHIFT);
>
> - sg_set_page(sg, NULL, PAGE_SIZE, 0);
> - sg_dma_address(sg) = sg_page_iter_dma_address(&obj_sg_iter);
> - sg_dma_len(sg) = PAGE_SIZE;
> + sg_set_page(sg, NULL, len, 0);
> + sg_dma_address(sg) =
> + sg_dma_address(iter) + (offset << PAGE_SHIFT);
> + sg_dma_len(sg) = len;
>
> - sg = sg_next(sg);
> st->nents++;
> - }
> + count -= len >> PAGE_SHIFT;
> + if (count == 0) {
> + sg_mark_end(sg);
> + return st;
> + }
>
> - return st;
> + sg = __sg_next(sg);
> + iter = __sg_next(iter);
> + offset = 0;
> + } while (1);
>
> err_sg_alloc:
> kfree(st);
Reviewed-by: John Harrison <john.c.harrison@intel.com>
[-- Attachment #1.2: Type: text/html, Size: 2672 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-10-07 13:46 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-07 9:45 Explicit fencing on multiple timelines, again Chris Wilson
2016-10-07 9:45 ` [PATCH 01/42] drm/i915: Allow disabling error capture Chris Wilson
2016-10-07 9:45 ` [PATCH 02/42] drm/i915: Stop the machine whilst capturing the GPU crash dump Chris Wilson
2016-10-07 10:11 ` Joonas Lahtinen
2016-10-07 9:45 ` [PATCH 03/42] drm/i915: Always use the GTT for error capture Chris Wilson
2016-10-07 9:45 ` [PATCH 04/42] drm/i915: Consolidate error object printing Chris Wilson
2016-10-07 9:45 ` [PATCH 05/42] drm/i915: Compress GPU objects in error state Chris Wilson
2016-10-07 9:45 ` [PATCH 06/42] drm/i915: Support asynchronous waits on struct fence from i915_gem_request Chris Wilson
2016-10-07 9:56 ` Joonas Lahtinen
2016-10-07 15:51 ` Tvrtko Ursulin
2016-10-07 16:12 ` Chris Wilson
2016-10-07 16:16 ` Tvrtko Ursulin
2016-10-07 16:37 ` Chris Wilson
2016-10-08 8:23 ` Tvrtko Ursulin
2016-10-08 8:58 ` Chris Wilson
2016-10-07 9:46 ` [PATCH 07/42] drm/i915: Allow i915_sw_fence_await_sw_fence() to allocate Chris Wilson
2016-10-07 16:10 ` Tvrtko Ursulin
2016-10-07 16:22 ` Chris Wilson
2016-10-08 8:21 ` Tvrtko Ursulin
2016-10-07 9:46 ` [PATCH 08/42] drm/i915: Rearrange i915_wait_request() accounting with callers Chris Wilson
2016-10-07 9:58 ` Joonas Lahtinen
2016-10-07 9:46 ` [PATCH 09/42] drm/i915: Remove unused i915_gem_active_wait() in favour of _unlocked() Chris Wilson
2016-10-07 9:46 ` [PATCH 10/42] drm/i915: Defer active reference until required Chris Wilson
2016-10-07 16:35 ` Tvrtko Ursulin
2016-10-07 16:58 ` Chris Wilson
2016-10-08 8:18 ` Tvrtko Ursulin
2016-10-07 9:46 ` [PATCH 11/42] drm/i915: Introduce an internal allocator for disposable private objects Chris Wilson
2016-10-07 10:01 ` Joonas Lahtinen
2016-10-07 16:52 ` Tvrtko Ursulin
2016-10-07 17:08 ` Chris Wilson
2016-10-08 8:12 ` Tvrtko Ursulin
2016-10-08 8:32 ` Chris Wilson
2016-10-08 8:34 ` [PATCH v2] " Chris Wilson
2016-10-10 7:01 ` Joonas Lahtinen
2016-10-10 8:11 ` Tvrtko Ursulin
2016-10-10 8:19 ` Chris Wilson
2016-10-10 8:25 ` Tvrtko Ursulin
2016-10-07 9:46 ` [PATCH 12/42] drm/i915: Reuse the active golden render state batch Chris Wilson
2016-10-07 9:46 ` [PATCH 13/42] drm/i915: Markup GEM API with lockdep asserts Chris Wilson
2016-10-07 9:46 ` [PATCH 14/42] drm/i915: Use a radixtree for random access to the object's backing storage Chris Wilson
2016-10-07 10:12 ` Joonas Lahtinen
2016-10-07 11:05 ` Chris Wilson
2016-10-07 11:33 ` Joonas Lahtinen
2016-10-07 13:36 ` John Harrison
2016-10-11 9:32 ` Tvrtko Ursulin
2016-10-11 10:15 ` John Harrison
2016-10-07 9:46 ` [PATCH 15/42] drm/i915: Use radixtree to jump start intel_partial_pages() Chris Wilson
2016-10-07 13:46 ` John Harrison [this message]
2016-10-07 9:46 ` [PATCH 16/42] drm/i915: Refactor object page API Chris Wilson
2016-10-10 10:54 ` John Harrison
2016-10-11 11:23 ` Tvrtko Ursulin
2016-10-13 11:04 ` Joonas Lahtinen
2016-10-13 11:10 ` Chris Wilson
2016-10-07 9:46 ` [PATCH 17/42] drm/i915: Pass around sg_table to get_pages/put_pages backend Chris Wilson
2016-10-14 9:12 ` Joonas Lahtinen
2016-10-14 9:24 ` Chris Wilson
2016-10-14 9:28 ` Tvrtko Ursulin
2016-10-14 9:43 ` Chris Wilson
2016-10-17 10:52 ` Tvrtko Ursulin
2016-10-17 11:08 ` Chris Wilson
2016-10-07 9:46 ` [PATCH 18/42] drm/i915: Move object backing storage manipulation to its own locking Chris Wilson
2016-10-13 12:46 ` Joonas Lahtinen
2016-10-13 12:56 ` Chris Wilson
2016-10-07 9:46 ` [PATCH 19/42] drm/i915/dmabuf: Acquire the backing storage outside of struct_mutex Chris Wilson
2016-10-13 11:54 ` Joonas Lahtinen
2016-10-07 9:46 ` [PATCH 20/42] drm/i915: Implement pread without struct-mutex Chris Wilson
2016-10-12 12:53 ` Joonas Lahtinen
2016-10-07 9:46 ` [PATCH 21/42] drm/i915: Implement pwrite " Chris Wilson
2016-10-13 11:17 ` Joonas Lahtinen
2016-10-13 11:54 ` Chris Wilson
2016-10-14 7:08 ` Joonas Lahtinen
2016-10-07 9:46 ` [PATCH 22/42] drm/i915: Acquire the backing storage outside of struct_mutex in set-domain Chris Wilson
2016-10-13 11:47 ` Joonas Lahtinen
2016-10-07 9:46 ` [PATCH 23/42] drm/i915: Move object release to a freelist + worker Chris Wilson
2016-10-11 9:52 ` John Harrison
2016-10-07 9:46 ` [PATCH 24/42] drm/i915: Treat a framebuffer reference as an active reference whilst shrinking Chris Wilson
2016-10-11 9:54 ` John Harrison
2016-10-07 9:46 ` [PATCH 25/42] drm/i915: Use lockless object free Chris Wilson
2016-10-11 9:56 ` John Harrison
2016-10-07 9:46 ` [PATCH 26/42] drm/i915: Move GEM activity tracking into a common struct reservation_object Chris Wilson
2016-10-07 10:10 ` Joonas Lahtinen
2016-10-07 9:46 ` [PATCH 27/42] drm: Add reference counting to drm_atomic_state Chris Wilson
2016-10-07 9:46 ` [PATCH 28/42] drm/i915: Restore nonblocking awaits for modesetting Chris Wilson
2016-10-07 9:46 ` [PATCH 29/42] drm/i915: Combine seqno + tracking into a global timeline struct Chris Wilson
2016-10-07 9:46 ` [PATCH 30/42] drm/i915: Queue the idling context switch after all other timelines Chris Wilson
2016-10-07 9:46 ` [PATCH 31/42] drm/i915: Wait first for submission, before waiting for request completion Chris Wilson
2016-10-07 9:46 ` [PATCH 32/42] drm/i915: Introduce a global_seqno for each request Chris Wilson
2016-10-07 9:46 ` [PATCH 33/42] drm/i915: Rename ->emit_request to ->emit_breadcrumb Chris Wilson
2016-10-07 9:46 ` [PATCH 34/42] drm/i915: Record space required for breadcrumb emission Chris Wilson
2016-10-07 9:46 ` [PATCH 35/42] drm/i915: Defer " Chris Wilson
2016-10-07 9:46 ` [PATCH 36/42] drm/i915: Move the global sync optimisation to the timeline Chris Wilson
2016-10-07 9:46 ` [PATCH 37/42] drm/i915: Create a unique name for the context Chris Wilson
2016-10-07 9:46 ` [PATCH 38/42] drm/i915: Reserve space in the global seqno during request allocation Chris Wilson
2016-10-07 9:46 ` [PATCH 39/42] drm/i915: Defer setting of global seqno on request to submission Chris Wilson
2016-10-07 10:25 ` Joonas Lahtinen
2016-10-07 10:27 ` Joonas Lahtinen
2016-10-07 11:03 ` Chris Wilson
2016-10-07 11:10 ` Joonas Lahtinen
2016-10-07 9:46 ` [PATCH 40/42] drm/i915: Enable multiple timelines Chris Wilson
2016-10-07 10:29 ` Joonas Lahtinen
2016-10-07 11:00 ` Chris Wilson
2016-10-07 11:07 ` Joonas Lahtinen
2016-10-07 9:46 ` [PATCH 41/42] drm/i915: Enable userspace to opt-out of implicit fencing Chris Wilson
2016-10-07 9:46 ` [PATCH 42/42] drm/i915: Support explicit fencing for execbuf Chris Wilson
2016-10-07 10:19 ` ✗ Fi.CI.BAT: warning for series starting with [01/42] drm/i915: Allow disabling error capture Patchwork
2016-10-10 7:23 ` Patchwork
2016-10-10 15:31 ` ✗ Fi.CI.BAT: failure for series starting with [01/42] drm/i915: Allow disabling error capture (rev2) 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=b37c5f59-a035-e027-2cbe-bcee433da65d@Intel.com \
--to=john.c.harrison@intel.com \
--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