[PATCH v3 3/5] drm/xe/display: Avoid calling readq()

Matt Roper matthew.d.roper at intel.com
Fri Jan 19 00:25:13 UTC 2024


On Thu, Jan 18, 2024 at 04:16:10PM -0800, Lucas De Marchi wrote:
> readq() is not available in 32bits and i915_gem_object_read_from_page()
> is supposed to allow reading arbitrary sizes determined by the `size`
> argument. Currently the only caller only passes a size == 8 so the second
> problem is not that big. Migrate to calling memcpy()/memcpy_fromio() to allow
> possible changes in the display side and to fix the build on 32b architectures.
> 
> v2: Use memcpy/memcpy_fromio directly rather than using iosys-map with
>     the same size == 8 bytes restriction (Matt Roper)
> 
> Fixes: 44e694958b95 ("drm/xe/display: Implement display support")
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>

Reviewed-by: Matt Roper <matthew.d.roper at intel.com>

> ---
>  .../drm/xe/compat-i915-headers/gem/i915_gem_object.h  | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h b/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
> index 5f19550cc845..68d9f6116bdf 100644
> --- a/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
> @@ -35,12 +35,10 @@ static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
>  					  u32 ofs, u64 *ptr, u32 size)
>  {
>  	struct ttm_bo_kmap_obj map;
> -	void *virtual;
> +	void *src;
>  	bool is_iomem;
>  	int ret;
>  
> -	XE_WARN_ON(size != 8);
> -
>  	ret = xe_bo_lock(bo, true);
>  	if (ret)
>  		return ret;
> @@ -50,11 +48,12 @@ static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
>  		goto out_unlock;
>  
>  	ofs &= ~PAGE_MASK;
> -	virtual = ttm_kmap_obj_virtual(&map, &is_iomem);
> +	src = ttm_kmap_obj_virtual(&map, &is_iomem);
> +	src += ofs;
>  	if (is_iomem)
> -		*ptr = readq((void __iomem *)(virtual + ofs));
> +		memcpy_fromio(ptr, (void __iomem *)src, size);
>  	else
> -		*ptr = *(u64 *)(virtual + ofs);
> +		memcpy(ptr, src, size);
>  
>  	ttm_bo_kunmap(&map);
>  out_unlock:
> -- 
> 2.40.1
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation


More information about the Intel-xe mailing list