diff options
author | Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> | 2021-12-09 20:48:45 +0100 |
---|---|---|
committer | Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> | 2021-12-13 12:37:16 +0100 |
commit | be84fe4f151bc092e068cab5cd0cd19c34948b40 (patch) | |
tree | 554036332d1dbd98bce054a936e5d329ed79e80d /lib/i915/intel_memory_region.c | |
parent | d959199944d67331f0eb7b62768242c88aba7e35 (diff) |
lib/i915/intel_memory_region: Add fallback for creating gem bo
For stable kernels we get -ENODEV on integrated where gem_create_ext()
call tries to allocate bo in system memory. Instead of asserting this
case we can fallback to gem_create() as this allocation can be resolved
using legacy call.
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Petri Latvala <petri.latvala@intel.com>
Diffstat (limited to 'lib/i915/intel_memory_region.c')
-rw-r--r-- | lib/i915/intel_memory_region.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/i915/intel_memory_region.c b/lib/i915/intel_memory_region.c index fd29eec9..2263f198 100644 --- a/lib/i915/intel_memory_region.c +++ b/lib/i915/intel_memory_region.c @@ -197,8 +197,23 @@ int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t *size, .num_regions = num_regions, .regions = to_user_pointer(mem_regions), }; + int ret; - return __gem_create_ext(fd, size, handle, &ext_regions.base); + ret = __gem_create_ext(fd, size, handle, &ext_regions.base); + + /* + * Provide fallback for stable kernels if region passed in the array + * can be system memory. In this case we get -ENODEV but still + * we're able to allocate gem bo in system memory using legacy call. + */ + if (ret == -ENODEV) + for (int i = 0; i < num_regions; i++) + if (mem_regions[i].memory_class == I915_MEMORY_CLASS_SYSTEM) { + ret = __gem_create(fd, size, handle); + break; + } + + return ret; } /* gem_create_in_memory_region_list: |