]> git.itanic.dy.fi Git - linux-stable/commitdiff
drm/i915: Check stolen memory size before calling drm_mm_init
authorJosé Roberto de Souza <jose.souza@intel.com>
Wed, 23 Feb 2022 19:49:46 +0000 (11:49 -0800)
committerJosé Roberto de Souza <jose.souza@intel.com>
Fri, 25 Feb 2022 13:24:16 +0000 (05:24 -0800)
Add check for zero usable stolen memory before calling drm_mm_init
to support configurations where stolen memory exists but is fully
reserved.

Also skip memory test in cases that usable stolen is smaller than
page size(amount mapped and used to test memory).

v2:
- skiping test if available memory is smaller than page size (Lucas)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Steve Carbonari <steven.carbonari@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220223194946.725328-1-jose.souza@intel.com
drivers/gpu/drm/i915/gem/i915_gem_stolen.c
drivers/gpu/drm/i915/intel_memory_region.c

index 26975d85777605b52d584b31b95b401eed9993ed..c1c45bdf0341083c15e988c1252a30f14ead0c97 100644 (file)
@@ -495,13 +495,16 @@ static int i915_gem_init_stolen(struct intel_memory_region *mem)
         * memory, so just consider the start. */
        reserved_total = stolen_top - reserved_base;
 
+       i915->stolen_usable_size =
+               resource_size(&i915->dsm) - reserved_total;
+
        drm_dbg(&i915->drm,
                "Memory reserved for graphics device: %lluK, usable: %lluK\n",
                (u64)resource_size(&i915->dsm) >> 10,
-               ((u64)resource_size(&i915->dsm) - reserved_total) >> 10);
+               (u64)i915->stolen_usable_size >> 10);
 
-       i915->stolen_usable_size =
-               resource_size(&i915->dsm) - reserved_total;
+       if (i915->stolen_usable_size == 0)
+               return 0;
 
        /* Basic memrange allocator for stolen space. */
        drm_mm_init(&i915->mm.stolen, 0, i915->stolen_usable_size);
index c70d7e286a51248c618b8e8535289ed58b074156..16ab62d605b1aac9fd1cb9740a71e99fa4ce1b6d 100644 (file)
@@ -97,10 +97,14 @@ static int iomemtest(struct intel_memory_region *mem,
                     bool test_all,
                     const void *caller)
 {
-       resource_size_t last = resource_size(&mem->region) - PAGE_SIZE;
-       resource_size_t page;
+       resource_size_t last, page;
        int err;
 
+       if (resource_size(&mem->region) < PAGE_SIZE)
+               return 0;
+
+       last = resource_size(&mem->region) - PAGE_SIZE;
+
        /*
         * Quick test to check read/write access to the iomap (backing store).
         *