Message ID | 20220712233136.1044951-7-John.C.Harrison@Intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Random assortment of (mostly) GuC related patches | expand |
On 7/12/2022 16:31, John.C.Harrison@Intel.com wrote: > From: Chris Wilson <chris.p.wilson@intel.com> > > Use a temporary page and mempy_from_wc to reduce the time it takes to > dump the guc log to debugfs. > > Signed-off-by: Chris Wilson <chris.p.wilson@intel.com> Reviewed-by: John Harrison <John.C.Harrison@Intel.com> > --- > drivers/gpu/drm/i915/gt/uc/intel_guc_log.c | 24 ++++++++++++++++------ > 1 file changed, 18 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c > index 45f62cdabe356..ff091adb56096 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c > @@ -749,8 +749,9 @@ int intel_guc_log_dump(struct intel_guc_log *log, struct drm_printer *p, > struct intel_guc *guc = log_to_guc(log); > struct intel_uc *uc = container_of(guc, struct intel_uc, guc); > struct drm_i915_gem_object *obj = NULL; > - u32 *map; > - int i = 0; > + void *map; > + u32 *page; > + int i, j; > > if (!intel_guc_is_supported(guc)) > return -ENODEV; > @@ -763,23 +764,34 @@ int intel_guc_log_dump(struct intel_guc_log *log, struct drm_printer *p, > if (!obj) > return 0; > > + page = (u32 *)__get_free_page(GFP_KERNEL); > + if (!page) > + return -ENOMEM; > + > intel_guc_dump_time_info(guc, p); > > map = i915_gem_object_pin_map_unlocked(obj, I915_MAP_WC); > if (IS_ERR(map)) { > DRM_DEBUG("Failed to pin object\n"); > drm_puts(p, "(log data unaccessible)\n"); > + free_page((unsigned long)page); > return PTR_ERR(map); > } > > - for (i = 0; i < obj->base.size / sizeof(u32); i += 4) > - drm_printf(p, "0x%08x 0x%08x 0x%08x 0x%08x\n", > - *(map + i), *(map + i + 1), > - *(map + i + 2), *(map + i + 3)); > + for (i = 0; i < obj->base.size; i += PAGE_SIZE) { > + if (!i915_memcpy_from_wc(page, map + i, PAGE_SIZE)) > + memcpy(page, map + i, PAGE_SIZE); > + > + for (j = 0; j < PAGE_SIZE / sizeof(u32); j += 4) > + drm_printf(p, "0x%08x 0x%08x 0x%08x 0x%08x\n", > + *(page + j + 0), *(page + j + 1), > + *(page + j + 2), *(page + j + 3)); > + } > > drm_puts(p, "\n"); > > i915_gem_object_unpin_map(obj); > + free_page((unsigned long)page); > > return 0; > }
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c index 45f62cdabe356..ff091adb56096 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c @@ -749,8 +749,9 @@ int intel_guc_log_dump(struct intel_guc_log *log, struct drm_printer *p, struct intel_guc *guc = log_to_guc(log); struct intel_uc *uc = container_of(guc, struct intel_uc, guc); struct drm_i915_gem_object *obj = NULL; - u32 *map; - int i = 0; + void *map; + u32 *page; + int i, j; if (!intel_guc_is_supported(guc)) return -ENODEV; @@ -763,23 +764,34 @@ int intel_guc_log_dump(struct intel_guc_log *log, struct drm_printer *p, if (!obj) return 0; + page = (u32 *)__get_free_page(GFP_KERNEL); + if (!page) + return -ENOMEM; + intel_guc_dump_time_info(guc, p); map = i915_gem_object_pin_map_unlocked(obj, I915_MAP_WC); if (IS_ERR(map)) { DRM_DEBUG("Failed to pin object\n"); drm_puts(p, "(log data unaccessible)\n"); + free_page((unsigned long)page); return PTR_ERR(map); } - for (i = 0; i < obj->base.size / sizeof(u32); i += 4) - drm_printf(p, "0x%08x 0x%08x 0x%08x 0x%08x\n", - *(map + i), *(map + i + 1), - *(map + i + 2), *(map + i + 3)); + for (i = 0; i < obj->base.size; i += PAGE_SIZE) { + if (!i915_memcpy_from_wc(page, map + i, PAGE_SIZE)) + memcpy(page, map + i, PAGE_SIZE); + + for (j = 0; j < PAGE_SIZE / sizeof(u32); j += 4) + drm_printf(p, "0x%08x 0x%08x 0x%08x 0x%08x\n", + *(page + j + 0), *(page + j + 1), + *(page + j + 2), *(page + j + 3)); + } drm_puts(p, "\n"); i915_gem_object_unpin_map(obj); + free_page((unsigned long)page); return 0; }