Am 30.06.2017 um 17:18 schrieb John Brooks:
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.

Signed-off-by: John Brooks <[email protected]>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu.h        | 3 +++
  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 9 ++++++++-
  include/uapi/drm/amdgpu_drm.h              | 1 +
  3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 12d61ed..a724e4f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -411,6 +411,9 @@ struct amdgpu_bo_va {
#define AMDGPU_GEM_DOMAIN_MAX 0x3 +/* BO internal flags */
+#define AMDGPU_BO_FLAG_CPU_ACCESS      (AMDGPU_GEM_CREATE_MAX << 1)
Better put this into amdgpu_drm.h to keep all the flags together. We can reject kernel internal flags when we create the BO.

But in general I would still say we should stop clearing the flag when "bo->tbo.type != ttm_bo_type_device".

This way we are always on the save side and don't modify flags for kernel BOs.

Regards,
Christian.

+
  struct amdgpu_bo {
        /* Protected by tbo.reserved */
        u32                             prefered_domains;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 8ee6965..fa8aeca 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 (!kernel)
+                       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..473076f 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -87,6 +87,7 @@ 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)
+#define AMDGPU_GEM_CREATE_MAX                  (1 << 5)
struct drm_amdgpu_gem_create_in {
        /** the requested memory size */


_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to