Commit b8986c88 authored by José Roberto de Souza's avatar José Roberto de Souza
Browse files

drm/i915: Check stolen memory size before calling drm_mm_init



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: default avatarJosé Roberto de Souza <jose.souza@intel.com>
Signed-off-by: default avatarSteve Carbonari <steven.carbonari@intel.com>
Reviewed-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220223194946.725328-1-jose.souza@intel.com
parent bbd57d16
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -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);
+6 −2
Original line number Diff line number Diff line
@@ -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).
	 *