]> Git Repo - J-linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
Merge tag 'drm-next-2022-12-23' of git://anongit.freedesktop.org/drm/drm
[J-linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_gem.c
index 62e98f1ad770b1ec0621ef46d8739b4b7188ea35..bb7350ea1d7594d486eff9b3f2baff582bde4a45 100644 (file)
@@ -113,7 +113,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
        bp.resv = resv;
        bp.preferred_domain = initial_domain;
        bp.flags = flags;
-       bp.domain = initial_domain | AMDGPU_GEM_DOMAIN_CPU;
+       bp.domain = initial_domain;
        bp.bo_ptr_size = sizeof(struct amdgpu_bo);
 
        r = amdgpu_bo_create_user(adev, &bp, &ubo);
@@ -256,7 +256,7 @@ static int amdgpu_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_str
         * becoming writable and makes is_cow_mapping(vm_flags) false.
         */
        if (is_cow_mapping(vma->vm_flags) &&
-           !(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC)))
+           !(vma->vm_flags & VM_ACCESS_FLAGS))
                vma->vm_flags &= ~VM_MAYWRITE;
 
        return drm_gem_ttm_mmap(obj, vma);
@@ -332,10 +332,20 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
        }
 
        initial_domain = (u32)(0xffffffff & args->in.domains);
+retry:
        r = amdgpu_gem_object_create(adev, size, args->in.alignment,
-                                    initial_domain, flags, ttm_bo_type_device,
-                                    resv, &gobj);
+                                    initial_domain,
+                                    flags, ttm_bo_type_device, resv, &gobj);
        if (r && r != -ERESTARTSYS) {
+               if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
+                       flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
+                       goto retry;
+               }
+
+               if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
+                       initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
+                       goto retry;
+               }
                DRM_DEBUG("Failed to allocate GEM object (%llu, %d, %llu, %d)\n",
                                size, initial_domain, args->in.alignment, r);
        }
This page took 0.02787 seconds and 4 git commands to generate.