[Intel-gfx] [PATCH 02/12] drm/i915/guc: Allocate separate shared data object for GuC communication
Daniele Ceraolo Spurio
daniele.ceraolospurio at intel.com
Mon Oct 9 18:41:59 UTC 2017
On 09/10/17 07:52, Michał Winiarski wrote:
> We were using first page of kernel context render state for sharing data
> with GuC. While it's justified by the fact that those pages are not used
> (note, GuC still enforces this layout and refuses to work if we remove
> the extra page in front), it's also confusing (why are we using this
> particular page?). Let's allocate a separate object instead.
>
> Suggested-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> Signed-off-by: Michał Winiarski <michal.winiarski at intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> Cc: Jeff McGee <jeff.mcgee at intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Oscar Mateo <oscar.mateo at intel.com>
+Michel (engine and watchdog reset with GuC use the shared page)
> ---
> drivers/gpu/drm/i915/i915_guc_submission.c | 36 +++++++++++++++++++++++++++++-
> drivers/gpu/drm/i915/intel_guc.c | 8 ++-----
> drivers/gpu/drm/i915/intel_guc.h | 2 ++
> 3 files changed, 39 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c
> index 8983d53af229..30f026566001 100644
> --- a/drivers/gpu/drm/i915/i915_guc_submission.c
> +++ b/drivers/gpu/drm/i915/i915_guc_submission.c
> @@ -437,6 +437,33 @@ static void guc_stage_desc_fini(struct intel_guc *guc,
> memset(desc, 0, sizeof(*desc));
> }
>
> +static int guc_shared_data_create(struct intel_guc *guc)
> +{
> + struct i915_vma *vma;
> + void *vaddr;
> +
> + vma = intel_guc_allocate_vma(guc, PAGE_SIZE);
> + if (IS_ERR(vma))
> + return PTR_ERR(vma);
> +
> + vaddr = i915_gem_object_pin_map(vma->obj, I915_MAP_WB);
> + if (IS_ERR(vaddr)) {
> + i915_vma_unpin_and_release(&vma);
> + return PTR_ERR(vaddr);
> + }
> +
> + guc->shared_data = vma;
> + guc->shared_data_vaddr = vaddr;
I've noticed that this is now the 3rd place where we allocate and
immediately pin a vma for guc (the other 2 being
guc_stage_desc_pool_create and ctch_init). Maybe we can move the 2
operations to a more common helper (and do the same for the cleanup),
but it's probably better to do it after all the ongoing GuC re-org has
settled down. In the meantime, this patch is:
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
Daniele
More information about the Intel-gfx
mailing list