STRUCT DRM_PVR_IOCTL_CREATE_FREE_LIST_ARGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

struct drm_pvr_ioctl_create_free_list_args β€” the args struct for %DRM_IOCTL_PVR_CREATE_FREE_LIST, bestie πŸ’…

This one lives in the Kernel API Manual, the ./include/uapi/drm corner of the kernel, and it's dated October 2026 ✨


πŸ¦‹ SYNOPSIS πŸ¦‹

okay so here's the whole struct, literally character for character, no cap:

struct drm_pvr_ioctl_create_free_list_args {
    __u64 free_list_gpu_addr;
    __u32 initial_num_pages;
    __u32 max_num_pages;
    __u32 grow_num_pages;
    __u32 grow_threshold;
    __u32 vm_context_handle;
    __u32 handle;
 };

πŸŽ€ Members πŸŽ€

so like, every field, one by one, iykyk 🌈

  • free_list_gpu_addr β€” [IN] the address of the GPU mapping of the buffer object that holds the memory your free list is gonna use 🫢

And listen, two big rules for that buffer object, don't skip them:

  • the mapped region of the buffer object must be at least max_num_pages * ``sizeof(__u32)``` πŸ’€ (yes, that's sizeof(__u32)timesmax_num_pages`, do the math babe)
  • the buffer object must have been created with DRM_PVR_BO_DEVICE_PM_FW_PROTECT set, and DRM_PVR_BO_CPU_ALLOW_USERSPACE_ACCESS not set β€” periodt, no exceptions πŸ™ˆ
  • initial_num_pages β€” [IN] the pages initially allocated to the free list ✨
  • max_num_pages β€” [IN] the maximum number of pages in the free list πŸ‘‘
  • grow_num_pages β€” [IN] how many pages the free list grows by, per request 🌱
  • grow_threshold β€” [IN] the percentage of FL memory used that should trigger a new grow request πŸ”₯
  • vm_context_handle β€” [IN] handle for the VM context that the free list buffer object is mapped in 🧚
  • handle β€” [OUT] handle for the created free list, coming right back at ya πŸ’–

πŸ’œ Description πŸ’œ

Free list arguments have these constraints, and honestly they're giving rules are rules:

  • max_num_pages must be greater than zero.
  • grow_threshold must be between 0 and 100.
  • grow_num_pages must be less than or equal to max_num_pages.
  • initial_num_pages, max_num_pages and grow_num_pages must be multiples of 4.
  • When grow_num_pages is 0, initial_num_pages must be equal to max_num_pages.
  • When grow_num_pages is non-zero, initial_num_pages must be less than max_num_pages.
bestie please actually check these before you submit the ioctl 😭 the kernel is not gonna be nice about it

⭐ SEE ALSO ⭐

the whole friend group, all of them, not skipping a single one 🫢

  • Kernel file ./include/uapi/drm/pvr_drm.h
  • PowerVR UAPI(9)
  • struct drm_pvr_obj_array(9)
  • DRM_PVR_OBJ_ARRAY(9)
  • PowerVR IOCTL interface(9)
  • PVR_IOCTL(9)
  • PowerVR IOCTL DEV_QUERY interface(9)
  • struct drm_pvr_dev_query_gpu_info(9)
  • struct drm_pvr_dev_query_runtime_info(9)
  • struct drm_pvr_dev_query_quirks(9)
  • struct drm_pvr_dev_query_enhancements(9)
  • enum drm_pvr_heap_id(9)
  • struct drm_pvr_heap(9)
  • struct drm_pvr_dev_query_heap_info(9)
  • enum drm_pvr_static_data_area_usage(9)
  • struct drm_pvr_static_data_area(9)
  • struct drm_pvr_dev_query_static_data_areas(9)
  • enum drm_pvr_dev_query(9)
  • struct drm_pvr_ioctl_dev_query_args(9)
  • PowerVR IOCTL CREATE_BO interface(9)
  • Flags for CREATE_BO(9)
  • struct drm_pvr_ioctl_create_bo_args(9)
  • PowerVR IOCTL GET_BO_MMAP_OFFSET interface(9)
  • struct drm_pvr_ioctl_get_bo_mmap_offset_args(9)
  • PowerVR IOCTL CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT interfaces(9)
  • struct drm_pvr_ioctl_create_vm_context_args(9)
  • struct drm_pvr_ioctl_destroy_vm_context_args(9)
  • PowerVR IOCTL VM_MAP and VM_UNMAP interfaces(9)
  • struct drm_pvr_ioctl_vm_map_args(9)
  • struct drm_pvr_ioctl_vm_unmap_args(9)
  • PowerVR IOCTL CREATE_CONTEXT and DESTROY_CONTEXT interfaces(9)
  • enum drm_pvr_ctx_priority(9)
  • enum drm_pvr_ctx_type(9)
  • struct drm_pvr_ioctl_create_context_args(9)
  • struct drm_pvr_ioctl_destroy_context_args(9)
  • PowerVR IOCTL CREATE_FREE_LIST and DESTROY_FREE_LIST interfaces(9)
  • struct drm_pvr_ioctl_destroy_free_list_args(9)
  • PowerVR IOCTL CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET interfaces(9)
  • struct drm_pvr_create_hwrt_geom_data_args(9)
  • struct drm_pvr_create_hwrt_rt_data_args(9)
  • struct drm_pvr_ioctl_create_hwrt_dataset_args(9)
  • struct drm_pvr_ioctl_destroy_hwrt_dataset_args(9)
  • PowerVR IOCTL SUBMIT_JOBS interface(9)
  • Flags for the drm_pvr_sync_op object.(9)
  • struct drm_pvr_sync_op(9)
  • Flags for SUBMIT_JOB ioctl geometry command.(9)
  • Flags for SUBMIT_JOB ioctl fragment command.(9)
  • Flags for SUBMIT_JOB ioctl compute command.(9)
  • Flags for SUBMIT_JOB ioctl transfer command.(9)
  • enum drm_pvr_job_type(9)
  • struct drm_pvr_hwrt_data_ref(9)
  • struct drm_pvr_job(9)
  • struct drm_pvr_ioctl_submit_jobs_args(9)

okay that's the whole page, love u, go build something iconic πŸ’–βœ¨

this one came from ./include/uapi/drm, dated October 2026 β€” signed, sealed, shipped, mwah πŸŽ€πŸ¦‹πŸ’…

πŸ“¦ where this page comes from