For userspace BO allocations, replace AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED with a new AMDGPU_BO_FLAG_CPU_ACCESS flag. This flag will be used to indicate that a BO should currently be CPU accessible. Unlike the CPU_ACCESS_REQUIRED flag, it is meant to be an ephemeral rather than a permanent constraint. Currently, however, it is treated no differently. v2: Put the new flag in amdgpu_drm.h, only clear CPU_ACCESS_REQUIRED if bo->tbo.type == ttm_bo_type_device (Christian König) Signed-off-by: John Brooks <john at fastquake.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 9 ++++++++- include/uapi/drm/amdgpu_drm.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 8ee6965..a5e73f8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -128,7 +128,8 @@ static void amdgpu_ttm_placement_init(struct amdgpu_device *adev, places[c].flags = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_VRAM; - if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) + if (flags & (AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | + AMDGPU_BO_FLAG_CPU_ACCESS)) places[c].lpfn = visible_pfn; else places[c].flags |= TTM_PL_FLAG_TOPDOWN; @@ -361,6 +362,12 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev, if (!kernel && bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM) bo->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT; + if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) { + flags |= AMDGPU_BO_FLAG_CPU_ACCESS; + /* Treat CPU_ACCESS_REQUIRED only as a hint if given by UMD */ + if (type == ttm_bo_type_device) + flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; + } bo->flags = flags; #ifdef CONFIG_X86_32 diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h index d9aa4a3..aeff910 100644 --- a/include/uapi/drm/amdgpu_drm.h +++ b/include/uapi/drm/amdgpu_drm.h @@ -87,6 +87,8 @@ extern "C" { #define AMDGPU_GEM_CREATE_SHADOW (1 << 4) /* Flag that allocating the BO should use linear VRAM */ #define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5) +/* Flag that the BO is actively being used by the CPU. Internal use only */ +#define AMDGPU_BO_FLAG_CPU_ACCESS (1 << 6) struct drm_amdgpu_gem_create_in { /** the requested memory size */ -- 2.7.4