drivers/gpu/drm/i915/intel_memory_region.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/i915/intel_memory_region.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/i915/intel_memory_region.c- Extension
.c- Size
- 9886 bytes
- Lines
- 431
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/prandom.hdrm/drm_print.huapi/drm/i915_drm.hintel_memory_region.hi915_drv.hi915_ttm_buddy_manager.hselftests/intel_memory_region.cselftests/mock_region.c
Detected Declarations
function __iopagetestfunction iopagetestfunction random_pagefunction iomemtestfunction intel_memory_region_lookupfunction intel_memory_region_by_typefunction intel_memory_type_is_localfunction intel_memory_region_reservefunction intel_memory_region_debugfunction intel_memory_region_memtestfunction intel_memory_region_createfunction intel_memory_region_set_namefunction intel_memory_region_availfunction intel_memory_region_destroyfunction intel_memory_regions_hw_probefunction intel_memory_regions_driver_release
Annotated Snippet
switch (type) {
case INTEL_MEMORY_SYSTEM:
if (IS_DGFX(i915))
mem = i915_gem_ttm_system_setup(i915, type,
instance);
else
mem = i915_gem_shmem_setup(i915, type,
instance);
break;
case INTEL_MEMORY_STOLEN_LOCAL:
mem = i915_gem_stolen_lmem_setup(i915, type, instance);
if (!IS_ERR(mem))
i915->mm.stolen_region = mem;
break;
case INTEL_MEMORY_STOLEN_SYSTEM:
mem = i915_gem_stolen_smem_setup(i915, type, instance);
if (!IS_ERR(mem))
i915->mm.stolen_region = mem;
break;
default:
continue;
}
if (IS_ERR(mem)) {
err = PTR_ERR(mem);
drm_err(&i915->drm,
"Failed to setup region(%d) type=%d\n",
err, type);
goto out_cleanup;
}
if (mem) { /* Skip on non-fatal errors */
mem->id = i;
i915->mm.regions[i] = mem;
}
}
for (i = 0; i < ARRAY_SIZE(i915->mm.regions); i++) {
struct intel_memory_region *mem = i915->mm.regions[i];
u64 region_size, io_size;
if (!mem)
continue;
region_size = resource_size(&mem->region) >> 20;
io_size = resource_size(&mem->io) >> 20;
if (resource_size(&mem->io))
drm_dbg(&i915->drm, "Memory region(%d): %s: %llu MiB %pR, io: %llu MiB %pR\n",
mem->id, mem->name, region_size, &mem->region, io_size, &mem->io);
else
drm_dbg(&i915->drm, "Memory region(%d): %s: %llu MiB %pR, io: n/a\n",
mem->id, mem->name, region_size, &mem->region);
}
return 0;
out_cleanup:
intel_memory_regions_driver_release(i915);
return err;
}
void intel_memory_regions_driver_release(struct drm_i915_private *i915)
{
int i;
for (i = 0; i < ARRAY_SIZE(i915->mm.regions); i++) {
struct intel_memory_region *region =
fetch_and_zero(&i915->mm.regions[i]);
if (region)
intel_memory_region_destroy(region);
}
}
#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
#include "selftests/intel_memory_region.c"
#include "selftests/mock_region.c"
#endif
Annotation
- Immediate include surface: `linux/prandom.h`, `drm/drm_print.h`, `uapi/drm/i915_drm.h`, `intel_memory_region.h`, `i915_drv.h`, `i915_ttm_buddy_manager.h`, `selftests/intel_memory_region.c`, `selftests/mock_region.c`.
- Detected declarations: `function __iopagetest`, `function iopagetest`, `function random_page`, `function iomemtest`, `function intel_memory_region_lookup`, `function intel_memory_region_by_type`, `function intel_memory_type_is_local`, `function intel_memory_region_reserve`, `function intel_memory_region_debug`, `function intel_memory_region_memtest`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.