drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
Extension
.c
Size
3065 bytes
Lines
128
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.

Dependency Surface

Detected Declarations

Annotated Snippet

panfrost_gem_purge(&shmem->base)) {
			freed += shmem->base.size >> PAGE_SHIFT;
			list_del_init(&shmem->madv_list);
		}
	}

	mutex_unlock(&pfdev->shrinker_lock);

	if (freed > 0)
		pr_info_ratelimited("Purging %lu bytes\n", freed << PAGE_SHIFT);

	return freed;
}

/**
 * panfrost_gem_shrinker_init - Initialize panfrost shrinker
 * @dev: DRM device
 *
 * This function registers and sets up the panfrost shrinker.
 */
int panfrost_gem_shrinker_init(struct drm_device *dev)
{
	struct panfrost_device *pfdev = to_panfrost_device(dev);

	pfdev->shrinker = shrinker_alloc(0, "drm-panfrost");
	if (!pfdev->shrinker)
		return -ENOMEM;

	pfdev->shrinker->count_objects = panfrost_gem_shrinker_count;
	pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan;
	pfdev->shrinker->private_data = pfdev;

	shrinker_register(pfdev->shrinker);

	return 0;
}

/**
 * panfrost_gem_shrinker_cleanup - Clean up panfrost shrinker
 * @dev: DRM device
 *
 * This function unregisters the panfrost shrinker.
 */
void panfrost_gem_shrinker_cleanup(struct drm_device *dev)
{
	struct panfrost_device *pfdev = to_panfrost_device(dev);

	if (pfdev->shrinker)
		shrinker_free(pfdev->shrinker);
}

Annotation

Implementation Notes