sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/translations/zh_CN/gpu/drm-mmmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/zh_TW/gpu/drm-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/it_IT/gpu/drm-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ja_JP/gpu/drm-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ko_KR/gpu/drm-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/sp_SP/gpu/drm-mmmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hDRM Memory Managementh]hDRM Memory Management}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh8/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm.rsthKubh paragraph)}(hX<Modern Linux systems require large amount of graphics memory to store frame buffers, textures, vertices and other graphics-related data. Given the very dynamic nature of many of that data, managing graphics memory efficiently is thus crucial for the graphics stack and plays a central role in the DRM infrastructure.h]hX<Modern Linux systems require large amount of graphics memory to store frame buffers, textures, vertices and other graphics-related data. Given the very dynamic nature of many of that data, managing graphics memory efficiently is thus crucial for the graphics stack and plays a central role in the DRM infrastructure.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXThe DRM core includes two memory managers, namely Translation Table Manager (TTM) and Graphics Execution Manager (GEM). TTM was the first DRM memory manager to be developed and tried to be a one-size-fits-them all solution. It provides a single userspace API to accommodate the need of all hardware, supporting both Unified Memory Architecture (UMA) devices and devices with dedicated video RAM (i.e. most discrete video cards). This resulted in a large, complex piece of code that turned out to be hard to use for driver development.h]hXThe DRM core includes two memory managers, namely Translation Table Manager (TTM) and Graphics Execution Manager (GEM). TTM was the first DRM memory manager to be developed and tried to be a one-size-fits-them all solution. It provides a single userspace API to accommodate the need of all hardware, supporting both Unified Memory Architecture (UMA) devices and devices with dedicated video RAM (i.e. most discrete video cards). This resulted in a large, complex piece of code that turned out to be hard to use for driver development.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXGEM started as an Intel-sponsored project in reaction to TTM's complexity. Its design philosophy is completely different: instead of providing a solution to every graphics memory-related problems, GEM identified common code between drivers and created a support library to share it. GEM has simpler initialization and execution requirements than TTM, but has no video RAM management capabilities and is thus limited to UMA devices.h]hXGEM started as an Intel-sponsored project in reaction to TTM’s complexity. Its design philosophy is completely different: instead of providing a solution to every graphics memory-related problems, GEM identified common code between drivers and created a support library to share it. GEM has simpler initialization and execution requirements than TTM, but has no video RAM management capabilities and is thus limited to UMA devices.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h#The Translation Table Manager (TTM)h]h#The Translation Table Manager (TTM)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hFTTM is a memory manager for accelerator devices with dedicated memory.h]hFTTM is a memory manager for accelerator devices with dedicated memory.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:31: ./drivers/gpu/drm/ttm/ttm_module.chK+hhhhubh)}(hThe basic idea is that resources are grouped together in buffer objects of certain size and TTM handles lifetime, movement and CPU mappings of those objects.h]hThe basic idea is that resources are grouped together in buffer objects of certain size and TTM handles lifetime, movement and CPU mappings of those objects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:31: ./drivers/gpu/drm/ttm/ttm_module.chK-hhhhubh)}(h6TODO: Add more design background and information here.h]h6TODO: Add more design background and information here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:31: ./drivers/gpu/drm/ttm/ttm_module.chK1hhhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlettm_caching (C enum) c.ttm_cachinghNtauh1j!hhhhhNhNubhdesc)}(hhh](hdesc_signature)}(h ttm_cachingh]hdesc_signature_line)}(henum ttm_cachingh](hdesc_sig_keyword)}(henumh]henum}(hjEhhhNhNubah}(h]h ]kah"]h$]h&]uh1jChj?hhhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:34: ./include/drm/ttm/ttm_caching.hhKubhdesc_sig_space)}(h h]h }(hjWhhhNhNubah}(h]h ]wah"]h$]h&]uh1jUhj?hhhjThKubh desc_name)}(h ttm_cachingh]h desc_sig_name)}(hj;h]h ttm_caching}(hjnhhhNhNubah}(h]h ]nah"]h$]h&]uh1jlhjhubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jfhj?hhhjThKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1j=sphinx_line_type declaratorhj9hhhjThKubah}(h]j0ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j7hjThKhj4hhubh desc_content)}(hhh]h)}(h&CPU caching and BUS snooping behavior.h]h&CPU caching and BUS snooping behavior.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:34: ./include/drm/ttm/ttm_caching.hhK!hjhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjThKubeh}(h]h ](cenumeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1j2hhhhhNhNubh container)}(hXD**Constants** ``ttm_uncached`` Most defensive option for device mappings, don't even allow write combining. ``ttm_write_combined`` Don't cache read accesses, but allow at least writes to be combined. ``ttm_cached`` Fully cached like normal system memory, requires that devices snoop the CPU cache on accesses.h](h)}(h **Constants**h]hstrong)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:34: ./include/drm/ttm/ttm_caching.hhK%hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h^``ttm_uncached`` Most defensive option for device mappings, don't even allow write combining. h](hterm)}(h``ttm_uncached``h]hliteral)}(hjh]h ttm_uncached}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:34: ./include/drm/ttm/ttm_caching.hhK)hjubh definition)}(hhh]h)}(hLMost defensive option for device mappings, don't even allow write combining.h]hNMost defensive option for device mappings, don’t even allow write combining.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:34: ./include/drm/ttm/ttm_caching.hhK(hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK)hjubj)}(h\``ttm_write_combined`` Don't cache read accesses, but allow at least writes to be combined. h](j)}(h``ttm_write_combined``h]j)}(hj/h]httm_write_combined}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:34: ./include/drm/ttm/ttm_caching.hhK-hj)ubj )}(hhh]h)}(hDDon't cache read accesses, but allow at least writes to be combined.h]hFDon’t cache read accesses, but allow at least writes to be combined.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:34: ./include/drm/ttm/ttm_caching.hhK,hjEubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhK-hjubj)}(hm``ttm_cached`` Fully cached like normal system memory, requires that devices snoop the CPU cache on accesses.h](j)}(h``ttm_cached``h]j)}(hjih]h ttm_cached}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:34: ./include/drm/ttm/ttm_caching.hhK0hjcubj )}(hhh]h)}(h^Fully cached like normal system memory, requires that devices snoop the CPU cache on accesses.h]h^Fully cached like normal system memory, requires that devices snoop the CPU cache on accesses.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hK0hjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hK0hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh](h)}(hTTM device object referenceh]hTTM device object reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK&ubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_global (C struct) c.ttm_globalhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h ttm_globalh]j>)}(hstruct ttm_globalh](jD)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(h ttm_globalh]jm)}(hjh]h ttm_global}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h!Buffer object driver global data.h]h!Buffer object driver global data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK'hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjj.jj.jjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct ttm_global { struct page *dummy_read_page; struct list_head device_list; atomic_t bo_count; }; **Members** ``dummy_read_page`` Pointer to a dummy page used for mapping requests of unpopulated pages. Constant after init. ``device_list`` List of buffer object devices. Protected by ttm_global_mutex. ``bo_count`` Number of buffer objects allocated by devices.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK+hj2ubh literal_block)}(hqstruct ttm_global { struct page *dummy_read_page; struct list_head device_list; atomic_t bo_count; };h]hqstruct ttm_global { struct page *dummy_read_page; struct list_head device_list; atomic_t bo_count; };}hjUsbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK-hj2ubh)}(h **Members**h]j)}(hjfh]hMembers}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK3hj2ubj)}(hhh](j)}(hq``dummy_read_page`` Pointer to a dummy page used for mapping requests of unpopulated pages. Constant after init. h](j)}(h``dummy_read_page``h]j)}(hjh]hdummy_read_page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK.hjubj )}(hhh]h)}(h\Pointer to a dummy page used for mapping requests of unpopulated pages. Constant after init.h]h\Pointer to a dummy page used for mapping requests of unpopulated pages. Constant after init.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK-hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK.hj|ubj)}(hN``device_list`` List of buffer object devices. Protected by ttm_global_mutex. h](j)}(h``device_list``h]j)}(hjh]h device_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK4hjubj )}(hhh]h)}(h=List of buffer object devices. Protected by ttm_global_mutex.h]h=List of buffer object devices. Protected by ttm_global_mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK3hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hj|ubj)}(h;``bo_count`` Number of buffer objects allocated by devices.h](j)}(h ``bo_count``h]j)}(hjh]hbo_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK8hjubj )}(hhh]h)}(h.Number of buffer objects allocated by devices.h]h.Number of buffer objects allocated by devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK9hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hj|ubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_device (C struct) c.ttm_devicehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h ttm_deviceh]j>)}(hstruct ttm_deviceh](jD)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjOhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhK?ubjV)}(h h]h }(hjahhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjOhhhj`hK?ubjg)}(h ttm_deviceh]jm)}(hjMh]h ttm_device}(hjshhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjOhhhj`hK?ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjKhhhj`hK?ubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1j7hj`hK?hjHhhubj)}(hhh]h)}(h*Buffer object driver device-specific data.h]h*Buffer object driver device-specific data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhj`hK?ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct ttm_device { struct list_head device_list; const struct ttm_device_funcs *funcs; struct ttm_resource_manager sysman; struct ttm_resource_manager *man_drv[TTM_NUM_MEM_TYPES]; struct drm_vma_offset_manager *vma_manager; struct ttm_pool pool; spinlock_t lru_lock; struct list_head unevictable; struct address_space *dev_mapping; struct workqueue_struct *wq; }; **Members** ``device_list`` Our entry in the global device list. Constant after bo device init ``funcs`` Function table for the device. Constant after bo device init ``sysman`` Resource manager for the system domain. Access via ttm_manager_type. ``man_drv`` An array of resource_managers, one per resource type. ``vma_manager`` Address space manager for finding BOs to mmap. ``pool`` page pool for the device. ``lru_lock`` Protection for the per manager LRU and ddestroy lists. ``unevictable`` Buffer objects which are pinned or swapped and as such not on an LRU list. ``dev_mapping`` A pointer to the struct address_space for invalidating CPU mappings on buffer move. Protected by load/unload sync. ``wq`` Work queue structure for the delayed delete workqueue.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhKhjubjT)}(hXstruct ttm_device { struct list_head device_list; const struct ttm_device_funcs *funcs; struct ttm_resource_manager sysman; struct ttm_resource_manager *man_drv[TTM_NUM_MEM_TYPES]; struct drm_vma_offset_manager *vma_manager; struct ttm_pool pool; spinlock_t lru_lock; struct list_head unevictable; struct address_space *dev_mapping; struct workqueue_struct *wq; };h]hXstruct ttm_device { struct list_head device_list; const struct ttm_device_funcs *funcs; struct ttm_resource_manager sysman; struct ttm_resource_manager *man_drv[TTM_NUM_MEM_TYPES]; struct drm_vma_offset_manager *vma_manager; struct ttm_pool pool; spinlock_t lru_lock; struct list_head unevictable; struct address_space *dev_mapping; struct workqueue_struct *wq; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhKhjubj)}(hhh](j)}(hS``device_list`` Our entry in the global device list. Constant after bo device init h](j)}(h``device_list``h]j)}(hjh]h device_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhKhjubj )}(hhh]h)}(hBOur entry in the global device list. Constant after bo device inith]hBOur entry in the global device list. Constant after bo device init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hG``funcs`` Function table for the device. Constant after bo device init h](j)}(h ``funcs``h]j)}(hj<h]hfuncs}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:40: ./include/drm/ttm/ttm_device.hhKhj6ubj )}(hhh]h)}(h)}(hint ttm_device_init(struct ttm_device *bdev, const struct ttm_device_funcs *funcs, struct device *dev, struct address_space *mapping, struct drm_vma_offset_manager *vma_manager, bool use_dma_alloc, bool use_dma32)h](hdesc_sig_keyword_type)}(hinth]hint}(hjdhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jbhj^hhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKubjV)}(h h]h }(hjthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^hhhjshKubjg)}(httm_device_inith]jm)}(httm_device_inith]httm_device_init}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj^hhhjshKubhdesc_parameterlist)}(h(struct ttm_device *bdev, const struct ttm_device_funcs *funcs, struct device *dev, struct address_space *mapping, struct drm_vma_offset_manager *vma_manager, bool use_dma_alloc, bool use_dma32)h](hdesc_parameter)}(hstruct ttm_device *bdevh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h ttm_deviceh]h ttm_device}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjsbc.ttm_device_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubjm)}(hbdevh]hbdev}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h$const struct ttm_device_funcs *funcsh](jD)}(hconsth]hconst}(hj$hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjD)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(httm_device_funcsh]httm_device_funcs}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]jc.ttm_device_initasbuh1hhj ubjV)}(h h]h }(hj|hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hfuncsh]hfuncs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device *devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.ttm_device_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct address_space *mappingh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj- hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(h address_spaceh]h address_space}(hj> hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj; ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@ modnameN classnameNjj)}j]jc.ttm_device_initasbuh1hhj ubjV)}(h h]h }(hj\ hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hmappingh]hmapping}(hjw hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h*struct drm_vma_offset_manager *vma_managerh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.ttm_device_initasbuh1hhj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(h vma_managerh]h vma_manager}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hbool use_dma_alloch](jc)}(hboolh]hbool}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjm)}(h use_dma_alloch]h use_dma_alloc}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hbool use_dma32h](jc)}(hj h]hbool}(hj5 hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj1 ubjV)}(h h]h }(hjB hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1 ubjm)}(h use_dma32h]h use_dma32}(hjP hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1 ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj^hhhjshKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjZhhhjshKubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1j7hjshKhjWhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjWhhhjshKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct ttm_device *bdev`` A pointer to a struct ttm_device to initialize. ``const struct ttm_device_funcs *funcs`` Function table for the device. ``struct device *dev`` The core kernel device pointer for DMA mappings and allocations. ``struct address_space *mapping`` The address space to use for this bo. ``struct drm_vma_offset_manager *vma_manager`` A pointer to a vma manager. ``bool use_dma_alloc`` If coherent DMA allocation API should be used. ``bool use_dma32`` If we should use GFP_DMA32 for device memory allocations. **Description** Initializes a struct ttm_device: **Return** !0: Failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubj)}(hhh](j)}(hL``struct ttm_device *bdev`` A pointer to a struct ttm_device to initialize. h](j)}(h``struct ttm_device *bdev``h]j)}(hj h]hstruct ttm_device *bdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubj )}(hhh]h)}(h/A pointer to a struct ttm_device to initialize.h]h/A pointer to a struct ttm_device to initialize.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hH``const struct ttm_device_funcs *funcs`` Function table for the device. h](j)}(h(``const struct ttm_device_funcs *funcs``h]j)}(hj h]h$const struct ttm_device_funcs *funcs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubj )}(hhh]h)}(hFunction table for the device.h]hFunction table for the device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hX``struct device *dev`` The core kernel device pointer for DMA mappings and allocations. h](j)}(h``struct device *dev``h]j)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubj )}(hhh]h)}(h@The core kernel device pointer for DMA mappings and allocations.h]h@The core kernel device pointer for DMA mappings and allocations.}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3 hKhj4 ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj3 hKhj ubj)}(hH``struct address_space *mapping`` The address space to use for this bo. h](j)}(h!``struct address_space *mapping``h]j)}(hjW h]hstruct address_space *mapping}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhjQ ubj )}(hhh]h)}(h%The address space to use for this bo.h]h%The address space to use for this bo.}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl hKhjm ubah}(h]h ]h"]h$]h&]uh1j hjQ ubeh}(h]h ]h"]h$]h&]uh1jhjl hKhj ubj)}(hK``struct drm_vma_offset_manager *vma_manager`` A pointer to a vma manager. h](j)}(h.``struct drm_vma_offset_manager *vma_manager``h]j)}(hj h]h*struct drm_vma_offset_manager *vma_manager}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubj )}(hhh]h)}(hA pointer to a vma manager.h]hA pointer to a vma manager.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hF``bool use_dma_alloc`` If coherent DMA allocation API should be used. h](j)}(h``bool use_dma_alloc``h]j)}(hj h]hbool use_dma_alloc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubj )}(hhh]h)}(h.If coherent DMA allocation API should be used.h]h.If coherent DMA allocation API should be used.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hM``bool use_dma32`` If we should use GFP_DMA32 for device memory allocations. h](j)}(h``bool use_dma32``h]j)}(hj h]hbool use_dma32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubj )}(hhh]h)}(h9If we should use GFP_DMA32 for device memory allocations.h]h9If we should use GFP_DMA32 for device memory allocations.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj= h]h Description}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubh)}(h Initializes a struct ttm_device:h]h Initializes a struct ttm_device:}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubh)}(h **Return**h]j)}(hjd h]hReturn}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubh)}(h !0: Failure.h]h !0: Failure.}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:43: ./drivers/gpu/drm/ttm/ttm_device.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]ttm-device-object-referenceah ]h"]ttm device object referenceah$]h&]uh1hhhhhhhhK&ubh)}(hhh](h)}(h TTM resource placement referenceh]h TTM resource placement reference}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK/ubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_place (C struct) c.ttm_placehNtauh1j!hj hhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhNubj3)}(hhh](j8)}(h ttm_placeh]j>)}(hstruct ttm_placeh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj hhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhj hKubjg)}(h ttm_placeh]jm)}(hj h]h ttm_place}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj hhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj hKhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jjjuh1j2hhhj hj hNubj)}(hX**Definition**:: struct ttm_place { unsigned fpfn; unsigned lpfn; uint32_t mem_type; uint32_t flags; }; **Members** ``fpfn`` first valid page frame number to put the object ``lpfn`` last valid page frame number to put the object ``mem_type`` One of TTM_PL_* where the resource should be allocated from. ``flags`` memory domain and caching flags for the objecth](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKMhj ubjT)}(hfstruct ttm_place { unsigned fpfn; unsigned lpfn; uint32_t mem_type; uint32_t flags; };h]hfstruct ttm_place { unsigned fpfn; unsigned lpfn; uint32_t mem_type; uint32_t flags; };}hj3 sbah}(h]h ]h"]h$]h&]jjuh1jShZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKOhj ubh)}(h **Members**h]j)}(hjD h]hMembers}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKVhj ubj)}(hhh](j)}(h9``fpfn`` first valid page frame number to put the object h](j)}(h``fpfn``h]j)}(hjc h]hfpfn}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKMhj] ubj )}(hhh]h)}(h/first valid page frame number to put the objecth]h/first valid page frame number to put the object}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx hKMhjy ubah}(h]h ]h"]h$]h&]uh1j hj] ubeh}(h]h ]h"]h$]h&]uh1jhjx hKMhjZ ubj)}(h8``lpfn`` last valid page frame number to put the object h](j)}(h``lpfn``h]j)}(hj h]hlpfn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKNhj ubj )}(hhh]h)}(h.last valid page frame number to put the objecth]h.last valid page frame number to put the object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKNhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKNhjZ ubj)}(hJ``mem_type`` One of TTM_PL_* where the resource should be allocated from. h](j)}(h ``mem_type``h]j)}(hj h]hmem_type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKOhj ubj )}(hhh]h)}(h)}(hstruct ttm_placementh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKVubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKVubjg)}(h ttm_placementh]jm)}(hjh]h ttm_placement}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKVubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKVhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKVubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhj hj hNubj)}(h**Definition**:: struct ttm_placement { unsigned num_placement; const struct ttm_place *placement; }; **Members** ``num_placement`` number of preferred placements ``placement`` preferred placementsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhK^hjubjT)}(h]struct ttm_placement { unsigned num_placement; const struct ttm_place *placement; };h]h]struct ttm_placement { unsigned num_placement; const struct ttm_place *placement; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhK`hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKehjubj)}(hhh](j)}(h1``num_placement`` number of preferred placements h](j)}(h``num_placement``h]j)}(hj/h]h num_placement}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhK^hj)ubj )}(hhh]h)}(hnumber of preferred placementsh]hnumber of preferred placements}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhK^hjEubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhK^hj&ubj)}(h"``placement`` preferred placementsh](j)}(h ``placement``h]j)}(hjhh]h placement}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhK^hjbubj )}(hhh]h)}(hpreferred placementsh]hpreferred placements}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhK_hj~ubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhj}hK^hj&ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhj hNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhKbhj hhubh)}(h=Structure indicating the placement you request for an object.h]h=Structure indicating the placement you request for an object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:49: ./include/drm/ttm/ttm_placement.hhK`hj hhubeh}(h] ttm-resource-placement-referenceah ]h"] ttm resource placement referenceah$]h&]uh1hhhhhhhhK/ubh)}(hhh](h)}(hTTM resource object referenceh]hTTM resource object reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK5ubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_lru_item_type (C enum)c.ttm_lru_item_typehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(httm_lru_item_typeh]j>)}(henum ttm_lru_item_typeh](jD)}(hjGh]henum}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(httm_lru_item_typeh]jm)}(hjh]httm_lru_item_type}(hj"hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h!enumerate ttm_lru_item subclassesh]h!enumerate ttm_lru_item subclasses}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhK6hjAhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jenumeh"]h$]h&]jjjj\jj\jjjuh1j2hhhjhNhNubj)}(hl**Constants** ``TTM_LRU_RESOURCE`` The resource subclass ``TTM_LRU_HITCH`` The iterator hitch subclassh](h)}(h **Constants**h]j)}(hjfh]h Constants}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhK:hj`ubj)}(hhh](j)}(h+``TTM_LRU_RESOURCE`` The resource subclass h](j)}(h``TTM_LRU_RESOURCE``h]j)}(hjh]hTTM_LRU_RESOURCE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhK=hjubj )}(hhh]h)}(hThe resource subclassh]hThe resource subclass}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK=hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK=hj|ubj)}(h-``TTM_LRU_HITCH`` The iterator hitch subclassh](j)}(h``TTM_LRU_HITCH``h]j)}(hjh]h TTM_LRU_HITCH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhK?hjubj )}(hhh]h)}(hThe iterator hitch subclassh]hThe iterator hitch subclass}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhK@hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK?hj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_lru_item (C struct)c.ttm_lru_itemhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h ttm_lru_itemh]j>)}(hstruct ttm_lru_itemh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKFubjV)}(h h]h }(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj%hKFubjg)}(h ttm_lru_itemh]jm)}(hjh]h ttm_lru_item}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj%hKFubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj%hKFubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj%hKFhj hhubj)}(hhh]h)}(h The TTM lru list node base classh]h The TTM lru list node base class}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhK@hjWhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hKFubeh}(h]h ](jstructeh"]h$]h&]jjjjrjjrjjjuh1j2hhhjhNhNubj)}(h**Definition**:: struct ttm_lru_item { struct list_head link; enum ttm_lru_item_type type; }; **Members** ``link`` The list link ``type`` The subclass typeh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh:}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKDhjvubjT)}(hTstruct ttm_lru_item { struct list_head link; enum ttm_lru_item_type type; };h]hTstruct ttm_lru_item { struct list_head link; enum ttm_lru_item_type type; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKFhjvubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKKhjvubj)}(hhh](j)}(h``link`` The list link h](j)}(h``link``h]j)}(hjh]hlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKBhjubj )}(hhh]h)}(h The list linkh]h The list link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKBhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjubj)}(h``type`` The subclass typeh](j)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKBhjubj )}(hhh]h)}(hThe subclass typeh]hThe subclass type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKChjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjubeh}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_lru_item_init (C function)c.ttm_lru_item_inithNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hOvoid ttm_lru_item_init (struct ttm_lru_item *item, enum ttm_lru_item_type type)h]j>)}(hNvoid ttm_lru_item_init(struct ttm_lru_item *item, enum ttm_lru_item_type type)h](jc)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjVhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKNubjV)}(h h]h }(hjihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVhhhjhhKNubjg)}(httm_lru_item_inith]jm)}(httm_lru_item_inith]httm_lru_item_init}(hj{hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjVhhhjhhKNubj)}(h8(struct ttm_lru_item *item, enum ttm_lru_item_type type)h](j)}(hstruct ttm_lru_item *itemh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h ttm_lru_itemh]h ttm_lru_item}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj}sbc.ttm_lru_item_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hitemh]hitem}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum ttm_lru_item_type typeh](jD)}(hjGh]henum}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(httm_lru_item_typeh]httm_lru_item_type}(hj'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]jc.ttm_lru_item_initasbuh1hhjubjV)}(h h]h }(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(htypeh]htype}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjVhhhjhhKNubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjRhhhjhhKNubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1j7hjhhKNhjOhhubj)}(hhh]h)}(h initialize a struct ttm_lru_itemh]h initialize a struct ttm_lru_item}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKJhjzhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjhhKNubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(h{**Parameters** ``struct ttm_lru_item *item`` The item to initialize ``enum ttm_lru_item_type type`` The subclass typeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKNhjubj)}(hhh](j)}(h5``struct ttm_lru_item *item`` The item to initialize h](j)}(h``struct ttm_lru_item *item``h]j)}(hjh]hstruct ttm_lru_item *item}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKKhjubj )}(hhh]h)}(hThe item to initializeh]hThe item to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKKhjubj)}(h1``enum ttm_lru_item_type type`` The subclass typeh](j)}(h``enum ttm_lru_item_type type``h]j)}(hjh]henum ttm_lru_item_type type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKMhjubj )}(hhh]h)}(hThe subclass typeh]hThe subclass type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKLhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_resource_manager (C struct)c.ttm_resource_managerhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(httm_resource_managerh]j>)}(hstruct ttm_resource_managerh](jD)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjMhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKQubjV)}(h h]h }(hj_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMhhhj^hKQubjg)}(httm_resource_managerh]jm)}(hjKh]httm_resource_manager}(hjqhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjMhhhj^hKQubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjIhhhj^hKQubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1j7hj^hKQhjFhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjFhhhj^hKQubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct ttm_resource_manager { bool use_type; bool use_tt; struct ttm_device *bdev; uint64_t size; const struct ttm_resource_manager_func *func; spinlock_t move_lock; struct dma_fence *move; struct list_head lru[TTM_MAX_BO_PRIORITY]; uint64_t usage; struct dmem_cgroup_region *cg; }; **Members** ``use_type`` The memory type is enabled. ``use_tt`` If a TT object should be used for the backing store. ``bdev`` ttm device this manager belongs to ``size`` Size of the managed region. ``func`` structure pointer implementing the range manager. See above ``move_lock`` lock for move fence ``move`` The fence of the last pipelined move operation. ``lru`` The lru list for this memory type. ``usage`` How much of the resources are used, protected by the bdev->lru_lock. ``cg`` :c:type:`dmem_cgroup_region` used for memory accounting, if not NULL.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubjT)}(hXBstruct ttm_resource_manager { bool use_type; bool use_tt; struct ttm_device *bdev; uint64_t size; const struct ttm_resource_manager_func *func; spinlock_t move_lock; struct dma_fence *move; struct list_head lru[TTM_MAX_BO_PRIORITY]; uint64_t usage; struct dmem_cgroup_region *cg; };h]hXBstruct ttm_resource_manager { bool use_type; bool use_tt; struct ttm_device *bdev; uint64_t size; const struct ttm_resource_manager_func *func; spinlock_t move_lock; struct dma_fence *move; struct list_head lru[TTM_MAX_BO_PRIORITY]; uint64_t usage; struct dmem_cgroup_region *cg; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj)}(hhh](j)}(h)``use_type`` The memory type is enabled. h](j)}(h ``use_type``h]j)}(hjh]huse_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(hThe memory type is enabled.h]hThe memory type is enabled.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h@``use_tt`` If a TT object should be used for the backing store. h](j)}(h ``use_tt``h]j)}(hj*h]huse_tt}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhj$ubj )}(hhh]h)}(h4If a TT object should be used for the backing store.h]h4If a TT object should be used for the backing store.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj@ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hKhjubj)}(h,``bdev`` ttm device this manager belongs to h](j)}(h``bdev``h]j)}(hjch]hbdev}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhj]ubj )}(hhh]h)}(h"ttm device this manager belongs toh]h"ttm device this manager belongs to}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjyubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjubj)}(h%``size`` Size of the managed region. h](j)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(hSize of the managed region.h]hSize of the managed region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hE``func`` structure pointer implementing the range manager. See above h](j)}(h``func``h]j)}(hjh]hfunc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(h;structure pointer implementing the range manager. See aboveh]h;structure pointer implementing the range manager. See above}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h"``move_lock`` lock for move fence h](j)}(h ``move_lock``h]j)}(hjh]h move_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(hlock for move fenceh]hlock for move fence}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj$ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjubj)}(h9``move`` The fence of the last pipelined move operation. h](j)}(h``move``h]j)}(hjGh]hmove}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjAubj )}(hhh]h)}(h/The fence of the last pipelined move operation.h]h/The fence of the last pipelined move operation.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhjubj)}(h+``lru`` The lru list for this memory type. h](j)}(h``lru``h]j)}(hjh]hlru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjzubj )}(hhh]h)}(h"The lru list for this memory type.h]h"The lru list for this memory type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hO``usage`` How much of the resources are used, protected by the bdev->lru_lock. h](j)}(h ``usage``h]j)}(hjh]husage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(hDHow much of the resources are used, protected by the bdev->lru_lock.h]hDHow much of the resources are used, protected by the bdev->lru_lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hL``cg`` :c:type:`dmem_cgroup_region` used for memory accounting, if not NULL.h](j)}(h``cg``h]j)}(hjh]hcg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(hE:c:type:`dmem_cgroup_region` used for memory accounting, if not NULL.h](h)}(h:c:type:`dmem_cgroup_region`h]j)}(hjh]hdmem_cgroup_region}(hjhhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdoc gpu/drm-mm refdomainjreftypetype refexplicitrefwarnjj)}j]sb reftargetdmem_cgroup_regionuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhj ubh) used for memory accounting, if not NULL.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjhhubh)}(hHThis structure is used to identify and manage memory types for a device.h]hHThis structure is used to identify and manage memory types for a device.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_bus_placement (C struct)c.ttm_bus_placementhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(httm_bus_placementh]j>)}(hstruct ttm_bus_placementh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(httm_bus_placementh]jm)}(hjh]httm_bus_placement}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX/**Definition**:: struct ttm_bus_placement { void *addr; phys_addr_t offset; bool is_iomem; enum ttm_caching caching; }; **Members** ``addr`` mapped virtual address ``offset`` physical addr ``is_iomem`` is this io memory ? ``caching`` See enum ttm_cachingh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubjT)}(h}struct ttm_bus_placement { void *addr; phys_addr_t offset; bool is_iomem; enum ttm_caching caching; };h]h}struct ttm_bus_placement { void *addr; phys_addr_t offset; bool is_iomem; enum ttm_caching caching; };}hj sbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj)}(hhh](j)}(h ``addr`` mapped virtual address h](j)}(h``addr``h]j)}(hj9h]haddr}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhj3ubj )}(hhh]h)}(hmapped virtual addressh]hmapped virtual address}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKhjOubah}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhKhj0ubj)}(h``offset`` physical addr h](j)}(h ``offset``h]j)}(hjrh]hoffset}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjlubj )}(hhh]h)}(h physical addrh]h physical addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjlubeh}(h]h ]h"]h$]h&]uh1jhjhKhj0ubj)}(h!``is_iomem`` is this io memory ? h](j)}(h ``is_iomem``h]j)}(hjh]his_iomem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(his this io memory ?h]his this io memory ?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj0ubj)}(h ``caching`` See enum ttm_cachingh](j)}(h ``caching``h]j)}(hjh]hcaching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(hSee enum ttm_cachingh]hSee enum ttm_caching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj0ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjhhubh)}(h4Structure indicating the bus placement of an object.h]h4Structure indicating the bus placement of an object.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_resource (C struct)c.ttm_resourcehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h ttm_resourceh]j>)}(hstruct ttm_resourceh](jD)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjahhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKubjV)}(h h]h }(hjshhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjahhhjrhKubjg)}(h ttm_resourceh]jm)}(hj_h]h ttm_resource}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjahhhjrhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj]hhhjrhKubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1j7hjrhKhjZhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjZhhhjrhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct ttm_resource { unsigned long start; size_t size; uint32_t mem_type; uint32_t placement; struct ttm_bus_placement bus; struct ttm_buffer_object *bo; struct dmem_cgroup_pool_state *css; struct ttm_lru_item lru; }; **Members** ``start`` Start of the allocation. ``size`` Actual size of resource in bytes. ``mem_type`` Resource type of the allocation. ``placement`` Placement flags. ``bus`` Placement on io bus accessible to the CPU ``bo`` weak reference to the BO, protected by ttm_device::lru_lock ``css`` cgroup state this resource is charged to ``lru`` Least recently used list, see :c:type:`ttm_resource_manager.lru `h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubjT)}(hstruct ttm_resource { unsigned long start; size_t size; uint32_t mem_type; uint32_t placement; struct ttm_bus_placement bus; struct ttm_buffer_object *bo; struct dmem_cgroup_pool_state *css; struct ttm_lru_item lru; };h]hstruct ttm_resource { unsigned long start; size_t size; uint32_t mem_type; uint32_t placement; struct ttm_bus_placement bus; struct ttm_buffer_object *bo; struct dmem_cgroup_pool_state *css; struct ttm_lru_item lru; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjubj)}(hhh](j)}(h#``start`` Start of the allocation. h](j)}(h ``start``h]j)}(hjh]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(hStart of the allocation.h]hStart of the allocation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h+``size`` Actual size of resource in bytes. h](j)}(h``size``h]j)}(hj>h]hsize}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhj8ubj )}(hhh]h)}(h!Actual size of resource in bytes.h]h!Actual size of resource in bytes.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKhjubj)}(h.``mem_type`` Resource type of the allocation. h](j)}(h ``mem_type``h]j)}(hjwh]hmem_type}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjqubj )}(hhh]h)}(h Resource type of the allocation.h]h Resource type of the allocation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``placement`` Placement flags. h](j)}(h ``placement``h]j)}(hjh]h placement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(hPlacement flags.h]hPlacement flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h2``bus`` Placement on io bus accessible to the CPU h](j)}(h``bus``h]j)}(hjh]hbus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(h)Placement on io bus accessible to the CPUh]h)Placement on io bus accessible to the CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hC``bo`` weak reference to the BO, protected by ttm_device::lru_lock h](j)}(h``bo``h]j)}(hj"h]hbo}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjubj )}(hhh]h)}(h;weak reference to the BO, protected by ttm_device::lru_lockh]h;weak reference to the BO, protected by ttm_device::lru_lock}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hKhj8ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj7hKhjubj)}(h1``css`` cgroup state this resource is charged to h](j)}(h``css``h]j)}(hj[h]hcss}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjUubj )}(hhh]h)}(h(cgroup state this resource is charged toh]h(cgroup state this resource is charged to}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphKhjqubah}(h]h ]h"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]uh1jhjphKhjubj)}(h_``lru`` Least recently used list, see :c:type:`ttm_resource_manager.lru `h](j)}(h``lru``h]j)}(hjh]hlru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjubj )}(hhh]h)}(hWLeast recently used list, see :c:type:`ttm_resource_manager.lru `h](hLeast recently used list, see }(hjhhhNhNubh)}(h9:c:type:`ttm_resource_manager.lru `h]j)}(hjh]httm_resource_manager.lru}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3ttm_resource_manageruh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM hjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM hjhhubh)}(hOStructure indicating the placement and space resources used by a buffer object.h]hOStructure indicating the placement and space resources used by a buffer object.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhKhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. ttm_lru_item_to_res (C function)c.ttm_lru_item_to_reshNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hEstruct ttm_resource * ttm_lru_item_to_res (struct ttm_lru_item *item)h]j>)}(hCstruct ttm_resource *ttm_lru_item_to_res(struct ttm_lru_item *item)h](jD)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj0hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMubjV)}(h h]h }(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj0hhhjAhMubh)}(hhh]jm)}(h ttm_resourceh]h ttm_resource}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]j)}jttm_lru_item_to_ressbc.ttm_lru_item_to_resasbuh1hhj0hhhjAhMubjV)}(h h]h }(hjthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj0hhhjAhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhjAhMubjg)}(httm_lru_item_to_resh]jm)}(hjqh]httm_lru_item_to_res}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj0hhhjAhMubj)}(h(struct ttm_lru_item *item)h]j)}(hstruct ttm_lru_item *itemh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h ttm_lru_itemh]h ttm_lru_item}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]joc.ttm_lru_item_to_resasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hitemh]hitem}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj0hhhjAhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj,hhhjAhMubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1j7hjAhMhj)hhubj)}(hhh]h)}(h7Downcast a struct ttm_lru_item to a struct ttm_resourceh]h7Downcast a struct ttm_lru_item to a struct ttm_resource}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj,hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjAhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct ttm_lru_item *item`` The struct ttm_lru_item to downcast **Return** Pointer to the embedding struct ttm_resourceh](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjKubj)}(hhh]j)}(hB``struct ttm_lru_item *item`` The struct ttm_lru_item to downcast h](j)}(h``struct ttm_lru_item *item``h]j)}(hjph]hstruct ttm_lru_item *item}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjjubj )}(hhh]h)}(h#The struct ttm_lru_item to downcasth]h#The struct ttm_lru_item to downcast}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjKubh)}(h,Pointer to the embedding struct ttm_resourceh]h,Pointer to the embedding struct ttm_resource}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. ttm_lru_bulk_move_pos (C struct)c.ttm_lru_bulk_move_poshNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(httm_lru_bulk_move_posh]j>)}(hstruct ttm_lru_bulk_move_posh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(httm_lru_bulk_move_posh]jm)}(hjh]httm_lru_bulk_move_pos}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjj;jj;jjjuh1j2hhhjhNhNubj)}(h**Definition**:: struct ttm_lru_bulk_move_pos { struct ttm_resource *first; struct ttm_resource *last; }; **Members** ``first`` first res in the bulk move range ``last`` last res in the bulk move rangeh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh:}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj?ubjT)}(h`struct ttm_lru_bulk_move_pos { struct ttm_resource *first; struct ttm_resource *last; };h]h`struct ttm_lru_bulk_move_pos { struct ttm_resource *first; struct ttm_resource *last; };}hj`sbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj?ubh)}(h **Members**h]j)}(hjqh]hMembers}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM$hj?ubj)}(hhh](j)}(h+``first`` first res in the bulk move range h](j)}(h ``first``h]j)}(hjh]hfirst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjubj )}(hhh]h)}(h first res in the bulk move rangeh]h first res in the bulk move range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``last`` last res in the bulk move rangeh](j)}(h``last``h]j)}(hjh]hlast}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjubj )}(hhh]h)}(hlast res in the bulk move rangeh]hlast res in the bulk move range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM!hjhhubh)}(h'Range of resources for a lru bulk move.h]h'Range of resources for a lru bulk move.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_lru_bulk_move (C struct)c.ttm_lru_bulk_movehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(httm_lru_bulk_moveh]j>)}(hstruct ttm_lru_bulk_moveh](jD)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjFhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM$ubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjFhhhjWhM$ubjg)}(httm_lru_bulk_moveh]jm)}(hjDh]httm_lru_bulk_move}(hjjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjFhhhjWhM$ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjBhhhjWhM$ubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1j7hjWhM$hj?hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj?hhhjWhM$ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct ttm_lru_bulk_move { struct ttm_lru_bulk_move_pos pos[TTM_NUM_MEM_TYPES][TTM_MAX_BO_PRIORITY]; struct list_head cursor_list; }; **Members** ``pos`` first/last lru entry for resources in the each domain/priority ``cursor_list`` The list of cursors currently traversing any of the sublists of **pos**. Protected by the ttm device's lru_lock.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM*hjubjT)}(hstruct ttm_lru_bulk_move { struct ttm_lru_bulk_move_pos pos[TTM_NUM_MEM_TYPES][TTM_MAX_BO_PRIORITY]; struct list_head cursor_list; };h]hstruct ttm_lru_bulk_move { struct ttm_lru_bulk_move_pos pos[TTM_NUM_MEM_TYPES][TTM_MAX_BO_PRIORITY]; struct list_head cursor_list; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM,hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM1hjubj)}(hhh](j)}(hG``pos`` first/last lru entry for resources in the each domain/priority h](j)}(h``pos``h]j)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM)hjubj )}(hhh]h)}(h>first/last lru entry for resources in the each domain/priorityh]h>first/last lru entry for resources in the each domain/priority}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM)hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h``cursor_list`` The list of cursors currently traversing any of the sublists of **pos**. Protected by the ttm device's lru_lock.h](j)}(h``cursor_list``h]j)}(hj# h]h cursor_list}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj! ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM*hj ubj )}(hhh]h)}(hpThe list of cursors currently traversing any of the sublists of **pos**. Protected by the ttm device's lru_lock.h](h@The list of cursors currently traversing any of the sublists of }(hj< hhhNhNubj)}(h**pos**h]hpos}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj< ubh+. Protected by the ttm device’s lru_lock.}(hj< hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8 hM*hj9 ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj8 hM*hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjw h]h Description}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM.hjhhubh)}(hX$Container for the current bulk move state. Should be used with ttm_lru_bulk_move_init() and ttm_bo_set_bulk_move(). All BOs in a bulk_move structure need to share the same reservation object to ensure that the bulk as a whole is locked for eviction even if only one BO of the bulk is evicted.h]hX$Container for the current bulk move state. Should be used with ttm_lru_bulk_move_init() and ttm_bo_set_bulk_move(). All BOs in a bulk_move structure need to share the same reservation object to ensure that the bulk as a whole is locked for eviction even if only one BO of the bulk is evicted.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM,hjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_resource_cursor (C struct)c.ttm_resource_cursorhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(httm_resource_cursorh]j>)}(hstruct ttm_resource_cursorh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM5ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhj hM5ubjg)}(httm_resource_cursorh]jm)}(hj h]httm_resource_cursor}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj hhhj hM5ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj hM5ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj hM5hj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hM5ubeh}(h]h ](jstructeh"]h$]h&]jjjj!jj!jjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct ttm_resource_cursor { struct ttm_resource_manager *man; struct ttm_lru_item hitch; struct list_head bulk_link; struct ttm_lru_bulk_move *bulk; unsigned int mem_type; unsigned int priority; }; **Members** ``man`` The resource manager currently being iterated over ``hitch`` A hitch list node inserted before the next resource to iterate over. ``bulk_link`` A list link for the list of cursors traversing the bulk sublist of **bulk**. Protected by the ttm device's lru_lock. ``bulk`` Pointer to struct ttm_lru_bulk_move whose subrange **hitch** is inserted to. NULL if none. Never dereference this pointer since the struct ttm_lru_bulk_move object pointed to might have been freed. The pointer is only for comparison. ``mem_type`` The memory type of the LRU list being traversed. This field is valid iff **bulk** != NULL. ``priority`` the current priorityh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM;hj!ubjT)}(hstruct ttm_resource_cursor { struct ttm_resource_manager *man; struct ttm_lru_item hitch; struct list_head bulk_link; struct ttm_lru_bulk_move *bulk; unsigned int mem_type; unsigned int priority; };h]hstruct ttm_resource_cursor { struct ttm_resource_manager *man; struct ttm_lru_item hitch; struct list_head bulk_link; struct ttm_lru_bulk_move *bulk; unsigned int mem_type; unsigned int priority; };}hj%!sbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM=hj!ubh)}(h **Members**h]j)}(hj6!h]hMembers}(hj8!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4!ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMFhj!ubj)}(hhh](j)}(h;``man`` The resource manager currently being iterated over h](j)}(h``man``h]j)}(hjU!h]hman}(hjW!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS!ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM:hjO!ubj )}(hhh]h)}(h2The resource manager currently being iterated overh]h2The resource manager currently being iterated over}(hjn!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj!hM:hjk!ubah}(h]h ]h"]h$]h&]uh1j hjO!ubeh}(h]h ]h"]h$]h&]uh1jhjj!hM:hjL!ubj)}(hO``hitch`` A hitch list node inserted before the next resource to iterate over. h](j)}(h ``hitch``h]j)}(hj!h]hhitch}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM<hj!ubj )}(hhh]h)}(hDA hitch list node inserted before the next resource to iterate over.h]hDA hitch list node inserted before the next resource to iterate over.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM;hj!ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM<hjL!ubj)}(h``bulk_link`` A list link for the list of cursors traversing the bulk sublist of **bulk**. Protected by the ttm device's lru_lock. h](j)}(h ``bulk_link``h]j)}(hj!h]h bulk_link}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM>hj!ubj )}(hhh]h)}(htA list link for the list of cursors traversing the bulk sublist of **bulk**. Protected by the ttm device's lru_lock.h](hCA list link for the list of cursors traversing the bulk sublist of }(hj!hhhNhNubj)}(h**bulk**h]hbulk}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh+. Protected by the ttm device’s lru_lock.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM=hj!ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM>hjL!ubj)}(h``bulk`` Pointer to struct ttm_lru_bulk_move whose subrange **hitch** is inserted to. NULL if none. Never dereference this pointer since the struct ttm_lru_bulk_move object pointed to might have been freed. The pointer is only for comparison. h](j)}(h``bulk``h]j)}(hj"h]hbulk}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMBhj"ubj )}(hhh]h)}(hPointer to struct ttm_lru_bulk_move whose subrange **hitch** is inserted to. NULL if none. Never dereference this pointer since the struct ttm_lru_bulk_move object pointed to might have been freed. The pointer is only for comparison.h](h3Pointer to struct ttm_lru_bulk_move whose subrange }(hj-"hhhNhNubj)}(h **hitch**h]hhitch}(hj5"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-"ubh is inserted to. NULL if none. Never dereference this pointer since the struct ttm_lru_bulk_move object pointed to might have been freed. The pointer is only for comparison.}(hj-"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM?hj*"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj)"hMBhjL!ubj)}(hh``mem_type`` The memory type of the LRU list being traversed. This field is valid iff **bulk** != NULL. h](j)}(h ``mem_type``h]j)}(hj`"h]hmem_type}(hjb"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^"ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMDhjZ"ubj )}(hhh]h)}(hZThe memory type of the LRU list being traversed. This field is valid iff **bulk** != NULL.h](hIThe memory type of the LRU list being traversed. This field is valid iff }(hjy"hhhNhNubj)}(h**bulk**h]hbulk}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy"ubh != NULL.}(hjy"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMChjv"ubah}(h]h ]h"]h$]h&]uh1j hjZ"ubeh}(h]h ]h"]h$]h&]uh1jhju"hMDhjL!ubj)}(h!``priority`` the current priorityh](j)}(h ``priority``h]j)}(hj"h]hpriority}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMDhj"ubj )}(hhh]h)}(hthe current priorityh]hthe current priority}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMEhj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMDhjL!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMHhjhhubh)}(h2Cursor to iterate over the resources in a manager.h]h2Cursor to iterate over the resources in a manager.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMFhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_kmap_iter_iomap (C struct)c.ttm_kmap_iter_iomaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(httm_kmap_iter_iomaph]j>)}(hstruct ttm_kmap_iter_iomaph](jD)}(hjh]hstruct}(hj-#hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj)#hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMKubjV)}(h h]h }(hj;#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj)#hhhj:#hMKubjg)}(httm_kmap_iter_iomaph]jm)}(hj'#h]httm_kmap_iter_iomap}(hjM#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjI#ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj)#hhhj:#hMKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj%#hhhj:#hMKubah}(h]j #ah ](jjeh"]h$]h&]jj)jhuh1j7hj:#hMKhj"#hhubj)}(hhh]h)}(hTSpecialization for a struct io_mapping + struct sg_table backed struct ttm_resource.h]hTSpecialization for a struct io_mapping + struct sg_table backed struct ttm_resource.}(hjo#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMWhjl#hhubah}(h]h ]h"]h$]h&]uh1jhj"#hhhj:#hMKubeh}(h]h ](jstructeh"]h$]h&]jjjj#jj#jjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct ttm_kmap_iter_iomap { struct ttm_kmap_iter base; struct io_mapping *iomap; struct sg_table *st; resource_size_t start; struct { struct scatterlist *sg; pgoff_t i; pgoff_t end; pgoff_t offs; } cache; }; **Members** ``base`` Embedded struct ttm_kmap_iter providing the usage interface. ``iomap`` struct io_mapping representing the underlying linear io_memory. ``st`` sg_table into **iomap**, representing the memory of the struct ttm_resource. ``start`` Offset that needs to be subtracted from **st** to make sg_dma_address(st->sgl) - **start** == 0 for **iomap** start. ``cache`` Scatterlist traversal cache for fast lookups. ``cache.sg`` Pointer to the currently cached scatterlist segment. ``cache.i`` First index of **sg**. PAGE_SIZE granularity. ``cache.end`` Last index + 1 of **sg**. PAGE_SIZE granularity. ``cache.offs`` First offset into **iomap** of **sg**. PAGE_SIZE granularity.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh:}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM[hj#ubjT)}(hXstruct ttm_kmap_iter_iomap { struct ttm_kmap_iter base; struct io_mapping *iomap; struct sg_table *st; resource_size_t start; struct { struct scatterlist *sg; pgoff_t i; pgoff_t end; pgoff_t offs; } cache; };h]hXstruct ttm_kmap_iter_iomap { struct ttm_kmap_iter base; struct io_mapping *iomap; struct sg_table *st; resource_size_t start; struct { struct scatterlist *sg; pgoff_t i; pgoff_t end; pgoff_t offs; } cache; };}hj#sbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM]hj#ubh)}(h **Members**h]j)}(hj#h]hMembers}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMjhj#ubj)}(hhh](j)}(hF``base`` Embedded struct ttm_kmap_iter providing the usage interface. h](j)}(h``base``h]j)}(hj#h]hbase}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMZhj#ubj )}(hhh]h)}(hsgl) - **start** == 0 for **iomap** start. h](j)}(h ``start``h]j)}(hj$h]hstart}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM^hj$ubj )}(hhh]h)}(htOffset that needs to be subtracted from **st** to make sg_dma_address(st->sgl) - **start** == 0 for **iomap** start.h](h(Offset that needs to be subtracted from }(hj$hhhNhNubj)}(h**st**h]hst}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh# to make sg_dma_address(st->sgl) - }(hj$hhhNhNubj)}(h **start**h]hstart}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh == 0 for }(hj$hhhNhNubj)}(h **iomap**h]hiomap}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh start.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM]hj$ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM^hj#ubj)}(h8``cache`` Scatterlist traversal cache for fast lookups. h](j)}(h ``cache``h]j)}(hj %h]hcache}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM_hj%ubj )}(hhh]h)}(h-Scatterlist traversal cache for fast lookups.h]h-Scatterlist traversal cache for fast lookups.}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM_hj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM_hj#ubj)}(hB``cache.sg`` Pointer to the currently cached scatterlist segment. h](j)}(h ``cache.sg``h]j)}(hjB%h]hcache.sg}(hjD%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM`hj<%ubj )}(hhh]h)}(h4Pointer to the currently cached scatterlist segment.h]h4Pointer to the currently cached scatterlist segment.}(hj[%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW%hM`hjX%ubah}(h]h ]h"]h$]h&]uh1j hj<%ubeh}(h]h ]h"]h$]h&]uh1jhjW%hM`hj#ubj)}(h:``cache.i`` First index of **sg**. PAGE_SIZE granularity. h](j)}(h ``cache.i``h]j)}(hj{%h]hcache.i}(hj}%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMahju%ubj )}(hhh]h)}(h-First index of **sg**. PAGE_SIZE granularity.h](hFirst index of }(hj%hhhNhNubj)}(h**sg**h]hsg}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh. PAGE_SIZE granularity.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hMahj%ubah}(h]h ]h"]h$]h&]uh1j hju%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMahj#ubj)}(h?``cache.end`` Last index + 1 of **sg**. PAGE_SIZE granularity. h](j)}(h ``cache.end``h]j)}(hj%h]h cache.end}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMbhj%ubj )}(hhh]h)}(h0Last index + 1 of **sg**. PAGE_SIZE granularity.h](hLast index + 1 of }(hj%hhhNhNubj)}(h**sg**h]hsg}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh. PAGE_SIZE granularity.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hMbhj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMbhj#ubj)}(hL``cache.offs`` First offset into **iomap** of **sg**. PAGE_SIZE granularity.h](j)}(h``cache.offs``h]j)}(hj&h]h cache.offs}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMbhj &ubj )}(hhh]h)}(h=First offset into **iomap** of **sg**. PAGE_SIZE granularity.h](hFirst offset into }(hj*&hhhNhNubj)}(h **iomap**h]hiomap}(hj2&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*&ubh of }(hj*&hhhNhNubj)}(h**sg**h]hsg}(hjD&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*&ubh. PAGE_SIZE granularity.}(hj*&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMchj'&ubah}(h]h ]h"]h$]h&]uh1j hj &ubeh}(h]h ]h"]h$]h&]uh1jhj&&hMbhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."ttm_kmap_iter_linear_io (C struct)c.ttm_kmap_iter_linear_iohNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(httm_kmap_iter_linear_ioh]j>)}(hstruct ttm_kmap_iter_linear_ioh](jD)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj&hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMiubjV)}(h h]h }(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&hhhj&hMiubjg)}(httm_kmap_iter_linear_ioh]jm)}(hj&h]httm_kmap_iter_linear_io}(hj&hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}( h]h ](jjeh"]h$]h&]jjuh1jfhj&hhhj&hMiubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj&hhhj&hMiubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1j7hj&hMihj&hhubj)}(hhh]h)}(h%Iterator specialization for linear ioh]h%Iterator specialization for linear io}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMrhj&hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMiubeh}(h]h ](jstructeh"]h$]h&]jjjj&jj&jjjuh1j2hhhjhNhNubj)}(hX'**Definition**:: struct ttm_kmap_iter_linear_io { struct ttm_kmap_iter base; struct iosys_map dmap; bool needs_unmap; }; **Members** ``base`` The base iterator ``dmap`` Points to the starting address of the region ``needs_unmap`` Whether we need to unmap on finih](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh:}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMvhj&ubjT)}(hsstruct ttm_kmap_iter_linear_io { struct ttm_kmap_iter base; struct iosys_map dmap; bool needs_unmap; };h]hsstruct ttm_kmap_iter_linear_io { struct ttm_kmap_iter base; struct iosys_map dmap; bool needs_unmap; };}hj'sbah}(h]h ]h"]h$]h&]jjuh1jShY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMxhj&ubh)}(h **Members**h]j)}(hj'h]hMembers}(hj!'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhM~hj&ubj)}(hhh](j)}(h``base`` The base iterator h](j)}(h``base``h]j)}(hj>'h]hbase}(hj@'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<'ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMthj8'ubj )}(hhh]h)}(hThe base iteratorh]hThe base iterator}(hjW'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS'hMthjT'ubah}(h]h ]h"]h$]h&]uh1j hj8'ubeh}(h]h ]h"]h$]h&]uh1jhjS'hMthj5'ubj)}(h6``dmap`` Points to the starting address of the region h](j)}(h``dmap``h]j)}(hjw'h]hdmap}(hjy'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju'ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMuhjq'ubj )}(hhh]h)}(h,Points to the starting address of the regionh]h,Points to the starting address of the region}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMuhj'ubah}(h]h ]h"]h$]h&]uh1j hjq'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMuhj5'ubj)}(h0``needs_unmap`` Whether we need to unmap on finih](j)}(h``needs_unmap``h]j)}(hj'h]h needs_unmap}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMuhj'ubj )}(hhh]h)}(h Whether we need to unmap on finih]h Whether we need to unmap on fini}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMvhj'ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMuhj5'ubeh}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*ttm_resource_manager_set_used (C function)c.ttm_resource_manager_set_usedhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hPvoid ttm_resource_manager_set_used (struct ttm_resource_manager *man, bool used)h]j>)}(hOvoid ttm_resource_manager_set_used(struct ttm_resource_manager *man, bool used)h](jc)}(hvoidh]hvoid}(hj (hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj(hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMubjV)}(h h]h }(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(hhhj(hMubjg)}(httm_resource_manager_set_usedh]jm)}(httm_resource_manager_set_usedh]httm_resource_manager_set_used}(hj+(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'(ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj(hhhj(hMubj)}(h-(struct ttm_resource_manager *man, bool used)h](j)}(h struct ttm_resource_manager *manh](jD)}(hjh]hstruct}(hjG(hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjC(ubjV)}(h h]h }(hjT(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjC(ubh)}(hhh]jm)}(httm_resource_managerh]httm_resource_manager}(hje(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjb(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjg(modnameN classnameNjj)}j]j)}jj-(sbc.ttm_resource_manager_set_usedasbuh1hhjC(ubjV)}(h h]h }(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjC(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC(ubjm)}(hmanh]hman}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjC(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?(ubj)}(h bool usedh](jc)}(hj h]hbool}(hj(hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj(ubjV)}(h h]h }(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(ubjm)}(husedh]hused}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?(ubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj(hhhj(hMubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1j7hj(hMhj'hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj'hhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct ttm_resource_manager *man`` A memory manager object. ``bool used`` usage state to set. **Description** Set the manager in use flag. If disabled the manager is no longer used for object placement.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj )ubj)}(hhh](j)}(h>``struct ttm_resource_manager *man`` A memory manager object. h](j)}(h$``struct ttm_resource_manager *man``h]j)}(hj0)h]h struct ttm_resource_manager *man}(hj2)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.)ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj*)ubj )}(hhh]h)}(hA memory manager object.h]hA memory manager object.}(hjI)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE)hMhjF)ubah}(h]h ]h"]h$]h&]uh1j hj*)ubeh}(h]h ]h"]h$]h&]uh1jhjE)hMhj')ubj)}(h"``bool used`` usage state to set. h](j)}(h ``bool used``h]j)}(hji)h]h bool used}(hjk)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg)ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjc)ubj )}(hhh]h)}(husage state to set.h]husage state to set.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~)hMhj)ubah}(h]h ]h"]h$]h&]uh1j hjc)ubeh}(h]h ]h"]h$]h&]uh1jhj~)hMhj')ubeh}(h]h ]h"]h$]h&]uh1jhj )ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj )ubh)}(h\Set the manager in use flag. If disabled the manager is no longer used for object placement.h]h\Set the manager in use flag. If disabled the manager is no longer used for object placement.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj )ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&ttm_resource_manager_used (C function)c.ttm_resource_manager_usedhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hAbool ttm_resource_manager_used (struct ttm_resource_manager *man)h]j>)}(h@bool ttm_resource_manager_used(struct ttm_resource_manager *man)h](jc)}(hj h]hbool}(hj)hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj)hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMubjV)}(h h]h }(hj)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj)hhhj)hMubjg)}(httm_resource_manager_usedh]jm)}(httm_resource_manager_usedh]httm_resource_manager_used}(hj *hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj)hhhj)hMubj)}(h"(struct ttm_resource_manager *man)h]j)}(h struct ttm_resource_manager *manh](jD)}(hjh]hstruct}(hj%*hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj!*ubjV)}(h h]h }(hj2*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!*ubh)}(hhh]jm)}(httm_resource_managerh]httm_resource_manager}(hjC*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE*modnameN classnameNjj)}j]j)}jj *sbc.ttm_resource_manager_usedasbuh1hhj!*ubjV)}(h h]h }(hjc*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!*ubj)}(hjh]h*}(hjq*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!*ubjm)}(hmanh]hman}(hj~*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubah}(h]h ]h"]h$]h&]jjuh1jhj)hhhj)hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj)hhhj)hMubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1j7hj)hMhj)hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj)hhhj)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct ttm_resource_manager *man`` Manager to get used state for **Description** Get the in use flag for a manager. **Return** true is used, false if not.h](h)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj*ubj)}(hhh]j)}(hC``struct ttm_resource_manager *man`` Manager to get used state for h](j)}(h$``struct ttm_resource_manager *man``h]j)}(hj*h]h struct ttm_resource_manager *man}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj*ubj )}(hhh]h)}(hManager to get used state forh]hManager to get used state for}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj*ubh)}(h"Get the in use flag for a manager.h]h"Get the in use flag for a manager.}(hj++hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj*ubh)}(h **Return**h]j)}(hj<+h]hReturn}(hj>+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:+ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj*ubh)}(htrue is used, false if not.h]htrue is used, false if not.}(hjR+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)ttm_resource_manager_cleanup (C function)c.ttm_resource_manager_cleanuphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hDvoid ttm_resource_manager_cleanup (struct ttm_resource_manager *man)h]j>)}(hCvoid ttm_resource_manager_cleanup(struct ttm_resource_manager *man)h](jc)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj}+hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}+hhhj+hMubjg)}(httm_resource_manager_cleanuph]jm)}(httm_resource_manager_cleanuph]httm_resource_manager_cleanup}(hj+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj}+hhhj+hMubj)}(h"(struct ttm_resource_manager *man)h]j)}(h struct ttm_resource_manager *manh](jD)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj+ubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+ubh)}(hhh]jm)}(httm_resource_managerh]httm_resource_manager}(hj+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j)}jj+sbc.ttm_resource_manager_cleanupasbuh1hhj+ubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+ubj)}(hjh]h*}(hj ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjm)}(hmanh]hman}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubah}(h]h ]h"]h$]h&]jjuh1jhj}+hhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjy+hhhj+hMubah}(h]jt+ah ](jjeh"]h$]h&]jj)jhuh1j7hj+hMhjv+hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjv+hhhj+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJ,jjJ,jjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct ttm_resource_manager *man`` A memory manager object. **Description** Cleanup the move fences from the memory manager object.h](h)}(h**Parameters**h]j)}(hjT,h]h Parameters}(hjV,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR,ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjN,ubj)}(hhh]j)}(h>``struct ttm_resource_manager *man`` A memory manager object. h](j)}(h$``struct ttm_resource_manager *man``h]j)}(hjs,h]h struct ttm_resource_manager *man}(hju,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq,ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjm,ubj )}(hhh]h)}(hA memory manager object.h]hA memory manager object.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1j hjm,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjj,ubah}(h]h ]h"]h$]h&]uh1jhjN,ubh)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjN,ubh)}(h7Cleanup the move fences from the memory manager object.h]h7Cleanup the move fences from the memory manager object.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjN,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.+ttm_resource_manager_for_each_res (C macro)#c.ttm_resource_manager_for_each_reshNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h!ttm_resource_manager_for_each_resh]j>)}(h!ttm_resource_manager_for_each_resh]jg)}(h!ttm_resource_manager_for_each_resh]jm)}(hj,h]h!ttm_resource_manager_for_each_res}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj,hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj,hhhj -hMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1j7hj -hMhj,hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj,hhhj -hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj#-jj#-jjjuh1j2hhhjhNhNubh)}(h3``ttm_resource_manager_for_each_res (cursor, res)``h]j)}(hj)-h]h/ttm_resource_manager_for_each_res (cursor, res)}(hj+-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'-ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjhhubh block_quote)}(hiterate over all resources h]h)}(hiterate over all resourcesh]hiterate over all resources}(hjE-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjA-ubah}(h]h ]h"]h$]h&]uh1j?-hjS-hMhjhhubj)}(h**Parameters** ``cursor`` struct ttm_resource_cursor for the current position ``res`` the current resource **Description** Iterate over all the evictable resources in a resource manager.h](h)}(h**Parameters**h]j)}(hj`-h]h Parameters}(hjb-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^-ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjZ-ubj)}(hhh](j)}(h?``cursor`` struct ttm_resource_cursor for the current position h](j)}(h ``cursor``h]j)}(hj-h]hcursor}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}-ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjy-ubj )}(hhh]h)}(h3struct ttm_resource_cursor for the current positionh]h3struct ttm_resource_cursor for the current position}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hjy-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjv-ubj)}(h``res`` the current resource h](j)}(h``res``h]j)}(hj-h]hres}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhj-ubj )}(hhh]h)}(hthe current resourceh]hthe current resource}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjv-ubeh}(h]h ]h"]h$]h&]uh1jhjZ-ubh)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjZ-ubh)}(h?Iterate over all the evictable resources in a resource manager.h]h?Iterate over all the evictable resources in a resource manager.}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:55: ./include/drm/ttm/ttm_resource.hhMhjZ-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#ttm_lru_bulk_move_init (C function)c.ttm_lru_bulk_move_inithNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h)}(h;void ttm_lru_bulk_move_init(struct ttm_lru_bulk_move *bulk)h](jc)}(hvoidh]hvoid}(hj8.hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj4.hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chK{ubjV)}(h h]h }(hjG.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj4.hhhjF.hK{ubjg)}(httm_lru_bulk_move_inith]jm)}(httm_lru_bulk_move_inith]httm_lru_bulk_move_init}(hjY.hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjU.ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj4.hhhjF.hK{ubj)}(h (struct ttm_lru_bulk_move *bulk)h]j)}(hstruct ttm_lru_bulk_move *bulkh](jD)}(hjh]hstruct}(hju.hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjq.ubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjq.ubh)}(hhh]jm)}(httm_lru_bulk_moveh]httm_lru_bulk_move}(hj.hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j)}jj[.sbc.ttm_lru_bulk_move_initasbuh1hhjq.ubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjq.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq.ubjm)}(hbulkh]hbulk}(hj.hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjq.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjm.ubah}(h]h ]h"]h$]h&]jjuh1jhj4.hhhjF.hK{ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj0.hhhjF.hK{ubah}(h]j+.ah ](jjeh"]h$]h&]jj)jhuh1j7hjF.hK{hj-.hhubj)}(hhh]h)}(h initialize a bulk move structureh]h initialize a bulk move structure}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKvhj.hhubah}(h]h ]h"]h$]h&]uh1jhj-.hhhjF.hK{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct ttm_lru_bulk_move *bulk`` the structure to init **Description** For now just memset the structure to zero.h](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKzhj/ubj)}(hhh]j)}(h9``struct ttm_lru_bulk_move *bulk`` the structure to init h](j)}(h"``struct ttm_lru_bulk_move *bulk``h]j)}(hj9/h]hstruct ttm_lru_bulk_move *bulk}(hj;/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7/ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKwhj3/ubj )}(hhh]h)}(hthe structure to inith]hthe structure to init}(hjR/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN/hKwhjO/ubah}(h]h ]h"]h$]h&]uh1j hj3/ubeh}(h]h ]h"]h$]h&]uh1jhjN/hKwhj0/ubah}(h]h ]h"]h$]h&]uh1jhj/ubh)}(h**Description**h]j)}(hjt/h]h Description}(hjv/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr/ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKyhj/ubh)}(h*For now just memset the structure to zero.h]h*For now just memset the structure to zero.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKyhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#ttm_lru_bulk_move_fini (C function)c.ttm_lru_bulk_move_finihNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hUvoid ttm_lru_bulk_move_fini (struct ttm_device *bdev, struct ttm_lru_bulk_move *bulk)h]j>)}(hTvoid ttm_lru_bulk_move_fini(struct ttm_device *bdev, struct ttm_lru_bulk_move *bulk)h](jc)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj/hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/hhhj/hKubjg)}(httm_lru_bulk_move_finih]jm)}(httm_lru_bulk_move_finih]httm_lru_bulk_move_fini}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj/hhhj/hKubj)}(h9(struct ttm_device *bdev, struct ttm_lru_bulk_move *bulk)h](j)}(hstruct ttm_device *bdevh](jD)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj/ubjV)}(h h]h }(hj0hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/ubh)}(hhh]jm)}(h ttm_deviceh]h ttm_device}(hj0hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j)}jj/sbc.ttm_lru_bulk_move_finiasbuh1hhj/ubjV)}(h h]h }(hj40hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/ubj)}(hjh]h*}(hjB0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjm)}(hbdevh]hbdev}(hjO0hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(hstruct ttm_lru_bulk_move *bulkh](jD)}(hjh]hstruct}(hjh0hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjd0ubjV)}(h h]h }(hju0hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjd0ubh)}(hhh]jm)}(httm_lru_bulk_moveh]httm_lru_bulk_move}(hj0hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j00c.ttm_lru_bulk_move_finiasbuh1hhjd0ubjV)}(h h]h }(hj0hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjd0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd0ubjm)}(hbulkh]hbulk}(hj0hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjd0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubeh}(h]h ]h"]h$]h&]jjuh1jhj/hhhj/hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj/hhhj/hKubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1j7hj/hKhj/hhubj)}(hhh]h)}(hfinalize a bulk move structureh]hfinalize a bulk move structure}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj0hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct ttm_device *bdev`` The struct ttm_device ``struct ttm_lru_bulk_move *bulk`` the structure to finalize **Description** Sanity checks that bulk moves don't have any resources left and hence no cursors attached.h](h)}(h**Parameters**h]j)}(hj 1h]h Parameters}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 1ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj1ubj)}(hhh](j)}(h2``struct ttm_device *bdev`` The struct ttm_device h](j)}(h``struct ttm_device *bdev``h]j)}(hj*1h]hstruct ttm_device *bdev}(hj,1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(1ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj$1ubj )}(hhh]h)}(hThe struct ttm_deviceh]hThe struct ttm_device}(hjC1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?1hKhj@1ubah}(h]h ]h"]h$]h&]uh1j hj$1ubeh}(h]h ]h"]h$]h&]uh1jhj?1hKhj!1ubj)}(h=``struct ttm_lru_bulk_move *bulk`` the structure to finalize h](j)}(h"``struct ttm_lru_bulk_move *bulk``h]j)}(hjc1h]hstruct ttm_lru_bulk_move *bulk}(hje1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja1ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj]1ubj )}(hhh]h)}(hthe structure to finalizeh]hthe structure to finalize}(hj|1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx1hKhjy1ubah}(h]h ]h"]h$]h&]uh1j hj]1ubeh}(h]h ]h"]h$]h&]uh1jhjx1hKhj!1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj1ubh)}(hZSanity checks that bulk moves don't have any resources left and hence no cursors attached.h]h\Sanity checks that bulk moves don’t have any resources left and hence no cursors attached.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#ttm_lru_bulk_move_tail (C function)c.ttm_lru_bulk_move_tailhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h)}(h;void ttm_lru_bulk_move_tail(struct ttm_lru_bulk_move *bulk)h](jc)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj1hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1hhhj1hKubjg)}(httm_lru_bulk_move_tailh]jm)}(httm_lru_bulk_move_tailh]httm_lru_bulk_move_tail}(hj2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj1hhhj1hKubj)}(h (struct ttm_lru_bulk_move *bulk)h]j)}(hstruct ttm_lru_bulk_move *bulkh](jD)}(hjh]hstruct}(hj 2hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj2ubjV)}(h h]h }(hj-2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2ubh)}(hhh]jm)}(httm_lru_bulk_moveh]httm_lru_bulk_move}(hj>2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj;2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@2modnameN classnameNjj)}j]j)}jj2sbc.ttm_lru_bulk_move_tailasbuh1hhj2ubjV)}(h h]h }(hj^2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2ubj)}(hjh]h*}(hjl2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjm)}(hbulkh]hbulk}(hjy2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubah}(h]h ]h"]h$]h&]jjuh1jhj1hhhj1hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj1hhhj1hKubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1j7hj1hKhj1hhubj)}(hhh]h)}(h-bulk move range of resources to the LRU tail.h]h-bulk move range of resources to the LRU tail.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1j2hhhjhNhNubj)}(hX **Parameters** ``struct ttm_lru_bulk_move *bulk`` bulk move structure **Description** Bulk move BOs to the LRU tail, only valid to use when driver makes sure that resource order never changes. Should be called with :c:type:`ttm_device.lru_lock ` held.h](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj2ubj)}(hhh]j)}(h7``struct ttm_lru_bulk_move *bulk`` bulk move structure h](j)}(h"``struct ttm_lru_bulk_move *bulk``h]j)}(hj2h]hstruct ttm_lru_bulk_move *bulk}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj2ubj )}(hhh]h)}(hbulk move structureh]hbulk move structure}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj2ubah}(h]h ]h"]h$]h&]uh1j hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hKhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubh)}(h**Description**h]j)}(hj3h]h Description}(hj!3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj2ubh)}(hBulk move BOs to the LRU tail, only valid to use when driver makes sure that resource order never changes. Should be called with :c:type:`ttm_device.lru_lock ` held.h](hBulk move BOs to the LRU tail, only valid to use when driver makes sure that resource order never changes. Should be called with }(hj53hhhNhNubh)}(h*:c:type:`ttm_device.lru_lock `h]j)}(hj?3h]httm_device.lru_lock}(hjA3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj=3ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 ttm_deviceuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chKhj53ubh held.}(hj53hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\3hKhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_resource_init (C function)c.ttm_resource_inithNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hnvoid ttm_resource_init (struct ttm_buffer_object *bo, const struct ttm_place *place, struct ttm_resource *res)h]j>)}(hmvoid ttm_resource_init(struct ttm_buffer_object *bo, const struct ttm_place *place, struct ttm_resource *res)h](jc)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj3hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMEubjV)}(h h]h }(hj3hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3hhhj3hMEubjg)}(httm_resource_inith]jm)}(httm_resource_inith]httm_resource_init}(hj3hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj3hhhj3hMEubj)}(hW(struct ttm_buffer_object *bo, const struct ttm_place *place, struct ttm_resource *res)h](j)}(hstruct ttm_buffer_object *boh](jD)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj3ubjV)}(h h]h }(hj3hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3ubh)}(hhh]jm)}(httm_buffer_objecth]httm_buffer_object}(hj3hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jj3sbc.ttm_resource_initasbuh1hhj3ubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjm)}(hboh]hbo}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(hconst struct ttm_place *placeh](jD)}(hj&h]hconst}(hj64hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj24ubjV)}(h h]h }(hjC4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj24ubjD)}(hjh]hstruct}(hjQ4hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj24ubjV)}(h h]h }(hj^4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj24ubh)}(hhh]jm)}(h ttm_placeh]h ttm_place}(hjo4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjl4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjq4modnameN classnameNjj)}j]j3c.ttm_resource_initasbuh1hhj24ubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj24ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj24ubjm)}(hplaceh]hplace}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj24ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(hstruct ttm_resource *resh](jD)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj4ubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj4ubh)}(hhh]jm)}(h ttm_resourceh]h ttm_resource}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j3c.ttm_resource_initasbuh1hhj4ubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj4ubj)}(hjh]h*}(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjm)}(hresh]hres}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubeh}(h]h ]h"]h$]h&]jjuh1jhj3hhhj3hMEubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj3hhhj3hMEubah}(h]jz3ah ](jjeh"]h$]h&]jj)jhuh1j7hj3hMEhj|3hhubj)}(hhh]h)}(hresource object constructureh]hresource object constructure}(hjB5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chM>hj?5hhubah}(h]h ]h"]h$]h&]uh1jhj|3hhhj3hMEubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZ5jjZ5jjjuh1j2hhhjhNhNubj)}(hX9**Parameters** ``struct ttm_buffer_object *bo`` buffer object this resources is allocated for ``const struct ttm_place *place`` placement of the resource ``struct ttm_resource *res`` the resource object to inistilize **Description** Initialize a new resource object. Counterpart of ttm_resource_fini().h](h)}(h**Parameters**h]j)}(hjd5h]h Parameters}(hjf5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb5ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMBhj^5ubj)}(hhh](j)}(hO``struct ttm_buffer_object *bo`` buffer object this resources is allocated for h](j)}(h ``struct ttm_buffer_object *bo``h]j)}(hj5h]hstruct ttm_buffer_object *bo}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chM?hj}5ubj )}(hhh]h)}(h-buffer object this resources is allocated forh]h-buffer object this resources is allocated for}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM?hj5ubah}(h]h ]h"]h$]h&]uh1j hj}5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM?hjz5ubj)}(h<``const struct ttm_place *place`` placement of the resource h](j)}(h!``const struct ttm_place *place``h]j)}(hj5h]hconst struct ttm_place *place}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chM@hj5ubj )}(hhh]h)}(hplacement of the resourceh]hplacement of the resource}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM@hj5ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM@hjz5ubj)}(h?``struct ttm_resource *res`` the resource object to inistilize h](j)}(h``struct ttm_resource *res``h]j)}(hj5h]hstruct ttm_resource *res}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMAhj5ubj )}(hhh]h)}(h!the resource object to inistilizeh]h!the resource object to inistilize}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 6hMAhj 6ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhj 6hMAhjz5ubeh}(h]h ]h"]h$]h&]uh1jhj^5ubh)}(h**Description**h]j)}(hj06h]h Description}(hj26hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.6ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMChj^5ubh)}(hEInitialize a new resource object. Counterpart of ttm_resource_fini().h]hEInitialize a new resource object. Counterpart of ttm_resource_fini().}(hjF6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMChj^5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_resource_fini (C function)c.ttm_resource_finihNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hSvoid ttm_resource_fini (struct ttm_resource_manager *man, struct ttm_resource *res)h]j>)}(hRvoid ttm_resource_fini(struct ttm_resource_manager *man, struct ttm_resource *res)h](jc)}(hvoidh]hvoid}(hju6hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjq6hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMjubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjq6hhhj6hMjubjg)}(httm_resource_finih]jm)}(httm_resource_finih]httm_resource_fini}(hj6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjq6hhhj6hMjubj)}(h<(struct ttm_resource_manager *man, struct ttm_resource *res)h](j)}(h struct ttm_resource_manager *manh](jD)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj6ubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubh)}(hhh]jm)}(httm_resource_managerh]httm_resource_manager}(hj6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j)}jj6sbc.ttm_resource_finiasbuh1hhj6ubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjm)}(hmanh]hman}(hj 7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(hstruct ttm_resource *resh](jD)}(hjh]hstruct}(hj$7hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj 7ubjV)}(h h]h }(hj17hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj 7ubh)}(hhh]jm)}(h ttm_resourceh]h ttm_resource}(hjB7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjD7modnameN classnameNjj)}j]j6c.ttm_resource_finiasbuh1hhj 7ubjV)}(h h]h }(hj`7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj 7ubj)}(hjh]h*}(hjn7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 7ubjm)}(hresh]hres}(hj{7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj 7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubeh}(h]h ]h"]h$]h&]jjuh1jhjq6hhhj6hMjubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjm6hhhj6hMjubah}(h]jh6ah ](jjeh"]h$]h&]jj)jhuh1j7hj6hMjhjj6hhubj)}(hhh]h)}(hresource destructorh]hresource destructor}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMahj7hhubah}(h]h ]h"]h$]h&]uh1jhjj6hhhj6hMjubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct ttm_resource_manager *man`` the resource manager this resource belongs to ``struct ttm_resource *res`` the resource to clean up **Description** Should be used by resource manager backends to clean up the TTM resource objects before freeing the underlying structure. Makes sure the resource is removed from the LRU before destruction. Counterpart of ttm_resource_init().h](h)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMehj7ubj)}(hhh](j)}(hS``struct ttm_resource_manager *man`` the resource manager this resource belongs to h](j)}(h$``struct ttm_resource_manager *man``h]j)}(hj7h]h struct ttm_resource_manager *man}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMbhj7ubj )}(hhh]h)}(h-the resource manager this resource belongs toh]h-the resource manager this resource belongs to}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMbhj7ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMbhj7ubj)}(h6``struct ttm_resource *res`` the resource to clean up h](j)}(h``struct ttm_resource *res``h]j)}(hj8h]hstruct ttm_resource *res}(hj!8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMchj8ubj )}(hhh]h)}(hthe resource to clean uph]hthe resource to clean up}(hj88hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj48hMchj58ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhj48hMchj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hjZ8h]h Description}(hj\8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX8ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMehj7ubh)}(hShould be used by resource manager backends to clean up the TTM resource objects before freeing the underlying structure. Makes sure the resource is removed from the LRU before destruction. Counterpart of ttm_resource_init().h]hShould be used by resource manager backends to clean up the TTM resource objects before freeing the underlying structure. Makes sure the resource is removed from the LRU before destruction. Counterpart of ttm_resource_init().}(hjp8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMehj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&ttm_resource_manager_init (C function)c.ttm_resource_manager_inithNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hivoid ttm_resource_manager_init (struct ttm_resource_manager *man, struct ttm_device *bdev, uint64_t size)h]j>)}(hhvoid ttm_resource_manager_init(struct ttm_resource_manager *man, struct ttm_device *bdev, uint64_t size)h](jc)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj8hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8hhhj8hMubjg)}(httm_resource_manager_inith]jm)}(httm_resource_manager_inith]httm_resource_manager_init}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj8hhhj8hMubj)}(hJ(struct ttm_resource_manager *man, struct ttm_device *bdev, uint64_t size)h](j)}(h struct ttm_resource_manager *manh](jD)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj8ubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8ubh)}(hhh]jm)}(httm_resource_managerh]httm_resource_manager}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)}jj8sbc.ttm_resource_manager_initasbuh1hhj8ubjV)}(h h]h }(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8ubj)}(hjh]h*}(hj(9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjm)}(hmanh]hman}(hj59hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(hstruct ttm_device *bdevh](jD)}(hjh]hstruct}(hjN9hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjJ9ubjV)}(h h]h }(hj[9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJ9ubh)}(hhh]jm)}(h ttm_deviceh]h ttm_device}(hjl9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhji9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjn9modnameN classnameNjj)}j]j9c.ttm_resource_manager_initasbuh1hhjJ9ubjV)}(h h]h }(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJ9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ9ubjm)}(hbdevh]hbdev}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJ9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(h uint64_t sizeh](h)}(hhh]jm)}(huint64_th]huint64_t}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j9c.ttm_resource_manager_initasbuh1hhj9ubjV)}(h h]h }(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9ubjm)}(hsizeh]hsize}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj8hhhj8hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1j7hj8hMhj8hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj8hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj :jj :jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct ttm_resource_manager *man`` memory manager object to init ``struct ttm_device *bdev`` ttm device this manager belongs to ``uint64_t size`` size of managed resources in arbitrary units **Description** Initialise core parts of a manager object.h](h)}(h**Parameters**h]j)}(hj*:h]h Parameters}(hj,:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(:ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj$:ubj)}(hhh](j)}(hC``struct ttm_resource_manager *man`` memory manager object to init h](j)}(h$``struct ttm_resource_manager *man``h]j)}(hjI:h]h struct ttm_resource_manager *man}(hjK:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG:ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjC:ubj )}(hhh]h)}(hmemory manager object to inith]hmemory manager object to init}(hjb:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^:hMhj_:ubah}(h]h ]h"]h$]h&]uh1j hjC:ubeh}(h]h ]h"]h$]h&]uh1jhj^:hMhj@:ubj)}(h?``struct ttm_device *bdev`` ttm device this manager belongs to h](j)}(h``struct ttm_device *bdev``h]j)}(hj:h]hstruct ttm_device *bdev}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj|:ubj )}(hhh]h)}(h"ttm device this manager belongs toh]h"ttm device this manager belongs to}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1j hj|:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj@:ubj)}(h?``uint64_t size`` size of managed resources in arbitrary units h](j)}(h``uint64_t size``h]j)}(hj:h]h uint64_t size}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj:ubj )}(hhh]h)}(h,size of managed resources in arbitrary unitsh]h,size of managed resources in arbitrary units}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj@:ubeh}(h]h ]h"]h$]h&]uh1jhj$:ubh)}(h**Description**h]j)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj$:ubh)}(h*Initialise core parts of a manager object.h]h*Initialise core parts of a manager object.}(hj ;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj$:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'ttm_resource_manager_usage (C function)c.ttm_resource_manager_usagehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hFuint64_t ttm_resource_manager_usage (struct ttm_resource_manager *man)h]j>)}(hEuint64_t ttm_resource_manager_usage(struct ttm_resource_manager *man)h](h)}(hhh]jm)}(huint64_th]huint64_t}(hj>;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj;;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@;modnameN classnameNjj)}j]j)}jttm_resource_manager_usagesbc.ttm_resource_manager_usageasbuh1hhj7;hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMGubjV)}(h h]h }(hj`;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7;hhhj_;hMGubjg)}(httm_resource_manager_usageh]jm)}(hj\;h]httm_resource_manager_usage}(hjr;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjn;ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj7;hhhj_;hMGubj)}(h"(struct ttm_resource_manager *man)h]j)}(h struct ttm_resource_manager *manh](jD)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj;ubjV)}(h h]h }(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj;ubh)}(hhh]jm)}(httm_resource_managerh]httm_resource_manager}(hj;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]jZ;c.ttm_resource_manager_usageasbuh1hhj;ubjV)}(h h]h }(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjm)}(hmanh]hman}(hj;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubah}(h]h ]h"]h$]h&]jjuh1jhj7;hhhj_;hMGubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj3;hhhj_;hMGubah}(h]j.;ah ](jjeh"]h$]h&]jj)jhuh1j7hj_;hMGhj0;hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj0;hhhj_;hMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct ttm_resource_manager *man`` A memory manager object. **Description** Return how many resources are currently used.h](h)}(h**Parameters**h]j)}(hj!<h]h Parameters}(hj#<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMDhj<ubj)}(hhh]j)}(h>``struct ttm_resource_manager *man`` A memory manager object. h](j)}(h$``struct ttm_resource_manager *man``h]j)}(hj@<h]h struct ttm_resource_manager *man}(hjB<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj><ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMChj:<ubj )}(hhh]h)}(hA memory manager object.h]hA memory manager object.}(hjY<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU<hMChjV<ubah}(h]h ]h"]h$]h&]uh1j hj:<ubeh}(h]h ]h"]h$]h&]uh1jhjU<hMChj7<ubah}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h**Description**h]j)}(hj{<h]h Description}(hj}<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy<ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMEhj<ubh)}(h-Return how many resources are currently used.h]h-Return how many resources are currently used.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMEhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'ttm_resource_manager_debug (C function)c.ttm_resource_manager_debughNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hYvoid ttm_resource_manager_debug (struct ttm_resource_manager *man, struct drm_printer *p)h]j>)}(hXvoid ttm_resource_manager_debug(struct ttm_resource_manager *man, struct drm_printer *p)h](jc)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj<hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMXubjV)}(h h]h }(hj<hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<hhhj<hMXubjg)}(httm_resource_manager_debugh]jm)}(httm_resource_manager_debugh]httm_resource_manager_debug}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj<hhhj<hMXubj)}(h9(struct ttm_resource_manager *man, struct drm_printer *p)h](j)}(h struct ttm_resource_manager *manh](jD)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj<ubjV)}(h h]h }(hj =hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<ubh)}(hhh]jm)}(httm_resource_managerh]httm_resource_manager}(hj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j)}jj<sbc.ttm_resource_manager_debugasbuh1hhj<ubjV)}(h h]h }(hj;=hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<ubj)}(hjh]h*}(hjI=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjm)}(hmanh]hman}(hjV=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hjo=hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjk=ubjV)}(h h]h }(hj|=hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjk=ubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j7=c.ttm_resource_manager_debugasbuh1hhjk=ubjV)}(h h]h }(hj=hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjk=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk=ubjm)}(hjh]hp}(hj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjk=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhj<hhhj<hMXubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj<hhhj<hMXubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1j7hj<hMXhj<hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj<hhhj<hMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct ttm_resource_manager *man`` manager type to dump. ``struct drm_printer *p`` printer to use for debug.h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMVhj=ubj)}(hhh](j)}(h;``struct ttm_resource_manager *man`` manager type to dump. h](j)}(h$``struct ttm_resource_manager *man``h]j)}(hj!>h]h struct ttm_resource_manager *man}(hj#>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMUhj>ubj )}(hhh]h)}(hmanager type to dump.h]hmanager type to dump.}(hj:>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6>hMUhj7>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhj6>hMUhj>ubj)}(h3``struct drm_printer *p`` printer to use for debug.h](j)}(h``struct drm_printer *p``h]j)}(hjZ>h]hstruct drm_printer *p}(hj\>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX>ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMWhjT>ubj )}(hhh]h)}(hprinter to use for debug.h]hprinter to use for debug.}(hjs>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMVhjp>ubah}(h]h ]h"]h$]h&]uh1j hjT>ubeh}(h]h ]h"]h$]h&]uh1jhjo>hMWhj>ubeh}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%ttm_kmap_iter_iomap_init (C function)c.ttm_kmap_iter_iomap_inithNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hstruct ttm_kmap_iter * ttm_kmap_iter_iomap_init (struct ttm_kmap_iter_iomap *iter_io, struct io_mapping *iomap, struct sg_table *st, resource_size_t start)h]j>)}(hstruct ttm_kmap_iter *ttm_kmap_iter_iomap_init(struct ttm_kmap_iter_iomap *iter_io, struct io_mapping *iomap, struct sg_table *st, resource_size_t start)h](jD)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj>hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>hhhj>hMubh)}(hhh]jm)}(h ttm_kmap_iterh]h ttm_kmap_iter}(hj>hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j)}jttm_kmap_iter_iomap_initsbc.ttm_kmap_iter_iomap_initasbuh1hhj>hhhj>hMubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>hhhj>hMubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hMubjg)}(httm_kmap_iter_iomap_inith]jm)}(hj>h]httm_kmap_iter_iomap_init}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj>hhhj>hMubj)}(hk(struct ttm_kmap_iter_iomap *iter_io, struct io_mapping *iomap, struct sg_table *st, resource_size_t start)h](j)}(h#struct ttm_kmap_iter_iomap *iter_ioh](jD)}(hjh]hstruct}(hj.?hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj*?ubjV)}(h h]h }(hj;?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*?ubh)}(hhh]jm)}(httm_kmap_iter_iomaph]httm_kmap_iter_iomap}(hjL?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjI?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjN?modnameN classnameNjj)}j]j>c.ttm_kmap_iter_iomap_initasbuh1hhj*?ubjV)}(h h]h }(hjj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*?ubj)}(hjh]h*}(hjx?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*?ubjm)}(hiter_ioh]hiter_io}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj*?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&?ubj)}(hstruct io_mapping *iomaph](jD)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj?ubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubh)}(hhh]jm)}(h io_mappingh]h io_mapping}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j>c.ttm_kmap_iter_iomap_initasbuh1hhj?ubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjm)}(hiomaph]hiomap}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&?ubj)}(hstruct sg_table *sth](jD)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj @ubjV)}(h h]h }(hj@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj @ubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hj,@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj)@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.@modnameN classnameNjj)}j]j>c.ttm_kmap_iter_iomap_initasbuh1hhj @ubjV)}(h h]h }(hjJ@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj @ubj)}(hjh]h*}(hjX@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj @ubjm)}(hsth]hst}(hje@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj @ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&?ubj)}(hresource_size_t starth](h)}(hhh]jm)}(hresource_size_th]hresource_size_t}(hj@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj~@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j>c.ttm_kmap_iter_iomap_initasbuh1hhjz@ubjV)}(h h]h }(hj@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjz@ubjm)}(hstarth]hstart}(hj@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjz@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&?ubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhj>hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj>hhhj>hMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1j7hj>hMhj>hhubj)}(hhh]h)}(h'Initialize a struct ttm_kmap_iter_iomaph]h'Initialize a struct ttm_kmap_iter_iomap}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct ttm_kmap_iter_iomap *iter_io`` The struct ttm_kmap_iter_iomap to initialize. ``struct io_mapping *iomap`` The struct io_mapping representing the underlying linear io_memory. ``struct sg_table *st`` sg_table into **iomap**, representing the memory of the struct ttm_resource. ``resource_size_t start`` Offset that needs to be subtracted from **st** to make sg_dma_address(st->sgl) - **start** == 0 for **iomap** start. **Return** Pointer to the embedded struct ttm_kmap_iter.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj@ubj)}(hhh](j)}(hV``struct ttm_kmap_iter_iomap *iter_io`` The struct ttm_kmap_iter_iomap to initialize. h](j)}(h'``struct ttm_kmap_iter_iomap *iter_io``h]j)}(hjAh]h#struct ttm_kmap_iter_iomap *iter_io}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjAubj )}(hhh]h)}(h-The struct ttm_kmap_iter_iomap to initialize.h]h-The struct ttm_kmap_iter_iomap to initialize.}(hj1AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-AhMhj.Aubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj-AhMhjAubj)}(ha``struct io_mapping *iomap`` The struct io_mapping representing the underlying linear io_memory. h](j)}(h``struct io_mapping *iomap``h]j)}(hjQAh]hstruct io_mapping *iomap}(hjSAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOAubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjKAubj )}(hhh]h)}(hCThe struct io_mapping representing the underlying linear io_memory.h]hCThe struct io_mapping representing the underlying linear io_memory.}(hjjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfAhMhjgAubah}(h]h ]h"]h$]h&]uh1j hjKAubeh}(h]h ]h"]h$]h&]uh1jhjfAhMhjAubj)}(he``struct sg_table *st`` sg_table into **iomap**, representing the memory of the struct ttm_resource. h](j)}(h``struct sg_table *st``h]j)}(hjAh]hstruct sg_table *st}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjAubj )}(hhh]h)}(hLsg_table into **iomap**, representing the memory of the struct ttm_resource.h](hsg_table into }(hjAhhhNhNubj)}(h **iomap**h]hiomap}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh5, representing the memory of the struct ttm_resource.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjAubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h``resource_size_t start`` Offset that needs to be subtracted from **st** to make sg_dma_address(st->sgl) - **start** == 0 for **iomap** start. h](j)}(h``resource_size_t start``h]j)}(hjAh]hresource_size_t start}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjAubj )}(hhh]h)}(htOffset that needs to be subtracted from **st** to make sg_dma_address(st->sgl) - **start** == 0 for **iomap** start.h](h(Offset that needs to be subtracted from }(hjAhhhNhNubj)}(h**st**h]hst}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh# to make sg_dma_address(st->sgl) - }(hjAhhhNhNubj)}(h **start**h]hstart}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh == 0 for }(hjAhhhNhNubj)}(h **iomap**h]hiomap}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh start.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjAubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h **Return**h]j)}(hjHBh]hReturn}(hjJBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFBubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj@ubh)}(h-Pointer to the embedded struct ttm_kmap_iter.h]h-Pointer to the embedded struct ttm_kmap_iter.}(hj^BhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.0ttm_resource_manager_create_debugfs (C function)%c.ttm_resource_manager_create_debugfshNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(huvoid ttm_resource_manager_create_debugfs (struct ttm_resource_manager *man, struct dentry * parent, const char *name)h]j>)}(hsvoid ttm_resource_manager_create_debugfs(struct ttm_resource_manager *man, struct dentry *parent, const char *name)h](jc)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjBhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMubjV)}(h h]h }(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBhhhjBhMubjg)}(h#ttm_resource_manager_create_debugfsh]jm)}(h#ttm_resource_manager_create_debugfsh]h#ttm_resource_manager_create_debugfs}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjBhhhjBhMubj)}(hK(struct ttm_resource_manager *man, struct dentry *parent, const char *name)h](j)}(h struct ttm_resource_manager *manh](jD)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjBubjV)}(h h]h }(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubh)}(hhh]jm)}(httm_resource_managerh]httm_resource_manager}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j)}jjBsb%c.ttm_resource_manager_create_debugfsasbuh1hhjBubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjm)}(hmanh]hman}(hj#ChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubj)}(hstruct dentry *parenth](jD)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Dubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj6Dubj)}(hhh](j)}(hj``struct ttm_resource_manager *man`` The TTM resource manager for which the debugfs stats file be creates h](j)}(h$``struct ttm_resource_manager *man``h]j)}(hj[Dh]h struct ttm_resource_manager *man}(hj]DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYDubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjUDubj )}(hhh]h)}(hDThe TTM resource manager for which the debugfs stats file be createsh]hDThe TTM resource manager for which the debugfs stats file be creates}(hjtDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpDhMhjqDubah}(h]h ]h"]h$]h&]uh1j hjUDubeh}(h]h ]h"]h$]h&]uh1jhjpDhMhjRDubj)}(hK``struct dentry * parent`` debugfs directory in which the file will reside h](j)}(h``struct dentry * parent``h]j)}(hjDh]hstruct dentry * parent}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjDubj )}(hhh]h)}(h/debugfs directory in which the file will resideh]h/debugfs directory in which the file will reside}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjRDubj)}(h-``const char *name`` The filename to create. h](j)}(h``const char *name``h]j)}(hjDh]hconst char *name}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhjDubj )}(hhh]h)}(hThe filename to create.h]hThe filename to create.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjRDubeh}(h]h ]h"]h$]h&]uh1jhj6Dubh)}(h**Description**h]j)}(hjEh]h Description}(hj EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj6Dubh)}(hzThis function setups up a debugfs file that can be used to look at debug statistics of the specified ttm_resource_manager.h]hzThis function setups up a debugfs file that can be used to look at debug statistics of the specified ttm_resource_manager.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:58: ./drivers/gpu/drm/ttm/ttm_resource.chMhj6Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]ttm-resource-object-referenceah ]h"]ttm resource object referenceah$]h&]uh1hhhhhhhhK5ubh)}(hhh](h)}(hTTM TT object referenceh]hTTM TT object reference}(hj?EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_tt (C struct)c.ttm_tthNtauh1j!hj)}(h struct ttm_tth](jD)}(hjh]hstruct}(hjfEhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjbEhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hjtEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjbEhhhjsEhKubjg)}(httm_tth]jm)}(hj`Eh]httm_tt}(hjEhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjbEhhhjsEhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj^EhhhjsEhKubah}(h]jYEah ](jjeh"]h$]h&]jj)jhuh1j7hjsEhKhj[Ehhubj)}(hhh]h)}(hThis is a structure holding the pages, caching- and aperture binding status for a buffer object that isn't backed by fixed (VRAM / AGP) memory.h]hThis is a structure holding the pages, caching- and aperture binding status for a buffer object that isn’t backed by fixed (VRAM / AGP) memory.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhK,hjEhhubah}(h]h ]h"]h$]h&]uh1jhj[EhhhjsEhKubeh}(h]h ](jstructeh"]h$]h&]jjjjEjjEjjjuh1j2hhhjhjdFubh)}(hTTM_TT_FLAG_EXTERNAL: Set if the underlying pages were allocated externally, like with dma-buf or userptr. This effectively disables TTM swapping out such pages. Also important is to prevent TTM from ever directly mapping these pages.h]hTTM_TT_FLAG_EXTERNAL: Set if the underlying pages were allocated externally, like with dma-buf or userptr. This effectively disables TTM swapping out such pages. Also important is to prevent TTM from ever directly mapping these pages.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKAhjdFubh)}(hONote that enum ttm_bo_type.ttm_bo_type_sg objects will always enable this flag.h]hONote that enum ttm_bo_type.ttm_bo_type_sg objects will always enable this flag.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKFhjdFubh)}(hXTTM_TT_FLAG_EXTERNAL_MAPPABLE: Same behaviour as TTM_TT_FLAG_EXTERNAL, but with the reduced restriction that it is still valid to use TTM to map the pages directly. This is useful when implementing a ttm_tt backend which still allocates driver owned pages underneath(say with shmem).h]hXTTM_TT_FLAG_EXTERNAL_MAPPABLE: Same behaviour as TTM_TT_FLAG_EXTERNAL, but with the reduced restriction that it is still valid to use TTM to map the pages directly. This is useful when implementing a ttm_tt backend which still allocates driver owned pages underneath(say with shmem).}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKIhjdFubh)}(hXNote that since this also implies TTM_TT_FLAG_EXTERNAL, the usage here should always be:h]hXNote that since this also implies TTM_TT_FLAG_EXTERNAL, the usage here should always be:}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKOhjdFubj@-)}(hPpage_flags = TTM_TT_FLAG_EXTERNAL | TTM_TT_FLAG_EXTERNAL_MAPPABLE; h]j)}(hhh]j)}(hCpage_flags = TTM_TT_FLAG_EXTERNAL | TTM_TT_FLAG_EXTERNAL_MAPPABLE; h](j)}(h#page_flags = TTM_TT_FLAG_EXTERNAL |h]h#page_flags = TTM_TT_FLAG_EXTERNAL |}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKShjFubj )}(hhh]h)}(hTTM_TT_FLAG_EXTERNAL_MAPPABLE;h]hTTM_TT_FLAG_EXTERNAL_MAPPABLE;}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKShjFubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjFhKShjFubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1j?-hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKRhjdFubh)}(hX*TTM_TT_FLAG_DECRYPTED: The mapped ttm pages should be marked as not encrypted. The framework will try to match what the dma layer is doing, but note that it is a little fragile because ttm page fault handling abuses the DMA api a bit and dma_map_attrs can't be used to assure pgprot always matches.h]hX,TTM_TT_FLAG_DECRYPTED: The mapped ttm pages should be marked as not encrypted. The framework will try to match what the dma layer is doing, but note that it is a little fragile because ttm page fault handling abuses the DMA api a bit and dma_map_attrs can’t be used to assure pgprot always matches.}(hj#GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKUhjdFubh)}(hsTTM_TT_FLAG_BACKED_UP: TTM internal only. This is set if the struct ttm_tt has been (possibly partially) backed up.h]hsTTM_TT_FLAG_BACKED_UP: TTM internal only. This is set if the struct ttm_tt has been (possibly partially) backed up.}(hj2GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhK[hjdFubh)}(hTTM_TT_FLAG_PRIV_POPULATED: TTM internal only. DO NOT USE. This is set by TTM after ttm_tt_populate() has successfully returned, and is then unset when TTM calls ttm_tt_unpopulate().h]hTTM_TT_FLAG_PRIV_POPULATED: TTM internal only. DO NOT USE. This is set by TTM after ttm_tt_populate() has successfully returned, and is then unset when TTM calls ttm_tt_unpopulate().}(hjAGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhK^hjdFubeh}(h]h ]h"]h$]h&]uh1j hjHFubeh}(h]h ]h"]h$]h&]uh1jhjcFhK`hj Fubj)}(h1``num_pages`` Number of pages in the page array. h](j)}(h ``num_pages``h]j)}(hjbGh]h num_pages}(hjdGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Gubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhj\Gubj )}(hhh]h)}(h"Number of pages in the page array.h]h"Number of pages in the page array.}(hj{GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwGhKhjxGubah}(h]h ]h"]h$]h&]uh1j hj\Gubeh}(h]h ]h"]h$]h&]uh1jhjwGhKhj Fubj)}(h#``sg`` for SG objects via dma-buf. h](j)}(h``sg``h]j)}(hjGh]hsg}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjGubj )}(hhh]h)}(hfor SG objects via dma-buf.h]hfor SG objects via dma-buf.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjGubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjGhKhj Fubj)}(h6``dma_address`` The DMA (bus) addresses of the pages. h](j)}(h``dma_address``h]j)}(hjGh]h dma_address}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjGubj )}(hhh]h)}(h%The DMA (bus) addresses of the pages.h]h%The DMA (bus) addresses of the pages.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjGubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjGhKhj Fubj)}(h@``swap_storage`` Pointer to shmem struct file for swap storage. h](j)}(h``swap_storage``h]j)}(hj Hh]h swap_storage}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Hubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjHubj )}(hhh]h)}(h.Pointer to shmem struct file for swap storage.h]h.Pointer to shmem struct file for swap storage.}(hj&HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"HhKhj#Hubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhj"HhKhj Fubj)}(h``backup`` Pointer to backup struct for backed up tts. Could be unified with **swap_storage**. Meanwhile, the driver's ttm_tt_create() callback is responsible for assigning this field. h](j)}(h ``backup``h]j)}(hjFHh]hbackup}(hjHHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKxhj@Hubj )}(hhh]h)}(hPointer to backup struct for backed up tts. Could be unified with **swap_storage**. Meanwhile, the driver's ttm_tt_create() callback is responsible for assigning this field.h](hBPointer to backup struct for backed up tts. Could be unified with }(hj_HhhhNhNubj)}(h**swap_storage**h]h swap_storage}(hjgHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_Hubh]. Meanwhile, the driver’s ttm_tt_create() callback is responsible for assigning this field.}(hj_HhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKuhj\Hubah}(h]h ]h"]h$]h&]uh1j hj@Hubeh}(h]h ]h"]h$]h&]uh1jhj[HhKxhj Fubj)}(hJ``caching`` The current caching state of the pages, see enum ttm_caching. h](j)}(h ``caching``h]j)}(hjHh]hcaching}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhK}hjHubj )}(hhh]h)}(h=The current caching state of the pages, see enum ttm_caching.h]h=The current caching state of the pages, see enum ttm_caching.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhK|hjHubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhjHhK}hj Fubj)}(h>``restore`` Partial restoration from backup state. TTM privateh](j)}(h ``restore``h]j)}(hjHh]hrestore}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjHubj )}(hhh]h)}(h2Partial restoration from backup state. TTM privateh]h2Partial restoration from backup state. TTM private}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjHubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhjHhKhj Fubeh}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj)}(hstruct ttm_kmap_iter_tth](jD)}(hjh]hstruct}(hj&IhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj"IhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hj4IhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj"Ihhhj3IhKubjg)}(httm_kmap_iter_tth]jm)}(hj Ih]httm_kmap_iter_tt}(hjFIhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBIubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj"Ihhhj3IhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjIhhhj3IhKubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1j7hj3IhKhjIhhubj)}(hhh]h)}(h-Specialization of a mappig iterator for a tt.h]h-Specialization of a mappig iterator for a tt.}(hjhIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjeIhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhj3IhKubeh}(h]h ](jstructeh"]h$]h&]jjjjIjjIjjjuh1j2hhhj)}(h/bool ttm_tt_is_swapped(const struct ttm_tt *tt)h](jc)}(hj h]hbool}(hjJhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjJhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hjJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJhhhjJhKubjg)}(httm_tt_is_swappedh]jm)}(httm_tt_is_swappedh]httm_tt_is_swapped}(hjJhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjJhhhjJhKubj)}(h(const struct ttm_tt *tt)h]j)}(hconst struct ttm_tt *tth](jD)}(hj&h]hconst}(hjJhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjJubjV)}(h h]h }(hjJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubjD)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjJubjV)}(h h]h }(hjKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubh)}(hhh]jm)}(httm_tth]httm_tt}(hjKhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j)}jjJsbc.ttm_tt_is_swappedasbuh1hhjJubjV)}(h h]h }(hj6KhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubj)}(hjh]h*}(hjDKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjm)}(htth]htt}(hjQKhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubah}(h]h ]h"]h$]h&]jjuh1jhjJhhhjJhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjJhhhjJhKubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1j7hjJhKhjJhhubj)}(hhh]h)}(h.Whether the ttm_tt is swapped out or backed uph]h.Whether the ttm_tt is swapped out or backed up}(hj{KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjxKhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjJhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1j2hhhj)}(h1bool ttm_tt_is_backed_up(const struct ttm_tt *tt)h](jc)}(hj h]hbool}(hj)}(h.void ttm_tt_clear_backed_up(struct ttm_tt *tt)h](jc)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjMhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMhhhjMhKubjg)}(httm_tt_clear_backed_uph]jm)}(httm_tt_clear_backed_uph]httm_tt_clear_backed_up}(hjMhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjMhhhjMhKubj)}(h(struct ttm_tt *tt)h]j)}(hstruct ttm_tt *tth](jD)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjNubjV)}(h h]h }(hj!NhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjNubh)}(hhh]jm)}(httm_tth]httm_tt}(hj2NhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/Nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4NmodnameN classnameNjj)}j]j)}jjMsbc.ttm_tt_clear_backed_upasbuh1hhjNubjV)}(h h]h }(hjRNhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjNubj)}(hjh]h*}(hj`NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjm)}(htth]htt}(hjmNhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Nubah}(h]h ]h"]h$]h&]jjuh1jhjMhhhjMhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjMhhhjMhKubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1j7hjMhKhjMhhubj)}(hhh]h)}(h!Clear the ttm_tt backed-up statush]h!Clear the ttm_tt backed-up status}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjNhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjMhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1j2hhhj)}(h@int ttm_tt_create(struct ttm_buffer_object *bo, bool zero_alloc)h](jc)}(hinth]hint}(hjXOhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjTOhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hjgOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjTOhhhjfOhKubjg)}(h ttm_tt_createh]jm)}(h ttm_tt_createh]h ttm_tt_create}(hjyOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuOubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjTOhhhjfOhKubj)}(h/(struct ttm_buffer_object *bo, bool zero_alloc)h](j)}(hstruct ttm_buffer_object *boh](jD)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjOubjV)}(h h]h }(hjOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjOubh)}(hhh]jm)}(httm_buffer_objecth]httm_buffer_object}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j)}jj{Osbc.ttm_tt_createasbuh1hhjOubjV)}(h h]h }(hjOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjOubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjm)}(hboh]hbo}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hbool zero_alloch](jc)}(hj h]hbool}(hjPhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjPubjV)}(h h]h }(hjPhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPubjm)}(h zero_alloch]h zero_alloc}(hj"PhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubeh}(h]h ]h"]h$]h&]jjuh1jhjTOhhhjfOhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjPOhhhjfOhKubah}(h]jKOah ](jjeh"]h$]h&]jj)jhuh1j7hjfOhKhjMOhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjMOhhhjfOhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUPjjUPjjjuh1j2hhhj)}(hint ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo, uint32_t page_flags, enum ttm_caching caching, unsigned long extra_pages)h](jc)}(hinth]hint}(hj7QhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj3QhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hjFQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3QhhhjEQhKubjg)}(h ttm_tt_inith]jm)}(h ttm_tt_inith]h ttm_tt_init}(hjXQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjTQubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj3QhhhjEQhKubj)}(h|(struct ttm_tt *ttm, struct ttm_buffer_object *bo, uint32_t page_flags, enum ttm_caching caching, unsigned long extra_pages)h](j)}(hstruct ttm_tt *ttmh](jD)}(hjh]hstruct}(hjtQhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjpQubjV)}(h h]h }(hjQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjpQubh)}(hhh]jm)}(httm_tth]httm_tt}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j)}jjZQsb c.ttm_tt_initasbuh1hhjpQubjV)}(h h]h }(hjQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjpQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpQubjm)}(httmh]httm}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjpQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlQubj)}(hstruct ttm_buffer_object *boh](jD)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjQubjV)}(h h]h }(hjQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQubh)}(hhh]jm)}(httm_buffer_objecth]httm_buffer_object}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jQ c.ttm_tt_initasbuh1hhjQubjV)}(h h]h }(hj"RhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQubj)}(hjh]h*}(hj0RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjm)}(hboh]hbo}(hj=RhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlQubj)}(huint32_t page_flagsh](h)}(hhh]jm)}(huint32_th]huint32_t}(hjYRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[RmodnameN classnameNjj)}j]jQ c.ttm_tt_initasbuh1hhjRRubjV)}(h h]h }(hjwRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRRubjm)}(h page_flagsh]h page_flags}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlQubj)}(henum ttm_caching cachingh](jD)}(hjGh]henum}(hjRhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjRubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubh)}(hhh]jm)}(h ttm_cachingh]h ttm_caching}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jQ c.ttm_tt_initasbuh1hhjRubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubjm)}(hcachingh]hcaching}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlQubj)}(hunsigned long extra_pagesh](jc)}(hunsignedh]hunsigned}(hjShhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjRubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubjc)}(hlongh]hlong}(hjShhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjRubjV)}(h h]h }(hj+ShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubjm)}(h extra_pagesh]h extra_pages}(hj9ShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlQubeh}(h]h ]h"]h$]h&]jjuh1jhj3QhhhjEQhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj/QhhhjEQhKubah}(h]j*Qah ](jjeh"]h$]h&]jj)jhuh1j7hjEQhKhj,Qhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj,QhhhjEQhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjlSjjlSjjjuh1j2hhhjTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhj:Tubj )}(hhh]h)}(h&the desired caching state of the pagesh]h&the desired caching state of the pages}(hjYThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUThKhjVTubah}(h]h ]h"]h$]h&]uh1j hj:Tubeh}(h]h ]h"]h$]h&]uh1jhjUThKhjSubj)}(hA``unsigned long extra_pages`` Extra pages needed for the driver. h](j)}(h``unsigned long extra_pages``h]j)}(hjyTh]hunsigned long extra_pages}(hj{ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjsTubj )}(hhh]h)}(h"Extra pages needed for the driver.h]h"Extra pages needed for the driver.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThKhjTubah}(h]h ]h"]h$]h&]uh1j hjsTubeh}(h]h ]h"]h$]h&]uh1jhjThKhjSubeh}(h]h ]h"]h$]h&]uh1jhjpSubh)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjpSubh)}(h^Create a struct ttm_tt to back data with system memory pages. No pages are actually allocated.h]h^Create a struct ttm_tt to back data with system memory pages. No pages are actually allocated.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjpSubh)}(h **Return**h]j)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjpSubh)}(hNULL: Out of memory.h]hNULL: Out of memory.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhjpSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj)}(h$void ttm_tt_fini(struct ttm_tt *ttm)h](jc)}(hvoidh]hvoid}(hj UhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjUhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hj/UhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUhhhj.UhKubjg)}(h ttm_tt_finih]jm)}(h ttm_tt_finih]h ttm_tt_fini}(hjAUhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=Uubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjUhhhj.UhKubj)}(h(struct ttm_tt *ttm)h]j)}(hstruct ttm_tt *ttmh](jD)}(hjh]hstruct}(hj]UhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjYUubjV)}(h h]h }(hjjUhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYUubh)}(hhh]jm)}(httm_tth]httm_tt}(hj{UhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}UmodnameN classnameNjj)}j]j)}jjCUsb c.ttm_tt_finiasbuh1hhjYUubjV)}(h h]h }(hjUhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYUubjm)}(httmh]httm}(hjUhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUUubah}(h]h ]h"]h$]h&]jjuh1jhjUhhhj.UhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjUhhhj.UhKubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1j7hj.UhKhjUhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjUhhhj.UhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1j2hhhj)}(h@void ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)h](jc)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjVhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hjVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVhhhjVhKubjg)}(httm_tt_destroyh]jm)}(httm_tt_destroyh]httm_tt_destroy}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjVhhhjVhKubj)}(h-(struct ttm_device *bdev, struct ttm_tt *ttm)h](j)}(hstruct ttm_device *bdevh](jD)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjVubjV)}(h h]h }(hjVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVubh)}(hhh]jm)}(h ttm_deviceh]h ttm_device}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j)}jjVsbc.ttm_tt_destroyasbuh1hhjVubjV)}(h h]h }(hj WhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjm)}(hbdevh]hbdev}(hj(WhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hstruct ttm_tt *ttmh](jD)}(hjh]hstruct}(hjAWhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj=WubjV)}(h h]h }(hjNWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=Wubh)}(hhh]jm)}(httm_tth]httm_tt}(hj_WhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\Wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjaWmodnameN classnameNjj)}j]j Wc.ttm_tt_destroyasbuh1hhj=WubjV)}(h h]h }(hj}WhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=Wubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Wubjm)}(httmh]httm}(hjWhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=Wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjVhhhjVhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjVhhhjVhKubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1j7hjVhKhjVhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjVhhhjVhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1j2hhhj)}(h%int ttm_tt_swapin(struct ttm_tt *ttm)h](jc)}(hinth]hint}(hjXhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjXhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXhhhjXhKubjg)}(h ttm_tt_swapinh]jm)}(h ttm_tt_swapinh]h ttm_tt_swapin}(hjXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjXhhhjXhKubj)}(h(struct ttm_tt *ttm)h]j)}(hstruct ttm_tt *ttmh](jD)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjXubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXubh)}(hhh]jm)}(httm_tth]httm_tt}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj YmodnameN classnameNjj)}j]j)}jjXsbc.ttm_tt_swapinasbuh1hhjXubjV)}(h h]h }(hj(YhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXubj)}(hjh]h*}(hj6YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjm)}(httmh]httm}(hjCYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubah}(h]h ]h"]h$]h&]jjuh1jhjXhhhjXhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjXhhhjXhKubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1j7hjXhKhjXhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjXhhhjXhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvYjjvYjjjuh1j2hhhj)}(h_int ttm_tt_populate(struct ttm_device *bdev, struct ttm_tt *ttm, struct ttm_operation_ctx *ctx)h](jc)}(hinth]hint}(hjZhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjZhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKubjV)}(h h]h }(hj.ZhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjZhhhj-ZhKubjg)}(httm_tt_populateh]jm)}(httm_tt_populateh]httm_tt_populate}(hj@ZhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj:[ubjV)}(h h]h }(hjK[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj:[ubh)}(hhh]jm)}(httm_operation_ctxh]httm_operation_ctx}(hj\[hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjY[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^[modnameN classnameNjj)}j]jZc.ttm_tt_populateasbuh1hhj:[ubjV)}(h h]h }(hjz[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj:[ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:[ubjm)}(hctxh]hctx}(hj[hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTZubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhj-ZhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjZhhhj-ZhKubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1j7hj-ZhKhjZhhubj)}(hhh]h)}(hallocate pages for a ttmh]hallocate pages for a ttm}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhKhj[hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhj-ZhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[jj[jjjuh1j2hhhj)}(hCvoid ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_tt *ttm)h](jc)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj\hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMubjV)}(h h]h }(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\hhhj]hMubjg)}(httm_tt_unpopulateh]jm)}(httm_tt_unpopulateh]httm_tt_unpopulate}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj\hhhj]hMubj)}(h-(struct ttm_device *bdev, struct ttm_tt *ttm)h](j)}(hstruct ttm_device *bdevh](jD)}(hjh]hstruct}(hj/]hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj+]ubjV)}(h h]h }(hj<]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+]ubh)}(hhh]jm)}(h ttm_deviceh]h ttm_device}(hjM]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJ]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjO]modnameN classnameNjj)}j]j)}jj]sbc.ttm_tt_unpopulateasbuh1hhj+]ubjV)}(h h]h }(hjm]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+]ubj)}(hjh]h*}(hj{]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+]ubjm)}(hbdevh]hbdev}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj+]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj']ubj)}(hstruct ttm_tt *ttmh](jD)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj]ubjV)}(h h]h }(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]ubh)}(hhh]jm)}(httm_tth]httm_tt}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]ji]c.ttm_tt_unpopulateasbuh1hhj]ubjV)}(h h]h }(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjm)}(httmh]httm}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj']ubeh}(h]h ]h"]h$]h&]jjuh1jhj\hhhj]hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj\hhhj]hMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1j7hj]hMhj\hhubj)}(hhh]h)}(hfree pages from a ttmh]hfree pages from a ttm}(hj"^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMhj^hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj]hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:^jj:^jjjuh1j2hhhj^ubj)}(hhh](j)}(hB``struct ttm_device *bdev`` the ttm_device this object belongs to h](j)}(h``struct ttm_device *bdev``h]j)}(hjc^h]hstruct ttm_device *bdev}(hje^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja^ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMhj]^ubj )}(hhh]h)}(h%the ttm_device this object belongs toh]h%the ttm_device this object belongs to}(hj|^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx^hMhjy^ubah}(h]h ]h"]h$]h&]uh1j hj]^ubeh}(h]h ]h"]h$]h&]uh1jhjx^hMhjZ^ubj)}(h7``struct ttm_tt *ttm`` Pointer to the ttm_tt structure h](j)}(h``struct ttm_tt *ttm``h]j)}(hj^h]hstruct ttm_tt *ttm}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMhj^ubj )}(hhh]h)}(hPointer to the ttm_tt structureh]hPointer to the ttm_tt structure}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjZ^ubeh}(h]h ]h"]h$]h&]uh1jhj>^ubh)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMhj>^ubh)}(h4Calls the driver method to free all pages from a ttmh]h4Calls the driver method to free all pages from a ttm}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMhj>^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj)}(h.void ttm_tt_mark_for_clear(struct ttm_tt *ttm)h](jc)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj_hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMubjV)}(h h]h }(hj+_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj_hhhj*_hMubjg)}(httm_tt_mark_for_clearh]jm)}(httm_tt_mark_for_clearh]httm_tt_mark_for_clear}(hj=_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9_ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj_hhhj*_hMubj)}(h(struct ttm_tt *ttm)h]j)}(hstruct ttm_tt *ttmh](jD)}(hjh]hstruct}(hjY_hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjU_ubjV)}(h h]h }(hjf_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjU_ubh)}(hhh]jm)}(httm_tth]httm_tt}(hjw_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjt_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjy_modnameN classnameNjj)}j]j)}jj?_sbc.ttm_tt_mark_for_clearasbuh1hhjU_ubjV)}(h h]h }(hj_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjU_ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU_ubjm)}(httmh]httm}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjU_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ_ubah}(h]h ]h"]h$]h&]jjuh1jhj_hhhj*_hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj_hhhj*_hMubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1j7hj*_hMhj_hhubj)}(hhh]h)}(h$Mark pages for clearing on populate.h]h$Mark pages for clearing on populate.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhM hj_hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj*_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1j2hhhj)}(hstruct ttm_backup_flagsh](jD)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj`hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMubjV)}(h h]h }(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj`hhhj`hMubjg)}(httm_backup_flagsh]jm)}(hj`h]httm_backup_flags}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj`hhhj`hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj`hhhj`hMubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1j7hj`hMhj`hhubj)}(hhh]h)}(h!Flags to govern backup behaviour.h]h!Flags to govern backup behaviour.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhMhj`hhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hMubeh}(h]h ](jstructeh"]h$]h&]jjjj`jj`jjjuh1j2hhhj)}(hsstruct ttm_tt *ttm_agp_tt_create(struct ttm_buffer_object *bo, struct agp_bridge_data *bridge, uint32_t page_flags)h](jD)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjahhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:64: ./include/drm/ttm/ttm_tt.hhM>ubjV)}(h h]h }(hjahhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjahhhjahM>ubh)}(hhh]jm)}(httm_tth]httm_tt}(hjahhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j)}jttm_agp_tt_createsbc.ttm_agp_tt_createasbuh1hhjahhhjahM>ubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjahhhjahM>ubj)}(hjh]h*}(hj,bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjahM>ubjg)}(httm_agp_tt_createh]jm)}(hjbh]httm_agp_tt_create}(hj=bhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9bubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjahhhjahM>ubj)}(hS(struct ttm_buffer_object *bo, struct agp_bridge_data *bridge, uint32_t page_flags)h](j)}(hstruct ttm_buffer_object *boh](jD)}(hjh]hstruct}(hjXbhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjTbubjV)}(h h]h }(hjebhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjTbubh)}(hhh]jm)}(httm_buffer_objecth]httm_buffer_object}(hjvbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjsbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxbmodnameN classnameNjj)}j]jbc.ttm_agp_tt_createasbuh1hhjTbubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjTbubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTbubjm)}(hboh]hbo}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjTbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPbubj)}(hstruct agp_bridge_data *bridgeh](jD)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjbubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjbubh)}(hhh]jm)}(hagp_bridge_datah]hagp_bridge_data}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]jbc.ttm_agp_tt_createasbuh1hhjbubjV)}(h h]h }(hjchhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjbubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjm)}(hbridgeh]hbridge}(hjchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPbubj)}(huint32_t page_flagsh](h)}(hhh]jm)}(huint32_th]huint32_t}(hj;chhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8cubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=cmodnameN classnameNjj)}j]jbc.ttm_agp_tt_createasbuh1hhj4cubjV)}(h h]h }(hjYchhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj4cubjm)}(h page_flagsh]h page_flags}(hjgchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4cubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPbubeh}(h]h ]h"]h$]h&]jjuh1jhjahhhjahM>ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjahhhjahM>ubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1j7hjahM>hjahhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjahhhjahM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1j2hhhj)}(h`struct ttm_kmap_iter *ttm_kmap_iter_tt_init(struct ttm_kmap_iter_tt *iter_tt, struct ttm_tt *tt)h](jD)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjdhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:67: ./drivers/gpu/drm/ttm/ttm_tt.chMubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdhhhjdhMubh)}(hhh]jm)}(h ttm_kmap_iterh]h ttm_kmap_iter}(hjdhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]j)}jttm_kmap_iter_tt_initsbc.ttm_kmap_iter_tt_initasbuh1hhjdhhhjdhMubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdhhhjdhMubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjdhMubjg)}(httm_kmap_iter_tt_inith]jm)}(hjdh]httm_kmap_iter_tt_init}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjdhhhjdhMubj)}(h5(struct ttm_kmap_iter_tt *iter_tt, struct ttm_tt *tt)h](j)}(h struct ttm_kmap_iter_tt *iter_tth](jD)}(hjh]hstruct}(hj/ehhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj+eubjV)}(h h]h }(hj)}(h*int ttm_tt_setup_backup(struct ttm_tt *tt)h](jc)}(hinth]hint}(hjghhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjghhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:67: ./drivers/gpu/drm/ttm/ttm_tt.chM!ubjV)}(h h]h }(hj)ghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjghhhj(ghM!ubjg)}(httm_tt_setup_backuph]jm)}(httm_tt_setup_backuph]httm_tt_setup_backup}(hj;ghhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj7gubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjghhhj(ghM!ubj)}(h(struct ttm_tt *tt)h]j)}(hstruct ttm_tt *tth](jD)}(hjh]hstruct}(hjWghhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjSgubjV)}(h h]h }(hjdghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSgubh)}(hhh]jm)}(httm_tth]httm_tt}(hjughhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwgmodnameN classnameNjj)}j]j)}jj=gsbc.ttm_tt_setup_backupasbuh1hhjSgubjV)}(h h]h }(hjghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSgubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSgubjm)}(htth]htt}(hjghhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOgubah}(h]h ]h"]h$]h&]jjuh1jhjghhhj(ghM!ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjghhhj(ghM!ubah}(h]j gah ](jjeh"]h$]h&]jj)jhuh1j7hj(ghM!hjghhubj)}(hhh]h)}(h3Allocate and assign a backup structure for a ttm_tth]h3Allocate and assign a backup structure for a ttm_tt}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:67: ./drivers/gpu/drm/ttm/ttm_tt.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjghhhj(ghM!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1j2hhhjThe ttm_tt for wich to allocate and assign a backup structure.h]h>The ttm_tt for wich to allocate and assign a backup structure.}(hj4hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhMhj1hubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhj0hhMhjhubah}(h]h ]h"]h$]h&]uh1jhjgubh)}(h**Description**h]j)}(hjVhh]h Description}(hjXhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjThubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:67: ./drivers/gpu/drm/ttm/ttm_tt.chMhjgubh)}(hAssign a backup structure to be used for tt backup. This should typically be done at bo creation, to avoid allocations at shrinking time.h]hAssign a backup structure to be used for tt backup. This should typically be done at bo creation, to avoid allocations at shrinking time.}(hjlhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:67: ./drivers/gpu/drm/ttm/ttm_tt.chMhjgubh)}(h **Return**h]j)}(hj}hh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{hubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:67: ./drivers/gpu/drm/ttm/ttm_tt.chMhjgubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:67: ./drivers/gpu/drm/ttm/ttm_tt.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjubh)}(hhh](h)}(hTTM page pool referenceh]hTTM page pool reference}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhhKGubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_pool_type (C struct)c.ttm_pool_typehNtauh1j!hjhhhhNhNubj3)}(hhh](j8)}(h ttm_pool_typeh]j>)}(hstruct ttm_pool_typeh](jD)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKubjV)}(h h]h }(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhhjhhKubjg)}(h ttm_pool_typeh]jm)}(hjhh]h ttm_pool_type}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhhjhhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhhjhhKubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1j7hjhhKhjhhhubj)}(hhh]h)}(hPool for a certain memory typeh]hPool for a certain memory type}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK*hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhKubeh}(h]h ](jstructeh"]h$]h&]jjjj5ijj5ijjjuh1j2hhhjhhNhNubj)}(hX!**Definition**:: struct ttm_pool_type { struct ttm_pool *pool; unsigned int order; enum ttm_caching caching; struct list_head shrinker_list; spinlock_t lock; struct list_head pages; }; **Members** ``pool`` the pool we belong to, might be NULL for the global ones ``order`` the allocation order our pages have ``caching`` the caching type our pages have ``shrinker_list`` our place on the global shrinker list ``lock`` protection of the page list ``pages`` the list of pages in the poolh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjAihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=iubh:}(hj=ihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK.hj9iubjT)}(hstruct ttm_pool_type { struct ttm_pool *pool; unsigned int order; enum ttm_caching caching; struct list_head shrinker_list; spinlock_t lock; struct list_head pages; };h]hstruct ttm_pool_type { struct ttm_pool *pool; unsigned int order; enum ttm_caching caching; struct list_head shrinker_list; spinlock_t lock; struct list_head pages; };}hjZisbah}(h]h ]h"]h$]h&]jjuh1jShU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK0hj9iubh)}(h **Members**h]j)}(hjkih]hMembers}(hjmihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiiubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK9hj9iubj)}(hhh](j)}(hB``pool`` the pool we belong to, might be NULL for the global ones h](j)}(h``pool``h]j)}(hjih]hpool}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK-hjiubj )}(hhh]h)}(h8the pool we belong to, might be NULL for the global onesh]h8the pool we belong to, might be NULL for the global ones}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihK-hjiubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjihK-hjiubj)}(h.``order`` the allocation order our pages have h](j)}(h ``order``h]j)}(hjih]horder}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK.hjiubj )}(hhh]h)}(h#the allocation order our pages haveh]h#the allocation order our pages have}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihK.hjiubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjihK.hjiubj)}(h,``caching`` the caching type our pages have h](j)}(h ``caching``h]j)}(hjih]hcaching}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK/hjiubj )}(hhh]h)}(hthe caching type our pages haveh]hthe caching type our pages have}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhK/hjjubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjjhK/hjiubj)}(h8``shrinker_list`` our place on the global shrinker list h](j)}(h``shrinker_list``h]j)}(hj5jh]h shrinker_list}(hj7jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3jubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK0hj/jubj )}(hhh]h)}(h%our place on the global shrinker listh]h%our place on the global shrinker list}(hjNjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJjhK0hjKjubah}(h]h ]h"]h$]h&]uh1j hj/jubeh}(h]h ]h"]h$]h&]uh1jhjJjhK0hjiubj)}(h%``lock`` protection of the page list h](j)}(h``lock``h]j)}(hjnjh]hlock}(hjpjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjljubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK1hjhjubj )}(hhh]h)}(hprotection of the page listh]hprotection of the page list}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhK1hjjubah}(h]h ]h"]h$]h&]uh1j hjhjubeh}(h]h ]h"]h$]h&]uh1jhjjhK1hjiubj)}(h'``pages`` the list of pages in the poolh](j)}(h ``pages``h]j)}(hjjh]hpages}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK1hjjubj )}(hhh]h)}(hthe list of pages in the poolh]hthe list of pages in the pool}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK2hjjubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhjjhK1hjiubeh}(h]h ]h"]h$]h&]uh1jhj9iubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_pool (C struct) c.ttm_poolhNtauh1j!hjhhhhNhNubj3)}(hhh](j8)}(httm_poolh]j>)}(hstruct ttm_poolh](jD)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK8ubjV)}(h h]h }(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjjhhhjkhK8ubjg)}(httm_poolh]jm)}(hjjh]httm_pool}(hj!khhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjjhhhjkhK8ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjjhhhjkhK8ubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1j7hjkhK8hjjhhubj)}(hhh]h)}(hPool for all caching and ordersh]hPool for all caching and orders}(hjCkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhK?hj@khhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjkhK8ubeh}(h]h ](jstructeh"]h$]h&]jjjj[kjj[kjjjuh1j2hhhjhhNhNubj)}(hX**Definition**:: struct ttm_pool { struct device *dev; int nid; bool use_dma_alloc; bool use_dma32; struct { struct ttm_pool_type orders[NR_PAGE_ORDERS]; } caching[TTM_NUM_CACHING_TYPES]; }; **Members** ``dev`` the device we allocate pages for ``nid`` which numa node to use ``use_dma_alloc`` if coherent DMA allocations should be used ``use_dma32`` if GFP_DMA32 should be used ``caching`` pools for each caching/orderh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjgkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjckubh:}(hjckhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKChj_kubjT)}(hstruct ttm_pool { struct device *dev; int nid; bool use_dma_alloc; bool use_dma32; struct { struct ttm_pool_type orders[NR_PAGE_ORDERS]; } caching[TTM_NUM_CACHING_TYPES]; };h]hstruct ttm_pool { struct device *dev; int nid; bool use_dma_alloc; bool use_dma32; struct { struct ttm_pool_type orders[NR_PAGE_ORDERS]; } caching[TTM_NUM_CACHING_TYPES]; };}hjksbah}(h]h ]h"]h$]h&]jjuh1jShU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKEhj_kubh)}(h **Members**h]j)}(hjkh]hMembers}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKOhj_kubj)}(hhh](j)}(h)``dev`` the device we allocate pages for h](j)}(h``dev``h]j)}(hjkh]hdev}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKBhjkubj )}(hhh]h)}(h the device we allocate pages forh]h the device we allocate pages for}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKBhjkubah}(h]h ]h"]h$]h&]uh1j hjkubeh}(h]h ]h"]h$]h&]uh1jhjkhKBhjkubj)}(h``nid`` which numa node to use h](j)}(h``nid``h]j)}(hjkh]hnid}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKChjkubj )}(hhh]h)}(hwhich numa node to useh]hwhich numa node to use}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKChjkubah}(h]h ]h"]h$]h&]uh1j hjkubeh}(h]h ]h"]h$]h&]uh1jhjkhKChjkubj)}(h=``use_dma_alloc`` if coherent DMA allocations should be used h](j)}(h``use_dma_alloc``h]j)}(hj"lh]h use_dma_alloc}(hj$lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj lubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKDhjlubj )}(hhh]h)}(h*if coherent DMA allocations should be usedh]h*if coherent DMA allocations should be used}(hj;lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7lhKDhj8lubah}(h]h ]h"]h$]h&]uh1j hjlubeh}(h]h ]h"]h$]h&]uh1jhj7lhKDhjkubj)}(h*``use_dma32`` if GFP_DMA32 should be used h](j)}(h ``use_dma32``h]j)}(hj[lh]h use_dma32}(hj]lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYlubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKEhjUlubj )}(hhh]h)}(hif GFP_DMA32 should be usedh]hif GFP_DMA32 should be used}(hjtlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjplhKEhjqlubah}(h]h ]h"]h$]h&]uh1j hjUlubeh}(h]h ]h"]h$]h&]uh1jhjplhKEhjkubj)}(h(``caching`` pools for each caching/orderh](j)}(h ``caching``h]j)}(hjlh]hcaching}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKEhjlubj )}(hhh]h)}(hpools for each caching/orderh]hpools for each caching/order}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:73: ./include/drm/ttm/ttm_pool.hhKFhjlubah}(h]h ]h"]h$]h&]uh1j hjlubeh}(h]h ]h"]h$]h&]uh1jhjlhKEhjkubeh}(h]h ]h"]h$]h&]uh1jhj_kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_pool_alloc (C function)c.ttm_pool_allochNtauh1j!hjhhhhNhNubj3)}(hhh](j8)}(h\int ttm_pool_alloc (struct ttm_pool *pool, struct ttm_tt *tt, struct ttm_operation_ctx *ctx)h]j>)}(h[int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt, struct ttm_operation_ctx *ctx)h](jc)}(hinth]hint}(hjlhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjlhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM(ubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlhhhjlhM(ubjg)}(httm_pool_alloch]jm)}(httm_pool_alloch]httm_pool_alloc}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj mubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjlhhhjlhM(ubj)}(hI(struct ttm_pool *pool, struct ttm_tt *tt, struct ttm_operation_ctx *ctx)h](j)}(hstruct ttm_pool *poolh](jD)}(hjh]hstruct}(hj+mhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj'mubjV)}(h h]h }(hj8mhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj'mubh)}(hhh]jm)}(httm_poolh]httm_pool}(hjImhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjFmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmmodnameN classnameNjj)}j]j)}jjmsbc.ttm_pool_allocasbuh1hhj'mubjV)}(h h]h }(hjimhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj'mubj)}(hjh]h*}(hjwmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'mubjm)}(hpoolh]hpool}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'mubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#mubj)}(hstruct ttm_tt *tth](jD)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjmubjV)}(h h]h }(hjmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjmubh)}(hhh]jm)}(httm_tth]httm_tt}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]jemc.ttm_pool_allocasbuh1hhjmubjV)}(h h]h }(hjmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjm)}(htth]htt}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#mubj)}(hstruct ttm_operation_ctx *ctxh](jD)}(hjh]hstruct}(hj nhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj nubjV)}(h h]h }(hjnhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj nubh)}(hhh]jm)}(httm_operation_ctxh]httm_operation_ctx}(hj+nhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj(nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-nmodnameN classnameNjj)}j]jemc.ttm_pool_allocasbuh1hhj nubjV)}(h h]h }(hjInhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj nubj)}(hjh]h*}(hjWnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj nubjm)}(hctxh]hctx}(hjdnhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj nubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#mubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhjlhM(ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjlhhhjlhM(ubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1j7hjlhM(hjlhhubj)}(hhh]h)}(hFill a ttm_tt objecth]hFill a ttm_tt object}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjlhM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1j2hhhjhhNhNubj)}(hXC**Parameters** ``struct ttm_pool *pool`` ttm_pool to use ``struct ttm_tt *tt`` ttm_tt object to fill ``struct ttm_operation_ctx *ctx`` operation context **Description** Fill the ttm_tt object with pages and also make sure to DMA map them when necessary. **Return** 0 on successe, negative error code otherwise.h](h)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM!hjnubj)}(hhh](j)}(h*``struct ttm_pool *pool`` ttm_pool to use h](j)}(h``struct ttm_pool *pool``h]j)}(hjnh]hstruct ttm_pool *pool}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhjnubj )}(hhh]h)}(httm_pool to useh]httm_pool to use}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjnubj)}(h,``struct ttm_tt *tt`` ttm_tt object to fill h](j)}(h``struct ttm_tt *tt``h]j)}(hjoh]hstruct ttm_tt *tt}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM hjoubj )}(hhh]h)}(httm_tt object to fillh]httm_tt object to fill}(hj!ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjoubah}(h]h ]h"]h$]h&]uh1j hjoubeh}(h]h ]h"]h$]h&]uh1jhjohM hjnubj)}(h4``struct ttm_operation_ctx *ctx`` operation context h](j)}(h!``struct ttm_operation_ctx *ctx``h]j)}(hjAoh]hstruct ttm_operation_ctx *ctx}(hjCohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?oubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM!hj;oubj )}(hhh]h)}(hoperation contexth]hoperation context}(hjZohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVohM!hjWoubah}(h]h ]h"]h$]h&]uh1j hj;oubeh}(h]h ]h"]h$]h&]uh1jhjVohM!hjnubeh}(h]h ]h"]h$]h&]uh1jhjnubh)}(h**Description**h]j)}(hj|oh]h Description}(hj~ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzoubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM#hjnubh)}(hTFill the ttm_tt object with pages and also make sure to DMA map them when necessary.h]hTFill the ttm_tt object with pages and also make sure to DMA map them when necessary.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM#hjnubh)}(h **Return**h]j)}(hjoh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM&hjnubh)}(h-0 on successe, negative error code otherwise.h]h-0 on successe, negative error code otherwise.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM&hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_pool_free (C function)c.ttm_pool_freehNtauh1j!hjhhhhNhNubj3)}(hhh](j8)}(h=void ttm_pool_free (struct ttm_pool *pool, struct ttm_tt *tt)h]j>)}(h)}(hjvoid ttm_pool_init(struct ttm_pool *pool, struct device *dev, int nid, bool use_dma_alloc, bool use_dma32)h](jc)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjrhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM)ubjV)}(h h]h }(hj!rhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrhhhj rhM)ubjg)}(h ttm_pool_inith]jm)}(h ttm_pool_inith]h ttm_pool_init}(hj3rhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/rubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjrhhhj rhM)ubj)}(hX(struct ttm_pool *pool, struct device *dev, int nid, bool use_dma_alloc, bool use_dma32)h](j)}(hstruct ttm_pool *poolh](jD)}(hjh]hstruct}(hjOrhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjKrubjV)}(h h]h }(hj\rhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKrubh)}(hhh]jm)}(httm_poolh]httm_pool}(hjmrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjormodnameN classnameNjj)}j]j)}jj5rsbc.ttm_pool_initasbuh1hhjKrubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKrubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKrubjm)}(hpoolh]hpool}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGrubj)}(hstruct device *devh](jD)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjrubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrubh)}(hhh]jm)}(hdeviceh]hdevice}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]jrc.ttm_pool_initasbuh1hhjrubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrubj)}(hjh]h*}(hj shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjm)}(hdevh]hdev}(hjshhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGrubj)}(hint nidh](jc)}(hinth]hint}(hj1shhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj-subjV)}(h h]h }(hj?shhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-subjm)}(hnidh]hnid}(hjMshhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj-subeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGrubj)}(hbool use_dma_alloch](jc)}(hj h]hbool}(hjfshhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjbsubjV)}(h h]h }(hjsshhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjbsubjm)}(h use_dma_alloch]h use_dma_alloc}(hjshhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGrubj)}(hbool use_dma32h](jc)}(hj h]hbool}(hjshhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjsubjV)}(h h]h }(hjshhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubjm)}(h use_dma32h]h use_dma32}(hjshhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGrubeh}(h]h ]h"]h$]h&]jjuh1jhjrhhhj rhM)ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj rhhhj rhM)ubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1j7hj rhM)hjrhhubj)}(hhh]h)}(hInitialize a poolh]hInitialize a pool}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjrhhhj rhM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1j2hhhjhhNhNubj)}(hXi**Parameters** ``struct ttm_pool *pool`` the pool to initialize ``struct device *dev`` device for DMA allocations and mappings ``int nid`` NUMA node to use for allocations ``bool use_dma_alloc`` true if coherent DMA alloc should be used ``bool use_dma32`` true if GFP_DMA32 should be used **Description** Initialize the pool and its pool types.h](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM#hjsubj)}(hhh](j)}(h1``struct ttm_pool *pool`` the pool to initialize h](j)}(h``struct ttm_pool *pool``h]j)}(hj th]hstruct ttm_pool *pool}(hj"thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM!hjtubj )}(hhh]h)}(hthe pool to initializeh]hthe pool to initialize}(hj9thhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5thM!hj6tubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhj5thM!hjtubj)}(h?``struct device *dev`` device for DMA allocations and mappings h](j)}(h``struct device *dev``h]j)}(hjYth]hstruct device *dev}(hj[thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWtubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM"hjStubj )}(hhh]h)}(h'device for DMA allocations and mappingsh]h'device for DMA allocations and mappings}(hjrthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnthM"hjotubah}(h]h ]h"]h$]h&]uh1j hjStubeh}(h]h ]h"]h$]h&]uh1jhjnthM"hjtubj)}(h-``int nid`` NUMA node to use for allocations h](j)}(h ``int nid``h]j)}(hjth]hint nid}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM#hjtubj )}(hhh]h)}(h NUMA node to use for allocationsh]h NUMA node to use for allocations}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM#hjtubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhjthM#hjtubj)}(hA``bool use_dma_alloc`` true if coherent DMA alloc should be used h](j)}(h``bool use_dma_alloc``h]j)}(hjth]hbool use_dma_alloc}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM$hjtubj )}(hhh]h)}(h)true if coherent DMA alloc should be usedh]h)true if coherent DMA alloc should be used}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM$hjtubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhjthM$hjtubj)}(h4``bool use_dma32`` true if GFP_DMA32 should be used h](j)}(h``bool use_dma32``h]j)}(hjuh]hbool use_dma32}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM%hjtubj )}(hhh]h)}(h true if GFP_DMA32 should be usedh]h true if GFP_DMA32 should be used}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM%hjuubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhjuhM%hjtubeh}(h]h ]h"]h$]h&]uh1jhjsubh)}(h**Description**h]j)}(hj?uh]h Description}(hjAuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=uubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM'hjsubh)}(h'Initialize the pool and its pool types.h]h'Initialize the pool and its pool types.}(hjUuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chM'hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_pool_fini (C function)c.ttm_pool_finihNtauh1j!hjhhhhNhNubj3)}(hhh](j8)}(h*void ttm_pool_fini (struct ttm_pool *pool)h]j>)}(h)void ttm_pool_fini(struct ttm_pool *pool)h](jc)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjuhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMXubjV)}(h h]h }(hjuhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuhhhjuhMXubjg)}(h ttm_pool_finih]jm)}(h ttm_pool_finih]h ttm_pool_fini}(hjuhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjuhhhjuhMXubj)}(h(struct ttm_pool *pool)h]j)}(hstruct ttm_pool *poolh](jD)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjuubjV)}(h h]h }(hjuhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubh)}(hhh]jm)}(httm_poolh]httm_pool}(hjuhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j)}jjusbc.ttm_pool_finiasbuh1hhjuubjV)}(h h]h }(hjuhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubj)}(hjh]h*}(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjm)}(hpoolh]hpool}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubah}(h]h ]h"]h$]h&]jjuh1jhjuhhhjuhMXubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj|uhhhjuhMXubah}(h]jwuah ](jjeh"]h$]h&]jj)jhuh1j7hjuhMXhjyuhhubj)}(hhh]h)}(hCleanup a poolh]hCleanup a pool}(hjDvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMQhjAvhhubah}(h]h ]h"]h$]h&]uh1jhjyuhhhjuhMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\vjj\vjjjuh1j2hhhjhhNhNubj)}(h**Parameters** ``struct ttm_pool *pool`` the pool to clean up **Description** Free all pages in the pool and unregister the types from the global shrinker.h](h)}(h**Parameters**h]j)}(hjfvh]h Parameters}(hjhvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdvubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMUhj`vubj)}(hhh]j)}(h/``struct ttm_pool *pool`` the pool to clean up h](j)}(h``struct ttm_pool *pool``h]j)}(hjvh]hstruct ttm_pool *pool}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMShjvubj )}(hhh]h)}(hthe pool to clean uph]hthe pool to clean up}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMShjvubah}(h]h ]h"]h$]h&]uh1j hjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMShj|vubah}(h]h ]h"]h$]h&]uh1jhj`vubh)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMUhj`vubh)}(hMFree all pages in the pool and unregister the types from the global shrinker.h]hMFree all pages in the pool and unregister the types from the global shrinker.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMUhj`vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.ttm_pool_debugfs (C function)c.ttm_pool_debugfshNtauh1j!hjhhhhNhNubj3)}(hhh](j8)}(h@int ttm_pool_debugfs (struct ttm_pool *pool, struct seq_file *m)h]j>)}(h?int ttm_pool_debugfs(struct ttm_pool *pool, struct seq_file *m)h](jc)}(hinth]hint}(hjwhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjwhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwhhhjwhMubjg)}(httm_pool_debugfsh]jm)}(httm_pool_debugfsh]httm_pool_debugfs}(hj&whhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"wubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjwhhhjwhMubj)}(h+(struct ttm_pool *pool, struct seq_file *m)h](j)}(hstruct ttm_pool *poolh](jD)}(hjh]hstruct}(hjBwhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj>wubjV)}(h h]h }(hjOwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>wubh)}(hhh]jm)}(httm_poolh]httm_pool}(hj`whhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbwmodnameN classnameNjj)}j]j)}jj(wsbc.ttm_pool_debugfsasbuh1hhj>wubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>wubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>wubjm)}(hpoolh]hpool}(hjwhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:wubj)}(hstruct seq_file *mh](jD)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjwubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubh)}(hhh]jm)}(hseq_fileh]hseq_file}(hjwhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]j|wc.ttm_pool_debugfsasbuh1hhjwubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjm)}(hmh]hm}(hj xhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:wubeh}(h]h ]h"]h$]h&]jjuh1jhjwhhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjvhhhjwhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1j7hjwhMhjvhhubj)}(hhh]h)}(h Debugfs dump function for a poolh]h Debugfs dump function for a pool}(hj5xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhj2xhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjwhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMxjjMxjjjuh1j2hhhjhhNhNubj)}(h**Parameters** ``struct ttm_pool *pool`` the pool to dump the information for ``struct seq_file *m`` seq_file to dump to **Description** Make a debugfs dump with the per pool and global information.h](h)}(h**Parameters**h]j)}(hjWxh]h Parameters}(hjYxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUxubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhjQxubj)}(hhh](j)}(h?``struct ttm_pool *pool`` the pool to dump the information for h](j)}(h``struct ttm_pool *pool``h]j)}(hjvxh]hstruct ttm_pool *pool}(hjxxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtxubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhjpxubj )}(hhh]h)}(h$the pool to dump the information forh]h$the pool to dump the information for}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjxubah}(h]h ]h"]h$]h&]uh1j hjpxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjmxubj)}(h+``struct seq_file *m`` seq_file to dump to h](j)}(h``struct seq_file *m``h]j)}(hjxh]hstruct seq_file *m}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhjxubj )}(hhh]h)}(hseq_file to dump toh]hseq_file to dump to}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjxubah}(h]h ]h"]h$]h&]uh1j hjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjmxubeh}(h]h ]h"]h$]h&]uh1jhjQxubh)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhjQxubh)}(h=Make a debugfs dump with the per pool and global information.h]h=Make a debugfs dump with the per pool and global information.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:76: ./drivers/gpu/drm/ttm/ttm_pool.chMhjQxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubeh}(h]ttm-page-pool-referenceah ]h"]ttm page pool referenceah$]h&]uh1hhhhhhhhKGubeh}(h]!the-translation-table-manager-ttmah ]h"]#the translation table manager (ttm)ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h$The Graphics Execution Manager (GEM)h]h$The Graphics Execution Manager (GEM)}(hj)yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&yhhhhhKPubh)}(hXcThe GEM design approach has resulted in a memory manager that doesn't provide full coverage of all (or even all common) use cases in its userspace or kernel API. GEM exposes a set of standard memory-related operations to userspace and a set of helper functions to drivers, and let drivers implement hardware-specific operations with their own private API.h]hXeThe GEM design approach has resulted in a memory manager that doesn’t provide full coverage of all (or even all common) use cases in its userspace or kernel API. GEM exposes a set of standard memory-related operations to userspace and a set of helper functions to drivers, and let drivers implement hardware-specific operations with their own private API.}(hj7yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhj&yhhubh)}(hXpThe GEM userspace API is described in the `GEM - the Graphics Execution Manager `__ article on LWN. While slightly outdated, the document provides a good overview of the GEM API principles. Buffer allocation and read and write operations, described as part of the common GEM API, are currently implemented using driver-specific ioctls.h](h*The GEM userspace API is described in the }(hjEyhhhNhNubh reference)}(hJ`GEM - the Graphics Execution Manager `__h]h$GEM - the Graphics Execution Manager}(hjOyhhhNhNubah}(h]h ]h"]h$]h&]name$GEM - the Graphics Execution Managerrefurihttp://lwn.net/Articles/283798/uh1jMyhjEyubh article on LWN. While slightly outdated, the document provides a good overview of the GEM API principles. Buffer allocation and read and write operations, described as part of the common GEM API, are currently implemented using driver-specific ioctls.}(hjEyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKYhj&yhhubh)}(hX8GEM is data-agnostic. It manages abstract buffer objects without knowing what individual buffers contain. APIs that require knowledge of buffer contents or purpose, such as buffer allocation or synchronization primitives, are thus outside of the scope of GEM and must be implemented using driver-specific ioctls.h]hX8GEM is data-agnostic. It manages abstract buffer objects without knowing what individual buffers contain. APIs that require knowledge of buffer contents or purpose, such as buffer allocation or synchronization primitives, are thus outside of the scope of GEM and must be implemented using driver-specific ioctls.}(hjkyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hj&yhhubh)}(h8On a fundamental level, GEM involves several operations:h]h8On a fundamental level, GEM involves several operations:}(hjyyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhj&yhhubh bullet_list)}(hhh](h list_item)}(hMemory allocation and freeingh]h)}(hjyh]hMemory allocation and freeing}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjyubah}(h]h ]h"]h$]h&]uh1jyhjyhhhhhNubjy)}(hCommand executionh]h)}(hjyh]hCommand execution}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihjyubah}(h]h ]h"]h$]h&]uh1jyhjyhhhhhNubjy)}(h.Aperture management at command execution time h]h)}(h-Aperture management at command execution timeh]h-Aperture management at command execution time}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhjyubah}(h]h ]h"]h$]h&]uh1jyhjyhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jyhhhKhhj&yhhubh)}(hBuffer object allocation is relatively straightforward and largely provided by Linux's shmem layer, which provides memory to back each object.h]hBuffer object allocation is relatively straightforward and largely provided by Linux’s shmem layer, which provides memory to back each object.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKlhj&yhhubh)}(hDevice-specific operations, such as command execution, pinning, buffer read & write, mapping, and domain ownership transfers are left to driver-specific ioctls.h]hDevice-specific operations, such as command execution, pinning, buffer read & write, mapping, and domain ownership transfers are left to driver-specific ioctls.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphj&yhhubh)}(hhh](h)}(hGEM Initializationh]hGEM Initialization}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhhhhhKuubh)}(hXYDrivers that use GEM must set the DRIVER_GEM bit in the struct :c:type:`struct drm_driver ` driver_features field. The DRM core will then automatically initialize the GEM core before calling the load operation. Behind the scene, this will create a DRM Memory Manager object which provides an address space pool for object allocation.h](h?Drivers that use GEM must set the DRIVER_GEM bit in the struct }(hj zhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjzh]hstruct drm_driver}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhhhKwhj zubh driver_features field. The DRM core will then automatically initialize the GEM core before calling the load operation. Behind the scene, this will create a DRM Memory Manager object which provides an address space pool for object allocation.}(hj zhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKwhjyhhubh)}(hXIn a KMS configuration, drivers need to allocate and initialize a command ring buffer following core GEM initialization if required by the hardware. UMA devices usually have what is called a "stolen" memory region, which provides space for the initial framebuffer and large, contiguous memory regions required by the device. This space is typically not managed by GEM, and must be initialized separately into its own DRM MM object.h]hXIn a KMS configuration, drivers need to allocate and initialize a command ring buffer following core GEM initialization if required by the hardware. UMA devices usually have what is called a “stolen” memory region, which provides space for the initial framebuffer and large, contiguous memory regions required by the device. This space is typically not managed by GEM, and must be initialized separately into its own DRM MM object.}(hj:zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjyhhubeh}(h]gem-initializationah ]h"]gem initializationah$]h&]uh1hhj&yhhhhhKuubh)}(hhh](h)}(hGEM Objects Creationh]hGEM Objects Creation}(hjSzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPzhhhhhKubh)}(hkGEM splits creation of GEM objects and allocation of the memory that backs them in two distinct operations.h]hkGEM splits creation of GEM objects and allocation of the memory that backs them in two distinct operations.}(hjazhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjPzhhubh)}(hX:GEM objects are represented by an instance of struct :c:type:`struct drm_gem_object `. Drivers usually need to extend GEM objects with private information and thus create a driver-specific GEM object structure type that embeds an instance of struct :c:type:`struct drm_gem_object `.h](h5GEM objects are represented by an instance of struct }(hjozhhhNhNubh)}(h0:c:type:`struct drm_gem_object `h]j)}(hjyzh]hstruct drm_gem_object}(hj{zhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjwzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhhhKhjozubh. Drivers usually need to extend GEM objects with private information and thus create a driver-specific GEM object structure type that embeds an instance of struct }(hjozhhhNhNubh)}(h0:c:type:`struct drm_gem_object `h]j)}(hjzh]hstruct drm_gem_object}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhhhKhjozubh.}(hjozhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjPzhhubh)}(hXMTo create a GEM object, a driver allocates memory for an instance of its specific GEM object type and initializes the embedded struct :c:type:`struct drm_gem_object ` with a call to drm_gem_object_init(). The function takes a pointer to the DRM device, a pointer to the GEM object and the buffer object size in bytes.h](hTo create a GEM object, a driver allocates memory for an instance of its specific GEM object type and initializes the embedded struct }(hjzhhhNhNubh)}(h0:c:type:`struct drm_gem_object `h]j)}(hjzh]hstruct drm_gem_object}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhhhKhjzubh with a call to drm_gem_object_init(). The function takes a pointer to the DRM device, a pointer to the GEM object and the buffer object size in bytes.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjPzhhubh)}(hXfGEM uses shmem to allocate anonymous pageable memory. drm_gem_object_init() will create an shmfs file of the requested size and store it into the struct :c:type:`struct drm_gem_object ` filp field. The memory is used as either main storage for the object when the graphics hardware uses system memory directly or as a backing store otherwise.h](hGEM uses shmem to allocate anonymous pageable memory. drm_gem_object_init() will create an shmfs file of the requested size and store it into the struct }(hjzhhhNhNubh)}(h0:c:type:`struct drm_gem_object `h]j)}(hjzh]hstruct drm_gem_object}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhhhKhjzubh filp field. The memory is used as either main storage for the object when the graphics hardware uses system memory directly or as a backing store otherwise.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjPzhhubh)}(hXDrivers are responsible for the actual physical pages allocation by calling shmem_read_mapping_page_gfp() for each page. Note that they can decide to allocate pages when initializing the GEM object, or to delay allocation until the memory is needed (for instance when a page fault occurs as a result of a userspace memory access or when the driver needs to start a DMA transfer involving the memory).h]hXDrivers are responsible for the actual physical pages allocation by calling shmem_read_mapping_page_gfp() for each page. Note that they can decide to allocate pages when initializing the GEM object, or to delay allocation until the memory is needed (for instance when a page fault occurs as a result of a userspace memory access or when the driver needs to start a DMA transfer involving the memory).}(hj%{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjPzhhubh)}(hXAnonymous pageable memory allocation is not always desired, for instance when the hardware requires physically contiguous system memory as is often the case in embedded devices. Drivers can create GEM objects with no shmfs backing (called private GEM objects) by initializing them with a call to drm_gem_private_object_init() instead of drm_gem_object_init(). Storage for private GEM objects must be managed by drivers.h]hXAnonymous pageable memory allocation is not always desired, for instance when the hardware requires physically contiguous system memory as is often the case in embedded devices. Drivers can create GEM objects with no shmfs backing (called private GEM objects) by initializing them with a call to drm_gem_private_object_init() instead of drm_gem_object_init(). Storage for private GEM objects must be managed by drivers.}(hj3{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjPzhhubeh}(h]gem-objects-creationah ]h"]gem objects creationah$]h&]uh1hhj&yhhhhhKubh)}(hhh](h)}(hGEM Objects Lifetimeh]hGEM Objects Lifetime}(hjL{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI{hhhhhKubh)}(hAll GEM objects are reference-counted by the GEM core. References can be acquired and release by calling drm_gem_object_get() and drm_gem_object_put() respectively.h]hAll GEM objects are reference-counted by the GEM core. References can be acquired and release by calling drm_gem_object_get() and drm_gem_object_put() respectively.}(hjZ{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjI{hhubh)}(hXWhen the last reference to a GEM object is released the GEM core calls the :c:type:`struct drm_gem_object_funcs ` free operation. That operation is mandatory for GEM-enabled drivers and must free the GEM object and all associated resources.h](hKWhen the last reference to a GEM object is released the GEM core calls the }(hjh{hhhNhNubh)}(h8:c:type:`struct drm_gem_object_funcs `h]j)}(hjr{h]hstruct drm_gem_object_funcs}(hjt{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjp{ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3gem_object_funcsuh1hhhhKhjh{ubh free operation. That operation is mandatory for GEM-enabled drivers and must free the GEM object and all associated resources.}(hjh{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjI{hhubh)}(hvoid (\*free) (struct drm_gem_object \*obj); Drivers are responsible for freeing all GEM object resources. This includes the resources created by the GEM core, which need to be released with drm_gem_object_release().h]hvoid (*free) (struct drm_gem_object *obj); Drivers are responsible for freeing all GEM object resources. This includes the resources created by the GEM core, which need to be released with drm_gem_object_release().}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjI{hhubeh}(h]gem-objects-lifetimeah ]h"]gem objects lifetimeah$]h&]uh1hhj&yhhhhhKubh)}(hhh](h)}(hGEM Objects Namingh]hGEM Objects Naming}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hhhhhKubh)}(hCommunication between userspace and the kernel refers to GEM objects using local handles, global names or, more recently, file descriptors. All of those are 32-bit integer values; the usual Linux kernel limits apply to the file descriptors.h]hCommunication between userspace and the kernel refers to GEM objects using local handles, global names or, more recently, file descriptors. All of those are 32-bit integer values; the usual Linux kernel limits apply to the file descriptors.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubh)}(hX0GEM handles are local to a DRM file. Applications get a handle to a GEM object through a driver-specific ioctl, and can use that handle to refer to the GEM object in other standard or driver-specific ioctls. Closing a DRM file handle frees all its GEM handles and dereferences the associated GEM objects.h]hX0GEM handles are local to a DRM file. Applications get a handle to a GEM object through a driver-specific ioctl, and can use that handle to refer to the GEM object in other standard or driver-specific ioctls. Closing a DRM file handle frees all its GEM handles and dereferences the associated GEM objects.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubh)}(hXtTo create a handle for a GEM object drivers call drm_gem_handle_create(). The function takes a pointer to the DRM file and the GEM object and returns a locally unique handle. When the handle is no longer needed drivers delete it with a call to drm_gem_handle_delete(). Finally the GEM object associated with a handle can be retrieved by a call to drm_gem_object_lookup().h]hXtTo create a handle for a GEM object drivers call drm_gem_handle_create(). The function takes a pointer to the DRM file and the GEM object and returns a locally unique handle. When the handle is no longer needed drivers delete it with a call to drm_gem_handle_delete(). Finally the GEM object associated with a handle can be retrieved by a call to drm_gem_object_lookup().}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubh)}(hX;Handles don't take ownership of GEM objects, they only take a reference to the object that will be dropped when the handle is destroyed. To avoid leaking GEM objects, drivers must make sure they drop the reference(s) they own (such as the initial reference taken at object creation time) as appropriate, without any special consideration for the handle. For example, in the particular case of combined GEM object and handle creation in the implementation of the dumb_create operation, drivers must drop the initial reference to the GEM object before returning the handle.h]hX=Handles don’t take ownership of GEM objects, they only take a reference to the object that will be dropped when the handle is destroyed. To avoid leaking GEM objects, drivers must make sure they drop the reference(s) they own (such as the initial reference taken at object creation time) as appropriate, without any special consideration for the handle. For example, in the particular case of combined GEM object and handle creation in the implementation of the dumb_create operation, drivers must drop the initial reference to the GEM object before returning the handle.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubh)}(hXGEM names are similar in purpose to handles but are not local to DRM files. They can be passed between processes to reference a GEM object globally. Names can't be used directly to refer to objects in the DRM API, applications must convert handles to names and names to handles using the DRM_IOCTL_GEM_FLINK and DRM_IOCTL_GEM_OPEN ioctls respectively. The conversion is handled by the DRM core without any driver-specific support.h]hXGEM names are similar in purpose to handles but are not local to DRM files. They can be passed between processes to reference a GEM object globally. Names can’t be used directly to refer to objects in the DRM API, applications must convert handles to names and names to handles using the DRM_IOCTL_GEM_FLINK and DRM_IOCTL_GEM_OPEN ioctls respectively. The conversion is handled by the DRM core without any driver-specific support.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubh)}(hXGEM also supports buffer sharing with dma-buf file descriptors through PRIME. GEM-based drivers must use the provided helpers functions to implement the exporting and importing correctly. See ?. Since sharing file descriptors is inherently more secure than the easily guessable and global GEM names it is the preferred buffer sharing mechanism. Sharing buffers through GEM names is only supported for legacy userspace. Furthermore PRIME also allows cross-device buffer sharing since it is based on dma-bufs.h]hXGEM also supports buffer sharing with dma-buf file descriptors through PRIME. GEM-based drivers must use the provided helpers functions to implement the exporting and importing correctly. See ?. Since sharing file descriptors is inherently more secure than the easily guessable and global GEM names it is the preferred buffer sharing mechanism. Sharing buffers through GEM names is only supported for legacy userspace. Furthermore PRIME also allows cross-device buffer sharing since it is based on dma-bufs.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubeh}(h]gem-objects-namingah ]h"]gem objects namingah$]h&]uh1hhj&yhhhhhKubh)}(hhh](h)}(hGEM Objects Mappingh]hGEM Objects Mapping}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hhhhhKubh)}(hXDBecause mapping operations are fairly heavyweight GEM favours read/write-like access to buffers, implemented through driver-specific ioctls, over mapping buffers to userspace. However, when random access to the buffer is needed (to perform software rendering for instance), direct access to the object can be more efficient.h]hXDBecause mapping operations are fairly heavyweight GEM favours read/write-like access to buffers, implemented through driver-specific ioctls, over mapping buffers to userspace. However, when random access to the buffer is needed (to perform software rendering for instance), direct access to the object can be more efficient.}(hj-|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj|hhubh)}(hXThe mmap system call can't be used directly to map GEM objects, as they don't have their own file handle. Two alternative methods currently co-exist to map GEM objects to userspace. The first method uses a driver-specific ioctl to perform the mapping operation, calling do_mmap() under the hood. This is often considered dubious, seems to be discouraged for new GEM-enabled drivers, and will thus not be described here.h]hXThe mmap system call can’t be used directly to map GEM objects, as they don’t have their own file handle. Two alternative methods currently co-exist to map GEM objects to userspace. The first method uses a driver-specific ioctl to perform the mapping operation, calling do_mmap() under the hood. This is often considered dubious, seems to be discouraged for new GEM-enabled drivers, and will thus not be described here.}(hj;|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj|hhubh)}(hXThe second method uses the mmap system call on the DRM file handle. void \*mmap(void \*addr, size_t length, int prot, int flags, int fd, off_t offset); DRM identifies the GEM object to be mapped by a fake offset passed through the mmap offset argument. Prior to being mapped, a GEM object must thus be associated with a fake offset. To do so, drivers must call drm_gem_create_mmap_offset() on the object.h]hXThe second method uses the mmap system call on the DRM file handle. void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); DRM identifies the GEM object to be mapped by a fake offset passed through the mmap offset argument. Prior to being mapped, a GEM object must thus be associated with a fake offset. To do so, drivers must call drm_gem_create_mmap_offset() on the object.}(hjI|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj|hhubh)}(hOnce allocated, the fake offset value must be passed to the application in a driver-specific way and can then be used as the mmap offset argument.h]hOnce allocated, the fake offset value must be passed to the application in a driver-specific way and can then be used as the mmap offset argument.}(hjW|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj|hhubh)}(hXThe GEM core provides a helper method drm_gem_mmap() to handle object mapping. The method can be set directly as the mmap file operation handler. It will look up the GEM object based on the offset value and set the VMA operations to the :c:type:`struct drm_driver ` gem_vm_ops field. Note that drm_gem_mmap() doesn't map memory to userspace, but relies on the driver-provided fault handler to map pages individually.h](hThe GEM core provides a helper method drm_gem_mmap() to handle object mapping. The method can be set directly as the mmap file operation handler. It will look up the GEM object based on the offset value and set the VMA operations to the }(hje|hhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjo|h]hstruct drm_driver}(hjq|hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjm|ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhhhM hje|ubh gem_vm_ops field. Note that drm_gem_mmap() doesn’t map memory to userspace, but relies on the driver-provided fault handler to map pages individually.}(hje|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hj|hhubh)}(hTo use drm_gem_mmap(), drivers must fill the struct :c:type:`struct drm_driver ` gem_vm_ops field with a pointer to VM operations.h](h4To use drm_gem_mmap(), drivers must fill the struct }(hj|hhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hj|h]hstruct drm_driver}(hj|hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhhhMhj|ubh2 gem_vm_ops field with a pointer to VM operations.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj|hhubh)}(hThe VM operations is a :c:type:`struct vm_operations_struct ` made up of several fields, the more interesting ones being:h](hThe VM operations is a }(hj|hhhNhNubh)}(h<:c:type:`struct vm_operations_struct `h]j)}(hj|h]hstruct vm_operations_struct}(hj|hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3vm_operations_structuh1hhhhMhj|ubh< made up of several fields, the more interesting ones being:}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj|hhubjT)}(hstruct vm_operations_struct { void (*open)(struct vm_area_struct * area); void (*close)(struct vm_area_struct * area); vm_fault_t (*fault)(struct vm_fault *vmf); };h]hstruct vm_operations_struct { void (*open)(struct vm_area_struct * area); void (*close)(struct vm_area_struct * area); vm_fault_t (*fault)(struct vm_fault *vmf); };}hj|sbah}(h]h ]h"]h$]h&]jjforcelanguagejhighlight_args}uh1jShhhMhj|hhubh)}(hThe open and close operations must update the GEM object reference count. Drivers can use the drm_gem_vm_open() and drm_gem_vm_close() helper functions directly as open and close handlers.h]hThe open and close operations must update the GEM object reference count. Drivers can use the drm_gem_vm_open() and drm_gem_vm_close() helper functions directly as open and close handlers.}(hj }hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM!hj|hhubh)}(hXThe fault operation handler is responsible for mapping individual pages to userspace when a page fault occurs. Depending on the memory allocation scheme, drivers can allocate pages at fault time, or can decide to allocate memory for the GEM object at the time the object is created.h]hXThe fault operation handler is responsible for mapping individual pages to userspace when a page fault occurs. Depending on the memory allocation scheme, drivers can allocate pages at fault time, or can decide to allocate memory for the GEM object at the time the object is created.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM%hj|hhubh)}(hDrivers that want to map the GEM object upfront instead of handling page faults can implement their own mmap file operation handler.h]hDrivers that want to map the GEM object upfront instead of handling page faults can implement their own mmap file operation handler.}(hj&}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM+hj|hhubh)}(hFor platforms without MMU the GEM core provides a helper method drm_gem_dma_get_unmapped_area(). The mmap() routines will call this to get a proposed address for the mapping.h]hFor platforms without MMU the GEM core provides a helper method drm_gem_dma_get_unmapped_area(). The mmap() routines will call this to get a proposed address for the mapping.}(hj4}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM.hj|hhubh)}(hTo use drm_gem_dma_get_unmapped_area(), drivers must fill the struct :c:type:`struct file_operations ` get_unmapped_area field with a pointer on drm_gem_dma_get_unmapped_area().h](hETo use drm_gem_dma_get_unmapped_area(), drivers must fill the struct }(hjB}hhhNhNubh)}(h2:c:type:`struct file_operations `h]j)}(hjL}h]hstruct file_operations}(hjN}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjJ}ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3file_operationsuh1hhhhM2hjB}ubhK get_unmapped_area field with a pointer on drm_gem_dma_get_unmapped_area().}(hjB}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM2hj|hhubh)}(hmMore detailed information about get_unmapped_area can be found in Documentation/admin-guide/mm/nommu-mmap.rsth]hmMore detailed information about get_unmapped_area can be found in Documentation/admin-guide/mm/nommu-mmap.rst}(hjs}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM6hj|hhubeh}(h]gem-objects-mappingah ]h"]gem objects mappingah$]h&]uh1hhj&yhhhhhKubh)}(hhh](h)}(hMemory Coherencyh]hMemory Coherency}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hhhhhM:ubh)}(hX2When mapped to the device or used in a command buffer, backing pages for an object are flushed to memory and marked write combined so as to be coherent with the GPU. Likewise, if the CPU accesses an object after the GPU has finished rendering to the object, then the object must be made coherent with the CPU's view of memory, usually involving GPU cache flushing of various kinds. This core CPU<->GPU coherency management is provided by a device-specific ioctl, which evaluates an object's current domain and performs any necessary flushing or synchronization to put the object into the desired coherency domain (note that the object may be busy, i.e. an active render target; in that case, setting the domain blocks the client and waits for rendering to complete before performing any necessary flushing operations).h]hX6When mapped to the device or used in a command buffer, backing pages for an object are flushed to memory and marked write combined so as to be coherent with the GPU. Likewise, if the CPU accesses an object after the GPU has finished rendering to the object, then the object must be made coherent with the CPU’s view of memory, usually involving GPU cache flushing of various kinds. This core CPU<->GPU coherency management is provided by a device-specific ioctl, which evaluates an object’s current domain and performs any necessary flushing or synchronization to put the object into the desired coherency domain (note that the object may be busy, i.e. an active render target; in that case, setting the domain blocks the client and waits for rendering to complete before performing any necessary flushing operations).}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM<hj}hhubeh}(h]memory-coherencyah ]h"]memory coherencyah$]h&]uh1hhj&yhhhhhM:ubh)}(hhh](h)}(hCommand Executionh]hCommand Execution}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hhhhhMJubh)}(hX,Perhaps the most important GEM function for GPU devices is providing a command execution interface to clients. Client programs construct command buffers containing references to previously allocated memory objects, and then submit them to GEM. At that point, GEM takes care to bind all the objects into the GTT, execute the buffer, and provide necessary synchronization between clients accessing the same buffers. This often involves evicting some objects from the GTT and re-binding others (a fairly expensive operation), and providing relocation support which hides fixed GTT offsets from clients. Clients must take care not to submit command buffers that reference more objects than can fit in the GTT; otherwise, GEM will reject them and no rendering will occur. Similarly, if several objects in the buffer require fence registers to be allocated for correct rendering (e.g. 2D blits on pre-965 chips), care must be taken not to require more fence registers than are available to the client. Such resource management should be abstracted from the client in libdrm.h]hX,Perhaps the most important GEM function for GPU devices is providing a command execution interface to clients. Client programs construct command buffers containing references to previously allocated memory objects, and then submit them to GEM. At that point, GEM takes care to bind all the objects into the GTT, execute the buffer, and provide necessary synchronization between clients accessing the same buffers. This often involves evicting some objects from the GTT and re-binding others (a fairly expensive operation), and providing relocation support which hides fixed GTT offsets from clients. Clients must take care not to submit command buffers that reference more objects than can fit in the GTT; otherwise, GEM will reject them and no rendering will occur. Similarly, if several objects in the buffer require fence registers to be allocated for correct rendering (e.g. 2D blits on pre-965 chips), care must be taken not to require more fence registers than are available to the client. Such resource management should be abstracted from the client in libdrm.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMLhj}hhubeh}(h]command-executionah ]h"]command executionah$]h&]uh1hhj&yhhhhhMJubh)}(hhh](h)}(hGEM Function Referenceh]hGEM Function Reference}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hhhhhM^ubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_object_status (C enum)c.drm_gem_object_statushNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hdrm_gem_object_statush]j>)}(henum drm_gem_object_statush](jD)}(hjGh]henum}(hj~hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj}hhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKubjV)}(h h]h }(hj~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}hhhj~hKubjg)}(hdrm_gem_object_statush]jm)}(hj}h]hdrm_gem_object_status}(hj!~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj}hhhj~hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj}hhhj~hKubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1j7hj~hKhj}hhubj)}(hhh]h)}(h,bitmask of object state for fdinfo reportingh]h,bitmask of object state for fdinfo reporting}(hjC~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK1hj@~hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj~hKubeh}(h]h ](jenumeh"]h$]h&]jjjj[~jj[~jjjuh1j2hhhj}hNhNubj)}(h**Constants** ``DRM_GEM_OBJECT_RESIDENT`` object is resident in memory (ie. not unpinned) ``DRM_GEM_OBJECT_PURGEABLE`` object marked as purgeable by userspace ``DRM_GEM_OBJECT_ACTIVE`` object is currently used by an active submissionh](h)}(h **Constants**h]j)}(hje~h]h Constants}(hjg~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc~ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK5hj_~ubj)}(hhh](j)}(hL``DRM_GEM_OBJECT_RESIDENT`` object is resident in memory (ie. not unpinned) h](j)}(h``DRM_GEM_OBJECT_RESIDENT``h]j)}(hj~h]hDRM_GEM_OBJECT_RESIDENT}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK8hj~~ubj )}(hhh]h)}(h/object is resident in memory (ie. not unpinned)h]h/object is resident in memory (ie. not unpinned)}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hK8hj~ubah}(h]h ]h"]h$]h&]uh1j hj~~ubeh}(h]h ]h"]h$]h&]uh1jhj~hK8hj{~ubj)}(hE``DRM_GEM_OBJECT_PURGEABLE`` object marked as purgeable by userspace h](j)}(h``DRM_GEM_OBJECT_PURGEABLE``h]j)}(hj~h]hDRM_GEM_OBJECT_PURGEABLE}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK;hj~ubj )}(hhh]h)}(h'object marked as purgeable by userspaceh]h'object marked as purgeable by userspace}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hK;hj~ubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hK;hj{~ubj)}(hJ``DRM_GEM_OBJECT_ACTIVE`` object is currently used by an active submissionh](j)}(h``DRM_GEM_OBJECT_ACTIVE``h]j)}(hj~h]hDRM_GEM_OBJECT_ACTIVE}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK=hj~ubj )}(hhh]h)}(h0object is currently used by an active submissionh]h0object is currently used by an active submission}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK>hj ubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhj hK=hj{~ubeh}(h]h ]h"]h$]h&]uh1jhj_~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubh)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKAhj}hhubh)}(hXWBitmask of status used for fdinfo memory stats, see :c:type:`drm_gem_object_funcs.status ` and drm_show_fdinfo(). Note that an object can report DRM_GEM_OBJECT_PURGEABLE and be active or not resident, in which case drm_show_fdinfo() will not account for it as purgeable. So drivers do not need to check if the buffer is idle and resident to return this bit, i.e. userspace can mark a buffer as purgeable even while it is still busy on the GPU. It will not get reported in the puregeable stats until it becomes idle. The status gem object func does not need to consider this.h](h4Bitmask of status used for fdinfo memory stats, see }(hjOhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.status `h]j)}(hjYh]hdrm_gem_object_funcs.status}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK6hjOubhX and drm_show_fdinfo(). Note that an object can report DRM_GEM_OBJECT_PURGEABLE and be active or not resident, in which case drm_show_fdinfo() will not account for it as purgeable. So drivers do not need to check if the buffer is idle and resident to return this bit, i.e. userspace can mark a buffer as purgeable even while it is still busy on the GPU. It will not get reported in the puregeable stats until it becomes idle. The status gem object func does not need to consider this.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhK6hj}hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_object_funcs (C struct)c.drm_gem_object_funcshNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hdrm_gem_object_funcsh]j>)}(hstruct drm_gem_object_funcsh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKBubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKBubjg)}(hdrm_gem_object_funcsh]jm)}(hjh]hdrm_gem_object_funcs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKBubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKBubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKBhjhhubj)}(hhh]h)}(hGEM object functionsh]hGEM object functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKFhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKBubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hX-**Definition**:: struct drm_gem_object_funcs { void (*free)(struct drm_gem_object *obj); int (*open)(struct drm_gem_object *obj, struct drm_file *file); void (*close)(struct drm_gem_object *obj, struct drm_file *file); void (*print_info)(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj); struct dma_buf *(*export)(struct drm_gem_object *obj, int flags); int (*pin)(struct drm_gem_object *obj); void (*unpin)(struct drm_gem_object *obj); struct sg_table *(*get_sg_table)(struct drm_gem_object *obj); int (*vmap)(struct drm_gem_object *obj, struct iosys_map *map); void (*vunmap)(struct drm_gem_object *obj, struct iosys_map *map); int (*mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma); int (*evict)(struct drm_gem_object *obj); enum drm_gem_object_status (*status)(struct drm_gem_object *obj); size_t (*rss)(struct drm_gem_object *obj); const struct vm_operations_struct *vm_ops; }; **Members** ``free`` Deconstructor for drm_gem_objects. This callback is mandatory. ``open`` Called upon GEM handle creation. This callback is optional. ``close`` Called upon GEM handle release. This callback is optional. ``print_info`` If driver subclasses struct :c:type:`drm_gem_object`, it can implement this optional hook for printing additional driver specific info. drm_printf_indent() should be used in the callback passing it the indent argument. This callback is called from drm_gem_print_info(). This callback is optional. ``export`` Export backing buffer as a :c:type:`dma_buf`. If this is not set drm_gem_prime_export() is used. This callback is optional. ``pin`` Pin backing buffer in memory. Used by the drm_gem_map_attach() helper. This callback is optional. ``unpin`` Unpin backing buffer. Used by the drm_gem_map_detach() helper. This callback is optional. ``get_sg_table`` Returns a Scatter-Gather table representation of the buffer. Used when exporting a buffer by the drm_gem_map_dma_buf() helper. Releasing is done by calling dma_unmap_sg_attrs() and sg_free_table() in drm_gem_unmap_buf(), therefore these helpers and this callback here cannot be used for sg tables pointing at driver private memory ranges. See also drm_prime_pages_to_sg(). ``vmap`` Returns a virtual address for the buffer. Used by the drm_gem_dmabuf_vmap() helper. This callback is optional. ``vunmap`` Releases the address previously returned by **vmap**. Used by the drm_gem_dmabuf_vunmap() helper. This callback is optional. ``mmap`` Handle mmap() of the gem object, setup vma accordingly. This callback is optional. The callback is used by both drm_gem_mmap_obj() and drm_gem_prime_mmap(). When **mmap** is present **vm_ops** is not used, the **mmap** callback must set vma->vm_ops instead. ``evict`` Evicts gem object out from memory. Used by the drm_gem_object_evict() helper. Returns 0 on success, -errno otherwise. This callback is optional. ``status`` The optional status callback can return additional object state which determines which stats the object is counted against. The callback is called under table_lock. Racing against object status change is "harmless", and the callback can expect to not race against object destruction. Called by drm_show_memory_stats(). ``rss`` Return resident size of the object in physical memory. Called by drm_show_memory_stats(). ``vm_ops`` Virtual memory operations used with mmap. This is optional but necessary for mmap support.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKJhjubjT)}(hXstruct drm_gem_object_funcs { void (*free)(struct drm_gem_object *obj); int (*open)(struct drm_gem_object *obj, struct drm_file *file); void (*close)(struct drm_gem_object *obj, struct drm_file *file); void (*print_info)(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj); struct dma_buf *(*export)(struct drm_gem_object *obj, int flags); int (*pin)(struct drm_gem_object *obj); void (*unpin)(struct drm_gem_object *obj); struct sg_table *(*get_sg_table)(struct drm_gem_object *obj); int (*vmap)(struct drm_gem_object *obj, struct iosys_map *map); void (*vunmap)(struct drm_gem_object *obj, struct iosys_map *map); int (*mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma); int (*evict)(struct drm_gem_object *obj); enum drm_gem_object_status (*status)(struct drm_gem_object *obj); size_t (*rss)(struct drm_gem_object *obj); const struct vm_operations_struct *vm_ops; };h]hXstruct drm_gem_object_funcs { void (*free)(struct drm_gem_object *obj); int (*open)(struct drm_gem_object *obj, struct drm_file *file); void (*close)(struct drm_gem_object *obj, struct drm_file *file); void (*print_info)(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj); struct dma_buf *(*export)(struct drm_gem_object *obj, int flags); int (*pin)(struct drm_gem_object *obj); void (*unpin)(struct drm_gem_object *obj); struct sg_table *(*get_sg_table)(struct drm_gem_object *obj); int (*vmap)(struct drm_gem_object *obj, struct iosys_map *map); void (*vunmap)(struct drm_gem_object *obj, struct iosys_map *map); int (*mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma); int (*evict)(struct drm_gem_object *obj); enum drm_gem_object_status (*status)(struct drm_gem_object *obj); size_t (*rss)(struct drm_gem_object *obj); const struct vm_operations_struct *vm_ops; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKLhjubh)}(h **Members**h]j)}(hj*h]hMembers}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK^hjubj)}(hhh](j)}(hI``free`` Deconstructor for drm_gem_objects. This callback is mandatory. h](j)}(h``free``h]j)}(hjIh]hfree}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKMhjCubj )}(hhh](h)}(h"Deconstructor for drm_gem_objects.h]h"Deconstructor for drm_gem_objects.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKKhj_ubh)}(hThis callback is mandatory.h]hThis callback is mandatory.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKMhj_ubeh}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKMhj@ubj)}(hF``open`` Called upon GEM handle creation. This callback is optional. h](j)}(h``open``h]j)}(hjh]hopen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKVhjubj )}(hhh](h)}(h Called upon GEM handle creation.h]h Called upon GEM handle creation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKThjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKVhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKVhj@ubj)}(hF``close`` Called upon GEM handle release. This callback is optional. h](j)}(h ``close``h]j)}(hjـh]hclose}(hjۀhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׀ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK_hjӀubj )}(hhh](h)}(hCalled upon GEM handle release.h]hCalled upon GEM handle release.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhK]hjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK_hjubeh}(h]h ]h"]h$]h&]uh1j hjӀubeh}(h]h ]h"]h$]h&]uh1jhjhK_hj@ubj)}(hX;``print_info`` If driver subclasses struct :c:type:`drm_gem_object`, it can implement this optional hook for printing additional driver specific info. drm_printf_indent() should be used in the callback passing it the indent argument. This callback is called from drm_gem_print_info(). This callback is optional. h](j)}(h``print_info``h]j)}(hj!h]h print_info}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKnhjubj )}(hhh](h)}(hIf driver subclasses struct :c:type:`drm_gem_object`, it can implement this optional hook for printing additional driver specific info.h](hIf driver subclasses struct }(hj:hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjDh]hdrm_gem_object}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKfhj:ubhS, it can implement this optional hook for printing additional driver specific info.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjahKfhj7ubh)}(hRdrm_printf_indent() should be used in the callback passing it the indent argument.h]hRdrm_printf_indent() should be used in the callback passing it the indent argument.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKihj7ubh)}(h2This callback is called from drm_gem_print_info().h]h2This callback is called from drm_gem_print_info().}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKlhj7ubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKnhj7ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj6hKnhj@ubj)}(h``export`` Export backing buffer as a :c:type:`dma_buf`. If this is not set drm_gem_prime_export() is used. This callback is optional. h](j)}(h ``export``h]j)}(hjh]hexport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKyhjubj )}(hhh](h)}(h`Export backing buffer as a :c:type:`dma_buf`. If this is not set drm_gem_prime_export() is used.h](hExport backing buffer as a }(hjÁhhhNhNubh)}(h:c:type:`dma_buf`h]j)}(hj́h]hdma_buf}(hjρhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjˁubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_bufuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKvhjÁubh4. If this is not set drm_gem_prime_export() is used.}(hjÁhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKvhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKyhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKyhj@ubj)}(hk``pin`` Pin backing buffer in memory. Used by the drm_gem_map_attach() helper. This callback is optional. h](j)}(h``pin``h]j)}(hjh]hpin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj )}(hhh](h)}(hFPin backing buffer in memory. Used by the drm_gem_map_attach() helper.h]hFPin backing buffer in memory. Used by the drm_gem_map_attach() helper.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj+ubh)}(hThis callback is optional.h]hThis callback is optional.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj+ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj*hKhj@ubj)}(he``unpin`` Unpin backing buffer. Used by the drm_gem_map_detach() helper. This callback is optional. h](j)}(h ``unpin``h]j)}(hj]h]hunpin}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjWubj )}(hhh](h)}(h>Unpin backing buffer. Used by the drm_gem_map_detach() helper.h]h>Unpin backing buffer. Used by the drm_gem_map_detach() helper.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjsubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhKhjsubeh}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhKhj@ubj)}(hX``get_sg_table`` Returns a Scatter-Gather table representation of the buffer. Used when exporting a buffer by the drm_gem_map_dma_buf() helper. Releasing is done by calling dma_unmap_sg_attrs() and sg_free_table() in drm_gem_unmap_buf(), therefore these helpers and this callback here cannot be used for sg tables pointing at driver private memory ranges. See also drm_prime_pages_to_sg(). h](j)}(h``get_sg_table``h]j)}(hjh]h get_sg_table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj )}(hhh](h)}(hXRReturns a Scatter-Gather table representation of the buffer. Used when exporting a buffer by the drm_gem_map_dma_buf() helper. Releasing is done by calling dma_unmap_sg_attrs() and sg_free_table() in drm_gem_unmap_buf(), therefore these helpers and this callback here cannot be used for sg tables pointing at driver private memory ranges.h]hXRReturns a Scatter-Gather table representation of the buffer. Used when exporting a buffer by the drm_gem_map_dma_buf() helper. Releasing is done by calling dma_unmap_sg_attrs() and sg_free_table() in drm_gem_unmap_buf(), therefore these helpers and this callback here cannot be used for sg tables pointing at driver private memory ranges.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubh)}(h!See also drm_prime_pages_to_sg().h]h!See also drm_prime_pages_to_sg().}(hj͂hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj@ubj)}(hy``vmap`` Returns a virtual address for the buffer. Used by the drm_gem_dmabuf_vmap() helper. This callback is optional. h](j)}(h``vmap``h]j)}(hjh]hvmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj )}(hhh](h)}(hSReturns a virtual address for the buffer. Used by the drm_gem_dmabuf_vmap() helper.h]hSReturns a virtual address for the buffer. Used by the drm_gem_dmabuf_vmap() helper.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj@ubj)}(h``vunmap`` Releases the address previously returned by **vmap**. Used by the drm_gem_dmabuf_vunmap() helper. This callback is optional. h](j)}(h ``vunmap``h]j)}(hj5h]hvunmap}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj/ubj )}(hhh](h)}(haReleases the address previously returned by **vmap**. Used by the drm_gem_dmabuf_vunmap() helper.h](h,Releases the address previously returned by }(hjNhhhNhNubj)}(h**vmap**h]hvmap}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh-. Used by the drm_gem_dmabuf_vunmap() helper.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjKubh)}(hThis callback is optional.h]hThis callback is optional.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjKubeh}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKhj@ubj)}(hX``mmap`` Handle mmap() of the gem object, setup vma accordingly. This callback is optional. The callback is used by both drm_gem_mmap_obj() and drm_gem_prime_mmap(). When **mmap** is present **vm_ops** is not used, the **mmap** callback must set vma->vm_ops instead. h](j)}(h``mmap``h]j)}(hjh]hmmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj )}(hhh](h)}(h7Handle mmap() of the gem object, setup vma accordingly.h]h7Handle mmap() of the gem object, setup vma accordingly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubh)}(hThe callback is used by both drm_gem_mmap_obj() and drm_gem_prime_mmap(). When **mmap** is present **vm_ops** is not used, the **mmap** callback must set vma->vm_ops instead.h](hPThe callback is used by both drm_gem_mmap_obj() and drm_gem_prime_mmap(). When }(hjƃhhhNhNubj)}(h**mmap**h]hmmap}(hj΃hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƃubh is present }(hjƃhhhNhNubj)}(h **vm_ops**h]hvm_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƃubh is not used, the }(hjƃhhhNhNubj)}(h**mmap**h]hmmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƃubh' callback must set vma->vm_ops instead.}(hjƃhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj@ubj)}(h``evict`` Evicts gem object out from memory. Used by the drm_gem_object_evict() helper. Returns 0 on success, -errno otherwise. This callback is optional. h](j)}(h ``evict``h]j)}(hjh]hevict}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj )}(hhh](h)}(huEvicts gem object out from memory. Used by the drm_gem_object_evict() helper. Returns 0 on success, -errno otherwise.h]huEvicts gem object out from memory. Used by the drm_gem_object_evict() helper. Returns 0 on success, -errno otherwise.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj3ubh)}(hThis callback is optional.h]hThis callback is optional.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj3ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj2hKhj@ubj)}(hXM``status`` The optional status callback can return additional object state which determines which stats the object is counted against. The callback is called under table_lock. Racing against object status change is "harmless", and the callback can expect to not race against object destruction. Called by drm_show_memory_stats(). h](j)}(h ``status``h]j)}(hjeh]hstatus}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj_ubj )}(hhh](h)}(hXThe optional status callback can return additional object state which determines which stats the object is counted against. The callback is called under table_lock. Racing against object status change is "harmless", and the callback can expect to not race against object destruction.h]hX!The optional status callback can return additional object state which determines which stats the object is counted against. The callback is called under table_lock. Racing against object status change is “harmless”, and the callback can expect to not race against object destruction.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj{ubh)}(h"Called by drm_show_memory_stats().h]h"Called by drm_show_memory_stats().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubeh}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhKhj@ubj)}(hc``rss`` Return resident size of the object in physical memory. Called by drm_show_memory_stats(). h](j)}(h``rss``h]j)}(hjh]hrss}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj )}(hhh](h)}(h6Return resident size of the object in physical memory.h]h6Return resident size of the object in physical memory.}(hjƄhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjÄubh)}(h"Called by drm_show_memory_stats().h]h"Called by drm_show_memory_stats().}(hjՄhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj„hKhjÄubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj„hKhj@ubj)}(hf``vm_ops`` Virtual memory operations used with mmap. This is optional but necessary for mmap support.h](j)}(h ``vm_ops``h]j)}(hjh]hvm_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj )}(hhh](h)}(h)Virtual memory operations used with mmap.h]h)Virtual memory operations used with mmap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj ubh)}(h0This is optional but necessary for mmap support.h]h0This is optional but necessary for mmap support.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhj@ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_lru (C struct) c.drm_gem_lruhNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h drm_gem_lruh]j>)}(hstruct drm_gem_lruh](jD)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjZhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjZhhhjkhKubjg)}(h drm_gem_lruh]jm)}(hjXh]h drm_gem_lru}(hj~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjZhhhjkhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjVhhhjkhKubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1j7hjkhKhjShhubj)}(hhh]h)}(hA simple LRU helperh]hA simple LRU helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjkhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hX**Definition**:: struct drm_gem_lru { struct mutex *lock; long count; struct list_head list; }; **Members** ``lock`` Lock protecting movement of GEM objects between LRUs. All LRUs that the object can move between should be protected by the same lock. ``count`` The total number of backing pages of the GEM objects in this LRU. ``list`` The LRU list.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjąhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubjT)}(hZstruct drm_gem_lru { struct mutex *lock; long count; struct list_head list; };h]hZstruct drm_gem_lru { struct mutex *lock; long count; struct list_head list; };}hj݅sbah}(h]h ]h"]h$]h&]jjuh1jShQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj)}(hhh](j)}(h``lock`` Lock protecting movement of GEM objects between LRUs. All LRUs that the object can move between should be protected by the same lock. h](j)}(h``lock``h]j)}(hj h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjubj )}(hhh]h)}(hLock protecting movement of GEM objects between LRUs. All LRUs that the object can move between should be protected by the same lock.h]hLock protecting movement of GEM objects between LRUs. All LRUs that the object can move between should be protected by the same lock.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj#ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjubj)}(hL``count`` The total number of backing pages of the GEM objects in this LRU. h](j)}(h ``count``h]j)}(hjGh]hcount}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjAubj )}(hhh]h)}(hAThe total number of backing pages of the GEM objects in this LRU.h]hAThe total number of backing pages of the GEM objects in this LRU.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhjubj)}(h``list`` The LRU list.h](j)}(h``list``h]j)}(hjh]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj{ubj )}(hhh]h)}(h The LRU list.h]h The LRU list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubh)}(h**Description**h]j)}(hjĆh]h Description}(hjƆhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj†ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM hj}hhubh)}(hX$A helper for tracking GEM objects in a given state, to aid in driver's shrinker implementation. Tracks the count of pages for lockless :c:type:`shrinker.count_objects `, and provides :c:type:`drm_gem_lru_scan` for driver's :c:type:`shrinker.scan_objects ` implementation.h](hA helper for tracking GEM objects in a given state, to aid in driver’s shrinker implementation. Tracks the count of pages for lockless }(hjچhhhNhNubh)}(h+:c:type:`shrinker.count_objects `h]j)}(hjh]hshrinker.count_objects}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3shrinkeruh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKhjچubh, and provides }(hjچhhhNhNubh)}(h:c:type:`drm_gem_lru_scan`h]j)}(hjh]hdrm_gem_lru_scan}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_lru_scanuh1hhjhKhjچubh for driver’s $}(hjچhhhNhNubh)}(h*:c:type:`shrinker.scan_objects `h]j)}(hj+h]hshrinker.scan_objects}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3shrinkeruh1hhjhKhjچubh implementation.}(hjچhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj}hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_object (C struct)c.drm_gem_objecthNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hdrm_gem_objecth]j>)}(hstruct drm_gem_objecth](jD)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjghhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhKubjV)}(h h]h }(hjyhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjghhhjxhKubjg)}(hdrm_gem_objecth]jm)}(hjeh]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjghhhjxhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjchhhjxhKubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1j7hjxhKhj`hhubj)}(hhh]h)}(hGEM buffer objecth]hGEM buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjxhKubeh}(h]h ](jstructeh"]h$]h&]jjjjŇjjŇjjjuh1j2hhhj}hNhNubj)}(hX**Definition**:: struct drm_gem_object { struct kref refcount; unsigned handle_count; struct drm_device *dev; struct file *filp; struct drm_vma_offset_node vma_node; size_t size; int name; struct dma_buf *dma_buf; struct dma_buf_attachment *import_attach; struct dma_resv *resv; struct dma_resv _resv; struct { struct list_head list; #ifdef CONFIG_LOCKDEP; struct lockdep_map *lock_dep_map; #endif; } gpuva; const struct drm_gem_object_funcs *funcs; struct list_head lru_node; struct drm_gem_lru *lru; }; **Members** ``refcount`` Reference count of this object Please use drm_gem_object_get() to acquire and drm_gem_object_put_locked() or drm_gem_object_put() to release a reference to a GEM buffer object. ``handle_count`` This is the GEM file_priv handle count of this object. Each handle also holds a reference. Note that when the handle_count drops to 0 any global names (e.g. the id in the flink namespace) will be cleared. Protected by :c:type:`drm_device.object_name_lock `. ``dev`` DRM dev this object belongs to. ``filp`` SHMEM file node used as backing storage for swappable buffer objects. GEM also supports driver private objects with driver-specific backing storage (contiguous DMA memory, special reserved blocks). In this case **filp** is NULL. ``vma_node`` Mapping info for this object to support mmap. Drivers are supposed to allocate the mmap offset using drm_gem_create_mmap_offset(). The offset itself can be retrieved using drm_vma_node_offset_addr(). Memory mapping itself is handled by drm_gem_mmap(), which also checks that userspace is allowed to access the object. ``size`` Size of the object, in bytes. Immutable over the object's lifetime. ``name`` Global name for this object, starts at 1. 0 means unnamed. Access is covered by :c:type:`drm_device.object_name_lock `. This is used by the GEM_FLINK and GEM_OPEN ioctls. ``dma_buf`` dma-buf associated with this GEM object. Pointer to the dma-buf associated with this gem object (either through importing or exporting). We break the resulting reference loop when the last gem handle for this object is released. Protected by :c:type:`drm_device.object_name_lock `. ``import_attach`` dma-buf attachment backing this object. Any foreign dma_buf imported as a gem object has this set to the attachment point for the device. This is invariant over the lifetime of a gem object. The :c:type:`drm_gem_object_funcs.free ` callback is responsible for cleaning up the dma_buf attachment and references acquired at import time. Note that the drm gem/prime core does not depend upon drivers setting this field any more. So for drivers where this doesn't make sense (e.g. virtual devices or a displaylink behind an usb bus) they can simply leave it as NULL. ``resv`` Pointer to reservation object associated with the this GEM object. Normally (**resv** == &**_resv**) except for imported GEM objects. ``_resv`` A reservation object for this GEM object. This is unused for imported GEM objects. ``gpuva`` Provides the list of GPU VAs attached to this GEM object. Drivers should lock list accesses with the GEMs :c:type:`dma_resv` lock (:c:type:`drm_gem_object.resv `) or a custom lock if one is provided. ``funcs`` Optional GEM object functions. If this is set, it will be used instead of the corresponding :c:type:`drm_driver` GEM callbacks. New drivers should use this. ``lru_node`` List node in a :c:type:`drm_gem_lru`. ``lru`` The current LRU list that the GEM object is on.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjчhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͇ubh:}(hj͇hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjɇubjT)}(hX7struct drm_gem_object { struct kref refcount; unsigned handle_count; struct drm_device *dev; struct file *filp; struct drm_vma_offset_node vma_node; size_t size; int name; struct dma_buf *dma_buf; struct dma_buf_attachment *import_attach; struct dma_resv *resv; struct dma_resv _resv; struct { struct list_head list; #ifdef CONFIG_LOCKDEP; struct lockdep_map *lock_dep_map; #endif; } gpuva; const struct drm_gem_object_funcs *funcs; struct list_head lru_node; struct drm_gem_lru *lru; };h]hX7struct drm_gem_object { struct kref refcount; unsigned handle_count; struct drm_device *dev; struct file *filp; struct drm_vma_offset_node vma_node; size_t size; int name; struct dma_buf *dma_buf; struct dma_buf_attachment *import_attach; struct dma_resv *resv; struct dma_resv _resv; struct { struct list_head list; #ifdef CONFIG_LOCKDEP; struct lockdep_map *lock_dep_map; #endif; } gpuva; const struct drm_gem_object_funcs *funcs; struct list_head lru_node; struct drm_gem_lru *lru; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjɇubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM*hjɇubj)}(hhh](j)}(h``refcount`` Reference count of this object Please use drm_gem_object_get() to acquire and drm_gem_object_put_locked() or drm_gem_object_put() to release a reference to a GEM buffer object. h](j)}(h ``refcount``h]j)}(hjh]hrefcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubj )}(hhh](h)}(hReference count of this objecth]hReference count of this object}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj0ubh)}(hPlease use drm_gem_object_get() to acquire and drm_gem_object_put_locked() or drm_gem_object_put() to release a reference to a GEM buffer object.h]hPlease use drm_gem_object_get() to acquire and drm_gem_object_put_locked() or drm_gem_object_put() to release a reference to a GEM buffer object.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj0ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(hX!``handle_count`` This is the GEM file_priv handle count of this object. Each handle also holds a reference. Note that when the handle_count drops to 0 any global names (e.g. the id in the flink namespace) will be cleared. Protected by :c:type:`drm_device.object_name_lock `. h](j)}(h``handle_count``h]j)}(hjch]h handle_count}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM(hj]ubj )}(hhh](h)}(h6This is the GEM file_priv handle count of this object.h]h6This is the GEM file_priv handle count of this object.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM"hjyubh)}(hEach handle also holds a reference. Note that when the handle_count drops to 0 any global names (e.g. the id in the flink namespace) will be cleared.h]hEach handle also holds a reference. Note that when the handle_count drops to 0 any global names (e.g. the id in the flink namespace) will be cleared.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM$hjyubh)}(h@Protected by :c:type:`drm_device.object_name_lock `.h](h Protected by }(hjhhhNhNubh)}(h2:c:type:`drm_device.object_name_lock `h]j)}(hjh]hdrm_device.object_name_lock}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhjxhM(hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhM(hjyubeh}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM(hjubj)}(h(``dev`` DRM dev this object belongs to. h](j)}(h``dev``h]j)}(hj݈h]hdev}(hj߈hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۈubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM/hj׈ubj )}(hhh]h)}(hDRM dev this object belongs to.h]hDRM dev this object belongs to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM/hjubah}(h]h ]h"]h$]h&]uh1j hj׈ubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(h``filp`` SHMEM file node used as backing storage for swappable buffer objects. GEM also supports driver private objects with driver-specific backing storage (contiguous DMA memory, special reserved blocks). In this case **filp** is NULL. h](j)}(h``filp``h]j)}(hjh]hfilp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM7hjubj )}(hhh]h)}(hSHMEM file node used as backing storage for swappable buffer objects. GEM also supports driver private objects with driver-specific backing storage (contiguous DMA memory, special reserved blocks). In this case **filp** is NULL.h](hSHMEM file node used as backing storage for swappable buffer objects. GEM also supports driver private objects with driver-specific backing storage (contiguous DMA memory, special reserved blocks). In this case }(hj/hhhNhNubj)}(h**filp**h]hfilp}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh is NULL.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM4hj,ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj+hM7hjubj)}(hXL``vma_node`` Mapping info for this object to support mmap. Drivers are supposed to allocate the mmap offset using drm_gem_create_mmap_offset(). The offset itself can be retrieved using drm_vma_node_offset_addr(). Memory mapping itself is handled by drm_gem_mmap(), which also checks that userspace is allowed to access the object. h](j)}(h ``vma_node``h]j)}(hjbh]hvma_node}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMChj\ubj )}(hhh](h)}(hMapping info for this object to support mmap. Drivers are supposed to allocate the mmap offset using drm_gem_create_mmap_offset(). The offset itself can be retrieved using drm_vma_node_offset_addr().h]hMapping info for this object to support mmap. Drivers are supposed to allocate the mmap offset using drm_gem_create_mmap_offset(). The offset itself can be retrieved using drm_vma_node_offset_addr().}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM>hjxubh)}(huMemory mapping itself is handled by drm_gem_mmap(), which also checks that userspace is allowed to access the object.h]huMemory mapping itself is handled by drm_gem_mmap(), which also checks that userspace is allowed to access the object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMBhjxubeh}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMChjubj)}(hN``size`` Size of the object, in bytes. Immutable over the object's lifetime. h](j)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMKhjubj )}(hhh]h)}(hDSize of the object, in bytes. Immutable over the object's lifetime.h]hFSize of the object, in bytes. Immutable over the object’s lifetime.}(hjĉhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMJhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubj)}(h``name`` Global name for this object, starts at 1. 0 means unnamed. Access is covered by :c:type:`drm_device.object_name_lock `. This is used by the GEM_FLINK and GEM_OPEN ioctls. h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMThj߉ubj )}(hhh]h)}(hGlobal name for this object, starts at 1. 0 means unnamed. Access is covered by :c:type:`drm_device.object_name_lock `. This is used by the GEM_FLINK and GEM_OPEN ioctls.h](hPGlobal name for this object, starts at 1. 0 means unnamed. Access is covered by }(hjhhhNhNubh)}(h2:c:type:`drm_device.object_name_lock `h]j)}(hjh]hdrm_device.object_name_lock}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMRhjubh4. This is used by the GEM_FLINK and GEM_OPEN ioctls.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hMRhjubah}(h]h ]h"]h$]h&]uh1j hj߉ubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(hX4``dma_buf`` dma-buf associated with this GEM object. Pointer to the dma-buf associated with this gem object (either through importing or exporting). We break the resulting reference loop when the last gem handle for this object is released. Protected by :c:type:`drm_device.object_name_lock `. h](j)}(h ``dma_buf``h]j)}(hjBh]hdma_buf}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMahj<ubj )}(hhh](h)}(h(dma-buf associated with this GEM object.h]h(dma-buf associated with this GEM object.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM[hjXubh)}(hPointer to the dma-buf associated with this gem object (either through importing or exporting). We break the resulting reference loop when the last gem handle for this object is released.h]hPointer to the dma-buf associated with this gem object (either through importing or exporting). We break the resulting reference loop when the last gem handle for this object is released.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM]hjXubh)}(h@Protected by :c:type:`drm_device.object_name_lock `.h](h Protected by }(hjyhhhNhNubh)}(h2:c:type:`drm_device.object_name_lock `h]j)}(hjh]hdrm_device.object_name_lock}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhjWhMahjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhMahjXubeh}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMahjubj)}(hX^``import_attach`` dma-buf attachment backing this object. Any foreign dma_buf imported as a gem object has this set to the attachment point for the device. This is invariant over the lifetime of a gem object. The :c:type:`drm_gem_object_funcs.free ` callback is responsible for cleaning up the dma_buf attachment and references acquired at import time. Note that the drm gem/prime core does not depend upon drivers setting this field any more. So for drivers where this doesn't make sense (e.g. virtual devices or a displaylink behind an usb bus) they can simply leave it as NULL. h](j)}(h``import_attach``h]j)}(hjh]h import_attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMuhjubj )}(hhh](h)}(h'dma-buf attachment backing this object.h]h'dma-buf attachment backing this object.}(hjՊhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhhjҊubh)}(hAny foreign dma_buf imported as a gem object has this set to the attachment point for the device. This is invariant over the lifetime of a gem object.h]hAny foreign dma_buf imported as a gem object has this set to the attachment point for the device. This is invariant over the lifetime of a gem object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMjhjҊubh)}(hThe :c:type:`drm_gem_object_funcs.free ` callback is responsible for cleaning up the dma_buf attachment and references acquired at import time.h](hThe }(hjhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.free `h]j)}(hjh]hdrm_gem_object_funcs.free}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMnhjubhg callback is responsible for cleaning up the dma_buf attachment and references acquired at import time.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMnhjҊubh)}(hNote that the drm gem/prime core does not depend upon drivers setting this field any more. So for drivers where this doesn't make sense (e.g. virtual devices or a displaylink behind an usb bus) they can simply leave it as NULL.h]hNote that the drm gem/prime core does not depend upon drivers setting this field any more. So for drivers where this doesn’t make sense (e.g. virtual devices or a displaylink behind an usb bus) they can simply leave it as NULL.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMrhjҊubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjъhMuhjubj)}(h``resv`` Pointer to reservation object associated with the this GEM object. Normally (**resv** == &**_resv**) except for imported GEM objects. h](j)}(h``resv``h]j)}(hjFh]hresv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM~hj@ubj )}(hhh](h)}(hBPointer to reservation object associated with the this GEM object.h]hBPointer to reservation object associated with the this GEM object.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM|hj\ubh)}(hBNormally (**resv** == &**_resv**) except for imported GEM objects.h](h Normally (}(hjnhhhNhNubj)}(h**resv**h]hresv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh0 == &**_resv**) except for imported GEM objects.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hM~hj\ubeh}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hM~hjubj)}(h^``_resv`` A reservation object for this GEM object. This is unused for imported GEM objects. h](j)}(h ``_resv``h]j)}(hjh]h_resv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubj )}(hhh](h)}(h)A reservation object for this GEM object.h]h)A reservation object for this GEM object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubh)}(h(This is unused for imported GEM objects.h]h(This is unused for imported GEM objects.}(hjȋhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``gpuva`` Provides the list of GPU VAs attached to this GEM object. Drivers should lock list accesses with the GEMs :c:type:`dma_resv` lock (:c:type:`drm_gem_object.resv `) or a custom lock if one is provided. h](j)}(h ``gpuva``h]j)}(hjh]hgpuva}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubj )}(hhh](h)}(h9Provides the list of GPU VAs attached to this GEM object.h]h9Provides the list of GPU VAs attached to this GEM object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubh)}(hDrivers should lock list accesses with the GEMs :c:type:`dma_resv` lock (:c:type:`drm_gem_object.resv `) or a custom lock if one is provided.h](h0Drivers should lock list accesses with the GEMs }(hjhhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjh]hdma_resv}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubh lock (}(hjhhhNhNubh)}(h.:c:type:`drm_gem_object.resv `h]j)}(hj>h]hdrm_gem_object.resv}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj7hMhjubh&) or a custom lock if one is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``funcs`` Optional GEM object functions. If this is set, it will be used instead of the corresponding :c:type:`drm_driver` GEM callbacks. New drivers should use this. h](j)}(h ``funcs``h]j)}(hjwh]hfuncs}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjqubj )}(hhh](h)}(hOptional GEM object functions. If this is set, it will be used instead of the corresponding :c:type:`drm_driver` GEM callbacks.h](h\Optional GEM object functions. If this is set, it will be used instead of the corresponding }(hjhhhNhNubh)}(h:c:type:`drm_driver`h]j)}(hjh]h drm_driver}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubh GEM callbacks.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hNew drivers should use this.h]hNew drivers should use this.}(hjŒhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``lru_node`` List node in a :c:type:`drm_gem_lru`. h](j)}(h ``lru_node``h]j)}(hjh]hlru_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj܌ubj )}(hhh]h)}(h%List node in a :c:type:`drm_gem_lru`.h](hList node in a }(hjhhhNhNubh)}(h:c:type:`drm_gem_lru`h]j)}(hjh]h drm_gem_lru}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gem_lruuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj܌ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``lru`` The current LRU list that the GEM object is on.h](j)}(h``lru``h]j)}(hj>h]hlru}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj8ubj )}(hhh]h)}(h/The current LRU list that the GEM object is on.h]h/The current LRU list that the GEM object is on.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjTubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjubeh}(h]h ]h"]h$]h&]uh1jhjɇubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj}hhubh)}(h}This structure defines the generic parts for GEM buffer objects, which are mostly around handling mmap and userspace handles.h]h}This structure defines the generic parts for GEM buffer objects, which are mostly around handling mmap and userspace handles.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj}hhubh)}(h+Buffer objects are often abbreviated to BO.h]h+Buffer objects are often abbreviated to BO.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj}hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.DRM_GEM_FOPS (C macro)c.DRM_GEM_FOPShNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h DRM_GEM_FOPSh]j>)}(h DRM_GEM_FOPSh]jg)}(h DRM_GEM_FOPSh]jm)}(hjȍh]h DRM_GEM_FOPS}(hjҍhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj΍ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjʍhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjƍhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjÍhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjÍhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubh)}(h``DRM_GEM_FOPS``h]j)}(hjh]h DRM_GEM_FOPS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj}hhubj@-)}(h Default drm GEM file operations **Description** This macro provides a shorthand for setting the GEM file ops in the :c:type:`file_operations` structure. If all you need are the default ops, use DEFINE_DRM_GEM_FOPS instead. h](j@-)}(h Default drm GEM file operations h]h)}(hDefault drm GEM file operationsh]hDefault drm GEM file operations}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubah}(h]h ]h"]h$]h&]uh1j?-hj0hMhjubh)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubh)}(hThis macro provides a shorthand for setting the GEM file ops in the :c:type:`file_operations` structure. If all you need are the default ops, use DEFINE_DRM_GEM_FOPS instead.h](hDThis macro provides a shorthand for setting the GEM file ops in the }(hjOhhhNhNubh)}(h:c:type:`file_operations`h]j)}(hjYh]hfile_operations}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3file_operationsuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjOubhR structure. If all you need are the default ops, use DEFINE_DRM_GEM_FOPS instead.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMhjubeh}(h]h ]h"]h$]h&]uh1j?-hj0hMhj}hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.DEFINE_DRM_GEM_FOPS (C macro)c.DEFINE_DRM_GEM_FOPShNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hDEFINE_DRM_GEM_FOPSh]j>)}(hDEFINE_DRM_GEM_FOPSh]jg)}(hDEFINE_DRM_GEM_FOPSh]jm)}(hjh]hDEFINE_DRM_GEM_FOPS}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjЎjjЎjjjuh1j2hhhj}hNhNubh)}(h``DEFINE_DRM_GEM_FOPS (name)``h]j)}(hj֎h]hDEFINE_DRM_GEM_FOPS (name)}(hj؎hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԎubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj}hhubj@-)}(h2macro to generate file operations for GEM drivers h]h)}(h1macro to generate file operations for GEM driversh]h1macro to generate file operations for GEM drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubah}(h]h ]h"]h$]h&]uh1j?-hjhMhj}hhubj)}(hX7**Parameters** ``name`` name for the generated structure **Description** This macro autogenerates a suitable :c:type:`struct file_operations ` for GEM based drivers, which can be assigned to :c:type:`drm_driver.fops `. Note that this structure cannot be shared between drivers, because it contains a reference to the current module using THIS_MODULE. Note that the declaration is already marked as static - if you need a non-static version of this you're probably doing it wrong and will break the THIS_MODULE reference by accident.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubj)}(hhh]j)}(h*``name`` name for the generated structure h](j)}(h``name``h]j)}(hj*h]hname}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj$ubj )}(hhh]h)}(h name for the generated structureh]h name for the generated structure}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubh)}(hX2This macro autogenerates a suitable :c:type:`struct file_operations ` for GEM based drivers, which can be assigned to :c:type:`drm_driver.fops `. Note that this structure cannot be shared between drivers, because it contains a reference to the current module using THIS_MODULE.h](h$This macro autogenerates a suitable }(hj{hhhNhNubh)}(h2:c:type:`struct file_operations `h]j)}(hjh]hstruct file_operations}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3file_operationsuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj{ubh1 for GEM based drivers, which can be assigned to }(hj{hhhNhNubh)}(h&:c:type:`drm_driver.fops `h]j)}(hjh]hdrm_driver.fops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhjhMhj{ubh. Note that this structure cannot be shared between drivers, because it contains a reference to the current module using THIS_MODULE.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hNote that the declaration is already marked as static - if you need a non-static version of this you're probably doing it wrong and will break the THIS_MODULE reference by accident.h]hNote that the declaration is already marked as static - if you need a non-static version of this you’re probably doing it wrong and will break the THIS_MODULE reference by accident.}(hjЏhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_object_get (C function)c.drm_gem_object_gethNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h4void drm_gem_object_get (struct drm_gem_object *obj)h]j>)}(h3void drm_gem_object_get(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj hMubjg)}(hdrm_gem_object_geth]jm)}(hdrm_gem_object_geth]hdrm_gem_object_get}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj hMubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj8ubjV)}(h h]h }(hjIhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjZhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j)}jj"sbc.drm_gem_object_getasbuh1hhj8ubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj hMhjhhubj)}(hhh]h)}(h%acquire a GEM buffer object referenceh]h%acquire a GEM buffer object reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjאjjאjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct drm_gem_object *obj`` GEM buffer object **Description** This function acquires an additional reference to **obj**. It is illegal to call this without already holding a reference. No locks required.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߐubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjېubj)}(hhh]j)}(h1``struct drm_gem_object *obj`` GEM buffer object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubj )}(hhh]h)}(hGEM buffer objecth]hGEM buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjېubh)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjېubh)}(hThis function acquires an additional reference to **obj**. It is illegal to call this without already holding a reference. No locks required.h](h2This function acquires an additional reference to }(hjQhhhNhNubj)}(h**obj**h]hobj}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubhT. It is illegal to call this without already holding a reference. No locks required.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjېubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_object_put (C function)c.drm_gem_object_puthNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h4void drm_gem_object_put (struct drm_gem_object *obj)h]j>)}(h3void drm_gem_object_put(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_object_puth]jm)}(hdrm_gem_object_puth]hdrm_gem_object_put}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjϑhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjˑubjV)}(h h]h }(hjܑhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjˑubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_object_putasbuh1hhjˑubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjˑubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˑubjm)}(hobjh]hobj}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjˑubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjǑubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h"drop a GEM buffer object referenceh]h"drop a GEM buffer object reference}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1j2hhhj}hNhNubj)}(hz**Parameters** ``struct drm_gem_object *obj`` GEM buffer object **Description** This releases a reference to **obj**.h](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjnubj)}(hhh]j)}(h1``struct drm_gem_object *obj`` GEM buffer object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubj )}(hhh]h)}(hGEM buffer objecth]hGEM buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubh)}(h**Description**h]j)}(hjΒh]h Description}(hjВhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̒ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjnubh)}(h%This releases a reference to **obj**.h](hThis releases a reference to }(hjhhhNhNubj)}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.6drm_gem_object_is_shared_for_memory_stats (C function)+c.drm_gem_object_is_shared_for_memory_statshNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hKbool drm_gem_object_is_shared_for_memory_stats (struct drm_gem_object *obj)h]j>)}(hJbool drm_gem_object_is_shared_for_memory_stats(struct drm_gem_object *obj)h](jc)}(hj h]hbool}(hj%hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj!hhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM>ubjV)}(h h]h }(hj3hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!hhhj2hM>ubjg)}(h)drm_gem_object_is_shared_for_memory_statsh]jm)}(h)drm_gem_object_is_shared_for_memory_statsh]h)drm_gem_object_is_shared_for_memory_stats}(hjEhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj!hhhj2hM>ubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj]ubjV)}(h h]h }(hjnhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjGsb+c.drm_gem_object_is_shared_for_memory_statsasbuh1hhj]ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubah}(h]h ]h"]h$]h&]jjuh1jhj!hhhj2hM>ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj2hM>ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj2hM>hjhhubj)}(hhh]h)}(hhelper for shared memory statsh]hhelper for shared memory stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM7hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct drm_gem_object *obj`` obj in question **Description** This helper should only be used for fdinfo shared memory stats to determine if a GEM object is shared.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM;hjubj)}(hhh]j)}(h/``struct drm_gem_object *obj`` obj in question h](j)}(h``struct drm_gem_object *obj``h]j)}(hj%h]hstruct drm_gem_object *obj}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM<hjubj )}(hhh]h)}(hobj in questionh]hobj in question}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM<hj;ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj:hM<hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM>hjubh)}(hfThis helper should only be used for fdinfo shared memory stats to determine if a GEM object is shared.h]hfThis helper should only be used for fdinfo shared memory stats to determine if a GEM object is shared.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_is_imported (C function)c.drm_gem_is_importedhNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h;bool drm_gem_is_imported (const struct drm_gem_object *obj)h]j>)}(h:bool drm_gem_is_imported(const struct drm_gem_object *obj)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMJubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMJubjg)}(hdrm_gem_is_importedh]jm)}(hdrm_gem_is_importedh]hdrm_gem_is_imported}(hjŔhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMJubj)}(h"(const struct drm_gem_object *obj)h]j)}(h const struct drm_gem_object *objh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjݔubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjݔubjD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjݔubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjݔubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjǔsbc.drm_gem_is_importedasbuh1hhjݔubjV)}(h h]h }(hj:hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjݔubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݔubjm)}(hobjh]hobj}(hjUhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjݔubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjٔubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMJubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMJhjhhubj)}(hhh]h)}(h.Tests if GEM object's buffer has been importedh]h0Tests if GEM object’s buffer has been imported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMDhj|hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMJubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``const struct drm_gem_object *obj`` the GEM object **Return** True if the GEM object's buffer has been imported, false otherwiseh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMHhjubj)}(hhh]j)}(h4``const struct drm_gem_object *obj`` the GEM object h](j)}(h$``const struct drm_gem_object *obj``h]j)}(hjh]h const struct drm_gem_object *obj}(hj•hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMEhjubj )}(hhh]h)}(hthe GEM objecth]hthe GEM object}(hjٕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjՕhMEhj֕ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjՕhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMGhjubh)}(hBTrue if the GEM object's buffer has been imported, false otherwiseh]hDTrue if the GEM object’s buffer has been imported, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_gpuva_set_lock (C macro)c.drm_gem_gpuva_set_lockhNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hdrm_gem_gpuva_set_lockh]j>)}(hdrm_gem_gpuva_set_lockh]jg)}(hdrm_gem_gpuva_set_lockh]jm)}(hj:h]hdrm_gem_gpuva_set_lock}(hjDhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj<hhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMYubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj8hhhjWhMYubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1j7hjWhMYhj5hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj5hhhjWhMYubeh}(h]h ](jmacroeh"]h$]h&]jjjjpjjpjjjuh1j2hhhj}hNhNubh)}(h&``drm_gem_gpuva_set_lock (obj, lock)``h]j)}(hjvh]h"drm_gem_gpuva_set_lock (obj, lock)}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM[hj}hhubj@-)}(h4Set the lock protecting accesses to the gpuva list. h]h)}(h3Set the lock protecting accesses to the gpuva list.h]h3Set the lock protecting accesses to the gpuva list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMQhjubah}(h]h ]h"]h$]h&]uh1j?-hjhMQhj}hhubj)}(hX **Parameters** ``obj`` the :c:type:`drm_gem_object` ``lock`` the lock used to protect the gpuva list. The locking primitive must contain a dep_map field. **Description** Call this if you're not proctecting access to the gpuva list with the dma-resv lock, but with a custom lock.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMUhjubj)}(hhh](j)}(h%``obj`` the :c:type:`drm_gem_object` h](j)}(h``obj``h]j)}(hjʖh]hobj}(hj̖hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȖubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMRhjĖubj )}(hhh]h)}(hthe :c:type:`drm_gem_object`h](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjߖhMRhjubeh}(h]h ]h"]h$]h&]uh1hhjߖhMRhjubah}(h]h ]h"]h$]h&]uh1j hjĖubeh}(h]h ]h"]h$]h&]uh1jhjߖhMRhjubj)}(hf``lock`` the lock used to protect the gpuva list. The locking primitive must contain a dep_map field. h](j)}(h``lock``h]j)}(hj"h]hlock}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMThjubj )}(hhh]h)}(h\the lock used to protect the gpuva list. The locking primitive must contain a dep_map field.h]h\the lock used to protect the gpuva list. The locking primitive must contain a dep_map field.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMShj8ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj7hMThjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMVhjubh)}(hlCall this if you're not proctecting access to the gpuva list with the dma-resv lock, but with a custom lock.h]hnCall this if you’re not proctecting access to the gpuva list with the dma-resv lock, but with a custom lock.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_gpuva_init (C function)c.drm_gem_gpuva_inithNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h4void drm_gem_gpuva_init (struct drm_gem_object *obj)h]j>)}(h3void drm_gem_gpuva_init(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMqubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMqubjg)}(hdrm_gem_gpuva_inith]jm)}(hdrm_gem_gpuva_inith]hdrm_gem_gpuva_init}(hjėhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMqubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjܗubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjܗubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjƗsbc.drm_gem_gpuva_initasbuh1hhjܗubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjܗubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܗubjm)}(hobjh]hobj}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjܗubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjؗubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMqubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMqubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMqhjhhubj)}(hhh]h)}(h)initialize the gpuva list of a GEM objecth]h)initialize the gpuva list of a GEM object}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMghj`hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMqubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1j2hhhj}hNhNubj)}(hXM**Parameters** ``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` **Description** This initializes the :c:type:`drm_gem_object`'s :c:type:`drm_gpuvm_bo` list. Calling this function is only necessary for drivers intending to support the :c:type:`drm_driver_feature` DRIVER_GEM_GPUVA. See also drm_gem_gpuva_set_lock(). h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMkhjubj)}(hhh]j)}(h<``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhhjubj )}(hhh]h)}(hthe :c:type:`drm_gem_object`h](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjǘh]hdrm_gem_object}(hjɘhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjŘubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhMhhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMjhjubh)}(hLThis initializes the :c:type:`drm_gem_object`'s :c:type:`drm_gpuvm_bo` list.h](hThis initializes the }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMjhjubh’s }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjBh]h drm_gpuvm_bo}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhj;hMjhjubh list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMjhjubh)}(h{Calling this function is only necessary for drivers intending to support the :c:type:`drm_driver_feature` DRIVER_GEM_GPUVA.h](hMCalling this function is only necessary for drivers intending to support the }(hjihhhNhNubh)}(h:c:type:`drm_driver_feature`h]j)}(hjsh]hdrm_driver_feature}(hjuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_driver_featureuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMlhjiubh DRIVER_GEM_GPUVA.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMlhjubh)}(h"See also drm_gem_gpuva_set_lock().h]h"See also drm_gem_gpuva_set_lock().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_gem_for_each_gpuvm_bo (C macro)c.drm_gem_for_each_gpuvm_bohNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hdrm_gem_for_each_gpuvm_boh]j>)}(hdrm_gem_for_each_gpuvm_boh]jg)}(hdrm_gem_for_each_gpuvm_boh]jm)}(hjęh]hdrm_gem_for_each_gpuvm_bo}(hjΙhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjʙubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjƙhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM~ubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj™hhhjhM~ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM~hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM~ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubh)}(h.``drm_gem_for_each_gpuvm_bo (entry__, obj__)``h]j)}(hjh]h*drm_gem_for_each_gpuvm_bo (entry__, obj__)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj}hhubj@-)}(h7iterator to walk over a list of :c:type:`drm_gpuvm_bo` h]h)}(h6iterator to walk over a list of :c:type:`drm_gpuvm_bo`h](h iterator to walk over a list of }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj$h]h drm_gpuvm_bo}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMwhjubeh}(h]h ]h"]h$]h&]uh1hhjAhMwhjubah}(h]h ]h"]h$]h&]uh1j?-hjAhMwhj}hhubj)}(hXB**Parameters** ``entry__`` :c:type:`drm_gpuvm_bo` structure to assign to in each iteration step ``obj__`` the :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated with **Description** This iterator walks over all :c:type:`drm_gpuvm_bo` structures associated with the :c:type:`drm_gem_object`.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM{hjNubj)}(hhh](j)}(hQ``entry__`` :c:type:`drm_gpuvm_bo` structure to assign to in each iteration step h](j)}(h ``entry__``h]j)}(hjsh]hentry__}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMxhjmubj )}(hhh]h)}(hD:c:type:`drm_gpuvm_bo` structure to assign to in each iteration steph](h)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhMxhjubh. structure to assign to in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMxhjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjjubj)}(h^``obj__`` the :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated with h](j)}(h ``obj__``h]j)}(hj˚h]hobj__}(hj͚hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɚubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMyhjŚubj )}(hhh]h)}(hSthe :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated withh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhMyhjubh the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhMyhjubh to walk are associated with}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMyhjubah}(h]h ]h"]h$]h&]uh1j hjŚubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubh)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM{hjNubh)}(hlThis iterator walks over all :c:type:`drm_gpuvm_bo` structures associated with the :c:type:`drm_gem_object`.h](hThis iterator walks over all }(hjbhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjlh]h drm_gpuvm_bo}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhM{hjbubh structures associated with the }(hjbhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhM{hjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM{hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_gem_for_each_gpuvm_bo_safe (C macro) c.drm_gem_for_each_gpuvm_bo_safehNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hdrm_gem_for_each_gpuvm_bo_safeh]j>)}(hdrm_gem_for_each_gpuvm_bo_safeh]jg)}(hdrm_gem_for_each_gpuvm_bo_safeh]jm)}(hjћh]hdrm_gem_for_each_gpuvm_bo_safe}(hjۛhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjכubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjӛhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjϛhhhjhMubah}(h]jʛah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhj̛hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj̛hhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubh)}(h;``drm_gem_for_each_gpuvm_bo_safe (entry__, next__, obj__)``h]j)}(hj h]h7drm_gem_for_each_gpuvm_bo_safe (entry__, next__, obj__)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj}hhubj@-)}(h>iterator to safely walk over a list of :c:type:`drm_gpuvm_bo` h]h)}(h=iterator to safely walk over a list of :c:type:`drm_gpuvm_bo`h](h'iterator to safely walk over a list of }(hj'hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj1h]h drm_gpuvm_bo}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj'ubeh}(h]h ]h"]h$]h&]uh1hhjNhMhj#ubah}(h]h ]h"]h$]h&]uh1j?-hjNhMhj}hhubj)}(hX**Parameters** ``entry__`` :c:type:`drm_gpuvm_bostructure` to assign to in each iteration step ``next__`` :c:type:`next` :c:type:`drm_gpuvm_bo` to store the next step ``obj__`` the :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated with **Description** This iterator walks over all :c:type:`drm_gpuvm_bo` structures associated with the :c:type:`drm_gem_object`. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements.h](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj[ubj)}(hhh](j)}(hP``entry__`` :c:type:`drm_gpuvm_bostructure` to assign to in each iteration step h](j)}(h ``entry__``h]j)}(hjh]hentry__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjzubj )}(hhh]h)}(hC:c:type:`drm_gpuvm_bostructure` to assign to in each iteration steph](h)}(h:c:type:`drm_gpuvm_bostructure`h]j)}(hjh]hdrm_gpuvm_bostructure}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_bostructureuh1hhjhMhjubh$ to assign to in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(hH``next__`` :c:type:`next` :c:type:`drm_gpuvm_bo` to store the next step h](j)}(h ``next__``h]j)}(hj؜h]hnext__}(hjڜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֜ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjҜubj )}(hhh]h)}(h<:c:type:`next` :c:type:`drm_gpuvm_bo` to store the next steph](h)}(h:c:type:`next`h]j)}(hjh]hnext}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3nextuh1hhjhMhjubh }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhMhjubh to store the next step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjҜubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h^``obj__`` the :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated with h](j)}(h ``obj__``h]j)}(hjSh]hobj__}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjMubj )}(hhh]h)}(hSthe :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated withh](hthe }(hjlhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjvh]hdrm_gem_object}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhhMhjlubh the }(hjlhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhhMhjlubh to walk are associated with}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubh)}(h**Description**h]j)}(hjԝh]h Description}(hj֝hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҝubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhj[ubh)}(hThis iterator walks over all :c:type:`drm_gpuvm_bo` structures associated with the :c:type:`drm_gem_object`. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements.h](hThis iterator walks over all }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:352: ./include/drm/drm_gem.hhMhjubh structures associated with the }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhMhjubhb. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)drm_gem_object_init_with_mnt (C function)c.drm_gem_object_init_with_mnthNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hzint drm_gem_object_init_with_mnt (struct drm_device *dev, struct drm_gem_object *obj, size_t size, struct vfsmount *gemfs)h]j>)}(hyint drm_gem_object_init_with_mnt(struct drm_device *dev, struct drm_gem_object *obj, size_t size, struct vfsmount *gemfs)h](jc)}(hinth]hint}(hj_hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj[hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKubjV)}(h h]h }(hjnhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[hhhjmhKubjg)}(hdrm_gem_object_init_with_mnth]jm)}(hdrm_gem_object_init_with_mnth]hdrm_gem_object_init_with_mnt}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj[hhhjmhKubj)}(hY(struct drm_device *dev, struct drm_gem_object *obj, size_t size, struct vfsmount *gemfs)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_object_init_with_mntasbuh1hhjubjV)}(h h]h }(hjڞhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j֞c.drm_gem_object_init_with_mntasbuh1hhj ubjV)}(h h]h }(hjJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hobjh]hobj}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j֞c.drm_gem_object_init_with_mntasbuh1hhjzubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjzubjm)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct vfsmount *gemfsh](jD)}(hjh]hstruct}(hjƟhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjŸubjV)}(h h]h }(hjӟhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjŸubh)}(hhh]jm)}(hvfsmounth]hvfsmount}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j֞c.drm_gem_object_init_with_mntasbuh1hhjŸubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjŸubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŸubjm)}(hgemfsh]hgemfs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjŸubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj[hhhjmhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjWhhhjmhKubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1j7hjmhKhjThhubj)}(hhh]h)}(hKinitialize an allocated shmem-backed GEM object in a given shmfs mountpointh]hKinitialize an allocated shmem-backed GEM object in a given shmfs mountpoint}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKuhjDhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjmhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1j2hhhj}hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` drm_device the object should be initialized for ``struct drm_gem_object *obj`` drm_gem_object to initialize ``size_t size`` object size ``struct vfsmount *gemfs`` tmpfs mount where the GEM object will be created. If NULL, use the usual tmpfs mountpoint (`shm_mnt`). **Description** Initialize an already allocated GEM object of the specified size with shmfs backing store.h](h)}(h**Parameters**h]j)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKyhjcubj)}(hhh](j)}(hK``struct drm_device *dev`` drm_device the object should be initialized for h](j)}(h``struct drm_device *dev``h]j)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKxhjubj )}(hhh]h)}(h/drm_device the object should be initialized forh]h/drm_device the object should be initialized for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKxhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKxhjubj)}(h<``struct drm_gem_object *obj`` drm_gem_object to initialize h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjàhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKyhjubj )}(hhh]h)}(hdrm_gem_object to initializeh]hdrm_gem_object to initialize}(hjڠhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj֠hKyhjנubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj֠hKyhjubj)}(h``size_t size`` object size h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKzhjubj )}(hhh]h)}(h object sizeh]h object size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKzhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKzhjubj)}(h``struct vfsmount *gemfs`` tmpfs mount where the GEM object will be created. If NULL, use the usual tmpfs mountpoint (`shm_mnt`). h](j)}(h``struct vfsmount *gemfs``h]j)}(hj3h]hstruct vfsmount *gemfs}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chK|hj-ubj )}(hhh]h)}(hftmpfs mount where the GEM object will be created. If NULL, use the usual tmpfs mountpoint (`shm_mnt`).h](h[tmpfs mount where the GEM object will be created. If NULL, use the usual tmpfs mountpoint (}(hjLhhhNhNubhtitle_reference)}(h `shm_mnt`h]hshm_mnt}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjLubh).}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chK{hjIubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhK|hjubeh}(h]h ]h"]h$]h&]uh1jhjcubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chK~hjcubh)}(hZInitialize an already allocated GEM object of the specified size with shmfs backing store.h]hZInitialize an already allocated GEM object of the specified size with shmfs backing store.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chK~hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_object_init (C function)c.drm_gem_object_inithNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hYint drm_gem_object_init (struct drm_device *dev, struct drm_gem_object *obj, size_t size)h]j>)}(hXint drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size)h](jc)}(hinth]hint}(hjȡhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjġhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKubjV)}(h h]h }(hjסhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjġhhhj֡hKubjg)}(hdrm_gem_object_inith]jm)}(hdrm_gem_object_inith]hdrm_gem_object_init}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjġhhhj֡hKubj)}(hA(struct drm_device *dev, struct drm_gem_object *obj, size_t size)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j)}jjsbc.drm_gem_object_initasbuh1hhjubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdevh]hdev}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjsubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j?c.drm_gem_object_initasbuh1hhjsubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjm)}(hobjh]hobj}(hj΢hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j?c.drm_gem_object_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjġhhhj֡hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj֡hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj֡hKhjhhubj)}(hhh]h)}(h/initialize an allocated shmem-backed GEM objecth]h/initialize an allocated shmem-backed GEM object}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj֡hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1j2hhhj}hNhNubj)}(hX'**Parameters** ``struct drm_device *dev`` drm_device the object should be initialized for ``struct drm_gem_object *obj`` drm_gem_object to initialize ``size_t size`` object size **Description** Initialize an already allocated GEM object of the specified size with shmfs backing store.h](h)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhj\ubj)}(hhh](j)}(hK``struct drm_device *dev`` drm_device the object should be initialized for h](j)}(h``struct drm_device *dev``h]j)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhj{ubj )}(hhh]h)}(h/drm_device the object should be initialized forh]h/drm_device the object should be initialized for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjxubj)}(h<``struct drm_gem_object *obj`` drm_gem_object to initialize h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhjubj )}(hhh]h)}(hdrm_gem_object to initializeh]hdrm_gem_object to initialize}(hjӣhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϣhKhjУubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjϣhKhjxubj)}(h``size_t size`` object size h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhjubj )}(hhh]h)}(h object sizeh]h object size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubh)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhj\ubh)}(hZInitialize an already allocated GEM object of the specified size with shmfs backing store.h]hZInitialize an already allocated GEM object of the specified size with shmfs backing store.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_gem_private_object_init (C function)c.drm_gem_private_object_inithNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hbvoid drm_gem_private_object_init (struct drm_device *dev, struct drm_gem_object *obj, size_t size)h]j>)}(havoid drm_gem_private_object_init(struct drm_device *dev, struct drm_gem_object *obj, size_t size)h](jc)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjohhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjohhhjhKubjg)}(hdrm_gem_private_object_inith]jm)}(hdrm_gem_private_object_inith]hdrm_gem_private_object_init}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjohhhjhKubj)}(hA(struct drm_device *dev, struct drm_gem_object *obj, size_t size)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjΤhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjˤubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjФmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_private_object_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jc.drm_gem_private_object_initasbuh1hhjubjV)}(h h]h }(hj^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjyhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_private_object_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjohhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjkhhhjhKubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhhubj)}(hhh]h)}(h*initialize an allocated private GEM objecth]h*initialize an allocated private GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hX{**Parameters** ``struct drm_device *dev`` drm_device the object should be initialized for ``struct drm_gem_object *obj`` drm_gem_object to initialize ``size_t size`` object size **Description** Initialize an already allocated GEM object of the specified size with no GEM provided backing store. Instead the caller is responsible for backing the object and handling it.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhjubj)}(hhh](j)}(hK``struct drm_device *dev`` drm_device the object should be initialized for h](j)}(h``struct drm_device *dev``h]j)}(hj,h]hstruct drm_device *dev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhj&ubj )}(hhh]h)}(h/drm_device the object should be initialized forh]h/drm_device the object should be initialized for}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjBubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhKhj#ubj)}(h<``struct drm_gem_object *obj`` drm_gem_object to initialize h](j)}(h``struct drm_gem_object *obj``h]j)}(hjeh]hstruct drm_gem_object *obj}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhj_ubj )}(hhh]h)}(hdrm_gem_object to initializeh]hdrm_gem_object to initialize}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhKhj#ubj)}(h``size_t size`` object size h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhjubj )}(hhh]h)}(h object sizeh]h object size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj#ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj٦h]h Description}(hjۦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjצubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhjubh)}(hInitialize an already allocated GEM object of the specified size with no GEM provided backing store. Instead the caller is responsible for backing the object and handling it.h]hInitialize an already allocated GEM object of the specified size with no GEM provided backing store. Instead the caller is responsible for backing the object and handling it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_gem_private_object_fini (C function)c.drm_gem_private_object_finihNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h=void drm_gem_private_object_fini (struct drm_gem_object *obj)h]j>)}(h)}(h)}(hcint drm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev, u32 handle, u64 *offset)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMTubjV)}(h h]h }(hjªhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMTubjg)}(hdrm_gem_dumb_map_offseth]jm)}(hdrm_gem_dumb_map_offseth]hdrm_gem_dumb_map_offset}(hjԪhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjЪubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMTubj)}(hH(struct drm_file *file, struct drm_device *dev, u32 handle, u64 *offset)h](j)}(hstruct drm_file *fileh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj֪sbc.drm_gem_dumb_map_offsetasbuh1hhjubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hfileh]hfile}(hjIhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj^ubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j*c.drm_gem_dumb_map_offsetasbuh1hhj^ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjm)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 handleh](h)}(hhh]jm)}(hu32h]hu32}(hjիhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjҫubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj׫modnameN classnameNjj)}j]j*c.drm_gem_dumb_map_offsetasbuh1hhjΫubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjΫubjm)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjΫubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 *offseth](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j*c.drm_gem_dumb_map_offsetasbuh1hhjubjV)}(h h]h }(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hoffseth]hoffset}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMTubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMTubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMThjhhubj)}(hhh]h)}(h,return the fake mmap offset for a gem objecth]h,return the fake mmap offset for a gem object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMHhj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMTubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hX**Parameters** ``struct drm_file *file`` drm file-private structure containing the gem object ``struct drm_device *dev`` corresponding drm_device ``u32 handle`` gem object handle ``u64 *offset`` return location for the fake mmap offset **Description** This implements the :c:type:`drm_driver.dumb_map_offset ` kms driver callback for drivers which use gem to manage their backing storage. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMLhjubj)}(hhh](j)}(hO``struct drm_file *file`` drm file-private structure containing the gem object h](j)}(h``struct drm_file *file``h]j)}(hjh]hstruct drm_file *file}(hjìhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMIhjubj )}(hhh]h)}(h4drm file-private structure containing the gem objecth]h4drm file-private structure containing the gem object}(hjڬhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj֬hMIhj׬ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj֬hMIhjubj)}(h4``struct drm_device *dev`` corresponding drm_device h](j)}(h``struct drm_device *dev``h]j)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMJhjubj )}(hhh]h)}(hcorresponding drm_deviceh]hcorresponding drm_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMJhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjubj)}(h!``u32 handle`` gem object handle h](j)}(h``u32 handle``h]j)}(hj3h]h u32 handle}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMKhj-ubj )}(hhh]h)}(hgem object handleh]hgem object handle}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMKhjIubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMKhjubj)}(h9``u64 *offset`` return location for the fake mmap offset h](j)}(h``u64 *offset``h]j)}(hjlh]h u64 *offset}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMLhjfubj )}(hhh]h)}(h(return location for the fake mmap offseth]h(return location for the fake mmap offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMLhjubah}(h]h ]h"]h$]h&]uh1j hjfubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMNhjubh)}(hThis implements the :c:type:`drm_driver.dumb_map_offset ` kms driver callback for drivers which use gem to manage their backing storage.h](hThis implements the }(hjhhhNhNubh)}(h1:c:type:`drm_driver.dumb_map_offset `h]j)}(hjǭh]hdrm_driver.dumb_map_offset}(hjɭhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjŭubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMNhjubhO kms driver callback for drivers which use gem to manage their backing storage.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMNhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMQhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gem_handle_create (C function)c.drm_gem_handle_createhNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h`int drm_gem_handle_create (struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep)h]j>)}(h_int drm_gem_handle_create(struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep)h](jc)}(hinth]hint}(hj6hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj2hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2hhhjDhMubjg)}(hdrm_gem_handle_createh]jm)}(hdrm_gem_handle_createh]hdrm_gem_handle_create}(hjWhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj2hhhjDhMubj)}(hF(struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep)h](j)}(hstruct drm_file *file_privh](jD)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjoubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjYsbc.drm_gem_handle_createasbuh1hhjoubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjm)}(h file_privh]h file_priv}(hj̮hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_handle_createasbuh1hhjubjV)}(h h]h }(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubj)}(h u32 *handleph](h)}(hhh]jm)}(hu32h]hu32}(hjXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]jc.drm_gem_handle_createasbuh1hhjQubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjm)}(hhandleph]hhandlep}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubeh}(h]h ]h"]h$]h&]jjuh1jhj2hhhjDhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj.hhhjDhMubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1j7hjDhMhj+hhubj)}(hhh]h)}(h!create a gem handle for an objecth]h!create a gem handle for an object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjDhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjӯjjӯjjjuh1j2hhhj}hNhNubj)}(hXC**Parameters** ``struct drm_file *file_priv`` drm file-private structure to register the handle for ``struct drm_gem_object *obj`` object to register ``u32 *handlep`` pointer to return the created handle to the caller **Description** Create a handle for this object. This adds a handle reference to the object, which includes a regular reference count. Callers will likely want to dereference the object afterwards. Since this publishes **obj** to userspace it must be fully set up by this point, drivers must call this last in their buffer object creation callbacks.h](h)}(h**Parameters**h]j)}(hjݯh]h Parameters}(hj߯hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۯubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjׯubj)}(hhh](j)}(hU``struct drm_file *file_priv`` drm file-private structure to register the handle for h](j)}(h``struct drm_file *file_priv``h]j)}(hjh]hstruct drm_file *file_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h5drm file-private structure to register the handle forh]h5drm file-private structure to register the handle for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``struct drm_gem_object *obj`` object to register h](j)}(h``struct drm_gem_object *obj``h]j)}(hj5h]hstruct drm_gem_object *obj}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj/ubj )}(hhh]h)}(hobject to registerh]hobject to register}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubj)}(hD``u32 *handlep`` pointer to return the created handle to the caller h](j)}(h``u32 *handlep``h]j)}(hjnh]h u32 *handlep}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhubj )}(hhh]h)}(h2pointer to return the created handle to the callerh]h2pointer to return the created handle to the caller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjׯubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjׯubh)}(hCreate a handle for this object. This adds a handle reference to the object, which includes a regular reference count. Callers will likely want to dereference the object afterwards.h]hCreate a handle for this object. This adds a handle reference to the object, which includes a regular reference count. Callers will likely want to dereference the object afterwards.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjׯubh)}(hSince this publishes **obj** to userspace it must be fully set up by this point, drivers must call this last in their buffer object creation callbacks.h](hSince this publishes }(hjΰhhhNhNubj)}(h**obj**h]hobj}(hjְhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΰubh{ to userspace it must be fully set up by this point, drivers must call this last in their buffer object creation callbacks.}(hjΰhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjׯubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gem_free_mmap_offset (C function)c.drm_gem_free_mmap_offsethNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h:void drm_gem_free_mmap_offset (struct drm_gem_object *obj)h]j>)}(h9void drm_gem_free_mmap_offset(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhjhMubjg)}(hdrm_gem_free_mmap_offseth]jm)}(hdrm_gem_free_mmap_offseth]hdrm_gem_free_mmap_offset}(hj0hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj hhhjhMubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjHubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj)}j]j)}jj2sbc.drm_gem_free_mmap_offsetasbuh1hhjHubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubah}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h(release a fake mmap offset for an objecth]h(release a fake mmap offset for an object}(hjϱhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj̱hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hXF**Parameters** ``struct drm_gem_object *obj`` obj in question **Description** This routine frees fake offsets allocated by drm_gem_create_mmap_offset(). Note that drm_gem_object_release() already calls this function, so drivers don't have to take care of releasing the mmap offset themselves when freeing the GEM object.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj)}(hhh]j)}(h/``struct drm_gem_object *obj`` obj in question h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj ubj )}(hhh]h)}(hobj in questionh]hobj in question}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(hJThis routine frees fake offsets allocated by drm_gem_create_mmap_offset().h]hJThis routine frees fake offsets allocated by drm_gem_create_mmap_offset().}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(hNote that drm_gem_object_release() already calls this function, so drivers don't have to take care of releasing the mmap offset themselves when freeing the GEM object.h]hNote that drm_gem_object_release() already calls this function, so drivers don’t have to take care of releasing the mmap offset themselves when freeing the GEM object.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.,drm_gem_create_mmap_offset_size (C function)!c.drm_gem_create_mmap_offset_sizehNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hMint drm_gem_create_mmap_offset_size (struct drm_gem_object *obj, size_t size)h]j>)}(hLint drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_create_mmap_offset_sizeh]jm)}(hdrm_gem_create_mmap_offset_sizeh]hdrm_gem_create_mmap_offset_size}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h)(struct drm_gem_object *obj, size_t size)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjܲhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjزubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjزubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj²sb!c.drm_gem_create_mmap_offset_sizeasbuh1hhjزubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjزubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjزubjm)}(hobjh]hobj}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjزubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjԲubj)}(h size_t sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j!c.drm_gem_create_mmap_offset_sizeasbuh1hhjJubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubjm)}(hsizeh]hsize}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjԲubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h'create a fake mmap offset for an objecth]h'create a fake mmap offset for an object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hX**Parameters** ``struct drm_gem_object *obj`` obj in question ``size_t size`` the virtual size **Description** GEM memory mapping works by handing back to userspace a fake mmap offset it can use in a subsequent mmap(2) call. The DRM core code then looks up the object based on the offset and sets up the various memory mapping structures. This routine allocates and attaches a fake offset for **obj**, in cases where the virtual size differs from the physical size (ie. :c:type:`drm_gem_object.size `). Otherwise just use drm_gem_create_mmap_offset(). This function is idempotent and handles an already allocated mmap offset transparently. Drivers do not need to check for this case.h](h)}(h**Parameters**h]j)}(hjɳh]h Parameters}(hj˳hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdzubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjóubj)}(hhh](j)}(h/``struct drm_gem_object *obj`` obj in question h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hobj in questionh]hobj in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj߳ubj)}(h!``size_t size`` the virtual size h](j)}(h``size_t size``h]j)}(hj!h]h size_t size}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hthe virtual sizeh]hthe virtual size}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj߳ubeh}(h]h ]h"]h$]h&]uh1jhjóubh)}(h**Description**h]j)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjóubh)}(hGEM memory mapping works by handing back to userspace a fake mmap offset it can use in a subsequent mmap(2) call. The DRM core code then looks up the object based on the offset and sets up the various memory mapping structures.h]hGEM memory mapping works by handing back to userspace a fake mmap offset it can use in a subsequent mmap(2) call. The DRM core code then looks up the object based on the offset and sets up the various memory mapping structures.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjóubh)}(hThis routine allocates and attaches a fake offset for **obj**, in cases where the virtual size differs from the physical size (ie. :c:type:`drm_gem_object.size `). Otherwise just use drm_gem_create_mmap_offset().h](h6This routine allocates and attaches a fake offset for }(hjhhhNhNubj)}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhF, in cases where the virtual size differs from the physical size (ie. }(hjhhhNhNubh)}(h.:c:type:`drm_gem_object.size `h]j)}(hjh]hdrm_gem_object.size}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh3). Otherwise just use drm_gem_create_mmap_offset().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjóubh)}(hThis function is idempotent and handles an already allocated mmap offset transparently. Drivers do not need to check for this case.h]hThis function is idempotent and handles an already allocated mmap offset transparently. Drivers do not need to check for this case.}(hjŴhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjóubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_gem_create_mmap_offset (C function)c.drm_gem_create_mmap_offsethNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h;int drm_gem_create_mmap_offset (struct drm_gem_object *obj)h]j>)}(h:int drm_gem_create_mmap_offset(struct drm_gem_object *obj)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM ubjg)}(hdrm_gem_create_mmap_offseth]jm)}(hdrm_gem_create_mmap_offseth]hdrm_gem_create_mmap_offset}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM ubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj-ubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_create_mmap_offsetasbuh1hhj-ubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM hjhhubj)}(hhh]h)}(h'create a fake mmap offset for an objecth]h'create a fake mmap offset for an object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj̵jj̵jjjuh1j2hhhj}hNhNubj)}(hX**Parameters** ``struct drm_gem_object *obj`` obj in question **Description** GEM memory mapping works by handing back to userspace a fake mmap offset it can use in a subsequent mmap(2) call. The DRM core code then looks up the object based on the offset and sets up the various memory mapping structures. This routine allocates and attaches a fake offset for **obj**. Drivers can call drm_gem_free_mmap_offset() before freeing **obj** to release the fake offset again.h](h)}(h**Parameters**h]j)}(hjֵh]h Parameters}(hjصhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԵubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjеubj)}(hhh]j)}(h/``struct drm_gem_object *obj`` obj in question h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hobj in questionh]hobj in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjеubh)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjеubh)}(hGEM memory mapping works by handing back to userspace a fake mmap offset it can use in a subsequent mmap(2) call. The DRM core code then looks up the object based on the offset and sets up the various memory mapping structures.h]hGEM memory mapping works by handing back to userspace a fake mmap offset it can use in a subsequent mmap(2) call. The DRM core code then looks up the object based on the offset and sets up the various memory mapping structures.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjеubh)}(h>This routine allocates and attaches a fake offset for **obj**.h](h6This routine allocates and attaches a fake offset for }(hjUhhhNhNubj)}(h**obj**h]hobj}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjеubh)}(hdDrivers can call drm_gem_free_mmap_offset() before freeing **obj** to release the fake offset again.h](h;Drivers can call drm_gem_free_mmap_offset() before freeing }(hjvhhhNhNubj)}(h**obj**h]hobj}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh" to release the fake offset again.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjеubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_get_pages (C function)c.drm_gem_get_pageshNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h=struct page ** drm_gem_get_pages (struct drm_gem_object *obj)h]j>)}(h;struct page **drm_gem_get_pages(struct drm_gem_object *obj)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM3ubjV)}(h h]h }(hjŶhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjĶhM3ubh)}(hhh]jm)}(hpageh]hpage}(hjֶhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjӶubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjضmodnameN classnameNjj)}j]j)}jdrm_gem_get_pagessbc.drm_gem_get_pagesasbuh1hhjhhhjĶhM3ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjĶhM3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjĶhM3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjĶhM3ubjg)}(hdrm_gem_get_pagesh]jm)}(hjh]hdrm_gem_get_pages}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjĶhM3ubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj:ubjV)}(h h]h }(hjKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj:ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]jc.drm_gem_get_pagesasbuh1hhj:ubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjĶhM3ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjĶhM3ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjĶhM3hjhhubj)}(hhh]h)}(h)}(hbvoid drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, bool dirty, bool accessed)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM~ubjV)}(h h]h }(hj˸hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjʸhM~ubjg)}(hdrm_gem_put_pagesh]jm)}(hdrm_gem_put_pagesh]hdrm_gem_put_pages}(hjݸhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjٸubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjʸhM~ubj)}(hL(struct drm_gem_object *obj, struct page **pages, bool dirty, bool accessed)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj߸sbc.drm_gem_put_pagesasbuh1hhjubjV)}(h h]h }(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct page **pagesh](jD)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjgubjV)}(h h]h }(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjgubh)}(hhh]jm)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j3c.drm_gem_put_pagesasbuh1hhjgubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hj¹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjm)}(hpagesh]hpages}(hjϹhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool dirtyh](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hdirtyh]hdirty}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool accessedh](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(haccessedh]haccessed}(hj7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjʸhM~ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjʸhM~ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjʸhM~hjhhubj)}(hhh]h)}(h-helper to free backing pages for a GEM objecth]h-helper to free backing pages for a GEM object}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMxhj^hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjʸhM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct drm_gem_object *obj`` obj in question ``struct page **pages`` pages to free ``bool dirty`` if true, pages will be marked as dirty ``bool accessed`` if true, the pages will be marked as accessedh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM|hj}ubj)}(hhh](j)}(h/``struct drm_gem_object *obj`` obj in question h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMyhjubj )}(hhh]h)}(hobj in questionh]hobj in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMyhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubj)}(h&``struct page **pages`` pages to free h](j)}(h``struct page **pages``h]j)}(hjۺh]hstruct page **pages}(hjݺhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٺubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMzhjպubj )}(hhh]h)}(h pages to freeh]h pages to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1j hjպubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubj)}(h6``bool dirty`` if true, pages will be marked as dirty h](j)}(h``bool dirty``h]j)}(hjh]h bool dirty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM{hjubj )}(hhh]h)}(h&if true, pages will be marked as dirtyh]h&if true, pages will be marked as dirty}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hM{hj*ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj)hM{hjubj)}(h?``bool accessed`` if true, the pages will be marked as accessedh](j)}(h``bool accessed``h]j)}(hjMh]h bool accessed}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM}hjGubj )}(hhh]h)}(h-if true, the pages will be marked as accessedh]h-if true, the pages will be marked as accessed}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM|hjcubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM}hjubeh}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_gem_objects_lookup (C function)c.drm_gem_objects_lookuphNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hyint drm_gem_objects_lookup (struct drm_file *filp, void __user *bo_handles, int count, struct drm_gem_object ***objs_out)h]j>)}(hxint drm_gem_objects_lookup(struct drm_file *filp, void __user *bo_handles, int count, struct drm_gem_object ***objs_out)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_objects_lookuph]jm)}(hdrm_gem_objects_lookuph]hdrm_gem_objects_lookup}(hjȻhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjĻubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h^(struct drm_file *filp, void __user *bo_handles, int count, struct drm_gem_object ***objs_out)h](j)}(hstruct drm_file *filph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjʻsbc.drm_gem_objects_lookupasbuh1hhjubjV)}(h h]h }(hj"hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hfilph]hfilp}(hj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjܻubj)}(hvoid __user *bo_handlesh](jc)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjRubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubh__user}(hjRhhhNhNubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjm)}(h bo_handlesh]h bo_handles}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjܻubj)}(h int counth](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hcounth]hcount}(hjƼhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjܻubj)}(h!struct drm_gem_object ***objs_outh](jD)}(hjh]hstruct}(hj߼hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjۼubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjۼubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_objects_lookupasbuh1hhjۼubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjۼubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۼubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۼubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۼubjm)}(hobjs_outh]hobjs_out}(hjPhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjۼubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjܻubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h,look up GEM objects from an array of handlesh]h,look up GEM objects from an array of handles}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjwhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hXs**Parameters** ``struct drm_file *filp`` DRM file private date ``void __user *bo_handles`` user pointer to array of userspace handle ``int count`` size of handle array ``struct drm_gem_object ***objs_out`` returned pointer to array of drm_gem_object pointers **Description** Takes an array of userspace handles and returns a newly allocated array of GEM objects. For a single handle lookup, use drm_gem_object_lookup(). **Return** **objs** filled in with GEM object pointers. Returned GEM objects need to be released with drm_gem_object_put(). -ENOENT is returned on a lookup failure. 0 is returned on success.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj)}(hhh](j)}(h0``struct drm_file *filp`` DRM file private date h](j)}(h``struct drm_file *filp``h]j)}(hjh]hstruct drm_file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hDRM file private dateh]hDRM file private date}(hjԽhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjнhMhjѽubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjнhMhjubj)}(hF``void __user *bo_handles`` user pointer to array of userspace handle h](j)}(h``void __user *bo_handles``h]j)}(hjh]hvoid __user *bo_handles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h)user pointer to array of userspace handleh]h)user pointer to array of userspace handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h#``int count`` size of handle array h](j)}(h ``int count``h]j)}(hj-h]h int count}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj'ubj )}(hhh]h)}(hsize of handle arrayh]hsize of handle array}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubj)}(h[``struct drm_gem_object ***objs_out`` returned pointer to array of drm_gem_object pointers h](j)}(h%``struct drm_gem_object ***objs_out``h]j)}(hjfh]h!struct drm_gem_object ***objs_out}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj`ubj )}(hhh]h)}(h4returned pointer to array of drm_gem_object pointersh]h4returned pointer to array of drm_gem_object pointers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(hWTakes an array of userspace handles and returns a newly allocated array of GEM objects.h]hWTakes an array of userspace handles and returns a newly allocated array of GEM objects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(h8For a single handle lookup, use drm_gem_object_lookup().h]h8For a single handle lookup, use drm_gem_object_lookup().}(hjƾhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(h **Return**h]j)}(hj׾h]hReturn}(hjپhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjվubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(h**objs** filled in with GEM object pointers. Returned GEM objects need to be released with drm_gem_object_put(). -ENOENT is returned on a lookup failure. 0 is returned on success.h](j)}(h**objs**h]hobjs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh filled in with GEM object pointers. Returned GEM objects need to be released with drm_gem_object_put(). -ENOENT is returned on a lookup failure. 0 is returned on success.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gem_object_lookup (C function)c.drm_gem_object_lookuphNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hQstruct drm_gem_object * drm_gem_object_lookup (struct drm_file *filp, u32 handle)h]j>)}(hOstruct drm_gem_object *drm_gem_object_lookup(struct drm_file *filp, u32 handle)h](jD)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj&hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&hhhj7hMubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjIhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j)}jdrm_gem_object_lookupsbc.drm_gem_object_lookupasbuh1hhj&hhhj7hMubjV)}(h h]h }(hjjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&hhhj7hMubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubjg)}(hdrm_gem_object_lookuph]jm)}(hjgh]hdrm_gem_object_lookup}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj&hhhj7hMubj)}(h#(struct drm_file *filp, u32 handle)h](j)}(hstruct drm_file *filph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hj¿hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjĿmodnameN classnameNjj)}j]jec.drm_gem_object_lookupasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 handleh](h)}(hhh]jm)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jec.drm_gem_object_lookupasbuh1hhjubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hhandleh]hhandle}(hjChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj7hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj"hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj7hMhjhhubj)}(hhh]h)}(h$look up a GEM object from its handleh]h$look up a GEM object from its handle}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hX**Parameters** ``struct drm_file *filp`` DRM file private date ``u32 handle`` userspace handle **Description** If looking up an array of handles, use drm_gem_objects_lookup(). **Return** A reference to the object named by the handle if such exists on **filp**, NULL otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj)}(hhh](j)}(h0``struct drm_file *filp`` DRM file private date h](j)}(h``struct drm_file *filp``h]j)}(hjh]hstruct drm_file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hDRM file private dateh]hDRM file private date}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``u32 handle`` userspace handle h](j)}(h``u32 handle``h]j)}(hjh]h u32 handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(huserspace handleh]huserspace handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(h@If looking up an array of handles, use drm_gem_objects_lookup().h]h@If looking up an array of handles, use drm_gem_objects_lookup().}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(h **Return**h]j)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(hYA reference to the object named by the handle if such exists on **filp**, NULL otherwise.h](h@A reference to the object named by the handle if such exists on }(hj_hhhNhNubj)}(h**filp**h]hfilp}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh, NULL otherwise.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gem_dma_resv_wait (C function)c.drm_gem_dma_resv_waithNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(helong drm_gem_dma_resv_wait (struct drm_file *filep, u32 handle, bool wait_all, unsigned long timeout)h]j>)}(hdlong drm_gem_dma_resv_wait(struct drm_file *filep, u32 handle, bool wait_all, unsigned long timeout)h](jc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_dma_resv_waith]jm)}(hdrm_gem_dma_resv_waith]hdrm_gem_dma_resv_wait}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hJ(struct drm_file *filep, u32 handle, bool wait_all, unsigned long timeout)h](j)}(hstruct drm_file *fileph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_dma_resv_waitasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hfileph]hfilep}(hj6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 handleh](h)}(hhh]jm)}(hu32h]hu32}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jc.drm_gem_dma_resv_waitasbuh1hhjKubjV)}(h h]h }(hjphhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKubjm)}(hhandleh]hhandle}(hj~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool wait_allh](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hwait_allh]hwait_all}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long timeouth](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hJWait on GEM object's reservation's objects shared and/or exclusive fences.h]hNWait on GEM object’s reservation’s objects shared and/or exclusive fences.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1j2hhhj}hNhNubj)}(hXv**Parameters** ``struct drm_file *filep`` DRM file private date ``u32 handle`` userspace handle ``bool wait_all`` if true, wait on all fences, else wait on just exclusive fence ``unsigned long timeout`` timeout value in jiffies or zero to return immediately **Return** Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or greater than 0 on success.h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjIubj)}(hhh](j)}(h1``struct drm_file *filep`` DRM file private date h](j)}(h``struct drm_file *filep``h]j)}(hjnh]hstruct drm_file *filep}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhubj )}(hhh]h)}(hDRM file private dateh]hDRM file private date}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(h ``u32 handle`` userspace handle h](j)}(h``u32 handle``h]j)}(hjh]h u32 handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(huserspace handleh]huserspace handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(hQ``bool wait_all`` if true, wait on all fences, else wait on just exclusive fence h](j)}(h``bool wait_all``h]j)}(hjh]h bool wait_all}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h>if true, wait on all fences, else wait on just exclusive fenceh]h>if true, wait on all fences, else wait on just exclusive fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(hQ``unsigned long timeout`` timeout value in jiffies or zero to return immediately h](j)}(h``unsigned long timeout``h]j)}(hjh]hunsigned long timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h6timeout value in jiffies or zero to return immediatelyh]h6timeout value in jiffies or zero to return immediately}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h **Return**h]j)}(hjTh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjIubh)}(h[Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or greater than 0 on success.h]h[Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or greater than 0 on success.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_gem_object_release (C function)c.drm_gem_object_releasehNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h8void drm_gem_object_release (struct drm_gem_object *obj)h]j>)}(h7void drm_gem_object_release(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_object_releaseh]jm)}(hdrm_gem_object_releaseh]hdrm_gem_object_release}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_object_releaseasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h#release GEM buffer object resourcesh]h#release GEM buffer object resources}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct drm_gem_object *obj`` GEM buffer object **Description** This releases any structures and resources used by **obj** and is the inverse of drm_gem_object_init().h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjuubj)}(hhh]j)}(h1``struct drm_gem_object *obj`` GEM buffer object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hGEM buffer objecth]hGEM buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjuubh)}(hgThis releases any structures and resources used by **obj** and is the inverse of drm_gem_object_init().h](h3This releases any structures and resources used by }(hjhhhNhNubj)}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- and is the inverse of drm_gem_object_init().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_object_free (C function)c.drm_gem_object_freehNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h,void drm_gem_object_free (struct kref *kref)h]j>)}(h+void drm_gem_object_free(struct kref *kref)h](jc)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj(hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(hhhj:hMubjg)}(hdrm_gem_object_freeh]jm)}(hdrm_gem_object_freeh]hdrm_gem_object_free}(hjMhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj(hhhj:hMubj)}(h(struct kref *kref)h]j)}(hstruct kref *krefh](jD)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjeubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjeubh)}(hhh]jm)}(hkrefh]hkref}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjOsbc.drm_gem_object_freeasbuh1hhjeubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjm)}(hkrefh]hkref}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubah}(h]h ]h"]h$]h&]jjuh1jhj(hhhj:hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj$hhhj:hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj:hMhj!hhubj)}(hhh]h)}(hfree a GEM objecth]hfree a GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct kref *kref`` kref of the object to free **Description** Called after the last reference to the object has been lost. Frees the objecth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj)}(hhh]j)}(h1``struct kref *kref`` kref of the object to free h](j)}(h``struct kref *kref``h]j)}(hj-h]hstruct kref *kref}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj'ubj )}(hhh]h)}(hkref of the object to freeh]hkref of the object to free}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(h)}(h0void drm_gem_vm_open(struct vm_area_struct *vma)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_vm_openh]jm)}(hdrm_gem_vm_openh]hdrm_gem_vm_open}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(struct vm_area_struct *vma)h]j)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_vm_openasbuh1hhjubjV)}(h h]h }(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvmah]hvma}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h%vma->ops->open implementation for GEMh]h%vma->ops->open implementation for GEM}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct vm_area_struct *vma`` VM area structure **Description** This function implements the #vm_operations_struct open() callback for GEM drivers. This must be used together with drm_gem_vm_close().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj)}(hhh]j)}(h1``struct vm_area_struct *vma`` VM area structure h](j)}(h``struct vm_area_struct *vma``h]j)}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hVM area structureh]hVM area structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(hThis function implements the #vm_operations_struct open() callback for GEM drivers. This must be used together with drm_gem_vm_close().h]hThis function implements the #vm_operations_struct open() callback for GEM drivers. This must be used together with drm_gem_vm_close().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_vm_close (C function)c.drm_gem_vm_closehNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h2void drm_gem_vm_close (struct vm_area_struct *vma)h]j>)}(h1void drm_gem_vm_close(struct vm_area_struct *vma)h](jc)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj9hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjLhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9hhhjKhMubjg)}(hdrm_gem_vm_closeh]jm)}(hdrm_gem_vm_closeh]hdrm_gem_vm_close}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj9hhhjKhMubj)}(h(struct vm_area_struct *vma)h]j)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjvubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjvubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj`sbc.drm_gem_vm_closeasbuh1hhjvubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjm)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhj9hhhjKhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj5hhhjKhMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1j7hjKhMhj2hhubj)}(hhh]h)}(h&vma->ops->close implementation for GEMh]h&vma->ops->close implementation for GEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjKhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct vm_area_struct *vma`` VM area structure **Description** This function implements the #vm_operations_struct close() callback for GEM drivers. This must be used together with drm_gem_vm_open().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj)}(hhh]j)}(h1``struct vm_area_struct *vma`` VM area structure h](j)}(h``struct vm_area_struct *vma``h]j)}(hj>h]hstruct vm_area_struct *vma}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj8ubj )}(hhh]h)}(hVM area structureh]hVM area structure}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjTubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(hThis function implements the #vm_operations_struct close() callback for GEM drivers. This must be used together with drm_gem_vm_open().h]hThis function implements the #vm_operations_struct close() callback for GEM drivers. This must be used together with drm_gem_vm_open().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_mmap_obj (C function)c.drm_gem_mmap_objhNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(heint drm_gem_mmap_obj (struct drm_gem_object *obj, unsigned long obj_size, struct vm_area_struct *vma)h]j>)}(hdint drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM'ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM'ubjg)}(hdrm_gem_mmap_objh]jm)}(hdrm_gem_mmap_objh]hdrm_gem_mmap_obj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM'ubj)}(hP(struct drm_gem_object *obj, unsigned long obj_size, struct vm_area_struct *vma)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_mmap_objasbuh1hhjubjV)}(h h]h }(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long obj_sizeh](jc)}(hunsignedh]hunsigned}(hjmhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjiubjV)}(h h]h }(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjiubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjiubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjiubjm)}(hobj_sizeh]hobj_size}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.drm_gem_mmap_objasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM'ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM'hjhhubj)}(hhh]h)}(hmemory map a GEM objecth]hmemory map a GEM object}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1j2hhhj}hNhNubj)}(hX**Parameters** ``struct drm_gem_object *obj`` the GEM object to map ``unsigned long obj_size`` the object size to be mapped, in bytes ``struct vm_area_struct *vma`` VMA for the area to be mapped **Description** Set up the VMA to prepare mapping of the GEM object using the GEM object's vm_ops. Depending on their requirements, GEM objects can either provide a fault handler in their vm_ops (in which case any accesses to the object will be trapped, to perform migration, GTT binding, surface register allocation, or performance monitoring), or mmap the buffer memory synchronously after calling drm_gem_mmap_obj. This function is mainly intended to implement the DMABUF mmap operation, when the GEM object is not looked up based on its fake offset. To implement the DRM mmap operation, drivers should use the drm_gem_mmap() function. drm_gem_mmap_obj() assumes the user is granted access to the buffer while drm_gem_mmap() prevents unprivileged users from mapping random objects. So callers must verify access restrictions before calling this helper. Return 0 or success or -EINVAL if the object size is smaller than the VMA size, or if no vm_ops are provided.h](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj[ubj)}(hhh](j)}(h5``struct drm_gem_object *obj`` the GEM object to map h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjzubj )}(hhh]h)}(hthe GEM object to maph]hthe GEM object to map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(hB``unsigned long obj_size`` the object size to be mapped, in bytes h](j)}(h``unsigned long obj_size``h]j)}(hjh]hunsigned long obj_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h&the object size to be mapped, in bytesh]h&the object size to be mapped, in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](j)}(h``struct vm_area_struct *vma``h]j)}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubh)}(h**Description**h]j)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj[ubh)}(hXSet up the VMA to prepare mapping of the GEM object using the GEM object's vm_ops. Depending on their requirements, GEM objects can either provide a fault handler in their vm_ops (in which case any accesses to the object will be trapped, to perform migration, GTT binding, surface register allocation, or performance monitoring), or mmap the buffer memory synchronously after calling drm_gem_mmap_obj.h]hXSet up the VMA to prepare mapping of the GEM object using the GEM object’s vm_ops. Depending on their requirements, GEM objects can either provide a fault handler in their vm_ops (in which case any accesses to the object will be trapped, to perform migration, GTT binding, surface register allocation, or performance monitoring), or mmap the buffer memory synchronously after calling drm_gem_mmap_obj.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj[ubh)}(hThis function is mainly intended to implement the DMABUF mmap operation, when the GEM object is not looked up based on its fake offset. To implement the DRM mmap operation, drivers should use the drm_gem_mmap() function.h]hThis function is mainly intended to implement the DMABUF mmap operation, when the GEM object is not looked up based on its fake offset. To implement the DRM mmap operation, drivers should use the drm_gem_mmap() function.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj[ubh)}(hdrm_gem_mmap_obj() assumes the user is granted access to the buffer while drm_gem_mmap() prevents unprivileged users from mapping random objects. So callers must verify access restrictions before calling this helper.h]hdrm_gem_mmap_obj() assumes the user is granted access to the buffer while drm_gem_mmap() prevents unprivileged users from mapping random objects. So callers must verify access restrictions before calling this helper.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM hj[ubh)}(hmReturn 0 or success or -EINVAL if the object size is smaller than the VMA size, or if no vm_ops are provided.h]hmReturn 0 or success or -EINVAL if the object size is smaller than the VMA size, or if no vm_ops are provided.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM$hj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_mmap (C function)c.drm_gem_mmaphNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h@int drm_gem_mmap (struct file *filp, struct vm_area_struct *vma)h]j>)}(h?int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMbubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMbubjg)}(h drm_gem_mmaph]jm)}(h drm_gem_mmaph]h drm_gem_mmap}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMbubj)}(h/(struct file *filp, struct vm_area_struct *vma)h](j)}(hstruct file *filph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_mmapasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hfilph]hfilp}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjJubjV)}(h h]h }(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjlhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jc.drm_gem_mmapasbuh1hhjJubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjm)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMbubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMbubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMbhjhhubj)}(hhh]h)}(h"memory map routine for GEM objectsh]h"memory map routine for GEM objects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMThjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hXC**Parameters** ``struct file *filp`` DRM file pointer ``struct vm_area_struct *vma`` VMA for the area to be mapped **Description** If a driver supports GEM object mapping, mmap calls on the DRM file descriptor will end up here. Look up the GEM object based on the offset passed in (vma->vm_pgoff will contain the fake offset we created when the GTT map ioctl was called on the object) and map it with a call to drm_gem_mmap_obj(). If the caller is not granted access to the buffer object, the mmap will fail with EACCES. Please see the vma manager for more information.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMXhjubj)}(hhh](j)}(h'``struct file *filp`` DRM file pointer h](j)}(h``struct file *filp``h]j)}(hjh]hstruct file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMUhj ubj )}(hhh]h)}(hDRM file pointerh]hDRM file pointer}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMUhj&ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMUhjubj)}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](j)}(h``struct vm_area_struct *vma``h]j)}(hjIh]hstruct vm_area_struct *vma}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMVhjCubj )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMVhj_ubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMVhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMXhjubh)}(h`If a driver supports GEM object mapping, mmap calls on the DRM file descriptor will end up here.h]h`If a driver supports GEM object mapping, mmap calls on the DRM file descriptor will end up here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMXhjubh)}(hLook up the GEM object based on the offset passed in (vma->vm_pgoff will contain the fake offset we created when the GTT map ioctl was called on the object) and map it with a call to drm_gem_mmap_obj().h]hLook up the GEM object based on the offset passed in (vma->vm_pgoff will contain the fake offset we created when the GTT map ioctl was called on the object) and map it with a call to drm_gem_mmap_obj().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM[hjubh)}(hIf the caller is not granted access to the buffer object, the mmap will fail with EACCES. Please see the vma manager for more information.h]hIf the caller is not granted access to the buffer object, the mmap will fail with EACCES. Please see the vma manager for more information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_gem_lock_reservations (C function)c.drm_gem_lock_reservationshNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hkint drm_gem_lock_reservations (struct drm_gem_object **objs, int count, struct ww_acquire_ctx *acquire_ctx)h]j>)}(hjint drm_gem_lock_reservations(struct drm_gem_object **objs, int count, struct ww_acquire_ctx *acquire_ctx)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_lock_reservationsh]jm)}(hdrm_gem_lock_reservationsh]hdrm_gem_lock_reservations}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hM(struct drm_gem_object **objs, int count, struct ww_acquire_ctx *acquire_ctx)h](j)}(hstruct drm_gem_object **objsh](jD)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j)}jj sbc.drm_gem_lock_reservationsasbuh1hhj ubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hobjsh]hobjs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int counth](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hcounth]hcount}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct ww_acquire_ctx *acquire_ctxh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hww_acquire_ctxh]hww_acquire_ctx}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j^c.drm_gem_lock_reservationsasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h acquire_ctxh]h acquire_ctx}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hHSets up the ww context and acquires the lock on an array of GEM objects.h]hHSets up the ww context and acquires the lock on an array of GEM objects.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1j2hhhj}hNhNubj)}(hX**Parameters** ``struct drm_gem_object **objs`` drm_gem_objects to lock ``int count`` Number of objects in **objs** ``struct ww_acquire_ctx *acquire_ctx`` struct ww_acquire_ctx that will be initialized as part of tracking this set of locked reservations. **Description** Once you've locked your reservations, you'll want to set up space for your shared fences (if applicable), submit your job, then drm_gem_unlock_reservations().h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM hjuubj)}(hhh](j)}(h9``struct drm_gem_object **objs`` drm_gem_objects to lock h](j)}(h ``struct drm_gem_object **objs``h]j)}(hjh]hstruct drm_gem_object **objs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM hjubj )}(hhh]h)}(hdrm_gem_objects to lockh]hdrm_gem_objects to lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h,``int count`` Number of objects in **objs** h](j)}(h ``int count``h]j)}(hjh]h int count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hNumber of objects in **objs**h](hNumber of objects in }(hjhhhNhNubj)}(h**objs**h]hobjs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``struct ww_acquire_ctx *acquire_ctx`` struct ww_acquire_ctx that will be initialized as part of tracking this set of locked reservations. h](j)}(h&``struct ww_acquire_ctx *acquire_ctx``h]j)}(hjh]h"struct ww_acquire_ctx *acquire_ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hcstruct ww_acquire_ctx that will be initialized as part of tracking this set of locked reservations.h]hcstruct ww_acquire_ctx that will be initialized as part of tracking this set of locked reservations.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj0ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjuubh)}(hOnce you've locked your reservations, you'll want to set up space for your shared fences (if applicable), submit your job, then drm_gem_unlock_reservations().h]hOnce you’ve locked your reservations, you’ll want to set up space for your shared fences (if applicable), submit your job, then drm_gem_unlock_reservations().}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_lru_init (C function)c.drm_gem_lru_inithNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hCvoid drm_gem_lru_init (struct drm_gem_lru *lru, struct mutex *lock)h]j>)}(hBvoid drm_gem_lru_init(struct drm_gem_lru *lru, struct mutex *lock)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMYubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMYubjg)}(hdrm_gem_lru_inith]jm)}(hdrm_gem_lru_inith]hdrm_gem_lru_init}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMYubj)}(h-(struct drm_gem_lru *lru, struct mutex *lock)h](j)}(hstruct drm_gem_lru *lruh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gem_lruh]h drm_gem_lru}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_lru_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hlruh]hlru}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct mutex *lockh](jD)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjFubjV)}(h h]h }(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjFubh)}(hhh]jm)}(hmutexh]hmutex}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]jc.drm_gem_lru_initasbuh1hhjFubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjFubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjm)}(hlockh]hlock}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMYubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMYubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMYhjhhubj)}(hhh]h)}(hinitialize a LRUh]hinitialize a LRU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMThjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMYubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hy**Parameters** ``struct drm_gem_lru *lru`` The LRU to initialize ``struct mutex *lock`` The lock protecting the LRUh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMXhjubj)}(hhh](j)}(h2``struct drm_gem_lru *lru`` The LRU to initialize h](j)}(h``struct drm_gem_lru *lru``h]j)}(hj h]hstruct drm_gem_lru *lru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMVhjubj )}(hhh]h)}(hThe LRU to initializeh]hThe LRU to initialize}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMVhj"ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj!hMVhjubj)}(h2``struct mutex *lock`` The lock protecting the LRUh](j)}(h``struct mutex *lock``h]j)}(hjEh]hstruct mutex *lock}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMXhj?ubj )}(hhh]h)}(hThe lock protecting the LRUh]hThe lock protecting the LRU}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMWhj[ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMXhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_lru_remove (C function)c.drm_gem_lru_removehNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h4void drm_gem_lru_remove (struct drm_gem_object *obj)h]j>)}(h3void drm_gem_lru_remove(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMrubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMrubjg)}(hdrm_gem_lru_removeh]jm)}(hdrm_gem_lru_removeh]hdrm_gem_lru_remove}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMrubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_lru_removeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMrubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMrubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMrhjhhubj)}(hhh]h)}(h(remove object from whatever LRU it is inh]h(remove object from whatever LRU it is in}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMlhj\hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMrubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct drm_gem_object *obj`` The GEM object to remove from current LRU **Description** If the object is currently in any LRU, remove it.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMphj{ubj)}(hhh]j)}(hI``struct drm_gem_object *obj`` The GEM object to remove from current LRU h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMphjubj )}(hhh]h)}(h)The GEM object to remove from current LRUh]h)The GEM object to remove from current LRU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubah}(h]h ]h"]h$]h&]uh1jhj{ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMrhj{ubh)}(h1If the object is currently in any LRU, remove it.h]h1If the object is currently in any LRU, remove it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMmhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)drm_gem_lru_move_tail_locked (C function)c.drm_gem_lru_move_tail_lockedhNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hWvoid drm_gem_lru_move_tail_locked (struct drm_gem_lru *lru, struct drm_gem_object *obj)h]j>)}(hVvoid drm_gem_lru_move_tail_locked(struct drm_gem_lru *lru, struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj.hMubjg)}(hdrm_gem_lru_move_tail_lockedh]jm)}(hdrm_gem_lru_move_tail_lockedh]hdrm_gem_lru_move_tail_locked}(hjAhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj.hMubj)}(h5(struct drm_gem_lru *lru, struct drm_gem_object *obj)h](j)}(hstruct drm_gem_lru *lruh](jD)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjYubjV)}(h h]h }(hjjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYubh)}(hhh]jm)}(h drm_gem_lruh]h drm_gem_lru}(hj{hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j)}jjCsbc.drm_gem_lru_move_tail_lockedasbuh1hhjYubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjm)}(hlruh]hlru}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_lru_move_tail_lockedasbuh1hhjubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hj&hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj.hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj.hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj.hMhjhhubj)}(hhh]h)}(h&move the object to the tail of the LRUh]h&move the object to the tail of the LRU}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1j2hhhj}hNhNubj)}(h**Parameters** ``struct drm_gem_lru *lru`` The LRU to move the object into. ``struct drm_gem_object *obj`` The GEM object to move into this LRU **Description** Like :c:type:`drm_gem_lru_move_tail` but lru lock must be heldh](h)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjlubj)}(hhh](j)}(h=``struct drm_gem_lru *lru`` The LRU to move the object into. h](j)}(h``struct drm_gem_lru *lru``h]j)}(hjh]hstruct drm_gem_lru *lru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h The LRU to move the object into.h]h The LRU to move the object into.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hD``struct drm_gem_object *obj`` The GEM object to move into this LRU h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h$The GEM object to move into this LRUh]h$The GEM object to move into this LRU}(hjhhhNhNubah}(h] h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjlubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjlubh)}(h>Like :c:type:`drm_gem_lru_move_tail` but lru lock must be heldh](hLike }(hjhhhNhNubh)}(h:c:type:`drm_gem_lru_move_tail`h]j)}(hj%h]hdrm_gem_lru_move_tail}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_lru_move_tailuh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh but lru lock must be held}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gem_lru_move_tail (C function)c.drm_gem_lru_move_tailhNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hPvoid drm_gem_lru_move_tail (struct drm_gem_lru *lru, struct drm_gem_object *obj)h]j>)}(hOvoid drm_gem_lru_move_tail(struct drm_gem_lru *lru, struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjihhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hj|hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjihhhj{hMubjg)}(hdrm_gem_lru_move_tailh]jm)}(hdrm_gem_lru_move_tailh]hdrm_gem_lru_move_tail}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjihhhj{hMubj)}(h5(struct drm_gem_lru *lru, struct drm_gem_object *obj)h](j)}(hstruct drm_gem_lru *lruh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gem_lruh]h drm_gem_lru}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_lru_move_tailasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hlruh]hlru}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj:hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]jc.drm_gem_lru_move_tailasbuh1hhjubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjshhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjihhhj{hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjehhhj{hMubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1j7hj{hMhjbhhubj)}(hhh]h)}(h&move the object to the tail of the LRUh]h&move the object to the tail of the LRU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj{hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hXL**Parameters** ``struct drm_gem_lru *lru`` The LRU to move the object into. ``struct drm_gem_object *obj`` The GEM object to move into this LRU **Description** If the object is already in this LRU it will be moved to the tail. Otherwise it will be removed from whichever other LRU it is in (if any) and moved into this LRU.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj)}(hhh](j)}(h=``struct drm_gem_lru *lru`` The LRU to move the object into. h](j)}(h``struct drm_gem_lru *lru``h]j)}(hjh]hstruct drm_gem_lru *lru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h The LRU to move the object into.h]h The LRU to move the object into.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hD``struct drm_gem_object *obj`` The GEM object to move into this LRU h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h$The GEM object to move into this LRUh]h$The GEM object to move into this LRU}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(hIf the object is already in this LRU it will be moved to the tail. Otherwise it will be removed from whichever other LRU it is in (if any) and moved into this LRU.h]hIf the object is already in this LRU it will be moved to the tail. Otherwise it will be removed from whichever other LRU it is in (if any) and moved into this LRU.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_lru_scan (C function)c.drm_gem_lru_scanhNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(hunsigned long drm_gem_lru_scan (struct drm_gem_lru *lru, unsigned int nr_to_scan, unsigned long *remaining, bool (*shrink)(struct drm_gem_object *obj))h]j>)}(hunsigned long drm_gem_lru_scan(struct drm_gem_lru *lru, unsigned int nr_to_scan, unsigned long *remaining, bool (*shrink)(struct drm_gem_object *obj))h](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_lru_scanh]jm)}(hdrm_gem_lru_scanh]hdrm_gem_lru_scan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hx(struct drm_gem_lru *lru, unsigned int nr_to_scan, unsigned long *remaining, bool (*shrink)(struct drm_gem_object *obj))h](j)}(hstruct drm_gem_lru *lruh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gem_lruh]h drm_gem_lru}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_lru_scanasbuh1hhjubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hlruh]hlru}(hjIhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int nr_to_scanh](jc)}(hunsignedh]hunsigned}(hjbhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj^ubjV)}(h h]h }(hjphhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^ubjc)}(hinth]hint}(hj~hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj^ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^ubjm)}(h nr_to_scanh]h nr_to_scan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long *remainingh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h remainingh]h remaining}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h*bool (*shrink)(struct drm_gem_object *obj)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(h(h]h(}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hshrinkh]hshrink}(hjGhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubj)}(h)h]h)}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj.h]h(}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjD)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j*c.drm_gem_lru_scanasbuh1hhj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubj)}(hjWh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h)helper to implement shrinker.scan_objectsh]h)helper to implement shrinker.scan_objects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj}hNhNubj)}(hX}**Parameters** ``struct drm_gem_lru *lru`` The LRU to scan ``unsigned int nr_to_scan`` The number of pages to try to reclaim ``unsigned long *remaining`` The number of pages left to reclaim, should be initialized by caller ``bool (*shrink)(struct drm_gem_object *obj)`` Callback to try to shrink/reclaim the object. **Description** If the shrink callback succeeds, it is expected that the driver move the object out of this LRU. If the LRU possibly contain active buffers, it is the responsibility of the shrink callback to check for this (ie. dma_resv_test_signaled()) or if necessary block until the buffer becomes idle.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj)}(hhh](j)}(h,``struct drm_gem_lru *lru`` The LRU to scan h](j)}(h``struct drm_gem_lru *lru``h]j)}(hj?h]hstruct drm_gem_lru *lru}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhj9ubj )}(hhh]h)}(hThe LRU to scanh]hThe LRU to scan}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj6ubj)}(hB``unsigned int nr_to_scan`` The number of pages to try to reclaim h](j)}(h``unsigned int nr_to_scan``h]j)}(hjxh]hunsigned int nr_to_scan}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjrubj )}(hhh]h)}(h%The number of pages to try to reclaimh]h%The number of pages to try to reclaim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhj6ubj)}(hb``unsigned long *remaining`` The number of pages left to reclaim, should be initialized by caller h](j)}(h``unsigned long *remaining``h]j)}(hjh]hunsigned long *remaining}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(hDThe number of pages left to reclaim, should be initialized by callerh]hDThe number of pages left to reclaim, should be initialized by caller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj6ubj)}(h]``bool (*shrink)(struct drm_gem_object *obj)`` Callback to try to shrink/reclaim the object. h](j)}(h.``bool (*shrink)(struct drm_gem_object *obj)``h]j)}(hjh]h*bool (*shrink)(struct drm_gem_object *obj)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubj )}(hhh]h)}(h-Callback to try to shrink/reclaim the object.h]h-Callback to try to shrink/reclaim the object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(h`If the shrink callback succeeds, it is expected that the driver move the object out of this LRU.h]h`If the shrink callback succeeds, it is expected that the driver move the object out of this LRU.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubh)}(hIf the LRU possibly contain active buffers, it is the responsibility of the shrink callback to check for this (ie. dma_resv_test_signaled()) or if necessary block until the buffer becomes idle.h]hIf the LRU possibly contain active buffers, it is the responsibility of the shrink callback to check for this (ie. dma_resv_test_signaled()) or if necessary block until the buffer becomes idle.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_evict (C function)c.drm_gem_evicthNtauh1j!hj}hhhNhNubj3)}(hhh](j8)}(h.int drm_gem_evict (struct drm_gem_object *obj)h]j>)}(h-int drm_gem_evict(struct drm_gem_object *obj)h](jc)}(hinth]hint}(hjyhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjuhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuhhhjhM ubjg)}(h drm_gem_evicth]jm)}(h drm_gem_evicth]h drm_gem_evict}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjuhhhjhM ubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_evictasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjuhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjqhhhjhM ubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1j7hjhM hjnhhubj)}(hhh]h)}(h.helper to evict backing pages for a GEM objecth]h.helper to evict backing pages for a GEM object}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM hj6hhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1j2hhhj}hNhNubj)}(h@**Parameters** ``struct drm_gem_object *obj`` obj in questionh](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjUubj)}(hhh]j)}(h.``struct drm_gem_object *obj`` obj in questionh](j)}(h``struct drm_gem_object *obj``h]j)}(hjzh]hstruct drm_gem_object *obj}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chMhjtubj )}(hhh]h)}(hobj in questionh]hobj in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:355: ./drivers/gpu/drm/drm_gem.chM hjubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}hhhNhNubeh}(h]gem-function-referenceah ]h"]gem function referenceah$]h&]uh1hhj&yhhhhhM^ubh)}(hhh](h)}(h"GEM DMA Helper Functions Referenceh]h"GEM DMA Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMgubh)}(hThe DRM GEM/DMA helpers are a means to provide buffer objects that are presented to the device as a contiguous chunk of memory. This is useful for devices that do not support scatter-gather DMA (either directly or by using an intimately attached IOMMU).h]hThe DRM GEM/DMA helpers are a means to provide buffer objects that are presented to the device as a contiguous chunk of memory. This is useful for devices that do not support scatter-gather DMA (either directly or by using an intimately attached IOMMU).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:361: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjhhubh)}(hXFor devices that access the memory bus through an (external) IOMMU then the buffer objects are allocated using a traditional page-based allocator and may be scattered through physical memory. However they are contiguous in the IOVA space so appear contiguous to devices using them.h]hXFor devices that access the memory bus through an (external) IOMMU then the buffer objects are allocated using a traditional page-based allocator and may be scattered through physical memory. However they are contiguous in the IOVA space so appear contiguous to devices using them.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:361: ./drivers/gpu/drm/drm_gem_dma_helper.chK hjhhubh)}(hrFor other devices then the helpers rely on CMA to provide buffer objects that are physically contiguous in memory.h]hrFor other devices then the helpers rely on CMA to provide buffer objects that are physically contiguous in memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:361: ./drivers/gpu/drm/drm_gem_dma_helper.chK&hjhhubh)}(hFor GEM callback helpers in struct :c:type:`drm_gem_object` functions, see likewise named functions with an _object_ infix (e.g., drm_gem_dma_object_vmap() wraps drm_gem_dma_vmap()). These helpers perform the necessary type conversion.h](h#For GEM callback helpers in struct }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj h]hdrm_gem_object}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:361: ./drivers/gpu/drm/drm_gem_dma_helper.chK)hjubh functions, see likewise named functions with an _object_ infix (e.g., drm_gem_dma_object_vmap() wraps drm_gem_dma_vmap()). These helpers perform the necessary type conversion.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hK)hjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_dma_object (C struct)c.drm_gem_dma_objecthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hdrm_gem_dma_objecth]j>)}(hstruct drm_gem_dma_objecth](jD)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjHhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKubjV)}(h h]h }(hjZhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHhhhjYhKubjg)}(hdrm_gem_dma_objecth]jm)}(hjFh]hdrm_gem_dma_object}(hjlhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjHhhhjYhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjDhhhjYhKubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j7hjYhKhjAhhubj)}(hhh]h)}(h+GEM object backed by DMA memory allocationsh]h+GEM object backed by DMA memory allocations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK hjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXB**Definition**:: struct drm_gem_dma_object { struct drm_gem_object base; dma_addr_t dma_addr; struct sg_table *sgt; void *vaddr; bool map_noncoherent; }; **Members** ``base`` base GEM object ``dma_addr`` DMA address of the backing memory ``sgt`` scatter/gather table for imported PRIME buffers. The table can have more than one entry but they are guaranteed to have contiguous DMA addresses. ``vaddr`` kernel virtual address of the backing memory ``map_noncoherent`` if true, the GEM object is backed by non-coherent memoryh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubjT)}(hstruct drm_gem_dma_object { struct drm_gem_object base; dma_addr_t dma_addr; struct sg_table *sgt; void *vaddr; bool map_noncoherent; };h]hstruct drm_gem_dma_object { struct drm_gem_object base; dma_addr_t dma_addr; struct sg_table *sgt; void *vaddr; bool map_noncoherent; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jSh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubj)}(hhh](j)}(h``base`` base GEM object h](j)}(h``base``h]j)}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubj )}(hhh]h)}(hbase GEM objecth]hbase GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``dma_addr`` DMA address of the backing memory h](j)}(h ``dma_addr``h]j)}(hj4h]hdma_addr}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhj.ubj )}(hhh]h)}(h!DMA address of the backing memoryh]h!DMA address of the backing memory}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKhjJubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhjubj)}(h``sgt`` scatter/gather table for imported PRIME buffers. The table can have more than one entry but they are guaranteed to have contiguous DMA addresses. h](j)}(h``sgt``h]j)}(hjmh]hsgt}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjgubj )}(hhh]h)}(hscatter/gather table for imported PRIME buffers. The table can have more than one entry but they are guaranteed to have contiguous DMA addresses.h]hscatter/gather table for imported PRIME buffers. The table can have more than one entry but they are guaranteed to have contiguous DMA addresses.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h7``vaddr`` kernel virtual address of the backing memory h](j)}(h ``vaddr``h]j)}(hjh]hvaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubj )}(hhh]h)}(h,kernel virtual address of the backing memoryh]h,kernel virtual address of the backing memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hL``map_noncoherent`` if true, the GEM object is backed by non-coherent memoryh](j)}(h``map_noncoherent``h]j)}(hjh]hmap_noncoherent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubj )}(hhh]h)}(h8if true, the GEM object is backed by non-coherent memoryh]h8if true, the GEM object is backed by non-coherent memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_gem_dma_object_free (C function)c.drm_gem_dma_object_freehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h9void drm_gem_dma_object_free (struct drm_gem_object *obj)h]j>)}(h8void drm_gem_dma_object_free(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj6hhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK:ubjV)}(h h]h }(hjIhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6hhhjHhK:ubjg)}(hdrm_gem_dma_object_freeh]jm)}(hdrm_gem_dma_object_freeh]hdrm_gem_dma_object_free}(hj[hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj6hhhjHhK:ubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjsubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj]sbc.drm_gem_dma_object_freeasbuh1hhjsubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubah}(h]h ]h"]h$]h&]jjuh1jhj6hhhjHhK:ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj2hhhjHhK:ubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1j7hjHhK:hj/hhubj)}(hhh]h)}(h*GEM object function for drm_gem_dma_free()h]h*GEM object function for drm_gem_dma_free()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK4hjhhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjHhK:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_gem_object *obj`` GEM object to free **Description** This function wraps drm_gem_dma_free_object(). Drivers that employ the DMA helpers should use it as their :c:type:`drm_gem_object_funcs.free ` handler.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK8hjubj)}(hhh]j)}(h2``struct drm_gem_object *obj`` GEM object to free h](j)}(h``struct drm_gem_object *obj``h]j)}(hj;h]hstruct drm_gem_object *obj}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK5hj5ubj )}(hhh]h)}(hGEM object to freeh]hGEM object to free}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhK5hjQubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhK5hj2ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK7hjubh)}(hThis function wraps drm_gem_dma_free_object(). Drivers that employ the DMA helpers should use it as their :c:type:`drm_gem_object_funcs.free ` handler.h](hjThis function wraps drm_gem_dma_free_object(). Drivers that employ the DMA helpers should use it as their }(hjhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.free `h]j)}(hjh]hdrm_gem_object_funcs.free}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK7hjubh handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_gem_dma_object_print_info (C function)c.drm_gem_dma_object_print_infohNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hqvoid drm_gem_dma_object_print_info (struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj)h]j>)}(hpvoid drm_gem_dma_object_print_info(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKJubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKJubjg)}(hdrm_gem_dma_object_print_infoh]jm)}(hdrm_gem_dma_object_print_infoh]hdrm_gem_dma_object_print_info}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKJubj)}(hN(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj)h](j)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j)}jjsbc.drm_gem_dma_object_print_infoasbuh1hhjubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hjh]hp}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int indenth](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hindenth]hindent}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_gem_object *objh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jUc.drm_gem_dma_object_print_infoasbuh1hhjubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKJubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKJhjhhubj)}(hhh]h)}(h3Print :c:type:`drm_gem_dma_object` info for debugfsh](hPrint }(hjyhhhNhNubh)}(h:c:type:`drm_gem_dma_object`h]j)}(hjh]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jUc.drm_gem_dma_object_print_infoasbj3drm_gem_dma_objectuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjyubh info for debugfs}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKBhjvhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKJubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXk**Parameters** ``struct drm_printer *p`` DRM printer ``unsigned int indent`` Tab indentation level ``const struct drm_gem_object *obj`` GEM object **Description** This function wraps drm_gem_dma_print_info(). Drivers that employ the DMA helpers should use this function as their :c:type:`drm_gem_object_funcs.print_info ` handler.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKFhjubj)}(hhh](j)}(h&``struct drm_printer *p`` DRM printer h](j)}(h``struct drm_printer *p``h]j)}(hjh]hstruct drm_printer *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKChjubj )}(hhh]h)}(h DRM printerh]h DRM printer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKChjubj)}(h.``unsigned int indent`` Tab indentation level h](j)}(h``unsigned int indent``h]j)}(hjh]hunsigned int indent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKDhjubj )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKDhj2ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1hKDhjubj)}(h0``const struct drm_gem_object *obj`` GEM object h](j)}(h$``const struct drm_gem_object *obj``h]j)}(hjUh]h const struct drm_gem_object *obj}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKEhjOubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKEhjkubah}(h]h ]h"]h$]h&]uh1j hjOubeh}(h]h ]h"]h$]h&]uh1jhjjhKEhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKGhjubh)}(hThis function wraps drm_gem_dma_print_info(). Drivers that employ the DMA helpers should use this function as their :c:type:`drm_gem_object_funcs.print_info ` handler.h](htThis function wraps drm_gem_dma_print_info(). Drivers that employ the DMA helpers should use this function as their }(hjhhhNhNubh)}(h@:c:type:`drm_gem_object_funcs.print_info `h]j)}(hjh]hdrm_gem_object_funcs.print_info}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKGhjubh handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.,drm_gem_dma_object_get_sg_table (C function)!c.drm_gem_dma_object_get_sg_tablehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hNstruct sg_table * drm_gem_dma_object_get_sg_table (struct drm_gem_object *obj)h]j>)}(hLstruct sg_table *drm_gem_dma_object_get_sg_table(struct drm_gem_object *obj)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK\ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhK\ubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gem_dma_object_get_sg_tablesb!c.drm_gem_dma_object_get_sg_tableasbuh1hhjhhhjhK\ubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhK\ubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK\ubjg)}(hdrm_gem_dma_object_get_sg_tableh]jm)}(hj5h]hdrm_gem_dma_object_get_sg_table}(hjWhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhK\ubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjnubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j3!c.drm_gem_dma_object_get_sg_tableasbuh1hhjnubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK\ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhK\ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhK\hjhhubj)}(hhh]h)}(h2GEM object function for drm_gem_dma_get_sg_table()h]h2GEM object function for drm_gem_dma_get_sg_table()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKShjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK\ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j2hhhjhNhNubj)}(hX[**Parameters** ``struct drm_gem_object *obj`` GEM object **Description** This function wraps drm_gem_dma_get_sg_table(). Drivers that employ the DMA helpers should use it as their :c:type:`drm_gem_object_funcs.get_sg_table ` handler. **Return** A pointer to the scatter/gather table of pinned pages or NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKWhjubj)}(hhh]j)}(h*``struct drm_gem_object *obj`` GEM object h](j)}(h``struct drm_gem_object *obj``h]j)}(hj4h]hstruct drm_gem_object *obj}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKThj.ubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKThjJubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKThj+ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjoh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKVhjubh)}(hThis function wraps drm_gem_dma_get_sg_table(). Drivers that employ the DMA helpers should use it as their :c:type:`drm_gem_object_funcs.get_sg_table ` handler.h](hkThis function wraps drm_gem_dma_get_sg_table(). Drivers that employ the DMA helpers should use it as their }(hjhhhNhNubh)}(hB:c:type:`drm_gem_object_funcs.get_sg_table `h]j)}(hjh]h!drm_gem_object_funcs.get_sg_table}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKVhjubh handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKVhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKYhjubh)}(hIA pointer to the scatter/gather table of pinned pages or NULL on failure.h]hIA pointer to the scatter/gather table of pinned pages or NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_gem_dma_object_mmap (C function)c.drm_gem_dma_object_mmaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hTint drm_gem_dma_object_mmap (struct drm_gem_object *obj, struct vm_area_struct *vma)h]j>)}(hSint drm_gem_dma_object_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj hKubjg)}(hdrm_gem_dma_object_mmaph]jm)}(hdrm_gem_dma_object_mmaph]hdrm_gem_dma_object_mmap}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj hKubj)}(h8(struct drm_gem_object *obj, struct vm_area_struct *vma)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj7ubjV)}(h h]h }(hjHhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j)}jj!sbc.drm_gem_dma_object_mmapasbuh1hhj7ubjV)}(h h]h }(hjyhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]juc.drm_gem_dma_object_mmapasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj hKhjhhubj)}(hhh]h)}(h*GEM object function for drm_gem_dma_mmap()h]h*GEM object function for drm_gem_dma_mmap()}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKwhj+hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1j2hhhjhNhNubj)}(hXs**Parameters** ``struct drm_gem_object *obj`` GEM object ``struct vm_area_struct *vma`` VMA for the area to be mapped **Description** This function wraps drm_gem_dma_mmap(). Drivers that employ the dma helpers should use it as their :c:type:`drm_gem_object_funcs.mmap ` handler. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK{hjJubj)}(hhh](j)}(h*``struct drm_gem_object *obj`` GEM object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjoh]hstruct drm_gem_object *obj}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKxhjiubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKxhjubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjhKxhjfubj)}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](j)}(h``struct vm_area_struct *vma``h]j)}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKyhjubj )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKyhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKyhjfubeh}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK{hjJubh)}(hThis function wraps drm_gem_dma_mmap(). Drivers that employ the dma helpers should use it as their :c:type:`drm_gem_object_funcs.mmap ` handler.h](hcThis function wraps drm_gem_dma_mmap(). Drivers that employ the dma helpers should use it as their }(hjhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.mmap `h]j)}(hjh]hdrm_gem_object_funcs.mmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK{hjubh handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK{hjJubh)}(h **Return**h]j)}(hj-h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK~hjJubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhK~hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.1DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE (C macro))c.DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATEhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h'DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATEh]j>)}(h'DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATEh]jg)}(h'DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATEh]jm)}(hjlh]h'DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjnhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjjhhhjhKubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjghhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjghhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubh)}(h>``DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE (dumb_create_func)``h]j)}(hjh]h:DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE (dumb_create_func)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjhhubj@-)}(hDMA GEM driver operations h]h)}(hDMA GEM driver operationsh]hDMA GEM driver operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1j?-hjhKhjhhubj)}(hX **Parameters** ``dumb_create_func`` callback function for .dumb_create **Description** This macro provides a shortcut for setting the default GEM operations in the :c:type:`drm_driver` structure. This macro is a variant of DRM_GEM_DMA_DRIVER_OPS for drivers that override the default implementation of :c:type:`struct rm_driver `.dumb_create. Use DRM_GEM_DMA_DRIVER_OPS if possible. Drivers that require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubj)}(hhh]j)}(h8``dumb_create_func`` callback function for .dumb_create h](j)}(h``dumb_create_func``h]j)}(hjh]hdumb_create_func}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubj )}(hhh]h)}(h"callback function for .dumb_createh]h"callback function for .dumb_create}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh)}(hlThis macro provides a shortcut for setting the default GEM operations in the :c:type:`drm_driver` structure.h](hMThis macro provides a shortcut for setting the default GEM operations in the }(hjMhhhNhNubh)}(h:c:type:`drm_driver`h]j)}(hjWh]h drm_driver}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjMubh structure.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthKhjubh)}(hXCThis macro is a variant of DRM_GEM_DMA_DRIVER_OPS for drivers that override the default implementation of :c:type:`struct rm_driver `.dumb_create. Use DRM_GEM_DMA_DRIVER_OPS if possible. Drivers that require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead.h](hjThis macro is a variant of DRM_GEM_DMA_DRIVER_OPS for drivers that override the default implementation of }(hjhhhNhNubh)}(h&:c:type:`struct rm_driver `h]j)}(hjh]hstruct rm_driver}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 rm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh.dumb_create. Use DRM_GEM_DMA_DRIVER_OPS if possible. Drivers that require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. DRM_GEM_DMA_DRIVER_OPS (C macro)c.DRM_GEM_DMA_DRIVER_OPShNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hDRM_GEM_DMA_DRIVER_OPSh]j>)}(hDRM_GEM_DMA_DRIVER_OPSh]jg)}(hDRM_GEM_DMA_DRIVER_OPSh]jm)}(hjh]hDRM_GEM_DMA_DRIVER_OPS}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubh)}(h``DRM_GEM_DMA_DRIVER_OPS``h]j)}(hjh]hDRM_GEM_DMA_DRIVER_OPS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjhhubj@-)}(hX DMA GEM driver operations **Description** This macro provides a shortcut for setting the default GEM operations in the :c:type:`drm_driver` structure. Drivers that come with their own implementation of :c:type:`struct drm_driver `.dumb_create should use DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE() instead. Use DRM_GEM_DMA_DRIVER_OPS if possible. Drivers that require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_VMAP instead. h](j@-)}(hDMA GEM driver operations h]h)}(hDMA GEM driver operationsh]hDMA GEM driver operations}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhj!ubah}(h]h ]h"]h$]h&]uh1j?-hj3hKhjubh)}(h**Description**h]j)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh)}(hlThis macro provides a shortcut for setting the default GEM operations in the :c:type:`drm_driver` structure.h](hMThis macro provides a shortcut for setting the default GEM operations in the }(hjRhhhNhNubh)}(h:c:type:`drm_driver`h]j)}(hj\h]h drm_driver}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjRubh structure.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhKhjubh)}(hX8Drivers that come with their own implementation of :c:type:`struct drm_driver `.dumb_create should use DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE() instead. Use DRM_GEM_DMA_DRIVER_OPS if possible. Drivers that require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_VMAP instead.h](h3Drivers that come with their own implementation of }(hjhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjh]hstruct drm_driver}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh.dumb_create should use DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE() instead. Use DRM_GEM_DMA_DRIVER_OPS if possible. Drivers that require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_VMAP instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1j?-hj3hKhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.6DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE (C macro).c.DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATEhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h,DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATEh]j>)}(h,DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATEh]jg)}(h,DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATEh]jm)}(hjh]h,DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubh)}(hC``DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE (dumb_create_func)``h]j)}(hj h]h?DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE (dumb_create_func)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjhhubj@-)}(hCDMA GEM driver operations ensuring a virtual address on the buffer h]h)}(hBDMA GEM driver operations ensuring a virtual address on the bufferh]hBDMA GEM driver operations ensuring a virtual address on the buffer}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhj!ubah}(h]h ]h"]h$]h&]uh1j?-hj3hKhjhhubj)}(hX^**Parameters** ``dumb_create_func`` callback function for .dumb_create **Description** This macro provides a shortcut for setting the default GEM operations in the :c:type:`drm_driver` structure for drivers that need the virtual address also on imported buffers. This macro is a variant of DRM_GEM_DMA_DRIVER_OPS_VMAP for drivers that override the default implementation of :c:type:`struct drm_driver `.dumb_create. Use DRM_GEM_DMA_DRIVER_OPS_VMAP if possible. Drivers that do not require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE() instead.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhj:ubj)}(hhh]j)}(h8``dumb_create_func`` callback function for .dumb_create h](j)}(h``dumb_create_func``h]j)}(hj_h]hdumb_create_func}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjYubj )}(hhh]h)}(h"callback function for .dumb_createh]h"callback function for .dumb_create}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthKhjuubah}(h]h ]h"]h$]h&]uh1j hjYubeh}(h]h ]h"]h$]h&]uh1jhjthKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhj:ubh)}(hThis macro provides a shortcut for setting the default GEM operations in the :c:type:`drm_driver` structure for drivers that need the virtual address also on imported buffers.h](hMThis macro provides a shortcut for setting the default GEM operations in the }(hjhhhNhNubh)}(h:c:type:`drm_driver`h]j)}(hjh]h drm_driver}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubhN structure for drivers that need the virtual address also on imported buffers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj:ubh)}(hXQThis macro is a variant of DRM_GEM_DMA_DRIVER_OPS_VMAP for drivers that override the default implementation of :c:type:`struct drm_driver `.dumb_create. Use DRM_GEM_DMA_DRIVER_OPS_VMAP if possible. Drivers that do not require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE() instead.h](hoThis macro is a variant of DRM_GEM_DMA_DRIVER_OPS_VMAP for drivers that override the default implementation of }(hjhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjh]hstruct drm_driver}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh.dumb_create. Use DRM_GEM_DMA_DRIVER_OPS_VMAP if possible. Drivers that do not require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE() instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%DRM_GEM_DMA_DRIVER_OPS_VMAP (C macro)c.DRM_GEM_DMA_DRIVER_OPS_VMAPhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hDRM_GEM_DMA_DRIVER_OPS_VMAPh]j>)}(hDRM_GEM_DMA_DRIVER_OPS_VMAPh]jg)}(hDRM_GEM_DMA_DRIVER_OPS_VMAPh]jm)}(hj.h]hDRM_GEM_DMA_DRIVER_OPS_VMAP}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj0hhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj,hhhjKhKubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1j7hjKhKhj)hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj)hhhjKhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjdjjdjjjuh1j2hhhjhNhNubh)}(h``DRM_GEM_DMA_DRIVER_OPS_VMAP``h]j)}(hjjh]hDRM_GEM_DMA_DRIVER_OPS_VMAP}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjhhubj@-)}(hXM DMA GEM driver operations ensuring a virtual address on the buffer **Description** This macro provides a shortcut for setting the default GEM operations in the :c:type:`drm_driver` structure for drivers that need the virtual address also on imported buffers. Drivers that come with their own implementation of :c:type:`struct drm_driver `.dumb_create should use DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead. Use DRM_GEM_DMA_DRIVER_OPS_VMAP if possible. Drivers that do not require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS instead. h](j@-)}(hCDMA GEM driver operations ensuring a virtual address on the buffer h]h)}(hBDMA GEM driver operations ensuring a virtual address on the bufferh]hBDMA GEM driver operations ensuring a virtual address on the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1j?-hjhKhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh)}(hThis macro provides a shortcut for setting the default GEM operations in the :c:type:`drm_driver` structure for drivers that need the virtual address also on imported buffers.h](hMThis macro provides a shortcut for setting the default GEM operations in the }(hjhhhNhNubh)}(h:c:type:`drm_driver`h]j)}(hjh]h drm_driver}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubhN structure for drivers that need the virtual address also on imported buffers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(hXDDrivers that come with their own implementation of :c:type:`struct drm_driver `.dumb_create should use DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead. Use DRM_GEM_DMA_DRIVER_OPS_VMAP if possible. Drivers that do not require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS instead.h](h3Drivers that come with their own implementation of }(hjhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjh]hstruct drm_driver}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh.dumb_create should use DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead. Use DRM_GEM_DMA_DRIVER_OPS_VMAP if possible. Drivers that do not require a virtual address on imported buffers should use DRM_GEM_DMA_DRIVER_OPS instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1j?-hjhKhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!DEFINE_DRM_GEM_DMA_FOPS (C macro)c.DEFINE_DRM_GEM_DMA_FOPShNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hDEFINE_DRM_GEM_DMA_FOPSh]j>)}(hDEFINE_DRM_GEM_DMA_FOPSh]jg)}(hDEFINE_DRM_GEM_DMA_FOPSh]jm)}(hj2h]hDEFINE_DRM_GEM_DMA_FOPS}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj4hhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj0hhhjOhMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1j7hjOhMhj-hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj-hhhjOhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjhjjhjjjuh1j2hhhjhNhNubh)}(h"``DEFINE_DRM_GEM_DMA_FOPS (name)``h]j)}(hjnh]hDEFINE_DRM_GEM_DMA_FOPS (name)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhMhjhhubj@-)}(h2macro to generate file operations for DMA drivers h]h)}(h1macro to generate file operations for DMA driversh]h1macro to generate file operations for DMA drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1j?-hjhKhjhhubj)}(hX7**Parameters** ``name`` name for the generated structure **Description** This macro autogenerates a suitable :c:type:`struct file_operations ` for DMA based drivers, which can be assigned to :c:type:`drm_driver.fops `. Note that this structure cannot be shared between drivers, because it contains a reference to the current module using THIS_MODULE. Note that the declaration is already marked as static - if you need a non-static version of this you're probably doing it wrong and will break the THIS_MODULE reference by accident.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubj)}(hhh]j)}(h*``name`` name for the generated structure h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubj )}(hhh]h)}(h name for the generated structureh]h name for the generated structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh)}(hX2This macro autogenerates a suitable :c:type:`struct file_operations ` for DMA based drivers, which can be assigned to :c:type:`drm_driver.fops `. Note that this structure cannot be shared between drivers, because it contains a reference to the current module using THIS_MODULE.h](h$This macro autogenerates a suitable }(hjhhhNhNubh)}(h2:c:type:`struct file_operations `h]j)}(hjh]hstruct file_operations}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3file_operationsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubh1 for DMA based drivers, which can be assigned to }(hjhhhNhNubh)}(h&:c:type:`drm_driver.fops `h]j)}(hjAh]hdrm_driver.fops}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhj:hKhjubh. Note that this structure cannot be shared between drivers, because it contains a reference to the current module using THIS_MODULE.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hKhjubh)}(hNote that the declaration is already marked as static - if you need a non-static version of this you're probably doing it wrong and will break the THIS_MODULE reference by accident.h]hNote that the declaration is already marked as static - if you need a non-static version of this you’re probably doing it wrong and will break the THIS_MODULE reference by accident.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:364: ./include/drm/drm_gem_dma_helper.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_dma_create (C function)c.drm_gem_dma_createhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hTstruct drm_gem_dma_object * drm_gem_dma_create (struct drm_device *drm, size_t size)h]j>)}(hRstruct drm_gem_dma_object *drm_gem_dma_create(struct drm_device *drm, size_t size)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubh)}(hhh]jm)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gem_dma_createsbc.drm_gem_dma_createasbuh1hhjhhhjhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubjg)}(hdrm_gem_dma_createh]jm)}(hjh]hdrm_gem_dma_create}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubj)}(h%(struct drm_device *drm, size_t size)h](j)}(hstruct drm_device *drmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]jc.drm_gem_dma_createasbuh1hhj ubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hdrmh]hdrm}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h size_t sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dma_createasbuh1hhj}ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubjm)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h&allocate an object with the given sizeh]h&allocate an object with the given size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKuhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_device *drm`` DRM device ``size_t size`` size of the object to allocate **Description** This function creates a DMA GEM object and allocates memory as backing store. The allocated memory will occupy a contiguous chunk of bus address space. For devices that are directly connected to the memory bus then the allocated memory will be physically contiguous. For devices that access through an IOMMU, then the allocated memory is not expected to be physically contiguous because having contiguous IOVAs is sufficient to meet a devices DMA requirements. **Return** A struct drm_gem_dma_object * on success or an ERR_PTR()-encoded negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKyhjubj)}(hhh](j)}(h&``struct drm_device *drm`` DRM device h](j)}(h``struct drm_device *drm``h]j)}(hjh]hstruct drm_device *drm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKvhjubj )}(hhh]h)}(h DRM deviceh]h DRM device}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKvhj1ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj0hKvhjubj)}(h/``size_t size`` size of the object to allocate h](j)}(h``size_t size``h]j)}(hjTh]h size_t size}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKwhjNubj )}(hhh]h)}(hsize of the object to allocateh]hsize of the object to allocate}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKwhjjubah}(h]h ]h"]h$]h&]uh1j hjNubeh}(h]h ]h"]h$]h&]uh1jhjihKwhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKyhjubh)}(hThis function creates a DMA GEM object and allocates memory as backing store. The allocated memory will occupy a contiguous chunk of bus address space.h]hThis function creates a DMA GEM object and allocates memory as backing store. The allocated memory will occupy a contiguous chunk of bus address space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKyhjubh)}(hX4For devices that are directly connected to the memory bus then the allocated memory will be physically contiguous. For devices that access through an IOMMU, then the allocated memory is not expected to be physically contiguous because having contiguous IOVAs is sufficient to meet a devices DMA requirements.h]hX4For devices that are directly connected to the memory bus then the allocated memory will be physically contiguous. For devices that access through an IOMMU, then the allocated memory is not expected to be physically contiguous because having contiguous IOVAs is sufficient to meet a devices DMA requirements.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chK|hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubh)}(h`A struct drm_gem_dma_object * on success or an ERR_PTR()-encoded negative error code on failure.h]h`A struct drm_gem_dma_object * on success or an ERR_PTR()-encoded negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_dma_free (C function)c.drm_gem_dma_freehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h:void drm_gem_dma_free (struct drm_gem_dma_object *dma_obj)h]j>)}(h9void drm_gem_dma_free(struct drm_gem_dma_object *dma_obj)h](jc)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_gem_dma_freeh]jm)}(hdrm_gem_dma_freeh]hdrm_gem_dma_free}(hj+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubj)}(h$(struct drm_gem_dma_object *dma_obj)h]j)}(h"struct drm_gem_dma_object *dma_objh](jD)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjCubjV)}(h h]h }(hjThhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjCubh)}(hhh]jm)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j)}jj-sbc.drm_gem_dma_freeasbuh1hhjCubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjCubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjm)}(hdma_objh]hdma_obj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h/free resources associated with a DMA GEM objecth]h/free resources associated with a DMA GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX>**Parameters** ``struct drm_gem_dma_object *dma_obj`` DMA GEM object to free **Description** This function frees the backing memory of the DMA GEM object, cleans up the GEM object state and frees the memory used to store the object itself. If the buffer is imported and the virtual address is set, it is released.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubj)}(hhh]j)}(h>``struct drm_gem_dma_object *dma_obj`` DMA GEM object to free h](j)}(h&``struct drm_gem_dma_object *dma_obj``h]j)}(hj h]h"struct drm_gem_dma_object *dma_obj}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubj )}(hhh]h)}(hDMA GEM object to freeh]hDMA GEM object to free}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj!ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubh)}(hThis function frees the backing memory of the DMA GEM object, cleans up the GEM object state and frees the memory used to store the object itself. If the buffer is imported and the virtual address is set, it is released.h]hThis function frees the backing memory of the DMA GEM object, cleans up the GEM object state and frees the memory used to store the object itself. If the buffer is imported and the virtual address is set, it is released.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.-drm_gem_dma_dumb_create_internal (C function)"c.drm_gem_dma_dumb_create_internalhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h|int drm_gem_dma_dumb_create_internal (struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)h]j>)}(h{int drm_gem_dma_dumb_create_internal(struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM ubjg)}(h drm_gem_dma_dumb_create_internalh]jm)}(h drm_gem_dma_dumb_create_internalh]h drm_gem_dma_dumb_create_internal}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM ubj)}(hW(struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)h](j)}(hstruct drm_file *file_privh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb"c.drm_gem_dma_dumb_create_internalasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h file_privh]h file_priv}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_device *drmh](jD)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj6ubjV)}(h h]h }(hjGhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j"c.drm_gem_dma_dumb_create_internalasbuh1hhj6ubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjm)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct drm_mode_create_dumb *argsh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_gem_dma_dumb_create_internalasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hargsh]hargs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM ubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1j7hjhM hjhhubj)}(hhh]h)}(hcreate a dumb buffer objecth]hcreate a dumb buffer object}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhj(hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1j2hhhjhNhNubj)}(hX7**Parameters** ``struct drm_file *file_priv`` DRM file-private structure to create the dumb buffer for ``struct drm_device *drm`` DRM device ``struct drm_mode_create_dumb *args`` IOCTL data **Description** This aligns the pitch and size arguments to the minimum required. This is an internal helper that can be wrapped by a driver to account for hardware with more specific alignment requirements. It should not be used directly as their :c:type:`drm_driver.dumb_create ` callback. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjGubj)}(hhh](j)}(hX``struct drm_file *file_priv`` DRM file-private structure to create the dumb buffer for h](j)}(h``struct drm_file *file_priv``h]j)}(hjlh]hstruct drm_file *file_priv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjfubj )}(hhh]h)}(h8DRM file-private structure to create the dumb buffer forh]h8DRM file-private structure to create the dumb buffer for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjfubeh}(h]h ]h"]h$]h&]uh1jhjhKhjcubj)}(h&``struct drm_device *drm`` DRM device h](j)}(h``struct drm_device *drm``h]j)}(hjh]hstruct drm_device *drm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubj )}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjcubj)}(h1``struct drm_mode_create_dumb *args`` IOCTL data h](j)}(h%``struct drm_mode_create_dumb *args``h]j)}(hjh]h!struct drm_mode_create_dumb *args}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubj )}(hhh]h)}(h IOCTL datah]h IOCTL data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjcubeh}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjGubh)}(hXThis aligns the pitch and size arguments to the minimum required. This is an internal helper that can be wrapped by a driver to account for hardware with more specific alignment requirements. It should not be used directly as their :c:type:`drm_driver.dumb_create ` callback.h](hThis aligns the pitch and size arguments to the minimum required. This is an internal helper that can be wrapped by a driver to account for hardware with more specific alignment requirements. It should not be used directly as their }(hj/hhhNhNubh)}(h-:c:type:`drm_driver.dumb_create `h]j)}(hj9h]hdrm_driver.dumb_create}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj/ubh callback.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhMhjGubh)}(h **Return**h]j)}(hjch]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjGubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_gem_dma_dumb_create (C function)c.drm_gem_dma_dumb_createhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hsint drm_gem_dma_dumb_create (struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)h]j>)}(hrint drm_gem_dma_dumb_create(struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM.ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM.ubjg)}(hdrm_gem_dma_dumb_createh]jm)}(hdrm_gem_dma_dumb_createh]hdrm_gem_dma_dumb_create}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM.ubj)}(hW(struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)h](j)}(hstruct drm_file *file_privh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_dma_dumb_createasbuh1hhjubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h file_privh]h file_priv}(hj>hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_device *drmh](jD)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjSubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjuhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]jc.drm_gem_dma_dumb_createasbuh1hhjSubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjm)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct drm_mode_create_dumb *argsh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dma_dumb_createasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hargsh]hargs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM.ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM.ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM.hjhhubj)}(hhh]h)}(hcreate a dumb buffer objecth]hcreate a dumb buffer object}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_file *file_priv`` DRM file-private structure to create the dumb buffer for ``struct drm_device *drm`` DRM device ``struct drm_mode_create_dumb *args`` IOCTL data **Description** This function computes the pitch of the dumb buffer and rounds it up to an integer number of bytes per pixel. Drivers for hardware that doesn't have any additional restrictions on the pitch can directly use this function as their :c:type:`drm_driver.dumb_create ` callback. For hardware with additional restrictions, drivers can adjust the fields set up by userspace and pass the IOCTL data along to the drm_gem_dma_dumb_create_internal() function. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM!hjdubj)}(hhh](j)}(hX``struct drm_file *file_priv`` DRM file-private structure to create the dumb buffer for h](j)}(h``struct drm_file *file_priv``h]j)}(hjh]hstruct drm_file *file_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj )}(hhh]h)}(h8DRM file-private structure to create the dumb buffer forh]h8DRM file-private structure to create the dumb buffer for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``struct drm_device *drm`` DRM device h](j)}(h``struct drm_device *drm``h]j)}(hjh]hstruct drm_device *drm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj )}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``struct drm_mode_create_dumb *args`` IOCTL data h](j)}(h%``struct drm_mode_create_dumb *args``h]j)}(hjh]h!struct drm_mode_create_dumb *args}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM hjubj )}(hhh]h)}(h IOCTL datah]h IOCTL data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM"hjdubh)}(hXThis function computes the pitch of the dumb buffer and rounds it up to an integer number of bytes per pixel. Drivers for hardware that doesn't have any additional restrictions on the pitch can directly use this function as their :c:type:`drm_driver.dumb_create ` callback.h](hThis function computes the pitch of the dumb buffer and rounds it up to an integer number of bytes per pixel. Drivers for hardware that doesn’t have any additional restrictions on the pitch can directly use this function as their }(hjLhhhNhNubh)}(h-:c:type:`drm_driver.dumb_create `h]j)}(hjVh]hdrm_driver.dumb_create}(hjXhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM"hjLubh callback.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjshM"hjdubh)}(hFor hardware with additional restrictions, drivers can adjust the fields set up by userspace and pass the IOCTL data along to the drm_gem_dma_dumb_create_internal() function.h]hFor hardware with additional restrictions, drivers can adjust the fields set up by userspace and pass the IOCTL data along to the drm_gem_dma_dumb_create_internal() function.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM'hjdubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM+hjdubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM+hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_gem_dma_get_unmapped_area (C function)c.drm_gem_dma_get_unmapped_areahNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hunsigned long drm_gem_dma_get_unmapped_area (struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)h]j>)}(hunsigned long drm_gem_dma_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)h](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMTubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMTubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhMTubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMTubjg)}(hdrm_gem_dma_get_unmapped_areah]jm)}(hdrm_gem_dma_get_unmapped_areah]hdrm_gem_dma_get_unmapped_area}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMTubj)}(hd(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)h](j)}(hstruct file *filph](jD)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj)ubjV)}(h h]h }(hj:hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj)ubh)}(hhh]jm)}(hfileh]hfile}(hjKhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_dma_get_unmapped_areaasbuh1hhj)ubjV)}(h h]h }(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj)ubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjm)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(hunsigned long addrh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(hunsigned long lenh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hlenh]hlen}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(hunsigned long pgoffh](jc)}(hunsignedh]hunsigned}(hjAhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj=ubjV)}(h h]h }(hjOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=ubjc)}(hlongh]hlong}(hj]hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj=ubjV)}(h h]h }(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=ubjm)}(hpgoffh]hpgoff}(hjyhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(hunsigned long flagsh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMTubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMTubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMThjhhubj)}(hhh]h)}(h*propose address for mapping in noMMU casesh]h*propose address for mapping in noMMU cases}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMEhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMTubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j2hhhjhNhNubj)}(hX **Parameters** ``struct file *filp`` file object ``unsigned long addr`` memory address ``unsigned long len`` buffer size ``unsigned long pgoff`` page offset ``unsigned long flags`` memory flags **Description** This function is used in noMMU platforms to propose address mapping for a given buffer. It's intended to be used as a direct handler for the struct :c:type:`file_operations.get_unmapped_area ` operation. **Return** mapping address on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMIhjubj)}(hhh](j)}(h"``struct file *filp`` file object h](j)}(h``struct file *filp``h]j)}(hj5h]hstruct file *filp}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMFhj/ubj )}(hhh]h)}(h file objecth]h file object}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMFhjKubah}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMFhj,ubj)}(h&``unsigned long addr`` memory address h](j)}(h``unsigned long addr``h]j)}(hjnh]hunsigned long addr}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMGhjhubj )}(hhh]h)}(hmemory addressh]hmemory address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhjhMGhj,ubj)}(h"``unsigned long len`` buffer size h](j)}(h``unsigned long len``h]j)}(hjh]hunsigned long len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMHhjubj )}(hhh]h)}(h buffer sizeh]h buffer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhj,ubj)}(h$``unsigned long pgoff`` page offset h](j)}(h``unsigned long pgoff``h]j)}(hjh]hunsigned long pgoff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMIhjubj )}(hhh]h)}(h page offseth]h page offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhj,ubj)}(h%``unsigned long flags`` memory flags h](j)}(h``unsigned long flags``h]j)}(hjh]hunsigned long flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMJhjubj )}(hhh]h)}(h memory flagsh]h memory flags}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMJhj/ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj.hMJhj,ubeIh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMLhjubh)}(hThis function is used in noMMU platforms to propose address mapping for a given buffer. It's intended to be used as a direct handler for the struct :c:type:`file_operations.get_unmapped_area ` operation.h](hThis function is used in noMMU platforms to propose address mapping for a given buffer. It’s intended to be used as a direct handler for the struct }(hjjhhhNhNubh)}(h=:c:type:`file_operations.get_unmapped_area `h]j)}(hjth]h!file_operations.get_unmapped_area}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3file_operationsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMLhjjubh operation.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMLhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMQhjubh)}(h?mapping address on success or a negative error code on failure.h]h?mapping address on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_gem_dma_print_info (C function)c.drm_gem_dma_print_infohNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hrvoid drm_gem_dma_print_info (const struct drm_gem_dma_object *dma_obj, struct drm_printer *p, unsigned int indent)h]j>)}(hqvoid drm_gem_dma_print_info(const struct drm_gem_dma_object *dma_obj, struct drm_printer *p, unsigned int indent)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_dma_print_infoh]jm)}(hdrm_gem_dma_print_infoh]hdrm_gem_dma_print_info}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hV(const struct drm_gem_dma_object *dma_obj, struct drm_printer *p, unsigned int indent)h](j)}(h(const struct drm_gem_dma_object *dma_objh](jD)}(hj&h]hconst}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj-hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjHhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j)}jjsbc.drm_gem_dma_print_infoasbuh1hhjubjV)}(h h]h }(hjyhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdma_objh]hdma_obj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]juc.drm_gem_dma_print_infoasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hjh]hp}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int indenth](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hinth]hint}(hj8hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjFhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hindenth]hindent}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h3Print :c:type:`drm_gem_dma_object` info for debugfsh](hPrint }(hj~hhhNhNubh)}(h:c:type:`drm_gem_dma_object`h]j)}(hjh]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]juc.drm_gem_dma_print_infoasbj3drm_gem_dma_objectuh1hhjhKhj~ubh info for debugfs}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``const struct drm_gem_dma_object *dma_obj`` DMA GEM object ``struct drm_printer *p`` DRM printer ``unsigned int indent`` Tab indentation level **Description** This function prints dma_addr and vaddr for use in e.g. debugfs output.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj)}(hhh](j)}(h<``const struct drm_gem_dma_object *dma_obj`` DMA GEM object h](j)}(h,``const struct drm_gem_dma_object *dma_obj``h]j)}(hjh]h(const struct drm_gem_dma_object *dma_obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj )}(hhh]h)}(hDMA GEM objecth]hDMA GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``struct drm_printer *p`` DRM printer h](j)}(h``struct drm_printer *p``h]j)}(hj h]hstruct drm_printer *p}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj )}(hhh]h)}(h DRM printerh]h DRM printer}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubj)}(h.``unsigned int indent`` Tab indentation level h](j)}(h``unsigned int indent``h]j)}(hjYh]hunsigned int indent}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjSubj )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh)}(hGThis function prints dma_addr and vaddr for use in e.g. debugfs output.h]hGThis function prints dma_addr and vaddr for use in e.g. debugfs output.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gem_dma_get_sg_table (C function)c.drm_gem_dma_get_sg_tablehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hOstruct sg_table * drm_gem_dma_get_sg_table (struct drm_gem_dma_object *dma_obj)h]j>)}(hMstruct sg_table *drm_gem_dma_get_sg_table(struct drm_gem_dma_object *dma_obj)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gem_dma_get_sg_tablesbc.drm_gem_dma_get_sg_tableasbuh1hhjhhhjhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjg)}(hdrm_gem_dma_get_sg_tableh]jm)}(hjh]hdrm_gem_dma_get_sg_table}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h$(struct drm_gem_dma_object *dma_obj)h]j)}(h"struct drm_gem_dma_object *dma_objh](jD)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjOubjV)}(h h]h }(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjOubh)}(hhh]jm)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjqhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]jc.drm_gem_dma_get_sg_tableasbuh1hhjOubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjm)}(hdma_objh]hdma_obj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hCprovide a scatter/gather table of pinned pages for a DMA GEM objecth]hCprovide a scatter/gather table of pinned pages for a DMA GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_gem_dma_object *dma_obj`` DMA GEM object **Description** This function exports a scatter/gather table by calling the standard DMA mapping API. **Return** A pointer to the scatter/gather table of pinned pages or NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj)}(hhh]j)}(h6``struct drm_gem_dma_object *dma_obj`` DMA GEM object h](j)}(h&``struct drm_gem_dma_object *dma_obj``h]j)}(hjh]h"struct drm_gem_dma_object *dma_obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj )}(hhh]h)}(hDMA GEM objecth]hDMA GEM object}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh)}(hUThis function exports a scatter/gather table by calling the standard DMA mapping API.h]hUThis function exports a scatter/gather table by calling the standard DMA mapping API.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh)}(h **Return**h]j)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh)}(hIA pointer to the scatter/gather table of pinned pages or NULL on failure.h]hIA pointer to the scatter/gather table of pinned pages or NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j..drm_gem_dma_prime_import_sg_table (C function)#c.drm_gem_dma_prime_import_sg_tablehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hstruct drm_gem_object * drm_gem_dma_prime_import_sg_table (struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h]j>)}(hstruct drm_gem_object *drm_gem_dma_prime_import_sg_table(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}j!drm_gem_dma_prime_import_sg_tablesb#c.drm_gem_dma_prime_import_sg_tableasbuh1hhjhhhjhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjg)}(h!drm_gem_dma_prime_import_sg_tableh]jm)}(hjh]h!drm_gem_dma_prime_import_sg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hQ(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj2ubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j#c.drm_gem_dma_prime_import_sg_tableasbuh1hhj2ubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjm)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h!struct dma_buf_attachment *attachh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j#c.drm_gem_dma_prime_import_sg_tableasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hstruct sg_table *sgth](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j#c.drm_gem_dma_prime_import_sg_tableasbuh1hhjubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hsgth]hsgt}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hSproduce a DMA GEM object from another driver's scatter/gather table of pinned pagesh]hUproduce a DMA GEM object from another driver’s scatter/gather table of pinned pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` device to import into ``struct dma_buf_attachment *attach`` DMA-BUF attachment ``struct sg_table *sgt`` scatter/gather table of pinned pages **Description** This function imports a scatter/gather table exported via DMA-BUF by another driver. Imported buffers must be physically contiguous in memory (i.e. the scatter/gather table must contain a single entry). Drivers that use the DMA helpers should set this as their :c:type:`drm_driver.gem_prime_import_sg_table ` callback. **Return** A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj)}(hhh](j)}(h1``struct drm_device *dev`` device to import into h](j)}(h``struct drm_device *dev``h]j)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubj )}(hhh]h)}(hdevice to import intoh]hdevice to import into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h9``struct dma_buf_attachment *attach`` DMA-BUF attachment h](j)}(h%``struct dma_buf_attachment *attach``h]j)}(hjh]h!struct dma_buf_attachment *attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubj )}(hhh]h)}(hDMA-BUF attachmenth]hDMA-BUF attachment}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubj)}(h>``struct sg_table *sgt`` scatter/gather table of pinned pages h](j)}(h``struct sg_table *sgt``h]j)}(hjJh]hstruct sg_table *sgt}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjDubj )}(hhh]h)}(h$scatter/gather table of pinned pagesh]h$scatter/gather table of pinned pages}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh)}(hXJThis function imports a scatter/gather table exported via DMA-BUF by another driver. Imported buffers must be physically contiguous in memory (i.e. the scatter/gather table must contain a single entry). Drivers that use the DMA helpers should set this as their :c:type:`drm_driver.gem_prime_import_sg_table ` callback.h](hXThis function imports a scatter/gather table exported via DMA-BUF by another driver. Imported buffers must be physically contiguous in memory (i.e. the scatter/gather table must contain a single entry). Drivers that use the DMA helpers should set this as their }(hjhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j)}(hjh]h$drm_driver.gem_prime_import_sg_table}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh)}(h]A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.h]h]A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_dma_vmap (C function)c.drm_gem_dma_vmaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hPint drm_gem_dma_vmap (struct drm_gem_dma_object *dma_obj, struct iosys_map *map)h]j>)}(hOint drm_gem_dma_vmap(struct drm_gem_dma_object *dma_obj, struct iosys_map *map)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj"hMubjg)}(hdrm_gem_dma_vmaph]jm)}(hdrm_gem_dma_vmaph]hdrm_gem_dma_vmap}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj"hMubj)}(h;(struct drm_gem_dma_object *dma_obj, struct iosys_map *map)h](j)}(h"struct drm_gem_dma_object *dma_objh](jD)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjMubjV)}(h h]h }(hj^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMubh)}(hhh]jm)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]j)}jj7sbc.drm_gem_dma_vmapasbuh1hhjMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjm)}(hdma_objh]hdma_obj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(hstruct iosys_map *maph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dma_vmapasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmaph]hmap}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj"hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj"hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj"hMhj hhubj)}(hhh]h)}(hmap a DMA GEM object into the kernel’s virtual address space}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjA hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\ jj\ jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_gem_dma_object *dma_obj`` DMA GEM object ``struct iosys_map *map`` Returns the kernel virtual address of the DMA GEM object's backing store. **Description** This function maps a buffer into the kernel's virtual address space. Since the DMA buffers are already mapped into the kernel virtual address space this simply returns the cached virtual address. **Return** 0 on success, or a negative error code otherwise.h](h)}(h**Parameters**h]j)}(hjf h]h Parameters}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj` ubj)}(hhh](j)}(h6``struct drm_gem_dma_object *dma_obj`` DMA GEM object h](j)}(h&``struct drm_gem_dma_object *dma_obj``h]j)}(hj h]h"struct drm_gem_dma_object *dma_obj}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubj )}(hhh]h)}(hDMA GEM objecth]hDMA GEM object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj| ubj)}(hd``struct iosys_map *map`` Returns the kernel virtual address of the DMA GEM object's backing store. h](j)}(h``struct iosys_map *map``h]j)}(hj h]hstruct iosys_map *map}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubj )}(hhh]h)}(hIReturns the kernel virtual address of the DMA GEM object's backing store.h]hKReturns the kernel virtual address of the DMA GEM object’s backing store.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj| ubeh}(h]h ]h"]h$]h&]uh1jhj` ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj` ubh)}(hThis function maps a buffer into the kernel's virtual address space. Since the DMA buffers are already mapped into the kernel virtual address space this simply returns the cached virtual address.h]hThis function maps a buffer into the kernel’s virtual address space. Since the DMA buffers are already mapped into the kernel virtual address space this simply returns the cached virtual address.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj` ubh)}(h **Return**h]j)}(hj! h]hReturn}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj` ubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj` ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_dma_mmap (C function)c.drm_gem_dma_mmaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hUint drm_gem_dma_mmap (struct drm_gem_dma_object *dma_obj, struct vm_area_struct *vma)h]j>)}(hTint drm_gem_dma_mmap(struct drm_gem_dma_object *dma_obj, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hjf hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjb hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM ubjV)}(h h]h }(hju hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjb hhhjt hM ubjg)}(hdrm_gem_dma_mmaph]jm)}(hdrm_gem_dma_mmaph]hdrm_gem_dma_mmap}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjb hhhjt hM ubj)}(h@(struct drm_gem_dma_object *dma_obj, struct vm_area_struct *vma)h](j)}(h"struct drm_gem_dma_object *dma_objh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.drm_gem_dma_mmapasbuh1hhj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hdma_objh]hdma_obj}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj" hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hj3 hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj0 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5 modnameN classnameNjj)}j]j c.drm_gem_dma_mmapasbuh1hhj ubjV)}(h h]h }(hjQ hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hvmah]hvma}(hjl hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjb hhhjt hM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj^ hhhjt hM ubah}(h]jY ah ](jjeh"]h$]h&]jj)jhuh1j7hjt hM hj[ hhubj)}(hhh]h)}(h%memory-map an exported DMA GEM objecth]h%memory-map an exported DMA GEM object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj[ hhhjt hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_gem_dma_object *dma_obj`` DMA GEM object ``struct vm_area_struct *vma`` VMA for the area to be mapped **Description** This function maps a buffer into a userspace process's address space. In addition to the usual GEM VMA setup it immediately faults in the entire object instead of using on-demand faulting. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubj)}(hhh](j)}(h6``struct drm_gem_dma_object *dma_obj`` DMA GEM object h](j)}(h&``struct drm_gem_dma_object *dma_obj``h]j)}(hj h]h"struct drm_gem_dma_object *dma_obj}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubj )}(hhh]h)}(hDMA GEM objecth]hDMA GEM object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](j)}(h``struct vm_area_struct *vma``h]j)}(hj h]hstruct vm_area_struct *vma}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubj )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj% hMhj& ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj% hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjK h]h Description}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubh)}(hThis function maps a buffer into a userspace process's address space. In addition to the usual GEM VMA setup it immediately faults in the entire object instead of using on-demand faulting.h]hThis function maps a buffer into a userspace process’s address space. In addition to the usual GEM VMA setup it immediately faults in the entire object instead of using on-demand faulting.}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubh)}(h **Return**h]j)}(hjr h]hReturn}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.3drm_gem_dma_prime_import_sg_table_vmap (C function)(c.drm_gem_dma_prime_import_sg_table_vmaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hstruct drm_gem_object * drm_gem_dma_prime_import_sg_table_vmap (struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h]j>)}(hstruct drm_gem_object *drm_gem_dma_prime_import_sg_table_vmap(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM=ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhj hM=ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}j&drm_gem_dma_prime_import_sg_table_vmapsb(c.drm_gem_dma_prime_import_sg_table_vmapasbuh1hhj hhhj hM=ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhj hM=ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM=ubjg)}(h&drm_gem_dma_prime_import_sg_table_vmaph]jm)}(hj h]h&drm_gem_dma_prime_import_sg_table_vmap}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj hhhj hM=ubj)}(hQ(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj1 hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj- ubjV)}(h h]h }(hj> hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj- ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjO hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjL ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQ modnameN classnameNjj)}j]j (c.drm_gem_dma_prime_import_sg_table_vmapasbuh1hhj- ubjV)}(h h]h }(hjm hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj- ubj)}(hjh]h*}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj- ubjm)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj- ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj) ubj)}(h!struct dma_buf_attachment *attachh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdma_buf_attachmenth]hdma_buf_attachment}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j (c.drm_gem_dma_prime_import_sg_table_vmapasbuh1hhj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hattachh]hattach}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj) ubj)}(hstruct sg_table *sgth](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j (c.drm_gem_dma_prime_import_sg_table_vmapasbuh1hhj ubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hsgth]hsgt}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj) ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hM=ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj hM=ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj hM=hj hhubj)}(hhh]h)}(h\PRIME import another driver's scatter/gather table and get the virtual address of the bufferh]h^PRIME import another driver’s scatter/gather table and get the virtual address of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM*hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM=ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct dma_buf_attachment *attach`` DMA-BUF attachment ``struct sg_table *sgt`` Scatter/gather table of pinned pages **Description** This function imports a scatter/gather table using drm_gem_dma_prime_import_sg_table() and uses dma_buf_vmap() to get the kernel virtual address. This ensures that a DMA GEM object always has its virtual address set. This address is released when the object is freed. This function can be used as the :c:type:`drm_driver.gem_prime_import_sg_table ` callback. The :c:type:`DRM_GEM_DMA_DRIVER_OPS_VMAP` macro provides a shortcut to set the necessary DRM driver operations. **Return** A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM.hjubj)}(hhh](j)}(h&``struct drm_device *dev`` DRM device h](j)}(h``struct drm_device *dev``h]j)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM,hjubj )}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjubj)}(h9``struct dma_buf_attachment *attach`` DMA-BUF attachment h](j)}(h%``struct dma_buf_attachment *attach``h]j)}(hj h]h!struct dma_buf_attachment *attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM-hjubj )}(hhh]h)}(hDMA-BUF attachmenth]hDMA-BUF attachment}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM-hj"ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj!hM-hjubj)}(h>``struct sg_table *sgt`` Scatter/gather table of pinned pages h](j)}(h``struct sg_table *sgt``h]j)}(hjEh]hstruct sg_table *sgt}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM.hj?ubj )}(hhh]h)}(h$Scatter/gather table of pinned pagesh]h$Scatter/gather table of pinned pages}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM.hj[ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhM.hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM0hjubh)}(hX This function imports a scatter/gather table using drm_gem_dma_prime_import_sg_table() and uses dma_buf_vmap() to get the kernel virtual address. This ensures that a DMA GEM object always has its virtual address set. This address is released when the object is freed.h]hX This function imports a scatter/gather table using drm_gem_dma_prime_import_sg_table() and uses dma_buf_vmap() to get the kernel virtual address. This ensures that a DMA GEM object always has its virtual address set. This address is released when the object is freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM0hjubh)}(hThis function can be used as the :c:type:`drm_driver.gem_prime_import_sg_table ` callback. The :c:type:`DRM_GEM_DMA_DRIVER_OPS_VMAP` macro provides a shortcut to set the necessary DRM driver operations.h](h!This function can be used as the }(hjhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j)}(hjh]h$drm_driver.gem_prime_import_sg_table}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM5hjubh callback. The }(hjhhhNhNubh)}(h%:c:type:`DRM_GEM_DMA_DRIVER_OPS_VMAP`h]j)}(hjh]hDRM_GEM_DMA_DRIVER_OPS_VMAP}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_GEM_DMA_DRIVER_OPS_VMAPuh1hhjhM5hjubhF macro provides a shortcut to set the necessary DRM driver operations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM5hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM9hjubh)}(h]A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.h]h]A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:367: ./drivers/gpu/drm/drm_gem_dma_helper.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]"gem-dma-helper-functions-referenceah ]h"]"gem dma helper functions referenceah$]h&]uh1hhj&yhhhhhMgubh)}(hhh](h)}(h#GEM SHMEM Helper Function Referenceh]h#GEM SHMEM Helper Function Reference}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhhhhMsubh)}(hpThis library provides helpers for GEM objects backed by shmem buffers allocated using anonymous pageable memory.h]hpThis library provides helpers for GEM objects backed by shmem buffers allocated using anonymous pageable memory.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:373: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj0hhubh)}(hXGFunctions that operate on the GEM object receive struct :c:type:`drm_gem_shmem_object`. For GEM callback helpers in struct :c:type:`drm_gem_object` functions, see likewise named functions with an _object_ infix (e.g., drm_gem_shmem_object_vmap() wraps drm_gem_shmem_vmap()). These helpers perform the necessary type conversion.h](h8Functions that operate on the GEM object receive struct }(hjPhhhNhNubh)}(h:c:type:`drm_gem_shmem_object`h]j)}(hjZh]hdrm_gem_shmem_object}(hj\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_shmem_objectuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:373: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhjPubh%. For GEM callback helpers in struct }(hjPhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj~h]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjwhKhjPubh functions, see likewise named functions with an _object_ infix (e.g., drm_gem_shmem_object_vmap() wraps drm_gem_shmem_vmap()). These helpers perform the necessary type conversion.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhKhj0hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_shmem_object (C struct)c.drm_gem_shmem_objecthNtauh1j!hj0hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhNubj3)}(hhh](j8)}(hdrm_gem_shmem_objecth]j>)}(hstruct drm_gem_shmem_objecth](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_gem_shmem_objecth]jm)}(hjh]hdrm_gem_shmem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(hGEM object backed by shmemh]hGEM object backed by shmem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhj0hjhNubj)}(hX**Definition**:: struct drm_gem_shmem_object { struct drm_gem_object base; struct page **pages; unsigned int pages_use_count; int madv; struct list_head madv_list; struct sg_table *sgt; void *vaddr; unsigned int vmap_use_count; bool pages_mark_dirty_on_put : 1; bool pages_mark_accessed_on_put : 1; bool map_wc : 1; }; **Members** ``base`` Base GEM object ``pages`` Page table ``pages_use_count`` Reference count on the pages table. The pages are put when the count reaches zero. ``madv`` State for madvise 0 is active/inuse. A negative value is the object is purged. Positive values are driver specific and not used by the helpers. ``madv_list`` List entry for madvise tracking Typically used by drivers to track purgeable objects ``sgt`` Scatter/gather table for imported PRIME buffers ``vaddr`` Kernel virtual address of the backing memory ``vmap_use_count`` Reference count on the virtual address. The address are un-mapped when the count reaches zero. ``pages_mark_dirty_on_put`` Mark pages as dirty when they are put. ``pages_mark_accessed_on_put`` Mark pages as accessed when they are put. ``map_wc`` map object write-combined (instead of using shmem defaults).h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubjT)}(hXYstruct drm_gem_shmem_object { struct drm_gem_object base; struct page **pages; unsigned int pages_use_count; int madv; struct list_head madv_list; struct sg_table *sgt; void *vaddr; unsigned int vmap_use_count; bool pages_mark_dirty_on_put : 1; bool pages_mark_accessed_on_put : 1; bool map_wc : 1; };h]hXYstruct drm_gem_shmem_object { struct drm_gem_object base; struct page **pages; unsigned int pages_use_count; int madv; struct list_head madv_list; struct sg_table *sgt; void *vaddr; unsigned int vmap_use_count; bool pages_mark_dirty_on_put : 1; bool pages_mark_accessed_on_put : 1; bool map_wc : 1; };}hj>sbah}(h]h ]h"]h$]h&]jjuh1jSh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubh)}(h **Members**h]j)}(hjOh]hMembers}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK)hjubj)}(hhh](j)}(h``base`` Base GEM object h](j)}(h``base``h]j)}(hjnh]hbase}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjhubj )}(hhh]h)}(hBase GEM objecth]hBase GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhjhKhjeubj)}(h``pages`` Page table h](j)}(h ``pages``h]j)}(hjh]hpages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hhh]h)}(h Page tableh]h Page table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjeubj)}(hg``pages_use_count`` Reference count on the pages table. The pages are put when the count reaches zero. h](j)}(h``pages_use_count``h]j)}(hjh]hpages_use_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK%hjubj )}(hhh]h)}(hRReference count on the pages table. The pages are put when the count reaches zero.h]hRReference count on the pages table. The pages are put when the count reaches zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK$hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK%hjeubj)}(h``madv`` State for madvise 0 is active/inuse. A negative value is the object is purged. Positive values are driver specific and not used by the helpers. h](j)}(h``madv``h]j)}(hjh]hmadv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK0hjubj )}(hhh](h)}(hState for madviseh]hState for madvise}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK,hj0ubh)}(h}0 is active/inuse. A negative value is the object is purged. Positive values are driver specific and not used by the helpers.h]h}0 is active/inuse. A negative value is the object is purged. Positive values are driver specific and not used by the helpers.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK.hj0ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj/hK0hjeubj)}(hd``madv_list`` List entry for madvise tracking Typically used by drivers to track purgeable objects h](j)}(h ``madv_list``h]j)}(hjch]h madv_list}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK7hj]ubj )}(hhh](h)}(hList entry for madvise trackingh]hList entry for madvise tracking}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK5hjyubh)}(h4Typically used by drivers to track purgeable objectsh]h4Typically used by drivers to track purgeable objects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhK7hjyubeh}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhK7hjeubj)}(h8``sgt`` Scatter/gather table for imported PRIME buffers h](j)}(h``sgt``h]j)}(hjh]hsgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhK)}(h:void drm_gem_shmem_object_free(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKubjV)}(h h]h }(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj1hKubjg)}(hdrm_gem_shmem_object_freeh]jm)}(hdrm_gem_shmem_object_freeh]hdrm_gem_shmem_object_free}(hjDhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj1hKubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj\ubjV)}(h h]h }(hjmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjFsbc.drm_gem_shmem_object_freeasbuh1hhj\ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj1hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj1hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj1hKhjhhubj)}(hhh]h)}(h,GEM object function for drm_gem_shmem_free()h]h,GEM object function for drm_gem_shmem_free()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj0hjhNubj)}(hX**Parameters** ``struct drm_gem_object *obj`` GEM object to free **Description** This function wraps drm_gem_shmem_free(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.free ` handler.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj)}(hhh]j)}(h2``struct drm_gem_object *obj`` GEM object to free h](j)}(h``struct drm_gem_object *obj``h]j)}(hj$h]hstruct drm_gem_object *obj}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hhh]h)}(hGEM object to freeh]hGEM object to free}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hKhj:ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj9hKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubh)}(hThis function wraps drm_gem_shmem_free(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.free ` handler.h](hgThis function wraps drm_gem_shmem_free(). Drivers that employ the shmem helpers should use it as their }(hjuhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.free `h]j)}(hjh]hdrm_gem_object_funcs.free}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjuubh handler.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.,drm_gem_shmem_object_print_info (C function)!c.drm_gem_shmem_object_print_infohNtauh1j!hj0hhhjhNubj3)}(hhh](j8)}(hsvoid drm_gem_shmem_object_print_info (struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj)h]j>)}(hrvoid drm_gem_shmem_object_print_info(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_gem_shmem_object_print_infoh]jm)}(hdrm_gem_shmem_object_print_infoh]hdrm_gem_shmem_object_print_info}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubj)}(hN(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj)h](j)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hj"hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j)}jjsb!c.drm_gem_shmem_object_print_infoasbuh1hhjubjV)}(h h]h }(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hjh]hp}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int indenth](jc)}(hunsignedh]hunsigned}(hjuhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjqubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjqubjc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjqubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjqubjm)}(hindenth]hindent}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_gem_object *objh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>!c.drm_gem_shmem_object_print_infoasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h5Print :c:type:`drm_gem_shmem_object` info for debugfsh](hPrint }(hjbhhhNhNubh)}(h:c:type:`drm_gem_shmem_object`h]j)}(hjlh]hdrm_gem_shmem_object}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j>!c.drm_gem_shmem_object_print_infoasbj3drm_gem_shmem_objectuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjbubh info for debugfs}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj0hjhNubj)}(hXo**Parameters** ``struct drm_printer *p`` DRM printer ``unsigned int indent`` Tab indentation level ``const struct drm_gem_object *obj`` GEM object **Description** This function wraps drm_gem_shmem_print_info(). Drivers that employ the shmem helpers should use this function as their :c:type:`drm_gem_object_funcs.print_info ` handler.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj)}(hhh](j)}(h&``struct drm_printer *p`` DRM printer h](j)}(h``struct drm_printer *p``h]j)}(hjh]hstruct drm_printer *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hhh]h)}(h DRM printerh]h DRM printer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``unsigned int indent`` Tab indentation level h](j)}(h``unsigned int indent``h]j)}(hjh]hunsigned int indent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``const struct drm_gem_object *obj`` GEM object h](j)}(h$``const struct drm_gem_object *obj``h]j)}(hj>h]h const struct drm_gem_object *obj}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj8ubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubh)}(hThis function wraps drm_gem_shmem_print_info(). Drivers that employ the shmem helpers should use this function as their :c:type:`drm_gem_object_funcs.print_info ` handler.h](hxThis function wraps drm_gem_shmem_print_info(). Drivers that employ the shmem helpers should use this function as their }(hjhhhNhNubh)}(h@:c:type:`drm_gem_object_funcs.print_info `h]j)}(hjh]hdrm_gem_object_funcs.print_info}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubh handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gem_shmem_object_pin (C function)c.drm_gem_shmem_object_pinhNtauh1j!hj0hhhjhNubj3)}(hhh](j8)}(h9int drm_gem_shmem_object_pin (struct drm_gem_object *obj)h]j>)}(h8int drm_gem_shmem_object_pin(struct drm_gem_object *obj)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_gem_shmem_object_pinh]jm)}(hdrm_gem_shmem_object_pinh]hdrm_gem_shmem_object_pin}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j)}jjsbc.drm_gem_shmem_object_pinasbuh1hhjubjV)}(h h]h }(hj\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjwhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h+GEM object function for drm_gem_shmem_pin()h]h+GEM object function for drm_gem_shmem_pin()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj0hjhNubj)}(h**Parameters** ``struct drm_gem_object *obj`` GEM object **Description** This function wraps drm_gem_shmem_pin(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.pin ` handler.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj)}(hhh]j)}(h*``struct drm_gem_object *obj`` GEM object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubh)}(hThis function wraps drm_gem_shmem_pin(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.pin ` handler.h](hfThis function wraps drm_gem_shmem_pin(). Drivers that employ the shmem helpers should use it as their }(hj3hhhNhNubh)}(h9:c:type:`drm_gem_object_funcs.pin `h]j)}(hj=h]hdrm_gem_object_funcs.pin}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj3ubh handler.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_gem_shmem_object_unpin (C function)c.drm_gem_shmem_object_unpinhNtauh1j!hj0hhhjhNubj3)}(hhh](j8)}(h)}(h;void drm_gem_shmem_object_unpin(struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_gem_shmem_object_unpinh]jm)}(hdrm_gem_shmem_object_unpinh]hdrm_gem_shmem_object_unpin}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_shmem_object_unpinasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj}hhhjhKubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjzhhubj)}(hhh]h)}(h-GEM object function for drm_gem_shmem_unpin()h]h-GEM object function for drm_gem_shmem_unpin()}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjBhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1j2hhhj0hjhNubj)}(h**Parameters** ``struct drm_gem_object *obj`` GEM object **Description** This function wraps drm_gem_shmem_unpin(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.unpin ` handler.h](h)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjaubj)}(hhh]j)}(h*``struct drm_gem_object *obj`` GEM object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjaubh)}(hThis function wraps drm_gem_shmem_unpin(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.unpin ` handler.h](hhThis function wraps drm_gem_shmem_unpin(). Drivers that employ the shmem helpers should use it as their }(hjhhhNhNubh)}(h;:c:type:`drm_gem_object_funcs.unpin `h]j)}(hjh]hdrm_gem_object_funcs.unpin}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubh handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j..drm_gem_shmem_object_get_sg_table (C function)#c.drm_gem_shmem_object_get_sg_tablehNtauh1j!hj0hhhjhNubj3)}(hhh](j8)}(hPstruct sg_table * drm_gem_shmem_object_get_sg_table (struct drm_gem_object *obj)h]j>)}(hNstruct sg_table *drm_gem_shmem_object_get_sg_table(struct drm_gem_object *obj)h](jD)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj%hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKubjV)}(h h]h }(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%hhhj6hKubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjHhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j)}j!drm_gem_shmem_object_get_sg_tablesb#c.drm_gem_shmem_object_get_sg_tableasbuh1hhj%hhhj6hKubjV)}(h h]h }(hjihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%hhhj6hKubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj6hKubjg)}(h!drm_gem_shmem_object_get_sg_tableh]jm)}(hjfh]h!drm_gem_shmem_object_get_sg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj%hhhj6hKubj)}(h(struct drm_gem_object *obj)h]j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jd#c.drm_gem_shmem_object_get_sg_tableasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj%hhhj6hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj!hhhj6hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj6hKhjhhubj)}(hhh]h)}(h4GEM object function for drm_gem_shmem_get_sg_table()h]h4GEM object function for drm_gem_shmem_get_sg_table()}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj!hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1j2hhhj0hjhNubj)}(hXh**Parameters** ``struct drm_gem_object *obj`` GEM object **Description** This function wraps drm_gem_shmem_get_sg_table(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.get_sg_table ` handler. **Return** A pointer to the scatter/gather table of pinned pages or error pointer on failure.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj@ubj)}(hhh]j)}(h*``struct drm_gem_object *obj`` GEM object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjeh]hstruct drm_gem_object *obj}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj_ubj )}(hhh]h)}(h GEM objecth]h GEM object}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhKhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj@ubh)}(hThis function wraps drm_gem_shmem_get_sg_table(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.get_sg_table ` handler.h](hoThis function wraps drm_gem_shmem_get_sg_table(). Drivers that employ the shmem helpers should use it as their }(hjhhhNhNubh)}(hB:c:type:`drm_gem_object_funcs.get_sg_table `h]j)}(hjh]h!drm_gem_object_funcs.get_sg_table}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubh handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj@ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj@ubh)}(hRA pointer to the scatter/gather table of pinned pages or error pointer on failure.h]hRA pointer to the scatter/gather table of pinned pages or error pointer on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_gem_shmem_object_mmap (C function)c.drm_gem_shmem_object_mmaphNtauh1j!hj0hhhjhNubj3)}(hhh](j8)}(hVint drm_gem_shmem_object_mmap (struct drm_gem_object *obj, struct vm_area_struct *vma)h]j>)}(hUint drm_gem_shmem_object_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hj/hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj+hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+hhhj=hMubjg)}(hdrm_gem_shmem_object_mmaph]jm)}(hdrm_gem_shmem_object_mmaph]hdrm_gem_shmem_object_mmap}(hjPhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj+hhhj=hMubj)}(h8(struct drm_gem_object *obj, struct vm_area_struct *vma)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhubjV)}(h h]h }(hjyhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjRsbc.drm_gem_shmem_object_mmapasbuh1hhjhubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_shmem_object_mmapasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvmah]hvma}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubeh}(h]h ]h"]h$]h&]jjuh1jhj+hhhj=hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj'hhhj=hMubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1j7hj=hMhj$hhubj)}(hhh]h)}(h,GEM object function for drm_gem_shmem_mmap()h]h,GEM object function for drm_gem_shmem_mmap()}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhj\hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj=hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1j2hhhj0hjhNubj)}(hXw**Parameters** ``struct drm_gem_object *obj`` GEM object ``struct vm_area_struct *vma`` VMA for the area to be mapped **Description** This function wraps drm_gem_shmem_mmap(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.mmap ` handler. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMhj{ubj)}(hhh](j)}(h*``struct drm_gem_object *obj`` GEM object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](j)}(h``struct vm_area_struct *vma``h]j)}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMhj{ubh)}(hThis function wraps drm_gem_shmem_mmap(). Drivers that employ the shmem helpers should use it as their :c:type:`drm_gem_object_funcs.mmap ` handler.h](hgThis function wraps drm_gem_shmem_mmap(). Drivers that employ the shmem helpers should use it as their }(hj* hhhNhNubh)}(h::c:type:`drm_gem_object_funcs.mmap `h]j)}(hj4 h]hdrm_gem_object_funcs.mmap}(hj6 hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj2 ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMhj* ubh handler.}(hj* hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQ hMhj{ubh)}(h **Return**h]j)}(hj^ h]hReturn}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMhj{ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."DRM_GEM_SHMEM_DRIVER_OPS (C macro)c.DRM_GEM_SHMEM_DRIVER_OPShNtauh1j!hj0hhhjhNubj3)}(hhh](j8)}(hDRM_GEM_SHMEM_DRIVER_OPSh]j>)}(hDRM_GEM_SHMEM_DRIVER_OPSh]jg)}(hDRM_GEM_SHMEM_DRIVER_OPSh]jm)}(hj h]hDRM_GEM_SHMEM_DRIVER_OPS}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj hMhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1j2hhhj0hjhNubh)}(h``DRM_GEM_SHMEM_DRIVER_OPS``h]j)}(hj h]hDRM_GEM_SHMEM_DRIVER_OPS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhM hj0hhubj@-)}(h Default shmem GEM operations **Description** This macro provides a shortcut for setting the shmem GEM operations in the :c:type:`drm_driver` structure. h](j@-)}(hDefault shmem GEM operations h]h)}(hDefault shmem GEM operationsh]hDefault shmem GEM operations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMhj ubah}(h]h ]h"]h$]h&]uh1j?-hj!hMhj ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj !ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMhj ubh)}(hjThis macro provides a shortcut for setting the shmem GEM operations in the :c:type:`drm_driver` structure.h](hKThis macro provides a shortcut for setting the shmem GEM operations in the }(hj$!hhhNhNubh)}(h:c:type:`drm_driver`h]j)}(hj.!h]h drm_driver}(hj0!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj,!ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:376: ./include/drm/drm_gem_shmem_helper.hhMhj$!ubh structure.}(hj$!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjK!hMhj ubeh}(h]h ]h"]h$]h&]uh1j?-hj!hMhj0hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_gem_shmem_create (C function)c.drm_gem_shmem_createhNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(hXstruct drm_gem_shmem_object * drm_gem_shmem_create (struct drm_device *dev, size_t size)h]j>)}(hVstruct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size)h](jD)}(hjh]hstruct}(hju!hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjq!hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chK}ubjV)}(h h]h }(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjq!hhhj!hK}ubh)}(hhh]jm)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j)}jdrm_gem_shmem_createsbc.drm_gem_shmem_createasbuh1hhjq!hhhj!hK}ubjV)}(h h]h }(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjq!hhhj!hK}ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq!hhhj!hK}ubjg)}(hdrm_gem_shmem_createh]jm)}(hj!h]hdrm_gem_shmem_create}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjq!hhhj!hK}ubj)}(h%(struct drm_device *dev, size_t size)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj!ubjV)}(h h]h }(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj "hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj "ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j!c.drm_gem_shmem_createasbuh1hhj!ubjV)}(h h]h }(hj+"hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!ubj)}(hjh]h*}(hj9"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjm)}(hdevh]hdev}(hjF"hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(h size_t sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hjb"hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj_"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjd"modnameN classnameNjj)}j]j!c.drm_gem_shmem_createasbuh1hhj["ubjV)}(h h]h }(hj"hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj["ubjm)}(hsizeh]hsize}(hj"hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj["ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhjq!hhhj!hK}ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjm!hhhj!hK}ubah}(h]jh!ah ](jjeh"]h$]h&]jj)jhuh1j7hj!hK}hjj!hhubj)}(hhh]h)}(h&Allocate an object with the given sizeh]h&Allocate an object with the given size}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKshj"hhubah}(h]h ]h"]h$]h&]uh1jhjj!hhhj!hK}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1j2hhhj0hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``size_t size`` Size of the object to allocate **Description** This function creates a shmem GEM object. **Return** A struct drm_gem_shmem_object * on success or an ERR_PTR()-encoded negative error code on failure.h](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKwhj"ubj)}(hhh](j)}(h&``struct drm_device *dev`` DRM device h](j)}(h``struct drm_device *dev``h]j)}(hj"h]hstruct drm_device *dev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKthj"ubj )}(hhh]h)}(h DRM deviceh]h DRM device}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKthj#ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hKthj"ubj)}(h/``size_t size`` Size of the object to allocate h](j)}(h``size_t size``h]j)}(hj2#h]h size_t size}(hj4#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0#ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKuhj,#ubj )}(hhh]h)}(hSize of the object to allocateh]hSize of the object to allocate}(hjK#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG#hKuhjH#ubah}(h]h ]h"]h$]h&]uh1j hj,#ubeh}(h]h ]h"]h$]h&]uh1jhjG#hKuhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hjm#h]h Description}(hjo#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKwhj"ubh)}(h)This function creates a shmem GEM object.h]h)This function creates a shmem GEM object.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKwhj"ubh)}(h **Return**h]j)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKyhj"ubh)}(hbA struct drm_gem_shmem_object * on success or an ERR_PTR()-encoded negative error code on failure.h]hbA struct drm_gem_shmem_object * on success or an ERR_PTR()-encoded negative error code on failure.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKyhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_gem_shmem_create_with_mnt (C function)c.drm_gem_shmem_create_with_mnthNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(hystruct drm_gem_shmem_object * drm_gem_shmem_create_with_mnt (struct drm_device *dev, size_t size, struct vfsmount *gemfs)h]j>)}(hwstruct drm_gem_shmem_object *drm_gem_shmem_create_with_mnt(struct drm_device *dev, size_t size, struct vfsmount *gemfs)h](jD)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#hhhj#hKubh)}(hhh]jm)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j)}jdrm_gem_shmem_create_with_mntsbc.drm_gem_shmem_create_with_mntasbuh1hhj#hhhj#hKubjV)}(h h]h }(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#hhhj#hKubj)}(hjh]h*}(hj'$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hKubjg)}(hdrm_gem_shmem_create_with_mnth]jm)}(hj$h]hdrm_gem_shmem_create_with_mnt}(hj8$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4$ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj#hhhj#hKubj)}(h=(struct drm_device *dev, size_t size, struct vfsmount *gemfs)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjS$hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjO$ubjV)}(h h]h }(hj`$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjO$ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjq$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjn$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjs$modnameN classnameNjj)}j]j$c.drm_gem_shmem_create_with_mntasbuh1hhjO$ubjV)}(h h]h }(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjO$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO$ubjm)}(hdevh]hdev}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjO$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjK$ubj)}(h size_t sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j$c.drm_gem_shmem_create_with_mntasbuh1hhj$ubjV)}(h h]h }(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj$ubjm)}(hsizeh]hsize}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjK$ubj)}(hstruct vfsmount *gemfsh](jD)}(hjh]hstruct}(hj %hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj%ubjV)}(h h]h }(hj%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%ubh)}(hhh]jm)}(hvfsmounth]hvfsmount}(hj)%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+%modnameN classnameNjj)}j]j$c.drm_gem_shmem_create_with_mntasbuh1hhj%ubjV)}(h h]h }(hjG%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%ubj)}(hjh]h*}(hjU%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjm)}(hgemfsh]hgemfs}(hjb%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjK$ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj#hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj#hhhj#hKubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1j7hj#hKhj#hhubj)}(hhh]h)}(h)}(h;void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem)h](jc)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj&hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKubjV)}(h h]h }(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&hhhj&hKubjg)}(hdrm_gem_shmem_freeh]jm)}(hdrm_gem_shmem_freeh]hdrm_gem_shmem_free}(hj'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj&hhhj&hKubj)}(h$(struct drm_gem_shmem_object *shmem)h]j)}(h"struct drm_gem_shmem_object *shmemh](jD)}(hjh]hstruct}(hj#'hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj'ubjV)}(h h]h }(hj0'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj'ubh)}(hhh]jm)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hjA'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjC'modnameN classnameNjj)}j]j)}jj 'sbc.drm_gem_shmem_freeasbuh1hhj'ubjV)}(h h]h }(hja'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj'ubj)}(hjh]h*}(hjo'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjm)}(hshmemh]hshmem}(hj|'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubah}(h]h ]h"]h$]h&]jjuh1jhj&hhhj&hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj&hhhj&hKubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1j7hj&hKhj&hhubj)}(hhh]h)}(h1Free resources associated with a shmem GEM objecth]h1Free resources associated with a shmem GEM object}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1j2hhhj0hNhNubj)}(h**Parameters** ``struct drm_gem_shmem_object *shmem`` shmem GEM object to free **Description** This function cleans up the GEM object state and frees the memory used to store the object itself.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj'ubj)}(hhh]j)}(h@``struct drm_gem_shmem_object *shmem`` shmem GEM object to free h](j)}(h&``struct drm_gem_shmem_object *shmem``h]j)}(hj'h]h"struct drm_gem_shmem_object *shmem}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj'ubj )}(hhh]h)}(hshmem GEM object to freeh]hshmem GEM object to free}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j)}(hj"(h]h Description}(hj$(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj'ubh)}(hbThis function cleans up the GEM object state and frees the memory used to store the object itself.h]hbThis function cleans up the GEM object state and frees the memory used to store the object itself.}(hj8(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_shmem_pin (C function)c.drm_gem_shmem_pinhNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(h:int drm_gem_shmem_pin (struct drm_gem_shmem_object *shmem)h]j>)}(h9int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem)h](jc)}(hinth]hint}(hjg(hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjc(hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubjV)}(h h]h }(hjv(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjc(hhhju(hMubjg)}(hdrm_gem_shmem_pinh]jm)}(hdrm_gem_shmem_pinh]hdrm_gem_shmem_pin}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjc(hhhju(hMubj)}(h$(struct drm_gem_shmem_object *shmem)h]j)}(h"struct drm_gem_shmem_object *shmemh](jD)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj(ubjV)}(h h]h }(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(ubh)}(hhh]jm)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j)}jj(sbc.drm_gem_shmem_pinasbuh1hhj(ubjV)}(h h]h }(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjm)}(hshmemh]hshmem}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubah}(h]h ]h"]h$]h&]jjuh1jhjc(hhhju(hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj_(hhhju(hMubah}(h]jZ(ah ](jjeh"]h$]h&]jj)jhuh1j7hju(hMhj\(hhubj)}(hhh]h)}(h(Pin backing pages for a shmem GEM objecth]h(Pin backing pages for a shmem GEM object}(hj')hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj$)hhubah}(h]h ]h"]h$]h&]uh1jhj\(hhhju(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?)jj?)jjjuh1j2hhhj0hNhNubj)}(h**Parameters** ``struct drm_gem_shmem_object *shmem`` shmem GEM object **Description** This function makes sure the backing pages are pinned in memory while the buffer is exported. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjI)h]h Parameters}(hjK)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG)ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjC)ubj)}(hhh]j)}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](j)}(h&``struct drm_gem_shmem_object *shmem``h]j)}(hjh)h]h"struct drm_gem_shmem_object *shmem}(hjj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf)ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjb)ubj )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj})hMhj~)ubah}(h]h ]h"]h$]h&]uh1j hjb)ubeh}(h]h ]h"]h$]h&]uh1jhj})hMhj_)ubah}(h]h ]h"]h$]h&]uh1jhjC)ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjC)ubh)}(h]This function makes sure the backing pages are pinned in memory while the buffer is exported.h]h]This function makes sure the backing pages are pinned in memory while the buffer is exported.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjC)ubh)}(h **Return**h]j)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjC)ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjC)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_shmem_unpin (C function)c.drm_gem_shmem_unpinhNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(h=void drm_gem_shmem_unpin (struct drm_gem_shmem_object *shmem)h]j>)}(h)}(hoint drm_gem_shmem_dumb_create(struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h](jc)}(hinth]hint}(hj+hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj+hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+hhhj+hMubjg)}(hdrm_gem_shmem_dumb_createh]jm)}(hdrm_gem_shmem_dumb_createh]hdrm_gem_shmem_dumb_create}(hj+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj+hhhj+hMubj)}(hR(struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h](j)}(hstruct drm_file *fileh](jD)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj+ubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+ubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hj+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j)}jj+sbc.drm_gem_shmem_dumb_createasbuh1hhj+ubjV)}(h h]h }(hj ,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjm)}(hfileh]hfile}(hj&,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj?,hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj;,ubjV)}(h h]h }(hjL,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj;,ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj],hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjZ,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_,modnameN classnameNjj)}j]j,c.drm_gem_shmem_dumb_createasbuh1hhj;,ubjV)}(h h]h }(hj{,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj;,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;,ubjm)}(hdevh]hdev}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj;,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(h!struct drm_mode_create_dumb *argsh](jD)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj,ubjV)}(h h]h }(hj,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,ubh)}(hhh]jm)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j,c.drm_gem_shmem_dumb_createasbuh1hhj,ubjV)}(h h]h }(hj,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjm)}(hargsh]hargs}(hj-hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubeh}(h]h ]h"]h$]h&]jjuh1jhj+hhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj+hhhj+hMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1j7hj+hMhj+hhubj)}(hhh]h)}(h!Create a dumb shmem buffer objecth]h!Create a dumb shmem buffer object}(hj0-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj--hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjH-jjH-jjjuh1j2hhhj0hNhNubj)}(hX**Parameters** ``struct drm_file *file`` DRM file structure to create the dumb buffer for ``struct drm_device *dev`` DRM device ``struct drm_mode_create_dumb *args`` IOCTL data **Description** This function computes the pitch of the dumb buffer and rounds it up to an integer number of bytes per pixel. Drivers for hardware that doesn't have any additional restrictions on the pitch can directly use this function as their :c:type:`drm_driver.dumb_create ` callback. For hardware with additional restrictions, drivers can adjust the fields set up by userspace before calling into this function. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjR-h]h Parameters}(hjT-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP-ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjL-ubj)}(hhh](j)}(hK``struct drm_file *file`` DRM file structure to create the dumb buffer for h](j)}(h``struct drm_file *file``h]j)}(hjq-h]hstruct drm_file *file}(hjs-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo-ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjk-ubj )}(hhh]h)}(h0DRM file structure to create the dumb buffer forh]h0DRM file structure to create the dumb buffer for}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hjk-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjh-ubj)}(h&``struct drm_device *dev`` DRM device h](j)}(h``struct drm_device *dev``h]j)}(hj-h]hstruct drm_device *dev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj-ubj )}(hhh]h)}(h DRM deviceh]h DRM device}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjh-ubj)}(h1``struct drm_mode_create_dumb *args`` IOCTL data h](j)}(h%``struct drm_mode_create_dumb *args``h]j)}(hj-h]h!struct drm_mode_create_dumb *args}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj-ubj )}(hhh]h)}(h IOCTL datah]h IOCTL data}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjh-ubeh}(h]h ]h"]h$]h&]uh1jhjL-ubh)}(h**Description**h]j)}(hj.h]h Description}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjL-ubh)}(hXThis function computes the pitch of the dumb buffer and rounds it up to an integer number of bytes per pixel. Drivers for hardware that doesn't have any additional restrictions on the pitch can directly use this function as their :c:type:`drm_driver.dumb_create ` callback.h](hThis function computes the pitch of the dumb buffer and rounds it up to an integer number of bytes per pixel. Drivers for hardware that doesn’t have any additional restrictions on the pitch can directly use this function as their }(hj4.hhhNhNubh)}(h-:c:type:`drm_driver.dumb_create `h]j)}(hj>.h]hdrm_driver.dumb_create}(hj@.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<.ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj4.ubh callback.}(hj4.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[.hMhjL-ubh)}(hFor hardware with additional restrictions, drivers can adjust the fields set up by userspace before calling into this function.h]hFor hardware with additional restrictions, drivers can adjust the fields set up by userspace before calling into this function.}(hjf.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjL-ubh)}(h **Return**h]j)}(hjw.h]hReturn}(hjy.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju.ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjL-ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjL-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_shmem_mmap (C function)c.drm_gem_shmem_mmaphNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(hWint drm_gem_shmem_mmap (struct drm_gem_shmem_object *shmem, struct vm_area_struct *vma)h]j>)}(hVint drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hj.hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj.hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.hhhj.hMhubjg)}(hdrm_gem_shmem_mmaph]jm)}(hdrm_gem_shmem_mmaph]hdrm_gem_shmem_mmap}(hj.hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj.hhhj.hMhubj)}(h@(struct drm_gem_shmem_object *shmem, struct vm_area_struct *vma)h](j)}(h"struct drm_gem_shmem_object *shmemh](jD)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj.ubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.ubh)}(hhh]jm)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j)}jj.sbc.drm_gem_shmem_mmapasbuh1hhj.ubjV)}(h h]h }(hj7/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.ubj)}(hjh]h*}(hjE/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjm)}(hshmemh]hshmem}(hjR/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjk/hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjg/ubjV)}(h h]h }(hjx/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjg/ubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j3/c.drm_gem_shmem_mmapasbuh1hhjg/ubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjg/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg/ubjm)}(hvmah]hvma}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjg/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhj.hMhubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj.hhhj.hMhubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1j7hj.hMhhj.hhubj)}(hhh]h)}(hMemory-map a shmem GEM objecth]hMemory-map a shmem GEM object}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chM^hj/hhubah}(h]h ]h"]h$]h&]uh1jhj.hhhj.hMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1j2hhhj0hNhNubj)}(hX>**Parameters** ``struct drm_gem_shmem_object *shmem`` shmem GEM object ``struct vm_area_struct *vma`` VMA for the area to be mapped **Description** This function implements an augmented version of the GEM DRM file mmap operation for shmem objects. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 0ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMbhj0ubj)}(hhh](j)}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](j)}(h&``struct drm_gem_shmem_object *shmem``h]j)}(hj-0h]h"struct drm_gem_shmem_object *shmem}(hj/0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+0ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chM_hj'0ubj )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hjF0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB0hM_hjC0ubah}(h]h ]h"]h$]h&]uh1j hj'0ubeh}(h]h ]h"]h$]h&]uh1jhjB0hM_hj$0ubj)}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](j)}(h``struct vm_area_struct *vma``h]j)}(hjf0h]hstruct vm_area_struct *vma}(hjh0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd0ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chM`hj`0ubj )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{0hM`hj|0ubah}(h]h ]h"]h$]h&]uh1j hj`0ubeh}(h]h ]h"]h$]h&]uh1jhj{0hM`hj$0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubh)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMbhj0ubh)}(hcThis function implements an augmented version of the GEM DRM file mmap operation for shmem objects.h]hcThis function implements an augmented version of the GEM DRM file mmap operation for shmem objects.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMbhj0ubh)}(h **Return**h]j)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMehj0ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMehj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gem_shmem_print_info (C function)c.drm_gem_shmem_print_infohNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(htvoid drm_gem_shmem_print_info (const struct drm_gem_shmem_object *shmem, struct drm_printer *p, unsigned int indent)h]j>)}(hsvoid drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, struct drm_printer *p, unsigned int indent)h](jc)}(hvoidh]hvoid}(hj 1hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj 1hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj 1hhhj1hMubjg)}(hdrm_gem_shmem_print_infoh]jm)}(hdrm_gem_shmem_print_infoh]hdrm_gem_shmem_print_info}(hj.1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj*1ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj 1hhhj1hMubj)}(hV(const struct drm_gem_shmem_object *shmem, struct drm_printer *p, unsigned int indent)h](j)}(h(const struct drm_gem_shmem_object *shmemh](jD)}(hj&h]hconst}(hjJ1hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjF1ubjV)}(h h]h }(hjW1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjF1ubjD)}(hjh]hstruct}(hje1hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjF1ubjV)}(h h]h }(hjr1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjF1ubh)}(hhh]jm)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j)}jj01sbc.drm_gem_shmem_print_infoasbuh1hhjF1ubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjF1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF1ubjm)}(hshmemh]hshmem}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjF1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjB1ubj)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj1ubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1ubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j1c.drm_gem_shmem_print_infoasbuh1hhj1ubjV)}(h h]h }(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1ubj)}(hjh]h*}(hj!2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjm)}(hjh]hp}(hj.2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjB1ubj)}(hunsigned int indenth](jc)}(hunsignedh]hunsigned}(hjF2hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjB2ubjV)}(h h]h }(hjT2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjB2ubjc)}(hinth]hint}(hjb2hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjB2ubjV)}(h h]h }(hjp2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjB2ubjm)}(hindenth]hindent}(hj~2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjB2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjB1ubeh}(h]h ]h"]h$]h&]jjuh1jhj 1hhhj1hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj1hhhj1hMubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1j7hj1hMhj1hhubj)}(hhh]h)}(h5Print :c:type:`drm_gem_shmem_object` info for debugfsh](hPrint }(hj2hhhNhNubh)}(h:c:type:`drm_gem_shmem_object`h]j)}(hj2h]hdrm_gem_shmem_object}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j1c.drm_gem_shmem_print_infoasbj3drm_gem_shmem_objectuh1hhj!hK}hj2ubh info for debugfs}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1j2hhhj0hNhNubj)}(h**Parameters** ``const struct drm_gem_shmem_object *shmem`` shmem GEM object ``struct drm_printer *p`` DRM printer ``unsigned int indent`` Tab indentation levelh](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj2ubj)}(hhh](j)}(h>``const struct drm_gem_shmem_object *shmem`` shmem GEM object h](j)}(h,``const struct drm_gem_shmem_object *shmem``h]j)}(hj3h]h(const struct drm_gem_shmem_object *shmem}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj 3ubj )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hj*3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&3hMhj'3ubah}(h]h ]h"]h$]h&]uh1j hj 3ubeh}(h]h ]h"]h$]h&]uh1jhj&3hMhj3ubj)}(h&``struct drm_printer *p`` DRM printer h](j)}(h``struct drm_printer *p``h]j)}(hjJ3h]hstruct drm_printer *p}(hjL3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH3ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjD3ubj )}(hhh]h)}(h DRM printerh]h DRM printer}(hjc3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_3hMhj`3ubah}(h]h ]h"]h$]h&]uh1j hjD3ubeh}(h]h ]h"]h$]h&]uh1jhj_3hMhj3ubj)}(h-``unsigned int indent`` Tab indentation levelh](j)}(h``unsigned int indent``h]j)}(hj3h]hunsigned int indent}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj}3ubj )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj3ubah}(h]h ]h"]h$]h&]uh1j hj}3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_gem_shmem_get_sg_table (C function)c.drm_gem_shmem_get_sg_tablehNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(hQstruct sg_table * drm_gem_shmem_get_sg_table (struct drm_gem_shmem_object *shmem)h]j>)}(hOstruct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem)h](jD)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj3hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubjV)}(h h]h }(hj3hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3hhhj3hMubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hj3hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jdrm_gem_shmem_get_sg_tablesbc.drm_gem_shmem_get_sg_tableasbuh1hhj3hhhj3hMubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3hhhj3hMubj)}(hjh]h*}(hj+4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubjg)}(hdrm_gem_shmem_get_sg_tableh]jm)}(hj4h]hdrm_gem_shmem_get_sg_table}(hj<4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj84ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj3hhhj3hMubj)}(h$(struct drm_gem_shmem_object *shmem)h]j)}(h"struct drm_gem_shmem_object *shmemh](jD)}(hjh]hstruct}(hjW4hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjS4ubjV)}(h h]h }(hjd4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjS4ubh)}(hhh]jm)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hju4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjr4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjw4modnameN classnameNjj)}j]j4c.drm_gem_shmem_get_sg_tableasbuh1hhjS4ubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjS4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS4ubjm)}(hshmemh]hshmem}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjS4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjO4ubah}(h]h ]h"]h$]h&]jjuh1jhj3hhhj3hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj3hhhj3hMubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1j7hj3hMhj3hhubj)}(hhh]h)}(hEProvide a scatter/gather table of pinned pages for a shmem GEM objecth]hEProvide a scatter/gather table of pinned pages for a shmem GEM object}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj4hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1j2hhhj0hNhNubj)}(hX**Parameters** ``struct drm_gem_shmem_object *shmem`` shmem GEM object **Description** This function exports a scatter/gather table suitable for PRIME usage by calling the standard DMA mapping API. Drivers who need to acquire an scatter/gather table for objects need to call drm_gem_shmem_get_pages_sgt() instead. **Return** A pointer to the scatter/gather table of pinned pages or error pointer on failure.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj4ubj)}(hhh]j)}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](j)}(h&``struct drm_gem_shmem_object *shmem``h]j)}(hj5h]h"struct drm_gem_shmem_object *shmem}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj5ubj )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hj25hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.5hMhj/5ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhj.5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hjT5h]h Description}(hjV5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR5ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj4ubh)}(hnThis function exports a scatter/gather table suitable for PRIME usage by calling the standard DMA mapping API.h]hnThis function exports a scatter/gather table suitable for PRIME usage by calling the standard DMA mapping API.}(hjj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj4ubh)}(hsDrivers who need to acquire an scatter/gather table for objects need to call drm_gem_shmem_get_pages_sgt() instead.h]hsDrivers who need to acquire an scatter/gather table for objects need to call drm_gem_shmem_get_pages_sgt() instead.}(hjy5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj4ubh)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj4ubh)}(hRA pointer to the scatter/gather table of pinned pages or error pointer on failure.h]hRA pointer to the scatter/gather table of pinned pages or error pointer on failure.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_gem_shmem_get_pages_sgt (C function)c.drm_gem_shmem_get_pages_sgthNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(hRstruct sg_table * drm_gem_shmem_get_pages_sgt (struct drm_gem_shmem_object *shmem)h]j>)}(hPstruct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem)h](jD)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj5hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj5hhhj5hMubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j)}jdrm_gem_shmem_get_pages_sgtsbc.drm_gem_shmem_get_pages_sgtasbuh1hhj5hhhj5hMubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj5hhhj5hMubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hMubjg)}(hdrm_gem_shmem_get_pages_sgth]jm)}(hj 6h]hdrm_gem_shmem_get_pages_sgt}(hj.6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj*6ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj5hhhj5hMubj)}(h$(struct drm_gem_shmem_object *shmem)h]j)}(h"struct drm_gem_shmem_object *shmemh](jD)}(hjh]hstruct}(hjI6hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjE6ubjV)}(h h]h }(hjV6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjE6ubh)}(hhh]jm)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hjg6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjd6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetji6modnameN classnameNjj)}j]j 6c.drm_gem_shmem_get_pages_sgtasbuh1hhjE6ubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjE6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE6ubjm)}(hshmemh]hshmem}(hj6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjE6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjA6ubah}(h]h ]h"]h$]h&]jjuh1jhj5hhhj5hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj5hhhj5hMubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1j7hj5hMhj5hhubj)}(hhh]h)}(hRPin pages, dma map them, and return a scatter/gather table for a shmem GEM object.h]hRPin pages, dma map them, and return a scatter/gather table for a shmem GEM object.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj5hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1j2hhhj0hNhNubj)}(hX2**Parameters** ``struct drm_gem_shmem_object *shmem`` shmem GEM object **Description** This function returns a scatter/gather table suitable for driver usage. If the sg table doesn't exist, the pages are pinned, dma-mapped, and a sg table created. This is the main function for drivers to get at backing storage, and it hides and difference between dma-buf imported and natively allocated objects. drm_gem_shmem_get_sg_table() should not be directly called by drivers. **Return** A pointer to the scatter/gather table of pinned pages or errno on failure.h](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj6ubj)}(hhh]j)}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](j)}(h&``struct drm_gem_shmem_object *shmem``h]j)}(hj 7h]h"struct drm_gem_shmem_object *shmem}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 7ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj7ubj )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hj$7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 7hMhj!7ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj 7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hjF7h]h Description}(hjH7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD7ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj6ubh)}(hThis function returns a scatter/gather table suitable for driver usage. If the sg table doesn't exist, the pages are pinned, dma-mapped, and a sg table created.h]hThis function returns a scatter/gather table suitable for driver usage. If the sg table doesn’t exist, the pages are pinned, dma-mapped, and a sg table created.}(hj\7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj6ubh)}(hThis is the main function for drivers to get at backing storage, and it hides and difference between dma-buf imported and natively allocated objects. drm_gem_shmem_get_sg_table() should not be directly called by drivers.h]hThis is the main function for drivers to get at backing storage, and it hides and difference between dma-buf imported and natively allocated objects. drm_gem_shmem_get_sg_table() should not be directly called by drivers.}(hjk7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj6ubh)}(h **Return**h]j)}(hj|7h]hReturn}(hj~7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz7ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj6ubh)}(hJA pointer to the scatter/gather table of pinned pages or errno on failure.h]hJA pointer to the scatter/gather table of pinned pages or errno on failure.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.0drm_gem_shmem_prime_import_sg_table (C function)%c.drm_gem_shmem_prime_import_sg_tablehNtauh1j!hj0hhhNhNubj3)}(hhh](j8)}(hstruct drm_gem_object * drm_gem_shmem_prime_import_sg_table (struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h]j>)}(hstruct drm_gem_object *drm_gem_shmem_prime_import_sg_table(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](jD)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj7hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubjV)}(h h]h }(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7hhhj7hMubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j)}j#drm_gem_shmem_prime_import_sg_tablesb%c.drm_gem_shmem_prime_import_sg_tableasbuh1hhj7hhhj7hMubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7hhhj7hMubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hMubjg)}(h#drm_gem_shmem_prime_import_sg_tableh]jm)}(hj7h]h#drm_gem_shmem_prime_import_sg_table}(hj 8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj7hhhj7hMubj)}(hQ(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj;8hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj78ubjV)}(h h]h }(hjH8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj78ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjY8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjV8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[8modnameN classnameNjj)}j]j7%c.drm_gem_shmem_prime_import_sg_tableasbuh1hhj78ubjV)}(h h]h }(hjw8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj78ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj78ubjm)}(hdevh]hdev}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj78ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj38ubj)}(h!struct dma_buf_attachment *attachh](jD)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj8ubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8ubh)}(hhh]jm)}(hdma_buf_attachmenth]hdma_buf_attachment}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j7%c.drm_gem_shmem_prime_import_sg_tableasbuh1hhj8ubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjm)}(hattachh]hattach}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj38ubj)}(hstruct sg_table *sgth](jD)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj9ubjV)}(h h]h }(hj(9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9ubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hj99hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj69ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;9modnameN classnameNjj)}j]j7%c.drm_gem_shmem_prime_import_sg_tableasbuh1hhj9ubjV)}(h h]h }(hjW9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9ubj)}(hjh]h*}(hje9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjm)}(hsgth]hsgt}(hjr9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj38ubeh}(h]h ]h"]h$]h&]jjuh1jhj7hhhj7hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj7hhhj7hMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1j7hj7hMhj7hhubj)}(hhh]h)}(hUProduce a shmem GEM object from another driver's scatter/gather table of pinned pagesh]hWProduce a shmem GEM object from another driver’s scatter/gather table of pinned pages}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1j2hhhj0hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` Device to import into ``struct dma_buf_attachment *attach`` DMA-BUF attachment ``struct sg_table *sgt`` Scatter/gather table of pinned pages **Description** This function imports a scatter/gather table exported via DMA-BUF by another driver. Drivers that use the shmem helpers should set this as their :c:type:`drm_driver.gem_prime_import_sg_table ` callback. **Return** A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.h](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj9ubj)}(hhh](j)}(h1``struct drm_device *dev`` Device to import into h](j)}(h``struct drm_device *dev``h]j)}(hj9h]hstruct drm_device *dev}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj9ubj )}(hhh]h)}(hDevice to import intoh]hDevice to import into}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(h9``struct dma_buf_attachment *attach`` DMA-BUF attachment h](j)}(h%``struct dma_buf_attachment *attach``h]j)}(hj:h]h!struct dma_buf_attachment *attach}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj:ubj )}(hhh]h)}(hDMA-BUF attachmenth]hDMA-BUF attachment}(hj/:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+:hMhj,:ubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]uh1jhj+:hMhj9ubj)}(h>``struct sg_table *sgt`` Scatter/gather table of pinned pages h](j)}(h``struct sg_table *sgt``h]j)}(hjO:h]hstruct sg_table *sgt}(hjQ:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM:ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjI:ubj )}(hhh]h)}(h$Scatter/gather table of pinned pagesh]h$Scatter/gather table of pinned pages}(hjh:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd:hMhje:ubah}(h]h ]h"]h$]h&]uh1j hjI:ubeh}(h]h ]h"]h$]h&]uh1jhjd:hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj9ubh)}(hThis function imports a scatter/gather table exported via DMA-BUF by another driver. Drivers that use the shmem helpers should set this as their :c:type:`drm_driver.gem_prime_import_sg_table ` callback.h](hThis function imports a scatter/gather table exported via DMA-BUF by another driver. Drivers that use the shmem helpers should set this as their }(hj:hhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j)}(hj:h]h$drm_driver.gem_prime_import_sg_table}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj:ubh callback.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj9ubh)}(h **Return**h]j)}(hj:h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chM hj9ubh)}(h]A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.h]h]A pointer to a newly created GEM object or an ERR_PTR-encoded negative error code on failure.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:379: ./drivers/gpu/drm/drm_gem_shmem_helper.chM hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubeh}(h]#gem-shmem-helper-function-referenceah ]h"]#gem shmem helper function referenceah$]h&]uh1hhj&yhhhhhMsubh)}(hhh](h)}(h#GEM VRAM Helper Functions Referenceh]h#GEM VRAM Helper Functions Reference}(hj ;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hhhhhMubh)}(hThis library provides :c:type:`struct drm_gem_vram_object ` (GEM VRAM), a GEM buffer object that is backed by video RAM (VRAM). It can be used for framebuffer devices with dedicated memory.h](hThis library provides }(hj;hhhNhNubh)}(h::c:type:`struct drm_gem_vram_object `h]j)}(hj#;h]hstruct drm_gem_vram_object}(hj%;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj!;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_vram_objectuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj;ubh (GEM VRAM), a GEM buffer object that is backed by video RAM (VRAM). It can be used for framebuffer devices with dedicated memory.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@;hKhj;hhubh)}(hXThe data structure :c:type:`struct drm_vram_mm ` and its helpers implement a memory manager for simple framebuffer devices with dedicated video memory. GEM VRAM buffer objects are either placed in the video memory or remain evicted to system memory.h](hThe data structure }(hjK;hhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hjU;h]hstruct drm_vram_mm}(hjW;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjS;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_vram_mmuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjK;ubh and its helpers implement a memory manager for simple framebuffer devices with dedicated video memory. GEM VRAM buffer objects are either placed in the video memory or remain evicted to system memory.}(hjK;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjr;hKhj;hhubh)}(hX|With the GEM interface userspace applications create, manage and destroy graphics buffers, such as an on-screen framebuffer. GEM does not provide an implementation of these interfaces. It's up to the DRM driver to provide an implementation that suits the hardware. If the hardware device contains dedicated video memory, the DRM driver can use the VRAM helper library. Each active buffer object is stored in video RAM. Active buffer are used for drawing the current frame, typically something like the frame's scanout buffer or the cursor image. If there's no more space left in VRAM, inactive GEM objects can be moved to system memory.h]hXWith the GEM interface userspace applications create, manage and destroy graphics buffers, such as an on-screen framebuffer. GEM does not provide an implementation of these interfaces. It’s up to the DRM driver to provide an implementation that suits the hardware. If the hardware device contains dedicated video memory, the DRM driver can use the VRAM helper library. Each active buffer object is stored in video RAM. Active buffer are used for drawing the current frame, typically something like the frame’s scanout buffer or the cursor image. If there’s no more space left in VRAM, inactive GEM objects can be moved to system memory.}(hj};hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chK#hj;hhubh)}(hXTo initialize the VRAM helper library call drmm_vram_helper_init(). The function allocates and initializes an instance of :c:type:`struct drm_vram_mm ` in :c:type:`struct drm_device `.vram_mm . Use :c:type:`DRM_GEM_VRAM_DRIVER` to initialize :c:type:`struct drm_driver ` and :c:type:`DRM_VRAM_MM_FILE_OPERATIONS` to initialize :c:type:`struct file_operations `; as illustrated below.h](hzTo initialize the VRAM helper library call drmm_vram_helper_init(). The function allocates and initializes an instance of }(hj;hhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hj;h]hstruct drm_vram_mm}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_vram_mmuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chK-hj;ubh in }(hj;hhhNhNubh)}(h(:c:type:`struct drm_device `h]j)}(hj;h]hstruct drm_device}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhj;hK-hj;ubh.vram_mm . Use }(hj;hhhNhNubh)}(h:c:type:`DRM_GEM_VRAM_DRIVER`h]j)}(hj;h]hDRM_GEM_VRAM_DRIVER}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_GEM_VRAM_DRIVERu2h1hhj;hK-hj;ubh to initialize }(hj;hhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hj<h]hstruct drm_driver}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhj;hK-hj;ubh and }(hj;hhhNhNubh)}(h%:c:type:`DRM_VRAM_MM_FILE_OPERATIONS`h]j)}(hj#<h]hDRM_VRAM_MM_FILE_OPERATIONS}(hj%<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj!<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_VRAM_MM_FILE_OPERATIONSuh1hhj;hK-hj;ubh to initialize }hj;sbh)}(h2:c:type:`struct file_operations `h]j)}(hjF<h]hstruct file_operations}(hjH<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjD<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3file_operationsuh1hhj;hK-hj;ubh; as illustrated below.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hK-hj;hhubjT)}(hXstruct file_operations fops ={ .owner = THIS_MODULE, DRM_VRAM_MM_FILE_OPERATION }; struct drm_driver drv = { .driver_feature = DRM_ ... , .fops = &fops, DRM_GEM_VRAM_DRIVER }; int init_drm_driver() { struct drm_device *dev; uint64_t vram_base; unsigned long vram_size; int ret; // setup device, vram base and size // ... ret = drmm_vram_helper_init(dev, vram_base, vram_size); if (ret) return ret; return 0; }h]hXstruct file_operations fops ={ .owner = THIS_MODULE, DRM_VRAM_MM_FILE_OPERATION }; struct drm_driver drv = { .driver_feature = DRM_ ... , .fops = &fops, DRM_GEM_VRAM_DRIVER }; int init_drm_driver() { struct drm_device *dev; uint64_t vram_base; unsigned long vram_size; int ret; // setup device, vram base and size // ... ret = drmm_vram_helper_init(dev, vram_base, vram_size); if (ret) return ret; return 0; }}hjm<sbah}(h]h ]h"]h$]h&]jjj}j}jj}}uh1jSha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chK3hj;hhubh)}(hXDThis creates an instance of :c:type:`struct drm_vram_mm `, exports DRM userspace interfaces for GEM buffer management and initializes file operations to allow for accessing created GEM buffers. With this setup, the DRM driver manages an area of video RAM with VRAM MM and provides GEM VRAM objects to userspace.h](hThis creates an instance of }(hj}<hhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hj<h]hstruct drm_vram_mm}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_vram_mmuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chKOhj}<ubh, exports DRM userspace interfaces for GEM buffer management and initializes file operations to allow for accessing created GEM buffers. With this setup, the DRM driver manages an area of video RAM with VRAM MM and provides GEM VRAM objects to userspace.}(hj}<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hKOhj;hhubh)}(hYou don't have to clean up the instance of VRAM MM. drmm_vram_helper_init() is a managed interface that installs a clean-up handler to run during the DRM device's release.h]hYou don’t have to clean up the instance of VRAM MM. drmm_vram_helper_init() is a managed interface that installs a clean-up handler to run during the DRM device’s release.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chKUhj;hhubh)}(hX9For drawing or scanout operations, rsp. buffer objects have to be pinned in video RAM. Call drm_gem_vram_pin() with :c:type:`DRM_GEM_VRAM_PL_FLAG_VRAM` or :c:type:`DRM_GEM_VRAM_PL_FLAG_SYSTEM` to pin a buffer object in video RAM or system memory. Call drm_gem_vram_unpin() to release the pinned object afterwards.h](htFor drawing or scanout operations, rsp. buffer objects have to be pinned in video RAM. Call drm_gem_vram_pin() with }(hj<hhhNhNubh)}(h#:c:type:`DRM_GEM_VRAM_PL_FLAG_VRAM`h]j)}(hj<h]hDRM_GEM_VRAM_PL_FLAG_VRAM}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_GEM_VRAM_PL_FLAG_VRAMuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chKYhj<ubh or }(hj<hhhNhNubh)}(h%:c:type:`DRM_GEM_VRAM_PL_FLAG_SYSTEM`h]j)}(hj<h]hDRM_GEM_VRAM_PL_FLAG_SYSTEM}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_GEM_VRAM_PL_FLAG_SYSTEMuh1hhj<hKYhj<ubhy to pin a buffer object in video RAM or system memory. Call drm_gem_vram_unpin() to release the pinned object afterwards.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hKYhj;hhubh)}(hXDA buffer object that is pinned in video RAM has a fixed address within that memory region. Call drm_gem_vram_offset() to retrieve this value. Typically it's used to program the hardware's scanout engine for framebuffers, set the cursor overlay's image for a mouse cursor, or use it as input to the hardware's drawing engine.h]hXLA buffer object that is pinned in video RAM has a fixed address within that memory region. Call drm_gem_vram_offset() to retrieve this value. Typically it’s used to program the hardware’s scanout engine for framebuffers, set the cursor overlay’s image for a mouse cursor, or use it as input to the hardware’s drawing engine.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chK^hj;hhubh)}(hTo access a buffer object's memory from the DRM driver, call drm_gem_vram_vmap(). It maps the buffer into kernel address space and returns the memory address. Use drm_gem_vram_vunmap() to release the mapping.h]hTo access a buffer object’s memory from the DRM driver, call drm_gem_vram_vmap(). It maps the buffer into kernel address space and returns the memory address. Use drm_gem_vram_vunmap() to release the mapping.}(hj"=hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:385: ./drivers/gpu/drm/drm_gem_vram_helper.chKdhj;hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_vram_object (C struct)c.drm_gem_vram_objecthNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hdrm_gem_vram_objecth]j>)}(hstruct drm_gem_vram_objecth](jD)}(hjh]hstruct}(hjJ=hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjF=hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKubjV)}(h h]h }(hjX=hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjF=hhhjW=hKubjg)}(hdrm_gem_vram_objecth]jm)}(hjD=h]hdrm_gem_vram_object}(hjj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjf=ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjF=hhhjW=hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjB=hhhjW=hKubah}(h]j==ah ](jjeh"]h$]h&]jj)jhuh1j7hjW=hKhj?=hhubj)}(hhh]h)}(hGEM object backed by VRAMh]hGEM object backed by VRAM}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK hj=hhubah}(h]h ]h"]h$]h&]uh1jhj?=hhhjW=hKubeh}(h]h ](jstructeh"]h$]h&]jjjj=jj=jjjuh1j2hhhj;hNhNubj)}(hXG**Definition**:: struct drm_gem_vram_object { struct ttm_buffer_object bo; struct iosys_map map; unsigned int vmap_use_count; struct ttm_placement placement; struct ttm_place placements[2]; }; **Members** ``bo`` TTM buffer object ``map`` Mapping information for **bo** ``vmap_use_count`` Reference count on the virtual address. The address are un-mapped when the count reaches zero. ``placement`` TTM placement information. Supported placements are ``TTM_PL_VRAM`` and ``TTM_PL_SYSTEM`` ``placements`` TTM placement information.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh:}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK$hj=ubjT)}(hstruct drm_gem_vram_object { struct ttm_buffer_object bo; struct iosys_map map; unsigned int vmap_use_count; struct ttm_placement placement; struct ttm_place placements[2]; };h]hstruct drm_gem_vram_object { struct ttm_buffer_object bo; struct iosys_map map; unsigned int vmap_use_count; struct ttm_placement placement; struct ttm_place placements[2]; };}hj=sbah}(h]h ]h"]h$]h&]jjuh1jSh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK&hj=ubh)}(h **Members**h]j)}(hj=h]hMembers}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK.hj=ubj)}(hhh](j)}(h``bo`` TTM buffer object h](j)}(h``bo``h]j)}(hj=h]hbo}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK"hj=ubj )}(hhh]h)}(hTTM buffer objecth]hTTM buffer object}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hK"hj>ubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1jhj>hK"hj=ubj)}(h'``map`` Mapping information for **bo** h](j)}(h``map``h]j)}(hj2>h]hmap}(hj4>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0>ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK#hj,>ubj )}(hhh]h)}(hMapping information for **bo**h](hMapping information for }(hjK>hhhNhNubj)}(h**bo**h]hbo}(hjS>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK>ubeh}(h]h ]h"]h$]h&]uh1hhjG>hK#hjH>ubah}(h]h ]h"]h$]h&]uh1j hj,>ubeh}(h]h ]h"]h$]h&]uh1jhjG>hK#hj=ubj)}(hr``vmap_use_count`` Reference count on the virtual address. The address are un-mapped when the count reaches zero. h](j)}(h``vmap_use_count``h]j)}(hjy>h]hvmap_use_count}(hj{>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw>ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK:hjs>ubj )}(hhh]h)}(h^Reference count on the virtual address. The address are un-mapped when the count reaches zero.h]h^Reference count on the virtual address. The address are un-mapped when the count reaches zero.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK9hj>ubah}(h]h ]h"]h$]h&]uh1j hjs>ubeh}(h]h ]h"]h$]h&]uh1jhj>hK:hj=ubj)}(hh``placement`` TTM placement information. Supported placements are ``TTM_PL_VRAM`` and ``TTM_PL_SYSTEM`` h](j)}(h ``placement``h]j)}(hj>h]h placement}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK%hj>ubj )}(hhh]h)}(hYTTM placement information. Supported placements are ``TTM_PL_VRAM`` and ``TTM_PL_SYSTEM``h](h4TTM placement information. Supported placements are }(hj>hhhNhNubj)}(h``TTM_PL_VRAM``h]h TTM_PL_VRAM}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh and }(hj>hhhNhNubj)}(h``TTM_PL_SYSTEM``h]h TTM_PL_SYSTEM}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK$hj>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hK%hj=ubj)}(h)``placements`` TTM placement information.h](j)}(h``placements``h]j)}(hj ?h]h placements}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ?ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK%hj?ubj )}(hhh]h)}(hTTM placement information.h]hTTM placement information.}(hj&?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK&hj#?ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1jhj"?hK%hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubh)}(h**Description**h]j)}(hjP?h]h Description}(hjR?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN?ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK)hj;hhubh)}(hThe type struct drm_gem_vram_object represents a GEM object that is backed by VRAM. It can be used for simple framebuffer devices with dedicated memory. The buffer object can be evicted to system memory if video memory becomes scarce.h]hThe type struct drm_gem_vram_object represents a GEM object that is backed by VRAM. It can be used for simple framebuffer devices with dedicated memory. The buffer object can be evicted to system memory if video memory becomes scarce.}(hjf?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK'hj;hhubh)}(hXVGEM VRAM objects perform reference counting for pin and mapping operations. So a buffer object that has been pinned N times with drm_gem_vram_pin() must be unpinned N times with drm_gem_vram_unpin(). The same applies to pairs of drm_gem_vram_kmap() and drm_gem_vram_kunmap(), as well as pairs of drm_gem_vram_vmap() and drm_gem_vram_vunmap().h]hXVGEM VRAM objects perform reference counting for pin and mapping operations. So a buffer object that has been pinned N times with drm_gem_vram_pin() must be unpinned N times with drm_gem_vram_unpin(). The same applies to pairs of drm_gem_vram_kmap() and drm_gem_vram_kunmap(), as well as pairs of drm_gem_vram_vmap() and drm_gem_vram_vunmap().}(hju?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhK,hj;hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_vram_of_bo (C function)c.drm_gem_vram_of_bohNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hNstruct drm_gem_vram_object * drm_gem_vram_of_bo (struct ttm_buffer_object *bo)h]j>)}(hLstruct drm_gem_vram_object *drm_gem_vram_of_bo(struct ttm_buffer_object *bo)h](jD)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj?hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKJubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?hhhj?hKJubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j)}jdrm_gem_vram_of_bosbc.drm_gem_vram_of_boasbuh1hhj?hhhj?hKJubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?hhhj?hKJubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj?hKJubjg)}(hdrm_gem_vram_of_boh]jm)}(hj?h]hdrm_gem_vram_of_bo}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj?hhhj?hKJubj)}(h(struct ttm_buffer_object *bo)h]j)}(hstruct ttm_buffer_object *boh](jD)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj@ubjV)}(h h]h }(hj$@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubh)}(hhh]jm)}(httm_buffer_objecth]httm_buffer_object}(hj5@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7@modnameN classnameNjj)}j]j?c.drm_gem_vram_of_boasbuh1hhj@ubjV)}(h h]h }(hjS@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubj)}(hjh]h*}(hja@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjm)}(hboh]hbo}(hjn@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@ubah}(h]h ]h"]h$]h&]jjuh1jhj?hhhj?hKJubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj?hhhj?hKJubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j7hj?hKJhj?hhubj)}(hhh]h)}(hfReturns the container of type :c:type:`struct drm_gem_vram_object ` for field bo.h](hReturns the container of type }(hj@hhhNhNubh)}(h::c:type:`struct drm_gem_vram_object `h]j)}(hj@h]hstruct drm_gem_vram_object}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j?c.drm_gem_vram_of_boasbj3drm_gem_vram_objectuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhj@ubh for field bo.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKEhj@hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hKJubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1j2hhhj;hNhNubj)}(hu**Parameters** ``struct ttm_buffer_object *bo`` the VRAM buffer object **Return** The containing GEM VRAM objecth](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKIhj@ubj)}(hhh]j)}(h8``struct ttm_buffer_object *bo`` the VRAM buffer object h](j)}(h ``struct ttm_buffer_object *bo``h]j)}(hjAh]hstruct ttm_buffer_object *bo}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKGhj@ubj )}(hhh]h)}(hthe VRAM buffer objecth]hthe VRAM buffer object}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKGhjAubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhKGhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h **Return**h]j)}(hj=Ah]hReturn}(hj?AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Aubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKIhj@ubh)}(hThe containing GEM VRAM objecth]hThe containing GEM VRAM object}(hjSAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKHhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_vram_of_gem (C function)c.drm_gem_vram_of_gemhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hMstruct drm_gem_vram_object * drm_gem_vram_of_gem (struct drm_gem_object *gem)h]j>)}(hKstruct drm_gem_vram_object *drm_gem_vram_of_gem(struct drm_gem_object *gem)h](jD)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj~Ahhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKVubjV)}(h h]h }(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~AhhhjAhKVubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hjAhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j)}jdrm_gem_vram_of_gemsbc.drm_gem_vram_of_gemasbuh1hhj~AhhhjAhKVubjV)}(h h]h }(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~AhhhjAhKVubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~AhhhjAhKVubjg)}(hdrm_gem_vram_of_gemh]jm)}(hjAh]hdrm_gem_vram_of_gem}(hjAhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj~AhhhjAhKVubj)}(h(struct drm_gem_object *gem)h]j)}(hstruct drm_gem_object *gemh](jD)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjAubjV)}(h h]h }(hj BhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jAc.drm_gem_vram_of_gemasbuh1hhjAubjV)}(h h]h }(hj8BhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAubj)}(hjh]h*}(hjFBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjm)}(hgemh]hgem}(hjSBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubah}(h]h ]h"]h$]h&]jjuh1jhj~AhhhjAhKVubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjzAhhhjAhKVubah}(h]juAah ](jjeh"]h$]h&]jj)jhuh1j7hjAhKVhjwAhhubj)}(hhh]h)}(hgReturns the container of type :c:type:`struct drm_gem_vram_object ` for field gem.h](hReturns the container of type }(hj}BhhhNhNubh)}(h::c:type:`struct drm_gem_vram_object `h]j)}(hjBh]hstruct drm_gem_vram_object}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jAc.drm_gem_vram_of_gemasbj3drm_gem_vram_objectuh1hhj@hKhj}Bubh for field gem.}(hj}BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKQhjzBhhubah}(h]h ]h"]h$]h&]uh1jhjwAhhhjAhKVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1j2hhhj;hNhNubj)}(hk**Parameters** ``struct drm_gem_object *gem`` the GEM object **Return** The containing GEM VRAM objecth](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKUhjBubj)}(hhh]j)}(h.``struct drm_gem_object *gem`` the GEM object h](j)}(h``struct drm_gem_object *gem``h]j)}(hjBh]hstruct drm_gem_object *gem}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKShjBubj )}(hhh]h)}(hthe GEM objecth]hthe GEM object}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKShjBubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jhjBhKShjBubah}(h]h ]h"]h$]h&]uh1jhjBubh)}(h **Return**h]j)}(hj!Ch]hReturn}(hj#ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKUhjBubh)}(hThe containing GEM VRAM objecth]hThe containing GEM VRAM object}(hj7ChhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKThjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)DRM_GEM_VRAM_PLANE_HELPER_FUNCS (C macro)!c.DRM_GEM_VRAM_PLANE_HELPER_FUNCShNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hDRM_GEM_VRAM_PLANE_HELPER_FUNCSh]j>)}(hDRM_GEM_VRAM_PLANE_HELPER_FUNCSh]jg)}(hDRM_GEM_VRAM_PLANE_HELPER_FUNCSh]jm)}(hj`Ch]hDRM_GEM_VRAM_PLANE_HELPER_FUNCS}(hjjChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfCubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjbChhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj^Chhhj}ChKubah}(h]jYCah ](jjeh"]h$]h&]jj)jhuh1j7hj}ChKhj[Chhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj[Chhhj}ChKubeh}(h]h ](jmacroeh"]h$]h&]jjjjCjjCjjjuh1j2hhhj;hNhNubh)}(h#``DRM_GEM_VRAM_PLANE_HELPER_FUNCS``h]j)}(hjCh]hDRM_GEM_VRAM_PLANE_HELPER_FUNCS}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhj;hhubj@-)}(h Initializes struct drm_plane_helper_funcs for VRAM handling **Description** Drivers may use GEM BOs as VRAM helpers for the framebuffer memory. This macro initializes struct drm_plane_helper_funcs to use the respective helper functions. h](j@-)}(h)}(hDRM_GEM_VRAM_DRIVERh]jg)}(hDRM_GEM_VRAM_DRIVERh]jm)}(hjDh]hDRM_GEM_VRAM_DRIVER}(hjDhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjDhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj Dhhhj,DhKubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1j7hj,DhKhj Dhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj Dhhhj,DhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjEDjjEDjjjuh1j2hhhj;hNhNubh)}(h``DRM_GEM_VRAM_DRIVER``h]j)}(hjKDh]hDRM_GEM_VRAM_DRIVER}(hjMDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIDubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhj;hhubj@-)}(h default callback functions for :c:type:`struct drm_driver ` **Description** Drivers that use VRAM MM and GEM VRAM can use this macro to initialize :c:type:`struct drm_driver ` with default functions. h](j@-)}(hHdefault callback functions for :c:type:`struct drm_driver ` h]h)}(hGdefault callback functions for :c:type:`struct drm_driver `h](hdefault callback functions for }(hjiDhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjsDh]hstruct drm_driver}(hjuDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjqDubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjiDubeh}(h]h ]h"]h$]h&]uh1hhjDhKhjeDubah}(h]h ]h"]h$]h&]uh1j?-hjDhKhjaDubh)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjaDubh)}(hDrivers that use VRAM MM and GEM VRAM can use this macro to initialize :c:type:`struct drm_driver ` with default functions.h](hGDrivers that use VRAM MM and GEM VRAM can use this macro to initialize }(hjDhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjDh]hstruct drm_driver}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjDubh with default functions.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhKhjaDubeh}(h]h ]h"]h$]h&]uh1j?-hjDhKhj;hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_vram_mm (C struct) c.drm_vram_mmhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(h drm_vram_mmh]j>)}(hstruct drm_vram_mmh](jD)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjEhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKubjV)}(h h]h }(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjEhhhjEhKubjg)}(h drm_vram_mmh]jm)}(hjEh]h drm_vram_mm}(hj&EhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"Eubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjEhhhjEhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjDhhhjEhKubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1j7hjEhKhjDhhubj)}(hhh]h)}(hAn instance of VRAM MMh]hAn instance of VRAM MM}(hjHEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjEEhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjEhKubeh}(h]h ](jstructeh"]h$]h&]jjjj`Ejj`Ejjjuh1j2hhhj;hNhNubj)}(hX**Definition**:: struct drm_vram_mm { uint64_t vram_base; size_t vram_size; struct ttm_device bdev; }; **Members** ``vram_base`` Base address of the managed video memory ``vram_size`` Size of the managed video memory in bytes ``bdev`` The TTM BO device.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjlEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhEubh:}(hjhEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjdEubjT)}(hastruct drm_vram_mm { uint64_t vram_base; size_t vram_size; struct ttm_device bdev; };h]hastruct drm_vram_mm { uint64_t vram_base; size_t vram_size; struct ttm_device bdev; };}hjEsbah}(h]h ]h"]h$]h&]jjuh1jSh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjdEubh)}(h **Members**h]j)}(hjEh]hMembers}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjdEubj)}(hhh](j)}(h7``vram_base`` Base address of the managed video memory h](j)}(h ``vram_base``h]j)}(hjEh]h vram_base}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjEubj )}(hhh]h)}(h(Base address of the managed video memoryh]h(Base address of the managed video memory}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjEubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhjEhKhjEubj)}(h8``vram_size`` Size of the managed video memory in bytes h](j)}(h ``vram_size``h]j)}(hjEh]h vram_size}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjEubj )}(hhh]h)}(h)Size of the managed video memory in bytesh]h)Size of the managed video memory in bytes}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKhjFubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhjFhKhjEubj)}(h``bdev`` The TTM BO device.h](j)}(h``bdev``h]j)}(hj'Fh]hbdev}(hj)FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Fubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhj!Fubj )}(hhh]h)}(hThe TTM BO device.h]hThe TTM BO device.}(hj@FhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhj=Fubah}(h]h ]h"]h$]h&]uh1j hj!Fubeh}(h]h ]h"]h$]h&]uh1jhj`.vram_base and :c:type:`struct drm_vram_mm `.vrm_size are managed by VRAM MM, but are available for public read access. Use the field :c:type:`struct drm_vram_mm `.bdev to access the TTM BO device.h](h The fields }(hjFhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hjFh]hstruct drm_vram_mm}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_vram_mmuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjFubh.vram_base and }(hjFhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hjFh]hstruct drm_vram_mm}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_vram_mmuh1hhjFhKhjFubhZ.vrm_size are managed by VRAM MM, but are available for public read access. Use the field }(hjFhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hjFh]hstruct drm_vram_mm}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_vram_mmuh1hhjFhKhjFubh".bdev to access the TTM BO device.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhKhj;hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_vram_mm_of_bdev (C function)c.drm_vram_mm_of_bdevhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hBstruct drm_vram_mm * drm_vram_mm_of_bdev (struct ttm_device *bdev)h]j>)}(h@struct drm_vram_mm *drm_vram_mm_of_bdev(struct ttm_device *bdev)h](jD)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj Ghhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKubjV)}(h h]h }(hjGhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj GhhhjGhKubh)}(hhh]jm)}(h drm_vram_mmh]h drm_vram_mm}(hj0GhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj-Gubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2GmodnameN classnameNjj)}j]j)}jdrm_vram_mm_of_bdevsbc.drm_vram_mm_of_bdevasbuh1hhj GhhhjGhKubjV)}(h h]h }(hjQGhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj GhhhjGhKubj)}(hjh]h*}(hj_GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj GhhhjGhKubjg)}(hdrm_vram_mm_of_bdevh]jm)}(hjNGh]hdrm_vram_mm_of_bdev}(hjpGhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlGubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj GhhhjGhKubj)}(h(struct ttm_device *bdev)h]j)}(hstruct ttm_device *bdevh](jD)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjGubjV)}(h h]h }(hjGhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjGubh)}(hhh]jm)}(h ttm_deviceh]h ttm_device}(hjGhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jLGc.drm_vram_mm_of_bdevasbuh1hhjGubjV)}(h h]h }(hjGhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjm)}(hbdevh]hbdev}(hjGhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubah}(h]h ]h"]h$]h&]jjuh1jhj GhhhjGhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj GhhhjGhKubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1j7hjGhKhjGhhubj)}(hhh]h)}(hVReturns the container of type :c:type:`struct ttm_device ` for field bdev.h](hReturns the container of type }(hj HhhhNhNubh)}(h(:c:type:`struct ttm_device `h]j)}(hjHh]hstruct ttm_device}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jLGc.drm_vram_mm_of_bdevasbj3 ttm_deviceuh1hhj@hKhj Hubh for field bdev.}(hj HhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhj Hhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLHjjLHjjjuh1j2hhhj;hNhNubj)}(h**Parameters** ``struct ttm_device *bdev`` the TTM BO device **Return** The containing instance of :c:type:`struct drm_vram_mm `h](h)}(h**Parameters**h]j)}(hjVHh]h Parameters}(hjXHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTHubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjPHubj)}(hhh]j)}(h.``struct ttm_device *bdev`` the TTM BO device h](j)}(h``struct ttm_device *bdev``h]j)}(hjuHh]hstruct ttm_device *bdev}(hjwHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsHubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjoHubj )}(hhh]h)}(hthe TTM BO deviceh]hthe TTM BO device}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhKhjHubah}(h]h ]h"]h$]h&]uh1j hjoHubeh}(h]h ]h"]h$]h&]uh1jhjHhKhjlHubah}(h]h ]h"]h$]h&]uh1jhjPHubh)}(h **Return**h]j)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjPHubh)}(hEThe containing instance of :c:type:`struct drm_vram_mm `h](hThe containing instance of }(hjHhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hjHh]hstruct drm_vram_mm}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_vram_mmuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:388: ./include/drm/drm_gem_vram_helper.hhKhjHubeh}(h]h ]h"]h$]h&]uh1hhjHhKhjPHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_vram_create (C function)c.drm_gem_vram_createhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hnstruct drm_gem_vram_object * drm_gem_vram_create (struct drm_device *dev, size_t size, unsigned long pg_align)h]j>)}(hlstruct drm_gem_vram_object *drm_gem_vram_create(struct drm_device *dev, size_t size, unsigned long pg_align)h](jD)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjIhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKubjV)}(h h]h }(hj"IhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIhhhj!IhKubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hj3IhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj0Iubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5ImodnameN classnameNjj)}j]j)}jdrm_gem_vram_createsbc.drm_gem_vram_createasbuh1hhjIhhhj!IhKubjV)}(h h]h }(hjTIhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIhhhj!IhKubj)}(hjh]h*}(hjbIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhj!IhKubjg)}(hdrm_gem_vram_createh]jm)}(hjQIh]hdrm_gem_vram_create}(hjsIhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoIubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjIhhhj!IhKubj)}(h=(struct drm_device *dev, size_t size, unsigned long pg_align)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjIubjV)}(h h]h }(hjIhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjIhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]jOIc.drm_gem_vram_createasbuh1hhjIubjV)}(h h]h }(hjIhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjm)}(hdevh]hdev}(hjIhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(h size_t sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hjJhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]jOIc.drm_gem_vram_createasbuh1hhjIubjV)}(h h]h }(hjJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIubjm)}(hsizeh]hsize}(hj-JhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(hunsigned long pg_alignh](jc)}(hunsignedh]hunsigned}(hjFJhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjBJubjV)}(h h]h }(hjTJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBJubjc)}(hlongh]hlong}(hjbJhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjBJubjV)}(h h]h }(hjpJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBJubjm)}(hpg_alignh]hpg_align}(hj~JhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhj!IhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj Ihhhj!IhKubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1j7hj!IhKhj Ihhubj)}(hhh]h)}(h Creates a VRAM-backed GEM objecth]h Creates a VRAM-backed GEM object}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjJhhubah}(h]h ]h"]h$]h&]uh1jhj Ihhhj!IhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1j2hhhj;hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` the DRM device ``size_t size`` the buffer size in bytes ``unsigned long pg_align`` the buffer's alignment in multiples of the page size **Description** GEM objects are allocated by calling struct drm_driver.gem_create_object, if set. Otherwise kzalloc() will be used. Drivers can set their own GEM object functions in struct drm_driver.gem_create_object. If no functions are set, the new GEM object will use the default functions from GEM VRAM helpers. **Return** A new instance of :c:type:`struct drm_gem_vram_object ` on success, or an ERR_PTR()-encoded error code otherwise.h](h)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjJubj)}(hhh](j)}(h*``struct drm_device *dev`` the DRM device h](j)}(h``struct drm_device *dev``h]j)}(hjJh]hstruct drm_device *dev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjJubj )}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjJubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjJhKhjJubj)}(h)``size_t size`` the buffer size in bytes h](j)}(h``size_t size``h]j)}(hj"Kh]h size_t size}(hj$KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Kubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjKubj )}(hhh]h)}(hthe buffer size in bytesh]hthe buffer size in bytes}(hj;KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7KhKhj8Kubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jhj7KhKhjJubj)}(hP``unsigned long pg_align`` the buffer's alignment in multiples of the page size h](j)}(h``unsigned long pg_align``h]j)}(hj[Kh]hunsigned long pg_align}(hj]KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYKubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjUKubj )}(hhh]h)}(h4the buffer's alignment in multiples of the page sizeh]h6the buffer’s alignment in multiples of the page size}(hjtKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpKhKhjqKubah}(h]h ]h"]h$]h&]uh1j hjUKubeh}(h]h ]h"]h$]h&]uh1jhjpKhKhjJubeh}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjJubh)}(hX,GEM objects are allocated by calling struct drm_driver.gem_create_object, if set. Otherwise kzalloc() will be used. Drivers can set their own GEM object functions in struct drm_driver.gem_create_object. If no functions are set, the new GEM object will use the default functions from GEM VRAM helpers.h]hX,GEM objects are allocated by calling struct drm_driver.gem_create_object, if set. Otherwise kzalloc() will be used. Drivers can set their own GEM object functions in struct drm_driver.gem_create_object. If no functions are set, the new GEM object will use the default functions from GEM VRAM helpers.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjJubh)}(h **Return**h]j)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjJubh)}(hA new instance of :c:type:`struct drm_gem_vram_object ` on success, or an ERR_PTR()-encoded error code otherwise.h](hA new instance of }(hjKhhhNhNubh)}(h::c:type:`struct drm_gem_vram_object `h]j)}(hjKh]hstruct drm_gem_vram_object}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_vram_objectuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjKubh: on success, or an ERR_PTR()-encoded error code otherwise.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhKhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_vram_put (C function)c.drm_gem_vram_puthNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(h7void drm_gem_vram_put (struct drm_gem_vram_object *gbo)h]j>)}(h6void drm_gem_vram_put(struct drm_gem_vram_object *gbo)h](jc)}(hvoidh]hvoid}(hj%LhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj!Lhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKubjV)}(h h]h }(hj4LhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!Lhhhj3LhKubjg)}(hdrm_gem_vram_puth]jm)}(hdrm_gem_vram_puth]hdrm_gem_vram_put}(hjFLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBLubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj!Lhhhj3LhKubj)}(h!(struct drm_gem_vram_object *gbo)h]j)}(hstruct drm_gem_vram_object *gboh](jD)}(hjh]hstruct}(hjbLhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj^LubjV)}(h h]h }(hjoLhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^Lubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hjLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}Lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]j)}jjHLsbc.drm_gem_vram_putasbuh1hhj^LubjV)}(h h]h }(hjLhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^Lubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Lubjm)}(hgboh]hgbo}(hjLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^Lubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZLubah}(h]h ]h"]h$]h&]jjuh1jhj!Lhhhj3LhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjLhhhj3LhKubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1j7hj3LhKhjLhhubj)}(hhh]h)}(h0Releases a reference to a VRAM-backed GEM objecth]h0Releases a reference to a VRAM-backed GEM object}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjLhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhj3LhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1j2hhhj;hNhNubj)}(h**Parameters** ``struct drm_gem_vram_object *gbo`` the GEM VRAM object **Description** See ttm_bo_put() for more information.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjMubj)}(hhh]j)}(h8``struct drm_gem_vram_object *gbo`` the GEM VRAM object h](j)}(h#``struct drm_gem_vram_object *gbo``h]j)}(hj&Mh]hstruct drm_gem_vram_object *gbo}(hj(MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Mubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj Mubj )}(hhh]h)}(hthe GEM VRAM objecth]hthe GEM VRAM object}(hj?MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;MhKhj)}(h8s64 drm_gem_vram_offset(struct drm_gem_vram_object *gbo)h](h)}(hhh]jm)}(hs64h]hs64}(hjMhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j)}jdrm_gem_vram_offsetsbc.drm_gem_vram_offsetasbuh1hhjMhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMhhhjMhMubjg)}(hdrm_gem_vram_offseth]jm)}(hjMh]hdrm_gem_vram_offset}(hjMhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjMhhhjMhMubj)}(h!(struct drm_gem_vram_object *gbo)h]j)}(hstruct drm_gem_vram_object *gboh](jD)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjMubjV)}(h h]h }(hjNhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hjNhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]jMc.drm_gem_vram_offsetasbuh1hhjMubjV)}(h h]h }(hj4NhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMubj)}(hjh]h*}(hjBNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjm)}(hgboh]hgbo}(hjONhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubah}(h]h ]h"]h$]h&]jjuh1jhjMhhhjMhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjMhhhjMhMubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1j7hjMhMhjMhhubj)}(hhh]h)}(h2Returns a GEM VRAM object's offset in video memoryh]h4Returns a GEM VRAM object’s offset in video memory}(hjyNhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjvNhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjMhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1j2hhhj;hNhNubj)}(hXI**Parameters** ``struct drm_gem_vram_object *gbo`` the GEM VRAM object **Description** This function returns the buffer object's offset in the device's video memory. The buffer object has to be pinned to ``TTM_PL_VRAM``. **Return** The buffer object's offset in video memory on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjNubj)}(hhh]j)}(h8``struct drm_gem_vram_object *gbo`` the GEM VRAM object h](j)}(h#``struct drm_gem_vram_object *gbo``h]j)}(hjNh]hstruct drm_gem_vram_object *gbo}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjNubj )}(hhh]h)}(hthe GEM VRAM objecth]hthe GEM VRAM object}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1j hjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubh)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjNubh)}(hThis function returns the buffer object's offset in the device's video memory. The buffer object has to be pinned to ``TTM_PL_VRAM``.h](hyThis function returns the buffer object’s offset in the device’s video memory. The buffer object has to be pinned to }(hj OhhhNhNubj)}(h``TTM_PL_VRAM``h]h TTM_PL_VRAM}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Oubh.}(hj OhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjNubh)}(h **Return**h]j)}(hj.Oh]hReturn}(hj0OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Oubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM hjNubh)}(hZThe buffer object's offset in video memory on success, or a negative errno code otherwise.h]h\The buffer object’s offset in video memory on success, or a negative errno code otherwise.}(hjDOhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_vram_pin (C function)c.drm_gem_vram_pinhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hMint drm_gem_vram_pin (struct drm_gem_vram_object *gbo, unsigned long pl_flag)h]j>)}(hLint drm_gem_vram_pin(struct drm_gem_vram_object *gbo, unsigned long pl_flag)h](jc)}(hinth]hint}(hjsOhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjoOhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMEubjV)}(h h]h }(hjOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoOhhhjOhMEubjg)}(hdrm_gem_vram_pinh]jm)}(hdrm_gem_vram_pinh]hdrm_gem_vram_pin}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjoOhhhjOhMEubj)}(h8(struct drm_gem_vram_object *gbo, unsigned long pl_flag)h](j)}(hstruct drm_gem_vram_object *gboh](jD)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjOubjV)}(h h]h }(hjOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjOubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j)}jjOsbc.drm_gem_vram_pinasbuh1hhjOubjV)}(h h]h }(hjOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjOubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjm)}(hgboh]hgbo}(hj PhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hunsigned long pl_flagh](jc)}(hunsignedh]hunsigned}(hj"PhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjPubjV)}(h h]h }(hj0PhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPubjc)}(hlongh]hlong}(hj>PhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjPubjV)}(h h]h }(hjLPhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPubjm)}(hpl_flagh]hpl_flag}(hjZPhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubeh}(h]h ]h"]h$]h&]jjuh1jhjoOhhhjOhMEubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjkOhhhjOhMEubah}(h]jfOah ](jjeh"]h$]h&]jj)jhuh1j7hjOhMEhjhOhhubj)}(hhh]h)}(h#Pins a GEM VRAM object in a region.h]h#Pins a GEM VRAM object in a region.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM/hjPhhubah}(h]h ]h"]h$]h&]uh1jhjhOhhhjOhMEubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1j2hhhj;hNhNubj)}(hX**Parameters** ``struct drm_gem_vram_object *gbo`` the GEM VRAM object ``unsigned long pl_flag`` a bitmask of possible memory regions **Description** Pinning a buffer object ensures that it is not evicted from a memory region. A pinned buffer object has to be unpinned before it can be pinned to another region. If the pl_flag argument is 0, the buffer is pinned at its current location (video RAM or system memory). Small buffer objects, such as cursor images, can lead to memory fragmentation if they are pinned in the middle of video RAM. This is especially a problem on devices with only a small amount of video RAM. Fragmentation can prevent the primary framebuffer from fitting in, even though there's enough memory overall. The modifier DRM_GEM_VRAM_PL_FLAG_TOPDOWN marks the buffer object to be pinned at the high end of the memory region to avoid fragmentation. **Return** 0 on success, or a negative error code otherwise.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM3hjPubj)}(hhh](j)}(h8``struct drm_gem_vram_object *gbo`` the GEM VRAM object h](j)}(h#``struct drm_gem_vram_object *gbo``h]j)}(hjPh]hstruct drm_gem_vram_object *gbo}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM0hjPubj )}(hhh]h)}(hthe GEM VRAM objecth]hthe GEM VRAM object}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM0hjPubah}(h]h ]h"]h$]h&]uh1j hjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM0hjPubj)}(h?``unsigned long pl_flag`` a bitmask of possible memory regions h](j)}(h``unsigned long pl_flag``h]j)}(hjPh]hunsigned long pl_flag}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM1hjPubj )}(hhh]h)}(h$a bitmask of possible memory regionsh]h$a bitmask of possible memory regions}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM1hjQubah}(h]h ]h"]h$]h&]uh1j hjPubeh}(h]h ]h"]h$]h&]uh1jhjQhM1hjPubeh}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j)}(hj9Qh]h Description}(hj;QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Qubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM3hjPubh)}(hX Pinning a buffer object ensures that it is not evicted from a memory region. A pinned buffer object has to be unpinned before it can be pinned to another region. If the pl_flag argument is 0, the buffer is pinned at its current location (video RAM or system memory).h]hX Pinning a buffer object ensures that it is not evicted from a memory region. A pinned buffer object has to be unpinned before it can be pinned to another region. If the pl_flag argument is 0, the buffer is pinned at its current location (video RAM or system memory).}(hjOQhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM3hjPubh)}(hXSmall buffer objects, such as cursor images, can lead to memory fragmentation if they are pinned in the middle of video RAM. This is especially a problem on devices with only a small amount of video RAM. Fragmentation can prevent the primary framebuffer from fitting in, even though there's enough memory overall. The modifier DRM_GEM_VRAM_PL_FLAG_TOPDOWN marks the buffer object to be pinned at the high end of the memory region to avoid fragmentation.h]hXSmall buffer objects, such as cursor images, can lead to memory fragmentation if they are pinned in the middle of video RAM. This is especially a problem on devices with only a small amount of video RAM. Fragmentation can prevent the primary framebuffer from fitting in, even though there’s enough memory overall. The modifier DRM_GEM_VRAM_PL_FLAG_TOPDOWN marks the buffer object to be pinned at the high end of the memory region to avoid fragmentation.}(hj^QhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM9hjPubh)}(h **Return**h]j)}(hjoQh]hReturn}(hjqQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmQubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMAhjPubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMAhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_vram_unpin (C function)c.drm_gem_vram_unpinhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(h8int drm_gem_vram_unpin (struct drm_gem_vram_object *gbo)h]j>)}(h7int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo)h](jc)}(hinth]hint}(hjQhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjQhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMbubjV)}(h h]h }(hjQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQhhhjQhMbubjg)}(hdrm_gem_vram_unpinh]jm)}(hdrm_gem_vram_unpinh]hdrm_gem_vram_unpin}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjQhhhjQhMbubj)}(h!(struct drm_gem_vram_object *gbo)h]j)}(hstruct drm_gem_vram_object *gboh](jD)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjQubjV)}(h h]h }(hjQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j)}jjQsbc.drm_gem_vram_unpinasbuh1hhjQubjV)}(h h]h }(hj/RhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQubj)}(hjh]h*}(hj=RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjm)}(hgboh]hgbo}(hjJRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubah}(h]h ]h"]h$]h&]jjuh1jhjQhhhjQhMbubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjQhhhjQhMbubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1j7hjQhMbhjQhhubj)}(hhh]h)}(hUnpins a GEM VRAM objecth]hUnpins a GEM VRAM object}(hjtRhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM[hjqRhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjQhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1j2hhhj;hNhNubj)}(h**Parameters** ``struct drm_gem_vram_object *gbo`` the GEM VRAM object **Return** 0 on success, or a negative error code otherwise.h](h)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM_hjRubj)}(hhh]j)}(h8``struct drm_gem_vram_object *gbo`` the GEM VRAM object h](j)}(h#``struct drm_gem_vram_object *gbo``h]j)}(hjRh]hstruct drm_gem_vram_object *gbo}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM\hjRubj )}(hhh]h)}(hthe GEM VRAM objecth]hthe GEM VRAM object}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhM\hjRubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM\hjRubah}(h]h ]h"]h$]h&]uh1jhjRubh)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM^hjRubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM^hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_vram_vmap (C function)c.drm_gem_vram_vmaphNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hNint drm_gem_vram_vmap (struct drm_gem_vram_object *gbo, struct iosys_map *map)h]j>)}(hMint drm_gem_vram_vmap(struct drm_gem_vram_object *gbo, struct iosys_map *map)h](jc)}(hinth]hint}(hj5ShhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj1Shhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMubjV)}(h h]h }(hjDShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1ShhhjCShMubjg)}(hdrm_gem_vram_vmaph]jm)}(hdrm_gem_vram_vmaph]hdrm_gem_vram_vmap}(hjVShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRSubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj1ShhhjCShMubj)}(h8(struct drm_gem_vram_object *gbo, struct iosys_map *map)h](j)}(hstruct drm_gem_vram_object *gboh](jD)}(hjh]hstruct}(hjrShhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjnSubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnSubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j)}jjXSsbc.drm_gem_vram_vmapasbuh1hhjnSubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnSubjm)}(hgboh]hgbo}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjnSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjSubj)}(hstruct iosys_map *maph](jD)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjSubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jSc.drm_gem_vram_vmapasbuh1hhjSubjV)}(h h]h }(hj ThhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubj)}(hjh]h*}(hj.ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjm)}(hmaph]hmap}(hj;ThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjSubeh}(h]h ]h"]h$]h&]jjuh1jhj1ShhhjCShMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj-ShhhjCShMubah}(h]j(Sah ](jjeh"]h$]h&]jj)jhuh1j7hjCShMhj*Shhubj)}(hhh]h)}(h9Pins and maps a GEM VRAM object into kernel address spaceh]h9Pins and maps a GEM VRAM object into kernel address space}(hjeThhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMrhjbThhubah}(h]h ]h"]h$]h&]uh1jhj*ShhhjCShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}Tjj}Tjjjuh1j2hhhj;hNhNubj)}(hXL**Parameters** ``struct drm_gem_vram_object *gbo`` The GEM VRAM object to map ``struct iosys_map *map`` Returns the kernel virtual address of the VRAM GEM object's backing store. **Description** The vmap function pins a GEM VRAM object to its current location, either system or video memory, and maps its buffer into kernel address space. As pinned object cannot be relocated, you should avoid pinning objects permanently. Call drm_gem_vram_vunmap() with the returned address to unmap and unpin the GEM VRAM object. **Return** 0 on success, or a negative error code otherwise.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMvhjTubj)}(hhh](j)}(h?``struct drm_gem_vram_object *gbo`` The GEM VRAM object to map h](j)}(h#``struct drm_gem_vram_object *gbo``h]j)}(hjTh]hstruct drm_gem_vram_object *gbo}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMthjTubj )}(hhh]h)}(hThe GEM VRAM object to maph]hThe GEM VRAM object to map}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMthjTubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjThMthjTubj)}(he``struct iosys_map *map`` Returns the kernel virtual address of the VRAM GEM object's backing store. h](j)}(h``struct iosys_map *map``h]j)}(hjTh]hstruct iosys_map *map}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMvhjTubj )}(hhh]h)}(hJReturns the kernel virtual address of the VRAM GEM object's backing store.h]hLReturns the kernel virtual address of the VRAM GEM object’s backing store.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMuhjTubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjThMvhjTubeh}(h]h ]h"]h$]h&]uh1jhjTubh)}(h**Description**h]j)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMxhjTubh)}(hX@The vmap function pins a GEM VRAM object to its current location, either system or video memory, and maps its buffer into kernel address space. As pinned object cannot be relocated, you should avoid pinning objects permanently. Call drm_gem_vram_vunmap() with the returned address to unmap and unpin the GEM VRAM object.h]hX@The vmap function pins a GEM VRAM object to its current location, either system or video memory, and maps its buffer into kernel address space. As pinned object cannot be relocated, you should avoid pinning objects permanently. Call drm_gem_vram_vunmap() with the returned address to unmap and unpin the GEM VRAM object.}(hj1UhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMxhjTubh)}(h **Return**h]j)}(hjBUh]hReturn}(hjDUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Uubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM~hjTubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hjXUhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM~hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_vram_vunmap (C function)c.drm_gem_vram_vunmaphNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hQvoid drm_gem_vram_vunmap (struct drm_gem_vram_object *gbo, struct iosys_map *map)h]j>)}(hPvoid drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo, struct iosys_map *map)h](jc)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjUhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMubjV)}(h h]h }(hjUhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUhhhjUhMubjg)}(hdrm_gem_vram_vunmaph]jm)}(hdrm_gem_vram_vunmaph]hdrm_gem_vram_vunmap}(hjUhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjUhhhjUhMubj)}(h8(struct drm_gem_vram_object *gbo, struct iosys_map *map)h](j)}(hstruct drm_gem_vram_object *gboh](jD)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjUubjV)}(h h]h }(hjUhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUubh)}(hhh]jm)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hjUhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]j)}jjUsbc.drm_gem_vram_vunmapasbuh1hhjUubjV)}(h h]h }(hjVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjm)}(hgboh]hgbo}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hstruct iosys_map *maph](jD)}(hjh]hstruct}(hj6VhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj2VubjV)}(h h]h }(hjCVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2Vubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjTVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVVmodnameN classnameNjj)}j]jUc.drm_gem_vram_vunmapasbuh1hhj2VubjV)}(h h]h }(hjrVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2Vubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Vubjm)}(hmaph]hmap}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2Vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjUhhhjUhMubah}(h]jzUah ](jjeh"]h$]h&]jj)jhuh1j7hjUhMhj|Uhhubj)}(hhh]h)}(h#Unmaps and unpins a GEM VRAM objecth]h#Unmaps and unpins a GEM VRAM object}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhj|UhhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1j2hhhj;hNhNubj)}(hXF**Parameters** ``struct drm_gem_vram_object *gbo`` The GEM VRAM object to unmap ``struct iosys_map *map`` Kernel virtual address where the VRAM GEM object was mapped **Description** A call to drm_gem_vram_vunmap() unmaps and unpins a GEM VRAM buffer. See the documentation for drm_gem_vram_vmap() for more information.h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjVubj)}(hhh](j)}(hA``struct drm_gem_vram_object *gbo`` The GEM VRAM object to unmap h](j)}(h#``struct drm_gem_vram_object *gbo``h]j)}(hjVh]hstruct drm_gem_vram_object *gbo}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjVubj )}(hhh]h)}(hThe GEM VRAM object to unmaph]hThe GEM VRAM object to unmap}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj WhMhjWubah}(h]h ]h"]h$]h&]uh1j hjVubeh}(h]h ]h"]h$]h&]uh1jhj WhMhjVubj)}(hV``struct iosys_map *map`` Kernel virtual address where the VRAM GEM object was mapped h](j)}(h``struct iosys_map *map``h]j)}(hj1Wh]hstruct iosys_map *map}(hj3WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Wubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj+Wubj )}(hhh]h)}(h;Kernel virtual address where the VRAM GEM object was mappedh]h;Kernel virtual address where the VRAM GEM object was mapped}(hjJWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFWhMhjGWubah}(h]h ]h"]h$]h&]uh1j hj+Wubeh}(h]h ]h"]h$]h&]uh1jhjFWhMhjVubeh}(h]h ]h"]h$]h&]uh1jhjVubh)}(h**Description**h]j)}(hjlWh]h Description}(hjnWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjWubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjVubh)}(hA call to drm_gem_vram_vunmap() unmaps and unpins a GEM VRAM buffer. See the documentation for drm_gem_vram_vmap() for more information.h]hA call to drm_gem_vram_vunmap() unmaps and unpins a GEM VRAM buffer. See the documentation for drm_gem_vram_vmap() for more information.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_gem_vram_fill_create_dumb (C function)c.drm_gem_vram_fill_create_dumbhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hint drm_gem_vram_fill_create_dumb (struct drm_file *file, struct drm_device *dev, unsigned long pg_align, unsigned long pitch_align, struct drm_mode_create_dumb *args)h]j>)}(hint drm_gem_vram_fill_create_dumb(struct drm_file *file, struct drm_device *dev, unsigned long pg_align, unsigned long pitch_align, struct drm_mode_create_dumb *args)h](jc)}(hinth]hint}(hjWhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjWhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMubjV)}(h h]h }(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWhhhjWhMubjg)}(hdrm_gem_vram_fill_create_dumbh]jm)}(hdrm_gem_vram_fill_create_dumbh]hdrm_gem_vram_fill_create_dumb}(hjWhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjWhhhjWhMubj)}(h(struct drm_file *file, struct drm_device *dev, unsigned long pg_align, unsigned long pitch_align, struct drm_mode_create_dumb *args)h](j)}(hstruct drm_file *fileh](jD)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjWubjV)}(h h]h }(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hj XhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj Xubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j)}jjWsbc.drm_gem_vram_fill_create_dumbasbuh1hhjWubjV)}(h h]h }(hj,XhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWubj)}(hjh]h*}(hj:XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjm)}(hfileh]hfile}(hjGXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj`XhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj\XubjV)}(h h]h }(hjmXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\Xubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj~XhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj{Xubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j(Xc.drm_gem_vram_fill_create_dumbasbuh1hhj\XubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\Xubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Xubjm)}(hdevh]hdev}(hjXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\Xubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hunsigned long pg_alignh](jc)}(hunsignedh]hunsigned}(hjXhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjXubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXubjc)}(hlongh]hlong}(hjXhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjXubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXubjm)}(hpg_alignh]hpg_align}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hunsigned long pitch_alignh](jc)}(hunsignedh]hunsigned}(hj!YhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjYubjV)}(h h]h }(hj/YhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYubjc)}(hlongh]hlong}(hj=YhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjYubjV)}(h h]h }(hjKYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYubjm)}(h pitch_alignh]h pitch_align}(hjYYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(h!struct drm_mode_create_dumb *argsh](jD)}(hjh]hstruct}(hjrYhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjnYubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnYubh)}(hhh]jm)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j(Xc.drm_gem_vram_fill_create_dumbasbuh1hhjnYubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnYubjm)}(hargsh]hargs}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjnYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubeh}(h]h ]h"]h$]h&]jjuh1jhjWhhhjWhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjWhhhjWhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1j7hjWhMhjWhhubj)}(hhh]h)}(hLHelper for implementing :c:type:`struct drm_driver `.dumb_createh](hHelper for implementing }(hjYhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjYh]hstruct drm_driver}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j(Xc.drm_gem_vram_fill_create_dumbasbj3 drm_driveruh1hhj!IhKhjYubh .dumb_create}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjYhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3Zjj3Zjjjuh1j2hhhj;hNhNubj)}(hX**Parameters** ``struct drm_file *file`` the DRM file ``struct drm_device *dev`` the DRM device ``unsigned long pg_align`` the buffer's alignment in multiples of the page size ``unsigned long pitch_align`` the scanline's alignment in powers of 2 ``struct drm_mode_create_dumb *args`` the arguments as provided to :c:type:`struct drm_driver `.dumb_create **Description** This helper function fills :c:type:`struct drm_mode_create_dumb `, which is used by :c:type:`struct drm_driver `.dumb_create. Implementations of this interface should forwards their arguments to this helper, plus the driver-specific parameters. **Return** 0 on success, or a negative error code otherwise.h](h)}(h**Parameters**h]j)}(hj=Zh]h Parameters}(hj?ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Zubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj7Zubj)}(hhh](j)}(h'``struct drm_file *file`` the DRM file h](j)}(h``struct drm_file *file``h]j)}(hj\Zh]hstruct drm_file *file}(hj^ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZZubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjVZubj )}(hhh]h)}(h the DRM fileh]h the DRM file}(hjuZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqZhMhjrZubah}(h]h ]h"]h$]h&]uh1j hjVZubeh}(h]h ]h"]h$]h&]uh1jhjqZhMhjSZubj)}(h*``struct drm_device *dev`` the DRM device h](j)}(h``struct drm_device *dev``h]j)}(hjZh]hstruct drm_device *dev}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjZubj )}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjSZubj)}(hP``unsigned long pg_align`` the buffer's alignment in multiples of the page size h](j)}(h``unsigned long pg_align``h]j)}(hjZh]hunsigned long pg_align}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjZubj )}(hhh]h)}(h4the buffer's alignment in multiples of the page sizeh]h6the buffer’s alignment in multiples of the page size}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjSZubj)}(hF``unsigned long pitch_align`` the scanline's alignment in powers of 2 h](j)}(h``unsigned long pitch_align``h]j)}(hj[h]hunsigned long pitch_align}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj[ubj )}(hhh]h)}(h'the scanline's alignment in powers of 2h]h)the scanline’s alignment in powers of 2}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjSZubj)}(hx``struct drm_mode_create_dumb *args`` the arguments as provided to :c:type:`struct drm_driver `.dumb_create h](j)}(h%``struct drm_mode_create_dumb *args``h]j)}(hj@[h]h!struct drm_mode_create_dumb *args}(hjB[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>[ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj:[ubj )}(hhh]h)}(hQthe arguments as provided to :c:type:`struct drm_driver `.dumb_createh](hthe arguments as provided to }(hjY[hhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hjc[h]hstruct drm_driver}(hje[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhja[ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjY[ubh .dumb_create}(hjY[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hMhjV[ubah}(h]h ]h"]h$]h&]uh1j hj:[ubeh}(h]h ]h"]h$]h&]uh1jhjU[hMhjSZubeh}(h]h ]h"]h$]h&]uh1jhj7Zubh)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj7Zubh)}(hXThis helper function fills :c:type:`struct drm_mode_create_dumb `, which is used by :c:type:`struct drm_driver `.dumb_create. Implementations of this interface should forwards their arguments to this helper, plus the driver-specific parameters.h](hThis helper function fills }(hj[hhhNhNubh)}(h<:c:type:`struct drm_mode_create_dumb `h]j)}(hj[h]hstruct drm_mode_create_dumb}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mode_create_dumbuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj[ubh, which is used by }(hj[hhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hj[h]hstruct drm_driver}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhj[hMhj[ubh.dumb_create. Implementations of this interface should forwards their arguments to this helper, plus the driver-specific parameters.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hMhj7Zubh)}(h **Return**h]j)}(hj \h]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj \ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj7Zubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hj"\hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj7Zubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.,drm_gem_vram_driver_dumb_create (C function)!c.drm_gem_vram_driver_dumb_createhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hvint drm_gem_vram_driver_dumb_create (struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h]j>)}(huint drm_gem_vram_driver_dumb_create(struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h](jc)}(hinth]hint}(hjQ\hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjM\hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMEubjV)}(h h]h }(hj`\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjM\hhhj_\hMEubjg)}(hdrm_gem_vram_driver_dumb_createh]jm)}(hdrm_gem_vram_driver_dumb_createh]hdrm_gem_vram_driver_dumb_create}(hjr\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjn\ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjM\hhhj_\hMEubj)}(hR(struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h](j)}(hstruct drm_file *fileh](jD)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj\ubjV)}(h h]h }(hj\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hj\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j)}jjt\sb!c.drm_gem_vram_driver_dumb_createasbuh1hhj\ubjV)}(h h]h }(hj\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjm)}(hfileh]hfile}(hj\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj\ubjV)}(h h]h }(hj ]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj ]modnameN classnameNjj)}j]j\!c.drm_gem_vram_driver_dumb_createasbuh1hhj\ubjV)}(h h]h }(hj<]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubj)}(hjh]h*}(hjJ]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjm)}(hdevh]hdev}(hjW]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(h!struct drm_mode_create_dumb *argsh](jD)}(hjh]hstruct}(hjp]hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjl]ubjV)}(h h]h }(hj}]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjl]ubh)}(hhh]jm)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j\!c.drm_gem_vram_driver_dumb_createasbuh1hhjl]ubjV)}(h h]h }(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjl]ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl]ubjm)}(hargsh]hargs}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjl]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubeh}(h]h ]h"]h$]h&]jjuh1jhjM\hhhj_\hMEubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjI\hhhj_\hMEubah}(h]jD\ah ](jjeh"]h$]h&]jj)jhuh1j7hj_\hMEhjF\hhubj)}(hhh]h)}(h?Implements :c:type:`struct drm_driver `.dumb_createh](h Implements }(hj]hhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hj]h]hstruct drm_driver}(hj]hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j\!c.drm_gem_vram_driver_dumb_createasbj3 drm_driveruh1hhj!IhKhj]ubh .dumb_create}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM8hj]hhubah}(h]h ]h"]h$]h&]uh1jhjF\hhhj_\hMEubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1^jj1^jjjuh1j2hhhj;hNhNubj)}(hX**Parameters** ``struct drm_file *file`` the DRM file ``struct drm_device *dev`` the DRM device ``struct drm_mode_create_dumb *args`` the arguments as provided to :c:type:`struct drm_driver `.dumb_create **Description** This function requires the driver to use **drm_device.vram_mm** for its instance of VRAM MM. **Return** 0 on success, or a negative error code otherwise.h](h)}(h**Parameters**h]j)}(hj;^h]h Parameters}(hj=^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9^ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM<hj5^ubj)}(hhh](j)}(h'``struct drm_file *file`` the DRM file h](j)}(h``struct drm_file *file``h]j)}(hjZ^h]hstruct drm_file *file}(hj\^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX^ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM9hjT^ubj )}(hhh]h)}(h the DRM fileh]h the DRM file}(hjs^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo^hM9hjp^ubah}(h]h ]h"]h$]h&]uh1j hjT^ubeh}(h]h ]h"]h$]h&]uh1jhjo^hM9hjQ^ubj)}(h*``struct drm_device *dev`` the DRM device h](j)}(h``struct drm_device *dev``h]j)}(hj^h]hstruct drm_device *dev}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM:hj^ubj )}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM:hj^ubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hM:hjQ^ubj)}(hx``struct drm_mode_create_dumb *args`` the arguments as provided to :c:type:`struct drm_driver `.dumb_create h](j)}(h%``struct drm_mode_create_dumb *args``h]j)}(hj^h]h!struct drm_mode_create_dumb *args}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM<hj^ubj )}(hhh]h)}(hQthe arguments as provided to :c:type:`struct drm_driver `.dumb_createh](hthe arguments as provided to }(hj^hhhNhNubh)}(h(:c:type:`struct drm_driver `h]j)}(hj^h]hstruct drm_driver}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM;hj^ubh .dumb_create}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj _hM;hj^ubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hM<hjQ^ubeh}(h]h ]h"]h$]h&]uh1jhj5^ubh)}(h**Description**h]j)}(hj+_h]h Description}(hj-_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)_ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM>hj5^ubh)}(h\This function requires the driver to use **drm_device.vram_mm** for its instance of VRAM MM.h](h)This function requires the driver to use }(hjA_hhhNhNubj)}(h**drm_device.vram_mm**h]hdrm_device.vram_mm}(hjI_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA_ubh for its instance of VRAM MM.}(hjA_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM>hj5^ubh)}(h **Return**h]j)}(hjd_h]hReturn}(hjf_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb_ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMAhj5^ubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hjz_hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMAhj5^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.1drm_gem_vram_plane_helper_prepare_fb (C function)&c.drm_gem_vram_plane_helper_prepare_fbhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(heint drm_gem_vram_plane_helper_prepare_fb (struct drm_plane *plane, struct drm_plane_state *new_state)h]j>)}(hdint drm_gem_vram_plane_helper_prepare_fb(struct drm_plane *plane, struct drm_plane_state *new_state)h](jc)}(hinth]hint}(hj_hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj_hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMtubjV)}(h h]h }(hj_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj_hhhj_hMtubjg)}(h$drm_gem_vram_plane_helper_prepare_fbh]jm)}(h$drm_gem_vram_plane_helper_prepare_fbh]h$drm_gem_vram_plane_helper_prepare_fb}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj_hhhj_hMtubj)}(h<(struct drm_plane *plane, struct drm_plane_state *new_state)h](j)}(hstruct drm_plane *planeh](jD)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj_ubjV)}(h h]h }(hj_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj_ubh)}(hhh]jm)}(h drm_planeh]h drm_plane}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j)}jj_sb&c.drm_gem_vram_plane_helper_prepare_fbasbuh1hhj_ubjV)}(h h]h }(hj$`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj_ubj)}(hjh]h*}(hj2`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjm)}(hplaneh]hplane}(hj?`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(h!struct drm_plane_state *new_stateh](jD)}(hjh]hstruct}(hjX`hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjT`ubjV)}(h h]h }(hje`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjT`ubh)}(hhh]jm)}(hdrm_plane_stateh]hdrm_plane_state}(hjv`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjs`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjx`modnameN classnameNjj)}j]j `&c.drm_gem_vram_plane_helper_prepare_fbasbuh1hhjT`ubjV)}(h h]h }(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjT`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT`ubjm)}(h new_stateh]h new_state}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjT`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubeh}(h]h ]h"]h$]h&]jjuh1jhj_hhhj_hMtubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj_hhhj_hMtubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1j7hj_hMthj_hhubj)}(hhh]h)}(hVImplements :c:type:`struct drm_plane_helper_funcs `.prepare_fbh](h Implements }(hj`hhhNhNubh)}(h@:c:type:`struct drm_plane_helper_funcs `h]j)}(hj`h]hstruct drm_plane_helper_funcs}(hj`hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j `&c.drm_gem_vram_plane_helper_prepare_fbasbj3drm_plane_helper_funcsuh1hhj!IhKhj`ubh .prepare_fb}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMghj`hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj_hMtubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1j2hhhj;hNhNubj)}(hX**Parameters** ``struct drm_plane *plane`` a DRM plane ``struct drm_plane_state *new_state`` the plane's new state **Description** During plane updates, this function sets the plane's fence and pins the GEM VRAM objects of the plane's new framebuffer to VRAM. Call drm_gem_vram_plane_helper_cleanup_fb() to unpin them. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j)}(hj#ah]h Parameters}(hj%ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!aubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMkhjaubj)}(hhh](j)}(h(``struct drm_plane *plane`` a DRM plane h](j)}(h``struct drm_plane *plane``h]j)}(hjBah]hstruct drm_plane *plane}(hjDahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@aubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMihj)}(hevoid drm_gem_vram_plane_helper_cleanup_fb(struct drm_plane *plane, struct drm_plane_state *old_state)h](jc)}(hvoidh]hvoid}(hj,bhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj(bhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMubjV)}(h h]h }(hj;bhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(bhhhj:bhMubjg)}(h$drm_gem_vram_plane_helper_cleanup_fbh]jm)}(h$drm_gem_vram_plane_helper_cleanup_fbh]h$drm_gem_vram_plane_helper_cleanup_fb}(hjMbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIbubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj(bhhhj:bhMubj)}(h<(struct drm_plane *plane, struct drm_plane_state *old_state)h](j)}(hstruct drm_plane *planeh](jD)}(hjh]hstruct}(hjibhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjebubjV)}(h h]h }(hjvbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjebubh)}(hhh]jm)}(h drm_planeh]h drm_plane}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]j)}jjObsb&c.drm_gem_vram_plane_helper_cleanup_fbasbuh1hhjebubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjebubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjebubjm)}(hplaneh]hplane}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjebubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjabubj)}(h!struct drm_plane_state *old_stateh](jD)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjbubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjbubh)}(hhh]jm)}(hdrm_plane_stateh]hdrm_plane_state}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]jb&c.drm_gem_vram_plane_helper_cleanup_fbasbuh1hhjbubjV)}(h h]h }(hjchhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjbubj)}(hjh]h*}(hj%chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjm)}(h old_stateh]h old_state}(hj2chhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjabubeh}(h]h ]h"]h$]h&]jjuh1jhj(bhhhj:bhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj$bhhhj:bhMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1j7hj:bhMhj!bhhubj)}(hhh]h)}(hVImplements :c:type:`struct drm_plane_helper_funcs `.cleanup_fbh](h Implements }(hj\chhhNhNubh)}(h@:c:type:`struct drm_plane_helper_funcs `h]j)}(hjfch]hstruct drm_plane_helper_funcs}(hjhchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjdcubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jb&c.drm_gem_vram_plane_helper_cleanup_fbasbj3drm_plane_helper_funcsuh1hhj!IhKhj\cubh .cleanup_fb}(hj\chhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjYchhubah}(h]h ]h"]h$]h&]uh1jhj!bhhhj:bhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1j2hhhj;hNhNubj)}(hX(**Parameters** ``struct drm_plane *plane`` a DRM plane ``struct drm_plane_state *old_state`` the plane's old state **Description** During plane updates, this function unpins the GEM VRAM objects of the plane's old framebuffer from VRAM. Complements drm_gem_vram_plane_helper_prepare_fb().h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjcubj)}(hhh](j)}(h(``struct drm_plane *plane`` a DRM plane h](j)}(h``struct drm_plane *plane``h]j)}(hjch]hstruct drm_plane *plane}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjcubj )}(hhh]h)}(h a DRM planeh]h a DRM plane}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjcubj)}(h<``struct drm_plane_state *old_state`` the plane's old state h](j)}(h%``struct drm_plane_state *old_state``h]j)}(hjch]h!struct drm_plane_state *old_state}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjcubj )}(hhh]h)}(hthe plane's old stateh]hthe plane’s old state}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjcubeh}(h]h ]h"]h$]h&]uh1jhjcubh)}(h**Description**h]j)}(hj9dh]h Description}(hj;dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7dubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjcubh)}(hDuring plane updates, this function unpins the GEM VRAM objects of the plane's old framebuffer from VRAM. Complements drm_gem_vram_plane_helper_prepare_fb().h]hDuring plane updates, this function unpins the GEM VRAM objects of the plane’s old framebuffer from VRAM. Complements drm_gem_vram_plane_helper_prepare_fb().}(hjOdhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_vram_mm_debugfs_init (C function)c.drm_vram_mm_debugfs_inithNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(h7void drm_vram_mm_debugfs_init (struct drm_minor *minor)h]j>)}(h6void drm_vram_mm_debugfs_init(struct drm_minor *minor)h](jc)}(hvoidh]hvoid}(hj~dhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjzdhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjzdhhhjdhMubjg)}(hdrm_vram_mm_debugfs_inith]jm)}(hdrm_vram_mm_debugfs_inith]hdrm_vram_mm_debugfs_init}(hjdhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjzdhhhjdhMubj)}(h(struct drm_minor *minor)h]j)}(hstruct drm_minor *minorh](jD)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjdubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdubh)}(hhh]jm)}(h drm_minorh]h drm_minor}(hjdhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]j)}jjdsbc.drm_vram_mm_debugfs_initasbuh1hhjdubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjm)}(hminorh]hminor}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubah}(h]h ]h"]h$]h&]jjuh1jhjzdhhhjdhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjvdhhhjdhMubah}(h]jqdah ](jjeh"]h$]h&]jj)jhuh1j7hjdhMhjsdhhubj)}(hhh]h)}(hRegister VRAM MM debugfs file.h]hRegister VRAM MM debugfs file.}(hj>ehhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj;ehhubah}(h]h ]h"]h$]h&]uh1jhjsdhhhjdhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVejjVejjjuh1j2hhhj;hNhNubj)}(h?**Parameters** ``struct drm_minor *minor`` drm minor device.h](h)}(h**Parameters**h]j)}(hj`eh]h Parameters}(hjbehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^eubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjZeubj)}(hhh]j)}(h-``struct drm_minor *minor`` drm minor device.h](j)}(h``struct drm_minor *minor``h]j)}(hjeh]hstruct drm_minor *minor}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}eubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjyeubj )}(hhh]h)}(hdrm minor device.h]hdrm minor device.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjeubah}(h]h ]h"]h$]h&]uh1j hjyeubeh}(h]h ]h"]h$]h&]uh1jhjehMhjveubah}(h]h ]h"]h$]h&]uh1jhjZeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drmm_vram_helper_init (C function)c.drmm_vram_helper_inithNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hXint drmm_vram_helper_init (struct drm_device *dev, uint64_t vram_base, size_t vram_size)h]j>)}(hWint drmm_vram_helper_init(struct drm_device *dev, uint64_t vram_base, size_t vram_size)h](jc)}(hinth]hint}(hjehhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjehhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMubjV)}(h h]h }(hjehhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjehhhjehMubjg)}(hdrmm_vram_helper_inith]jm)}(hdrmm_vram_helper_inith]hdrmm_vram_helper_init}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjehhhjehMubj)}(h>(struct drm_device *dev, uint64_t vram_base, size_t vram_size)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjfubjV)}(h h]h }(hj#fhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj4fhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1fubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6fmodnameN classnameNjj)}j]j)}jjesbc.drmm_vram_helper_initasbuh1hhjfubjV)}(h h]h }(hjTfhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubj)}(hjh]h*}(hjbfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjm)}(hdevh]hdev}(hjofhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(huint64_t vram_baseh](h)}(hhh]jm)}(huint64_th]huint64_t}(hjfhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jPfc.drmm_vram_helper_initasbuh1hhjfubjV)}(h h]h }(hjfhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubjm)}(h vram_baseh]h vram_base}(hjfhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(hsize_t vram_sizeh](h)}(hhh]jm)}(hsize_th]hsize_t}(hjfhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jPfc.drmm_vram_helper_initasbuh1hhjfubjV)}(h h]h }(hjfhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubjm)}(h vram_sizeh]h vram_size}(hjfhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubeh}(h]h ]h"]h$]h&]jjuh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjehhhjehMubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1j7hjehMhjehhubj)}(hhh]h)}(hMInitializes a device's instance of :c:type:`struct drm_vram_mm `h](h%Initializes a device’s instance of }(hj)ghhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hj3gh]hstruct drm_vram_mm}(hj5ghhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj1gubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jPfc.drmm_vram_helper_initasbj3 drm_vram_mmuh1hhj!IhKhj)gubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj&ghhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjegjjegjjjuh1j2hhhj;hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` the DRM device ``uint64_t vram_base`` the base address of the video memory ``size_t vram_size`` the size of the video memory in bytes **Description** Creates a new instance of :c:type:`struct drm_vram_mm ` and stores it in struct :c:type:`drm_device.vram_mm `. The instance is auto-managed and cleaned up as part of device cleanup. Calling this function multiple times will generate an error message. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j)}(hjogh]h Parameters}(hjqghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmgubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjigubj)}(hhh](j)}(h*``struct drm_device *dev`` the DRM device h](j)}(h``struct drm_device *dev``h]j)}(hjgh]hstruct drm_device *dev}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjgubj )}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjgubj)}(h<``uint64_t vram_base`` the base address of the video memory h](j)}(h``uint64_t vram_base``h]j)}(hjgh]huint64_t vram_base}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjgubj )}(hhh]h)}(h$the base address of the video memoryh]h$the base address of the video memory}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjgubj)}(h;``size_t vram_size`` the size of the video memory in bytes h](j)}(h``size_t vram_size``h]j)}(hjhh]hsize_t vram_size}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjgubj )}(hhh]h)}(h%the size of the video memory in bytesh]h%the size of the video memory in bytes}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjgubeh}(h]h ]h"]h$]h&]uh1jhjigubh)}(h**Description**h]j)}(hj;hh]h Description}(hj=hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9hubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjigubh)}(hXCreates a new instance of :c:type:`struct drm_vram_mm ` and stores it in struct :c:type:`drm_device.vram_mm `. The instance is auto-managed and cleaned up as part of device cleanup. Calling this function multiple times will generate an error message.h](hCreates a new instance of }(hjQhhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j)}(hj[hh]hstruct drm_vram_mm}(hj]hhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjYhubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_vram_mmuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjQhubh and stores it in struct }(hjQhhhhNhNubh)}(h):c:type:`drm_device.vram_mm `h]j)}(hjhh]hdrm_device.vram_mm}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj}hubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhjxhhMhjQhubh. The instance is auto-managed and cleaned up as part of device cleanup. Calling this function multiple times will generate an error message.}(hjQhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhhMhjigubh)}(h **Return**h]j)}(hjhh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjigubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjigubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_vram_helper_mode_valid (C function)c.drm_vram_helper_mode_validhNtauh1j!hj;hhhNhNubj3)}(hhh](j8)}(hmenum drm_mode_status drm_vram_helper_mode_valid (struct drm_device *dev, const struct drm_display_mode *mode)h]j>)}(hlenum drm_mode_status drm_vram_helper_mode_valid(struct drm_device *dev, const struct drm_display_mode *mode)h](jD)}(hjGh]henum}(hjhhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:391: ./drivers/gpu/drm/drm_gem_vram_helper.chM6ubjV)}(h h]h }(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhhjhhM6ubh)}(hhh]jm)}(hdrm_mode_statush]hdrm_mode_status}(hj ihhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj iubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j)}jdrm_vram_helper_mode_validsbc.drm_vram_helper_mode_validasbuh1hhjhhhhjhhM6ubjV)}(h h]h }(hj-ihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhhjhhM6ubjg)}(hdrm_vram_helper_mode_validh]jm)}(hj*ih]hdrm_vram_helper_mode_valid}(hj?ihhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj;iubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhhjhhM6ubj)}(h=(struct drm_device *dev, const struct drm_display_mode *mode)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjZihhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjViubjV)}(h h]h }(hjgihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjViubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjxihhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzimodnameN classnameNjj)}j]j(ic.drm_vram_helper_mode_validasbuh1hhjViubjV)}(h h]h }(hjihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjViubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjViubjm)}(hdevh]hdev}(hjihhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjViubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRiubj)}(h#const struct drm_display_mode *modeh](jD)}(hj&h]hconst}(hjihhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjiubjV)}(h h]h }(hjihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjiubjD)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjiubjV)}(h h]h }(hjihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjiubh)}(hhh]jm)}(hdrm_display_modeh]hdrm_display_mode}(hjjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j(ic.drm_vram_helper_mode_validasbuh1hhjiubjV)}(h h]h }(hj!jhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjiubj)}(hjh]h*}(hj/jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjm)}(hmodeh]hmode}(hj)}(hivoid drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *gem)h](jc)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjkhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKubjV)}(h h]h }(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjkhhhjkhKubjg)}(hdrm_gem_ttm_print_infoh]jm)}(hdrm_gem_ttm_print_infoh]hdrm_gem_ttm_print_info}(hjkhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjkhhhjkhKubj)}(hN(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *gem)h](j)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjlubjV)}(h h]h }(hj lhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hj1lhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3lmodnameN classnameNjj)}j]j)}jjksbc.drm_gem_ttm_print_infoasbuh1hhjlubjV)}(h h]h }(hjQlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubj)}(hjh]h*}(hj_lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjm)}(hjh]hp}(hjllhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj lubj)}(hunsigned int indenth](jc)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjlubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubjc)}(hinth]hint}(hjlhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjlubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubjm)}(hindenth]hindent}(hjlhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj lubj)}(h const struct drm_gem_object *gemh](jD)}(hj&h]hconst}(hjlhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjlubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubjD)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjlubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]jMlc.drm_gem_ttm_print_infoasbuh1hhjlubjV)}(h h]h }(hj,mhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubj)}(hjh]h*}(hj:mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjm)}(hgemh]hgem}(hjGmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj lubeh}(h]h ]h"]h$]h&]jjuh1jhjkhhhjkhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjkhhhjkhKubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1j7hjkhKhjkhhubj)}(hhh]h)}(h2Print :c:type:`ttm_buffer_object` info for debugfsh](hPrint }(hjqmhhhNhNubh)}(h:c:type:`ttm_buffer_object`h]j)}(hj{mh]httm_buffer_object}(hj}mhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjymubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jMlc.drm_gem_ttm_print_infoasbj3ttm_buffer_objectuh1hhjkhKhjqmubh info for debugfs}(hjqmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjnmhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1j2hhhjkhNhNubj)}(hX**Parameters** ``struct drm_printer *p`` DRM printer ``unsigned int indent`` Tab indentation level ``const struct drm_gem_object *gem`` GEM object **Description** This function can be used as :c:type:`drm_gem_object_funcs.print_info ` callback.h](h)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjmubj)}(hhh](j)}(h&``struct drm_printer *p`` DRM printer h](j)}(h``struct drm_printer *p``h]j)}(hjmh]hstruct drm_printer *p}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjmubj )}(hhh]h)}(h DRM printerh]h DRM printer}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjmubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjmubj)}(h.``unsigned int indent`` Tab indentation level h](j)}(h``unsigned int indent``h]j)}(hjnh]hunsigned int indent}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhj nubj )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hj,nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(nhKhj)nubah}(h]h ]h"]h$]h&]uh1j hj nubeh}(h]h ]h"]h$]h&]uh1jhj(nhKhjmubj)}(h0``const struct drm_gem_object *gem`` GEM object h](j)}(h$``const struct drm_gem_object *gem``h]j)}(hjLnh]h const struct drm_gem_object *gem}(hjNnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJnubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjFnubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjenhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjanhKhjbnubah}(h]h ]h"]h$]h&]uh1j hjFnubeh}(h]h ]h"]h$]h&]uh1jhjanhKhjmubeh}(h]h ]h"]h$]h&]uh1jhjmubh)}(h**Description**h]j)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjmubh)}(hgThis function can be used as :c:type:`drm_gem_object_funcs.print_info ` callback.h](hThis function can be used as }(hjnhhhNhNubh)}(h@:c:type:`drm_gem_object_funcs.print_info `h]j)}(hjnh]hdrm_gem_object_funcs.print_info}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjnubh callback.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhKhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_ttm_vmap (C function)c.drm_gem_ttm_vmaphNtauh1j!hjkhhhNhNubj3)}(hhh](j8)}(hHint drm_gem_ttm_vmap (struct drm_gem_object *gem, struct iosys_map *map)h]j>)}(hGint drm_gem_ttm_vmap(struct drm_gem_object *gem, struct iosys_map *map)h](jc)}(hinth]hint}(hjnhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjnhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKAubjV)}(h h]h }(hjnhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnhhhjnhKAubjg)}(hdrm_gem_ttm_vmaph]jm)}(hdrm_gem_ttm_vmaph]hdrm_gem_ttm_vmap}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj oubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjnhhhjnhKAubj)}(h3(struct drm_gem_object *gem, struct iosys_map *map)h](j)}(hstruct drm_gem_object *gemh](jD)}(hjh]hstruct}(hj,ohhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj(oubjV)}(h h]h }(hj9ohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(oubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjJohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjGoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLomodnameN classnameNjj)}j]j)}jjosbc.drm_gem_ttm_vmapasbuh1hhj(oubjV)}(h h]h }(hjjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(oubj)}(hjh]h*}(hjxohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(oubjm)}(hgemh]hgem}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj(oubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$oubj)}(hstruct iosys_map *maph](jD)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjoubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]jfoc.drm_gem_ttm_vmapasbuh1hhjoubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjm)}(hmaph]hmap}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$oubeh}(h]h ]h"]h$]h&]jjuh1jhjnhhhjnhKAubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjnhhhjnhKAubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1j7hjnhKAhjnhhubj)}(hhh]h)}(h vmap :c:type:`ttm_buffer_object`h](hvmap }(hjphhhNhNubh)}(h:c:type:`ttm_buffer_object`h]j)}(hj)ph]httm_buffer_object}(hj+phhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj'pubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jfoc.drm_gem_ttm_vmapasbj3ttm_buffer_objectuh1hhjkhKhjpubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK7hjphhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjnhKAubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[pjj[pjjjuh1j2hhhjkhNhNubj)}(hXU**Parameters** ``struct drm_gem_object *gem`` GEM object. ``struct iosys_map *map`` [out] returns the dma-buf mapping. **Description** Maps a GEM object with ttm_bo_vmap(). This function can be used as :c:type:`drm_gem_object_funcs.vmap ` callback. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j)}(hjeph]h Parameters}(hjgphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcpubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK;hj_pubj)}(hhh](j)}(h+``struct drm_gem_object *gem`` GEM object. h](j)}(h``struct drm_gem_object *gem``h]j)}(hjph]hstruct drm_gem_object *gem}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK8hj~pubj )}(hhh]h)}(h GEM object.h]h GEM object.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK8hjpubah}(h]h ]h"]h$]h&]uh1j hj~pubeh}(h]h ]h"]h$]h&]uh1jhjphK8hj{pubj)}(h=``struct iosys_map *map`` [out] returns the dma-buf mapping. h](j)}(h``struct iosys_map *map``h]j)}(hjph]hstruct iosys_map *map}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK9hjpubj )}(hhh]h)}(h"[out] returns the dma-buf mapping.h]h"[out] returns the dma-buf mapping.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK9hjpubah}(h]h ]h"]h$]h&]uh1j hjpubeh}(h]h ]h"]h$]h&]uh1jhjphK9hj{pubeh}(h]h ]h"]h$]h&]uh1jhj_pubh)}(h**Description**h]j)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK;hj_pubh)}(hMaps a GEM object with ttm_bo_vmap(). This function can be used as :c:type:`drm_gem_object_funcs.vmap ` callback.h](hCMaps a GEM object with ttm_bo_vmap(). This function can be used as }(hjqhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.vmap `h]j)}(hjqh]hdrm_gem_object_funcs.vmap}(hjqhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK;hjqubh callback.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5qhK;hj_pubh)}(h **Return**h]j)}(hjBqh]hReturn}(hjDqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@qubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK>hj_pubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjXqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK>hj_pubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_ttm_vunmap (C function)c.drm_gem_ttm_vunmaphNtauh1j!hjkhhhNhNubj3)}(hhh](j8)}(hKvoid drm_gem_ttm_vunmap (struct drm_gem_object *gem, struct iosys_map *map)h]j>)}(hJvoid drm_gem_ttm_vunmap(struct drm_gem_object *gem, struct iosys_map *map)h](jc)}(hvoidh]hvoid}(hjqhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjqhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKRubjV)}(h h]h }(hjqhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjqhhhjqhKRubjg)}(hdrm_gem_ttm_vunmaph]jm)}(hdrm_gem_ttm_vunmaph]hdrm_gem_ttm_vunmap}(hjqhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjqhhhjqhKRubj)}(h3(struct drm_gem_object *gem, struct iosys_map *map)h](j)}(hstruct drm_gem_object *gemh](jD)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjqubjV)}(h h]h }(hjqhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjqubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjqhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]j)}jjqsbc.drm_gem_ttm_vunmapasbuh1hhjqubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjqubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjm)}(hgemh]hgem}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hstruct iosys_map *maph](jD)}(hjh]hstruct}(hj6rhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj2rubjV)}(h h]h }(hjCrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2rubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjTrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVrmodnameN classnameNjj)}j]jqc.drm_gem_ttm_vunmapasbuh1hhj2rubjV)}(h h]h }(hjrrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2rubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2rubjm)}(hmaph]hmap}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2rubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubeh}(h]h ]h"]h$]h&]jjuh1jhjqhhhjqhKRubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjqhhhjqhKRubah}(h]jzqah ](jjeh"]h$]h&]jj)jhuh1j7hjqhKRhj|qhhubj)}(hhh]h)}(h"vunmap :c:type:`ttm_buffer_object`h](hvunmap }(hjrhhhNhNubh)}(h:c:type:`ttm_buffer_object`h]j)}(hjrh]httm_buffer_object}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jqc.drm_gem_ttm_vunmapasbj3ttm_buffer_objectuh1hhjkhKhjrubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKKhjrhhubah}(h]h ]h"]h$]h&]uh1jhj|qhhhjqhKRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjrjjjuh1j2hhhjkhNhNubj)}(hX**Parameters** ``struct drm_gem_object *gem`` GEM object. ``struct iosys_map *map`` dma-buf mapping. **Description** Unmaps a GEM object with ttm_bo_vunmap(). This function can be used as :c:type:`drm_gem_object_funcs.vmap ` callback.h](h)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKOhjrubj)}(hhh](j)}(h+``struct drm_gem_object *gem`` GEM object. h](j)}(h``struct drm_gem_object *gem``h]j)}(hjsh]hstruct drm_gem_object *gem}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKLhjsubj )}(hhh]h)}(h GEM object.h]h GEM object.}(hj5shhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1shKLhj2subah}(h]h ]h"]h$]h&]uh1j hjsubeh}(h]h ]h"]h$]h&]uh1jhj1shKLhjsubj)}(h+``struct iosys_map *map`` dma-buf mapping. h](j)}(h``struct iosys_map *map``h]j)}(hjUsh]hstruct iosys_map *map}(hjWshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSsubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKMhjOsubj )}(hhh]h)}(hdma-buf mapping.h]hdma-buf mapping.}(hjnshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjshKMhjksubah}(h]h ]h"]h$]h&]uh1j hjOsubeh}(h]h ]h"]h$]h&]uh1jhjjshKMhjsubeh}(h]h ]h"]h$]h&]uh1jhjrubh)}(h**Description**h]j)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKOhjrubh)}(hUnmaps a GEM object with ttm_bo_vunmap(). This function can be used as :c:type:`drm_gem_object_funcs.vmap ` callback.h](hGUnmaps a GEM object with ttm_bo_vunmap(). This function can be used as }(hjshhhNhNubh)}(h::c:type:`drm_gem_object_funcs.vmap `h]j)}(hjsh]hdrm_gem_object_funcs.vmap}(hjshhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKOhjsubh callback.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjshKOhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_ttm_mmap (C function)c.drm_gem_ttm_mmaphNtauh1j!hjkhhhNhNubj3)}(hhh](j8)}(hMint drm_gem_ttm_mmap (struct drm_gem_object *gem, struct vm_area_struct *vma)h]j>)}(hLint drm_gem_ttm_mmap(struct drm_gem_object *gem, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hjshhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjshhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKcubjV)}(h h]h }(hjthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjshhhjthKcubjg)}(hdrm_gem_ttm_mmaph]jm)}(hdrm_gem_ttm_mmaph]hdrm_gem_ttm_mmap}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjtubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjshhhjthKcubj)}(h8(struct drm_gem_object *gem, struct vm_area_struct *vma)h](j)}(hstruct drm_gem_object *gemh](jD)}(hjh]hstruct}(hj5thhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj1tubjV)}(h h]h }(hjBthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1tubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjSthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUtmodnameN classnameNjj)}j]j)}jjtsbc.drm_gem_ttm_mmapasbuh1hhj1tubjV)}(h h]h }(hjsthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1tubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1tubjm)}(hgemh]hgem}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1tubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-tubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjtubjV)}(h h]h }(hjthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjtubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]jotc.drm_gem_ttm_mmapasbuh1hhjtubjV)}(h h]h }(hjthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjtubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjm)}(hvmah]hvma}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-tubeh}(h]h ]h"]h$]h&]jjuh1jhjshhhjthKcubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjshhhjthKcubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1j7hjthKchjshhubj)}(hhh]h)}(h mmap :c:type:`ttm_buffer_object`h](hmmap }(hj(uhhhNhNubh)}(h:c:type:`ttm_buffer_object`h]j)}(hj2uh]httm_buffer_object}(hj4uhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj0uubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jotc.drm_gem_ttm_mmapasbj3ttm_buffer_objectuh1hhjkhKhj(uubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK\hj%uhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjthKcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdujjdujjjuh1j2hhhjkhNhNubj)}(h**Parameters** ``struct drm_gem_object *gem`` GEM object. ``struct vm_area_struct *vma`` vm area. **Description** This function can be used as :c:type:`drm_gem_object_funcs.mmap ` callback.h](h)}(h**Parameters**h]j)}(hjnuh]h Parameters}(hjpuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjluubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK`hjhuubj)}(hhh](j)}(h+``struct drm_gem_object *gem`` GEM object. h](j)}(h``struct drm_gem_object *gem``h]j)}(hjuh]hstruct drm_gem_object *gem}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK]hjuubj )}(hhh]h)}(h GEM object.h]h GEM object.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhK]hjuubah}(h]h ]h"]h$]h&]uh1j hjuubeh}(h]h ]h"]h$]h&]uh1jhjuhK]hjuubj)}(h(``struct vm_area_struct *vma`` vm area. h](j)}(h``struct vm_area_struct *vma``h]j)}(hjuh]hstruct vm_area_struct *vma}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK^hjuubj )}(hhh]h)}(hvm area.h]hvm area.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhK^hjuubah}(h]h ]h"]h$]h&]uh1j hjuubeh}(h]h ]h"]h$]h&]uh1jhjuhK^hjuubeh}(h]h ]h"]h$]h&]uh1jhjhuubh)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK`hjhuubh)}(haThis function can be used as :c:type:`drm_gem_object_funcs.mmap ` callback.h](hThis function can be used as }(hjvhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.mmap `h]j)}(hj!vh]hdrm_gem_object_funcs.mmap}(hj#vhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK`hjvubh callback.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>vhK`hjhuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_gem_ttm_dumb_map_offset (C function)c.drm_gem_ttm_dumb_map_offsethNtauh1j!hjkhhhNhNubj3)}(hhh](j8)}(hrint drm_gem_ttm_dumb_map_offset (struct drm_file *file, struct drm_device *dev, uint32_t handle, uint64_t *offset)h]j>)}(hqint drm_gem_ttm_dumb_map_offset(struct drm_file *file, struct drm_device *dev, uint32_t handle, uint64_t *offset)h](jc)}(hinth]hint}(hjivhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjevhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKubjV)}(h h]h }(hjxvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjevhhhjwvhKubjg)}(hdrm_gem_ttm_dumb_map_offseth]jm)}(hdrm_gem_ttm_dumb_map_offseth]hdrm_gem_ttm_dumb_map_offset}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjevhhhjwvhKubj)}(hR(struct drm_file *file, struct drm_device *dev, uint32_t handle, uint64_t *offset)h](j)}(hstruct drm_file *fileh](jD)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjvubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjvubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j)}jjvsbc.drm_gem_ttm_dumb_map_offsetasbuh1hhjvubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjvubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjm)}(hfileh]hfile}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjwubjV)}(h h]h }(hj%whhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj6whhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8wmodnameN classnameNjj)}j]jvc.drm_gem_ttm_dumb_map_offsetasbuh1hhjwubjV)}(h h]h }(hjTwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubj)}(hjh]h*}(hjbwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjm)}(hdevh]hdev}(hjowhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(huint32_t handleh](h)}(hhh]jm)}(huint32_th]huint32_t}(hjwhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]jvc.drm_gem_ttm_dumb_map_offsetasbuh1hhjwubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubjm)}(hhandleh]hhandle}(hjwhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(huint64_t *offseth](h)}(hhh]jm)}(huint64_th]huint64_t}(hjwhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]jvc.drm_gem_ttm_dumb_map_offsetasbuh1hhjwubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjm)}(hoffseth]hoffset}(hj xhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhjevhhhjwvhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjavhhhjwvhKubah}(h]j\vah ](jjeh"]h$]h&]jj)jhuh1j7hjwvhKhj^vhhubj)}(hhh]h)}(hCImplements struct :c:type:`drm_driver.dumb_map_offset `h](hImplements struct }(hj6xhhhNhNubh)}(h1:c:type:`drm_driver.dumb_map_offset `h]j)}(hj@xh]hdrm_driver.dumb_map_offset}(hjBxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj>xubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jvc.drm_gem_ttm_dumb_map_offsetasbj3 drm_driveruh1hhjkhKhj6xubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKxhj3xhhubah}(h]h ]h"]h$]h&]uh1jhj^vhhhjwvhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrxjjrxjjjuh1j2hhhjkhNhNubj)}(hXD**Parameters** ``struct drm_file *file`` DRM file pointer. ``struct drm_device *dev`` DRM device. ``uint32_t handle`` GEM handle ``uint64_t *offset`` Returns the mapping's memory offset on success **Description** Provides an implementation of struct :c:type:`drm_driver.dumb_map_offset ` for TTM-based GEM drivers. TTM allocates the offset internally and drm_gem_ttm_dumb_map_offset() returns it for dumb-buffer implementations. See struct :c:type:`drm_driver.dumb_map_offset `. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j)}(hj|xh]h Parameters}(hj~xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzxubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK|hjvxubj)}(hhh](j)}(h,``struct drm_file *file`` DRM file pointer. h](j)}(h``struct drm_file *file``h]j)}(hjxh]hstruct drm_file *file}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKyhjxubj )}(hhh]h)}(hDRM file pointer.h]hDRM file pointer.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKyhjxubah}(h]h ]h"]h$]h&]uh1j hjxubeh}(h]h ]h"]h$]h&]uh1jhjxhKyhjxubj)}(h'``struct drm_device *dev`` DRM device. h](j)}(h``struct drm_device *dev``h]j)}(hjxh]hstruct drm_device *dev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKzhjxubj )}(hhh]h)}(h DRM device.h]h DRM device.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKzhjxubah}(h]h ]h"]h$]h&]uh1j hjxubeh}(h]h ]h"]h$]h&]uh1jhjxhKzhjxubj)}(h``uint32_t handle`` GEM handle h](j)}(h``uint32_t handle``h]j)}(hj yh]huint32_t handle}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj yubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK{hjyubj )}(hhh]h)}(h GEM handleh]h GEM handle}(hj&yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"yhK{hj#yubah}(h]h ]h"]h$]h&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhj"yhK{hjxubj)}(hD``uint64_t *offset`` Returns the mapping's memory offset on success h](j)}(h``uint64_t *offset``h]j)}(hjFyh]huint64_t *offset}(hjHyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDyubah}(h]h ]h"]h$]h&]uh1jh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK|hj@yubj )}(hhh]h)}(h.Returns the mapping's memory offset on successh]h0Returns the mapping’s memory offset on success}(hj_yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[yhK|hj\yubah}(h]h ]h"]h$]h&]uh1j hj@yubeh}(h]h ]h"]h$]h&]uh1jhj[yhK|hjxubeh}(h]h ]h"]h$]h&]uh1jhjvxubh)}(h**Description**h]j)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK~hjvxubh)}(hProvides an implementation of struct :c:type:`drm_driver.dumb_map_offset ` for TTM-based GEM drivers. TTM allocates the offset internally and drm_gem_ttm_dumb_map_offset() returns it for dumb-buffer implementations.h](h%Provides an implementation of struct }(hjyhhhNhNubh)}(h1:c:type:`drm_driver.dumb_map_offset `h]j)}(hjyh]hdrm_driver.dumb_map_offset}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chK~hjyubh for TTM-based GEM drivers. TTM allocates the offset internally and drm_gem_ttm_dumb_map_offset() returns it for dumb-buffer implementations.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhK~hjvxubh)}(h=See struct :c:type:`drm_driver.dumb_map_offset `.h](h See struct }(hjyhhhNhNubh)}(h1:c:type:`drm_driver.dumb_map_offset `h]j)}(hjyh]hdrm_driver.dumb_map_offset}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhKhjvxubh)}(h **Return**h]j)}(hjyh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjvxubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:400: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjvxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjkhhhNhNubeh}(h]"gem-ttm-helper-functions-referenceah ]h"]"gem ttm helper functions referenceah$]h&]uh1hhj&yhhhhhMubeh}(h]"the-graphics-execution-manager-gemah ]h"]$the graphics execution manager (gem)ah$]h&]uh1hhhhhhhhKPubh)}(hhh](h)}(hVMA Offset Managerh]hVMA Offset Manager}(hj)}(hstruct drm_vma_offset_node *drm_vma_offset_exact_lookup_locked(struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h](jD)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjzhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhK_ubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjzhhhjzhK_ubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjzhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j)}j"drm_vma_offset_exact_lookup_lockedsb$c.drm_vma_offset_exact_lookup_lockedasbuh1hhjzhhhjzhK_ubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjzhhhjzhK_ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhK_ubjg)}(h"drm_vma_offset_exact_lookup_lockedh]jm)}(hjzh]h"drm_vma_offset_exact_lookup_locked}(hj {hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj {ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjzhhhjzhK_ubj)}(hN(struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h](j)}(h"struct drm_vma_offset_manager *mgrh](jD)}(hjh]hstruct}(hj({hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj${ubjV)}(h h]h }(hj5{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj${ubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjF{hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjC{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjH{modnameN classnameNjj)}j]jz$c.drm_vma_offset_exact_lookup_lockedasbuh1hhj${ubjV)}(h h]h }(hjd{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj${ubj)}(hjh]h*}(hjr{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj${ubjm)}(hmgrh]hmgr}(hj{hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj${ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj {ubj)}(hunsigned long starth](jc)}(hunsignedh]hunsigned}(hj{hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{ubjV)}(h h]h }(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{ubjc)}(hlongh]hlong}(hj{hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{ubjV)}(h h]h }(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{ubjm)}(hstarth]hstart}(hj{hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj {ubj)}(hunsigned long pagesh](jc)}(hunsignedh]hunsigned}(hj{hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{ubjV)}(h h]h }(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{ubjc)}(hlongh]hlong}(hj|hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{ubjV)}(h h]h }(hj|hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{ubjm)}(hpagesh]hpages}(hj!|hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj {ubeh}(h]h ]h"]h$]h&]jjuh1jhjzhhhjzhK_ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjzhhhjzhK_ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1j7hjzhK_hjzhhubj)}(hhh]h)}(hLook up node by exact addressh]hLook up node by exact address}(hjK|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKThjH|hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjzhK_ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjc|jjc|jjjuh1j2hhhj9zhNhNubj)}(hX**Parameters** ``struct drm_vma_offset_manager *mgr`` Manager object ``unsigned long start`` Start address (page-based, not byte-based) ``unsigned long pages`` Size of object (page-based) **Description** Same as drm_vma_offset_lookup_locked() but does not allow any offset into the node. It only returns the exact object with the given start address. **Return** Node at exact start address **start**.h](h)}(h**Parameters**h]j)}(hjm|h]h Parameters}(hjo|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk|ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKXhjg|ubj)}(hhh](j)}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](j)}(h&``struct drm_vma_offset_manager *mgr``h]j)}(hj|h]h"struct drm_vma_offset_manager *mgr}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKUhj|ubj )}(hhh]h)}(hManager objecth]hManager object}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKUhj|ubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hKUhj|ubj)}(hC``unsigned long start`` Start address (page-based, not byte-based) h](j)}(h``unsigned long start``h]j)}(hj|h]hunsigned long start}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKVhj|ubj )}(hhh]h)}(h*Start address (page-based, not byte-based)h]h*Start address (page-based, not byte-based)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKVhj|ubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hKVhj|ubj)}(h4``unsigned long pages`` Size of object (page-based) h](j)}(h``unsigned long pages``h]j)}(hj|h]hunsigned long pages}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKWhj|ubj )}(hhh]h)}(hSize of object (page-based)h]hSize of object (page-based)}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKWhj}ubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhj}hKWhj|ubeh}(h]h ]h"]h$]h&]uh1jhjg|ubh)}(h**Description**h]j)}(hj9}h]h Description}(hj;}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7}ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKYhjg|ubh)}(hSame as drm_vma_offset_lookup_locked() but does not allow any offset into the node. It only returns the exact object with the given start address.h]hSame as drm_vma_offset_lookup_locked() but does not allow any offset into the node. It only returns the exact object with the given start address.}(hjO}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKYhjg|ubh)}(h **Return**h]j)}(hj`}h]hReturn}(hjb}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^}ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhK\hjg|ubh)}(h&Node at exact start address **start**.h](hNode at exact start address }(hjv}hhhNhNubj)}(h **start**h]hstart}(hj~}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv}ubh.}(hjv}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhK\hjg|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_vma_offset_lock_lookup (C function)c.drm_vma_offset_lock_lookuphNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hDvoid drm_vma_offset_lock_lookup (struct drm_vma_offset_manager *mgr)h]j>)}(hCvoid drm_vma_offset_lock_lookup(struct drm_vma_offset_manager *mgr)h](jc)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj}hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKzubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}hhhj}hKzubjg)}(hdrm_vma_offset_lock_lookuph]jm)}(hdrm_vma_offset_lock_lookuph]hdrm_vma_offset_lock_lookup}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj}hhhj}hKzubj)}(h$(struct drm_vma_offset_manager *mgr)h]j)}(h"struct drm_vma_offset_manager *mgrh](jD)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj}ubjV)}(h h]h }(hj~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hj~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j)}jj}sbc.drm_vma_offset_lock_lookupasbuh1hhj}ubjV)}(h h]h }(hj2~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubj)}(hjh]h*}(hj@~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjm)}(hmgrh]hmgr}(hjM~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubah}(h]h ]h"]h$]h&]jjuh1jhj}hhhj}hKzubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj}hhhj}hKzubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1j7hj}hKzhj}hhubj)}(hhh]h)}(h$Lock lookup for extended private useh]h$Lock lookup for extended private use}(hjw~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKkhjt~hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj}hKzubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1j2hhhj9zhNhNubj)}(hXt**Parameters** ``struct drm_vma_offset_manager *mgr`` Manager object **Description** Lock VMA manager for extended lookups. Only locked VMA function calls are allowed while holding this lock. All other contexts are blocked from VMA until the lock is released via drm_vma_offset_unlock_lookup(). Use this if you need to take a reference to the objects returned by drm_vma_offset_lookup_locked() before releasing this lock again. This lock must not be used for anything else than extended lookups. You must not call any other VMA helpers while holding this lock. **Note** You're in atomic-context while holding this lock!h](h)}(h**Parameters**h]j)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKohj~ubj)}(hhh]j)}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](j)}(h&``struct drm_vma_offset_manager *mgr``h]j)}(hj~h]h"struct drm_vma_offset_manager *mgr}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKlhj~ubj )}(hhh]h)}(hManager objecth]hManager object}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKlhj~ubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hKlhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubh)}(h**Description**h]j)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKnhj~ubh)}(hLock VMA manager for extended lookups. Only locked VMA function calls are allowed while holding this lock. All other contexts are blocked from VMA until the lock is released via drm_vma_offset_unlock_lookup().h]hLock VMA manager for extended lookups. Only locked VMA function calls are allowed while holding this lock. All other contexts are blocked from VMA until the lock is released via drm_vma_offset_unlock_lookup().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKnhj~ubh)}(hUse this if you need to take a reference to the objects returned by drm_vma_offset_lookup_locked() before releasing this lock again.h]hUse this if you need to take a reference to the objects returned by drm_vma_offset_lookup_locked() before releasing this lock again.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKrhj~ubh)}(hThis lock must not be used for anything else than extended lookups. You must not call any other VMA helpers while holding this lock.h]hThis lock must not be used for anything else than extended lookups. You must not call any other VMA helpers while holding this lock.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKuhj~ubh)}(h**Note**h]j)}(hj8h]hNote}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKxhj~ubh)}(h1You're in atomic-context while holding this lock!h]h3You’re in atomic-context while holding this lock!}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKxhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)drm_vma_offset_unlock_lookup (C function)c.drm_vma_offset_unlock_lookuphNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hFvoid drm_vma_offset_unlock_lookup (struct drm_vma_offset_manager *mgr)h]j>)}(hEvoid drm_vma_offset_unlock_lookup(struct drm_vma_offset_manager *mgr)h](jc)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjyhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyhhhjhKubjg)}(hdrm_vma_offset_unlock_lookuph]jm)}(hdrm_vma_offset_unlock_lookuph]hdrm_vma_offset_unlock_lookup}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjyhhhjhKubj)}(h$(struct drm_vma_offset_manager *mgr)h]j)}(h"struct drm_vma_offset_manager *mgrh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_vma_offset_unlock_lookupasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjyhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjuhhhjhKubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjrhhubj)}(hhh]h)}(h&Unlock lookup for extended private useh]h&Unlock lookup for extended private use}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhj:hhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1j2hhhj9zhNhNubj)}(h**Parameters** ``struct drm_vma_offset_manager *mgr`` Manager object **Description** Release lookup-lock. See drm_vma_offset_lock_lookup() for more information.h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjYubj)}(hhh]j)}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](j)}(h&``struct drm_vma_offset_manager *mgr``h]j)}(hj~h]h"struct drm_vma_offset_manager *mgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjxubj )}(hhh]h)}(hManager objecth]hManager object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjxubeh}(h]h ]h"]h$]h&]uh1jhjhKhjuubah}(h]h ]h"]h$]h&]uh1jhjYubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjYubh)}(hKRelease lookup-lock. See drm_vma_offset_lock_lookup() for more information.h]hKRelease lookup-lock. See drm_vma_offset_lock_lookup() for more information.}(hjπhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_vma_node_reset (C function)c.drm_vma_node_resethNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(h:void drm_vma_node_reset (struct drm_vma_offset_node *node)h]j>)}(h9void drm_vma_node_reset(struct drm_vma_offset_node *node)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj hKubjg)}(hdrm_vma_node_reseth]jm)}(hdrm_vma_node_reseth]hdrm_vma_node_reset}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj hKubj)}(h"(struct drm_vma_offset_node *node)h]j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj7ubjV)}(h h]h }(hjHhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7ubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j)}jj!sbc.drm_vma_node_resetasbuh1hhj7ubjV)}(h h]h }(hjyhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj hKhjhhubj)}(hhh]h)}(hInitialize or reset node objecth]hInitialize or reset node object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjցjjցjjjuh1j2hhhj9zhNhNubj)}(hX**Parameters** ``struct drm_vma_offset_node *node`` Node to initialize or reset **Description** Reset a node to its initial state. This must be called before using it with any VMA offset manager. This must not be called on an already allocated node, or you will leak memory.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjށubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjځubj)}(hhh]j)}(hA``struct drm_vma_offset_node *node`` Node to initialize or reset h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubj )}(hhh]h)}(hNode to initialize or reseth]hNode to initialize or reset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjځubh)}(h**Description**h]j)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjځubh)}(hcReset a node to its initial state. This must be called before using it with any VMA offset manager.h]hcReset a node to its initial state. This must be called before using it with any VMA offset manager.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjځubh)}(hNThis must not be called on an already allocated node, or you will leak memory.h]hNThis must not be called on an already allocated node, or you will leak memory.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjځubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_vma_node_start (C function)c.drm_vma_node_starthNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hIunsigned long drm_vma_node_start (const struct drm_vma_offset_node *node)h]j>)}(hHunsigned long drm_vma_node_start(const struct drm_vma_offset_node *node)h](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_vma_node_starth]jm)}(hdrm_vma_node_starth]hdrm_vma_node_start}(hj˂hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjǂubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubj)}(h((const struct drm_vma_offset_node *node)h]j)}(h&const struct drm_vma_offset_node *nodeh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j)}jj͂sbc.drm_vma_node_startasbuh1hhjubjV)}(h h]h }(hj@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hj[hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj߂ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h.Return start address for page-based addressingh]h.Return start address for page-based addressing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj9zhNhNubj)}(hX"**Parameters** ``const struct drm_vma_offset_node *node`` Node to inspect **Description** Return the start address of the given node. This can be used as offset into the linear VM space that is provided by the VMA offset manager. Note that this can only be used for page-based addressing. If you need a proper offset for user-space mappings, you must apply "<< PAGE_SHIFT" or use the drm_vma_node_offset_addr() helper instead. **Return** Start address of **node** for page-based addressing. 0 if the node does not have an offset allocated.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubj)}(hhh]j)}(h;``const struct drm_vma_offset_node *node`` Node to inspect h](j)}(h*``const struct drm_vma_offset_node *node``h]j)}(hjƃh]h&const struct drm_vma_offset_node *node}(hjȃhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjăubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubj )}(hhh]h)}(hNode to inspecth]hNode to inspect}(hj߃hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjۃhKhj܃ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjۃhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubh)}(hXPReturn the start address of the given node. This can be used as offset into the linear VM space that is provided by the VMA offset manager. Note that this can only be used for page-based addressing. If you need a proper offset for user-space mappings, you must apply "<< PAGE_SHIFT" or use the drm_vma_node_offset_addr() helper instead.h]hXTReturn the start address of the given node. This can be used as offset into the linear VM space that is provided by the VMA offset manager. Note that this can only be used for page-based addressing. If you need a proper offset for user-space mappings, you must apply “<< PAGE_SHIFT” or use the drm_vma_node_offset_addr() helper instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubh)}(h **Return**h]j)}(hj(h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubh)}(heStart address of **node** for page-based addressing. 0 if the node does not have an offset allocated.h](hStart address of }(hj>hhhNhNubj)}(h**node**h]hnode}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubhL for page-based addressing. 0 if the node does not have an offset allocated.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_vma_node_size (C function)c.drm_vma_node_sizehNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hBunsigned long drm_vma_node_size (struct drm_vma_offset_node *node)h]j>)}(hAunsigned long drm_vma_node_size(struct drm_vma_offset_node *node)h](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{hhhjhKubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{hhhjhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{hhhjhKubjg)}(hdrm_vma_node_sizeh]jm)}(hdrm_vma_node_sizeh]hdrm_vma_node_size}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj{hhhjhKubj)}(h"(struct drm_vma_offset_node *node)h]j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hj؄hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjԄubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjԄubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_vma_node_sizeasbuh1hhjԄubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjԄubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԄubjm)}(hnodeh]hnode}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjԄubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjЄubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjwhhhjhKubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjthhubj)}(hhh]h)}(hReturn size (page-based)h]hReturn size (page-based)}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjXhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1j2hhhj9zhNhNubj)}(hXd**Parameters** ``struct drm_vma_offset_node *node`` Node to inspect **Description** Return the size as number of pages for the given node. This is the same size that was passed to drm_vma_offset_add(). If no offset is allocated for the node, this is 0. **Return** Size of **node** as number of pages. 0 if the node does not have an offset allocated.h](h)}(h**Parameters**h]j)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjwubj)}(hhh]j)}(h5``struct drm_vma_offset_node *node`` Node to inspect h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubj )}(hhh]h)}(hNode to inspecth]hNode to inspect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**Description**h]j)}(hjׅh]h Description}(hjمhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՅubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjwubh)}(hReturn the size as number of pages for the given node. This is the same size that was passed to drm_vma_offset_add(). If no offset is allocated for the node, this is 0.h]hReturn the size as number of pages for the given node. This is the same size that was passed to drm_vma_offset_add(). If no offset is allocated for the node, this is 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjwubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjwubh)}(hUSize of **node** as number of pages. 0 if the node does not have an offset allocated.h](hSize of }(hjhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhE as number of pages. 0 if the node does not have an offset allocated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_vma_node_offset_addr (C function)c.drm_vma_node_offset_addrhNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hA__u64 drm_vma_node_offset_addr (struct drm_vma_offset_node *node)h]j>)}(h@__u64 drm_vma_node_offset_addr(struct drm_vma_offset_node *node)h](h)}(hhh]jm)}(h__u64h]h__u64}(hjXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j)}jdrm_vma_node_offset_addrsbc.drm_vma_node_offset_addrasbuh1hhjQhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQhhhjyhKubjg)}(hdrm_vma_node_offset_addrh]jm)}(hjvh]hdrm_vma_node_offset_addr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjQhhhjyhKubj)}(h"(struct drm_vma_offset_node *node)h]j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjņhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj†ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdžmodnameN classnameNjj)}j]jtc.drm_vma_node_offset_addrasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjQhhhjyhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjMhhhjyhKubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1j7hjyhKhjJhhubj)}(hhh]h)}(h,Return sanitized offset for user-space mmapsh]h,Return sanitized offset for user-space mmaps}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhj%hhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjyhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1j2hhhj9zhNhNubj)}(hXq**Parameters** ``struct drm_vma_offset_node *node`` Linked offset node **Description** Same as drm_vma_node_start() but returns the address as a valid offset that can be used for user-space mappings during mmap(). This must not be called on unlinked nodes. **Return** Offset of **node** for byte-based addressing. 0 if the node does not have an object allocated.h](h)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjDubj)}(hhh]j)}(h8``struct drm_vma_offset_node *node`` Linked offset node h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjih]h struct drm_vma_offset_node *node}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjcubj )}(hhh]h)}(hLinked offset nodeh]hLinked offset node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKhjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjDubh)}(hSame as drm_vma_node_start() but returns the address as a valid offset that can be used for user-space mappings during mmap(). This must not be called on unlinked nodes.h]hSame as drm_vma_node_start() but returns the address as a valid offset that can be used for user-space mappings during mmap(). This must not be called on unlinked nodes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjDubh)}(h **Return**h]j)}(hjˇh]hReturn}(hj͇hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɇubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjDubh)}(h^Offset of **node** for byte-based addressing. 0 if the node does not have an object allocated.h](h Offset of }(hjhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhL for byte-based addressing. 0 if the node does not have an object allocated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_vma_node_unmap (C function)c.drm_vma_node_unmaphNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(h^void drm_vma_node_unmap (struct drm_vma_offset_node *node, struct address_space *file_mapping)h]j>)}(h]void drm_vma_node_unmap(struct drm_vma_offset_node *node, struct address_space *file_mapping)h](jc)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj0hKubjg)}(hdrm_vma_node_unmaph]jm)}(hdrm_vma_node_unmaph]hdrm_vma_node_unmap}(hjChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj0hKubj)}(hF(struct drm_vma_offset_node *node, struct address_space *file_mapping)h](j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj[ubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjEsbc.drm_vma_node_unmapasbuh1hhj[ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(h"struct address_space *file_mappingh](jD)}(hjh]hstruct}(hjшhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj͈ubjV)}(h h]h }(hjވhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj͈ubh)}(hhh]jm)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_vma_node_unmapasbuh1hhj͈ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj͈ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͈ubjm)}(h file_mappingh]h file_mapping}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj͈ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj0hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj0hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj0hKhjhhubj)}(hhh]h)}(hUnmap offset nodeh]hUnmap offset node}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjOhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1j2hhhj9zhNhNubj)}(hX**Parameters** ``struct drm_vma_offset_node *node`` Offset node ``struct address_space *file_mapping`` Address space to unmap **node** from **Description** Unmap all userspace mappings for a given offset node. The mappings must be associated with the **file_mapping** address-space. If no offset exists nothing is done. This call is unlocked. The caller must guarantee that drm_vma_offset_remove() is not called on this node concurrently.h](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjnubj)}(hhh](j)}(h1``struct drm_vma_offset_node *node`` Offset node h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubj )}(hhh]h)}(h Offset nodeh]h Offset node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hL``struct address_space *file_mapping`` Address space to unmap **node** from h](j)}(h&``struct address_space *file_mapping``h]j)}(hj̉h]h"struct address_space *file_mapping}(hjΉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʉubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjƉubj )}(hhh]h)}(h$Address space to unmap **node** fromh](hAddress space to unmap }(hjhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh from}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjƉubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjnubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjnubh)}(hUnmap all userspace mappings for a given offset node. The mappings must be associated with the **file_mapping** address-space. If no offset exists nothing is done.h](h_Unmap all userspace mappings for a given offset node. The mappings must be associated with the }(hj/hhhNhNubj)}(h**file_mapping**h]h file_mapping}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh4 address-space. If no offset exists nothing is done.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjnubh)}(hvThis call is unlocked. The caller must guarantee that drm_vma_offset_remove() is not called on this node concurrently.h]hvThis call is unlocked. The caller must guarantee that drm_vma_offset_remove() is not called on this node concurrently.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_vma_node_verify_access (C function)c.drm_vma_node_verify_accesshNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hWint drm_vma_node_verify_access (struct drm_vma_offset_node *node, struct drm_file *tag)h]j>)}(hVint drm_vma_node_verify_access(struct drm_vma_offset_node *node, struct drm_file *tag)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{hhhjhKubjg)}(hdrm_vma_node_verify_accessh]jm)}(hdrm_vma_node_verify_accessh]hdrm_vma_node_verify_access}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj{hhhjhKubj)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjɊhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjڊhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj׊ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj܊modnameN classnameNjj)}j]j)}jjsbc.drm_vma_node_verify_accessasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *tagh](jD)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj*ubjV)}(h h]h }(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*ubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]jc.drm_vma_node_verify_accessasbuh1hhj*ubjV)}(h h]h }(hjjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*ubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjm)}(htagh]htag}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjwhhhjhKubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjthhubj)}(hhh]h)}(h"Access verification helper for TTMh]h"Access verification helper for TTM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjjNjjjjuh1j2hhhj9zhNhNubj)}(hXf**Parameters** ``struct drm_vma_offset_node *node`` Offset node ``struct drm_file *tag`` Tag of file to check **Description** This checks whether **tag** is granted access to **node**. It is the same as drm_vma_node_is_allowed() but suitable as drop-in helper for TTM verify_access() callbacks. **Return** 0 if access is granted, -EACCES otherwise.h](h)}(h**Parameters**h]j)}(hjыh]h Parameters}(hjӋhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϋubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjˋubj)}(hhh](j)}(h1``struct drm_vma_offset_node *node`` Offset node h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjubj )}(hhh]h)}(h Offset nodeh]h Offset node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``struct drm_file *tag`` Tag of file to check h](j)}(h``struct drm_file *tag``h]j)}(hj)h]hstruct drm_file *tag}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhj#ubj )}(hhh]h)}(hTag of file to checkh]hTag of file to check}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKhj?ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hKhjubeh}(h]h ]h"]h$]h&]uh1jhjˋubh)}(h**Description**h]j)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjˋubh)}(hThis checks whether **tag** is granted access to **node**. It is the same as drm_vma_node_is_allowed() but suitable as drop-in helper for TTM verify_access() callbacks.h](hThis checks whether }(hjzhhhNhNubj)}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh is granted access to }(hjzhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubho. It is the same as drm_vma_node_is_allowed() but suitable as drop-in helper for TTM verify_access() callbacks.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjˋubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjˋubh)}(h*0 if access is granted, -EACCES otherwise.h]h*0 if access is granted, -EACCES otherwise.}(hjŌhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:409: ./include/drm/drm_vma_manager.hhKhjˋubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_vma_offset_manager_init (C function)c.drm_vma_offset_manager_inithNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(htvoid drm_vma_offset_manager_init (struct drm_vma_offset_manager *mgr, unsigned long page_offset, unsigned long size)h]j>)}(hsvoid drm_vma_offset_manager_init(struct drm_vma_offset_manager *mgr, unsigned long page_offset, unsigned long size)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKUubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKUubjg)}(hdrm_vma_offset_manager_inith]jm)}(hdrm_vma_offset_manager_inith]hdrm_vma_offset_manager_init}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKUubj)}(hS(struct drm_vma_offset_manager *mgr, unsigned long page_offset, unsigned long size)h](j)}(h"struct drm_vma_offset_manager *mgrh](jD)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj-ubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-ubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j)}jjsbc.drm_vma_offset_manager_initasbuh1hhj-ubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjm)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hunsigned long page_offseth](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj͍hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h page_offseth]h page_offset}(hjۍhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hunsigned long sizeh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hsizeh]hsize}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKUubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKUubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKUhjhhubj)}(hhh]h)}(hInitialize new offset-managerh]hInitialize new offset-manager}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKGhjShhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKUubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1j2hhhj9zhNhNubj)}(hX**Parameters** ``struct drm_vma_offset_manager *mgr`` Manager object ``unsigned long page_offset`` Offset of available memory area (page-based) ``unsigned long size`` Size of available address space range (page-based) **Description** Initialize a new offset-manager. The offset and area size available for the manager are given as **page_offset** and **size**. Both are interpreted as page-numbers, not bytes. Adding/removing nodes from the manager is locked internally and protected against concurrent access. However, node allocation and destruction is left for the caller. While calling into the vma-manager, a given node must always be guaranteed to be referenced.h](h)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKKhjrubj)}(hhh](j)}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](j)}(h&``struct drm_vma_offset_manager *mgr``h]j)}(hjh]h"struct drm_vma_offset_manager *mgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKHhjubj )}(hhh]h)}(hManager objecth]hManager object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKHhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKHhjubj)}(hK``unsigned long page_offset`` Offset of available memory area (page-based) h](j)}(h``unsigned long page_offset``h]j)}(hjЎh]hunsigned long page_offset}(hjҎhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΎubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKIhjʎubj )}(hhh]h)}(h,Offset of available memory area (page-based)h]h,Offset of available memory area (page-based)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKIhjubah}(h]h ]h"]h$]h&]uh1j hjʎubeh}(h]h ]h"]h$]h&]uh1jhjhKIhjubj)}(hJ``unsigned long size`` Size of available address space range (page-based) h](j)}(h``unsigned long size``h]j)}(hj h]hunsigned long size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKJhjubj )}(hhh]h)}(h2Size of available address space range (page-based)h]h2Size of available address space range (page-based)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKJhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKJhjubeh}(h]h ]h"]h$]h&]uh1jhjrubh)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKLhjrubh)}(hInitialize a new offset-manager. The offset and area size available for the manager are given as **page_offset** and **size**. Both are interpreted as page-numbers, not bytes.h](haInitialize a new offset-manager. The offset and area size available for the manager are given as }(hjZhhhNhNubj)}(h**page_offset**h]h page_offset}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh and }(hjZhhhNhNubj)}(h**size**h]hsize}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh2. Both are interpreted as page-numbers, not bytes.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKLhjrubh)}(hXAdding/removing nodes from the manager is locked internally and protected against concurrent access. However, node allocation and destruction is left for the caller. While calling into the vma-manager, a given node must always be guaranteed to be referenced.h]hXAdding/removing nodes from the manager is locked internally and protected against concurrent access. However, node allocation and destruction is left for the caller. While calling into the vma-manager, a given node must always be guaranteed to be referenced.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKPhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.+drm_vma_offset_manager_destroy (C function) c.drm_vma_offset_manager_destroyhNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hHvoid drm_vma_offset_manager_destroy (struct drm_vma_offset_manager *mgr)h]j>)}(hGvoid drm_vma_offset_manager_destroy(struct drm_vma_offset_manager *mgr)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhubjV)}(h h]h }(hjˏhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjʏhKhubjg)}(hdrm_vma_offset_manager_destroyh]jm)}(hdrm_vma_offset_manager_destroyh]hdrm_vma_offset_manager_destroy}(hjݏhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjُubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjʏhKhubj)}(h$(struct drm_vma_offset_manager *mgr)h]j)}(h"struct drm_vma_offset_manager *mgrh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjߏsb c.drm_vma_offset_manager_destroyasbuh1hhjubjV)}(h h]h }(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmgrh]hmgr}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjʏhKhubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjʏhKhubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjʏhKhhjhhubj)}(hhh]h)}(hDestroy offset managerh]hDestroy offset manager}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chK^hjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjʏhKhubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj9zhNhNubj)}(hX}**Parameters** ``struct drm_vma_offset_manager *mgr`` Manager object **Description** Destroy an object manager which was previously created via drm_vma_offset_manager_init(). The caller must remove all allocated nodes before destroying the manager. Otherwise, drm_mm will refuse to free the requested resources. The manager must not be accessed after this function is called.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKbhjubj)}(hhh]j)}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](j)}(h&``struct drm_vma_offset_manager *mgr``h]j)}(hjh]h"struct drm_vma_offset_manager *mgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chK_hjubj )}(hhh]h)}(hManager objecth]hManager object}(hj֐hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjҐhK_hjӐubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjҐhK_hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKahjubh)}(hDestroy an object manager which was previously created via drm_vma_offset_manager_init(). The caller must remove all allocated nodes before destroying the manager. Otherwise, drm_mm will refuse to free the requested resources.h]hDestroy an object manager which was previously created via drm_vma_offset_manager_init(). The caller must remove all allocated nodes before destroying the manager. Otherwise, drm_mm will refuse to free the requested resources.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKahjubh)}(h?The manager must not be accessed after this function is called.h]h?The manager must not be accessed after this function is called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)drm_vma_offset_lookup_locked (C function)c.drm_vma_offset_lookup_lockedhNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hstruct drm_vma_offset_node * drm_vma_offset_lookup_locked (struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h]j>)}(hstruct drm_vma_offset_node *drm_vma_offset_lookup_locked(struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h](jD)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjHhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKubjV)}(h h]h }(hjZhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHhhhjYhKubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjkhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j)}jdrm_vma_offset_lookup_lockedsbc.drm_vma_offset_lookup_lockedasbuh1hhjHhhhjYhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHhhhjYhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhKubjg)}(hdrm_vma_offset_lookup_lockedh]jm)}(hjh]hdrm_vma_offset_lookup_locked}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjHhhhjYhKubj)}(hN(struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h](j)}(h"struct drm_vma_offset_manager *mgrh](jD)}(hjh]hstruct}(hjƑhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj‘ubjV)}(h h]h }(hjӑhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj‘ubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_vma_offset_lookup_lockedasbuh1hhj‘ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj‘ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj‘ubjm)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj‘ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long starth](jc)}(hunsignedh]hunsigned}(hj6hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj2ubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2ubjc)}(hlongh]hlong}(hjRhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj2ubjV)}(h h]h }(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2ubjm)}(hstarth]hstart}(hjnhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long pagesh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjHhhhjYhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjDhhhjYhKubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j7hjYhKhjAhhubj)}(hhh]h)}(hFind node in offset spaceh]hFind node in offset space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKohjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj9zhNhNubj)}(hX**Parameters** ``struct drm_vma_offset_manager *mgr`` Manager object ``unsigned long start`` Start address for object (page-based) ``unsigned long pages`` Size of object (page-based) **Description** Find a node given a start address and object size. This returns the _best_ match for the given node. That is, **start** may point somewhere into a valid region and the given node will be returned, as long as the node spans the whole requested area (given the size in number of pages as **pages**). Note that before lookup the vma offset manager lookup lock must be acquired with drm_vma_offset_lock_lookup(). See there for an example. This can then be used to implement weakly referenced lookups using kref_get_unless_zero(). :: drm_vma_offset_lock_lookup(mgr); node = drm_vma_offset_lookup_locked(mgr); if (node) kref_get_unless_zero(container_of(node, sth, entr)); drm_vma_offset_unlock_lookup(mgr); **Example** **Return** Returns NULL if no suitable node can be found. Otherwise, the best match is returned. It's the caller's responsibility to make sure the node doesn't get destroyed before the caller can access it.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKshjubj)}(hhh](j)}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](j)}(h&``struct drm_vma_offset_manager *mgr``h]j)}(hj*h]h"struct drm_vma_offset_manager *mgr}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKphj$ubj )}(hhh]h)}(hManager objecth]hManager object}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKphj@ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hKphj!ubj)}(h>``unsigned long start`` Start address for object (page-based) h](j)}(h``unsigned long start``h]j)}(hjch]hunsigned long start}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKqhj]ubj )}(hhh]h)}(h%Start address for object (page-based)h]h%Start address for object (page-based)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKqhjyubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKqhj!ubj)}(h4``unsigned long pages`` Size of object (page-based) h](j)}(h``unsigned long pages``h]j)}(hjh]hunsigned long pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKrhjubj )}(hhh]h)}(hSize of object (page-based)h]hSize of object (page-based)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKrhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjדh]h Description}(hjٓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՓubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKthjubh)}(hX)Find a node given a start address and object size. This returns the _best_ match for the given node. That is, **start** may point somewhere into a valid region and the given node will be returned, as long as the node spans the whole requested area (given the size in number of pages as **pages**).h](hnFind a node given a start address and object size. This returns the _best_ match for the given node. That is, }(hjhhhNhNubj)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh may point somewhere into a valid region and the given node will be returned, as long as the node spans the whole requested area (given the size in number of pages as }(hjhhhNhNubj)}(h **pages**h]hpages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKthjubh)}(hNote that before lookup the vma offset manager lookup lock must be acquired with drm_vma_offset_lock_lookup(). See there for an example. This can then be used to implement weakly referenced lookups using kref_get_unless_zero().h]hNote that before lookup the vma offset manager lookup lock must be acquired with drm_vma_offset_lock_lookup(). See there for an example. This can then be used to implement weakly referenced lookups using kref_get_unless_zero().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKyhjubjT)}(hdrm_vma_offset_lock_lookup(mgr); node = drm_vma_offset_lookup_locked(mgr); if (node) kref_get_unless_zero(container_of(node, sth, entr)); drm_vma_offset_unlock_lookup(mgr);h]hdrm_vma_offset_lock_lookup(mgr); node = drm_vma_offset_lookup_locked(mgr); if (node) kref_get_unless_zero(container_of(node, sth, entr)); drm_vma_offset_unlock_lookup(mgr);}hj/sbah}(h]h ]h"]h$]h&]jjuh1jSh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjubh)}(h **Example**h]j)}(hj@h]hExample}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjubh)}(h **Return**h]j)}(hjXh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chK~hjubh)}(hReturns NULL if no suitable node can be found. Otherwise, the best match is returned. It's the caller's responsibility to make sure the node doesn't get destroyed before the caller can access it.h]hReturns NULL if no suitable node can be found. Otherwise, the best match is returned. It’s the caller’s responsibility to make sure the node doesn’t get destroyed before the caller can access it.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_vma_offset_add (C function)c.drm_vma_offset_addhNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hrint drm_vma_offset_add (struct drm_vma_offset_manager *mgr, struct drm_vma_offset_node *node, unsigned long pages)h]j>)}(hqint drm_vma_offset_add(struct drm_vma_offset_manager *mgr, struct drm_vma_offset_node *node, unsigned long pages)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_vma_offset_addh]jm)}(hdrm_vma_offset_addh]hdrm_vma_offset_add}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubj)}(h[(struct drm_vma_offset_manager *mgr, struct drm_vma_offset_node *node, unsigned long pages)h](j)}(h"struct drm_vma_offset_manager *mgrh](jD)}(hjh]hstruct}(hjڔhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj֔ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj֔ubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_vma_offset_addasbuh1hhj֔ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj֔ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֔ubjm)}(hmgrh]hmgr}(hj3hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj֔ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҔubj)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjHubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj)}j]jc.drm_vma_offset_addasbuh1hhjHubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҔubj)}(hunsigned long pagesh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjʕhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjؕhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҔubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(hAdd offset node to managerh]hAdd offset node to manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1j2hhhj9zhNhNubj)}(hXZ**Parameters** ``struct drm_vma_offset_manager *mgr`` Manager object ``struct drm_vma_offset_node *node`` Node to be added ``unsigned long pages`` Allocation size visible to user-space (in number of pages) **Description** Add a node to the offset-manager. If the node was already added, this does nothing and return 0. **pages** is the size of the object given in number of pages. After this call succeeds, you can access the offset of the node until it is removed again. If this call fails, it is safe to retry the operation or call drm_vma_offset_remove(), anyway. However, no cleanup is required in that case. **pages** is not required to be the same size as the underlying memory object that you want to map. It only limits the size that user-space can map into their address space. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj:ubj)}(hhh](j)}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](j)}(h&``struct drm_vma_offset_manager *mgr``h]j)}(hj_h]h"struct drm_vma_offset_manager *mgr}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjYubj )}(hhh]h)}(hManager objecth]hManager object}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthKhjuubah}(h]h ]h"]h$]h&]uh1j hjYubeh}(h]h ]h"]h$]h&]uh1jhjthKhjVubj)}(h6``struct drm_vma_offset_node *node`` Node to be added h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjubj )}(hhh]h)}(hNode to be addedh]hNode to be added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjVubj)}(hS``unsigned long pages`` Allocation size visible to user-space (in number of pages) h](j)}(h``unsigned long pages``h]j)}(hjіh]hunsigned long pages}(hjӖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϖubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj˖ubj )}(hhh]h)}(h:Allocation size visible to user-space (in number of pages)h]h:Allocation size visible to user-space (in number of pages)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj˖ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj:ubh)}(hAdd a node to the offset-manager. If the node was already added, this does nothing and return 0. **pages** is the size of the object given in number of pages. After this call succeeds, you can access the offset of the node until it is removed again.h](haAdd a node to the offset-manager. If the node was already added, this does nothing and return 0. }(hj"hhhNhNubj)}(h **pages**h]hpages}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh is the size of the object given in number of pages. After this call succeeds, you can access the offset of the node until it is removed again.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj:ubh)}(hIf this call fails, it is safe to retry the operation or call drm_vma_offset_remove(), anyway. However, no cleanup is required in that case.h]hIf this call fails, it is safe to retry the operation or call drm_vma_offset_remove(), anyway. However, no cleanup is required in that case.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj:ubh)}(h**pages** is not required to be the same size as the underlying memory object that you want to map. It only limits the size that user-space can map into their address space.h](j)}(h **pages**h]hpages}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh is not required to be the same size as the underlying memory object that you want to map. It only limits the size that user-space can map into their address space.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj:ubh)}(h **Return**h]j)}(hjqh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj:ubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_vma_offset_remove (C function)c.drm_vma_offset_removehNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(havoid drm_vma_offset_remove (struct drm_vma_offset_manager *mgr, struct drm_vma_offset_node *node)h]j>)}(h`void drm_vma_offset_remove(struct drm_vma_offset_manager *mgr, struct drm_vma_offset_node *node)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKubjV)}(h h]h }(hjŗhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjėhKubjg)}(hdrm_vma_offset_removeh]jm)}(hdrm_vma_offset_removeh]hdrm_vma_offset_remove}(hjחhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjӗubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjėhKubj)}(hF(struct drm_vma_offset_manager *mgr, struct drm_vma_offset_node *node)h](j)}(h"struct drm_vma_offset_manager *mgrh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjٗsbc.drm_vma_offset_removeasbuh1hhjubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmgrh]hmgr}(hjLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjaubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjaubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j-c.drm_vma_offset_removeasbuh1hhjaubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjėhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjėhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjėhKhjhhubj)}(hhh]h)}(hRemove offset node from managerh]hRemove offset node from manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjėhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj9zhNhNubj)}(hX**Parameters** ``struct drm_vma_offset_manager *mgr`` Manager object ``struct drm_vma_offset_node *node`` Node to be removed **Description** Remove a node from the offset manager. If the node wasn't added before, this does nothing. After this call returns, the offset and size will be 0 until a new offset is allocated via drm_vma_offset_add() again. Helper functions like drm_vma_node_start() and drm_vma_node_offset_addr() will return 0 if no offset is allocated.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjubj)}(hhh](j)}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](j)}(h&``struct drm_vma_offset_manager *mgr``h]j)}(hj'h]h"struct drm_vma_offset_manager *mgr}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhj!ubj )}(hhh]h)}(hManager objecth]hManager object}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hKhj=ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhjubj)}(h8``struct drm_vma_offset_node *node`` Node to be removed h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hj`h]h struct drm_vma_offset_node *node}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjZubj )}(hhh]h)}(hNode to be removedh]hNode to be removed}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhKhjvubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjubh)}(hXDRemove a node from the offset manager. If the node wasn't added before, this does nothing. After this call returns, the offset and size will be 0 until a new offset is allocated via drm_vma_offset_add() again. Helper functions like drm_vma_node_start() and drm_vma_node_offset_addr() will return 0 if no offset is allocated.h]hXFRemove a node from the offset manager. If the node wasn’t added before, this does nothing. After this call returns, the offset and size will be 0 until a new offset is allocated via drm_vma_offset_add() again. Helper functions like drm_vma_node_start() and drm_vma_node_offset_addr() will return 0 if no offset is allocated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_vma_node_allow (C function)c.drm_vma_node_allowhNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hOint drm_vma_node_allow (struct drm_vma_offset_node *node, struct drm_file *tag)h]j>)}(hNint drm_vma_node_allow(struct drm_vma_offset_node *node, struct drm_file *tag)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjܙhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM9ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjܙhhhjhM9ubjg)}(hdrm_vma_node_allowh]jm)}(hdrm_vma_node_allowh]hdrm_vma_node_allow}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjܙhhhjhM9ubj)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hj;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j)}jjsbc.drm_vma_node_allowasbuh1hhjubjV)}(h h]h }(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *tagh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jWc.drm_vma_node_allowasbuh1hhjubjV)}(h h]h }(hj˚hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjٚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(htagh]htag}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjܙhhhjhM9ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjؙhhhjhM9ubah}(h]jәah ](jjeh"]h$]h&]jj)jhuh1j7hjhM9hjՙhhubj)}(hhh]h)}(h&Add open-file to list of allowed usersh]h&Add open-file to list of allowed users}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM&hj hhubah}(h]h ]h"]h$]h&]uh1jhjՙhhhjhM9ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1j2hhhj9zhNhNubj)}(hX**Parameters** ``struct drm_vma_offset_node *node`` Node to modify ``struct drm_file *tag`` Tag of file to remove **Description** Add **tag** to the list of allowed open-files for this node. If **tag** is already on this list, the ref-count is incremented. The list of allowed-users is preserved across drm_vma_offset_add() and drm_vma_offset_remove() calls. You may even call it if the node is currently not added to any offset-manager. You must remove all open-files the same number of times as you added them before destroying the node. Otherwise, you will leak memory. This is locked against concurrent access internally. **Return** 0 on success, negative error code on internal failure (out-of-mem)h](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM*hj,ubj)}(hhh](j)}(h4``struct drm_vma_offset_node *node`` Node to modify h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjQh]h struct drm_vma_offset_node *node}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM'hjKubj )}(hhh]h)}(hNode to modifyh]hNode to modify}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM'hjgubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jhjfhM'hjHubj)}(h/``struct drm_file *tag`` Tag of file to remove h](j)}(h``struct drm_file *tag``h]j)}(hjh]hstruct drm_file *tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM(hjubj )}(hhh]h)}(hTag of file to removeh]hTag of file to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hjśh]h Description}(hjǛhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÛubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM*hj,ubh)}(h~Add **tag** to the list of allowed open-files for this node. If **tag** is already on this list, the ref-count is incremented.h](hAdd }(hjۛhhhNhNubj)}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۛubh5 to the list of allowed open-files for this node. If }(hjۛhhhNhNubj)}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۛubh7 is already on this list, the ref-count is incremented.}(hjۛhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM*hj,ubh)}(hThe list of allowed-users is preserved across drm_vma_offset_add() and drm_vma_offset_remove() calls. You may even call it if the node is currently not added to any offset-manager.h]hThe list of allowed-users is preserved across drm_vma_offset_add() and drm_vma_offset_remove() calls. You may even call it if the node is currently not added to any offset-manager.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM-hj,ubh)}(hYou must remove all open-files the same number of times as you added them before destroying the node. Otherwise, you will leak memory.h]hYou must remove all open-files the same number of times as you added them before destroying the node. Otherwise, you will leak memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM1hj,ubh)}(h4This is locked against concurrent access internally.h]h4This is locked against concurrent access internally.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM4hj,ubh)}(h **Return**h]j)}(hj=h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM6hj,ubh)}(hB0 on success, negative error code on internal failure (out-of-mem)h]hB0 on success, negative error code on internal failure (out-of-mem)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM6hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_vma_node_allow_once (C function)c.drm_vma_node_allow_oncehNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hTint drm_vma_node_allow_once (struct drm_vma_offset_node *node, struct drm_file *tag)h]j>)}(hSint drm_vma_node_allow_once(struct drm_vma_offset_node *node, struct drm_file *tag)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj~hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMRubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~hhhjhMRubjg)}(hdrm_vma_node_allow_onceh]jm)}(hdrm_vma_node_allow_onceh]hdrm_vma_node_allow_once}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj~hhhjhMRubj)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj̜hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjݜhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjڜubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjߜmodnameN classnameNjj)}j]j)}jjsbc.drm_vma_node_allow_onceasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *tagh](jD)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj-ubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-ubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]jc.drm_vma_node_allow_onceasbuh1hhj-ubjV)}(h h]h }(hjmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjm)}(htagh]htag}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhMRubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjzhhhjhMRubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1j7hjhMRhjwhhubj)}(hhh]h)}(h&Add open-file to list of allowed usersh]h&Add open-file to list of allowed users}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM@hjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjʝjjʝjjjuh1j2hhhj9zhNhNubj)}(hXz**Parameters** ``struct drm_vma_offset_node *node`` Node to modify ``struct drm_file *tag`` Tag of file to remove **Description** Add **tag** to the list of allowed open-files for this node. The list of allowed-users is preserved across drm_vma_offset_add() and drm_vma_offset_remove() calls. You may even call it if the node is currently not added to any offset-manager. This is not ref-counted unlike drm_vma_node_allow() hence drm_vma_node_revoke() should only be called once after this. This is locked against concurrent access internally. **Return** 0 on success, negative error code on internal failure (out-of-mem)h](h)}(h**Parameters**h]j)}(hjԝh]h Parameters}(hj֝hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҝubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMDhjΝubj)}(hhh](j)}(h4``struct drm_vma_offset_node *node`` Node to modify h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMAhjubj )}(hhh]h)}(hNode to modifyh]hNode to modify}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjubj)}(h/``struct drm_file *tag`` Tag of file to remove h](j)}(h``struct drm_file *tag``h]j)}(hj,h]hstruct drm_file *tag}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMBhj&ubj )}(hhh]h)}(hTag of file to removeh]hTag of file to remove}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMBhjBubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMBhjubeh}(h]h ]h"]h$]h&]uh1jhjΝubh)}(h**Description**h]j)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMDhjΝubh)}(h)}(hPvoid drm_vma_node_revoke(struct drm_vma_offset_node *node, struct drm_file *tag)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMeubjV)}(h h]h }(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj hMeubjg)}(hdrm_vma_node_revokeh]jm)}(hdrm_vma_node_revokeh]hdrm_vma_node_revoke}(hj3hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj hMeubj)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjKubjV)}(h h]h }(hj\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j)}jj5sbc.drm_vma_node_revokeasbuh1hhjKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(hstruct drm_file *tagh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjΟhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjߟhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjܟubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_vma_node_revokeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(htagh]htag}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMeubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj hMeubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj hMehjhhubj)}(hhh]h)}(h+Remove open-file from list of allowed usersh]h+Remove open-file from list of allowed users}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMYhj?hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1j2hhhj9zhNhNubj)}(hX**Parameters** ``struct drm_vma_offset_node *node`` Node to modify ``struct drm_file *tag`` Tag of file to remove **Description** Decrement the ref-count of **tag** in the list of allowed open-files on **node**. If the ref-count drops to zero, remove **tag** from the list. You must call this once for every drm_vma_node_allow() on **tag**. This is locked against concurrent access internally. If **tag** is not on the list, nothing is done.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM]hj^ubj)}(hhh](j)}(h4``struct drm_vma_offset_node *node`` Node to modify h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMZhj}ubj )}(hhh]h)}(hNode to modifyh]hNode to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjzubj)}(h/``struct drm_file *tag`` Tag of file to remove h](j)}(h``struct drm_file *tag``h]j)}(hjh]hstruct drm_file *tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM[hjubj )}(hhh]h)}(hTag of file to removeh]hTag of file to remove}(hjՠhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjѠhM[hjҠubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjѠhM[hjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM]hj^ubh)}(hDecrement the ref-count of **tag** in the list of allowed open-files on **node**. If the ref-count drops to zero, remove **tag** from the list. You must call this once for every drm_vma_node_allow() on **tag**.h](hDecrement the ref-count of }(hj hhhNhNubj)}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh& in the list of allowed open-files on }(hj hhhNhNubj)}(h**node**h]hnode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh). If the ref-count drops to zero, remove }(hj hhhNhNubj)}(h**tag**h]htag}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhJ from the list. You must call this once for every drm_vma_node_allow() on }(hj hhhNhNubj)}(h**tag**h]htag}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chM]hj^ubh)}(h4This is locked against concurrent access internally.h]h4This is locked against concurrent access internally.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMahj^ubh)}(h/If **tag** is not on the list, nothing is done.h](hIf }(hjshhhNhNubj)}(h**tag**h]htag}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh% is not on the list, nothing is done.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMchj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_vma_node_is_allowed (C function)c.drm_vma_node_is_allowedhNtauh1j!hj9zhhhNhNubj3)}(hhh](j8)}(hUbool drm_vma_node_is_allowed (struct drm_vma_offset_node *node, struct drm_file *tag)h]j>)}(hTbool drm_vma_node_is_allowed(struct drm_vma_offset_node *node, struct drm_file *tag)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMubjV)}(h h]h }(hj¡hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_vma_node_is_allowedh]jm)}(hdrm_vma_node_is_allowedh]hdrm_vma_node_is_allowed}(hjԡhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjСubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](j)}(h struct drm_vma_offset_node *nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj֡sbc.drm_vma_node_is_allowedasbuh1hhjubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hjIhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *tagh](jD)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj^ubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^ubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j*c.drm_vma_node_is_allowedasbuh1hhj^ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjm)}(htagh]htag}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h,Check whether an open-file is granted accessh]h,Check whether an open-file is granted access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj9zhNhNubj)}(hXb**Parameters** ``struct drm_vma_offset_node *node`` Node to check ``struct drm_file *tag`` Tag of file to remove **Description** Search the list in **node** whether **tag** is currently on the list of allowed open-files (see drm_vma_node_allow()). This is locked against concurrent access internally. **Return** true if **filp** is on the listh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjubj)}(hhh](j)}(h3``struct drm_vma_offset_node *node`` Node to check h](j)}(h$``struct drm_vma_offset_node *node``h]j)}(hj$h]h struct drm_vma_offset_node *node}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjubj )}(hhh]h)}(h Node to checkh]h Node to check}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(h/``struct drm_file *tag`` Tag of file to remove h](j)}(h``struct drm_file *tag``h]j)}(hj]h]hstruct drm_file *tag}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjWubj )}(hhh]h)}(hTag of file to removeh]hTag of file to remove}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjubh)}(hvSearch the list in **node** whether **tag** is currently on the list of allowed open-files (see drm_vma_node_allow()).h](hSearch the list in }(hjhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh whether }(hjhhhNhNubj)}(h**tag**h]htag}(hjȣhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhK is currently on the list of allowed open-files (see drm_vma_node_allow()).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjubh)}(h4This is locked against concurrent access internally.h]h4This is locked against concurrent access internally.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjubh)}(htrue if **filp** is on the listh](htrue if }(hjhhhNhNubj)}(h**filp**h]hfilp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is on the list}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:412: ./drivers/gpu/drm/drm_vma_manager.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9zhhhNhNubhtarget)}(h.. _prime_buffer_sharing:h]h}(h]h ]h"]h$]h&]refidprime-buffer-sharinguh1j0hMhj9zhhhhubeh}(h]vma-offset-managerah ]h"]vma offset managerah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hPRIME Buffer Sharingh]hPRIME Buffer Sharing}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhhhhhMubh)}(hPRIME is the cross device buffer sharing framework in drm, originally created for the OPTIMUS range of multi-gpu platforms. To userspace PRIME buffers are dma-buf based file descriptors.h]hPRIME is the cross device buffer sharing framework in drm, originally created for the OPTIMUS range of multi-gpu platforms. To userspace PRIME buffers are dma-buf based file descriptors.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjFhhubh)}(hhh](h)}(hOverview and Lifetime Rulesh]hOverview and Lifetime Rules}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehhhhhMubh)}(hX-Similar to GEM global names, PRIME file descriptors are also used to share buffer objects across processes. They offer additional security: as file descriptors must be explicitly sent over UNIX domain sockets to be shared between applications, they can't be guessed like the globally unique GEM names.h]hX/Similar to GEM global names, PRIME file descriptors are also used to share buffer objects across processes. They offer additional security: as file descriptors must be explicitly sent over UNIX domain sockets to be shared between applications, they can’t be guessed like the globally unique GEM names.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:427: ./drivers/gpu/drm/drm_prime.chK.hjehhubh)}(hXDrivers that support the PRIME API implement the drm_gem_object_funcs.export and :c:type:`drm_driver.gem_prime_import ` hooks. :c:type:`dma_buf_ops` implementations for drivers are all individually exported for drivers which need to overwrite or reimplement some of them.h](hQDrivers that support the PRIME API implement the drm_gem_object_funcs.export and }(hjhhhNhNubh)}(h2:c:type:`drm_driver.gem_prime_import `h]j)}(hjh]hdrm_driver.gem_prime_import}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:427: ./drivers/gpu/drm/drm_prime.chK4hjubh hooks. }(hjhhhNhNubh)}(h:c:type:`dma_buf_ops`h]j)}(hjh]h dma_buf_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhjhK4hjubh{ implementations for drivers are all individually exported for drivers which need to overwrite or reimplement some of them.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK4hjehhubh)}(hhh](h)}(h"Reference Counting for GEM Driversh]h"Reference Counting for GEM Drivers}(hjݤhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjڤhNhNubh)}(hXOn the export the :c:type:`dma_buf` holds a reference to the exported buffer object, usually a :c:type:`drm_gem_object`. It takes this reference in the PRIME_HANDLE_TO_FD IOCTL, when it first calls :c:type:`drm_gem_object_funcs.export ` and stores the exporting GEM object in the :c:type:`dma_buf.priv ` field. This reference needs to be released when the final reference to the :c:type:`dma_buf` itself is dropped and its :c:type:`dma_buf_ops.release ` function is called. For GEM-based drivers, the :c:type:`dma_buf` should be exported using drm_gem_dmabuf_export() and then released by drm_gem_dmabuf_release().h](hOn the export the }(hjhhhNhNubh)}(h:c:type:`dma_buf`h]j)}(hjh]hdma_buf}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_bufuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:427: ./drivers/gpu/drm/drm_prime.chK`h]j)}(hj<h]hdrm_gem_object_funcs.export}(hj>hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhjhK`h]j)}(hj_h]h dma_buf.priv}(hjahhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_bufuh1hhjhK`h]j)}(hjh]hdma_buf_ops.release}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhjhK dma-buf -> exported GEM bo. A further complication are the lookup caches for import and export. These are required to guarantee that any given object will always have only one unique userspace handle. This is required to allow userspace to detect duplicated imports, since some GEM drivers do fail command submissions if a given buffer object is listed more than once. These import and export caches in :c:type:`drm_prime_file_private` only retain a weak reference, which is cleaned up when the corresponding object is released.h](hXThus the chain of references always flows in one direction, avoiding loops: importing GEM object -> dma-buf -> exported GEM bo. A further complication are the lookup caches for import and export. These are required to guarantee that any given object will always have only one unique userspace handle. This is required to allow userspace to detect duplicated imports, since some GEM drivers do fail command submissions if a given buffer object is listed more than once. These import and export caches in }(hjhhhNhNubh)}(h :c:type:`drm_prime_file_private`h]j)}(hjh]hdrm_prime_file_private}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_prime_file_privateuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:427: ./drivers/gpu/drm/drm_prime.chKEhjubh] only retain a weak reference, which is cleaned up when the corresponding object is released.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKEhjڤubh)}(hX=Self-importing: If userspace is using PRIME as a replacement for flink then it will get a fd->handle request for a GEM object that it created. Drivers should detect this situation and return back the underlying object from the dma-buf private. For GEM based drivers this is handled in drm_gem_prime_import() already.h]hX=Self-importing: If userspace is using PRIME as a replacement for flink then it will get a fd->handle request for a GEM object that it created. Drivers should detect this situation and return back the underlying object from the dma-buf private. For GEM based drivers this is handled in drm_gem_prime_import() already.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:427: ./drivers/gpu/drm/drm_prime.chKOhjڤubeh}(h]"reference-counting-for-gem-driversah ]h"]"reference counting for gem driversah$]h&]uh1hhjehhhNhNubeh}(h]overview-and-lifetime-rulesah ]h"]overview and lifetime rulesah$]h&]uh1hhjFhhhhhMubh)}(hhh](h)}(hPRIME Helper Functionsh]hPRIME Helper Functions}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hhhhhMubh)}(hX}Drivers can implement :c:type:`drm_gem_object_funcs.export ` and :c:type:`drm_driver.gem_prime_import ` in terms of simpler APIs by using the helper functions drm_gem_prime_export() and drm_gem_prime_import(). These functions implement dma-buf support in terms of some lower-level helpers, which are again exported for drivers to use individually:h](hDrivers can implement }(hjQhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j)}(hj[h]hdrm_gem_object_funcs.export}(hj]hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:433: ./drivers/gpu/drm/drm_prime.chM%hjQubh and }(hjQhhhNhNubh)}(h2:c:type:`drm_driver.gem_prime_import `h]j)}(hjh]hdrm_driver.gem_prime_import}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhjxhM%hjQubh in terms of simpler APIs by using the helper functions drm_gem_prime_export() and drm_gem_prime_import(). These functions implement dma-buf support in terms of some lower-level helpers, which are again exported for drivers to use individually:}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhM%hj@hhubh)}(hhh](h)}(hExporting buffersh]hExporting buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hXOptional pinning of buffers is handled at dma-buf attach and detach time in drm_gem_map_attach() and drm_gem_map_detach(). Backing storage itself is handled by drm_gem_map_dma_buf() and drm_gem_unmap_dma_buf(), which relies on :c:type:`drm_gem_object_funcs.get_sg_table `. If :c:type:`drm_gem_object_funcs.get_sg_table ` is unimplemented, exports into another device are rejected.h](hOptional pinning of buffers is handled at dma-buf attach and detach time in drm_gem_map_attach() and drm_gem_map_detach(). Backing storage itself is handled by drm_gem_map_dma_buf() and drm_gem_unmap_dma_buf(), which relies on }(hjhhhNhNubh)}(hB:c:type:`drm_gem_object_funcs.get_sg_table `h]j)}(hjh]h!drm_gem_object_funcs.get_sg_table}(hjæhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:433: ./drivers/gpu/drm/drm_prime.chM.hjubh. If }(hjhhhNhNubh)}(hB:c:type:`drm_gem_object_funcs.get_sg_table `h]j)}(hjh]h!drm_gem_object_funcs.get_sg_table}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhjަhM.hjubh< is unimplemented, exports into another device are rejected.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjަhM.hjubh)}(hFor kernel-internal access there's drm_gem_dmabuf_vmap() and drm_gem_dmabuf_vunmap(). Userspace mmap support is provided by drm_gem_dmabuf_mmap().h]hFor kernel-internal access there’s drm_gem_dmabuf_vmap() and drm_gem_dmabuf_vunmap(). Userspace mmap support is provided by drm_gem_dmabuf_mmap().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:433: ./drivers/gpu/drm/drm_prime.chM4hjubh)}(hNote that these export helpers can only be used if the underlying backing storage is fully coherent and either permanently pinned, or it is safe to pin it indefinitely.h]hNote that these export helpers can only be used if the underlying backing storage is fully coherent and either permanently pinned, or it is safe to pin it indefinitely.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:433: ./drivers/gpu/drm/drm_prime.chM8hjubh)}(hGFIXME: The underlying helper functions are named rather inconsistently.h]hGFIXME: The underlying helper functions are named rather inconsistently.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:433: ./drivers/gpu/drm/drm_prime.chM<hjubeh}(h]exporting-buffersah ]h"]exporting buffersah$]h&]uh1hhj@hhhNhNubh)}(hhh](h)}(hImporting buffersh]hImporting buffers}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhNhNubh)}(hvImporting dma-bufs using drm_gem_prime_import() relies on :c:type:`drm_driver.gem_prime_import_sg_table `.h](h:Importing dma-bufs using drm_gem_prime_import() relies on }(hjRhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j)}(hj\h]h$drm_driver.gem_prime_import_sg_table}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:433: ./drivers/gpu/drm/drm_prime.chMAhjRubh.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMAhjAubh)}(hNote that similarly to the export helpers this permanently pins the underlying backing storage. Which is ok for scanout, but is not the best option for sharing lots of buffers for rendering.h]hNote that similarly to the export helpers this permanently pins the underlying backing storage. Which is ok for scanout, but is not the best option for sharing lots of buffers for rendering.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:433: ./drivers/gpu/drm/drm_prime.chMDhjAubeh}(h]importing-buffersah ]h"]importing buffersah$]h&]uh1hhj@hhhNhNubeh}(h]prime-helper-functionsah ]h"]prime helper functionsah$]h&]uh1hhjFhhhhhMubh)}(hhh](h)}(hPRIME Function Referencesh]hPRIME Function References}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_prime_file_private (C struct)c.drm_prime_file_privatehNtauh1j!hjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:439: ./include/drm/drm_prime.hhNubj3)}(hhh](j8)}(hdrm_prime_file_privateh]j>)}(hstruct drm_prime_file_privateh](jD)}(hjh]hstruct}(hjΧhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjʧhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:439: ./include/drm/drm_prime.hhKubjV)}(h h]h }(hjܧhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjʧhhhjۧhKubjg)}(hdrm_prime_file_privateh]jm)}(hjȧh]hdrm_prime_file_private}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjʧhhhjۧhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjƧhhhjۧhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjۧhKhjçhhubj)}(hhh]h)}(hper-file tracking for PRIMEh]hper-file tracking for PRIME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:439: ./include/drm/drm_prime.hhK(hj hhubah}(h]h ]h"]h$]h&]uh1jhjçhhhjۧhKubeh}(h]h ](jstructeh"]h$]h&]jjjj(jj(jjjuh1j2hhhjhj§hNubj)}(hE**Definition**:: struct drm_prime_file_private { }; **Members**h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh:}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:439: ./include/drm/drm_prime.hhK,hj,ubjT)}(h"struct drm_prime_file_private { };h]h"struct drm_prime_file_private { };}hjMsbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:439: ./include/drm/drm_prime.hhK.hj,ubh)}(h **Members**h]j)}(hj^h]hMembers}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:439: ./include/drm/drm_prime.hhK1hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj§hNubh)}(h**Description**h]j)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:439: ./include/drm/drm_prime.hhK4hjhhubh)}(hThis just contains the internal :c:type:`struct dma_buf ` and handle caches for each :c:type:`struct drm_file ` used by the PRIME core code.h](h This just contains the internal }(hjhhhNhNubh)}(h":c:type:`struct dma_buf `h]j)}(hjh]hstruct dma_buf}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_bufuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:439: ./include/drm/drm_prime.hhK)hjubh and handle caches for each }(hjhhhNhNubh)}(h$:c:type:`struct drm_file `h]j)}(hjh]hstruct drm_file}(hjèhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_fileuh1hhjhK)hjubh used by the PRIME core code.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK)hjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gem_dmabuf_export (C function)c.drm_gem_dmabuf_exporthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hestruct dma_buf * drm_gem_dmabuf_export (struct drm_device *dev, struct dma_buf_export_info *exp_info)h]j>)}(hcstruct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev, struct dma_buf_export_info *exp_info)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j)}jdrm_gem_dmabuf_exportsbc.drm_gem_dmabuf_exportasbuh1hhjhhhjhKubjV)}(h h]h }(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubjg)}(hdrm_gem_dmabuf_exporth]jm)}(hj>h]hdrm_gem_dmabuf_export}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubj)}(h>(struct drm_device *dev, struct dma_buf_export_info *exp_info)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjwubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j<c.drm_gem_dmabuf_exportasbuh1hhjwubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubj)}(hjh]h*}(hjũhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjm)}(hdevh]hdev}(hjҩhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h$struct dma_buf_export_info *exp_infoh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_buf_export_infoh]hdma_buf_export_info}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j<c.drm_gem_dmabuf_exportasbuh1hhjubjV)}(h h]h }(hj'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hexp_infoh]hexp_info}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h/:c:type:`dma_buf` export implementation for GEMh](h)}(h:c:type:`dma_buf`h]j)}(hjrh]hdma_buf}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j<c.drm_gem_dmabuf_exportasbj3dma_bufuh1hhjhKhjlubh export implementation for GEM}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chKhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX4**Parameters** ``struct drm_device *dev`` parent device for the exported dmabuf ``struct dma_buf_export_info *exp_info`` the export information used by dma_buf_export() **Description** This wraps dma_buf_export() for use by generic GEM drivers that are using drm_gem_dmabuf_release(). In addition to calling dma_buf_export(), we take a reference to the :c:type:`drm_device` and the exported :c:type:`drm_gem_object` (stored in :c:type:`dma_buf_export_info.priv `) which is released by drm_gem_dmabuf_release(). Returns the new dmabuf.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chKhjubj)}(hhh](j)}(hA``struct drm_device *dev`` parent device for the exported dmabuf h](j)}(h``struct drm_device *dev``h]j)}(hjѪh]hstruct drm_device *dev}(hjӪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϪubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chKhj˪ubj )}(hhh]h)}(h%parent device for the exported dmabufh]h%parent device for the exported dmabuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj˪ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjȪubj)}(hY``struct dma_buf_export_info *exp_info`` the export information used by dma_buf_export() h](j)}(h(``struct dma_buf_export_info *exp_info``h]j)}(hj h]h$struct dma_buf_export_info *exp_info}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chKhjubj )}(hhh]h)}(h/the export information used by dma_buf_export()h]h/the export information used by dma_buf_export()}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjȪubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chKhjubh)}(hXZThis wraps dma_buf_export() for use by generic GEM drivers that are using drm_gem_dmabuf_release(). In addition to calling dma_buf_export(), we take a reference to the :c:type:`drm_device` and the exported :c:type:`drm_gem_object` (stored in :c:type:`dma_buf_export_info.priv `) which is released by drm_gem_dmabuf_release().h](hThis wraps dma_buf_export() for use by generic GEM drivers that are using drm_gem_dmabuf_release(). In addition to calling dma_buf_export(), we take a reference to the }(hj[hhhNhNubh)}(h:c:type:`drm_device`h]j)}(hjeh]h drm_device}(hjghhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chKhj[ubh and the exported }(hj[hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhKhj[ubh (stored in }(hj[hhhNhNubh)}(h8:c:type:`dma_buf_export_info.priv `h]j)}(hjh]hdma_buf_export_info.priv}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_buf_export_infouh1hhjhKhj[ubh0) which is released by drm_gem_dmabuf_release().}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(hReturns the new dmabuf.h]hReturns the new dmabuf.}(hjӫhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_gem_dmabuf_release (C function)c.drm_gem_dmabuf_releasehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h5void drm_gem_dmabuf_release (struct dma_buf *dma_buf)h]j>)}(h4void drm_gem_dmabuf_release(struct dma_buf *dma_buf)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM ubjg)}(hdrm_gem_dmabuf_releaseh]jm)}(hdrm_gem_dmabuf_releaseh]hdrm_gem_dmabuf_release}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM ubj)}(h(struct dma_buf *dma_buf)h]j)}(hstruct dma_buf *dma_bufh](jD)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj;ubjV)}(h h]h }(hjLhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj;ubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j)}jj%sbc.drm_gem_dmabuf_releaseasbuh1hhj;ubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj;ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM hjhhubj)}(hhh]h)}(h0:c:type:`dma_buf` release implementation for GEMh](h)}(h:c:type:`dma_buf`h]j)}(hjȬh]hdma_buf}(hjʬhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjƬubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jyc.drm_gem_dmabuf_releaseasbj3dma_bufuh1hhjhKhj¬ubh release implementation for GEM}(hj¬hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXG**Parameters** ``struct dma_buf *dma_buf`` buffer to be released **Description** Generic release function for dma_bufs exported as PRIME buffers. GEM drivers must use this in their :c:type:`dma_buf_ops` structure as the release callback. drm_gem_dmabuf_release() should be used in conjunction with drm_gem_dmabuf_export().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM hjubj)}(hhh]j)}(h2``struct dma_buf *dma_buf`` buffer to be released h](j)}(h``struct dma_buf *dma_buf``h]j)}(hj'h]hstruct dma_buf *dma_buf}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj!ubj )}(hhh]h)}(hbuffer to be releasedh]hbuffer to be released}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj=ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hGeneric release function for dma_bufs exported as PRIME buffers. GEM drivers must use this in their :c:type:`dma_buf_ops` structure as the release callback. drm_gem_dmabuf_release() should be used in conjunction with drm_gem_dmabuf_export().h](hdGeneric release function for dma_bufs exported as PRIME buffers. GEM drivers must use this in their }(hjxhhhNhNubh)}(h:c:type:`dma_buf_ops`h]j)}(hjh]h dma_buf_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjxubhx structure as the release callback. drm_gem_dmabuf_release() should be used in conjunction with drm_gem_dmabuf_export().}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_gem_prime_fd_to_handle (C function)c.drm_gem_prime_fd_to_handlehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hsint drm_gem_prime_fd_to_handle (struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle)h]j>)}(hrint drm_gem_prime_fd_to_handle(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle)h](jc)}(hinth]hint}(hjʭhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjƭhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM'ubjV)}(h h]h }(hj٭hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjƭhhhjحhM'ubjg)}(hdrm_gem_prime_fd_to_handleh]jm)}(hdrm_gem_prime_fd_to_handleh]hdrm_gem_prime_fd_to_handle}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjƭhhhjحhM'ubj)}(hT(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jjsbc.drm_gem_prime_fd_to_handleasbuh1hhjubjV)}(h h]h }(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdevh]hdev}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *file_privh](jD)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jAc.drm_gem_prime_fd_to_handleasbuh1hhjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubj)}(hjh]h*}(hjîhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjm)}(h file_privh]h file_priv}(hjЮhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int prime_fdh](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hprime_fdh]hprime_fd}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t *handleh](h)}(hhh]jm)}(huint32_th]huint32_t}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]jAc.drm_gem_prime_fd_to_handleasbuh1hhjubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hhandleh]hhandle}(hjZhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjƭhhhjحhM'ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj­hhhjحhM'ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjحhM'hjhhubj)}(hhh]h)}(h%PRIME import function for GEM driversh]h%PRIME import function for GEM drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjحhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` drm_device to import into ``struct drm_file *file_priv`` drm file-private structure ``int prime_fd`` fd id of the dma-buf which should be imported ``uint32_t *handle`` pointer to storage for the handle of the imported buffer object **Description** This is the PRIME import function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual importing of GEM object from the dma-buf is done through the :c:type:`drm_driver.gem_prime_import ` driver callback. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj)}(hhh](j)}(h5``struct drm_device *dev`` drm_device to import into h](j)}(h``struct drm_device *dev``h]j)}(hjůh]hstruct drm_device *dev}(hjǯhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjïubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hdrm_device to import intoh]hdrm_device to import into}(hjޯhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjگhMhjۯubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjگhMhjubj)}(h:``struct drm_file *file_priv`` drm file-private structure h](j)}(h``struct drm_file *file_priv``h]j)}(hjh]hstruct drm_file *file_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hdrm file-private structureh]hdrm file-private structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h?``int prime_fd`` fd id of the dma-buf which should be imported h](j)}(h``int prime_fd``h]j)}(hj7h]h int prime_fd}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj1ubj )}(hhh]h)}(h-fd id of the dma-buf which should be importedh]h-fd id of the dma-buf which should be imported}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjMubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubj)}(hU``uint32_t *handle`` pointer to storage for the handle of the imported buffer object h](j)}(h``uint32_t *handle``h]j)}(hjph]huint32_t *handle}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjjubj )}(hhh]h)}(h?pointer to storage for the handle of the imported buffer objecth]h?pointer to storage for the handle of the imported buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM hjubh)}(hXThis is the PRIME import function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual importing of GEM object from the dma-buf is done through the :c:type:`drm_driver.gem_prime_import ` driver callback.h](hThis is the PRIME import function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual importing of GEM object from the dma-buf is done through the }(hjhhhNhNubh)}(h2:c:type:`drm_driver.gem_prime_import `h]j)}(hj˰h]hdrm_driver.gem_prime_import}(hjͰhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjɰubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM hjubh driver callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.+drm_gem_prime_handle_to_dmabuf (C function) c.drm_gem_prime_handle_to_dmabufhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hstruct dma_buf * drm_gem_prime_handle_to_dmabuf (struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags)h]j>)}(hstruct dma_buf *drm_gem_prime_handle_to_dmabuf(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags)h](jD)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hj0hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj/hMubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hjAhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j)}jdrm_gem_prime_handle_to_dmabufsb c.drm_gem_prime_handle_to_dmabufasbuh1hhjhhhj/hMubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj/hMubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hMubjg)}(hdrm_gem_prime_handle_to_dmabufh]jm)}(hj_h]hdrm_gem_prime_handle_to_dmabuf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj/hMubj)}(hU(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j] c.drm_gem_prime_handle_to_dmabufasbuh1hhjubjV)}(h h]h }(hjرhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *file_privh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hj*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j] c.drm_gem_prime_handle_to_dmabufasbuh1hhjubjV)}(h h]h }(hjHhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h file_privh]h file_priv}(hjchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t handleh](h)}(hhh]jm)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j] c.drm_gem_prime_handle_to_dmabufasbuh1hhjxubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjxubjm)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t flagsh](h)}(hhh]jm)}(huint32_th]huint32_t}(hjDzhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjɲmodnameN classnameNjj)}j]j] c.drm_gem_prime_handle_to_dmabufasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj/hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj/hMhjhhubj)}(hhh]h)}(h%PRIME export function for GEM driversh]h%PRIME export function for GEM drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$] h&]uh1jhjhhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jj5jjjuh1j2hhhjhNhNubj)}(hXy**Parameters** ``struct drm_device *dev`` dev to export the buffer from ``struct drm_file *file_priv`` drm file-private structure ``uint32_t handle`` buffer handle to export ``uint32_t flags`` flags like DRM_CLOEXEC **Description** This is the PRIME export function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual exporting from GEM object to a dma-buf is done through the :c:type:`drm_gem_object_funcs.export ` callback. Unlike drm_gem_prime_handle_to_fd(), it returns the struct dma_buf it has created, without attaching it to any file descriptors. The difference between those two is similar to that between anon_inode_getfile() and anon_inode_getfd(); insertion into descriptor table is something you can not revert if any cleanup is needed, so the descriptor-returning variants should only be used when you are past the last failure exit and the only thing left is passing the new file descriptor to userland. When all you need is the object itself or when you need to do something else that might fail, use that one instead.h](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj9ubj)}(hhh](j)}(h9``struct drm_device *dev`` dev to export the buffer from h](j)}(h``struct drm_device *dev``h]j)}(hj^h]hstruct drm_device *dev}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjXubj )}(hhh]h)}(hdev to export the buffer fromh]hdev to export the buffer from}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjtubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubj)}(h:``struct drm_file *file_priv`` drm file-private structure h](j)}(h``struct drm_file *file_priv``h]j)}(hjh]hstruct drm_file *file_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hdrm file-private structureh]hdrm file-private structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(h,``uint32_t handle`` buffer handle to export h](j)}(h``uint32_t handle``h]j)}(hjгh]huint32_t handle}(hjҳhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjγubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjʳubj )}(hhh]h)}(hbuffer handle to exporth]hbuffer handle to export}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjʳubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(h*``uint32_t flags`` flags like DRM_CLOEXEC h](j)}(h``uint32_t flags``h]j)}(hj h]huint32_t flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hflags like DRM_CLOEXECh]hflags like DRM_CLOEXEC}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj9ubh)}(hX This is the PRIME export function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual exporting from GEM object to a dma-buf is done through the :c:type:`drm_gem_object_funcs.export ` callback.h](hThis is the PRIME export function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual exporting from GEM object to a dma-buf is done through the }(hjZhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j)}(hjdh]hdrm_gem_object_funcs.export}(hjfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjZubh callback.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj9ubh)}(hXaUnlike drm_gem_prime_handle_to_fd(), it returns the struct dma_buf it has created, without attaching it to any file descriptors. The difference between those two is similar to that between anon_inode_getfile() and anon_inode_getfd(); insertion into descriptor table is something you can not revert if any cleanup is needed, so the descriptor-returning variants should only be used when you are past the last failure exit and the only thing left is passing the new file descriptor to userland. When all you need is the object itself or when you need to do something else that might fail, use that one instead.h]hXaUnlike drm_gem_prime_handle_to_fd(), it returns the struct dma_buf it has created, without attaching it to any file descriptors. The difference between those two is similar to that between anon_inode_getfile() and anon_inode_getfd(); insertion into descriptor table is something you can not revert if any cleanup is needed, so the descriptor-returning variants should only be used when you are past the last failure exit and the only thing left is passing the new file descriptor to userland. When all you need is the object itself or when you need to do something else that might fail, use that one instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_gem_prime_handle_to_fd (C function)c.drm_gem_prime_handle_to_fdhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hint drm_gem_prime_handle_to_fd (struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd)h]j>)}(hint drm_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjʴhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjɴhMubjg)}(hdrm_gem_prime_handle_to_fdh]jm)}(hdrm_gem_prime_handle_to_fdh]hdrm_gem_prime_handle_to_fd}(hjܴhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjشubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjɴhMubj)}(hd(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj޴sbc.drm_gem_prime_handle_to_fdasbuh1hhjubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdevh]hdev}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *file_privh](jD)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjfubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j2c.drm_gem_prime_handle_to_fdasbuh1hhjfubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjm)}(h file_privh]h file_priv}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t handleh](h)}(hhh]jm)}(huint32_th]huint32_t}(hjݵhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjڵubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjߵmodnameN classnameNjj)}j]j2c.drm_gem_prime_handle_to_fdasbuh1hhjֵubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjֵubjm)}(hhandleh]hhandle}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjֵubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t flagsh](h)}(hhh]jm)}(huint32_th]huint32_t}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j2c.drm_gem_prime_handle_to_fdasbuh1hhjubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hflagsh]hflags}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int *prime_fdh](jc)}(hinth]hint}(hjjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjfubjV)}(h h]h }(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjm)}(hprime_fdh]hprime_fd}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjɴhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjɴhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjɴhMhjhhubj)}(hhh]h)}(h%PRIME export function for GEM driversh]h%PRIME export function for GEM drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjɴhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjնjjնjjjuh1j2hhhjhNhNubj)}(hXb**Parameters** ``struct drm_device *dev`` dev to export the buffer from ``struct drm_file *file_priv`` drm file-private structure ``uint32_t handle`` buffer handle to export ``uint32_t flags`` flags like DRM_CLOEXEC ``int *prime_fd`` pointer to storage for the fd id of the create dma-buf **Description** This is the PRIME export function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual exporting from GEM object to a dma-buf is done through the :c:type:`drm_gem_object_funcs.export ` callback.h](h)}(h**Parameters**h]j)}(hj߶h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݶubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjٶubj)}(hhh](j)}(h9``struct drm_device *dev`` dev to export the buffer from h](j)}(h``struct drm_device *dev``h]j)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hdev to export the buffer fromh]hdev to export the buffer from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``struct drm_file *file_priv`` drm file-private structure h](j)}(h``struct drm_file *file_priv``h]j)}(hj7h]hstruct drm_file *file_priv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj1ubj )}(hhh]h)}(hdrm file-private structureh]hdrm file-private structure}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjMubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubj)}(h,``uint32_t handle`` buffer handle to export h](j)}(h``uint32_t handle``h]j)}(hjph]huint32_t handle}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjjubj )}(hhh]h)}(hbuffer handle to exporth]hbuffer handle to export}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``uint32_t flags`` flags like DRM_CLOEXEC h](j)}(h``uint32_t flags``h]j)}(hjh]huint32_t flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hflags like DRM_CLOEXECh]hflags like DRM_CLOEXEC}(hj·hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hI``int *prime_fd`` pointer to storage for the fd id of the create dma-buf h](j)}(h``int *prime_fd``h]j)}(hjh]h int *prime_fd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjܷubj )}(hhh]h)}(h6pointer to storage for the fd id of the create dma-bufh]h6pointer to storage for the fd id of the create dma-buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjܷubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjٶubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjٶubh)}(hX This is the PRIME export function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual exporting from GEM object to a dma-buf is done through the :c:type:`drm_gem_object_funcs.export ` callback.h](hThis is the PRIME export function which must be used mandatorily by GEM drivers to ensure correct lifetime management of the underlying GEM object. The actual exporting from GEM object to a dma-buf is done through the }(hj3hhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j)}(hj=h]hdrm_gem_object_funcs.export}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj3ubh callback.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhMhjٶubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_map_attach (C function)c.drm_gem_map_attachhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hSint drm_gem_map_attach (struct dma_buf *dma_buf, struct dma_buf_attachment *attach)h]j>)}(hRint drm_gem_map_attach(struct dma_buf *dma_buf, struct dma_buf_attachment *attach)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMVubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMVubjg)}(hdrm_gem_map_attachh]jm)}(hdrm_gem_map_attachh]hdrm_gem_map_attach}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMVubj)}(h<(struct dma_buf *dma_buf, struct dma_buf_attachment *attach)h](j)}(hstruct dma_buf *dma_bufh](jD)}(hjh]hstruct}(hj¸hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjϸhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjݸubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_map_attachasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct dma_buf_attachment *attachh](jD)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj0ubjV)}(h h]h }(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj0ubh)}(hhh]jm)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jc.drm_gem_map_attachasbuh1hhj0ubjV)}(h h]h }(hjphhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj0ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjm)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMVubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj}hhhjhMVubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1j7hjhMVhjzhhubj)}(hhh]h)}(h%dma_buf attach implementation for GEMh]h%dma_buf attach implementation for GEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjj͹jj͹jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct dma_buf *dma_buf`` buffer to attach device to ``struct dma_buf_attachment *attach`` buffer attachment data **Description** Calls :c:type:`drm_gem_object_funcs.pin ` for device specific handling. This can be used as the :c:type:`dma_buf_ops.attach ` callback. Must be used together with drm_gem_map_detach(). Returns 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hj׹h]h Parameters}(hjٹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjչubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMPhjѹubj)}(hhh](j)}(h7``struct dma_buf *dma_buf`` buffer to attach device to h](j)}(h``struct dma_buf *dma_buf``h]j)}(hjh]hstruct dma_buf *dma_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMMhjubj )}(hhh]h)}(hbuffer to attach device toh]hbuffer to attach device to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMMhjubj)}(h=``struct dma_buf_attachment *attach`` buffer attachment data h](j)}(h%``struct dma_buf_attachment *attach``h]j)}(hj/h]h!struct dma_buf_attachment *attach}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMNhj)ubj )}(hhh]h)}(hbuffer attachment datah]hbuffer attachment data}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMNhjEubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMNhjubeh}(h]h ]h"]h$]h&]uh1jhjѹubh)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMPhjѹubh)}(hCalls :c:type:`drm_gem_object_funcs.pin ` for device specific handling. This can be used as the :c:type:`dma_buf_ops.attach ` callback. Must be used together with drm_gem_map_detach().h](hCalls }(hjhhhNhNubh)}(h9:c:type:`drm_gem_object_funcs.pin `h]j)}(hjh]hdrm_gem_object_funcs.pin}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMPhjubh7 for device specific handling. This can be used as the }(hjhhhNhNubh)}(h*:c:type:`dma_buf_ops.attach `h]j)}(hjh]hdma_buf_ops.attach}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhjhMPhjubh; callback. Must be used together with drm_gem_map_detach().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMPhjѹubh)}(h5Returns 0 on success, negative error code on failure.h]h5Returns 0 on success, negative error code on failure.}(hjպhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMThjѹubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_map_detach (C function)c.drm_gem_map_detachhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hTvoid drm_gem_map_detach (struct dma_buf *dma_buf, struct dma_buf_attachment *attach)h]j>)}(hSvoid drm_gem_map_detach(struct dma_buf *dma_buf, struct dma_buf_attachment *attach)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMpubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMpubjg)}(hdrm_gem_map_detachh]jm)}(hdrm_gem_map_detachh]hdrm_gem_map_detach}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMpubj)}(h<(struct dma_buf *dma_buf, struct dma_buf_attachment *attach)h](j)}(hstruct dma_buf *dma_bufh](jD)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj=ubjV)}(h h]h }(hjNhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=ubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j)}jj'sbc.drm_gem_map_detachasbuh1hhj=ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(h!struct dma_buf_attachment *attachh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjѻhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjλubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjӻmodnameN classnameNjj)}j]j{c.drm_gem_map_detachasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hattachh]hattach}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMpubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMpubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMphjhhubj)}(hhh]h)}(h%dma_buf detach implementation for GEMh]h%dma_buf detach implementation for GEM}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhhj1hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMpubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct dma_buf *dma_buf`` buffer to detach from ``struct dma_buf_attachment *attach`` attachment to be detached **Description** Calls :c:type:`drm_gem_object_funcs.pin ` for device specific handling. Cleans up :c:type:`dma_buf_attachment` from drm_gem_map_attach(). This can be used as the :c:type:`dma_buf_ops.detach ` callback.h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMlhjPubj)}(hhh](j)}(h2``struct dma_buf *dma_buf`` buffer to detach from h](j)}(h``struct dma_buf *dma_buf``h]j)}(hjuh]hstruct dma_buf *dma_buf}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMihjoubj )}(hhh]h)}(hbuffer to detach fromh]hbuffer to detach from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1j hjoubeh}(h]h ]h"]h$]h&]uh1jhjhMihjlubj)}(h@``struct dma_buf_attachment *attach`` attachment to be detached h](j)}(h%``struct dma_buf_attachment *attach``h]j)}(hjh]h!struct dma_buf_attachment *attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMjhjubj )}(hhh]h)}(hattachment to be detachedh]hattachment to be detached}(hjǼhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjühMjhjļubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjühMjhjlubeh}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMlhjPubh)}(hCalls :c:type:`drm_gem_object_funcs.pin ` for device specific handling. Cleans up :c:type:`dma_buf_attachment` from drm_gem_map_attach(). This can be used as the :c:type:`dma_buf_ops.detach ` callback.h](hCalls }(hjhhhNhNubh)}(h9:c:type:`drm_gem_object_funcs.pin `h]j)}(hj h]hdrm_gem_object_funcs.pin}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMlhjubh* for device specific handling. Cleans up }(hjhhhNhNubh)}(h:c:type:`dma_buf_attachment`h]j)}(hj-h]hdma_buf_attachment}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_buf_attachmentuh1hhj&hMlhjubh4 from drm_gem_map_attach(). This can be used as the }(hjhhhNhNubh)}(h*:c:type:`dma_buf_ops.detach `h]j)}(hjPh]hdma_buf_ops.detach}(hjRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhj&hMlhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hMlhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_map_dma_buf (C function)c.drm_gem_map_dma_bufhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hfstruct sg_table * drm_gem_map_dma_buf (struct dma_buf_attachment *attach, enum dma_data_direction dir)h]j>)}(hdstruct sg_table *drm_gem_map_dma_buf(struct dma_buf_attachment *attach, enum dma_data_direction dir)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gem_map_dma_bufsbc.drm_gem_map_dma_bufasbuh1hhjhhhjhMubjV)}(h h]h }(hj׽hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjg)}(hdrm_gem_map_dma_bufh]jm)}(hjԽh]hdrm_gem_map_dma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h@(struct dma_buf_attachment *attach, enum dma_data_direction dir)h](j)}(h!struct dma_buf_attachment *attachh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdma_buf_attachmenth]hdma_buf_attachment}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]jҽc.drm_gem_map_dma_bufasbuh1hhj ubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hattachh]hattach}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(henum dma_data_direction dirh](jD)}(hjGh]henum}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj}ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubh)}(hhh]jm)}(hdma_data_directionh]hdma_data_direction}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jҽc.drm_gem_map_dma_bufasbuh1hhj}ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubjm)}(hdirh]hdir}(hj˾hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h"map_dma_buf implementation for GEMh]h"map_dma_buf implementation for GEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMzhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j2hhhjhNhNubj)}(hX4**Parameters** ``struct dma_buf_attachment *attach`` attachment whose scatterlist is to be returned ``enum dma_data_direction dir`` direction of DMA transfer **Description** Calls :c:type:`drm_gem_object_funcs.get_sg_table ` and then maps the scatterlist. This can be used as the :c:type:`dma_buf_ops.map_dma_buf ` callback. Should be used together with drm_gem_unmap_dma_buf(). **Return** sg_table containing the scatterlist to be returned; returns ERR_PTR on error. May return -EINTR if it is interrupted by a signal.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM~hjubj)}(hhh](j)}(hU``struct dma_buf_attachment *attach`` attachment whose scatterlist is to be returned h](j)}(h%``struct dma_buf_attachment *attach``h]j)}(hj6h]h!struct dma_buf_attachment *attach}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM{hj0ubj )}(hhh]h)}(h.attachment whose scatterlist is to be returnedh]h.attachment whose scatterlist is to be returned}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM{hjLubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM{hj-ubj)}(h:``enum dma_data_direction dir`` direction of DMA transfer h](j)}(h``enum dma_data_direction dir``h]j)}(hjoh]henum dma_data_direction dir}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM|hjiubj )}(hhh]h)}(hdirection of DMA transferh]hdirection of DMA transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjhM|hj-ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM~hjubh)}(hCalls :c:type:`drm_gem_object_funcs.get_sg_table ` and then maps the scatterlist. This can be used as the :c:type:`dma_buf_ops.map_dma_buf ` callback. Should be used together with drm_gem_unmap_dma_buf().h](hCalls }(hjhhhNhNubh)}(hB:c:type:`drm_gem_object_funcs.get_sg_table `h]j)}(hjʿh]h!drm_gem_object_funcs.get_sg_table}(hj̿hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjȿubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM~hjubh8 and then maps the scatterlist. This can be used as the }(hjhhhNhNubh)}(h/:c:type:`dma_buf_ops.map_dma_buf `h]j)}(hjh]hdma_buf_ops.map_dma_buf}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhjhM~hjubh@ callback. Should be used together with drm_gem_unmap_dma_buf().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM~hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hsg_table containing the scatterlist to be returned; returns ERR_PTR on error. May return -EINTR if it is interrupted by a signal.h]hsg_table containing the scatterlist to be returned; returns ERR_PTR on error. May return -EINTR if it is interrupted by a signal.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gem_unmap_dma_buf (C function)c.drm_gem_unmap_dma_bufhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hqvoid drm_gem_unmap_dma_buf (struct dma_buf_attachment *attach, struct sg_table *sgt, enum dma_data_direction dir)h]j>)}(hpvoid drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach, struct sg_table *sgt, enum dma_data_direction dir)h](jc)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjXhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXhhhjjhMubjg)}(hdrm_gem_unmap_dma_bufh]jm)}(hdrm_gem_unmap_dma_bufh]hdrm_gem_unmap_dma_buf}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjXhhhjjhMubj)}(hV(struct dma_buf_attachment *attach, struct sg_table *sgt, enum dma_data_direction dir)h](j)}(h!struct dma_buf_attachment *attachh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_unmap_dma_bufasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct sg_table *sgth](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hj)hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]jc.drm_gem_unmap_dma_bufasbuh1hhjubjV)}(h h]h }(hjGhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hsgth]hsgt}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum dma_data_direction dirh](jD)}(hjGh]henum}(hj{hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjwubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubh)}(hhh]jm)}(hdma_data_directionh]hdma_data_direction}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_unmap_dma_bufasbuh1hhjwubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubjm)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjXhhhjjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjThhhjjhMubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1j7hjjhMhjQhhubj)}(hhh]h)}(h$unmap_dma_buf implementation for GEMh]h$unmap_dma_buf implementation for GEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX>**Parameters** ``struct dma_buf_attachment *attach`` attachment to unmap buffer from ``struct sg_table *sgt`` scatterlist info of the buffer to unmap ``enum dma_data_direction dir`` direction of DMA transfer **Description** This can be used as the :c:type:`dma_buf_ops.unmap_dma_buf ` callback.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj ubj)}(hhh](j)}(hF``struct dma_buf_attachment *attach`` attachment to unmap buffer from h](j)}(h%``struct dma_buf_attachment *attach``h]j)}(hj0h]h!struct dma_buf_attachment *attach}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj*ubj )}(hhh]h)}(hattachment to unmap buffer fromh]hattachment to unmap buffer from}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(hA``struct sg_table *sgt`` scatterlist info of the buffer to unmap h](j)}(h``struct sg_table *sgt``h]j)}(hjih]hstruct sg_table *sgt}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjcubj )}(hhh]h)}(h'scatterlist info of the buffer to unmaph]h'scatterlist info of the buffer to unmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubj)}(h:``enum dma_data_direction dir`` direction of DMA transfer h](j)}(h``enum dma_data_direction dir``h]j)}(hjh]henum dma_data_direction dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hdirection of DMA transferh]hdirection of DMA transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj ubh)}(hSThis can be used as the :c:type:`dma_buf_ops.unmap_dma_buf ` callback.h](hThis can be used as the }(hjhhhNhNubh)}(h1:c:type:`dma_buf_ops.unmap_dma_buf `h]j)}(hjh]hdma_buf_ops.unmap_dma_buf}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_dmabuf_vmap (C function)c.drm_gem_dmabuf_vmaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hHint drm_gem_dmabuf_vmap (struct dma_buf *dma_buf, struct iosys_map *map)h]j>)}(hGint drm_gem_dmabuf_vmap(struct dma_buf *dma_buf, struct iosys_map *map)h](jc)}(hinth]hint}(hjEhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjAhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjThhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAhhhjShMubjg)}(hdrm_gem_dmabuf_vmaph]jm)}(hdrm_gem_dmabuf_vmaph]hdrm_gem_dmabuf_vmap}(hjfhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjAhhhjShMubj)}(h0(struct dma_buf *dma_buf, struct iosys_map *map)h](j)}(hstruct dma_buf *dma_bufh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj~ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~ubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjhsbc.drm_gem_dmabuf_vmapasbuh1hhj~ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzubj)}(hstruct iosys_map *maph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dmabuf_vmapasbuh1hhjubjV)}(h h]h }(hj0hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmaph]hmap}(hjKhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzubeh}(h]h ]h"]h$]h&]jjuh1jhjAhhhjShMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj=hhhjShMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1j7hjShMhj:hhubj)}(hhh]h)}(h#dma_buf vmap implementation for GEMh]h#dma_buf vmap implementation for GEM}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjrhhubah}(h]h ]h"]h$]h&]uh1jhj:hhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct dma_buf *dma_buf`` buffer to be mapped ``struct iosys_map *map`` the virtual address of the buffer **Description** Sets up a kernel virtual mapping. This can be used as the :c:type:`dma_buf_ops.vmap ` callback. Calls into :c:type:`drm_gem_object_funcs.vmap ` for device specific handling. The kernel virtual address is returned in map. Returns 0 on success or a negative errno code otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj)}(hhh](j)}(h0``struct dma_buf *dma_buf`` buffer to be mapped h](j)}(h``struct dma_buf *dma_buf``h]j)}(hjh]hstruct dma_buf *dma_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hbuffer to be mappedh]hbuffer to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``struct iosys_map *map`` the virtual address of the buffer h](j)}(h``struct iosys_map *map``h]j)}(hjh]hstruct iosys_map *map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(h!the virtual address of the bufferh]h!the virtual address of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hSets up a kernel virtual mapping. This can be used as the :c:type:`dma_buf_ops.vmap ` callback. Calls into :c:type:`drm_gem_object_funcs.vmap ` for device specific handling. The kernel virtual address is returned in map.h](h:Sets up a kernel virtual mapping. This can be used as the }(hj@hhhNhNubh)}(h(:c:type:`dma_buf_ops.vmap `h]j)}(hjJh]hdma_buf_ops.vmap}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj@ubh callback. Calls into }(hj@hhhNhNubh)}(h::c:type:`drm_gem_object_funcs.vmap `h]j)}(hjnh]hdrm_gem_object_funcs.vmap}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhjghMhj@ubhM for device specific handling. The kernel virtual address is returned in map.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjghMhjubh)}(h8Returns 0 on success or a negative errno code otherwise.h]h8Returns 0 on success or a negative errno code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gem_dmabuf_vunmap (C function)c.drm_gem_dmabuf_vunmaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hKvoid drm_gem_dmabuf_vunmap (struct dma_buf *dma_buf, struct iosys_map *map)h]j>)}(hJvoid drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, struct iosys_map *map)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gem_dmabuf_vunmaph]jm)}(hdrm_gem_dmabuf_vunmaph]hdrm_gem_dmabuf_vunmap}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h0(struct dma_buf *dma_buf, struct iosys_map *map)h](j)}(hstruct dma_buf *dma_bufh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j)}jjsbc.drm_gem_dmabuf_vunmapasbuh1hhjubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdma_bufh]hdma_buf}(hjZhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iosys_map *maph](jD)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjoubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j;c.drm_gem_dmabuf_vunmapasbuh1hhjoubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjm)}(hmaph]hmap}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h%dma_buf vunmap implementation for GEMh]h%dma_buf vunmap implementation for GEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j2hhhjhNhNubj)}(hXj**Parameters** ``struct dma_buf *dma_buf`` buffer to be unmapped ``struct iosys_map *map`` the virtual address of the buffer **Description** Releases a kernel virtual mapping. This can be used as the :c:type:`dma_buf_ops.vunmap ` callback. Calls into :c:type:`drm_gem_object_funcs.vunmap ` for device specific handling.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj)}(hhh](j)}(h2``struct dma_buf *dma_buf`` buffer to be unmapped h](j)}(h``struct dma_buf *dma_buf``h]j)}(hj5h]hstruct dma_buf *dma_buf}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj/ubj )}(hhh]h)}(hbuffer to be unmappedh]hbuffer to be unmapped}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubj)}(h<``struct iosys_map *map`` the virtual address of the buffer h](j)}(h``struct iosys_map *map``h]j)}(hjnh]hstruct iosys_map *map}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhubj )}(hhh]h)}(h!the virtual address of the bufferh]h!the virtual address of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hReleases a kernel virtual mapping. This can be used as the :c:type:`dma_buf_ops.vunmap ` callback. Calls into :c:type:`drm_gem_object_funcs.vunmap ` for device specific handling.h](h;Releases a kernel virtual mapping. This can be used as the }(hjhhhNhNubh)}(h*:c:type:`dma_buf_ops.vunmap `h]j)}(hjh]hdma_buf_ops.vunmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.c/hMhjubh callback. Calls into }(hjhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.vunmap `h]j)}(hjh]hdrm_gem_object_funcs.vunmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhjhMhjubh for device specific handling.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_prime_mmap (C function)c.drm_gem_prime_mmaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hOint drm_gem_prime_mmap (struct drm_gem_object *obj, struct vm_area_struct *vma)h]j>)}(hNint drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hj4hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj0hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj0hhhjBhMubjg)}(hdrm_gem_prime_mmaph]jm)}(hdrm_gem_prime_mmaph]hdrm_gem_prime_mmap}(hjUhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj0hhhjBhMubj)}(h8(struct drm_gem_object *obj, struct vm_area_struct *vma)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjmubjV)}(h h]h }(hj~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjmubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjWsbc.drm_gem_prime_mmapasbuh1hhjmubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_prime_mmapasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvmah]hvma}(hj:hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubeh}(h]h ]h"]h$]h&]jjuh1jhj0hhhjBhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj,hhhjBhMubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1j7hjBhMhj)hhubj)}(hhh]h)}(h#PRIME mmap function for GEM driversh]h#PRIME mmap function for GEM drivers}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjahhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjBhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_gem_object *obj`` GEM object ``struct vm_area_struct *vma`` Virtual address range **Description** This function sets up a userspace mapping for PRIME exported buffers using the same codepath that is used for regular GEM buffer mapping on the DRM fd. The fake GEM offset is added to vma->vm_pgoff and :c:type:`drm_driver->fops `->mmap is called to set up the mapping.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj)}(hhh](j)}(h*``struct drm_gem_object *obj`` GEM object h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(h GEM objecth]h GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``struct vm_area_struct *vma`` Virtual address range h](j)}(h``struct vm_area_struct *vma``h]j)}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hVirtual address rangeh]hVirtual address range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hXThis function sets up a userspace mapping for PRIME exported buffers using the same codepath that is used for regular GEM buffer mapping on the DRM fd. The fake GEM offset is added to vma->vm_pgoff and :c:type:`drm_driver->fops `->mmap is called to set up the mapping.h](hThis function sets up a userspace mapping for PRIME exported buffers using the same codepath that is used for regular GEM buffer mapping on the DRM fd. The fake GEM offset is added to vma->vm_pgoff and }(hj/hhhNhNubh)}(h':c:type:`drm_driver->fops `h]j)}(hj9h]hdrm_driver->fops}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj/ubh'->mmap is called to set up the mapping.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gem_dmabuf_mmap (C function)c.drm_gem_dmabuf_mmaphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hMint drm_gem_dmabuf_mmap (struct dma_buf *dma_buf, struct vm_area_struct *vma)h]j>)}(hLint drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj}hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}hhhjhMubjg)}(hdrm_gem_dmabuf_mmaph]jm)}(hdrm_gem_dmabuf_mmaph]hdrm_gem_dmabuf_mmap}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj}hhhjhMubj)}(h5(struct dma_buf *dma_buf, struct vm_area_struct *vma)h](j)}(hstruct dma_buf *dma_bufh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gem_dmabuf_mmapasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct vm_area_struct *vmah](jD)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj,ubjV)}(h h]h }(hj=hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,ubh)}(hhh]jm)}(hvm_area_structh]hvm_area_struct}(hjNhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]jc.drm_gem_dmabuf_mmapasbuh1hhj,ubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjm)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj}hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjyhhhjhMubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjvhhubj)}(hhh]h)}(h#dma_buf mmap implementation for GEMh]h#dma_buf mmap implementation for GEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXc**Parameters** ``struct dma_buf *dma_buf`` buffer to be mapped ``struct vm_area_struct *vma`` virtual address range **Description** Provides memory mapping for the buffer. This can be used as the :c:type:`dma_buf_ops.mmap ` callback. It just forwards to drm_gem_prime_mmap(). Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj)}(hhh](j)}(h0``struct dma_buf *dma_buf`` buffer to be mapped h](j)}(h``struct dma_buf *dma_buf``h]j)}(hjh]hstruct dma_buf *dma_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hbuffer to be mappedh]hbuffer to be mapped}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``struct vm_area_struct *vma`` virtual address range h](j)}(h``struct vm_area_struct *vma``h]j)}(hj+h]hstruct vm_area_struct *vma}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj%ubj )}(hhh]h)}(hvirtual address rangeh]hvirtual address range}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hProvides memory mapping for the buffer. This can be used as the :c:type:`dma_buf_ops.mmap ` callback. It just forwards to drm_gem_prime_mmap().h](h@Provides memory mapping for the buffer. This can be used as the }(hj|hhhNhNubh)}(h(:c:type:`dma_buf_ops.mmap `h]j)}(hjh]hdma_buf_ops.mmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj|ubh4 callback. It just forwards to drm_gem_prime_mmap().}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_prime_pages_to_sg (C function)c.drm_prime_pages_to_sghNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hlstruct sg_table * drm_prime_pages_to_sg (struct drm_device *dev, struct page **pages, unsigned int nr_pages)h]j>)}(hjstruct sg_table *drm_prime_pages_to_sg(struct drm_device *dev, struct page **pages, unsigned int nr_pages)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM>ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM>ubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_prime_pages_to_sgsbc.drm_prime_pages_to_sgasbuh1hhjhhhjhM>ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM>ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM>ubjg)}(hdrm_prime_pages_to_sgh]jm)}(hjh]hdrm_prime_pages_to_sg}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM>ubj)}(hD(struct drm_device *dev, struct page **pages, unsigned int nr_pages)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjSubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjuhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]jc.drm_prime_pages_to_sgasbuh1hhjSubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjm)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hstruct page **pagesh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_prime_pages_to_sgasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hpagesh]hpages}(hj+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hunsigned int nr_pagesh](jc)}(hunsignedh]hunsigned}(hjDhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj@ubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubjc)}(hinth]hint}(hj`hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj@ubjV)}(h h]h }(hjnhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubjm)}(hnr_pagesh]hnr_pages}(hj|hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM>ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM>ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM>hjhhubj)}(hhh]h)}(h%converts a page array into an sg listh]h%converts a page array into an sg list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM3hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct page **pages`` pointer to the array of page pointers to convert ``unsigned int nr_pages`` length of the page vector **Description** This helper creates an sg table object from a set of pages the driver is responsible for mapping the pages into the importers address space for use with dma_buf itself. This is useful for implementing :c:type:`drm_gem_object_funcs.get_sg_table `.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM7hjubj)}(hhh](j)}(h&``struct drm_device *dev`` DRM device h](j)}(h``struct drm_device *dev``h]j)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM4hjubj )}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubj)}(hI``struct page **pages`` pointer to the array of page pointers to convert h](j)}(h``struct page **pages``h]j)}(hj h]hstruct page **pages}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM5hjubj )}(hhh]h)}(h0pointer to the array of page pointers to converth]h0pointer to the array of page pointers to convert}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM5hj6ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj5hM5hjubj)}(h4``unsigned int nr_pages`` length of the page vector h](j)}(h``unsigned int nr_pages``h]j)}(hjYh]hunsigned int nr_pages}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM6hjSubj )}(hhh]h)}(hlength of the page vectorh]hlength of the page vector}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM6hjoubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM6hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM8hjubh)}(hThis helper creates an sg table object from a set of pages the driver is responsible for mapping the pages into the importers address space for use with dma_buf itself.h]hThis helper creates an sg table object from a set of pages the driver is responsible for mapping the pages into the importers address space for use with dma_buf itself.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM8hjubh)}(hcThis is useful for implementing :c:type:`drm_gem_object_funcs.get_sg_table `.h](h This is useful for implementing }(hjhhhNhNubh)}(hB:c:type:`drm_gem_object_funcs.get_sg_table `h]j)}(hjh]h!drm_gem_object_funcs.get_sg_table}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM<hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM<hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_prime_get_contiguous_size (C function)c.drm_prime_get_contiguous_sizehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hBunsigned long drm_prime_get_contiguous_size (struct sg_table *sgt)h]j>)}(hAunsigned long drm_prime_get_contiguous_size(struct sg_table *sgt)h](jc)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMbubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMbubjc)}(hlongh]hlong}(hj(hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhMbubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMbubjg)}(hdrm_prime_get_contiguous_sizeh]jm)}(hdrm_prime_get_contiguous_sizeh]hdrm_prime_get_contiguous_size}(hjHhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMbubj)}(h(struct sg_table *sgt)h]j)}(hstruct sg_table *sgth](jD)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj`ubjV)}(h h]h }(hjqhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj`ubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjJsbc.drm_prime_get_contiguous_sizeasbuh1hhj`ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjm)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMbubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMbubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMbhjhhubj)}(hhh]h)}(h)returns the contiguous size of the bufferh]h)returns the contiguous size of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMYhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXL**Parameters** ``struct sg_table *sgt`` sg_table describing the buffer to check **Description** This helper calculates the contiguous size in the DMA address space of the buffer described by the provided sg_table. This is useful for implementing :c:type:`drm_gem_object_funcs.gem_prime_import_sg_table `.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM]hjubj)}(hhh]j)}(hA``struct sg_table *sgt`` sg_table describing the buffer to check h](j)}(h``struct sg_table *sgt``h]j)}(hj(h]hstruct sg_table *sgt}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMZhj"ubj )}(hhh]h)}(h'sg_table describing the buffer to checkh]h'sg_table describing the buffer to check}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMZhj>ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMZhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM\hjubh)}(huThis helper calculates the contiguous size in the DMA address space of the buffer described by the provided sg_table.h]huThis helper calculates the contiguous size in the DMA address space of the buffer described by the provided sg_table.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM\hjubh)}(hpThis is useful for implementing :c:type:`drm_gem_object_funcs.gem_prime_import_sg_table `.h](h This is useful for implementing }(hjhhhNhNubh)}(hO:c:type:`drm_gem_object_funcs.gem_prime_import_sg_table `h]j)}(hjh]h.drm_gem_object_funcs.gem_prime_import_sg_table}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM_hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_gem_prime_export (C function)c.drm_gem_prime_exporthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hMstruct dma_buf * drm_gem_prime_export (struct drm_gem_object *obj, int flags)h]j>)}(hKstruct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj, int flags)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gem_prime_exportsbc.drm_gem_prime_exportasbuh1hhjhhhjhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjg)}(hdrm_gem_prime_exporth]jm)}(hjh]hdrm_gem_prime_export}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h'(struct drm_gem_object *obj, int flags)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjPubjV)}(h h]h }(hjahhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]jc.drm_gem_prime_exportasbuh1hhjPubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(h int flagsh](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h4helper library implementation of the export callbackh]h4helper library implementation of the export callback}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMxhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1j2hhhjhNhNubj)}(hXY**Parameters** ``struct drm_gem_object *obj`` GEM object to export ``int flags`` flags like DRM_CLOEXEC and DRM_RDWR **Description** This is the implementation of the :c:type:`drm_gem_object_funcs.export ` functions for GEM drivers using the PRIME helpers. It is used as the default in drm_gem_prime_handle_to_fd().h](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM|hj&ubj)}(hhh](j)}(h4``struct drm_gem_object *obj`` GEM object to export h](j)}(h``struct drm_gem_object *obj``h]j)}(hjKh]hstruct drm_gem_object *obj}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMyhjEubj )}(hhh]h)}(hGEM object to exporth]hGEM object to export}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMyhjaubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMyhjBubj)}(h2``int flags`` flags like DRM_CLOEXEC and DRM_RDWR h](j)}(h ``int flags``h]j)}(hjh]h int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMzhj~ubj )}(hhh]h)}(h#flags like DRM_CLOEXEC and DRM_RDWRh]h#flags like DRM_CLOEXEC and DRM_RDWR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjBubeh}(h]h ]h"]h$]h&]uh1jhj&ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM|hj&ubh)}(hThis is the implementation of the :c:type:`drm_gem_object_funcs.export ` functions for GEM drivers using the PRIME helpers. It is used as the default in drm_gem_prime_handle_to_fd().h](h"This is the implementation of the }(hjhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j)}(hjh]hdrm_gem_object_funcs.export}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM|hjubhn functions for GEM drivers using the PRIME helpers. It is used as the default in drm_gem_prime_handle_to_fd().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM|hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gem_prime_import_dev (C function)c.drm_gem_prime_import_devhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h}struct drm_gem_object * drm_gem_prime_import_dev (struct drm_device *dev, struct dma_buf *dma_buf, struct device *attach_dev)h]j>)}(h{struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev, struct dma_buf *dma_buf, struct device *attach_dev)h](jD)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#hhhj4hMubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjFhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jdrm_gem_prime_import_devsbc.drm_gem_prime_import_devasbuh1hhj#hhhj4hMubjV)}(h h]h }(hjghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#hhhj4hMubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj4hMubjg)}(hdrm_gem_prime_import_devh]jm)}(hjdh]hdrm_gem_prime_import_dev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj#hhhj4hMubj)}(hL(struct drm_device *dev, struct dma_buf *dma_buf, struct device *attach_dev)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jbc.drm_gem_prime_import_devasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct dma_buf *dma_bufh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]jbc.drm_gem_prime_import_devasbuh1hhj ubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hdma_bufh]hdma_buf}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device *attach_devh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj}ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubh)}(hhh]jm)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jbc.drm_gem_prime_import_devasbuh1hhj}ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjm)}(h attach_devh]h attach_dev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj4hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj4hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj4hMhjhhubj)}(hhh]h)}(h*core implementation of the import callbackh]h*core implementation of the import callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` drm_device to import into ``struct dma_buf *dma_buf`` dma-buf object to import ``struct device *attach_dev`` struct device to dma_buf attach **Description** This is the core of drm_gem_prime_import(). It's designed to be called by drivers who want to use a different device structure than :c:type:`drm_device.dev ` for attaching via dma_buf. This function calls :c:type:`drm_driver.gem_prime_import_sg_table ` internally. Drivers must arrange to call drm_prime_gem_destroy() from their :c:type:`drm_gem_object_funcs.free ` hook when using this function.h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj)}(hhh](j)}(h5``struct drm_device *dev`` drm_device to import into h](j)}(h``struct drm_device *dev``h]j)}(hjCh]hstruct drm_device *dev}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj=ubj )}(hhh]h)}(hdrm_device to import intoh]hdrm_device to import into}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj:ubj)}(h5``struct dma_buf *dma_buf`` dma-buf object to import h](j)}(h``struct dma_buf *dma_buf``h]j)}(hj|h]hstruct dma_buf *dma_buf}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjvubj )}(hhh]h)}(hdma-buf object to importh]hdma-buf object to import}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhj:ubj)}(h>``struct device *attach_dev`` struct device to dma_buf attach h](j)}(h``struct device *attach_dev``h]j)}(hjh]hstruct device *attach_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hstruct device to dma_buf attachh]hstruct device to dma_buf attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hX This is the core of drm_gem_prime_import(). It's designed to be called by drivers who want to use a different device structure than :c:type:`drm_device.dev ` for attaching via dma_buf. This function calls :c:type:`drm_driver.gem_prime_import_sg_table ` internally.h](hThis is the core of drm_gem_prime_import(). It’s designed to be called by drivers who want to use a different device structure than }(hjhhhNhNubh)}(h%:c:type:`drm_device.dev `h]j)}(hjh]hdrm_device.dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh0 for attaching via dma_buf. This function calls }(hjhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j)}(hj4h]h$drm_driver.gem_prime_import_sg_table}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhj-hMhjubh internally.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMhjubh)}(hDrivers must arrange to call drm_prime_gem_destroy() from their :c:type:`drm_gem_object_funcs.free ` hook when using this function.h](h@Drivers must arrange to call drm_prime_gem_destroy() from their }(hj[hhhNhNubh)}(h::c:type:`drm_gem_object_funcs.free `h]j)}(hjeh]hdrm_gem_object_funcs.free}(hjghhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj[ubh hook when using this function.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_gem_prime_import (C function)c.drm_gem_prime_importhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h^struct drm_gem_object * drm_gem_prime_import (struct drm_device *dev, struct dma_buf *dma_buf)h]j>)}(h\struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, struct dma_buf *dma_buf)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gem_prime_importsbc.drm_gem_prime_importasbuh1hhjhhhjhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjg)}(hdrm_gem_prime_importh]jm)}(hjh]hdrm_gem_prime_import}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h1(struct drm_device *dev, struct dma_buf *dma_buf)h](j)}(hstruct drm_device *devh](jD)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#ubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hjEhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jc.drm_gem_prime_importasbuh1hhj#ubjV)}(h h]h }(hjchhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjm)}(hdevh]hdev}(hj~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct dma_buf *dma_bufh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_prime_importasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h4helper library implementation of the import callbackh]h4helper library implementation of the import callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1j2hhhjhNhNubj)}(hX<**Parameters** ``struct drm_device *dev`` drm_device to import into ``struct dma_buf *dma_buf`` dma-buf object to import **Description** This is the implementation of the gem_prime_import functions for GEM drivers using the PRIME helpers. Drivers can use this as their :c:type:`drm_driver.gem_prime_import ` implementation. It is used as the default implementation in drm_gem_prime_fd_to_handle(). Drivers must arrange to call drm_prime_gem_destroy() from their :c:type:`drm_gem_object_funcs.free ` hook when using this function.h](h)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj4ubj)}(hhh](j)}(h5``struct drm_device *dev`` drm_device to import into h](j)}(h``struct drm_device *dev``h]j)}(hjYh]hstruct drm_device *dev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjSubj )}(hhh]h)}(hdrm_device to import intoh]hdrm_device to import into}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjPubj)}(h5``struct dma_buf *dma_buf`` dma-buf object to import h](j)}(h``struct dma_buf *dma_buf``h]j)}(hjh]hstruct dma_buf *dma_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hdma-buf object to importh]hdma-buf object to import}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjPubeh}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhj4ubh)}(hXThis is the implementation of the gem_prime_import functions for GEM drivers using the PRIME helpers. Drivers can use this as their :c:type:`drm_driver.gem_prime_import ` implementation. It is used as the default implementation in drm_gem_prime_fd_to_handle().h](hThis is the implementation of the gem_prime_import functions for GEM drivers using the PRIME helpers. Drivers can use this as their }(hjhhhNhNubh)}(h2:c:type:`drm_driver.gem_prime_import `h]j)}(hjh]hdrm_driver.gem_prime_import}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubhZ implementation. It is used as the default implementation in drm_gem_prime_fd_to_handle().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj4ubh)}(hDrivers must arrange to call drm_prime_gem_destroy() from their :c:type:`drm_gem_object_funcs.free ` hook when using this function.h](h@Drivers must arrange to call drm_prime_gem_destroy() from their }(hjhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.free `h]j)}(hjh]hdrm_gem_object_funcs.free}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh hook when using this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_prime_sg_to_page_array (C function)c.drm_prime_sg_to_page_arrayhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h[int drm_prime_sg_to_page_array (struct sg_table *sgt, struct page **pages, int max_entries)h]j>)}(hZint drm_prime_sg_to_page_array(struct sg_table *sgt, struct page **pages, int max_entries)h](jc)}(hinth]hint}(hjghhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjchhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjchhhjuhMubjg)}(hdrm_prime_sg_to_page_arrayh]jm)}(hdrm_prime_sg_to_page_arrayh]hdrm_prime_sg_to_page_array}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjchhhjuhMubj)}(h<(struct sg_table *sgt, struct page **pages, int max_entries)h](j)}(hstruct sg_table *sgth](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_prime_sg_to_page_arrayasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct page **pagesh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hpageh]hpage}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jc.drm_prime_sg_to_page_arrayasbuh1hhjubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hpagesh]hpages}(hjzhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint max_entriesh](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h max_entriesh]h max_entries}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjchhhjuhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj_hhhjuhMubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1j7hjuhMhj\hhubj)}(hhh]h)}(h%convert an sg table into a page arrayh]h%convert an sg table into a page array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct sg_table *sgt`` scatter-gather table to convert ``struct page **pages`` array of page pointers to store the pages in ``int max_entries`` size of the passed-in array **Description** Exports an sg table into an array of pages. This function is deprecated and strongly discouraged to be used. The page array is only useful for page faults and those can corrupt fields in the struct page if they are not handled by the exporting driver.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj)}(hhh](j)}(h9``struct sg_table *sgt`` scatter-gather table to convert h](j)}(h``struct sg_table *sgt``h]j)}(hjh]hstruct sg_table *sgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hscatter-gather table to converth]hscatter-gather table to convert}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(hE``struct page **pages`` array of page pointers to store the pages in h](j)}(h``struct page **pages``h]j)}(hjSh]hstruct page **pages}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjMubj )}(hhh]h)}(h,array of page pointers to store the pages inh]h,array of page pointers to store the pages in}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubj)}(h0``int max_entries`` size of the passed-in array h](j)}(h``int max_entries``h]j)}(hjh]hint max_entries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj )}(hhh]h)}(hsize of the passed-in arrayh]hsize of the passed-in array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(h+Exports an sg table into an array of pages.h]h+Exports an sg table into an array of pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hThis function is deprecated and strongly discouraged to be used. The page array is only useful for page faults and those can corrupt fields in the struct page if they are not handled by the exporting driver.h]hThis function is deprecated and strongly discouraged to be used. The page array is only useful for page faults and those can corrupt fields in the struct page if they are not handled by the exporting driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.+drm_prime_sg_to_dma_addr_array (C function) c.drm_prime_sg_to_dma_addr_arrayhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h]int drm_prime_sg_to_dma_addr_array (struct sg_table *sgt, dma_addr_t *addrs, int max_entries)h]j>)}(h\int drm_prime_sg_to_dma_addr_array(struct sg_table *sgt, dma_addr_t *addrs, int max_entries)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMubjV)}(h h]h }(hj*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj)hMubjg)}(hdrm_prime_sg_to_dma_addr_arrayh]jm)}(hdrm_prime_sg_to_dma_addr_arrayh]hdrm_prime_sg_to_dma_addr_array}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj)hMubj)}(h:(struct sg_table *sgt, dma_addr_t *addrs, int max_entries)h](j)}(hstruct sg_table *sgth](jD)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjTubjV)}(h h]h }(hjehhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjTubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]j)}jj>sb c.drm_prime_sg_to_dma_addr_arrayasbuh1hhjTubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjm)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubj)}(hdma_addr_t *addrsh](h)}(hhh]jm)}(h dma_addr_th]h dma_addr_t}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_prime_sg_to_dma_addr_arrayasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(haddrsh]haddrs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubj)}(hint max_entriesh](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj-hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h max_entriesh]h max_entries}(hj;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj)hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj)hMhjhhubj)}(hhh]h)}(h)convert an sg table into a dma addr arrayh]h)convert an sg table into a dma addr array}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM hjbhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}jj}jjjuh1j2hhhjhNhNubj)}(hX|**Parameters** ``struct sg_table *sgt`` scatter-gather table to convert ``dma_addr_t *addrs`` array to store the dma bus address of each page ``int max_entries`` size of both the passed-in arrays **Description** Exports an sg table into an array of addresses. Drivers should use this in their :c:type:`drm_driver.gem_prime_import_sg_table ` implementation.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubj)}(hhh](j)}(h9``struct sg_table *sgt`` scatter-gather table to convert h](j)}(h``struct sg_table *sgt``h]j)}(hjh]hstruct sg_table *sgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM hjubj )}(hhh]h)}(hscatter-gather table to converth]hscatter-gather table to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hF``dma_addr_t *addrs`` array to store the dma bus address of each page h](j)}(h``dma_addr_t *addrs``h]j)}(hjh]hdma_addr_t *addrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM hjubj )}(hhh]h)}(h/array to store the dma bus address of each pageh]h/array to store the dma bus address of each page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h6``int max_entries`` size of both the passed-in arrays h](j)}(h``int max_entries``h]j)}(hjh]hint max_entries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM hjubj )}(hhh]h)}(h!size of both the passed-in arraysh]h!size of both the passed-in arrays}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM hj.ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj-hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(h/Exports an sg table into an array of addresses.h]h/Exports an sg table into an array of addresses.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hlDrivers should use this in their :c:type:`drm_driver.gem_prime_import_sg_table ` implementation.h](h!Drivers should use this in their }(hjxhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j)}(hjh]h$drm_driver.gem_prime_import_sg_table}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chMhjxubh implementation.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_prime_gem_destroy (C function)c.drm_prime_gem_destroyhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hLvoid drm_prime_gem_destroy (struct drm_gem_object *obj, struct sg_table *sg)h]j>)}(hKvoid drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM+ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM+ubjg)}(hdrm_prime_gem_destroyh]jm)}(hdrm_prime_gem_destroyh]hdrm_prime_gem_destroy}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM+ubj)}(h1(struct drm_gem_object *obj, struct sg_table *sg)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jjsbc.drm_prime_gem_destroyasbuh1hhjubjV)}(h h]h }(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct sg_table *sgh](jD)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jAc.drm_prime_gem_destroyasbuh1hhjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjm)}(hsgh]hsg}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM+ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM+ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM+hjhhubj)}(hhh]h)}(h.helper to clean up a PRIME-imported GEM objecth]h.helper to clean up a PRIME-imported GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM$hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXJ**Parameters** ``struct drm_gem_object *obj`` GEM object which was created from a dma-buf ``struct sg_table *sg`` the sg-table which was pinned at import time **Description** This is the cleanup functions which GEM drivers need to call when they use drm_gem_prime_import() or drm_gem_prime_import_dev() to import dma-bufs.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM(hjubj)}(hhh](j)}(hK``struct drm_gem_object *obj`` GEM object which was created from a dma-buf h](j)}(h``struct drm_gem_object *obj``h]j)}(hj;h]hstruct drm_gem_object *obj}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM%hj5ubj )}(hhh]h)}(h+GEM object which was created from a dma-bufh]h+GEM object which was created from a dma-buf}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM%hjQubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM%hj2ubj)}(hE``struct sg_table *sg`` the sg-table which was pinned at import time h](j)}(h``struct sg_table *sg``h]j)}(hjth]hstruct sg_table *sg}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM&hjnubj )}(hhh]h)}(h,the sg-table which was pinned at import timeh]h,the sg-table which was pinned at import time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1jhjhM&hj2ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM(hjubh)}(hThis is the cleanup functions which GEM drivers need to call when they use drm_gem_prime_import() or drm_gem_prime_import_dev() to import dma-bufs.h]hThis is the cleanup functions which GEM drivers need to call when they use drm_gem_prime_import() or drm_gem_prime_import_dev() to import dma-bufs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:442: ./drivers/gpu/drm/drm_prime.chM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]prime-function-referencesah ]h"]prime function referencesah$]h&]uh1hhjFhhhhhMubeh}(h](j=id1eh ]h"](prime buffer sharingprime_buffer_sharingeh$]h&]uh1hhhhhhhhMexpect_referenced_by_name}jj2sexpect_referenced_by_id}j=j2subh)}(hhh](h)}(hDRM MM Range Allocatorh]hDRM MM Range Allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hOverviewh]hOverview}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXdrm_mm provides a simple range allocator. The drivers are free to use the resource allocator from the linux core if it suits them, the upside of drm_mm is that it's in the DRM core. Which means that it's easier to extend for some of the crazier special purpose needs of gpus.h]hXdrm_mm provides a simple range allocator. The drivers are free to use the resource allocator from the linux core if it suits them, the upside of drm_mm is that it’s in the DRM core. Which means that it’s easier to extend for some of the crazier special purpose needs of gpus.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:451: ./drivers/gpu/drm/drm_mm.chK6hjhhubh)}(hX>The main data struct is :c:type:`drm_mm`, allocations are tracked in :c:type:`drm_mm_node`. Drivers are free to embed either of them into their own suitable datastructures. drm_mm itself will not do any memory allocations of its own, so if drivers choose not to embed nodes they need to still allocate them themselves.h](hThe main data struct is }(hj!hhhNhNubh)}(h:c:type:`drm_mm`h]j)}(hj+h]hdrm_mm}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mmuh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:451: ./drivers/gpu/drm/drm_mm.chK;hj!ubh, allocations are tracked in }(hj!hhhNhNubh)}(h:c:type:`drm_mm_node`h]j)}(hjOh]h drm_mm_node}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhjHhK;hj!ubh. Drivers are free to embed either of them into their own suitable datastructures. drm_mm itself will not do any memory allocations of its own, so if drivers choose not to embed nodes they need to still allocate them themselves.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhK;hjhhubh)}(hXThe range allocator also supports reservation of preallocated blocks. This is useful for taking over initial mode setting configurations from the firmware, where an object needs to be created which exactly matches the firmware's scanout target. As long as the range is still free it can be inserted anytime after the allocator is initialized, which helps with avoiding looped dependencies in the driver load sequence.h]hXThe range allocator also supports reservation of preallocated blocks. This is useful for taking over initial mode setting configurations from the firmware, where an object needs to be created which exactly matches the firmware’s scanout target. As long as the range is still free it can be inserted anytime after the allocator is initialized, which helps with avoiding looped dependencies in the driver load sequence.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:451: ./drivers/gpu/drm/drm_mm.chKAhjhhubh)}(hXdrm_mm maintains a stack of most recently freed holes, which of all simplistic datastructures seems to be a fairly decent approach to clustering allocations and avoiding too much fragmentation. This means free space searches are O(num_holes). Given that all the fancy features drm_mm supports something better would be fairly complex and since gfx thrashing is a fairly steep cliff not a real concern. Removing a node again is O(1).h]hXdrm_mm maintains a stack of most recently freed holes, which of all simplistic datastructures seems to be a fairly decent approach to clustering allocations and avoiding too much fragmentation. This means free space searches are O(num_holes). Given that all the fancy features drm_mm supports something better would be fairly complex and since gfx thrashing is a fairly steep cliff not a real concern. Removing a node again is O(1).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:451: ./drivers/gpu/drm/drm_mm.chKHhjhhubh)}(hXdrm_mm supports a few features: Alignment and range restrictions can be supplied. Furthermore every :c:type:`drm_mm_node` has a color value (which is just an opaque unsigned long) which in conjunction with a driver callback can be used to implement sophisticated placement restrictions. The i915 DRM driver uses this to implement guard pages between incompatible caching domains in the graphics TT.h](hddrm_mm supports a few features: Alignment and range restrictions can be supplied. Furthermore every }(hjhhhNhNubh)}(h:c:type:`drm_mm_node`h]j)}(hjh]h drm_mm_node}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:451: ./drivers/gpu/drm/drm_mm.chKOhjubhX has a color value (which is just an opaque unsigned long) which in conjunction with a driver callback can be used to implement sophisticated placement restrictions. The i915 DRM driver uses this to implement guard pages between incompatible caching domains in the graphics TT.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKOhjhhubh)}(hTwo behaviors are supported for searching and allocating: bottom-up and top-down. The default is bottom-up. Top-down allocation can be used if the memory area has different restrictions, or just to reduce fragmentation.h]hTwo behaviors are supported for searching and allocating: bottom-up and top-down. The default is bottom-up. Top-down allocation can be used if the memory area has different restrictions, or just to reduce fragmentation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:451: ./drivers/gpu/drm/drm_mm.chKVhjhhubh)}(hyFinally iteration helpers to walk all nodes and all holes are provided as are some basic allocator dumpers for debugging.h]hyFinally iteration helpers to walk all nodes and all holes are provided as are some basic allocator dumpers for debugging.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:451: ./drivers/gpu/drm/drm_mm.chKZhjhhubh)}(hXNote that this range allocator is not thread-safe, drivers need to protect modifications with their own locking. The idea behind this is that for a full memory manager additional data needs to be protected anyway, hence internal locking would be fully redundant.h]hXNote that this range allocator is not thread-safe, drivers need to protect modifications with their own locking. The idea behind this is that for a full memory manager additional data needs to be protected anyway, hence internal locking would be fully redundant.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:451: ./drivers/gpu/drm/drm_mm.chK]hjhhubeh}(h]overviewah ]h"]h$]overviewah&]uh1hhjhhhhhM referencedKubh)}(hhh](h)}(hLRU Scan/Eviction Supporth]hLRU Scan/Eviction Support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXVery often GPUs need to have continuous allocations for a given object. When evicting objects to make space for a new one it is therefore not most efficient when we simply start to select all objects from the tail of an LRU until there's a suitable hole: Especially for big objects or nodes that otherwise have special allocation constraints there's a good chance we evict lots of (smaller) objects unnecessarily.h]hXVery often GPUs need to have continuous allocations for a given object. When evicting objects to make space for a new one it is therefore not most efficient when we simply start to select all objects from the tail of an LRU until there’s a suitable hole: Especially for big objects or nodes that otherwise have special allocation constraints there’s a good chance we evict lots of (smaller) objects unnecessarily.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:457: ./drivers/gpu/drm/drm_mm.chMhjhhubh)}(hXThe DRM range allocator supports this use-case through the scanning interfaces. First a scan operation needs to be initialized with drm_mm_scan_init() or drm_mm_scan_init_with_range(). The driver adds objects to the roster, probably by walking an LRU list, but this can be freely implemented. Eviction candidates are added using drm_mm_scan_add_block() until a suitable hole is found or there are no further evictable objects. Eviction roster metadata is tracked in :c:type:`struct drm_mm_scan `.h](hXThe DRM range allocator supports this use-case through the scanning interfaces. First a scan operation needs to be initialized with drm_mm_scan_init() or drm_mm_scan_init_with_range(). The driver adds objects to the roster, probably by walking an LRU list, but this can be freely implemented. Eviction candidates are added using drm_mm_scan_add_block() until a suitable hole is found or there are no further evictable objects. Eviction roster metadata is tracked in }(hjhhhNhNubh)}(h*:c:type:`struct drm_mm_scan `h]j)}(hj&h]hstruct drm_mm_scan}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_scanuh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:457: ./drivers/gpu/drm/drm_mm.chMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChMhjhhubh)}(hThe driver must walk through all objects again in exactly the reverse order to restore the allocator state. Note that while the allocator is used in the scan mode no other operation is allowed.h]hThe driver must walk through all objects again in exactly the reverse order to restore the allocator state. Note that while the allocator is used in the scan mode no other operation is allowed.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:457: ./drivers/gpu/drm/drm_mm.chMhjhhubh)}(hXFinally the driver evicts all objects selected (drm_mm_scan_remove_block() reported true) in the scan, and any overlapping nodes after color adjustment (drm_mm_scan_color_evict()). Adding and removing an object is O(1), and since freeing a node is also O(1) the overall complexity is O(scanned_objects). So like the free stack which needs to be walked before a scan operation even begins this is linear in the number of objects. It doesn't seem to hurt too badly.h]hXFinally the driver evicts all objects selected (drm_mm_scan_remove_block() reported true) in the scan, and any overlapping nodes after color adjustment (drm_mm_scan_color_evict()). Adding and removing an object is O(1), and since freeing a node is also O(1) the overall complexity is O(scanned_objects). So like the free stack which needs to be walked before a scan operation even begins this is linear in the number of objects. It doesn’t seem to hurt too badly.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:457: ./drivers/gpu/drm/drm_mm.chMhjhhubeh}(h]lru-scan-eviction-supportah ]h"]lru scan/eviction supportah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h*DRM MM Range Allocator Function Referencesh]h*DRM MM Range Allocator Function References}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthhhhhMubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_insert_mode (C enum)c.drm_mm_insert_modehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hdrm_mm_insert_modeh]j>)}(henum drm_mm_insert_modeh](jD)}(hjGh]henum}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_mm_insert_modeh]jm)}(hjh]hdrm_mm_insert_mode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h'control search and allocation behaviourh]h'control search and allocation behaviour}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhK`). ``DRM_MM_INSERT_EVICT`` Search for the most recently evicted hole (within the search range) that fits the desired node. This is appropriate for use immediately after performing an eviction scan (see drm_mm_scan_init()) and removing the selected nodes to form a hole. Allocates the node from the bottom of the found hole. ``DRM_MM_INSERT_ONCE`` Only check the first hole for suitablity and report -ENOSPC immediately otherwise, rather than check every hole until a suitable one is found. Can only be used in conjunction with another search method such as DRM_MM_INSERT_HIGH or DRM_MM_INSERT_LOW. ``DRM_MM_INSERT_HIGHEST`` Only check the highest hole (the hole with the largest address) and insert the node at the top of the hole or report -ENOSPC if unsuitable. Does not search all holes. ``DRM_MM_INSERT_LOWEST`` Only check the lowest hole (the hole with the smallest address) and insert the node at the bottom of the hole or report -ENOSPC if unsuitable. Does not search all holes.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhK@hjubj)}(hhh](j)}(h``DRM_MM_INSERT_BEST`` Search for the smallest hole (within the search range) that fits the desired node. Allocates the node from the bottom of the found hole. h](j)}(h``DRM_MM_INSERT_BEST``h]j)}(hj!h]hDRM_MM_INSERT_BEST}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKFhjubj )}(hhh](h)}(hRSearch for the smallest hole (within the search range) that fits the desired node.h]hRSearch for the smallest hole (within the search range) that fits the desired node.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKChj7ubh)}(h5Allocates the node from the bottom of the found hole.h]h5Allocates the node from the bottom of the found hole.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKFhj7ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj6hKFhjubj)}(h``DRM_MM_INSERT_LOW`` Search for the lowest hole (address closest to 0, within the search range) that fits the desired node. Allocates the node from the bottom of the found hole. h](j)}(h``DRM_MM_INSERT_LOW``h]j)}(hjih]hDRM_MM_INSERT_LOW}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKLhjcubj )}(hhh](h)}(hfSearch for the lowest hole (address closest to 0, within the search range) that fits the desired node.h]hfSearch for the lowest hole (address closest to 0, within the search range) that fits the desired node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKIhjubh)}(h5Allocates the node from the bottom of the found hole.h]h5Allocates the node from the bottom of the found hole.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKLhjubeh}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKLhjubj)}(hX0``DRM_MM_INSERT_HIGH`` Search for the highest hole (address closest to U64_MAX, within the search range) that fits the desired node. Allocates the node from the *top* of the found hole. The specified alignment for the node is applied to the base of the node (:c:type:`drm_mm_node.start `). h](j)}(h``DRM_MM_INSERT_HIGH``h]j)}(hjh]hDRM_MM_INSERT_HIGH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKThjubj )}(hhh](h)}(hmSearch for the highest hole (address closest to U64_MAX, within the search range) that fits the desired node.h]hmSearch for the highest hole (address closest to U64_MAX, within the search range) that fits the desired node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKOhjubh)}(hAllocates the node from the *top* of the found hole. The specified alignment for the node is applied to the base of the node (:c:type:`drm_mm_node.start `).h](hAllocates the node from the }(hjhhhNhNubhemphasis)}(h*top*h]htop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh] of the found hole. The specified alignment for the node is applied to the base of the node (}(hjhhhNhNubh)}(h):c:type:`drm_mm_node.start `h]j)}(hjh]hdrm_mm_node.start}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKRhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKRhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKThjubj)}(hXB``DRM_MM_INSERT_EVICT`` Search for the most recently evicted hole (within the search range) that fits the desired node. This is appropriate for use immediately after performing an eviction scan (see drm_mm_scan_init()) and removing the selected nodes to form a hole. Allocates the node from the bottom of the found hole. h](j)}(h``DRM_MM_INSERT_EVICT``h]j)}(hj1h]hDRM_MM_INSERT_EVICT}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhK\hj+ubj )}(hhh](h)}(hSearch for the most recently evicted hole (within the search range) that fits the desired node. This is appropriate for use immediately after performing an eviction scan (see drm_mm_scan_init()) and removing the selected nodes to form a hole.h]hSearch for the most recently evicted hole (within the search range) that fits the desired node. This is appropriate for use immediately after performing an eviction scan (see drm_mm_scan_init()) and removing the selected nodes to form a hole.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKWhjGubh)}(h5Allocates the node from the bottom of the found hole.h]h5Allocates the node from the bottom of the found hole.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhK\hjGubeh}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhK\hjubj)}(hX``DRM_MM_INSERT_ONCE`` Only check the first hole for suitablity and report -ENOSPC immediately otherwise, rather than check every hole until a suitable one is found. Can only be used in conjunction with another search method such as DRM_MM_INSERT_HIGH or DRM_MM_INSERT_LOW. h](j)}(h``DRM_MM_INSERT_ONCE``h]j)}(hjyh]hDRM_MM_INSERT_ONCE}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKbhjsubj )}(hhh]h)}(hOnly check the first hole for suitablity and report -ENOSPC immediately otherwise, rather than check every hole until a suitable one is found. Can only be used in conjunction with another search method such as DRM_MM_INSERT_HIGH or DRM_MM_INSERT_LOW.h]hOnly check the first hole for suitablity and report -ENOSPC immediately otherwise, rather than check every hole until a suitable one is found. Can only be used in conjunction with another search method such as DRM_MM_INSERT_HIGH or DRM_MM_INSERT_LOW.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhK_hjubah}(h]h ]h"]h$]h&]uh1j hjsubeh}(h]h ]h"]h$]h&]uh1jhjhKbhjubj)}(h``DRM_MM_INSERT_HIGHEST`` Only check the highest hole (the hole with the largest address) and insert the node at the top of the hole or report -ENOSPC if unsuitable. Does not search all holes. h](j)}(h``DRM_MM_INSERT_HIGHEST``h]j)}(hjh]hDRM_MM_INSERT_HIGHEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKihjubj )}(hhh](h)}(hOnly check the highest hole (the hole with the largest address) and insert the node at the top of the hole or report -ENOSPC if unsuitable.h]hOnly check the highest hole (the hole with the largest address) and insert the node at the top of the hole or report -ENOSPC if unsuitable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKehjubh)}(hDoes not search all holes.h]hDoes not search all holes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKihjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKihjubj)}(h``DRM_MM_INSERT_LOWEST`` Only check the lowest hole (the hole with the smallest address) and insert the node at the bottom of the hole or report -ENOSPC if unsuitable. Does not search all holes.h](j)}(h``DRM_MM_INSERT_LOWEST``h]j)}(hjh]hDRM_MM_INSERT_LOWEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKohjubj )}(hhh](h)}(hOnly check the lowest hole (the hole with the smallest address) and insert the node at the bottom of the hole or report -ENOSPC if unsuitable.h]hOnly check the lowest hole (the hole with the smallest address) and insert the node at the bottom of the hole or report -ENOSPC if unsuitable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKlhjubh)}(hDoes not search all holes.h]hDoes not search all holes.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKphjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKohjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubh)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKshjthhubh)}(hXThe :c:type:`struct drm_mm ` range manager supports finding a suitable modes using a number of search trees. These trees are oranised by size, by address and in most recent eviction order. This allows the user to find either the smallest hole to reuse, the lowest or highest address to reuse, or simply reuse the most recent eviction that fits. When allocating the :c:type:`drm_mm_node` from within the hole, the :c:type:`drm_mm_insert_mode` also dictate whether to allocate the lowest matching address or the highest.h](hThe }(hjchhhNhNubh)}(h :c:type:`struct drm_mm `h]j)}(hjmh]h struct drm_mm}(hjohhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mmuh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhK=hjcubhXQ range manager supports finding a suitable modes using a number of search trees. These trees are oranised by size, by address and in most recent eviction order. This allows the user to find either the smallest hole to reuse, the lowest or highest address to reuse, or simply reuse the most recent eviction that fits. When allocating the }(hjchhhNhNubh)}(h:c:type:`drm_mm_node`h]j)}(hjh]h drm_mm_node}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhjhK=hjcubh from within the hole, the }(hjchhhNhNubh)}(h:c:type:`drm_mm_insert_mode`h]j)}(hjh]hdrm_mm_insert_mode}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mm_insert_modeuh1hhjhK=hjcubhM also dictate whether to allocate the lowest matching address or the highest.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK=hjthhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_node (C struct) c.drm_mm_nodehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h drm_mm_nodeh]j>)}(hstruct drm_mm_nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKHubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKHubjg)}(h drm_mm_nodeh]jm)}(hjh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKHubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKHubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKHhjhhubj)}(hhh]h)}(h$allocated block in the DRM allocatorh]h$allocated block in the DRM allocator}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhj3hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKHubeh}(h]h ](jstructeh"]h$]h&]jjjjNjjNjjjuh1j2hhhjthNhNubj)}(h**Definition**:: struct drm_mm_node { unsigned long color; u64 start; u64 size; }; **Members** ``color`` Opaque driver-private tag. ``start`` Start address of the allocated block. ``size`` Size of the allocated block.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh:}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjRubjT)}(hMstruct drm_mm_node { unsigned long color; u64 start; u64 size; };h]hMstruct drm_mm_node { unsigned long color; u64 start; u64 size; };}hjssbah}(h]h ]h"]h$]h&]jjuh1jShP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjRubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjRubj)}(hhh](j)}(h%``color`` Opaque driver-private tag. h](j)}(h ``color``h]j)}(hjh]hcolor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubj )}(hhh]h)}(hOpaque driver-private tag.h]hOpaque driver-private tag.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``start`` Start address of the allocated block. h](j)}(h ``start``h]j)}(hjh]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubj )}(hhh]h)}(h%Start address of the allocated block.h]h%Start address of the allocated block.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h%``size`` Size of the allocated block.h](j)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubj )}(hhh]h)}(hSize of the allocated block.h]hSize of the allocated block.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhj+ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj*hKhjubeh}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubh)}(h**Description**h]j)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjthhubh)}(hX:This represents an allocated block in a :c:type:`drm_mm` allocator. Except for pre-reserved nodes inserted using drm_mm_reserve_node() the structure is entirely opaque and should only be accessed through the provided funcions. Since allocation of these nodes is entirely handled by the driver they can be embedded.h](h(This represents an allocated block in a }(hjnhhhNhNubh)}(h:c:type:`drm_mm`h]j)}(hjxh]hdrm_mm}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mmuh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjnubhX allocator. Except for pre-reserved nodes inserted using drm_mm_reserve_node() the structure is entirely opaque and should only be accessed through the provided funcions. Since allocation of these nodes is entirely handled by the driver they can be embedded.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjthhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm (C struct)c.drm_mmhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hdrm_mmh]j>)}(h struct drm_mmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(hdrm_mmh]jm)}(hjh]hdrm_mm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h DRM allocatorh]h DRM allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hX**Definition**:: struct drm_mm { void (*color_adjust)(const struct drm_mm_node *node,unsigned long color, u64 *start, u64 *end); }; **Members** ``color_adjust`` Optional driver callback to further apply restrictions on a hole. The node argument points at the node containing the hole from which the block would be allocated (see drm_mm_hole_follows() and friends). The other arguments are the size of the block to be allocated. The driver can adjust the start and end as needed to e.g. insert guard pages.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubjT)}(hvstruct drm_mm { void (*color_adjust)(const struct drm_mm_node *node,unsigned long color, u64 *start, u64 *end); };h]hvstruct drm_mm { void (*color_adjust)(const struct drm_mm_node *node,unsigned long color, u64 *start, u64 *end); };}hj8sbah}(h]h ]h"]h$]h&]jjuh1jShP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubh)}(h **Members**h]j)}(hjIh]hMembers}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubj)}(hhh]j)}(hXi``color_adjust`` Optional driver callback to further apply restrictions on a hole. The node argument points at the node containing the hole from which the block would be allocated (see drm_mm_hole_follows() and friends). The other arguments are the size of the block to be allocated. The driver can adjust the start and end as needed to e.g. insert guard pages.h](j)}(h``color_adjust``h]j)}(hjhh]h color_adjust}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjbubj )}(hhh]h)}(hXXOptional driver callback to further apply restrictions on a hole. The node argument points at the node containing the hole from which the block would be allocated (see drm_mm_hole_follows() and friends). The other arguments are the size of the block to be allocated. The driver can adjust the start and end as needed to e.g. insert guard pages.h]hXXOptional driver callback to further apply restrictions on a hole. The node argument points at the node containing the hole from which the block would be allocated (see drm_mm_hole_follows() and friends). The other arguments are the size of the block to be allocated. The driver can adjust the start and end as needed to e.g. insert guard pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhj~ubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjthhubh)}(hX0DRM range allocator with a few special functions and features geared towards managing GPU memory. Except for the **color_adjust** callback the structure is entirely opaque and should only be accessed through the provided functions and macros. This structure can be embedded into larger driver structures.h](hqDRM range allocator with a few special functions and features geared towards managing GPU memory. Except for the }(hjhhhNhNubj)}(h**color_adjust**h]h color_adjust}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh callback the structure is entirely opaque and should only be accessed through the provided functions and macros. This structure can be embedded into larger driver structures.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjthhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_scan (C struct) c.drm_mm_scanhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h drm_mm_scanh]j>)}(hstruct drm_mm_scanh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKubjg)}(h drm_mm_scanh]jm)}(hjh]h drm_mm_scan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKhjhhubj)}(hhh]h)}(h#DRM allocator eviction roaster datah]h#DRM allocator eviction roaster data}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhj:hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjUjjUjjjuh1j2hhhjthNhNubj)}(h:**Definition**:: struct drm_mm_scan { }; **Members**h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh:}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjYubjT)}(hstruct drm_mm_scan { };h]hstruct drm_mm_scan { };}hjzsbah}(h]h ]h"]h$]h&]jjuh1jShP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjYubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjthhubh)}(hXMThis structure tracks data needed for the eviction roaster set up using drm_mm_scan_init(), and used with drm_mm_scan_add_block() and drm_mm_scan_remove_block(). The structure is entirely opaque and should only be accessed through the provided functions and macros. It is meant to be allocated temporarily by the driver on the stack.h]hXMThis structure tracks data needed for the eviction roaster set up using drm_mm_scan_init(), and used with drm_mm_scan_add_block() and drm_mm_scan_remove_block(). The structure is entirely opaque and should only be accessed through the provided functions and macros. It is meant to be allocated temporarily by the driver on the stack.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjthhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_mm_node_allocated (C function)c.drm_mm_node_allocatedhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h;bool drm_mm_node_allocated (const struct drm_mm_node *node)h]j>)}(h:bool drm_mm_node_allocated(const struct drm_mm_node *node)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_mm_node_allocatedh]jm)}(hdrm_mm_node_allocatedh]hdrm_mm_node_allocated}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h (const struct drm_mm_node *node)h]j)}(hconst struct drm_mm_node *nodeh](jD)}(hj&h]hconst}(hj$hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjD)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hjLhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j)}jj sbc.drm_mm_node_allocatedasbuh1hhj ubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h"checks whether a node is allocatedh]h"checks whether a node is allocated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hX/**Parameters** ``const struct drm_mm_node *node`` drm_mm_node to check **Description** Drivers are required to clear a node prior to using it with the drm_mm range manager. Drivers should use this helper for proper encapsulation of drm_mm internals. **Return** True if the **node** is allocated.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubj)}(hhh]j)}(h8``const struct drm_mm_node *node`` drm_mm_node to check h](j)}(h"``const struct drm_mm_node *node``h]j)}(hjh]hconst struct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubj )}(hhh]h)}(hdrm_mm_node to checkh]hdrm_mm_node to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubh)}(hUDrivers are required to clear a node prior to using it with the drm_mm range manager.h]hUDrivers are required to clear a node prior to using it with the drm_mm range manager.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubh)}(hLDrivers should use this helper for proper encapsulation of drm_mm internals.h]hLDrivers should use this helper for proper encapsulation of drm_mm internals.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubh)}(h **Return**h]j)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubh)}(h"True if the **node** is allocated.h](h True if the }(hjhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is allocated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_initialized (C function)c.drm_mm_initializedhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h1bool drm_mm_initialized (const struct drm_mm *mm)h]j>)}(h0bool drm_mm_initialized(const struct drm_mm *mm)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_mm_initializedh]jm)}(hdrm_mm_initializedh]hdrm_mm_initialized}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(const struct drm_mm *mm)h]j)}(hconst struct drm_mm *mmh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hj@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j)}jjsbc.drm_mm_initializedasbuh1hhjubjV)}(h h]h }(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmmh]hmm}(hj{hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h*checks whether an allocator is initializedh]h*checks whether an allocator is initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hX/**Parameters** ``const struct drm_mm *mm`` drm_mm to check **Description** Drivers should clear the struct drm_mm prior to initialisation if they want to use this function. Drivers should use this helper for proper encapsulation of drm_mm internals. **Return** True if the **mm** is initialized.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM hjubj)}(hhh]j)}(h,``const struct drm_mm *mm`` drm_mm to check h](j)}(h``const struct drm_mm *mm``h]j)}(hjh]hconst struct drm_mm *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM hjubj )}(hhh]h)}(hdrm_mm to checkh]hdrm_mm to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM hjubh)}(haDrivers should clear the struct drm_mm prior to initialisation if they want to use this function.h]haDrivers should clear the struct drm_mm prior to initialisation if they want to use this function.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM hjubh)}(hLDrivers should use this helper for proper encapsulation of drm_mm internals.h]hLDrivers should use this helper for proper encapsulation of drm_mm internals.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(h **Return**h]j)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(h"True if the **mm** is initialized.h](h True if the }(hjmhhhNhNubj)}(h**mm**h]hmm}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh is initialized.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_mm_hole_follows (C function)c.drm_mm_hole_followshNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h9bool drm_mm_hole_follows (const struct drm_mm_node *node)h]j>)}(h8bool drm_mm_hole_follows(const struct drm_mm_node *node)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM%ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM%ubjg)}(hdrm_mm_hole_followsh]jm)}(hdrm_mm_hole_followsh]hdrm_mm_hole_follows}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM%ubj)}(h (const struct drm_mm_node *node)h]j)}(hconst struct drm_mm_node *nodeh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j)}jjsbc.drm_mm_hole_followsasbuh1hhjubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM%ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM%ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM%hjhhubj)}(hhh]h)}(h'checks whether a hole follows this nodeh]h'checks whether a hole follows this node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM%ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hXe**Parameters** ``const struct drm_mm_node *node`` drm_mm_node to check **Description** Holes are embedded into the drm_mm using the tail of a drm_mm_node. If you wish to know whether a hole follows this particular node, query this function. See also drm_mm_hole_node_start() and drm_mm_hole_node_end(). **Return** True if a hole follows the **node**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj)}(hhh]j)}(h8``const struct drm_mm_node *node`` drm_mm_node to check h](j)}(h"``const struct drm_mm_node *node``h]j)}(hjh]hconst struct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(hdrm_mm_node to checkh]hdrm_mm_node to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(hHoles are embedded into the drm_mm using the tail of a drm_mm_node. If you wish to know whether a hole follows this particular node, query this function. See also drm_mm_hole_node_start() and drm_mm_hole_node_end().h]hHoles are embedded into the drm_mm using the tail of a drm_mm_node. If you wish to know whether a hole follows this particular node, query this function. See also drm_mm_hole_node_start() and drm_mm_hole_node_end().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(h **Return**h]j)}(hj+h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM"hjubh)}(h$True if a hole follows the **node**.h](hTrue if a hole follows the }(hjAhhhNhNubj)}(h**node**h]hnode}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_mm_hole_node_start (C function)c.drm_mm_hole_node_starthNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h@u64 drm_mm_hole_node_start (const struct drm_mm_node *hole_node)h]j>)}(h?u64 drm_mm_hole_node_start(const struct drm_mm_node *hole_node)h](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_mm_hole_node_startsbc.drm_mm_hole_node_startasbuh1hhj~hhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM:ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~hhhjhM:ubjg)}(hdrm_mm_hole_node_starth]jm)}(hjh]hdrm_mm_hole_node_start}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj~hhhjhM:ubj)}(h%(const struct drm_mm_node *hole_node)h]j)}(h#const struct drm_mm_node *hole_nodeh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_hole_node_startasbuh1hhjubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h hole_nodeh]h hole_node}(hjFhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhM:ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjzhhhjhM:ubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1j7hjhM:hjwhhubj)}(hhh]h)}(h1computes the start of the hole following **node**h](h)computes the start of the hole following }(hjphhhNhNubj)}(h**node**h]hnode}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM0hjmhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hXq**Parameters** ``const struct drm_mm_node *hole_node`` drm_mm_node which implicitly tracks the following hole **Description** This is useful for driver-specific debug dumpers. Otherwise drivers should not inspect holes themselves. Drivers must check first whether a hole indeed follows by looking at drm_mm_hole_follows() **Return** Start of the subsequent hole.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM4hjubj)}(hhh]j)}(h_``const struct drm_mm_node *hole_node`` drm_mm_node which implicitly tracks the following hole h](j)}(h'``const struct drm_mm_node *hole_node``h]j)}(hjh]h#const struct drm_mm_node *hole_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM1hjubj )}(hhh]h)}(h6drm_mm_node which implicitly tracks the following holeh]h6drm_mm_node which implicitly tracks the following hole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM3hjubh)}(hThis is useful for driver-specific debug dumpers. Otherwise drivers should not inspect holes themselves. Drivers must check first whether a hole indeed follows by looking at drm_mm_hole_follows()h]hThis is useful for driver-specific debug dumpers. Otherwise drivers should not inspect holes themselves. Drivers must check first whether a hole indeed follows by looking at drm_mm_hole_follows()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM3hjubh)}(h **Return**h]j)}(hj!h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM7hjubh)}(hStart of the subsequent hole.h]hStart of the subsequent hole.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_mm_hole_node_end (C function)c.drm_mm_hole_node_endhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h>u64 drm_mm_hole_node_end (const struct drm_mm_node *hole_node)h]j>)}(h=u64 drm_mm_hole_node_end(const struct drm_mm_node *hole_node)h](h)}(hhh]jm)}(hu64h]hu64}(hjihhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j)}jdrm_mm_hole_node_endsbc.drm_mm_hole_node_endasbuh1hhjbhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMPubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjbhhhjhMPubjg)}(hdrm_mm_hole_node_endh]jm)}(hjh]hdrm_mm_hole_node_end}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjbhhhjhMPubj)}(h%(const struct drm_mm_node *hole_node)h]j)}(h#const struct drm_mm_node *hole_nodeh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_hole_node_endasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h hole_nodeh]h hole_node}(hj*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjbhhhjhMPubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj^hhhjhMPubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1j7hjhMPhj[hhubj)}(hhh]h)}(h/computes the end of the hole following **node**h](h'computes the end of the hole following }(hjThhhNhNubj)}(h**node**h]hnode}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMFhjQhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjhMPubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1j2hhhjthNhNubj)}(hXp**Parameters** ``const struct drm_mm_node *hole_node`` drm_mm_node which implicitly tracks the following hole **Description** This is useful for driver-specific debug dumpers. Otherwise drivers should not inspect holes themselves. Drivers must check first whether a hole indeed follows by looking at drm_mm_hole_follows(). **Return** End of the subsequent hole.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMJhj~ubj)}(hhh]j)}(h_``const struct drm_mm_node *hole_node`` drm_mm_node which implicitly tracks the following hole h](j)}(h'``const struct drm_mm_node *hole_node``h]j)}(hjh]h#const struct drm_mm_node *hole_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMGhjubj )}(hhh]h)}(h6drm_mm_node which implicitly tracks the following holeh]h6drm_mm_node which implicitly tracks the following hole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjubah}(h]h ]h"]h$]h&]uh1jhj~ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMIhj~ubh)}(hThis is useful for driver-specific debug dumpers. Otherwise drivers should not inspect holes themselves. Drivers must check first whether a hole indeed follows by looking at drm_mm_hole_follows().h]hThis is useful for driver-specific debug dumpers. Otherwise drivers should not inspect holes themselves. Drivers must check first whether a hole indeed follows by looking at drm_mm_hole_follows().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMIhj~ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMMhj~ubh)}(hEnd of the subsequent hole.h]hEnd of the subsequent hole.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_nodes (C macro)c.drm_mm_nodeshNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h drm_mm_nodesh]j>)}(h drm_mm_nodesh]jg)}(h drm_mm_nodesh]jm)}(hjDh]h drm_mm_nodes}(hjNhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjFhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMaubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjBhhhjahMaubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1j7hjahMahj?hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj?hhhjahMaubeh}(h]h ](jmacroeh"]h$]h&]jjjjzjjzjjjuh1j2hhhjthNhNubh)}(h``drm_mm_nodes (mm)``h]j)}(hjh]hdrm_mm_nodes (mm)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMchjthhubj@-)}(h-list of nodes under the drm_mm range manager h]h)}(h,list of nodes under the drm_mm range managerh]h,list of nodes under the drm_mm range manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMVhjubah}(h]h ]h"]h$]h&]uh1j?-hjhMVhjthhubj)}(hXV**Parameters** ``mm`` the struct drm_mm range manager **Description** As the drm_mm range manager hides its node_list deep with its structure, extracting it looks painful and repetitive. This is not expected to be used outside of the drm_mm_for_each_node() macros and similar internal functions. **Return** The node list, may be empty.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMZhjubj)}(hhh]j)}(h'``mm`` the struct drm_mm range manager h](j)}(h``mm``h]j)}(hjh]hmm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMWhjubj )}(hhh]h)}(hthe struct drm_mm range managerh]hthe struct drm_mm range manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMWhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMYhjubh)}(hAs the drm_mm range manager hides its node_list deep with its structure, extracting it looks painful and repetitive. This is not expected to be used outside of the drm_mm_for_each_node() macros and similar internal functions.h]hAs the drm_mm range manager hides its node_list deep with its structure, extracting it looks painful and repetitive. This is not expected to be used outside of the drm_mm_for_each_node() macros and similar internal functions.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMYhjubh)}(h **Return**h]j)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM^hjubh)}(hThe node list, may be empty.h]hThe node list, may be empty.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_for_each_node (C macro)c.drm_mm_for_each_nodehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hdrm_mm_for_each_nodeh]j>)}(hdrm_mm_for_each_nodeh]jg)}(hdrm_mm_for_each_nodeh]jm)}(hjuh]hdrm_mm_for_each_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjwhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMkubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjshhhjhMkubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1j7hjhMkhjphhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjphhhjhMkubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubh)}(h$``drm_mm_for_each_node (entry, mm)``h]j)}(hjh]h drm_mm_for_each_node (entry, mm)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMmhjthhubj@-)}(h*iterator to walk over all allocated nodes h]h)}(h)iterator to walk over all allocated nodesh]h)iterator to walk over all allocated nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMdhjubah}(h]h ]h"]h$]h&]uh1j?-hjhMdhjthhubj)}(hX5**Parameters** ``entry`` :c:type:`struct drm_mm_node ` to assign to in each iteration step ``mm`` :c:type:`drm_mm` allocator to walk **Description** This iterator walks over all nodes in the range allocator. It is implemented with list_for_each(), so not save against removal of elements.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhhjubj)}(hhh](j)}(hY``entry`` :c:type:`struct drm_mm_node ` to assign to in each iteration step h](j)}(h ``entry``h]j)}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMehjubj )}(hhh]h)}(hN:c:type:`struct drm_mm_node ` to assign to in each iteration steph](h)}(h*:c:type:`struct drm_mm_node `h]j)}(hj$h]hstruct drm_mm_node}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhjhMehjubh$ to assign to in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(h*``mm`` :c:type:`drm_mm` allocator to walk h](j)}(h``mm``h]j)}(hj]h]hmm}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMfhjWubj )}(hhh]h)}(h":c:type:`drm_mm` allocator to walkh](h)}(h:c:type:`drm_mm`h]j)}(hj|h]hdrm_mm}(hj~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mmuh1hhjrhMfhjvubh allocator to walk}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhMfhjsubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMfhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhhjubh)}(hThis iterator walks over all nodes in the range allocator. It is implemented with list_for_each(), so not save against removal of elements.h]hThis iterator walks over all nodes in the range allocator. It is implemented with list_for_each(), so not save against removal of elements.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_mm_for_each_node_safe (C macro)c.drm_mm_for_each_node_safehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hdrm_mm_for_each_node_safeh]j>)}(hdrm_mm_for_each_node_safeh]jg)}(hdrm_mm_for_each_node_safeh]jm)}(hjh]hdrm_mm_for_each_node_safe}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMwubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMwubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMwhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMwubeh}(h]h ](jmacroeh"]h$]h&]jjjj,jj,jjjuh1j2hhhjthNhNubh)}(h/``drm_mm_for_each_node_safe (entry, next, mm)``h]j)}(hj2h]h+drm_mm_for_each_node_safe (entry, next, mm)}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMyhjthhubj@-)}(h*iterator to walk over all allocated nodes h]h)}(h)iterator to walk over all allocated nodesh]h)iterator to walk over all allocated nodes}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMohjHubah}(h]h ]h"]h$]h&]uh1j?-hjZhMohjthhubj)}(hX**Parameters** ``entry`` :c:type:`struct drm_mm_node ` to assign to in each iteration step ``next`` :c:type:`struct drm_mm_node ` to store the next step ``mm`` :c:type:`drm_mm` allocator to walk **Description** This iterator walks over all nodes in the range allocator. It is implemented with list_for_each_safe(), so save against removal of elements.h](h)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMshjaubj)}(hhh](j)}(hY``entry`` :c:type:`struct drm_mm_node ` to assign to in each iteration step h](j)}(h ``entry``h]j)}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMphjubj )}(hhh]h)}(hN:c:type:`struct drm_mm_node ` to assign to in each iteration steph](h)}(h*:c:type:`struct drm_mm_node `h]j)}(hjh]hstruct drm_mm_node}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhjhMphjubh$ to assign to in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMphj}ubj)}(hK``next`` :c:type:`struct drm_mm_node ` to store the next step h](j)}(h``next``h]j)}(hjh]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMqhjubj )}(hhh]h)}(hA:c:type:`struct drm_mm_node ` to store the next steph](h)}(h*:c:type:`struct drm_mm_node `h]j)}(hjh]hstruct drm_mm_node}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhjhMqhjubh to store the next step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhj}ubj)}(h*``mm`` :c:type:`drm_mm` allocator to walk h](j)}(h``mm``h]j)}(hj6h]hmm}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMrhj0ubj )}(hhh]h)}(h":c:type:`drm_mm` allocator to walkh](h)}(h:c:type:`drm_mm`h]j)}(hjUh]hdrm_mm}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mmuh1hhjKhMrhjOubh allocator to walk}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhMrhjLubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMrhj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMthjaubh)}(hThis iterator walks over all nodes in the range allocator. It is implemented with list_for_each_safe(), so save against removal of elements.h]hThis iterator walks over all nodes in the range allocator. It is implemented with list_for_each_safe(), so save against removal of elements.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMthjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_for_each_hole (C macro)c.drm_mm_for_each_holehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hdrm_mm_for_each_holeh]j>)}(hdrm_mm_for_each_holeh]jg)}(hdrm_mm_for_each_holeh]jm)}(hjh]hdrm_mm_for_each_hole}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubh)}(h8``drm_mm_for_each_hole (pos, mm, hole_start, hole_end)``h]j)}(hj h]h4drm_mm_for_each_hole (pos, mm, hole_start, hole_end)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjthhubj@-)}(h iterator to walk over all holes h]h)}(hiterator to walk over all holesh]hiterator to walk over all holes}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM{hj!ubah}(h]h ]h"]h$]h&]uh1j?-hj3hM{hjthhubj)}(hX**Parameters** ``pos`` :c:type:`drm_mm_node` used internally to track progress ``mm`` :c:type:`drm_mm` allocator to walk ``hole_start`` ulong variable to assign the hole start to on each iteration ``hole_end`` ulong variable to assign the hole end to on each iteration **Description** This iterator walks over all holes in the range allocator. It is implemented with list_for_each(), so not save against removal of elements. **entry** is used internally and will not reflect a real drm_mm_node for the very first hole. Hence users of this iterator may not access it. Implementation Note: We need to inline list_for_each_entry in order to be able to set hole_start and hole_end on each iteration while keeping the macro sane.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj:ubj)}(hhh](j)}(h@``pos`` :c:type:`drm_mm_node` used internally to track progress h](j)}(h``pos``h]j)}(hj_h]hpos}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM|hjYubj )}(hhh]h)}(h7:c:type:`drm_mm_node` used internally to track progressh](h)}(h:c:type:`drm_mm_node`h]j)}(hj~h]h drm_mm_node}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhjthM|hjxubh" used internally to track progress}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthM|hjuubah}(h]h ]h"]h$]h&]uh1j hjYubeh}(h]h ]h"]h$]h&]uh1jhjthM|hjVubj)}(h*``mm`` :c:type:`drm_mm` allocator to walk h](j)}(h``mm``h]j)}(hjh]hmm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM}hjubj )}(hhh]h)}(h":c:type:`drm_mm` allocator to walkh](h)}(h:c:type:`drm_mm`h]j)}(hjh]hdrm_mm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mmuh1hhjhM}hjubh allocator to walk}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjVubj)}(hL``hole_start`` ulong variable to assign the hole start to on each iteration h](j)}(h``hole_start``h]j)}(hjh]h hole_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM~hj ubj )}(hhh]h)}(h)}(hint drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, u64 size, u64 alignment, unsigned long color, enum drm_mm_insert_mode mode)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_mm_insert_node_generich]jm)}(hdrm_mm_insert_node_generich]hdrm_mm_insert_node_generic}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hy(struct drm_mm *mm, struct drm_mm_node *node, u64 size, u64 alignment, unsigned long color, enum drm_mm_insert_mode mode)h](j)}(hstruct drm_mm *mmh](jD)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj"ubjV)}(h h]h }(hj3hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj"ubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hjDhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j)}jj sbc.drm_mm_insert_node_genericasbuh1hhj"ubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj"ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjm)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_mm_node *nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j`c.drm_mm_insert_node_genericasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 sizeh](h)}(hhh]jm)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j`c.drm_mm_insert_node_genericasbuh1hhjubjV)}(h h]h }(hj)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hsizeh]hsize}(hj7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 alignmenth](h)}(hhh]jm)}(hu64h]hu64}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]j`c.drm_mm_insert_node_genericasbuh1hhjLubjV)}(h h]h }(hjqhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjLubjm)}(h alignmenth]h alignment}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long colorh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hcolorh]hcolor}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum drm_mm_insert_mode modeh](jD)}(hjGh]henum}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_mm_insert_modeh]hdrm_mm_insert_mode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j`c.drm_mm_insert_node_genericasbuh1hhjubjV)}(h h]h }(hj%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hmodeh]hmode}(hj3hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h$search for space and insert **node**h](hsearch for space and insert }(hj]hhhNhNubj)}(h**node**h]hnode}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hXF**Parameters** ``struct drm_mm *mm`` drm_mm to allocate from ``struct drm_mm_node *node`` preallocate node to insert ``u64 size`` size of the allocation ``u64 alignment`` alignment of the allocation ``unsigned long color`` opaque tag value to use for this node ``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement **Description** This is a simplified version of drm_mm_insert_node_in_range() with no range restrictions applied. The preallocated node must be cleared to 0. **Return** 0 on success, -ENOSPC if there's no suitable hole.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj)}(hhh](j)}(h.``struct drm_mm *mm`` drm_mm to allocate from h](j)}(h``struct drm_mm *mm``h]j)}(hjh]hstruct drm_mm *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(hdrm_mm to allocate fromh]hdrm_mm to allocate from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``struct drm_mm_node *node`` preallocate node to insert h](j)}(h``struct drm_mm_node *node``h]j)}(hjh]hstruct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(hpreallocate node to inserth]hpreallocate node to insert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``u64 size`` size of the allocation h](j)}(h ``u64 size``h]j)}(hjh]hu64 size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h.``u64 alignment`` alignment of the allocation h](j)}(h``u64 alignment``h]j)}(hjWh]h u64 alignment}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjQubj )}(hhh]h)}(halignment of the allocationh]halignment of the allocation}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(h>``unsigned long color`` opaque tag value to use for this node h](j)}(h``unsigned long color``h]j)}(hjh]hunsigned long color}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(h%opaque tag value to use for this nodeh]h%opaque tag value to use for this node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hO``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement h](j)}(h ``enum drm_mm_insert_mode mode``h]j)}(hjh]henum drm_mm_insert_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(h-fine-tune the allocation search and placementh]h-fine-tune the allocation search and placement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(haThis is a simplified version of drm_mm_insert_node_in_range() with no range restrictions applied.h]haThis is a simplified version of drm_mm_insert_node_in_range() with no range restrictions applied.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(h+The preallocated node must be cleared to 0.h]h+The preallocated node must be cleared to 0.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(h **Return**h]j)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(h20 on success, -ENOSPC if there's no suitable hole.h]h40 on success, -ENOSPC if there’s no suitable hole.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_insert_node (C function)c.drm_mm_insert_nodehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hNint drm_mm_insert_node (struct drm_mm *mm, struct drm_mm_node *node, u64 size)h]j>)}(hMint drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node, u64 size)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{hhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{hhhjhMubjg)}(hdrm_mm_insert_nodeh]jm)}(hdrm_mm_insert_nodeh]hdrm_mm_insert_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj{hhhjhMubj)}(h7(struct drm_mm *mm, struct drm_mm_node *node, u64 size)h](j)}(hstruct drm_mm *mmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_mm_insert_nodeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_mm_node *nodeh](jD)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj*ubjV)}(h h]h }(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*ubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hjLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]jc.drm_mm_insert_nodeasbuh1hhj*ubjV)}(h h]h }(hjjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*ubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 sizeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_insert_nodeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjwhhhjhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjthhubj)}(hhh]h)}(h$search for space and insert **node**h](hsearch for space and insert }(hjhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hXv**Parameters** ``struct drm_mm *mm`` drm_mm to allocate from ``struct drm_mm_node *node`` preallocate node to insert ``u64 size`` size of the allocation **Description** This is a simplified version of drm_mm_insert_node_generic() with **color** set to 0. The preallocated node must be cleared to 0. **Return** 0 on success, -ENOSPC if there's no suitable hole.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj!ubj)}(hhh](j)}(h.``struct drm_mm *mm`` drm_mm to allocate from h](j)}(h``struct drm_mm *mm``h]j)}(hjFh]hstruct drm_mm *mm}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj@ubj )}(hhh]h)}(hdrm_mm to allocate fromh]hdrm_mm to allocate from}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubj)}(h8``struct drm_mm_node *node`` preallocate node to insert h](j)}(h``struct drm_mm_node *node``h]j)}(hjh]hstruct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjyubj )}(hhh]h)}(hpreallocate node to inserth]hpreallocate node to insert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h$``u64 size`` size of the allocation h](j)}(h ``u64 size``h]j)}(hjh]hu64 size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj!ubh)}(hUThis is a simplified version of drm_mm_insert_node_generic() with **color** set to 0.h](hBThis is a simplified version of drm_mm_insert_node_generic() with }(hj hhhNhNubj)}(h **color**h]hcolor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh set to 0.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj!ubh)}(h+The preallocated node must be cleared to 0.h]h+The preallocated node must be cleared to 0.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj!ubh)}(h **Return**h]j)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj!ubh)}(h20 on success, -ENOSPC if there's no suitable hole.h]h40 on success, -ENOSPC if there’s no suitable hole.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_clean (C function)c.drm_mm_cleanhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h+bool drm_mm_clean (const struct drm_mm *mm)h]j>)}(h*bool drm_mm_clean(const struct drm_mm *mm)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj|hhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj|hhhjhMubjg)}(h drm_mm_cleanh]jm)}(h drm_mm_cleanh]h drm_mm_clean}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj|hhhjhMubj)}(h(const struct drm_mm *mm)h]j)}(hconst struct drm_mm *mmh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_mm_cleanasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmmh]hmm}(hj0hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjxhhhjhMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjuhhubj)}(hhh]h)}(h$checks whether an allocator is cleanh]h$checks whether an allocator is clean}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjWhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjrjjjuh1j2hhhjthNhNubj)}(h**Parameters** ``const struct drm_mm *mm`` drm_mm allocator to check **Return** True if the allocator is completely free, false if there's still a node allocated in it.h](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjvubj)}(hhh]j)}(h6``const struct drm_mm *mm`` drm_mm allocator to check h](j)}(h``const struct drm_mm *mm``h]j)}(hjh]hconst struct drm_mm *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(hdrm_mm allocator to checkh]hdrm_mm allocator to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjvubh)}(hXTrue if the allocator is completely free, false if there's still a node allocated in it.h]hZTrue if the allocator is completely free, false if there’s still a node allocated in it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_mm_for_each_node_in_range (C macro)c.drm_mm_for_each_node_in_rangehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hdrm_mm_for_each_node_in_rangeh]j>)}(hdrm_mm_for_each_node_in_rangeh]jg)}(hdrm_mm_for_each_node_in_rangeh]jm)}(hjh]hdrm_mm_for_each_node_in_range}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj2hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj2hMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj2hMubeh}(h]h ](jmacroeh"]h$]h&]jjjjKjjKjjjuh1j2hhhjthNhNubh)}(h@``drm_mm_for_each_node_in_range (node__, mm__, start__, end__)``h]j)}(hjQh]h`, and may even continue indefinitely.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj)}(hhh](j)}(hE``node__`` drm_mm_node structure to assign to in each iteration step h](j)}(h ``node__``h]j)}(hjh]hnode__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(h9drm_mm_node structure to assign to in each iteration steph]h9drm_mm_node structure to assign to in each iteration step}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``mm__`` drm_mm allocator to walk h](j)}(h``mm__``h]j)}(hjh]hmm__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(hdrm_mm allocator to walkh]hdrm_mm allocator to walk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``start__`` starting offset, the first node will overlap this h](j)}(h ``start__``h]j)}(hjh]hstart__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(h1starting offset, the first node will overlap thish]h1starting offset, the first node will overlap this}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(hP``end__`` ending offset, the last node will start before this (but may overlap) h](j)}(h ``end__``h]j)}(hjPh]hend__}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjJubj )}(hhh]h)}(hEending offset, the last node will start before this (but may overlap)h]hEending offset, the last node will start before this (but may overlap)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh)}(hX This iterator walks over all nodes in the range allocator that lie between **start** and **end**. It is implemented similarly to list_for_each(), but using the internal interval tree to accelerate the search for the starting node, and so not safe against removal of elements. It assumes that **end** is within (or is the upper limit of) the drm_mm allocator. If [**start**, **end**] are beyond the range of the drm_mm, the iterator may walk over the special _unallocated_ :c:type:`drm_mm.head_node `, and may even continue indefinitely.h](hKThis iterator walks over all nodes in the range allocator that lie between }(hjhhhNhNubj)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. It is implemented similarly to list_for_each(), but using the internal interval tree to accelerate the search for the starting node, and so not safe against removal of elements. It assumes that }(hjhhhNhNubj)}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh@ is within (or is the upper limit of) the drm_mm allocator. If [}(hjhhhNhNubj)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh[] are beyond the range of the drm_mm, the iterator may walk over the special _unallocated_ }(hjhhhNhNubh)}(h#:c:type:`drm_mm.head_node `h]j)}(hjh]hdrm_mm.head_node}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_mmuh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubh%, and may even continue indefinitely.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_scan_init (C function)c.drm_mm_scan_inithNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hvoid drm_mm_scan_init (struct drm_mm_scan *scan, struct drm_mm *mm, u64 size, u64 alignment, unsigned long color, enum drm_mm_insert_mode mode)h]j>)}(hvoid drm_mm_scan_init(struct drm_mm_scan *scan, struct drm_mm *mm, u64 size, u64 alignment, unsigned long color, enum drm_mm_insert_mode mode)h](jc)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjIhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMubjV)}(h h]h }(hj\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIhhhj[hMubjg)}(hdrm_mm_scan_inith]jm)}(hdrm_mm_scan_inith]hdrm_mm_scan_init}(hjnhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjIhhhj[hMubj)}(hy(struct drm_mm_scan *scan, struct drm_mm *mm, u64 size, u64 alignment, unsigned long color, enum drm_mm_insert_mode mode)h](j)}(hstruct drm_mm_scan *scanh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_scanh]h drm_mm_scan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjpsbc.drm_mm_scan_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hscanh]hscan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_mm *mmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_initasbuh1hhjubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hmmh]hmm}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 sizeh](h)}(hhh]jm)}(hu64h]hu64}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jc.drm_mm_scan_initasbuh1hhjhubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhubjm)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 alignmenth](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h alignmenth]h alignment}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long colorh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hcolorh]hcolor}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum drm_mm_insert_mode modeh](jD)}(hjGh]henum}(hjMhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjIubjV)}(h h]h }(hjZhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIubh)}(hhh]jm)}(hdrm_mm_insert_modeh]hdrm_mm_insert_mode}(hjkhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]jc.drm_mm_scan_initasbuh1hhjIubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIubjm)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhj[hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjEhhhj[hMubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1j7hj[hMhjBhhubj)}(hhh]h)}(hinitialize lru scanningh]hinitialize lru scanning}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hX**Parameters** ``struct drm_mm_scan *scan`` scan state ``struct drm_mm *mm`` drm_mm to scan ``u64 size`` size of the allocation ``u64 alignment`` alignment of the allocation ``unsigned long color`` opaque tag value to use for the allocation ``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement **Description** This is a simplified version of drm_mm_scan_init_with_range() with no range restrictions applied. This simply sets up the scanning routines with the parameters for the desired hole. Warning: As long as the scan list is non-empty, no other operations than adding/removing nodes to/from the scan list are allowed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj)}(hhh](j)}(h(``struct drm_mm_scan *scan`` scan state h](j)}(h``struct drm_mm_scan *scan``h]j)}(hj h]hstruct drm_mm_scan *scan}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubj )}(hhh]h)}(h scan stateh]h scan state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h%``struct drm_mm *mm`` drm_mm to scan h](j)}(h``struct drm_mm *mm``h]j)}(hj; h]hstruct drm_mm *mm}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9 ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj5 ubj )}(hhh]h)}(hdrm_mm to scanh]hdrm_mm to scan}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP hMhjQ ubah}(h]h ]h"]h$]h&]uh1j hj5 ubeh}(h]h ]h"]h$]h&]uh1jhjP hMhjubj)}(h$``u64 size`` size of the allocation h](j)}(h ``u64 size``h]j)}(hjt h]hu64 size}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjn ubj )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjn ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h.``u64 alignment`` alignment of the allocation h](j)}(h``u64 alignment``h]j)}(hj h]h u64 alignment}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj ubj )}(hhh]h)}(halignment of the allocationh]halignment of the allocation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hC``unsigned long color`` opaque tag value to use for the allocation h](j)}(h``unsigned long color``h]j)}(hj h]hunsigned long color}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj ubj )}(hhh]h)}(h*opaque tag value to use for the allocationh]h*opaque tag value to use for the allocation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hO``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement h](j)}(h ``enum drm_mm_insert_mode mode``h]j)}(hj h]henum drm_mm_insert_mode mode}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhj ubj )}(hhh]h)}(h-fine-tune the allocation search and placementh]h-fine-tune the allocation search and placement}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4 hMhj5 ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj4 hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjZ h]h Description}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM hjubh)}(haThis is a simplified version of drm_mm_scan_init_with_range() with no range restrictions applied.h]haThis is a simplified version of drm_mm_scan_init_with_range() with no range restrictions applied.}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM hjubh)}(hSThis simply sets up the scanning routines with the parameters for the desired hole.h]hSThis simply sets up the scanning routines with the parameters for the desired hole.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhM hjubh)}(hWarning: As long as the scan list is non-empty, no other operations than adding/removing nodes to/from the scan list are allowed.h]hWarning: As long as the scan list is non-empty, no other operations than adding/removing nodes to/from the scan list are allowed.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:463: ./include/drm/drm_mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_mm_reserve_node (C function)c.drm_mm_reserve_nodehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hEint drm_mm_reserve_node (struct drm_mm *mm, struct drm_mm_node *node)h]j>)}(hDint drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node)h](jc)}(hinth]hint}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhj hMubjg)}(hdrm_mm_reserve_nodeh]jm)}(hdrm_mm_reserve_nodeh]hdrm_mm_reserve_node}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj hhhj hMubj)}(h-(struct drm_mm *mm, struct drm_mm_node *node)h](j)}(hstruct drm_mm *mmh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.drm_mm_reserve_nodeasbuh1hhj ubjV)}(h h]h }(hj8 hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hmmh]hmm}(hjS hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct drm_mm_node *nodeh](jD)}(hjh]hstruct}(hjl hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjh ubjV)}(h h]h }(hjy hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjh ubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j4 c.drm_mm_reserve_nodeasbuh1hhjh ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjh ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh ubjm)}(hnodeh]hnode}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjh ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj hMhj hhubj)}(hhh]h)}(hinsert an pre-initialized nodeh]hinsert an pre-initialized node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j2hhhjthNhNubj)}(hXK**Parameters** ``struct drm_mm *mm`` drm_mm allocator to insert **node** into ``struct drm_mm_node *node`` drm_mm_node to insert **Description** This functions inserts an already set-up :c:type:`drm_mm_node` into the allocator, meaning that start, size and color must be set by the caller. All other fields must be cleared to 0. This is useful to initialize the allocator with preallocated objects which must be set-up before the range allocator can be set-up, e.g. when taking over a firmware framebuffer. **Return** 0 on success, -ENOSPC if there's no hole where **node** is.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj ubj)}(hhh](j)}(h?``struct drm_mm *mm`` drm_mm allocator to insert **node** into h](j)}(h``struct drm_mm *mm``h]j)}(hj. h]hstruct drm_mm *mm}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj, ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj( ubj )}(hhh]h)}(h(drm_mm allocator to insert **node** intoh](hdrm_mm allocator to insert }(hjG hhhNhNubj)}(h**node**h]hnode}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG ubh into}(hjG hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC hMhjD ubah}(h]h ]h"]h$]h&]uh1j hj( ubeh}(h]h ]h"]h$]h&]uh1jhjC hMhj% ubj)}(h3``struct drm_mm_node *node`` drm_mm_node to insert h](j)}(h``struct drm_mm_node *node``h]j)}(hjy h]hstruct drm_mm_node *node}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjs ubj )}(hhh]h)}(hdrm_mm_node to inserth]hdrm_mm_node to insert}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjs ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj% ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj ubh)}(hXiThis functions inserts an already set-up :c:type:`drm_mm_node` into the allocator, meaning that start, size and color must be set by the caller. All other fields must be cleared to 0. This is useful to initialize the allocator with preallocated objects which must be set-up before the range allocator can be set-up, e.g. when taking over a firmware framebuffer.h](h)This functions inserts an already set-up }(hj hhhNhNubh)}(h:c:type:`drm_mm_node`h]j)}(hj h]h drm_mm_node}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_mm_nodeuh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj ubhX+ into the allocator, meaning that start, size and color must be set by the caller. All other fields must be cleared to 0. This is useful to initialize the allocator with preallocated objects which must be set-up before the range allocator can be set-up, e.g. when taking over a firmware framebuffer.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj ubh)}(h;0 on success, -ENOSPC if there's no hole where **node** is.h](h10 on success, -ENOSPC if there’s no hole where }(hj hhhNhNubj)}(h**node**h]hnode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_mm_insert_node_in_range (C function)c.drm_mm_insert_node_in_rangehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hint drm_mm_insert_node_in_range (struct drm_mm * const mm, struct drm_mm_node * const node, u64 size, u64 alignment, unsigned long color, u64 range_start, u64 range_end, enum drm_mm_insert_mode mode)h]j>)}(hint drm_mm_insert_node_in_range(struct drm_mm *const mm, struct drm_mm_node *const node, u64 size, u64 alignment, unsigned long color, u64 range_start, u64 range_end, enum drm_mm_insert_mode mode)h](jc)}(hinth]hint}(hjU hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjQ hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMubjV)}(h h]h }(hjd hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQ hhhjc hMubjg)}(hdrm_mm_insert_node_in_rangeh]jm)}(hdrm_mm_insert_node_in_rangeh]hdrm_mm_insert_node_in_range}(hjv hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjr ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjQ hhhjc hMubj)}(h(struct drm_mm *const mm, struct drm_mm_node *const node, u64 size, u64 alignment, unsigned long color, u64 range_start, u64 range_end, enum drm_mm_insert_mode mode)h](j)}(hstruct drm_mm *const mmh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjx sbc.drm_mm_insert_node_in_rangeasbuh1hhj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjD)}(hj&h]hconst}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjm)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct drm_mm_node *const nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j c.drm_mm_insert_node_in_rangeasbuh1hhjubjV)}(h h]h }(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjD)}(hj&h]hconst}(hjvhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hu64 sizeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_mm_insert_node_in_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h u64 alignmenth](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_mm_insert_node_in_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h alignmenth]h alignment}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned long colorh](jc)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj6ubjV)}(h h]h }(hjHhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubjc)}(hlongh]hlong}(hjVhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj6ubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubjm)}(hcolorh]hcolor}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hu64 range_starth](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_mm_insert_node_in_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h range_starth]h range_start}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h u64 range_endh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_mm_insert_node_in_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h range_endh]h range_end}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(henum drm_mm_insert_mode modeh](jD)}(hjGh]henum}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_mm_insert_modeh]hdrm_mm_insert_mode}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j c.drm_mm_insert_node_in_rangeasbuh1hhjubjV)}(h h]h }(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hmodeh]hmode}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjQ hhhjc hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjM hhhjc hMubah}(h]jH ah ](jjeh"]h$]h&]jj)jhuh1j7hjc hMhjJ hhubj)}(hhh]h)}(h+ranged search for space and insert **node**h](h#ranged search for space and insert }(hjhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjJ hhhjc hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hXq**Parameters** ``struct drm_mm * const mm`` drm_mm to allocate from ``struct drm_mm_node * const node`` preallocate node to insert ``u64 size`` size of the allocation ``u64 alignment`` alignment of the allocation ``unsigned long color`` opaque tag value to use for this node ``u64 range_start`` start of the allowed range for this node ``u64 range_end`` end of the allowed range for this node ``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement **Description** The preallocated **node** must be cleared to 0. **Return** 0 on success, -ENOSPC if there's no suitable hole.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj)}(hhh](j)}(h5``struct drm_mm * const mm`` drm_mm to allocate from h](j)}(h``struct drm_mm * const mm``h]j)}(hjh]hstruct drm_mm * const mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(hdrm_mm to allocate fromh]hdrm_mm to allocate from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h?``struct drm_mm_node * const node`` preallocate node to insert h](j)}(h#``struct drm_mm_node * const node``h]j)}(hjh]hstruct drm_mm_node * const node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(hpreallocate node to inserth]hpreallocate node to insert}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(h$``u64 size`` size of the allocation h](j)}(h ``u64 size``h]j)}(hjPh]hu64 size}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjJubj )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubj)}(h.``u64 alignment`` alignment of the allocation h](j)}(h``u64 alignment``h]j)}(hjh]h u64 alignment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(halignment of the allocationh]halignment of the allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``unsigned long color`` opaque tag value to use for this node h](j)}(h``unsigned long color``h]j)}(hjh]hunsigned long color}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(h%opaque tag value to use for this nodeh]h%opaque tag value to use for this node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``u64 range_start`` start of the allowed range for this node h](j)}(h``u64 range_start``h]j)}(hjh]hu64 range_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(h(start of the allowed range for this nodeh]h(start of the allowed range for this node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h9``u64 range_end`` end of the allowed range for this node h](j)}(h``u64 range_end``h]j)}(hj4h]h u64 range_end}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj.ubj )}(hhh]h)}(h&end of the allowed range for this nodeh]h&end of the allowed range for this node}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubj)}(hO``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement h](j)}(h ``enum drm_mm_insert_mode mode``h]j)}(hjmh]henum drm_mm_insert_mode mode}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjgubj )}(hhh]h)}(h-fine-tune the allocation search and placementh]h-fine-tune the allocation search and placement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubh)}(h/The preallocated **node** must be cleared to 0.h](hThe preallocated }(hjhhhNhNubj)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh must be cleared to 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubh)}(h20 on success, -ENOSPC if there's no suitable hole.h]h40 on success, -ENOSPC if there’s no suitable hole.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_remove_node (C function)c.drm_mm_remove_nodehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h2void drm_mm_remove_node (struct drm_mm_node *node)h]j>)}(h1void drm_mm_remove_node(struct drm_mm_node *node)h](jc)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj"hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMsubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj"hhhj4hMsubjg)}(hdrm_mm_remove_nodeh]jm)}(hdrm_mm_remove_nodeh]hdrm_mm_remove_node}(hjGhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj"hhhj4hMsubj)}(h(struct drm_mm_node *node)h]j)}(hstruct drm_mm_node *nodeh](jD)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj_ubjV)}(h h]h }(hjphhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj_ubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjIsbc.drm_mm_remove_nodeasbuh1hhj_ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubah}(h]h ]h"]h$]h&]jjuh1jhj"hhhj4hMsubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj4hMsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj4hMshjhhubj)}(hhh]h)}(h(Remove a memory node from the allocator.h]h(Remove a memory node from the allocator.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMlhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hX4**Parameters** ``struct drm_mm_node *node`` drm_mm_node to remove **Description** This just removes a node from its drm_mm allocator. The node does not need to be cleared again before it can be re-inserted into this or any other drm_mm allocator. It is a bug to call this function on a unallocated node.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMphjubj)}(hhh]j)}(h3``struct drm_mm_node *node`` drm_mm_node to remove h](j)}(h``struct drm_mm_node *node``h]j)}(hj'h]hstruct drm_mm_node *node}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMmhj!ubj )}(hhh]h)}(hdrm_mm_node to removeh]hdrm_mm_node to remove}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMmhj=ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMmhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMohjubh)}(hThis just removes a node from its drm_mm allocator. The node does not need to be cleared again before it can be re-inserted into this or any other drm_mm allocator. It is a bug to call this function on a unallocated node.h]hThis just removes a node from its drm_mm allocator. The node does not need to be cleared again before it can be re-inserted into this or any other drm_mm allocator. It is a bug to call this function on a unallocated node.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_mm_scan_init_with_range (C function)c.drm_mm_scan_init_with_rangehNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hvoid drm_mm_scan_init_with_range (struct drm_mm_scan *scan, struct drm_mm *mm, u64 size, u64 alignment, unsigned long color, u64 start, u64 end, enum drm_mm_insert_mode mode)h]j>)}(hvoid drm_mm_scan_init_with_range(struct drm_mm_scan *scan, struct drm_mm *mm, u64 size, u64 alignment, unsigned long color, u64 start, u64 end, enum drm_mm_insert_mode mode)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_mm_scan_init_with_rangeh]jm)}(hdrm_mm_scan_init_with_rangeh]hdrm_mm_scan_init_with_range}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(struct drm_mm_scan *scan, struct drm_mm *mm, u64 size, u64 alignment, unsigned long color, u64 start, u64 end, enum drm_mm_insert_mode mode)h](j)}(hstruct drm_mm_scan *scanh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_scanh]h drm_mm_scan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_mm_scan_init_with_rangeasbuh1hhjubjV)}(h h]h }(hj"hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hscanh]hscan}(hj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_mm *mmh](jD)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjRubjV)}(h h]h }(hjchhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]jc.drm_mm_scan_init_with_rangeasbuh1hhjRubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjm)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 sizeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_init_with_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 alignmenth](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_init_with_rangeasbuh1hhj ubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjm)}(h alignmenth]h alignment}(hj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long colorh](jc)}(hunsignedh]hunsigned}(hjVhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjRubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubjc)}(hlongh]hlong}(hjrhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjRubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubjm)}(hcolorh]hcolor}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 starth](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_init_with_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 endh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_init_with_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hendh]hend}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum drm_mm_insert_mode modeh](jD)}(hjGh]henum}(hj7hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj3ubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3ubh)}(hhh]jm)}(hdrm_mm_insert_modeh]hdrm_mm_insert_mode}(hjUhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]jc.drm_mm_scan_init_with_rangeasbuh1hhj3ubjV)}(h h]h }(hjshhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3ubjm)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h(initialize range-restricted lru scanningh]h(initialize range-restricted lru scanning}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hX**Parameters** ``struct drm_mm_scan *scan`` scan state ``struct drm_mm *mm`` drm_mm to scan ``u64 size`` size of the allocation ``u64 alignment`` alignment of the allocation ``unsigned long color`` opaque tag value to use for the allocation ``u64 start`` start of the allowed range for the allocation ``u64 end`` end of the allowed range for the allocation ``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement **Description** This simply sets up the scanning routines with the parameters for the desired hole. Warning: As long as the scan list is non-empty, no other operations than adding/removing nodes to/from the scan list are allowed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj)}(hhh](j)}(h(``struct drm_mm_scan *scan`` scan state h](j)}(h``struct drm_mm_scan *scan``h]j)}(hjh]hstruct drm_mm_scan *scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(h scan stateh]h scan state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``struct drm_mm *mm`` drm_mm to scan h](j)}(h``struct drm_mm *mm``h]j)}(hj%h]hstruct drm_mm *mm}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(hdrm_mm to scanh]hdrm_mm to scan}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h$``u64 size`` size of the allocation h](j)}(h ``u64 size``h]j)}(hj^h]hu64 size}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjXubj )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjtubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubj)}(h.``u64 alignment`` alignment of the allocation h](j)}(h``u64 alignment``h]j)}(hjh]h u64 alignment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(halignment of the allocationh]halignment of the allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``unsigned long color`` opaque tag value to use for the allocation h](j)}(h``unsigned long color``h]j)}(hjh]hunsigned long color}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(h*opaque tag value to use for the allocationh]h*opaque tag value to use for the allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``u64 start`` start of the allowed range for the allocation h](j)}(h ``u64 start``h]j)}(hj h]h u64 start}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(h-start of the allowed range for the allocationh]h-start of the allowed range for the allocation}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``u64 end`` end of the allowed range for the allocation h](j)}(h ``u64 end``h]j)}(hjBh]hu64 end}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj<ubj )}(hhh]h)}(h+end of the allowed range for the allocationh]h+end of the allowed range for the allocation}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubj)}(hO``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement h](j)}(h ``enum drm_mm_insert_mode mode``h]j)}(hj{h]henum drm_mm_insert_mode mode}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjuubj )}(hhh]h)}(h-fine-tune the allocation search and placementh]h-fine-tune the allocation search and placement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubh)}(hSThis simply sets up the scanning routines with the parameters for the desired hole.h]hSThis simply sets up the scanning routines with the parameters for the desired hole.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubh)}(hWarning: As long as the scan list is non-empty, no other operations than adding/removing nodes to/from the scan list are allowed.h]hWarning: As long as the scan list is non-empty, no other operations than adding/removing nodes to/from the scan list are allowed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_mm_scan_add_block (C function)c.drm_mm_scan_add_blockhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hObool drm_mm_scan_add_block (struct drm_mm_scan *scan, struct drm_mm_node *node)h]j>)}(hNbool drm_mm_scan_add_block(struct drm_mm_scan *scan, struct drm_mm_node *node)h](jc)}(hj h]hbool}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_mm_scan_add_blockh]jm)}(hdrm_mm_scan_add_blockh]hdrm_mm_scan_add_block}(hj*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h4(struct drm_mm_scan *scan, struct drm_mm_node *node)h](j)}(hstruct drm_mm_scan *scanh](jD)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjBubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubh)}(hhh]jm)}(h drm_mm_scanh]h drm_mm_scan}(hjdhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j)}jj,sbc.drm_mm_scan_add_blockasbuh1hhjBubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjm)}(hscanh]hscan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hstruct drm_mm_node *nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_add_blockasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hadd a node to the scan listh]hadd a node to the scan list}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1j2hhhjthNhNubj)}(hX**Parameters** ``struct drm_mm_scan *scan`` the active drm_mm scanner ``struct drm_mm_node *node`` drm_mm_node to add **Description** Add a node to the scan list that might be freed to make space for the desired hole. **Return** True if a hole has been found, false otherwise.h](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjUubj)}(hhh](j)}(h7``struct drm_mm_scan *scan`` the active drm_mm scanner h](j)}(h``struct drm_mm_scan *scan``h]j)}(hjzh]hstruct drm_mm_scan *scan}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjtubj )}(hhh]h)}(hthe active drm_mm scannerh]hthe active drm_mm scanner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubj)}(h0``struct drm_mm_node *node`` drm_mm_node to add h](j)}(h``struct drm_mm_node *node``h]j)}(hjh]hstruct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjubj )}(hhh]h)}(hdrm_mm_node to addh]hdrm_mm_node to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubeh}(h]h ]h"]h$]h&]uh1jhjUubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjUubh)}(hSAdd a node to the scan list that might be freed to make space for the desired hole.h]hSAdd a node to the scan list that might be freed to make space for the desired hole.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjUubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjUubh)}(h/True if a hole has been found, false otherwise.h]h/True if a hole has been found, false otherwise.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_mm_scan_remove_block (C function)c.drm_mm_scan_remove_blockhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hRbool drm_mm_scan_remove_block (struct drm_mm_scan *scan, struct drm_mm_node *node)h]j>)}(hQbool drm_mm_scan_remove_block(struct drm_mm_scan *scan, struct drm_mm_node *node)h](jc)}(hj h]hbool}(hjZhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjVhhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMDubjV)}(h h]h }(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVhhhjghMDubjg)}(hdrm_mm_scan_remove_blockh]jm)}(hdrm_mm_scan_remove_blockh]hdrm_mm_scan_remove_block}(hjzhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjVhhhjghMDubj)}(h4(struct drm_mm_scan *scan, struct drm_mm_node *node)h](j)}(hstruct drm_mm_scan *scanh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_scanh]h drm_mm_scan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj|sbc.drm_mm_scan_remove_blockasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hscanh]hscan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_mm_node *nodeh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hj&hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]jc.drm_mm_scan_remove_blockasbuh1hhjubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnodeh]hnode}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjVhhhjghMDubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjRhhhjghMDubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1j7hjghMDhjOhhubj)}(hhh]h)}(h remove a node from the scan listh]h remove a node from the scan list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM2hjhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjghMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hX>**Parameters** ``struct drm_mm_scan *scan`` the active drm_mm scanner ``struct drm_mm_node *node`` drm_mm_node to remove **Description** Nodes **must** be removed in exactly the reverse order from the scan list as they have been added (e.g. using list_add() as they are added and then list_for_each() over that eviction list to remove), otherwise the internal state of the memory manager will be corrupted. When the scan list is empty, the selected memory nodes can be freed. An immediately following drm_mm_insert_node_in_range_generic() or one of the simpler versions of that function with !DRM_MM_SEARCH_BEST will then return the just freed block (because it's at the top of the free_stack list). **Return** True if this block should be evicted, false otherwise. Will always return false when no hole has been found.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM6hjubj)}(hhh](j)}(h7``struct drm_mm_scan *scan`` the active drm_mm scanner h](j)}(h``struct drm_mm_scan *scan``h]j)}(hjh]hstruct drm_mm_scan *scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM3hjubj )}(hhh]h)}(hthe active drm_mm scannerh]hthe active drm_mm scanner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(h3``struct drm_mm_node *node`` drm_mm_node to remove h](j)}(h``struct drm_mm_node *node``h]j)}(hjh]hstruct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM4hjubj )}(hhh]h)}(hdrm_mm_node to removeh]hdrm_mm_node to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM6hjubh)}(hX Nodes **must** be removed in exactly the reverse order from the scan list as they have been added (e.g. using list_add() as they are added and then list_for_each() over that eviction list to remove), otherwise the internal state of the memory manager will be corrupted.h](hNodes }(hjThhhNhNubj)}(h**must**h]hmust}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh be removed in exactly the reverse order from the scan list as they have been added (e.g. using list_add() as they are added and then list_for_each() over that eviction list to remove), otherwise the internal state of the memory manager will be corrupted.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM6hjubh)}(hX$When the scan list is empty, the selected memory nodes can be freed. An immediately following drm_mm_insert_node_in_range_generic() or one of the simpler versions of that function with !DRM_MM_SEARCH_BEST will then return the just freed block (because it's at the top of the free_stack list).h]hX&When the scan list is empty, the selected memory nodes can be freed. An immediately following drm_mm_insert_node_in_range_generic() or one of the simpler versions of that function with !DRM_MM_SEARCH_BEST will then return the just freed block (because it’s at the top of the free_stack list).}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM;hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM@hjubh)}(hlTrue if this block should be evicted, false otherwise. Will always return false when no hole has been found.h]hlTrue if this block should be evicted, false otherwise. Will always return false when no hole has been found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_mm_scan_color_evict (C function)c.drm_mm_scan_color_evicthNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hGstruct drm_mm_node * drm_mm_scan_color_evict (struct drm_mm_scan *scan)h]j>)}(hEstruct drm_mm_node *drm_mm_scan_color_evict(struct drm_mm_scan *scan)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMmubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMmubh)}(hhh]jm)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_mm_scan_color_evictsbc.drm_mm_scan_color_evictasbuh1hhjhhhjhMmubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMmubjg)}(hdrm_mm_scan_color_evicth]jm)}(hjh]hdrm_mm_scan_color_evict}(hj*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMmubj)}(h(struct drm_mm_scan *scan)h]j)}(hstruct drm_mm_scan *scanh](jD)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjAubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAubh)}(hhh]jm)}(h drm_mm_scanh]h drm_mm_scan}(hjchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]jc.drm_mm_scan_color_evictasbuh1hhjAubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjm)}(hscanh]hscan}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMmubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMmubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMmhjhhubj)}(hhh]h)}(h.evict overlapping nodes on either side of holeh]h.evict overlapping nodes on either side of hole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMchjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjthNhNubj)}(hXV**Parameters** ``struct drm_mm_scan *scan`` drm_mm scan with target hole **Description** After completing an eviction scan and removing the selected nodes, we may need to remove a few more nodes from either side of the target hole if mm.color_adjust is being used. **Return** A node to evict, or NULL if there are no overlapping nodes.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMghjubj)}(hhh]j)}(h:``struct drm_mm_scan *scan`` drm_mm scan with target hole h](j)}(h``struct drm_mm_scan *scan``h]j)}(hj h]hstruct drm_mm_scan *scan}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMdhj ubj )}(hhh]h)}(hdrm_mm scan with target holeh]hdrm_mm scan with target hole}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMdhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMdhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjB h]h Description}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMfhjubh)}(hAfter completing an eviction scan and removing the selected nodes, we may need to remove a few more nodes from either side of the target hole if mm.color_adjust is being used.h]hAfter completing an eviction scan and removing the selected nodes, we may need to remove a few more nodes from either side of the target hole if mm.color_adjust is being used.}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMfhjubh)}(h **Return**h]j)}(hji h]hReturn}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMjhjubh)}(h;A node to evict, or NULL if there are no overlapping nodes.h]h;A node to evict, or NULL if there are no overlapping nodes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_init (C function) c.drm_mm_inithNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h9void drm_mm_init (struct drm_mm *mm, u64 start, u64 size)h]j>)}(h8void drm_mm_init(struct drm_mm *mm, u64 start, u64 size)h](jc)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhj hMubjg)}(h drm_mm_inith]jm)}(h drm_mm_inith]h drm_mm_init}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj hhhj hMubj)}(h((struct drm_mm *mm, u64 start, u64 size)h](j)}(hstruct drm_mm *mmh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hj !hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj !modnameN classnameNjj)}j]j)}jj sb c.drm_mm_initasbuh1hhj ubjV)}(h h]h }(hj)!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj7!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hmmh]hmm}(hjD!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h u64 starth](h)}(hhh]jm)}(hu64h]hu64}(hj`!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjb!modnameN classnameNjj)}j]j%! c.drm_mm_initasbuh1hhjY!ubjV)}(h h]h }(hj~!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjY!ubjm)}(hstarth]hstart}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjY!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hu64 sizeh](h)}(hhh]jm)}(hu64h]hu64}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j%! c.drm_mm_initasbuh1hhj!ubjV)}(h h]h }(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!ubjm)}(hsizeh]hsize}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj hMhj hhubj)}(hhh]h)}(hinitialize a drm-mm allocatorh]hinitialize a drm-mm allocator}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1j2hhhjthNhNubj)}(hX **Parameters** ``struct drm_mm *mm`` the drm_mm structure to initialize ``u64 start`` start of the range managed by **mm** ``u64 size`` end of the range managed by **mm** **Description** Note that **mm** must be cleared to 0 before calling this function.h](h)}(h**Parameters**h]j)}(hj "h]h Parameters}(hj""hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj"ubj)}(hhh](j)}(h9``struct drm_mm *mm`` the drm_mm structure to initialize h](j)}(h``struct drm_mm *mm``h]j)}(hj?"h]hstruct drm_mm *mm}(hjA"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj="ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj9"ubj )}(hhh]h)}(h"the drm_mm structure to initializeh]h"the drm_mm structure to initialize}(hjX"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT"hMhjU"ubah}(h]h ]h"]h$]h&]uh1j hj9"ubeh}(h]h ]h"]h$]h&]uh1jhjT"hMhj6"ubj)}(h3``u64 start`` start of the range managed by **mm** h](j)}(h ``u64 start``h]j)}(hjx"h]h u64 start}(hjz"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv"ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjr"ubj )}(hhh]h)}(h$start of the range managed by **mm**h](hstart of the range managed by }(hj"hhhNhNubj)}(h**mm**h]hmm}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1j hjr"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj6"ubj)}(h0``u64 size`` end of the range managed by **mm** h](j)}(h ``u64 size``h]j)}(hj"h]hu64 size}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj"ubj )}(hhh]h)}(h"end of the range managed by **mm**h](hend of the range managed by }(hj"hhhNhNubj)}(h**mm**h]hmm}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj6"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hj#h]h Description}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj"ubh)}(hCNote that **mm** must be cleared to 0 before calling this function.h](h Note that }(hj#hhhNhNubj)}(h**mm**h]hmm}(hj&#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh3 must be cleared to 0 before calling this function.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_takedown (C function)c.drm_mm_takedownhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(h(void drm_mm_takedown (struct drm_mm *mm)h]j>)}(h'void drm_mm_takedown(struct drm_mm *mm)h](jc)}(hvoidh]hvoid}(hj_#hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj[#hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMubjV)}(h h]h }(hjn#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[#hhhjm#hMubjg)}(hdrm_mm_takedownh]jm)}(hdrm_mm_takedownh]hdrm_mm_takedown}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj|#ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj[#hhhjm#hMubj)}(h(struct drm_mm *mm)h]j)}(hstruct drm_mm *mmh](jD)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#ubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j)}jj#sbc.drm_mm_takedownasbuh1hhj#ubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjm)}(hmmh]hmm}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubah}(h]h ]h"]h$]h&]jjuh1jhj[#hhhjm#hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjW#hhhjm#hMubah}(h]jR#ah ](jjeh"]h$]h&]jj)jhuh1j7hjm#hMhjT#hhubj)}(hhh]h)}(hclean up a drm_mm allocatorh]hclean up a drm_mm allocator}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jhjT#hhhjm#hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7$jj7$jjjuh1j2hhhjthNhNubj)}(h**Parameters** ``struct drm_mm *mm`` drm_mm allocator to clean up **Description** Note that it is a bug to call this function on an allocator which is not clean.h](h)}(h**Parameters**h]j)}(hjA$h]h Parameters}(hjC$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?$ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj;$ubj)}(hhh]j)}(h3``struct drm_mm *mm`` drm_mm allocator to clean up h](j)}(h``struct drm_mm *mm``h]j)}(hj`$h]hstruct drm_mm *mm}(hjb$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^$ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjZ$ubj )}(hhh]h)}(hdrm_mm allocator to clean uph]hdrm_mm allocator to clean up}(hjy$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju$hMhjv$ubah}(h]h ]h"]h$]h&]uh1j hjZ$ubeh}(h]h ]h"]h$]h&]uh1jhju$hMhjW$ubah}(h]h ]h"]h$]h&]uh1jhj;$ubh)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj;$ubh)}(hONote that it is a bug to call this function on an allocator which is not clean.h]hONote that it is a bug to call this function on an allocator which is not clean.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj;$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_mm_print (C function)c.drm_mm_printhNtauh1j!hjthhhNhNubj3)}(hhh](j8)}(hBvoid drm_mm_print (const struct drm_mm *mm, struct drm_printer *p)h]j>)}(hAvoid drm_mm_print(const struct drm_mm *mm, struct drm_printer *p)h](jc)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj$hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMubjV)}(h h]h }(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj$hhhj$hMubjg)}(h drm_mm_printh]jm)}(h drm_mm_printh]h drm_mm_print}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj$hhhj$hMubj)}(h0(const struct drm_mm *mm, struct drm_printer *p)h](j)}(hconst struct drm_mm *mmh](jD)}(hj&h]hconst}(hj%hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj%ubjV)}(h h]h }(hj*%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%ubjD)}(hjh]hstruct}(hj8%hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj%ubjV)}(h h]h }(hjE%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%ubh)}(hhh]jm)}(hdrm_mmh]hdrm_mm}(hjV%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjS%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjX%modnameN classnameNjj)}j]j)}jj%sbc.drm_mm_printasbuh1hhj%ubjV)}(h h]h }(hjv%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjm)}(hmmh]hmm}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj%ubjV)}(h h]h }(hj%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%ubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]jr%c.drm_mm_printasbuh1hhj%ubjV)}(h h]h }(hj%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjm)}(hjh]hp}(hj&hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubeh}(h]h ]h"]h$]h&]jjuh1jhj$hhhj$hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj$hhhj$hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1j7hj$hMhj$hhubj)}(hhh]h)}(hprint allocator stateh]hprint allocator state}(hj*&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj'&hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjB&jjB&jjjuh1j2hhhjthNhNubj)}(hw**Parameters** ``const struct drm_mm *mm`` drm_mm allocator to print ``struct drm_printer *p`` DRM printer to useh](h)}(h**Parameters**h]j)}(hjL&h]h Parameters}(hjN&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ&ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhjF&ubj)}(hhh](j)}(h6``const struct drm_mm *mm`` drm_mm allocator to print h](j)}(h``const struct drm_mm *mm``h]j)}(hjk&h]hconst struct drm_mm *mm}(hjm&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji&ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhje&ubj )}(hhh]h)}(hdrm_mm allocator to printh]hdrm_mm allocator to print}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1j hje&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjb&ubj)}(h,``struct drm_printer *p`` DRM printer to useh](j)}(h``struct drm_printer *p``h]j)}(hj&h]hstruct drm_printer *p}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj&ubj )}(hhh]h)}(hDRM printer to useh]hDRM printer to use}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:466: ./drivers/gpu/drm/drm_mm.chMhj&ubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjb&ubeh}(h]h ]h"]h$]h&]uh1jhjF&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj1)}(h.. _drm_gpuvm:h]h}(h]h ]h"]h$]h&]j< drm-gpuvmuh1j0hMhjthhhhubeh}(h]*drm-mm-range-allocator-function-referencesah ]h"]*drm mm range allocator function referencesah$]h&]uh1hhjhhhhhMubeh}(h]drm-mm-range-allocatorah ]h"]drm mm range allocatorah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h DRM GPUVMh]h DRM GPUVM}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hhhhhMubh)}(hhh](h)}(hOverviewh]hOverview}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hhhhhMubh)}(hXThe DRM GPU VA Manager, represented by struct drm_gpuvm keeps track of a GPU's virtual address (VA) space and manages the corresponding virtual mappings represented by :c:type:`drm_gpuva` objects. It also keeps track of the mapping's backing :c:type:`drm_gem_object` buffers.h](hThe DRM GPU VA Manager, represented by struct drm_gpuvm keeps track of a GPU’s virtual address (VA) space and manages the corresponding virtual mappings represented by }(hj"'hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj,'h]h drm_gpuva}(hj.'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj*'ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK"hj"'ubh9 objects. It also keeps track of the mapping’s backing }(hj"'hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjP'h]hdrm_gem_object}(hjR'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjN'ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjI'hK"hj"'ubh buffers.}(hj"'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjI'hK"hj'hhubh)}(h:c:type:`drm_gem_object` buffers maintain a list of :c:type:`drm_gpuva` objects representing all existent GPU VA mappings using this :c:type:`drm_gem_object` as backing buffer.h](h)}(h:c:type:`drm_gem_object`h]j)}(hj}'h]hdrm_gem_object}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj{'ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK'hjw'ubh buffers maintain a list of }(hjw'hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj'h]h drm_gpuva}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj'hK'hjw'ubh> objects representing all existent GPU VA mappings using this }(hjw'hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj'h]hdrm_gem_object}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj'hK'hjw'ubh as backing buffer.}(hjw'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hK'hj'hhubh)}(hGPU VAs can be flagged as sparse, such that drivers may use GPU VAs to also keep track of sparse PTEs in order to support Vulkan 'Sparse Resources'.h]hGPU VAs can be flagged as sparse, such that drivers may use GPU VAs to also keep track of sparse PTEs in order to support Vulkan ‘Sparse Resources’.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK*hj'hhubh)}(h}The GPU VA manager internally uses a rb-tree to manage the :c:type:`drm_gpuva` mappings within a GPU's virtual address space.h](h;The GPU VA manager internally uses a rb-tree to manage the }(hj'hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj(h]h drm_gpuva}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK-hj'ubh1 mappings within a GPU’s virtual address space.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!(hK-hj'hhubh)}(hThe :c:type:`drm_gpuvm` structure contains a special :c:type:`drm_gpuva` representing the portion of VA space reserved by the kernel. This node is initialized together with the GPU VA manager instance and removed when the GPU VA manager is destroyed.h](hThe }(hj,(hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj6(h]h drm_gpuvm}(hj8(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4(ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK0hj,(ubh structure contains a special }(hj,(hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjZ(h]h drm_gpuva}(hj\(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjX(ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjS(hK0hj,(ubh representing the portion of VA space reserved by the kernel. This node is initialized together with the GPU VA manager instance and removed when the GPU VA manager is destroyed.}(hj,(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjS(hK0hj'hhubh)}(hIn a typical application drivers would embed struct drm_gpuvm and struct drm_gpuva within their own driver specific structures, there won't be any memory allocations of its own nor memory allocations of :c:type:`drm_gpuva` entries.h](hIn a typical application drivers would embed struct drm_gpuvm and struct drm_gpuva within their own driver specific structures, there won’t be any memory allocations of its own nor memory allocations of }(hj(hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj(h]h drm_gpuva}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK5hj(ubh entries.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hK5hj'hhubh)}(hX+The data structures needed to store :c:type:`drm_gpuvas` within the :c:type:`drm_gpuvm` are contained within struct drm_gpuva already. Hence, for inserting :c:type:`drm_gpuva` entries from within dma-fence signalling critical sections it is enough to pre-allocate the :c:type:`drm_gpuva` structures.h](h$The data structures needed to store }(hj(hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hj(h]h drm_gpuvas}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK:hj(ubh within the }(hj(hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj(h]h drm_gpuvm}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj(hK:hj(ubhE are contained within struct drm_gpuva already. Hence, for inserting }(hj(hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj)h]h drm_gpuva}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj(hK:hj(ubh] entries from within dma-fence signalling critical sections it is enough to pre-allocate the }(hj(hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj')h]h drm_gpuva}(hj))hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj%)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj(hK:hj(ubh structures.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hK:hj'hhubh)}(hXR:c:type:`drm_gem_objects` which are private to a single VM can share a common :c:type:`dma_resv` in order to improve locking efficiency (e.g. with :c:type:`drm_exec`). For this purpose drivers must pass a :c:type:`drm_gem_object` to drm_gpuvm_init(), in the following called 'resv object', which serves as the container of the GPUVM's shared :c:type:`dma_resv`. This resv object can be a driver specific :c:type:`drm_gem_object`, such as the :c:type:`drm_gem_object` containing the root page table, but it can also be a 'dummy' object, which can be allocated with drm_gpuvm_resv_object_alloc().h](h)}(h:c:type:`drm_gem_objects`h]j)}(hjT)h]hdrm_gem_objects}(hjV)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjR)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK?hjN)ubh5 which are private to a single VM can share a common }(hjN)hhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjx)h]hdma_resv}(hjz)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjv)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhjq)hK?hjN)ubh3 in order to improve locking efficiency (e.g. with }(hjN)hhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hj)h]hdrm_exec}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhjq)hK?hjN)ubh(). For this purpose drivers must pass a }(hjN)hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj)h]hdrm_gem_object}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjq)hK?hjN)ubhw to drm_gpuvm_init(), in the following called ‘resv object’, which serves as the container of the GPUVM’s shared }(hjN)hhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hj)h]hdma_resv}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhjq)hK?hjN)ubh,. This resv object can be a driver specific }(hjN)hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj*h]hdrm_gem_object}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjq)hK?hjN)ubh, such as the }(hjN)hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj'*h]hdrm_gem_object}(hj)*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj%*ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjq)hK?hjN)ubh containing the root page table, but it can also be a ‘dummy’ object, which can be allocated with drm_gpuvm_resv_object_alloc().}(hjN)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjq)hK?hj'hhubh)}(hIn order to connect a struct drm_gpuva its backing :c:type:`drm_gem_object` each :c:type:`drm_gem_object` maintains a list of :c:type:`drm_gpuvm_bo` structures, and each :c:type:`drm_gpuvm_bo` contains a list of :c:type:`drm_gpuva` structures.h](h3In order to connect a struct drm_gpuva its backing }(hjN*hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjX*h]hdrm_gem_object}(hjZ*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjV*ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chKHhjN*ubh each }(hjN*hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj|*h]hdrm_gem_object}(hj~*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjz*ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhju*hKHhjN*ubh maintains a list of }(hjN*hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj*h]h drm_gpuvm_bo}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhju*hKHhjN*ubh structures, and each }(hjN*hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj*h]h drm_gpuvm_bo}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhju*hKHhjN*ubh contains a list of }(hjN*hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj*h]h drm_gpuva}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhju*hKHhjN*ubh structures.}(hjN*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhju*hKHhj'hhubh)}(hXA :c:type:`drm_gpuvm_bo` is an abstraction that represents a combination of a :c:type:`drm_gpuvm` and a :c:type:`drm_gem_object`. Every such combination should be unique. This is ensured by the API through drm_gpuvm_bo_obtain() and drm_gpuvm_bo_obtain_prealloc() which first look into the corresponding :c:type:`drm_gem_object` list of :c:type:`drm_gpuvm_bos` for an existing instance of this particular combination. If not existent a new instance is created and linked to the :c:type:`drm_gem_object`.h](hA }(hj +hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj+h]h drm_gpuvm_bo}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chKLhj +ubh6 is an abstraction that represents a combination of a }(hj +hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj:+h]h drm_gpuvm}(hj<+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj8+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj3+hKLhj +ubh and a }(hj +hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj]+h]hdrm_gem_object}(hj_+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj[+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj3+hKLhj +ubh. Every such combination should be unique. This is ensured by the API through drm_gpuvm_bo_obtain() and drm_gpuvm_bo_obtain_prealloc() which first look into the corresponding }(hj +hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj+h]hdrm_gem_object}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj~+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj3+hKLhj +ubh list of }(hj +hhhNhNubh)}(h:c:type:`drm_gpuvm_bos`h]j)}(hj+h]h drm_gpuvm_bos}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bosuh1hhj3+hKLhj +ubhv for an existing instance of this particular combination. If not existent a new instance is created and linked to the }(hj +hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj+h]hdrm_gem_object}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj3+hKLhj +ubh.}(hj +hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3+hKLhj'hhubh)}(hXS:c:type:`drm_gpuvm_bo` structures, since unique for a given :c:type:`drm_gpuvm`, are also used as entry for the :c:type:`drm_gpuvm`'s lists of external and evicted objects. Those lists are maintained in order to accelerate locking of dma-resv locks and validation of evicted objects bound in a :c:type:`drm_gpuvm`. For instance, all :c:type:`drm_gem_object`'s :c:type:`dma_resv` of a given :c:type:`drm_gpuvm` can be locked by calling drm_gpuvm_exec_lock(). Once locked drivers can call drm_gpuvm_validate() in order to validate all evicted :c:type:`drm_gem_objects`. It is also possible to lock additional :c:type:`drm_gem_objects` by providing the corresponding parameters to drm_gpuvm_exec_lock() as well as open code the :c:type:`drm_exec` loop while making use of helper functions such as drm_gpuvm_prepare_range() or drm_gpuvm_prepare_objects().h](h)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj+h]h drm_gpuvm_bo}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chKThj+ubh& structures, since unique for a given }(hj+hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj,h]h drm_gpuvm}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj,hKThj+ubh!, are also used as entry for the }(hj+hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj:,h]h drm_gpuvm}(hj<,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj8,ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj,hKThj+ubh’s lists of external and evicted objects. Those lists are maintained in order to accelerate locking of dma-resv locks and validation of evicted objects bound in a }(hj+hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj],h]h drm_gpuvm}(hj_,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj[,ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj,hKThj+ubh. For instance, all }(hj+hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj,h]hdrm_gem_object}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj~,ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj,hKThj+ubh’s }(hj+hhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hj,h]hdma_resv}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhj,hKThj+ubh of a given }(hj+hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj,h]h drm_gpuvm}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj,hKThj+ubh can be locked by calling drm_gpuvm_exec_lock(). Once locked drivers can call drm_gpuvm_validate() in order to validate all evicted }(hj+hhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hj,h]hdrm_gem_objects}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhj,hKThj+ubh). It is also possible to lock additional }(hj+hhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hj -h]hdrm_gem_objects}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj -ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhj,hKThj+ubh] by providing the corresponding parameters to drm_gpuvm_exec_lock() as well as open code the }(hj+hhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hj/-h]hdrm_exec}(hj1-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj--ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhj,hKThj+ubhl loop while making use of helper functions such as drm_gpuvm_prepare_range() or drm_gpuvm_prepare_objects().}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hKThj'hhubh)}(hEvery bound :c:type:`drm_gem_object` is treated as external object when its :c:type:`dma_resv` structure is different than the :c:type:`drm_gpuvm`'s common :c:type:`dma_resv` structure.h](h Every bound }(hjV-hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj`-h]hdrm_gem_object}(hjb-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj^-ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:477: ./drivers/gpu/drm/drm_gpuvm.chK`hjV-ubh( is treated as external object when its }(hjV-hhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hj-h]hdma_resv}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhj}-hK`hjV-ubh! structure is different than the }(hjV-hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj-h]h drm_gpuvm}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj}-hK`hjV-ubh ’s common }(hjV-hhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hj-h]hdma_resv}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhj}-hK`hjV-ubh structure.}(hjV-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}-hK`hj'hhubeh}(h]id3ah ]h"]h$]jah&]uh1hhj'hhhhhMjKubh)}(hhh](h)}(hSplit and Mergeh]hSplit and Merge}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hhhhhMubh)}(hBesides its capability to manage and represent a GPU VA space, the GPU VA manager also provides functions to let the :c:type:`drm_gpuvm` calculate a sequence of operations to satisfy a given map or unmap request.h](huBesides its capability to manage and represent a GPU VA space, the GPU VA manager also provides functions to let the }(hj .hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj.h]h drm_gpuvm}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKghj .ubhL calculate a sequence of operations to satisfy a given map or unmap request.}(hj .hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0.hKghj-hhubh)}(hX8Therefore the DRM GPU VA manager provides an algorithm implementing splitting and merging of existent GPU VA mappings with the ones that are requested to be mapped or unmapped. This feature is required by the Vulkan API to implement Vulkan 'Sparse Memory Bindings' - drivers UAPIs often refer to this as VM BIND.h]hX<Therefore the DRM GPU VA manager provides an algorithm implementing splitting and merging of existent GPU VA mappings with the ones that are requested to be mapped or unmapped. This feature is required by the Vulkan API to implement Vulkan ‘Sparse Memory Bindings’ - drivers UAPIs often refer to this as VM BIND.}(hj;.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKkhj-hhubh)}(hX6Drivers can call drm_gpuvm_sm_map() to receive a sequence of callbacks containing map, unmap and remap operations for a given newly requested mapping. The sequence of callbacks represents the set of operations to execute in order to integrate the new mapping cleanly into the current state of the GPU VA space.h]hX6Drivers can call drm_gpuvm_sm_map() to receive a sequence of callbacks containing map, unmap and remap operations for a given newly requested mapping. The sequence of callbacks represents the set of operations to execute in order to integrate the new mapping cleanly into the current state of the GPU VA space.}(hjJ.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKqhj-hhubh)}(hXDepending on how the new GPU VA mapping intersects with the existent mappings of the GPU VA space the :c:type:`drm_gpuvm_ops` callbacks contain an arbitrary amount of unmap operations, a maximum of two remap operations and a single map operation. The caller might receive no callback at all if no operation is required, e.g. if the requested mapping already exists in the exact same way.h](hfDepending on how the new GPU VA mapping intersects with the existent mappings of the GPU VA space the }(hjY.hhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j)}(hjc.h]h drm_gpuvm_ops}(hje.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhja.ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKwhjY.ubhX callbacks contain an arbitrary amount of unmap operations, a maximum of two remap operations and a single map operation. The caller might receive no callback at all if no operation is required, e.g. if the requested mapping already exists in the exact same way.}(hjY.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hKwhj-hhubh)}(hWThe single map operation represents the original map operation requested by the caller.h]hWThe single map operation represents the original map operation requested by the caller.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chK}hj-hhubh)}(hX:c:type:`drm_gpuva_op_unmap` contains a 'keep' field, which indicates whether the :c:type:`drm_gpuva` to unmap is physically contiguous with the original mapping request. Optionally, if 'keep' is set, drivers may keep the actual page table entries for this :c:type:`drm_gpuva`, adding the missing page table entries only and update the :c:type:`drm_gpuvm`'s view of things accordingly.h](h)}(h:c:type:`drm_gpuva_op_unmap`h]j)}(hj.h]hdrm_gpuva_op_unmap}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_op_unmapuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj.ubh: contains a ‘keep’ field, which indicates whether the }(hj.hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj.h]h drm_gpuva}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj.hKhj.ubh to unmap is physically contiguous with the original mapping request. Optionally, if ‘keep’ is set, drivers may keep the actual page table entries for this }(hj.hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj.h]h drm_gpuva}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj.hKhj.ubh<, adding the missing page table entries only and update the }(hj.hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj /h]h drm_gpuvm}(hj /hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj.hKhj.ubh ’s view of things accordingly.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hKhj-hhubh)}(hXDrivers may do the same optimization, namely delta page table updates, also for remap operations. This is possible since :c:type:`drm_gpuva_op_remap` consists of one unmap operation and one or two map operations, such that drivers can derive the page table update delta accordingly.h](hyDrivers may do the same optimization, namely delta page table updates, also for remap operations. This is possible since }(hj1/hhhNhNubh)}(h:c:type:`drm_gpuva_op_remap`h]j)}(hj;/h]hdrm_gpuva_op_remap}(hj=/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj9/ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_op_remapuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj1/ubh consists of one unmap operation and one or two map operations, such that drivers can derive the page table update delta accordingly.}(hj1/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjX/hKhj-hhubh)}(hNote that there can't be more than two existent mappings to split up, one at the beginning and one at the end of the new mapping, hence there is a maximum of two remap operations.h]hNote that there can’t be more than two existent mappings to split up, one at the beginning and one at the end of the new mapping, hence there is a maximum of two remap operations.}(hjc/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj-hhubh)}(hXAnalogous to drm_gpuvm_sm_map() drm_gpuvm_sm_unmap() uses :c:type:`drm_gpuvm_ops` to call back into the driver in order to unmap a range of GPU VA space. The logic behind this function is way simpler though: For all existent mappings enclosed by the given range unmap operations are created. For mappings which are only partically located within the given range, remap operations are created such that those mappings are split up and re-mapped partically.h](h:Analogous to drm_gpuvm_sm_map() drm_gpuvm_sm_unmap() uses }(hjr/hhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j)}(hj|/h]h drm_gpuvm_ops}(hj~/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjz/ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhjr/ubhXv to call back into the driver in order to unmap a range of GPU VA space. The logic behind this function is way simpler though: For all existent mappings enclosed by the given range unmap operations are created. For mappings which are only partically located within the given range, remap operations are created such that those mappings are split up and re-mapped partically.}(hjr/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hKhj-hhubh)}(hXAs an alternative to drm_gpuvm_sm_map() and drm_gpuvm_sm_unmap(), drm_gpuvm_sm_map_ops_create() and drm_gpuvm_sm_unmap_ops_create() can be used to directly obtain an instance of struct drm_gpuva_ops containing a list of :c:type:`drm_gpuva_op`, which can be iterated with drm_gpuva_for_each_op(). This list contains the :c:type:`drm_gpuva_ops` analogous to the callbacks one would receive when calling drm_gpuvm_sm_map() or drm_gpuvm_sm_unmap(). While this way requires more memory (to allocate the :c:type:`drm_gpuva_ops`), it provides drivers a way to iterate the :c:type:`drm_gpuva_op` multiple times, e.g. once in a context where memory allocations are possible (e.g. to allocate GPU page tables) and once in the dma-fence signalling critical path.h](hAs an alternative to drm_gpuvm_sm_map() and drm_gpuvm_sm_unmap(), drm_gpuvm_sm_map_ops_create() and drm_gpuvm_sm_unmap_ops_create() can be used to directly obtain an instance of struct drm_gpuva_ops containing a list of }(hj/hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hj/h]h drm_gpuva_op}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj/ubhM, which can be iterated with drm_gpuva_for_each_op(). This list contains the }(hj/hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj/h]h drm_gpuva_ops}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhj/hKhj/ubh analogous to the callbacks one would receive when calling drm_gpuvm_sm_map() or drm_gpuvm_sm_unmap(). While this way requires more memory (to allocate the }(hj/hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj/h]h drm_gpuva_ops}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhj/hKhj/ubh,), it provides drivers a way to iterate the }(hj/hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hj0h]h drm_gpuva_op}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhj/hKhj/ubh multiple times, e.g. once in a context where memory allocations are possible (e.g. to allocate GPU page tables) and once in the dma-fence signalling critical path.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hKhj-hhubh)}(hXTo update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert() and drm_gpuva_remove() may be used. These functions can safely be used from :c:type:`drm_gpuvm_ops` callbacks originating from drm_gpuvm_sm_map() or drm_gpuvm_sm_unmap(). However, it might be more convenient to use the provided helper functions drm_gpuva_map(), drm_gpuva_remap() and drm_gpuva_unmap() instead.h](hTo update the }(hj?0hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjI0h]h drm_gpuvm}(hjK0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjG0ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj?0ubh}’s view of the GPU VA space drm_gpuva_insert() and drm_gpuva_remove() may be used. These functions can safely be used from }(hj?0hhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j)}(hjm0h]h drm_gpuvm_ops}(hjo0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjk0ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhjf0hKhj?0ubh callbacks originating from drm_gpuvm_sm_map() or drm_gpuvm_sm_unmap(). However, it might be more convenient to use the provided helper functions drm_gpuva_map(), drm_gpuva_remap() and drm_gpuva_unmap() instead.}(hj?0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjf0hKhj-hhubh)}(hThe following diagram depicts the basic relationships of existent GPU VA mappings, a newly requested mapping and the resulting mappings as implemented by drm_gpuvm_sm_map() - it doesn't cover any arbitrary combinations of these.h]hThe following diagram depicts the basic relationships of existent GPU VA mappings, a newly requested mapping and the resulting mappings as implemented by drm_gpuvm_sm_map() - it doesn’t cover any arbitrary combinations of these.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj-hhubhenumerated_list)}(hhh](jy)}(hX Requested mapping is identical. Replace it, but indicate the backing PTEs could be kept. :: 0 a 1 old: |-----------| (bo_offset=n) 0 a 1 req: |-----------| (bo_offset=n) 0 a 1 new: |-----------| (bo_offset=n) h](h)}(hXRequested mapping is identical. Replace it, but indicate the backing PTEs could be kept.h]hXRequested mapping is identical. Replace it, but indicate the backing PTEs could be kept.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj0ubjT)}(h 0 a 1 old: |-----------| (bo_offset=n) 0 a 1 req: |-----------| (bo_offset=n) 0 a 1 new: |-----------| (bo_offset=n)h]h 0 a 1 old: |-----------| (bo_offset=n) 0 a 1 req: |-----------| (bo_offset=n) 0 a 1 new: |-----------| (bo_offset=n)}hj0sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj0ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXRequested mapping is identical, except for the BO offset, hence replace the mapping. :: 0 a 1 old: |-----------| (bo_offset=n) 0 a 1 req: |-----------| (bo_offset=m) 0 a 1 new: |-----------| (bo_offset=m) h](h)}(hTRequested mapping is identical, except for the BO offset, hence replace the mapping.h]hTRequested mapping is identical, except for the BO offset, hence replace the mapping.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj0ubjT)}(h 0 a 1 old: |-----------| (bo_offset=n) 0 a 1 req: |-----------| (bo_offset=m) 0 a 1 new: |-----------| (bo_offset=m)h]h 0 a 1 old: |-----------| (bo_offset=n) 0 a 1 req: |-----------| (bo_offset=m) 0 a 1 new: |-----------| (bo_offset=m)}hj0sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj0ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXRequested mapping is identical, except for the backing BO, hence replace the mapping. :: 0 a 1 old: |-----------| (bo_offset=n) 0 b 1 req: |-----------| (bo_offset=n) 0 b 1 new: |-----------| (bo_offset=n) h](h)}(hURequested mapping is identical, except for the backing BO, hence replace the mapping.h]hURequested mapping is identical, except for the backing BO, hence replace the mapping.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj0ubjT)}(h 0 a 1 old: |-----------| (bo_offset=n) 0 b 1 req: |-----------| (bo_offset=n) 0 b 1 new: |-----------| (bo_offset=n)h]h 0 a 1 old: |-----------| (bo_offset=n) 0 b 1 req: |-----------| (bo_offset=n) 0 b 1 new: |-----------| (bo_offset=n)}hj 1sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj0ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXExistent mapping is a left aligned subset of the requested one, hence replace the existent one. :: 0 a 1 old: |-----| (bo_offset=n) 0 a 2 req: |-----------| (bo_offset=n) 0 a 2 new: |-----------| (bo_offset=n) .. note:: We expect to see the same result for a request with a different BO and/or non-contiguous BO offset. h](h)}(h_Existent mapping is a left aligned subset of the requested one, hence replace the existent one.h]h_Existent mapping is a left aligned subset of the requested one, hence replace the existent one.}(hj$1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj 1ubjT)}(h 0 a 1 old: |-----| (bo_offset=n) 0 a 2 req: |-----------| (bo_offset=n) 0 a 2 new: |-----------| (bo_offset=n)h]h 0 a 1 old: |-----| (bo_offset=n) 0 a 2 req: |-----------| (bo_offset=n) 0 a 2 new: |-----------| (bo_offset=n)}hj31sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj 1ubhnote)}(hcWe expect to see the same result for a request with a different BO and/or non-contiguous BO offset.h]h)}(hcWe expect to see the same result for a request with a different BO and/or non-contiguous BO offset.h]hcWe expect to see the same result for a request with a different BO and/or non-contiguous BO offset.}(hjH1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhjD1ubah}(h]h ]h"]h$]h&]uh1jB1hj 1ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXRequested mapping's range is a left aligned subset of the existent one, but backed by a different BO. Hence, map the requested mapping and split the existent one adjusting its BO offset. :: 0 a 2 old: |-----------| (bo_offset=n) 0 b 1 req: |-----| (bo_offset=n) 0 b 1 a' 2 new: |-----|-----| (b.bo_offset=n, a.bo_offset=n+1) .. note:: We expect to see the same result for a request with a different BO and/or non-contiguous BO offset. h](h)}(hRequested mapping's range is a left aligned subset of the existent one, but backed by a different BO. Hence, map the requested mapping and split the existent one adjusting its BO offset.h]hRequested mapping’s range is a left aligned subset of the existent one, but backed by a different BO. Hence, map the requested mapping and split the existent one adjusting its BO offset.}(hjg1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhjc1ubjT)}(h 0 a 2 old: |-----------| (bo_offset=n) 0 b 1 req: |-----| (bo_offset=n) 0 b 1 a' 2 new: |-----|-----| (b.bo_offset=n, a.bo_offset=n+1)h]h 0 a 2 old: |-----------| (bo_offset=n) 0 b 1 req: |-----| (bo_offset=n) 0 b 1 a' 2 new: |-----|-----| (b.bo_offset=n, a.bo_offset=n+1)}hjv1sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhjc1ubjC1)}(hcWe expect to see the same result for a request with a different BO and/or non-contiguous BO offset.h]h)}(hcWe expect to see the same result for a request with a different BO and/or non-contiguous BO offset.h]hcWe expect to see the same result for a request with a different BO and/or non-contiguous BO offset.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chKhj1ubah}(h]h ]h"]h$]h&]uh1jB1hjc1ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hX6Existent mapping is a superset of the requested mapping. Split it up, but indicate that the backing PTEs could be kept. :: 0 a 2 old: |-----------| (bo_offset=n) 0 a 1 req: |-----| (bo_offset=n) 0 a 1 a' 2 new: |-----|-----| (a.bo_offset=n, a'.bo_offset=n+1) h](h)}(hwExistent mapping is a superset of the requested mapping. Split it up, but indicate that the backing PTEs could be kept.h]hwExistent mapping is a superset of the requested mapping. Split it up, but indicate that the backing PTEs could be kept.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubjT)}(h 0 a 2 old: |-----------| (bo_offset=n) 0 a 1 req: |-----| (bo_offset=n) 0 a 1 a' 2 new: |-----|-----| (a.bo_offset=n, a'.bo_offset=n+1)h]h 0 a 2 old: |-----------| (bo_offset=n) 0 a 1 req: |-----| (bo_offset=n) 0 a 1 a' 2 new: |-----|-----| (a.bo_offset=n, a'.bo_offset=n+1)}hj1sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXRequested mapping's range is a right aligned subset of the existent one, but backed by a different BO. Hence, map the requested mapping and split the existent one, without adjusting the BO offset. :: 0 a 2 old: |-----------| (bo_offset=n) 1 b 2 req: |-----| (bo_offset=m) 0 a 1 b 2 new: |-----|-----| (a.bo_offset=n,b.bo_offset=m) h](h)}(hRequested mapping's range is a right aligned subset of the existent one, but backed by a different BO. Hence, map the requested mapping and split the existent one, without adjusting the BO offset.h]hRequested mapping’s range is a right aligned subset of the existent one, but backed by a different BO. Hence, map the requested mapping and split the existent one, without adjusting the BO offset.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubjT)}(h 0 a 2 old: |-----------| (bo_offset=n) 1 b 2 req: |-----| (bo_offset=m) 0 a 1 b 2 new: |-----|-----| (a.bo_offset=n,b.bo_offset=m)h]h 0 a 2 old: |-----------| (bo_offset=n) 1 b 2 req: |-----| (bo_offset=m) 0 a 1 b 2 new: |-----|-----| (a.bo_offset=n,b.bo_offset=m)}hj1sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hX?Existent mapping is a superset of the requested mapping. Split it up, but indicate that the backing PTEs could be kept. :: 0 a 2 old: |-----------| (bo_offset=n) 1 a 2 req: |-----| (bo_offset=n+1) 0 a' 1 a 2 new: |-----|-----| (a'.bo_offset=n, a.bo_offset=n+1) h](h)}(hwExistent mapping is a superset of the requested mapping. Split it up, but indicate that the backing PTEs could be kept.h]hwExistent mapping is a superset of the requested mapping. Split it up, but indicate that the backing PTEs could be kept.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubjT)}(h 0 a 2 old: |-----------| (bo_offset=n) 1 a 2 req: |-----| (bo_offset=n+1) 0 a' 1 a 2 new: |-----|-----| (a'.bo_offset=n, a.bo_offset=n+1)h]h 0 a 2 old: |-----------| (bo_offset=n) 1 a 2 req: |-----| (bo_offset=n+1) 0 a' 1 a 2 new: |-----|-----| (a'.bo_offset=n, a.bo_offset=n+1)}hj2sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chM$hj1ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXExistent mapping is overlapped at the end by the requested mapping backed by a different BO. Hence, map the requested mapping and split up the existent one, without adjusting the BO offset. :: 0 a 2 old: |-----------| (bo_offset=n) 1 b 3 req: |-----------| (bo_offset=m) 0 a 1 b 3 new: |-----|-----------| (a.bo_offset=n,b.bo_offset=m) h](h)}(hExistent mapping is overlapped at the end by the requested mapping backed by a different BO. Hence, map the requested mapping and split up the existent one, without adjusting the BO offset.h]hExistent mapping is overlapped at the end by the requested mapping backed by a different BO. Hence, map the requested mapping and split up the existent one, without adjusting the BO offset.}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chM.hj2ubjT)}(h 0 a 2 old: |-----------| (bo_offset=n) 1 b 3 req: |-----------| (bo_offset=m) 0 a 1 b 3 new: |-----|-----------| (a.bo_offset=n,b.bo_offset=m)h]h 0 a 2 old: |-----------| (bo_offset=n) 1 b 3 req: |-----------| (bo_offset=m) 0 a 1 b 3 new: |-----|-----------| (a.bo_offset=n,b.bo_offset=m)}hj/2sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chM4hj2ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXExistent mapping is overlapped by the requested mapping, both having the same backing BO with a contiguous offset. Indicate the backing PTEs of the old mapping could be kept. :: 0 a 2 old: |-----------| (bo_offset=n) 1 a 3 req: |-----------| (bo_offset=n+1) 0 a' 1 a 3 new: |-----|-----------| (a'.bo_offset=n, a.bo_offset=n+1) h](h)}(hExistent mapping is overlapped by the requested mapping, both having the same backing BO with a contiguous offset. Indicate the backing PTEs of the old mapping could be kept.h]hExistent mapping is overlapped by the requested mapping, both having the same backing BO with a contiguous offset. Indicate the backing PTEs of the old mapping could be kept.}(hjH2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chM>hjD2ubjT)}(h 0 a 2 old: |-----------| (bo_offset=n) 1 a 3 req: |-----------| (bo_offset=n+1) 0 a' 1 a 3 new: |-----|-----------| (a'.bo_offset=n, a.bo_offset=n+1)h]h 0 a 2 old: |-----------| (bo_offset=n) 1 a 3 req: |-----------| (bo_offset=n+1) 0 a' 1 a 3 new: |-----|-----------| (a'.bo_offset=n, a.bo_offset=n+1)}hjW2sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMDhjD2ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXRequested mapping's range is a centered subset of the existent one having a different backing BO. Hence, map the requested mapping and split up the existent one in two mappings, adjusting the BO offset of the right one accordingly. :: 0 a 3 old: |-----------------| (bo_offset=n) 1 b 2 req: |-----| (bo_offset=m) 0 a 1 b 2 a' 3 new: |-----|-----|-----| (a.bo_offset=n,b.bo_offset=m,a'.bo_offset=n+2) h](h)}(hRequested mapping's range is a centered subset of the existent one having a different backing BO. Hence, map the requested mapping and split up the existent one in two mappings, adjusting the BO offset of the right one accordingly.h]hRequested mapping’s range is a centered subset of the existent one having a different backing BO. Hence, map the requested mapping and split up the existent one in two mappings, adjusting the BO offset of the right one accordingly.}(hjp2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMNhjl2ubjT)}(h 0 a 3 old: |-----------------| (bo_offset=n) 1 b 2 req: |-----| (bo_offset=m) 0 a 1 b 2 a' 3 new: |-----|-----|-----| (a.bo_offset=n,b.bo_offset=m,a'.bo_offset=n+2)h]h 0 a 3 old: |-----------------| (bo_offset=n) 1 b 2 req: |-----| (bo_offset=m) 0 a 1 b 2 a' 3 new: |-----|-----|-----| (a.bo_offset=n,b.bo_offset=m,a'.bo_offset=n+2)}hj2sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMUhjl2ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXtRequested mapping is a contiguous subset of the existent one. Split it up, but indicate that the backing PTEs could be kept. :: 0 a 3 old: |-----------------| (bo_offset=n) 1 a 2 req: |-----| (bo_offset=n+1) 0 a' 1 a 2 a'' 3 old: |-----|-----|-----| (a'.bo_offset=n, a.bo_offset=n+1, a''.bo_offset=n+2) h](h)}(h|Requested mapping is a contiguous subset of the existent one. Split it up, but indicate that the backing PTEs could be kept.h]h|Requested mapping is a contiguous subset of the existent one. Split it up, but indicate that the backing PTEs could be kept.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chM_hj2ubjT)}(h 0 a 3 old: |-----------------| (bo_offset=n) 1 a 2 req: |-----| (bo_offset=n+1) 0 a' 1 a 2 a'' 3 old: |-----|-----|-----| (a'.bo_offset=n, a.bo_offset=n+1, a''.bo_offset=n+2)h]h 0 a 3 old: |-----------------| (bo_offset=n) 1 a 2 req: |-----| (bo_offset=n+1) 0 a' 1 a 2 a'' 3 old: |-----|-----|-----| (a'.bo_offset=n, a.bo_offset=n+1, a''.bo_offset=n+2)}hj2sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMdhj2ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXExistent mapping is a right aligned subset of the requested one, hence replace the existent one. :: 1 a 2 old: |-----| (bo_offset=n+1) 0 a 2 req: |-----------| (bo_offset=n) 0 a 2 new: |-----------| (bo_offset=n) .. note:: We expect to see the same result for a request with a different bo and/or non-contiguous bo_offset. h](h)}(h`Existent mapping is a right aligned subset of the requested one, hence replace the existent one.h]h`Existent mapping is a right aligned subset of the requested one, hence replace the existent one.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMnhj2ubjT)}(h 1 a 2 old: |-----| (bo_offset=n+1) 0 a 2 req: |-----------| (bo_offset=n) 0 a 2 new: |-----------| (bo_offset=n)h]h 1 a 2 old: |-----| (bo_offset=n+1) 0 a 2 req: |-----------| (bo_offset=n) 0 a 2 new: |-----------| (bo_offset=n)}hj2sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMshj2ubjC1)}(hcWe expect to see the same result for a request with a different bo and/or non-contiguous bo_offset.h]h)}(hcWe expect to see the same result for a request with a different bo and/or non-contiguous bo_offset.h]hcWe expect to see the same result for a request with a different bo and/or non-contiguous bo_offset.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chM}hj2ubah}(h]h ]h"]h$]h&]uh1jB1hj2ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXExistent mapping is a centered subset of the requested one, hence replace the existent one. :: 1 a 2 old: |-----| (bo_offset=n+1) 0 a 3 req: |----------------| (bo_offset=n) 0 a 3 new: |----------------| (bo_offset=n) .. note:: We expect to see the same result for a request with a different bo and/or non-contiguous bo_offset. h](h)}(h[Existent mapping is a centered subset of the requested one, hence replace the existent one.h]h[Existent mapping is a centered subset of the requested one, hence replace the existent one.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj2ubjT)}(h 1 a 2 old: |-----| (bo_offset=n+1) 0 a 3 req: |----------------| (bo_offset=n) 0 a 3 new: |----------------| (bo_offset=n)h]h 1 a 2 old: |-----| (bo_offset=n+1) 0 a 3 req: |----------------| (bo_offset=n) 0 a 3 new: |----------------| (bo_offset=n)}hj3sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj2ubjC1)}(hcWe expect to see the same result for a request with a different bo and/or non-contiguous bo_offset.h]h)}(hcWe expect to see the same result for a request with a different bo and/or non-contiguous bo_offset.h]hcWe expect to see the same result for a request with a different bo and/or non-contiguous bo_offset.}(hj#3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj3ubah}(h]h ]h"]h$]h&]uh1jB1hj2ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubjy)}(hXExistent mappings is overlapped at the beginning by the requested mapping backed by a different BO. Hence, map the requested mapping and split up the existent one, adjusting its BO offset accordingly. :: 1 a 3 old: |-----------| (bo_offset=n) 0 b 2 req: |-----------| (bo_offset=m) 0 b 2 a' 3 new: |-----------|-----| (b.bo_offset=m,a.bo_offset=n+2) h](h)}(hExistent mappings is overlapped at the beginning by the requested mapping backed by a different BO. Hence, map the requested mapping and split up the existent one, adjusting its BO offset accordingly.h]hExistent mappings is overlapped at the beginning by the requested mapping backed by a different BO. Hence, map the requested mapping and split up the existent one, adjusting its BO offset accordingly.}(hjB3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj>3ubjT)}(h 1 a 3 old: |-----------| (bo_offset=n) 0 b 2 req: |-----------| (bo_offset=m) 0 b 2 a' 3 new: |-----------|-----| (b.bo_offset=m,a.bo_offset=n+2)h]h 1 a 3 old: |-----------| (bo_offset=n) 0 b 2 req: |-----------| (bo_offset=m) 0 b 2 a' 3 new: |-----------|-----| (b.bo_offset=m,a.bo_offset=n+2)}hjQ3sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:483: ./drivers/gpu/drm/drm_gpuvm.chMhj>3ubeh}(h]h ]h"]h$]h&]uh1jyhj0ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffixjWuh1j0hj-hhhNhNubj1)}(h.. _drm_gpuvm_locking:h]h}(h]h ]h"]h$]h&]j<drm-gpuvm-lockinguh1j0hMhj-hhhhubeh}(h]split-and-mergeah ]h"]split and mergeah$]h&]uh1hhj'hhhhhMubh)}(hhh](h)}(hLockingh]hLocking}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hhhhhMubh)}(hXeIn terms of managing :c:type:`drm_gpuva` entries DRM GPUVM does not take care of locking itself, it is the drivers responsibility to take care about locking. Drivers might want to protect the following operations: inserting, removing and iterating :c:type:`drm_gpuva` objects as well as generating all kinds of operations, such as split / merge or prefetch.h](hIn terms of managing }(hj3hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj3h]h drm_gpuva}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:491: ./drivers/gpu/drm/drm_gpuvm.chMhj3ubh entries DRM GPUVM does not take care of locking itself, it is the drivers responsibility to take care about locking. Drivers might want to protect the following operations: inserting, removing and iterating }(hj3hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj3h]h drm_gpuva}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj3hMhj3ubhZ objects as well as generating all kinds of operations, such as split / merge or prefetch.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhj3hhubh)}(hX\DRM GPUVM also does not take care of the locking of the backing :c:type:`drm_gem_object` buffers GPU VA lists and :c:type:`drm_gpuvm_bo` abstractions by itself; drivers are responsible to enforce mutual exclusion using either the GEMs dma_resv lock or alternatively a driver specific external lock. For the latter see also drm_gem_gpuva_set_lock().h](h@DRM GPUVM also does not take care of the locking of the backing }(hj3hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj3h]hdrm_gem_object}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:491: ./drivers/gpu/drm/drm_gpuvm.chMhj3ubh buffers GPU VA lists and }(hj3hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj4h]h drm_gpuvm_bo}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhj4hMhj3ubh abstractions by itself; drivers are responsible to enforce mutual exclusion using either the GEMs dma_resv lock or alternatively a driver specific external lock. For the latter see also drm_gem_gpuva_set_lock().}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj3hhubh)}(hXHowever, DRM GPUVM contains lockdep checks to ensure callers of its API hold the corresponding lock whenever the :c:type:`drm_gem_objects` GPU VA list is accessed by functions such as drm_gpuva_link() or drm_gpuva_unlink(), but also drm_gpuvm_bo_obtain() and drm_gpuvm_bo_put().h](hqHowever, DRM GPUVM contains lockdep checks to ensure callers of its API hold the corresponding lock whenever the }(hj>4hhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjH4h]hdrm_gem_objects}(hjJ4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjF4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:491: ./drivers/gpu/drm/drm_gpuvm.chMhj>4ubh GPU VA list is accessed by functions such as drm_gpuva_link() or drm_gpuva_unlink(), but also drm_gpuvm_bo_obtain() and drm_gpuvm_bo_put().}(hj>4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhje4hMhj3hhubh)}(hXThe latter is required since on creation and destruction of a :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuvm_bo` is attached / removed from the :c:type:`drm_gem_objects` gpuva list. Subsequent calls to drm_gpuvm_bo_obtain() for the same :c:type:`drm_gpuvm` and :c:type:`drm_gem_object` must be able to observe previous creations and destructions of :c:type:`drm_gpuvm_bos` in order to keep instances unique.h](h>The latter is required since on creation and destruction of a }(hjp4hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjz4h]h drm_gpuvm_bo}(hj|4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjx4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:491: ./drivers/gpu/drm/drm_gpuvm.chMhjp4ubh the }(hjp4hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj4h]h drm_gpuvm_bo}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhj4hMhjp4ubh is attached / removed from the }(hjp4hhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hj4h]hdrm_gem_objects}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhj4hMhjp4ubhD gpuva list. Subsequent calls to drm_gpuvm_bo_obtain() for the same }(hjp4hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj4h]h drm_gpuvm}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj4hMhjp4ubh and }(hjp4hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj5h]hdrm_gem_object}(hj 5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj4hMhjp4ubh@ must be able to observe previous creations and destructions of }(hjp4hhhNhNubh)}(h:c:type:`drm_gpuvm_bos`h]j)}(hj*5h]h drm_gpuvm_bos}(hj,5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj(5ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bosuh1hhj4hMhjp4ubh# in order to keep instances unique.}(hjp4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj3hhubh)}(hThe :c:type:`drm_gpuvm`'s lists for keeping track of external and evicted objects are protected against concurrent insertion / removal and iteration internally.h](hThe }(hjQ5hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj[5h]h drm_gpuvm}(hj]5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjY5ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:491: ./drivers/gpu/drm/drm_gpuvm.chMhjQ5ubh’s lists for keeping track of external and evicted objects are protected against concurrent insertion / removal and iteration internally.}(hjQ5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjx5hMhj3hhubh)}(hHowever, drivers still need ensure to protect concurrent calls to functions iterating those lists, namely drm_gpuvm_prepare_objects() and drm_gpuvm_validate().h]hHowever, drivers still need ensure to protect concurrent calls to functions iterating those lists, namely drm_gpuvm_prepare_objects() and drm_gpuvm_validate().}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:491: ./drivers/gpu/drm/drm_gpuvm.chMhj3hhubh)}(hXAlternatively, drivers can set the :c:type:`DRM_GPUVM_RESV_PROTECTED` flag to indicate that the corresponding :c:type:`dma_resv` locks are held in order to protect the lists. If :c:type:`DRM_GPUVM_RESV_PROTECTED` is set, internal locking is disabled and the corresponding lockdep checks are enabled. This is an optimization for drivers which are capable of taking the corresponding :c:type:`dma_resv` locks and hence do not require internal locking.h](h#Alternatively, drivers can set the }(hj5hhhNhNubh)}(h":c:type:`DRM_GPUVM_RESV_PROTECTED`h]j)}(hj5h]hDRM_GPUVM_RESV_PROTECTED}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_GPUVM_RESV_PROTECTEDuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:491: ./drivers/gpu/drm/drm_gpuvm.chMhj5ubh) flag to indicate that the corresponding }(hj5hhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hj5h]hdma_resv}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhj5hMhj5ubh2 locks are held in order to protect the lists. If }(hj5hhhNhNubh)}(h":c:type:`DRM_GPUVM_RESV_PROTECTED`h]j)}(hj5h]hDRM_GPUVM_RESV_PROTECTED}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_GPUVM_RESV_PROTECTEDuh1hhj5hMhj5ubh is set, internal locking is disabled and the corresponding lockdep checks are enabled. This is an optimization for drivers which are capable of taking the corresponding }(hj5hhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hj6h]hdma_resv}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhj5hMhj5ubh1 locks and hence do not require internal locking.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hMhj3hhubeh}(h](lockingjz3eh ]h"](lockingdrm_gpuvm_lockingeh$]h&]uh1hhj'hhhhhMj}j36jp3sj}jz3jp3subh)}(hhh](h)}(hExamplesh]hExamples}(hj;6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj86hhhhhMubh)}(hThis section gives two examples on how to let the DRM GPUVA Manager generate :c:type:`drm_gpuva_op` in order to satisfy a given map or unmap request and how to make use of them.h](hMThis section gives two examples on how to let the DRM GPUVA Manager generate }(hjI6hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjS6h]h drm_gpuva_op}(hjU6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjQ6ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:497: ./drivers/gpu/drm/drm_gpuvm.chMhjI6ubhN in order to satisfy a given map or unmap request and how to make use of them.}(hjI6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjp6hMhj86hhubh)}(hXFThe below code is strictly limited to illustrate the generic usage pattern. To maintain simplicitly, it doesn't make use of any abstractions for common code, different (asyncronous) stages with fence signalling critical paths, any other helpers or error handling in terms of freeing memory and dropping previously taken locks.h]hXHThe below code is strictly limited to illustrate the generic usage pattern. To maintain simplicitly, it doesn’t make use of any abstractions for common code, different (asyncronous) stages with fence signalling critical paths, any other helpers or error handling in terms of freeing memory and dropping previously taken locks.}(hj{6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:497: ./drivers/gpu/drm/drm_gpuvm.chMhj86hhubj0)}(hhh](jy)}(hX Obtain a list of :c:type:`drm_gpuva_op` to create a new mapping:: // Allocates a new &drm_gpuva. struct drm_gpuva * driver_gpuva_alloc(void); // Typically drivers would embedd the &drm_gpuvm and &drm_gpuva // structure in individual driver structures and lock the dma-resv with // drm_exec or similar helpers. int driver_mapping_create(struct drm_gpuvm *gpuvm, u64 addr, u64 range, struct drm_gem_object *obj, u64 offset) { struct drm_gpuva_ops *ops; struct drm_gpuva_op *op struct drm_gpuvm_bo *vm_bo; driver_lock_va_space(); ops = drm_gpuvm_sm_map_ops_create(gpuvm, addr, range, obj, offset); if (IS_ERR(ops)) return PTR_ERR(ops); vm_bo = drm_gpuvm_bo_obtain(gpuvm, obj); if (IS_ERR(vm_bo)) return PTR_ERR(vm_bo); drm_gpuva_for_each_op(op, ops) { struct drm_gpuva *va; switch (op->op) { case DRM_GPUVA_OP_MAP: va = driver_gpuva_alloc(); if (!va) ; // unwind previous VA space updates, // free memory and unlock driver_vm_map(); drm_gpuva_map(gpuvm, va, &op->map); drm_gpuva_link(va, vm_bo); break; case DRM_GPUVA_OP_REMAP: { struct drm_gpuva *prev = NULL, *next = NULL; va = op->remap.unmap->va; if (op->remap.prev) { prev = driver_gpuva_alloc(); if (!prev) ; // unwind previous VA space // updates, free memory and // unlock } if (op->remap.next) { next = driver_gpuva_alloc(); if (!next) ; // unwind previous VA space // updates, free memory and // unlock } driver_vm_remap(); drm_gpuva_remap(prev, next, &op->remap); if (prev) drm_gpuva_link(prev, va->vm_bo); if (next) drm_gpuva_link(next, va->vm_bo); drm_gpuva_unlink(va); break; } case DRM_GPUVA_OP_UNMAP: va = op->unmap->va; driver_vm_unmap(); drm_gpuva_unlink(va); drm_gpuva_unmap(&op->unmap); break; default: break; } } drm_gpuvm_bo_put(vm_bo); driver_unlock_va_space(); return 0; } h](h)}(hAObtain a list of :c:type:`drm_gpuva_op` to create a new mapping::h](hObtain a list of }(hj6hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hj6h]h drm_gpuva_op}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:497: ./drivers/gpu/drm/drm_gpuvm.chMhj6ubh to create a new mapping:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubjT)}(hX= // Allocates a new &drm_gpuva. struct drm_gpuva * driver_gpuva_alloc(void); // Typically drivers would embedd the &drm_gpuvm and &drm_gpuva // structure in individual driver structures and lock the dma-resv with // drm_exec or similar helpers. int driver_mapping_create(struct drm_gpuvm *gpuvm, u64 addr, u64 range, struct drm_gem_object *obj, u64 offset) { struct drm_gpuva_ops *ops; struct drm_gpuva_op *op struct drm_gpuvm_bo *vm_bo; driver_lock_va_space(); ops = drm_gpuvm_sm_map_ops_create(gpuvm, addr, range, obj, offset); if (IS_ERR(ops)) return PTR_ERR(ops); vm_bo = drm_gpuvm_bo_obtain(gpuvm, obj); if (IS_ERR(vm_bo)) return PTR_ERR(vm_bo); drm_gpuva_for_each_op(op, ops) { struct drm_gpuva *va; switch (op->op) { case DRM_GPUVA_OP_MAP: va = driver_gpuva_alloc(); if (!va) ; // unwind previous VA space updates, // free memory and unlock driver_vm_map(); drm_gpuva_map(gpuvm, va, &op->map); drm_gpuva_link(va, vm_bo); break; case DRM_GPUVA_OP_REMAP: { struct drm_gpuva *prev = NULL, *next = NULL; va = op->remap.unmap->va; if (op->remap.prev) { prev = driver_gpuva_alloc(); if (!prev) ; // unwind previous VA space // updates, free memory and // unlock } if (op->remap.next) { next = driver_gpuva_alloc(); if (!next) ; // unwind previous VA space // updates, free memory and // unlock } driver_vm_remap(); drm_gpuva_remap(prev, next, &op->remap); if (prev) drm_gpuva_link(prev, va->vm_bo); if (next) drm_gpuva_link(next, va->vm_bo); drm_gpuva_unlink(va); break; } case DRM_GPUVA_OP_UNMAP: va = op->unmap->va; driver_vm_unmap(); drm_gpuva_unlink(va); drm_gpuva_unmap(&op->unmap); break; default: break; } } drm_gpuvm_bo_put(vm_bo); driver_unlock_va_space(); return 0; }h]hX= // Allocates a new &drm_gpuva. struct drm_gpuva * driver_gpuva_alloc(void); // Typically drivers would embedd the &drm_gpuvm and &drm_gpuva // structure in individual driver structures and lock the dma-resv with // drm_exec or similar helpers. int driver_mapping_create(struct drm_gpuvm *gpuvm, u64 addr, u64 range, struct drm_gem_object *obj, u64 offset) { struct drm_gpuva_ops *ops; struct drm_gpuva_op *op struct drm_gpuvm_bo *vm_bo; driver_lock_va_space(); ops = drm_gpuvm_sm_map_ops_create(gpuvm, addr, range, obj, offset); if (IS_ERR(ops)) return PTR_ERR(ops); vm_bo = drm_gpuvm_bo_obtain(gpuvm, obj); if (IS_ERR(vm_bo)) return PTR_ERR(vm_bo); drm_gpuva_for_each_op(op, ops) { struct drm_gpuva *va; switch (op->op) { case DRM_GPUVA_OP_MAP: va = driver_gpuva_alloc(); if (!va) ; // unwind previous VA space updates, // free memory and unlock driver_vm_map(); drm_gpuva_map(gpuvm, va, &op->map); drm_gpuva_link(va, vm_bo); break; case DRM_GPUVA_OP_REMAP: { struct drm_gpuva *prev = NULL, *next = NULL; va = op->remap.unmap->va; if (op->remap.prev) { prev = driver_gpuva_alloc(); if (!prev) ; // unwind previous VA space // updates, free memory and // unlock } if (op->remap.next) { next = driver_gpuva_alloc(); if (!next) ; // unwind previous VA space // updates, free memory and // unlock } driver_vm_remap(); drm_gpuva_remap(prev, next, &op->remap); if (prev) drm_gpuva_link(prev, va->vm_bo); if (next) drm_gpuva_link(next, va->vm_bo); drm_gpuva_unlink(va); break; } case DRM_GPUVA_OP_UNMAP: va = op->unmap->va; driver_vm_unmap(); drm_gpuva_unlink(va); drm_gpuva_unmap(&op->unmap); break; default: break; } } drm_gpuvm_bo_put(vm_bo); driver_unlock_va_space(); return 0; }}hj6sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:497: ./drivers/gpu/drm/drm_gpuvm.chMhj6ubeh}(h]h ]h"]h$]h&]uh1jyhj6ubjy)}(hX Receive a callback for each :c:type:`drm_gpuva_op` to create a new mapping:: struct driver_context { struct drm_gpuvm *gpuvm; struct drm_gpuvm_bo *vm_bo; struct drm_gpuva *new_va; struct drm_gpuva *prev_va; struct drm_gpuva *next_va; }; // ops to pass to drm_gpuvm_init() static const struct drm_gpuvm_ops driver_gpuvm_ops = { .sm_step_map = driver_gpuva_map, .sm_step_remap = driver_gpuva_remap, .sm_step_unmap = driver_gpuva_unmap, }; // Typically drivers would embedd the &drm_gpuvm and &drm_gpuva // structure in individual driver structures and lock the dma-resv with // drm_exec or similar helpers. int driver_mapping_create(struct drm_gpuvm *gpuvm, u64 addr, u64 range, struct drm_gem_object *obj, u64 offset) { struct driver_context ctx; struct drm_gpuvm_bo *vm_bo; struct drm_gpuva_ops *ops; struct drm_gpuva_op *op; int ret = 0; ctx.gpuvm = gpuvm; ctx.new_va = kzalloc(sizeof(*ctx.new_va), GFP_KERNEL); ctx.prev_va = kzalloc(sizeof(*ctx.prev_va), GFP_KERNEL); ctx.next_va = kzalloc(sizeof(*ctx.next_va), GFP_KERNEL); ctx.vm_bo = drm_gpuvm_bo_create(gpuvm, obj); if (!ctx.new_va || !ctx.prev_va || !ctx.next_va || !vm_bo) { ret = -ENOMEM; goto out; } // Typically protected with a driver specific GEM gpuva lock // used in the fence signaling path for drm_gpuva_link() and // drm_gpuva_unlink(), hence pre-allocate. ctx.vm_bo = drm_gpuvm_bo_obtain_prealloc(ctx.vm_bo); driver_lock_va_space(); ret = drm_gpuvm_sm_map(gpuvm, &ctx, addr, range, obj, offset); driver_unlock_va_space(); out: drm_gpuvm_bo_put(ctx.vm_bo); kfree(ctx.new_va); kfree(ctx.prev_va); kfree(ctx.next_va); return ret; } int driver_gpuva_map(struct drm_gpuva_op *op, void *__ctx) { struct driver_context *ctx = __ctx; drm_gpuva_map(ctx->vm, ctx->new_va, &op->map); drm_gpuva_link(ctx->new_va, ctx->vm_bo); // prevent the new GPUVA from being freed in // driver_mapping_create() ctx->new_va = NULL; return 0; } int driver_gpuva_remap(struct drm_gpuva_op *op, void *__ctx) { struct driver_context *ctx = __ctx; struct drm_gpuva *va = op->remap.unmap->va; drm_gpuva_remap(ctx->prev_va, ctx->next_va, &op->remap); if (op->remap.prev) { drm_gpuva_link(ctx->prev_va, va->vm_bo); ctx->prev_va = NULL; } if (op->remap.next) { drm_gpuva_link(ctx->next_va, va->vm_bo); ctx->next_va = NULL; } drm_gpuva_unlink(va); kfree(va); return 0; } int driver_gpuva_unmap(struct drm_gpuva_op *op, void *__ctx) { drm_gpuva_unlink(op->unmap.va); drm_gpuva_unmap(&op->unmap); kfree(op->unmap.va); return 0; } h](h)}(hLReceive a callback for each :c:type:`drm_gpuva_op` to create a new mapping::h](hReceive a callback for each }(hj6hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hj6h]h drm_gpuva_op}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:497: ./drivers/gpu/drm/drm_gpuvm.chM5hj6ubh to create a new mapping:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hM5hj6ubjT)}(hX struct driver_context { struct drm_gpuvm *gpuvm; struct drm_gpuvm_bo *vm_bo; struct drm_gpuva *new_va; struct drm_gpuva *prev_va; struct drm_gpuva *next_va; }; // ops to pass to drm_gpuvm_init() static const struct drm_gpuvm_ops driver_gpuvm_ops = { .sm_step_map = driver_gpuva_map, .sm_step_remap = driver_gpuva_remap, .sm_step_unmap = driver_gpuva_unmap, }; // Typically drivers would embedd the &drm_gpuvm and &drm_gpuva // structure in individual driver structures and lock the dma-resv with // drm_exec or similar helpers. int driver_mapping_create(struct drm_gpuvm *gpuvm, u64 addr, u64 range, struct drm_gem_object *obj, u64 offset) { struct driver_context ctx; struct drm_gpuvm_bo *vm_bo; struct drm_gpuva_ops *ops; struct drm_gpuva_op *op; int ret = 0; ctx.gpuvm = gpuvm; ctx.new_va = kzalloc(sizeof(*ctx.new_va), GFP_KERNEL); ctx.prev_va = kzalloc(sizeof(*ctx.prev_va), GFP_KERNEL); ctx.next_va = kzalloc(sizeof(*ctx.next_va), GFP_KERNEL); ctx.vm_bo = drm_gpuvm_bo_create(gpuvm, obj); if (!ctx.new_va || !ctx.prev_va || !ctx.next_va || !vm_bo) { ret = -ENOMEM; goto out; } // Typically protected with a driver specific GEM gpuva lock // used in the fence signaling path for drm_gpuva_link() and // drm_gpuva_unlink(), hence pre-allocate. ctx.vm_bo = drm_gpuvm_bo_obtain_prealloc(ctx.vm_bo); driver_lock_va_space(); ret = drm_gpuvm_sm_map(gpuvm, &ctx, addr, range, obj, offset); driver_unlock_va_space(); out: drm_gpuvm_bo_put(ctx.vm_bo); kfree(ctx.new_va); kfree(ctx.prev_va); kfree(ctx.next_va); return ret; } int driver_gpuva_map(struct drm_gpuva_op *op, void *__ctx) { struct driver_context *ctx = __ctx; drm_gpuva_map(ctx->vm, ctx->new_va, &op->map); drm_gpuva_link(ctx->new_va, ctx->vm_bo); // prevent the new GPUVA from being freed in // driver_mapping_create() ctx->new_va = NULL; return 0; } int driver_gpuva_remap(struct drm_gpuva_op *op, void *__ctx) { struct driver_context *ctx = __ctx; struct drm_gpuva *va = op->remap.unmap->va; drm_gpuva_remap(ctx->prev_va, ctx->next_va, &op->remap); if (op->remap.prev) { drm_gpuva_link(ctx->prev_va, va->vm_bo); ctx->prev_va = NULL; } if (op->remap.next) { drm_gpuva_link(ctx->next_va, va->vm_bo); ctx->next_va = NULL; } drm_gpuva_unlink(va); kfree(va); return 0; } int driver_gpuva_unmap(struct drm_gpuva_op *op, void *__ctx) { drm_gpuva_unlink(op->unmap.va); drm_gpuva_unmap(&op->unmap); kfree(op->unmap.va); return 0; }h]hX struct driver_context { struct drm_gpuvm *gpuvm; struct drm_gpuvm_bo *vm_bo; struct drm_gpuva *new_va; struct drm_gpuva *prev_va; struct drm_gpuva *next_va; }; // ops to pass to drm_gpuvm_init() static const struct drm_gpuvm_ops driver_gpuvm_ops = { .sm_step_map = driver_gpuva_map, .sm_step_remap = driver_gpuva_remap, .sm_step_unmap = driver_gpuva_unmap, }; // Typically drivers would embedd the &drm_gpuvm and &drm_gpuva // structure in individual driver structures and lock the dma-resv with // drm_exec or similar helpers. int driver_mapping_create(struct drm_gpuvm *gpuvm, u64 addr, u64 range, struct drm_gem_object *obj, u64 offset) { struct driver_context ctx; struct drm_gpuvm_bo *vm_bo; struct drm_gpuva_ops *ops; struct drm_gpuva_op *op; int ret = 0; ctx.gpuvm = gpuvm; ctx.new_va = kzalloc(sizeof(*ctx.new_va), GFP_KERNEL); ctx.prev_va = kzalloc(sizeof(*ctx.prev_va), GFP_KERNEL); ctx.next_va = kzalloc(sizeof(*ctx.next_va), GFP_KERNEL); ctx.vm_bo = drm_gpuvm_bo_create(gpuvm, obj); if (!ctx.new_va || !ctx.prev_va || !ctx.next_va || !vm_bo) { ret = -ENOMEM; goto out; } // Typically protected with a driver specific GEM gpuva lock // used in the fence signaling path for drm_gpuva_link() and // drm_gpuva_unlink(), hence pre-allocate. ctx.vm_bo = drm_gpuvm_bo_obtain_prealloc(ctx.vm_bo); driver_lock_va_space(); ret = drm_gpuvm_sm_map(gpuvm, &ctx, addr, range, obj, offset); driver_unlock_va_space(); out: drm_gpuvm_bo_put(ctx.vm_bo); kfree(ctx.new_va); kfree(ctx.prev_va); kfree(ctx.next_va); return ret; } int driver_gpuva_map(struct drm_gpuva_op *op, void *__ctx) { struct driver_context *ctx = __ctx; drm_gpuva_map(ctx->vm, ctx->new_va, &op->map); drm_gpuva_link(ctx->new_va, ctx->vm_bo); // prevent the new GPUVA from being freed in // driver_mapping_create() ctx->new_va = NULL; return 0; } int driver_gpuva_remap(struct drm_gpuva_op *op, void *__ctx) { struct driver_context *ctx = __ctx; struct drm_gpuva *va = op->remap.unmap->va; drm_gpuva_remap(ctx->prev_va, ctx->next_va, &op->remap); if (op->remap.prev) { drm_gpuva_link(ctx->prev_va, va->vm_bo); ctx->prev_va = NULL; } if (op->remap.next) { drm_gpuva_link(ctx->next_va, va->vm_bo); ctx->next_va = NULL; } drm_gpuva_unlink(va); kfree(va); return 0; } int driver_gpuva_unmap(struct drm_gpuva_op *op, void *__ctx) { drm_gpuva_unlink(op->unmap.va); drm_gpuva_unmap(&op->unmap); kfree(op->unmap.va); return 0; }}hj7sbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:497: ./drivers/gpu/drm/drm_gpuvm.chM7hj6ubeh}(h]h ]h"]h$]h&]uh1jyhj6ubeh}(h]h ]h"]h$]h&]jl3jm3jn3hjo3jWuh1j0hj86hhhNhNubeh}(h]examplesah ]h"]examplesah$]h&]uh1hhj'hhhhhMubh)}(hhh](h)}(hDRM GPUVM Function Referencesh]hDRM GPUVM Function References}(hj47hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj17hhhhhMubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_flags (C enum)c.drm_gpuva_flagshNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_flagsh]j>)}(henum drm_gpuva_flagsh](jD)}(hjGh]henum}(hj[7hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjW7hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKubjV)}(h h]h }(hji7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjW7hhhjh7hKubjg)}(hdrm_gpuva_flagsh]jm)}(hjU7h]hdrm_gpuva_flags}(hj{7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjw7ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjW7hhhjh7hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjS7hhhjh7hKubah}(h]jN7ah ](jjeh"]h$]h&]jj)jhuh1j7hjh7hKhjP7hhubj)}(hhh]h)}(hflags for struct drm_gpuvah]hflags for struct drm_gpuva}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK*hj7hhubah}(h]h ]h"]h$]h&]uh1jhjP7hhhjh7hKubeh}(h]h ](jenumeh"]h$]h&]jjjj7jj7jjjuh1j2hhhj17hNhNubj)}(h**Constants** ``DRM_GPUVA_INVALIDATED`` Flag indicating that the :c:type:`drm_gpuva`'s backing GEM is invalidated. ``DRM_GPUVA_SPARSE`` Flag indicating that the :c:type:`drm_gpuva` is a sparse mapping. ``DRM_GPUVA_USERBITS`` user defined bitsh](h)}(h **Constants**h]j)}(hj7h]h Constants}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK.hj7ubj)}(hhh](j)}(he``DRM_GPUVA_INVALIDATED`` Flag indicating that the :c:type:`drm_gpuva`'s backing GEM is invalidated. h](j)}(h``DRM_GPUVA_INVALIDATED``h]j)}(hj7h]hDRM_GPUVA_INVALIDATED}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK1hj7ubj )}(hhh]h)}(hJFlag indicating that the :c:type:`drm_gpuva`'s backing GEM is invalidated.h](hFlag indicating that the }(hj7hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj8h]h drm_gpuva}(hj8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj7hK1hj7ubh ’s backing GEM is invalidated.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hK1hj7ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hK1hj7ubj)}(hW``DRM_GPUVA_SPARSE`` Flag indicating that the :c:type:`drm_gpuva` is a sparse mapping. h](j)}(h``DRM_GPUVA_SPARSE``h]j)}(hj:8h]hDRM_GPUVA_SPARSE}(hj<8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj88ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK4hj48ubj )}(hhh]h)}(hAFlag indicating that the :c:type:`drm_gpuva` is a sparse mapping.h](hFlag indicating that the }(hjS8hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj]8h]h drm_gpuva}(hj_8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj[8ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjO8hK4hjS8ubh is a sparse mapping.}(hjS8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjO8hK4hjP8ubah}(h]h ]h"]h$]h&]uh1j hj48ubeh}(h]h ]h"]h$]h&]uh1jhjO8hK4hj7ubj)}(h(``DRM_GPUVA_USERBITS`` user defined bitsh](j)}(h``DRM_GPUVA_USERBITS``h]j)}(hj8h]hDRM_GPUVA_USERBITS}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK6hj8ubj )}(hhh]h)}(huser defined bitsh]huser defined bits}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK7hj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hK6hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva (C struct) c.drm_gpuvahNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h drm_gpuvah]j>)}(hstruct drm_gpuvah](jD)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj8hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK=ubjV)}(h h]h }(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8hhhj8hK=ubjg)}(h drm_gpuvah]jm)}(hj8h]h drm_gpuva}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj 9ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj8hhhj8hK=ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj8hhhj8hK=ubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1j7hj8hK=hj8hhubj)}(hhh]h)}(h#structure to track a GPU VA mappingh]h#structure to track a GPU VA mapping}(hj29hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKBhj/9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hK=ubeh}(h]h ](jstructeh"]h$]h&]jjjjJ9jjJ9jjjuh1j2hhhj17hNhNubj)}(hX**Definition**:: struct drm_gpuva { struct drm_gpuvm *vm; struct drm_gpuvm_bo *vm_bo; enum drm_gpuva_flags flags; struct { u64 addr; u64 range; } va; struct { u64 offset; struct drm_gem_object *obj; struct list_head entry; } gem; struct { struct rb_node node; struct list_head entry; u64 __subtree_last; } rb; }; **Members** ``vm`` the :c:type:`drm_gpuvm` this object is associated with ``vm_bo`` the :c:type:`drm_gpuvm_bo` abstraction for the mapped :c:type:`drm_gem_object` ``flags`` the :c:type:`drm_gpuva_flags` for this mapping ``va`` structure containing the address and range of the :c:type:`drm_gpuva` ``va.addr`` the start address ``gem`` structure containing the :c:type:`drm_gem_object` and it's offset ``gem.offset`` the offset within the :c:type:`drm_gem_object` ``gem.obj`` the mapped :c:type:`drm_gem_object` ``gem.entry`` the :c:type:`list_head` to attach this object to a :c:type:`drm_gpuvm_bo` ``rb`` structure containing data to store :c:type:`drm_gpuvas` in a rb-tree ``rb.node`` the rb-tree node ``rb.entry`` The :c:type:`list_head` to additionally connect :c:type:`drm_gpuvas` in the same order they appear in the interval tree. This is useful to keep iterating :c:type:`drm_gpuvas` from a start node found through the rb-tree while doing modifications on the rb-tree itself. ``rb.__subtree_last`` needed by the interval tree, holding last-in-subtreeh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjV9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR9ubh:}(hjR9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKFhjN9ubjT)}(hXstruct drm_gpuva { struct drm_gpuvm *vm; struct drm_gpuvm_bo *vm_bo; enum drm_gpuva_flags flags; struct { u64 addr; u64 range; } va; struct { u64 offset; struct drm_gem_object *obj; struct list_head entry; } gem; struct { struct rb_node node; struct list_head entry; u64 __subtree_last; } rb; };h]hXstruct drm_gpuva { struct drm_gpuvm *vm; struct drm_gpuvm_bo *vm_bo; enum drm_gpuva_flags flags; struct { u64 addr; u64 range; } va; struct { u64 offset; struct drm_gem_object *obj; struct list_head entry; } gem; struct { struct rb_node node; struct list_head entry; u64 __subtree_last; } rb; };}hjo9sbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKHhjN9ubh)}(h **Members**h]j)}(hj9h]hMembers}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~9ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK\hjN9ubj)}(hhh](j)}(h>``vm`` the :c:type:`drm_gpuvm` this object is associated with h](j)}(h``vm``h]j)}(hj9h]hvm}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKLhj9ubj )}(hhh]h)}(h6the :c:type:`drm_gpuvm` this object is associated withh](hthe }(hj9hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj9h]h drm_gpuvm}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj9hKLhj9ubh this object is associated with}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hKLhj9ubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKLhj9ubj)}(hY``vm_bo`` the :c:type:`drm_gpuvm_bo` abstraction for the mapped :c:type:`drm_gem_object` h](j)}(h ``vm_bo``h]j)}(hj9h]hvm_bo}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKRhj9ubj )}(hhh]h)}(hNthe :c:type:`drm_gpuvm_bo` abstraction for the mapped :c:type:`drm_gem_object`h](hthe }(hj:hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj:h]h drm_gpuvm_bo}(hj :hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKQhj:ubh abstraction for the mapped }(hj:hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjB:h]hdrm_gem_object}(hjD:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj@:ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj;:hKQhj:ubeh}(h]h ]h"]h$]h&]uh1hhj;:hKQhj:ubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hKRhj9ubj)}(h9``flags`` the :c:type:`drm_gpuva_flags` for this mapping h](j)}(h ``flags``h]j)}(hjw:h]hflags}(hjy:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju:ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKWhjq:ubj )}(hhh]h)}(h.the :c:type:`drm_gpuva_flags` for this mappingh](hthe }(hj:hhhNhNubh)}(h:c:type:`drm_gpuva_flags`h]j)}(hj:h]hdrm_gpuva_flags}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_flagsuh1hhj:hKWhj:ubh for this mapping}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hKWhj:ubah}(h]h ]h"]h$]h&]uh1j hjq:ubeh}(h]h ]h"]h$]h&]uh1jhj:hKWhj9ubj)}(hM``va`` structure containing the address and range of the :c:type:`drm_gpuva` h](j)}(h``va``h]j)}(hj:h]hva}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK\hj:ubj )}(hhh]h)}(hEstructure containing the address and range of the :c:type:`drm_gpuva`h](h2structure containing the address and range of the }(hj:hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj:h]h drm_gpuva}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj:hK\hj:ubeh}(h]h ]h"]h$]h&]uh1hhj:hK\hj:ubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hK\hj9ubj)}(h``va.addr`` the start address h](j)}(h ``va.addr``h]j)}(hj+;h]hva.addr}(hj-;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj);ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhK`hj%;ubj )}(hhh]h)}(hthe start addressh]hthe start address}(hjD;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@;hK`hjA;ubah}(h]h ]h"]h$]h&]uh1j hj%;ubeh}(h]h ]h"]h$]h&]uh1jhj@;hK`hj9ubj)}(hJ``gem`` structure containing the :c:type:`drm_gem_object` and it's offset h](j)}(h``gem``h]j)}(hjd;h]hgem}(hjf;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb;ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKkhj^;ubj )}(hhh]h)}(hAstructure containing the :c:type:`drm_gem_object` and it's offseth](hstructure containing the }(hj};hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj;h]hdrm_gem_object}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjy;hKkhj};ubh and it’s offset}(hj};hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjy;hKkhjz;ubah}(h]h ]h"]h$]h&]uh1j hj^;ubeh}(h]h ]h"]h$]h&]uh1jhjy;hKkhj9ubj)}(h>``gem.offset`` the offset within the :c:type:`drm_gem_object` h](j)}(h``gem.offset``h]j)}(hj;h]h gem.offset}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKohj;ubj )}(hhh]h)}(h.the offset within the :c:type:`drm_gem_object`h](hthe offset within the }(hj;hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj;h]hdrm_gem_object}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj;hKohj;ubeh}(h]h ]h"]h$]h&]uh1hhj;hKohj;ubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hKohj9ubj)}(h0``gem.obj`` the mapped :c:type:`drm_gem_object` h](j)}(h ``gem.obj``h]j)}(hj<h]hgem.obj}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKthj<ubj )}(hhh]h)}(h#the mapped :c:type:`drm_gem_object`h](h the mapped }(hj1<hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj;<h]hdrm_gem_object}(hj=<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj9<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj-<hKthj1<ubeh}(h]h ]h"]h$]h&]uh1hhj-<hKthj.<ubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhj-<hKthj9ubj)}(hX``gem.entry`` the :c:type:`list_head` to attach this object to a :c:type:`drm_gpuvm_bo` h](j)}(h ``gem.entry``h]j)}(hjp<h]h gem.entry}(hjr<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn<ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKyhjj<ubj )}(hhh]h)}(hIthe :c:type:`list_head` to attach this object to a :c:type:`drm_gpuvm_bo`h](hthe }(hj<hhhNhNubh)}(h:c:type:`list_head`h]j)}(hj<h]h list_head}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 list_headuh1hhj<hKyhj<ubh to attach this object to a }(hj<hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj<h]h drm_gpuvm_bo}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhj<hKyhj<ubeh}(h]h ]h"]h$]h&]uh1hhj<hKyhj<ubah}(h]h ]h"]h$]h&]uh1j hjj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hKyhj9ubj)}(hL``rb`` structure containing data to store :c:type:`drm_gpuvas` in a rb-tree h](j)}(h``rb``h]j)}(hj<h]hrb}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj<ubj )}(hhh]h)}(hDstructure containing data to store :c:type:`drm_gpuvas` in a rb-treeh](h#structure containing data to store }(hj=hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hj=h]h drm_gpuvas}(hj=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj =ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhj=hKhj=ubh in a rb-tree}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hKhj=ubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhj9ubj)}(h``rb.node`` the rb-tree node h](j)}(h ``rb.node``h]j)}(hjG=h]hrb.node}(hjI=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE=ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjA=ubj )}(hhh]h)}(hthe rb-tree nodeh]hthe rb-tree node}(hj`=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\=hKhj]=ubah}(h]h ]h"]h$]h&]uh1j hjA=ubeh}(h]h ]h"]h$]h&]uh1jhj\=hKhj9ubj)}(hX``rb.entry`` The :c:type:`list_head` to additionally connect :c:type:`drm_gpuvas` in the same order they appear in the interval tree. This is useful to keep iterating :c:type:`drm_gpuvas` from a start node found through the rb-tree while doing modifications on the rb-tree itself. h](j)}(h ``rb.entry``h]j)}(hj=h]hrb.entry}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~=ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjz=ubj )}(hhh]h)}(hX The :c:type:`list_head` to additionally connect :c:type:`drm_gpuvas` in the same order they appear in the interval tree. This is useful to keep iterating :c:type:`drm_gpuvas` from a start node found through the rb-tree while doing modifications on the rb-tree itself.h](hThe }(hj=hhhNhNubh)}(h:c:type:`list_head`h]j)}(hj=h]h list_head}(hj=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj=ubh to additionally connect }(hj=hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hj=h]h drm_gpuvas}(hj=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhj=hKhj=ubhV in the same order they appear in the interval tree. This is useful to keep iterating }(hj=hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hj=h]h drm_gpuvas}(hj=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhj=hKhj=ubh] from a start node found through the rb-tree while doing modifications on the rb-tree itself.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hKhj=ubah}(h]h ]h"]h$]h&]uh1j hjz=ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhj9ubj)}(hJ``rb.__subtree_last`` needed by the interval tree, holding last-in-subtreeh](j)}(h``rb.__subtree_last``h]j)}(hj#>h]hrb.__subtree_last}(hj%>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!>ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj>ubj )}(hhh]h)}(h4needed by the interval tree, holding last-in-subtreeh]h4needed by the interval tree, holding last-in-subtree}(hj<>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj9>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhj8>hKhj9ubeh}(h]h ]h"]h$]h&]uh1jhjN9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hjf>h]h Description}(hjh>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd>ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj17hhubh)}(hXThis structure represents a GPU VA mapping and is associated with a :c:type:`drm_gpuvm`.h](hDThis structure represents a GPU VA mapping and is associated with a }(hj|>hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj>h]h drm_gpuvm}(hj>hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKChj|>ubh.}(hj|>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>hKChj17hhubh)}(hBTypically, this structure is embedded in bigger driver structures.h]hBTypically, this structure is embedded in bigger driver structures.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKFhj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_gpuva_invalidate (C function)c.drm_gpuva_invalidatehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hAvoid drm_gpuva_invalidate (struct drm_gpuva *va, bool invalidate)h]j>)}(h@void drm_gpuva_invalidate(struct drm_gpuva *va, bool invalidate)h](jc)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj>hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>hhhj>hKubjg)}(hdrm_gpuva_invalidateh]jm)}(hdrm_gpuva_invalidateh]hdrm_gpuva_invalidate}(hj>hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj>hhhj>hKubj)}(h'(struct drm_gpuva *va, bool invalidate)h](j)}(hstruct drm_gpuva *vah](jD)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj?ubjV)}(h h]h }(hj ?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hj1?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3?modnameN classnameNjj)}j]j)}jj>sbc.drm_gpuva_invalidateasbuh1hhj?ubjV)}(h h]h }(hjQ?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubj)}(hjh]h*}(hj_?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjm)}(hvah]hva}(hjl?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ?ubj)}(hbool invalidateh](jc)}(hj h]hbool}(hj?hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj?ubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubjm)}(h invalidateh]h invalidate}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ?ubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhj>hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj>hhhj>hKubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1j7hj>hKhj>hhubj)}(hhh]h)}(hGsets whether the backing GEM of this :c:type:`drm_gpuva` is invalidatedh](h%sets whether the backing GEM of this }(hj?hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj?h]h drm_gpuva}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jM?c.drm_gpuva_invalidateasbj3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj?ubh is invalidated}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj?hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj @jj @jjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to set the invalidate flag for ``bool invalidate`` indicates whether the :c:type:`drm_gpuva` is invalidatedh](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj@ubj)}(hhh](j)}(hP``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to set the invalidate flag for h](j)}(h``struct drm_gpuva *va``h]j)}(hj4@h]hstruct drm_gpuva *va}(hj6@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2@ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj.@ubj )}(hhh]h)}(h6the :c:type:`drm_gpuva` to set the invalidate flag forh](hthe }(hjM@hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjW@h]h drm_gpuva}(hjY@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjU@ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjI@hKhjM@ubh to set the invalidate flag for}(hjM@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjI@hKhjJ@ubah}(h]h ]h"]h$]h&]uh1j hj.@ubeh}(h]h ]h"]h$]h&]uh1jhjI@hKhj+@ubj)}(hL``bool invalidate`` indicates whether the :c:type:`drm_gpuva` is invalidatedh](j)}(h``bool invalidate``h]j)}(hj@h]hbool invalidate}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj@ubj )}(hhh]h)}(h8indicates whether the :c:type:`drm_gpuva` is invalidatedh](hindicates whether the }(hj@hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj@h]h drm_gpuva}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj@ubh is invalidated}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hKhj@ubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hKhj+@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gpuva_invalidated (C function)c.drm_gpuva_invalidatedhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h1bool drm_gpuva_invalidated (struct drm_gpuva *va)h]j>)}(h0bool drm_gpuva_invalidated(struct drm_gpuva *va)h](jc)}(hj h]hbool}(hj AhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj AhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKubjV)}(h h]h }(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj AhhhjAhKubjg)}(hdrm_gpuva_invalidatedh]jm)}(hdrm_gpuva_invalidatedh]hdrm_gpuva_invalidated}(hj-AhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj)Aubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj AhhhjAhKubj)}(h(struct drm_gpuva *va)h]j)}(hstruct drm_gpuva *vah](jD)}(hjh]hstruct}(hjIAhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjEAubjV)}(h h]h }(hjVAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjEAubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjgAhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjiAmodnameN classnameNjj)}j]j)}jj/Asbc.drm_gpuva_invalidatedasbuh1hhjEAubjV)}(h h]h }(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjEAubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEAubjm)}(hvah]hva}(hjAhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjEAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAAubah}(h]h ]h"]h$]h&]jjuh1jhj AhhhjAhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjAhhhjAhKubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1j7hjAhKhjAhhubj)}(hhh]h)}(hKindicates whether the backing BO of this :c:type:`drm_gpuva` is invalidatedh](h)indicates whether the backing BO of this }(hjAhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjAh]h drm_gpuva}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jAc.drm_gpuva_invalidatedasbj3 drm_gpuvauh1hhj?hKhjAubh is invalidated}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjAhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj Bjj Bjjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to check **Return** ``true`` if the GPU VA is invalidated, ``false`` otherwiseh](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjBubj)}(hhh]j)}(h:``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to check h](j)}(h``struct drm_gpuva *va``h]j)}(hj5Bh]hstruct drm_gpuva *va}(hj7BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Bubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj/Bubj )}(hhh]h)}(h the :c:type:`drm_gpuva` to checkh](hthe }(hjNBhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjXBh]h drm_gpuva}(hjZBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjVBubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjJBhKhjNBubh to check}(hjNBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJBhKhjKBubah}(h]h ]h"]h$]h&]uh1j hj/Bubeh}(h]h ]h"]h$]h&]uh1jhjJBhKhj,Bubah}(h]h ]h"]h$]h&]uh1jhjBubh)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjBubh)}(h:``true`` if the GPU VA is invalidated, ``false`` otherwiseh](j)}(h``true``h]htrue}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh if the GPU VA is invalidated, }(hjBhhhNhNubj)}(h ``false``h]hfalse}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh otherwise}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_flags (C enum)c.drm_gpuvm_flagshNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuvm_flagsh]j>)}(henum drm_gpuvm_flagsh](jD)}(hjGh]henum}(hjBhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjBhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBhhhjChKubjg)}(hdrm_gpuvm_flagsh]jm)}(hjBh]hdrm_gpuvm_flags}(hjChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjBhhhjChKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjBhhhjChKubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1j7hjChKhjBhhubj)}(hhh]h)}(hflags for struct drm_gpuvmh]hflags for struct drm_gpuvm}(hj:ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj7Chhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjChKubeh}(h]h ](jenumeh"]h$]h&]jjjjRCjjRCjjjuh1j2hhhj17hNhNubj)}(h**Constants** ``DRM_GPUVM_RESV_PROTECTED`` GPUVM is protected externally by the GPUVM's :c:type:`dma_resv` lock ``DRM_GPUVM_USERBITS`` user defined bitsh](h)}(h **Constants**h]j)}(hj\Ch]h Constants}(hj^ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZCubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjVCubj)}(hhh](j)}(hb``DRM_GPUVM_RESV_PROTECTED`` GPUVM is protected externally by the GPUVM's :c:type:`dma_resv` lock h](j)}(h``DRM_GPUVM_RESV_PROTECTED``h]j)}(hj{Ch]hDRM_GPUVM_RESV_PROTECTED}(hj}ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyCubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjuCubj )}(hhh]h)}(hDGPUVM is protected externally by the GPUVM's :c:type:`dma_resv` lockh](h/GPUVM is protected externally by the GPUVM’s }(hjChhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjCh]hdma_resv}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjCubh lock}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChKhjCubah}(h]h ]h"]h$]h&]uh1j hjuCubeh}(h]h ]h"]h$]h&]uh1jhjChKhjrCubj)}(h(``DRM_GPUVM_USERBITS`` user defined bitsh](j)}(h``DRM_GPUVM_USERBITS``h]j)}(hjCh]hDRM_GPUVM_USERBITS}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjCubj )}(hhh]h)}(huser defined bitsh]huser defined bits}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjCubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhjChKhjrCubeh}(h]h ]h"]h$]h&]uh1jhjVCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm (C struct) c.drm_gpuvmhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h drm_gpuvmh]j>)}(hstruct drm_gpuvmh](jD)}(hjh]hstruct}(hj2DhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj.DhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKubjV)}(h h]h }(hj@DhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.Dhhhj?DhKubjg)}(h drm_gpuvmh]jm)}(hj,Dh]h drm_gpuvm}(hjRDhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjNDubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj.Dhhhj?DhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj*Dhhhj?DhKubah}(h]j%Dah ](jjeh"]h$]h&]jj)jhuh1j7hj?DhKhj'Dhhubj)}(hhh]h)}(hDRM GPU VA Managerh]hDRM GPU VA Manager}(hjtDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjqDhhubah}(h]h ]h"]h$]h&]uh1jhj'Dhhhj?DhKubeh}(h]h ](jstructeh"]h$]h&]jjjjDjjDjjjuh1j2hhhj17hNhNubj)}(hX**Definition**:: struct drm_gpuvm { const char *name; enum drm_gpuvm_flags flags; struct drm_device *drm; u64 mm_start; u64 mm_range; struct { struct rb_root_cached tree; struct list_head list; } rb; struct kref kref; struct drm_gpuva kernel_alloc_node; const struct drm_gpuvm_ops *ops; struct drm_gem_object *r_obj; struct { struct list_head list; struct list_head *local_list; spinlock_t lock; } extobj; struct { struct list_head list; struct list_head *local_list; spinlock_t lock; } evict; }; **Members** ``name`` the name of the DRM GPU VA space ``flags`` the :c:type:`drm_gpuvm_flags` of this GPUVM ``drm`` the :c:type:`drm_device` this VM lives in ``mm_start`` start of the VA space ``mm_range`` length of the VA space ``rb`` structures to track :c:type:`drm_gpuva` entries ``rb.tree`` the rb-tree to track GPU VA mappings ``rb.list`` the :c:type:`list_head` to track GPU VA mappings ``kref`` reference count of this object ``kernel_alloc_node`` :c:type:`drm_gpuva` representing the address space cutout reserved for the kernel ``ops`` :c:type:`drm_gpuvm_ops` providing the split/merge steps to drivers ``r_obj`` Resv GEM object; representing the GPUVM's common :c:type:`dma_resv`. ``extobj`` structure holding the extobj list ``extobj.list`` :c:type:`list_head` storing :c:type:`drm_gpuvm_bos` serving as external object ``extobj.local_list`` pointer to the local list temporarily storing entries from the external object list ``extobj.lock`` spinlock to protect the extobj list ``evict`` structure holding the evict list and evict list lock ``evict.list`` :c:type:`list_head` storing :c:type:`drm_gpuvm_bos` currently being evicted ``evict.local_list`` pointer to the local list temporarily storing entries from the evicted object list ``evict.lock`` spinlock to protect the evict listh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh:}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjDubjT)}(hX[struct drm_gpuvm { const char *name; enum drm_gpuvm_flags flags; struct drm_device *drm; u64 mm_start; u64 mm_range; struct { struct rb_root_cached tree; struct list_head list; } rb; struct kref kref; struct drm_gpuva kernel_alloc_node; const struct drm_gpuvm_ops *ops; struct drm_gem_object *r_obj; struct { struct list_head list; struct list_head *local_list; spinlock_t lock; } extobj; struct { struct list_head list; struct list_head *local_list; spinlock_t lock; } evict; };h]hX[struct drm_gpuvm { const char *name; enum drm_gpuvm_flags flags; struct drm_device *drm; u64 mm_start; u64 mm_range; struct { struct rb_root_cached tree; struct list_head list; } rb; struct kref kref; struct drm_gpuva kernel_alloc_node; const struct drm_gpuvm_ops *ops; struct drm_gem_object *r_obj; struct { struct list_head list; struct list_head *local_list; spinlock_t lock; } extobj; struct { struct list_head list; struct list_head *local_list; spinlock_t lock; } evict; };}hjDsbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjDubh)}(h **Members**h]j)}(hjDh]hMembers}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjDubj)}(hhh](j)}(h*``name`` the name of the DRM GPU VA space h](j)}(h``name``h]j)}(hjDh]hname}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjDubj )}(hhh]h)}(h the name of the DRM GPU VA spaceh]h the name of the DRM GPU VA space}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKhjDubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhKhjDubj)}(h6``flags`` the :c:type:`drm_gpuvm_flags` of this GPUVM h](j)}(h ``flags``h]j)}(hjEh]hflags}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjEubj )}(hhh]h)}(h+the :c:type:`drm_gpuvm_flags` of this GPUVMh](hthe }(hj3EhhhNhNubh)}(h:c:type:`drm_gpuvm_flags`h]j)}(hj=Eh]hdrm_gpuvm_flags}(hj?EhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;Eubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_flagsuh1hhj/EhKhj3Eubh of this GPUVM}(hj3EhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/EhKhj0Eubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhj/EhKhjDubj)}(h2``drm`` the :c:type:`drm_device` this VM lives in h](j)}(h``drm``h]j)}(hjvEh]hdrm}(hjxEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtEubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjpEubj )}(hhh]h)}(h)the :c:type:`drm_device` this VM lives inh](hthe }(hjEhhhNhNubh)}(h:c:type:`drm_device`h]j)}(hjEh]h drm_device}(hjEhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhjEhKhjEubh this VM lives in}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjEhKhjEubah}(h]h ]h"]h$]h&]uh1j hjpEubeh}(h]h ]h"]h$]h&]uh1jhjEhKhjDubj)}(h#``mm_start`` start of the VA space h](j)}(h ``mm_start``h]j)}(hjEh]hmm_start}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjEubj )}(hhh]h)}(hstart of the VA spaceh]hstart of the VA space}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjEubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhjEhKhjDubj)}(h$``mm_range`` length of the VA space h](j)}(h ``mm_range``h]j)}(hj Fh]hmm_range}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Fubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjFubj )}(hhh]h)}(hlength of the VA spaceh]hlength of the VA space}(hj$FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj FhKhj!Fubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhj FhKhjDubj)}(h7``rb`` structures to track :c:type:`drm_gpuva` entries h](j)}(h``rb``h]j)}(hjDFh]hrb}(hjFFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBFubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj>Fubj )}(hhh]h)}(h/structures to track :c:type:`drm_gpuva` entriesh](hstructures to track }(hj]FhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjgFh]h drm_gpuva}(hjiFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjeFubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjYFhKhj]Fubh entries}(hj]FhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYFhKhjZFubah}(h]h ]h"]h$]h&]uh1j hj>Fubeh}(h]h ]h"]h$]h&]uh1jhjYFhKhjDubj)}(h1``rb.tree`` the rb-tree to track GPU VA mappings h](j)}(h ``rb.tree``h]j)}(hjFh]hrb.tree}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjFubj )}(hhh]h)}(h$the rb-tree to track GPU VA mappingsh]h$the rb-tree to track GPU VA mappings}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjDubj)}(h=``rb.list`` the :c:type:`list_head` to track GPU VA mappings h](j)}(h ``rb.list``h]j)}(hjFh]hrb.list}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjFubj )}(hhh]h)}(h0the :c:type:`list_head` to track GPU VA mappingsh](hthe }(hjFhhhNhNubh)}(h:c:type:`list_head`h]j)}(hjFh]h list_head}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 list_headuh1hhjFhMhjFubh to track GPU VA mappings}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjDubj)}(h(``kref`` reference count of this object h](j)}(h``kref``h]j)}(hj5Gh]hkref}(hj7GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Gubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hj/Gubj )}(hhh]h)}(hreference count of this objecth]hreference count of this object}(hjNGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJGhM hjKGubah}(h]h ]h"]h$]h&]uh1j hj/Gubeh}(h]h ]h"]h$]h&]uh1jhjJGhM hjDubj)}(hh``kernel_alloc_node`` :c:type:`drm_gpuva` representing the address space cutout reserved for the kernel h](j)}(h``kernel_alloc_node``h]j)}(hjnGh]hkernel_alloc_node}(hjpGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlGubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjhGubj )}(hhh]h)}(hQ:c:type:`drm_gpuva` representing the address space cutout reserved for the kernelh](h)}(h:c:type:`drm_gpuva`h]j)}(hjGh]h drm_gpuva}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjGubh> representing the address space cutout reserved for the kernel}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1j hjhGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjDubj)}(hK``ops`` :c:type:`drm_gpuvm_ops` providing the split/merge steps to drivers h](j)}(h``ops``h]j)}(hjGh]hops}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjGubj )}(hhh]h)}(hB:c:type:`drm_gpuvm_ops` providing the split/merge steps to driversh](h)}(h:c:type:`drm_gpuvm_ops`h]j)}(hjGh]h drm_gpuvm_ops}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhjGhMhjGubh+ providing the split/merge steps to drivers}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjDubj)}(hO``r_obj`` Resv GEM object; representing the GPUVM's common :c:type:`dma_resv`. h](j)}(h ``r_obj``h]j)}(hjHh]hr_obj}(hj!HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjHubj )}(hhh]h)}(hDResv GEM object; representing the GPUVM's common :c:type:`dma_resv`.h](h3Resv GEM object; representing the GPUVM’s common }(hj8HhhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjBHh]hdma_resv}(hjDHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj@Hubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhj4HhMhj8Hubh.}(hj8HhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4HhMhj5Hubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhj4HhMhjDubj)}(h-``extobj`` structure holding the extobj list h](j)}(h ``extobj``h]j)}(hj{Hh]hextobj}(hj}HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM$hjuHubj )}(hhh]h)}(h!structure holding the extobj listh]h!structure holding the extobj list}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM$hjHubah}(h]h ]h"]h$]h&]uh1j hjuHubeh}(h]h ]h"]h$]h&]uh1jhjHhM$hjDubj)}(h_``extobj.list`` :c:type:`list_head` storing :c:type:`drm_gpuvm_bos` serving as external object h](j)}(h``extobj.list``h]j)}(hjHh]h extobj.list}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM)hjHubj )}(hhh]h)}(hN:c:type:`list_head` storing :c:type:`drm_gpuvm_bos` serving as external objecth](h)}(h:c:type:`list_head`h]j)}(hjHh]h list_head}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM(hjHubh storing }(hjHhhhNhNubh)}(h:c:type:`drm_gpuvm_bos`h]j)}(hjHh]h drm_gpuvm_bos}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bosuh1hhjHhM(hjHubh serving as external object}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhM(hjHubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM)hjDubj)}(hj``extobj.local_list`` pointer to the local list temporarily storing entries from the external object list h](j)}(h``extobj.local_list``h]j)}(hj0Ih]hextobj.local_list}(hj2IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Iubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM/hj*Iubj )}(hhh]h)}(hSpointer to the local list temporarily storing entries from the external object listh]hSpointer to the local list temporarily storing entries from the external object list}(hjIIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM.hjFIubah}(h]h ]h"]h$]h&]uh1j hj*Iubeh}(h]h ]h"]h$]h&]uh1jhjEIhM/hjDubj)}(h4``extobj.lock`` spinlock to protect the extobj list h](j)}(h``extobj.lock``h]j)}(hjjIh]h extobj.lock}(hjlIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhIubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM4hjdIubj )}(hhh]h)}(h#spinlock to protect the extobj listh]h#spinlock to protect the extobj list}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM4hjIubah}(h]h ]h"]h$]h&]uh1j hjdIubeh}(h]h ]h"]h$]h&]uh1jhjIhM4hjDubj)}(h?``evict`` structure holding the evict list and evict list lock h](j)}(h ``evict``h]j)}(hjIh]hevict}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM:hjIubj )}(hhh]h)}(h4structure holding the evict list and evict list lockh]h4structure holding the evict list and evict list lock}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM:hjIubah}(h]h ]h"]h$]h&]uh1j hjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM:hjDubj)}(h[``evict.list`` :c:type:`list_head` storing :c:type:`drm_gpuvm_bos` currently being evicted h](j)}(h``evict.list``h]j)}(hjIh]h evict.list}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM?hjIubj )}(hhh]h)}(hK:c:type:`list_head` storing :c:type:`drm_gpuvm_bos` currently being evictedh](h)}(h:c:type:`list_head`h]j)}(hjIh]h list_head}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM>hjIubh storing }(hjIhhhNhNubh)}(h:c:type:`drm_gpuvm_bos`h]j)}(hjJh]h drm_gpuvm_bos}(hj!JhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bosuh1hhjJhM>hjIubh currently being evicted}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhM>hjIubah}(h]h ]h"]h$]h&]uh1j hjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM?hjDubj)}(hh``evict.local_list`` pointer to the local list temporarily storing entries from the evicted object list h](j)}(h``evict.local_list``h]j)}(hjXJh]hevict.local_list}(hjZJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVJubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMEhjRJubj )}(hhh]h)}(hRpointer to the local list temporarily storing entries from the evicted object listh]hRpointer to the local list temporarily storing entries from the evicted object list}(hjqJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMDhjnJubah}(h]h ]h"]h$]h&]uh1j hjRJubeh}(h]h ]h"]h$]h&]uh1jhjmJhMEhjDubj)}(h1``evict.lock`` spinlock to protect the evict listh](j)}(h``evict.lock``h]j)}(hjJh]h evict.lock}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMIhjJubj )}(hhh]h)}(h"spinlock to protect the evict listh]h"spinlock to protect the evict list}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMJhjJubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMIhjDubeh}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMMhj17hhubh)}(hThe DRM GPU VA Manager keeps track of a GPU's virtual address space by using :c:type:`maple_tree` structures. Typically, this structure is embedded in bigger driver structures.h](hOThe DRM GPU VA Manager keeps track of a GPU’s virtual address space by using }(hjJhhhNhNubh)}(h:c:type:`maple_tree`h]j)}(hjJh]h maple_tree}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 maple_treeuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhjJubhO structures. Typically, this structure is embedded in bigger driver structures.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhKhj17hhubh)}(hPDrivers can pass addresses and ranges in an arbitrary unit, e.g. bytes or pages.h]hPDrivers can pass addresses and ranges in an arbitrary unit, e.g. bytes or pages.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj17hhubh)}(hCThere should be one manager instance per GPU virtual address space.h]hCThere should be one manager instance per GPU virtual address space.}(hj,KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhKhj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_get (C function)c.drm_gpuvm_gethNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h:struct drm_gpuvm * drm_gpuvm_get (struct drm_gpuvm *gpuvm)h]j>)}(h8struct drm_gpuvm *drm_gpuvm_get(struct drm_gpuvm *gpuvm)h](jD)}(hjh]hstruct}(hjTKhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjPKhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM`ubjV)}(h h]h }(hjbKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPKhhhjaKhM`ubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjsKhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjpKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjuKmodnameN classnameNjj)}j]j)}j drm_gpuvm_getsbc.drm_gpuvm_getasbuh1hhjPKhhhjaKhM`ubjV)}(h h]h }(hjKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPKhhhjaKhM`ubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPKhhhjaKhM`ubjg)}(h drm_gpuvm_geth]jm)}(hjKh]h drm_gpuvm_get}(hjKhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjPKhhhjaKhM`ubj)}(h(struct drm_gpuvm *gpuvm)h]j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjKubjV)}(h h]h }(hjKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjKhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]jKc.drm_gpuvm_getasbuh1hhjKubjV)}(h h]h }(hj LhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubjm)}(hgpuvmh]hgpuvm}(hj%LhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubah}(h]h ]h"]h$]h&]jjuh1jhjPKhhhjaKhM`ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjLKhhhjaKhM`ubah}(h]jGKah ](jjeh"]h$]h&]jj)jhuh1j7hjaKhM`hjIKhhubj)}(hhh]h)}(h$acquire a struct drm_gpuvm referenceh]h$acquire a struct drm_gpuvm reference}(hjOLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMXhjLLhhubah}(h]h ]h"]h$]h&]uh1jhjIKhhhjaKhM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgLjjgLjjjuh1j2hhhj17hNhNubj)}(hXC**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to acquire the reference of **Description** This function acquires an additional reference to **gpuvm**. It is illegal to call this without already holding a reference. No locks required. **Return** the :c:type:`struct drm_gpuvm ` pointerh](h)}(h**Parameters**h]j)}(hjqLh]h Parameters}(hjsLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoLubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM\hjkLubj)}(hhh]j)}(hP``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to acquire the reference of h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjLh]hstruct drm_gpuvm *gpuvm}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMYhjLubj )}(hhh]h)}(h3the :c:type:`drm_gpuvm` to acquire the reference ofh](hthe }(hjLhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjLh]h drm_gpuvm}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjLhMYhjLubh to acquire the reference of}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjLhMYhjLubah}(h]h ]h"]h$]h&]uh1j hjLubeh}(h]h ]h"]h$]h&]uh1jhjLhMYhjLubah}(h]h ]h"]h$]h&]uh1jhjkLubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM[hjkLubh)}(hThis function acquires an additional reference to **gpuvm**. It is illegal to call this without already holding a reference. No locks required.h](h2This function acquires an additional reference to }(hjMhhhNhNubj)}(h **gpuvm**h]hgpuvm}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubhT. It is illegal to call this without already holding a reference. No locks required.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM[hjkLubh)}(h **Return**h]j)}(hj'Mh]hReturn}(hj)MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Mubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM^hjkLubh)}(h2the :c:type:`struct drm_gpuvm ` pointerh](hthe }(hj=MhhhNhNubh)}(h&:c:type:`struct drm_gpuvm `h]j)}(hjGMh]hstruct drm_gpuvm}(hjIMhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjEMubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM^hj=Mubh pointer}(hj=MhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdMhM^hjkLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gpuvm_resv_protected (C function)c.drm_gpuvm_resv_protectedhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h7bool drm_gpuvm_resv_protected (struct drm_gpuvm *gpuvm)h]j>)}(h6bool drm_gpuvm_resv_protected(struct drm_gpuvm *gpuvm)h](jc)}(hj h]hbool}(hjMhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjMhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMwubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMhhhjMhMwubjg)}(hdrm_gpuvm_resv_protectedh]jm)}(hdrm_gpuvm_resv_protectedh]hdrm_gpuvm_resv_protected}(hjMhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjMhhhjMhMwubj)}(h(struct drm_gpuvm *gpuvm)h]j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjMubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjMhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j)}jjMsbc.drm_gpuvm_resv_protectedasbuh1hhjMubjV)}(h h]h }(hj NhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjm)}(hgpuvmh]hgpuvm}(hj$NhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubah}(h]h ]h"]h$]h&]jjuh1jhjMhhhjMhMwubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjMhhhjMhMwubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1j7hjMhMwhjMhhubj)}(hhh]h)}(h;indicates whether :c:type:`DRM_GPUVM_RESV_PROTECTED` is seth](hindicates whether }(hjNNhhhNhNubh)}(h":c:type:`DRM_GPUVM_RESV_PROTECTED`h]j)}(hjXNh]hDRM_GPUVM_RESV_PROTECTED}(hjZNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjVNubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jNc.drm_gpuvm_resv_protectedasbj3DRM_GPUVM_RESV_PROTECTEDuh1hhj?hKhjNNubh is set}(hjNNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMqhjKNhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjMhMwubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` **Return** true if :c:type:`DRM_GPUVM_RESV_PROTECTED` is set, false otherwise.h](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMuhjNubj)}(hhh]j)}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjNh]hstruct drm_gpuvm *gpuvm}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMshjNubj )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hjNhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjNh]h drm_gpuvm}(hjNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjNhMshjNubeh}(h]h ]h"]h$]h&]uh1hhjNhMshjNubah}(h]h ]h"]h$]h&]uh1j hjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMshjNubah}(h]h ]h"]h$]h&]uh1jhjNubh)}(h **Return**h]j)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMuhjNubh)}(hCtrue if :c:type:`DRM_GPUVM_RESV_PROTECTED` is set, false otherwise.h](htrue if }(hj'OhhhNhNubh)}(h":c:type:`DRM_GPUVM_RESV_PROTECTED`h]j)}(hj1Oh]hDRM_GPUVM_RESV_PROTECTED}(hj3OhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/Oubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_GPUVM_RESV_PROTECTEDuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMuhj'Oubh is set, false otherwise.}(hj'OhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNOhMuhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_resv (C macro)c.drm_gpuvm_resvhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuvm_resvh]j>)}(hdrm_gpuvm_resvh]jg)}(hdrm_gpuvm_resvh]jm)}(hjsOh]hdrm_gpuvm_resv}(hj}OhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjyOubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjuOhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjqOhhhjOhMubah}(h]jlOah ](jjeh"]h$]h&]jj)jhuh1j7hjOhMhjnOhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjnOhhhjOhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjOjjOjjjuh1j2hhhj17hNhNubh)}(h``drm_gpuvm_resv (gpuvm__)``h]j)}(hjOh]hdrm_gpuvm_resv (gpuvm__)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h5returns the :c:type:`drm_gpuvm`'s :c:type:`dma_resv` h]h)}(h4returns the :c:type:`drm_gpuvm`'s :c:type:`dma_resv`h](h returns the }(hjOhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjOh]h drm_gpuvm}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM~hjOubh’s }(hjOhhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjOh]hdma_resv}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhjOhM~hjOubeh}(h]h ]h"]h$]h&]uh1hhjOhM~hjOubah}(h]h ]h"]h$]h&]uh1j?-hjOhM~hj17hhubj)}(h**Parameters** ``gpuvm__`` the :c:type:`drm_gpuvm` **Return** a pointer to the :c:type:`drm_gpuvm`'s shared :c:type:`dma_resv`h](h)}(h**Parameters**h]j)}(hj&Ph]h Parameters}(hj(PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Pubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj Pubj)}(hhh]j)}(h$``gpuvm__`` the :c:type:`drm_gpuvm` h](j)}(h ``gpuvm__``h]j)}(hjEPh]hgpuvm__}(hjGPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCPubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj?Pubj )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hj^PhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjhPh]h drm_gpuvm}(hjjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjfPubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjZPhMhj^Pubeh}(h]h ]h"]h$]h&]uh1hhjZPhMhj[Pubah}(h]h ]h"]h$]h&]uh1j hj?Pubeh}(h]h ]h"]h$]h&]uh1jhjZPhMhj)}(hdrm_gpuvm_resv_objh]jg)}(hdrm_gpuvm_resv_objh]jm)}(hj Qh]hdrm_gpuvm_resv_obj}(hj*QhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&Qubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj"QhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjQhhhj=QhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1j7hj=QhMhjQhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjQhhhj=QhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjVQjjVQjjjuh1j2hhhj17hNhNubh)}(h ``drm_gpuvm_resv_obj (gpuvm__)``h]j)}(hj\Qh]hdrm_gpuvm_resv_obj (gpuvm__)}(hj^QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZQubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(hZreturns the :c:type:`drm_gem_object` holding the :c:type:`drm_gpuvm`'s :c:type:`dma_resv` h]h)}(hYreturns the :c:type:`drm_gem_object` holding the :c:type:`drm_gpuvm`'s :c:type:`dma_resv`h](h returns the }(hjvQhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjQh]hdrm_gem_object}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj~Qubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjvQubh holding the }(hjvQhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjQh]h drm_gpuvm}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjQhMhjvQubh’s }(hjvQhhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjQh]hdma_resv}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhjQhMhjvQubeh}(h]h ]h"]h$]h&]uh1hhjQhMhjrQubah}(h]h ]h"]h$]h&]uh1j?-hjQhMhj17hhubj)}(h**Parameters** ``gpuvm__`` the :c:type:`drm_gpuvm` **Return** a pointer to the :c:type:`drm_gem_object` holding the :c:type:`drm_gpuvm`'s shared :c:type:`dma_resv`h](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjQubj)}(hhh]j)}(h$``gpuvm__`` the :c:type:`drm_gpuvm` h](j)}(h ``gpuvm__``h]j)}(hjRh]hgpuvm__}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjRubj )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hj.RhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj8Rh]h drm_gpuvm}(hj:RhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj6Rubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj*RhMhj.Rubeh}(h]h ]h"]h$]h&]uh1hhj*RhMhj+Rubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1jhj*RhMhj Rubah}(h]h ]h"]h$]h&]uh1jhjQubh)}(h **Return**h]j)}(hjoRh]hReturn}(hjqRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmRubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjQubh)}(hea pointer to the :c:type:`drm_gem_object` holding the :c:type:`drm_gpuvm`'s shared :c:type:`dma_resv`h](ha pointer to the }(hjRhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjRh]hdrm_gem_object}(hjRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjRubh holding the }(hjRhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjRh]h drm_gpuvm}(hjRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjRhMhjRubh ’s shared }(hjRhhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjRh]hdma_resv}(hjRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhjRhMhjRubeh}(h]h ]h"]h$]h&]uh1hhjRhMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gpuvm_is_extobj (C function)c.drm_gpuvm_is_extobjhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hNbool drm_gpuvm_is_extobj (struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h]j>)}(hMbool drm_gpuvm_is_extobj(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](jc)}(hj h]hbool}(hjShhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjShhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hj'ShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjShhhj&ShMubjg)}(hdrm_gpuvm_is_extobjh]jm)}(hdrm_gpuvm_is_extobjh]hdrm_gpuvm_is_extobj}(hj9ShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5Subah}(h]h ](jjeh"]h$]h&]jjuh1jfhjShhhj&ShMubj)}(h5(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjUShhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjQSubjV)}(h h]h }(hjbShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQSubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjsShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjpSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjuSmodnameN classnameNjj)}j]j)}jj;Ssbc.drm_gpuvm_is_extobjasbuh1hhjQSubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQSubjm)}(hgpuvmh]hgpuvm}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMSubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjSubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]jSc.drm_gpuvm_is_extobjasbuh1hhjSubjV)}(h h]h }(hjThhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjm)}(hobjh]hobj}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMSubeh}(h]h ]h"]h$]h&]jjuh1jhjShhhj&ShMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjShhhj&ShMubah}(h]j Sah ](jjeh"]h$]h&]jj)jhuh1j7hj&ShMhjShhubj)}(hhh]h)}(hJindicates whether the given :c:type:`drm_gem_object` is an external objecth](hindicates whether the given }(hjHThhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjRTh]hdrm_gem_object}(hjTThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjPTubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jSc.drm_gpuvm_is_extobjasbj3drm_gem_objectuh1hhj?hKhjHTubh is an external object}(hjHThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjEThhubah}(h]h ]h"]h$]h&]uh1jhjShhhj&ShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1j2hhhj17hNhNubj)}(hX%**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to check ``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` to check **Return** true if the :c:type:`drm_gem_object` :c:type:`dma_resv` differs from the :c:type:`drm_gpuvms` :c:type:`dma_resv`, false otherwiseh](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjTubj)}(hhh](j)}(h=``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to check h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjTh]hstruct drm_gpuvm *gpuvm}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjTubj )}(hhh]h)}(h the :c:type:`drm_gpuvm` to checkh](hthe }(hjThhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjTh]h drm_gpuvm}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjThMhjTubh to check}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjTubj)}(hE``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` to check h](j)}(h``struct drm_gem_object *obj``h]j)}(hj Uh]hstruct drm_gem_object *obj}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Uubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjUubj )}(hhh]h)}(h%the :c:type:`drm_gem_object` to checkh](hthe }(hj&UhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj0Uh]hdrm_gem_object}(hj2UhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj.Uubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj"UhMhj&Uubh to check}(hj&UhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"UhMhj#Uubah}(h]h ]h"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]uh1jhj"UhMhjTubeh}(h]h ]h"]h$]h&]uh1jhjTubh)}(h **Return**h]j)}(hjkUh]hReturn}(hjmUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjTubh)}(htrue if the :c:type:`drm_gem_object` :c:type:`dma_resv` differs from the :c:type:`drm_gpuvms` :c:type:`dma_resv`, false otherwiseh](h true if the }(hjUhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjUh]hdrm_gem_object}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjUubh }(hjUhhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjUh]hdma_resv}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhjUhMhjUubh differs from the }(hjUhhhNhNubh)}(h:c:type:`drm_gpuvms`h]j)}(hjUh]h drm_gpuvms}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmsuh1hhjUhMhjUubh }hjUsbh)}(h:c:type:`dma_resv`h]j)}(hjUh]hdma_resv}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhjUhMhjUubh, false otherwise}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gpuvm_for_each_va_range (C macro)c.drm_gpuvm_for_each_va_rangehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuvm_for_each_va_rangeh]j>)}(hdrm_gpuvm_for_each_va_rangeh]jg)}(hdrm_gpuvm_for_each_va_rangeh]jm)}(hj6Vh]hdrm_gpuvm_for_each_va_range}(hj@VhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj)}(h drm_gpuvm_for_each_va_range_safeh]jg)}(h drm_gpuvm_for_each_va_range_safeh]jm)}(hjcYh]h drm_gpuvm_for_each_va_range_safe}(hjmYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjiYubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjeYhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjaYhhhjYhMubah}(h]j\Yah ](jjeh"]h$]h&]jj)jhuh1j7hjYhMhj^Yhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj^YhhhjYhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjYjjYjjjuh1j2hhhj17hNhNubh)}(hL``drm_gpuvm_for_each_va_range_safe (va__, next__, gpuvm__, start__, end__)``h]j)}(hjYh]hHdrm_gpuvm_for_each_va_range_safe (va__, next__, gpuvm__, start__, end__)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h4safely iterate over a range of :c:type:`drm_gpuvas` h]h)}(h3safely iterate over a range of :c:type:`drm_gpuvas`h](hsafely iterate over a range of }(hjYhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hjYh]h drm_gpuvas}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjYubeh}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1j?-hjYhMhj17hhubj)}(hXv**Parameters** ``va__`` :c:type:`drm_gpuva` to assign to in each iteration step ``next__`` another :c:type:`drm_gpuva` to use as temporary storage ``gpuvm__`` :c:type:`drm_gpuvm` to walk over ``start__`` starting offset, the first gpuva will overlap this ``end__`` ending offset, the last gpuva will start before this (but may overlap) **Description** This iterator walks over all :c:type:`drm_gpuvas` in the :c:type:`drm_gpuvm` that lie between **start__** and **end__**. It is implemented similarly to list_for_each_safe(), but is using the :c:type:`drm_gpuvm`'s internal interval tree to accelerate the search for the starting :c:type:`drm_gpuva`, and hence is safe against removal of elements. It assumes that **end__** is within (or is the upper limit of) the :c:type:`drm_gpuvm`. This iterator does not skip over the :c:type:`drm_gpuvm`'s **kernel_alloc_node**.h](h)}(h**Parameters**h]j)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjYubj)}(hhh](j)}(hA``va__`` :c:type:`drm_gpuva` to assign to in each iteration step h](j)}(h``va__``h]j)}(hjZh]hva__}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj Zubj )}(hhh]h)}(h7:c:type:`drm_gpuva` to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j)}(hj1Zh]h drm_gpuva}(hj3ZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/Zubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj'ZhMhj+Zubh$ to assign to in each iteration step}(hj+ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'ZhMhj(Zubah}(h]h ]h"]h$]h&]uh1j hj Zubeh}(h]h ]h"]h$]h&]uh1jhj'ZhMhj Zubj)}(hC``next__`` another :c:type:`drm_gpuva` to use as temporary storage h](j)}(h ``next__``h]j)}(hjjZh]hnext__}(hjlZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhZubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjdZubj )}(hhh]h)}(h7another :c:type:`drm_gpuva` to use as temporary storageh](hanother }(hjZhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjZh]h drm_gpuva}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjZhMhjZubh to use as temporary storage}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1j hjdZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj Zubj)}(h-``gpuvm__`` :c:type:`drm_gpuvm` to walk over h](j)}(h ``gpuvm__``h]j)}(hjZh]hgpuvm__}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjZubj )}(hhh]h)}(h :c:type:`drm_gpuvm` to walk overh](h)}(h:c:type:`drm_gpuvm`h]j)}(hjZh]h drm_gpuvm}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjZhMhjZubh to walk over}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj Zubj)}(h?``start__`` starting offset, the first gpuva will overlap this h](j)}(h ``start__``h]j)}(hj[h]hstart__}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj[ubj )}(hhh]h)}(h2starting offset, the first gpuva will overlap thish]h2starting offset, the first gpuva will overlap this}(hj7[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3[hMhj4[ubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhj3[hMhj Zubj)}(hQ``end__`` ending offset, the last gpuva will start before this (but may overlap) h](j)}(h ``end__``h]j)}(hjW[h]hend__}(hjY[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU[ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjQ[ubj )}(hhh]h)}(hFending offset, the last gpuva will start before this (but may overlap)h]hFending offset, the last gpuva will start before this (but may overlap)}(hjp[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjm[ubah}(h]h ]h"]h$]h&]uh1j hjQ[ubeh}(h]h ]h"]h$]h&]uh1jhjl[hMhj Zubeh}(h]h ]h"]h$]h&]uh1jhjYubh)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjYubh)}(hXThis iterator walks over all :c:type:`drm_gpuvas` in the :c:type:`drm_gpuvm` that lie between **start__** and **end__**. It is implemented similarly to list_for_each_safe(), but is using the :c:type:`drm_gpuvm`'s internal interval tree to accelerate the search for the starting :c:type:`drm_gpuva`, and hence is safe against removal of elements. It assumes that **end__** is within (or is the upper limit of) the :c:type:`drm_gpuvm`. This iterator does not skip over the :c:type:`drm_gpuvm`'s **kernel_alloc_node**.h](hThis iterator walks over all }(hj[hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hj[h]h drm_gpuvas}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj[ubh in the }(hj[hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj[h]h drm_gpuvm}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj[hMhj[ubh that lie between }(hj[hhhNhNubj)}(h **start__**h]hstart__}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh and }(hj[hhhNhNubj)}(h **end__**h]hend__}(hj \hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubhH. It is implemented similarly to list_for_each_safe(), but is using the }(hj[hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj\h]h drm_gpuvm}(hj \hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj[hMhj[ubhF’s internal interval tree to accelerate the search for the starting }(hj[hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjA\h]h drm_gpuva}(hjC\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj?\ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj[hMhj[ubhA, and hence is safe against removal of elements. It assumes that }(hj[hhhNhNubj)}(h **end__**h]hend__}(hjb\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh* is within (or is the upper limit of) the }(hj[hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjv\h]h drm_gpuvm}(hjx\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjt\ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj[hMhj[ubh'. This iterator does not skip over the }(hj[hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj\h]h drm_gpuvm}(hj\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj[hMhj[ubh’s }(hj[hhhNhNubj)}(h**kernel_alloc_node**h]hkernel_alloc_node}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hMhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_for_each_va (C macro)c.drm_gpuvm_for_each_vahNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuvm_for_each_vah]j>)}(hdrm_gpuvm_for_each_vah]jg)}(hdrm_gpuvm_for_each_vah]jm)}(hj\h]hdrm_gpuvm_for_each_va}(hj\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj\hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj\hhhj ]hMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1j7hj ]hMhj\hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj\hhhj ]hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj"]jj"]jjjuh1j2hhhj17hNhNubh)}(h)``drm_gpuvm_for_each_va (va__, gpuvm__)``h]j)}(hj(]h]h%drm_gpuvm_for_each_va (va__, gpuvm__)}(hj*]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&]ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h&iterate over all :c:type:`drm_gpuvas` h]h)}(h%iterate over all :c:type:`drm_gpuvas`h](hiterate over all }(hjB]hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hjL]h]h drm_gpuvas}(hjN]hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjJ]ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjB]ubeh}(h]h ]h"]h$]h&]uh1hhji]hMhj>]ubah}(h]h ]h"]h$]h&]uh1j?-hji]hMhj17hhubj)}(h**Parameters** ``va__`` :c:type:`drm_gpuva` to assign to in each iteration step ``gpuvm__`` :c:type:`drm_gpuvm` to walk over **Description** This iterator walks over all :c:type:`drm_gpuva` structures associated with the given :c:type:`drm_gpuvm`.h](h)}(h**Parameters**h]j)}(hj|]h]h Parameters}(hj~]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz]ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjv]ubj)}(hhh](j)}(hA``va__`` :c:type:`drm_gpuva` to assign to in each iteration step h](j)}(h``va__``h]j)}(hj]h]hva__}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj]ubj )}(hhh]h)}(h7:c:type:`drm_gpuva` to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j)}(hj]h]h drm_gpuva}(hj]hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj]hMhj]ubh$ to assign to in each iteration step}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj]ubj)}(h-``gpuvm__`` :c:type:`drm_gpuvm` to walk over h](j)}(h ``gpuvm__``h]j)}(hj]h]hgpuvm__}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj]ubj )}(hhh]h)}(h :c:type:`drm_gpuvm` to walk overh](h)}(h:c:type:`drm_gpuvm`h]j)}(hj^h]h drm_gpuvm}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj^hMhj ^ubh to walk over}(hj ^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hMhj ^ubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhjv]ubh)}(h**Description**h]j)}(hjM^h]h Description}(hjO^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK^ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjv]ubh)}(hjThis iterator walks over all :c:type:`drm_gpuva` structures associated with the given :c:type:`drm_gpuvm`.h](hThis iterator walks over all }(hjc^hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjm^h]h drm_gpuva}(hjo^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjk^ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjc^ubh& structures associated with the given }(hjc^hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj^h]h drm_gpuvm}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj^hMhjc^ubh.}(hjc^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hMhjv]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_gpuvm_for_each_va_safe (C macro)c.drm_gpuvm_for_each_va_safehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuvm_for_each_va_safeh]j>)}(hdrm_gpuvm_for_each_va_safeh]jg)}(hdrm_gpuvm_for_each_va_safeh]jm)}(hj^h]hdrm_gpuvm_for_each_va_safe}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj^hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj^hhhj^hMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1j7hj^hMhj^hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj_jj_jjjuh1j2hhhj17hNhNubh)}(h6``drm_gpuvm_for_each_va_safe (va__, next__, gpuvm__)``h]j)}(hj_h]h2drm_gpuvm_for_each_va_safe (va__, next__, gpuvm__)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj _ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h-safely iterate over all :c:type:`drm_gpuvas` h]h)}(h,safely iterate over all :c:type:`drm_gpuvas`h](hsafely iterate over all }(hj(_hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hj2_h]h drm_gpuvas}(hj4_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj0_ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj(_ubeh}(h]h ]h"]h$]h&]uh1hhjO_hMhj$_ubah}(h]h ]h"]h$]h&]uh1j?-hjO_hMhj17hhubj)}(hX**Parameters** ``va__`` :c:type:`drm_gpuva` to assign to in each iteration step ``next__`` another :c:type:`drm_gpuva` to use as temporary storage ``gpuvm__`` :c:type:`drm_gpuvm` to walk over **Description** This iterator walks over all :c:type:`drm_gpuva` structures associated with the given :c:type:`drm_gpuvm`. It is implemented with list_for_each_entry_safe(), and hence safe against the removal of elements.h](h)}(h**Parameters**h]j)}(hjb_h]h Parameters}(hjd_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`_ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj\_ubj)}(hhh](j)}(hA``va__`` :c:type:`drm_gpuva` to assign to in each iteration step h](j)}(h``va__``h]j)}(hj_h]hva__}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj{_ubj )}(hhh]h)}(h7:c:type:`drm_gpuva` to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j)}(hj_h]h drm_gpuva}(hj_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj_hMhj_ubh$ to assign to in each iteration step}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1j hj{_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjx_ubj)}(hC``next__`` another :c:type:`drm_gpuva` to use as temporary storage h](j)}(h ``next__``h]j)}(hj_h]hnext__}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj_ubj )}(hhh]h)}(h7another :c:type:`drm_gpuva` to use as temporary storageh](hanother }(hj_hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj_h]h drm_gpuva}(hj_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj_hMhj_ubh to use as temporary storage}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjx_ubj)}(h-``gpuvm__`` :c:type:`drm_gpuvm` to walk over h](j)}(h ``gpuvm__``h]j)}(hj5`h]hgpuvm__}(hj7`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj/`ubj )}(hhh]h)}(h :c:type:`drm_gpuvm` to walk overh](h)}(h:c:type:`drm_gpuvm`h]j)}(hjT`h]h drm_gpuvm}(hjV`hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjR`ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjJ`hMhjN`ubh to walk over}(hjN`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJ`hMhjK`ubah}(h]h ]h"]h$]h&]uh1j hj/`ubeh}(h]h ]h"]h$]h&]uh1jhjJ`hMhjx_ubeh}(h]h ]h"]h$]h&]uh1jhj\_ubh)}(h**Description**h]j)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj\_ubh)}(hThis iterator walks over all :c:type:`drm_gpuva` structures associated with the given :c:type:`drm_gpuvm`. It is implemented with list_for_each_entry_safe(), and hence safe against the removal of elements.h](hThis iterator walks over all }(hj`hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj`h]h drm_gpuva}(hj`hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj`ubh& structures associated with the given }(hj`hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj`h]h drm_gpuvm}(hj`hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj`hMhj`ubhd. It is implemented with list_for_each_entry_safe(), and hence safe against the removal of elements.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hMhj\_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_exec (C struct)c.drm_gpuvm_exechNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuvm_exech]j>)}(hstruct drm_gpuvm_exech](jD)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjahhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hj(ahhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjahhhj'ahMubjg)}(hdrm_gpuvm_exech]jm)}(hjah]hdrm_gpuvm_exec}(hj:ahhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6aubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjahhhj'ahMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjahhhj'ahMubah}(h]j aah ](jjeh"]h$]h&]jj)jhuh1j7hj'ahMhjahhubj)}(hhh]h)}(h5:c:type:`drm_gpuvm` abstraction of :c:type:`drm_exec`h](h)}(h:c:type:`drm_gpuvm`h]j)}(hjbah]h drm_gpuvm}(hjdahhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj`aubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j)}jjasbc.drm_gpuvm_execasbj3 drm_gpuvmuh1hhj?hKhj\aubh abstraction of }(hj\ahhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hjah]hdrm_exec}(hjahhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj~aj3drm_execuh1hhj?hKhj\aubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjYahhubah}(h]h ]h"]h$]h&]uh1jhjahhhj'ahMubeh}(h]h ](jstructeh"]h$]h&]jjjjajjajjjuh1j2hhhj17hNhNubj)}(hX0**Definition**:: struct drm_gpuvm_exec { struct drm_exec exec; u32 flags; struct drm_gpuvm *vm; unsigned int num_fences; struct { int (*fn)(struct drm_gpuvm_exec *vm_exec); void *priv; } extra; }; **Members** ``exec`` the :c:type:`drm_exec` structure ``flags`` the flags for the struct drm_exec ``vm`` the :c:type:`drm_gpuvm` to lock its DMA reservations ``num_fences`` the number of fences to reserve for the :c:type:`dma_resv` of the locked :c:type:`drm_gem_objects` ``extra`` Callback and corresponding private data for the driver to lock arbitrary additional :c:type:`drm_gem_objects`. ``extra.fn`` The driver callback to lock additional :c:type:`drm_gem_objects`. ``extra.priv`` driver private data for the **fn** callbackh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh:}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjaubjT)}(hstruct drm_gpuvm_exec { struct drm_exec exec; u32 flags; struct drm_gpuvm *vm; unsigned int num_fences; struct { int (*fn)(struct drm_gpuvm_exec *vm_exec); void *priv; } extra; };h]hstruct drm_gpuvm_exec { struct drm_exec exec; u32 flags; struct drm_gpuvm *vm; unsigned int num_fences; struct { int (*fn)(struct drm_gpuvm_exec *vm_exec); void *priv; } extra; };}hjasbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjaubh)}(h **Members**h]j)}(hjah]hMembers}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjaubj)}(hhh](j)}(h*``exec`` the :c:type:`drm_exec` structure h](j)}(h``exec``h]j)}(hjbh]hexec}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj bubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjbubj )}(hhh]h)}(h the :c:type:`drm_exec` structureh](hthe }(hj'bhhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hj1bh]hdrm_exec}(hj3bhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj/bubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhj#bhMhj'bubh structure}(hj'bhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#bhMhj$bubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhj#bhMhjbubj)}(h,``flags`` the flags for the struct drm_exec h](j)}(h ``flags``h]j)}(hjjbh]hflags}(hjlbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhbubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjdbubj )}(hhh]h)}(h!the flags for the struct drm_exech]h!the flags for the struct drm_exec}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1j hjdbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjbubj)}(h<``vm`` the :c:type:`drm_gpuvm` to lock its DMA reservations h](j)}(h``vm``h]j)}(hjbh]hvm}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjbubj )}(hhh]h)}(h4the :c:type:`drm_gpuvm` to lock its DMA reservationsh](hthe }(hjbhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjbh]h drm_gpuvm}(hjbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjbhM hjbubh to lock its DMA reservations}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjbhM hjbubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hjbubj)}(hr``num_fences`` the number of fences to reserve for the :c:type:`dma_resv` of the locked :c:type:`drm_gem_objects` h](j)}(h``num_fences``h]j)}(hjbh]h num_fences}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjbubj )}(hhh]h)}(hbthe number of fences to reserve for the :c:type:`dma_resv` of the locked :c:type:`drm_gem_objects`h](h(the number of fences to reserve for the }(hjchhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hj"ch]hdma_resv}(hj$chhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj cubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjcubh of the locked }(hjchhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjFch]hdrm_gem_objects}(hjHchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjDcubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhj?chMhjcubeh}(h]h ]h"]h$]h&]uh1hhj?chMhjcubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhjchMhjbubj)}(hy``extra`` Callback and corresponding private data for the driver to lock arbitrary additional :c:type:`drm_gem_objects`. h](j)}(h ``extra``h]j)}(hj{ch]hextra}(hj}chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjycubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjucubj )}(hhh]h)}(hnCallback and corresponding private data for the driver to lock arbitrary additional :c:type:`drm_gem_objects`.h](hTCallback and corresponding private data for the driver to lock arbitrary additional }(hjchhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjch]hdrm_gem_objects}(hjchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1j hjucubeh}(h]h ]h"]h$]h&]uh1jhjchMhjbubj)}(hO``extra.fn`` The driver callback to lock additional :c:type:`drm_gem_objects`. h](j)}(h ``extra.fn``h]j)}(hjch]hextra.fn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjcubj )}(hhh]h)}(hAThe driver callback to lock additional :c:type:`drm_gem_objects`.h](h'The driver callback to lock additional }(hjchhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjch]hdrm_gem_objects}(hjchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhMhjcubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjbubj)}(h:``extra.priv`` driver private data for the **fn** callbackh](j)}(h``extra.priv``h]j)}(hj5dh]h extra.priv}(hj7dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3dubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM"hj/dubj )}(hhh]h)}(h+driver private data for the **fn** callbackh](hdriver private data for the }(hjNdhhhNhNubj)}(h**fn**h]hfn}(hjVdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNdubh callback}(hjNdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM#hjKdubah}(h]h ]h"]h$]h&]uh1j hj/dubeh}(h]h ]h"]h$]h&]uh1jhjJdhM"hjbubeh}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM&hj17hhubh)}(hNThis structure should be created on the stack as :c:type:`drm_exec` should be.h](h1This structure should be created on the stack as }(hjdhhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hjdh]hdrm_exec}(hjdhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjdubh should be.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhMhj17hhubh)}(hWOptionally, **extra** can be set in order to lock additional :c:type:`drm_gem_objects`.h](h Optionally, }(hjdhhhNhNubj)}(h **extra**h]hextra}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh( can be set in order to lock additional }(hjdhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjdh]hdrm_gem_objects}(hjdhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjdubh.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj ehMhj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gpuvm_exec_unlock (C function)c.drm_gpuvm_exec_unlockhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h;void drm_gpuvm_exec_unlock (struct drm_gpuvm_exec *vm_exec)h]j>)}(h:void drm_gpuvm_exec_unlock(struct drm_gpuvm_exec *vm_exec)h](jc)}(hvoidh]hvoid}(hj/ehhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj+ehhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMGubjV)}(h h]h }(hj>ehhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+ehhhj=ehMGubjg)}(hdrm_gpuvm_exec_unlockh]jm)}(hdrm_gpuvm_exec_unlockh]hdrm_gpuvm_exec_unlock}(hjPehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjLeubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj+ehhhj=ehMGubj)}(h (struct drm_gpuvm_exec *vm_exec)h]j)}(hstruct drm_gpuvm_exec *vm_exech](jD)}(hjh]hstruct}(hjlehhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjheubjV)}(h h]h }(hjyehhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjheubh)}(hhh]jm)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j)}jjResbc.drm_gpuvm_exec_unlockasbuh1hhjheubjV)}(h h]h }(hjehhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjheubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjheubjm)}(hvm_exech]hvm_exec}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjheubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdeubah}(h]h ]h"]h$]h&]jjuh1jhj+ehhhj=ehMGubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj'ehhhj=ehMGubah}(h]j"eah ](jjeh"]h$]h&]jj)jhuh1j7hj=ehMGhj$ehhubj)}(hhh]h)}(h(lock all dma-resv of all assoiciated BOsh]h(lock all dma-resv of all assoiciated BOs}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM?hjehhubah}(h]h ]h"]h$]h&]uh1jhj$ehhhj=ehMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfjjfjjjuh1j2hhhj17hNhNubj)}(hX&**Parameters** ``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper **Description** Releases all dma-resv locks of all :c:type:`drm_gem_objects` previously acquired through drm_gpuvm_exec_lock() or its variants. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMChj fubj)}(hhh]j)}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](j)}(h"``struct drm_gpuvm_exec *vm_exec``h]j)}(hj0fh]hstruct drm_gpuvm_exec *vm_exec}(hj2fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.fubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM@hj*fubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hjIfhhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j)}(hjSfh]hdrm_gpuvm_exec}(hjUfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjQfubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_execuh1hhjEfhM@hjIfubh wrapper}(hjIfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjEfhM@hjFfubah}(h]h ]h"]h$]h&]uh1j hj*fubeh}(h]h ]h"]h$]h&]uh1jhjEfhM@hj'fubah}(h]h ]h"]h$]h&]uh1jhj fubh)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMBhj fubh)}(hReleases all dma-resv locks of all :c:type:`drm_gem_objects` previously acquired through drm_gpuvm_exec_lock() or its variants.h](h#Releases all dma-resv locks of all }(hjfhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjfh]hdrm_gem_objects}(hjfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMBhjfubhC previously acquired through drm_gpuvm_exec_lock() or its variants.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfhMBhj fubh)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMEhj fubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMEhj fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_gpuvm_exec_resv_add_fence (C function)c.drm_gpuvm_exec_resv_add_fencehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hvoid drm_gpuvm_exec_resv_add_fence (struct drm_gpuvm_exec *vm_exec, struct dma_fence *fence, enum dma_resv_usage private_usage, enum dma_resv_usage extobj_usage)h]j>)}(hvoid drm_gpuvm_exec_resv_add_fence(struct drm_gpuvm_exec *vm_exec, struct dma_fence *fence, enum dma_resv_usage private_usage, enum dma_resv_usage extobj_usage)h](jc)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjghhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM]ubjV)}(h h]h }(hj,ghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjghhhj+ghM]ubjg)}(hdrm_gpuvm_exec_resv_add_fenceh]jm)}(hdrm_gpuvm_exec_resv_add_fenceh]hdrm_gpuvm_exec_resv_add_fence}(hj>ghhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:gubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjghhhj+ghM]ubj)}(h~(struct drm_gpuvm_exec *vm_exec, struct dma_fence *fence, enum dma_resv_usage private_usage, enum dma_resv_usage extobj_usage)h](j)}(hstruct drm_gpuvm_exec *vm_exech](jD)}(hjh]hstruct}(hjZghhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjVgubjV)}(h h]h }(hjgghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVgubh)}(hhh]jm)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjxghhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjugubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzgmodnameN classnameNjj)}j]j)}jj@gsbc.drm_gpuvm_exec_resv_add_fenceasbuh1hhjVgubjV)}(h h]h }(hjghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVgubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVgubjm)}(hvm_exech]hvm_exec}(hjghhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRgubj)}(hstruct dma_fence *fenceh](jD)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjgubjV)}(h h]h }(hjghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjgubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hjghhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]jgc.drm_gpuvm_exec_resv_add_fenceasbuh1hhjgubjV)}(h h]h }(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjgubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjm)}(hfenceh]hfence}(hj#hhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRgubj)}(h!enum dma_resv_usage private_usageh](jD)}(hjGh]henum}(hj)}(h;int drm_gpuvm_exec_validate(struct drm_gpuvm_exec *vm_exec)h](jc)}(hinth]hint}(hjjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMoubjV)}(h h]h }(hjjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjjhhhjjhMoubjg)}(hdrm_gpuvm_exec_validateh]jm)}(hdrm_gpuvm_exec_validateh]hdrm_gpuvm_exec_validate}(hjjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjjhhhjjhMoubj)}(h (struct drm_gpuvm_exec *vm_exec)h]j)}(hstruct drm_gpuvm_exec *vm_exech](jD)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjjubjV)}(h h]h }(hjjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjjubh)}(hhh]jm)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j)}jjjsbc.drm_gpuvm_exec_validateasbuh1hhjjubjV)}(h h]h }(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjjubj)}(hjh]h*}(hj+khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjm)}(hvm_exech]hvm_exec}(hj8khhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubah}(h]h ]h"]h$]h&]jjuh1jhjjhhhjjhMoubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjjhhhjjhMoubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1j7hjjhMohjjhhubj)}(hhh]h)}(h"validate all BOs marked as evictedh]h"validate all BOs marked as evicted}(hjbkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhhj_khhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjjhMoubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzkjjzkjjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper **Description** See drm_gpuvm_validate(). **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMlhj~kubj)}(hhh]j)}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](j)}(h"``struct drm_gpuvm_exec *vm_exec``h]j)}(hjkh]hstruct drm_gpuvm_exec *vm_exec}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMihjkubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hjkhhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j)}(hjkh]hdrm_gpuvm_exec}(hjkhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_execuh1hhjkhMihjkubh wrapper}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhMihjkubah}(h]h ]h"]h$]h&]uh1j hjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMihjkubah}(h]h ]h"]h$]h&]uh1jhj~kubh)}(h**Description**h]j)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMkhj~kubh)}(hSee drm_gpuvm_validate().h]hSee drm_gpuvm_validate().}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMkhj~kubh)}(h **Return**h]j)}(hj(lh]hReturn}(hj*lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&lubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMmhj~kubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hj>lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMmhj~kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_bo (C struct)c.drm_gpuvm_bohNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h drm_gpuvm_boh]j>)}(hstruct drm_gpuvm_boh](jD)}(hjh]hstruct}(hjmlhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjilhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMrubjV)}(h h]h }(hj{lhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjilhhhjzlhMrubjg)}(h drm_gpuvm_boh]jm)}(hjglh]h drm_gpuvm_bo}(hjlhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjilhhhjzlhMrubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjelhhhjzlhMrubah}(h]j`lah ](jjeh"]h$]h&]jj)jhuh1j7hjzlhMrhjblhhubj)}(hhh]h)}(hUstructure representing a :c:type:`drm_gpuvm` and :c:type:`drm_gem_object` combinationh](hstructure representing a }(hjlhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjlh]h drm_gpuvm}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j)}jjglsbc.drm_gpuvm_boasbj3 drm_gpuvmuh1hhj?hKhjlubh and }(hjlhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjlh]hdrm_gem_object}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjlj3drm_gem_objectuh1hhj?hKhjlubh combination}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMvhjlhhubah}(h]h ]h"]h$]h&]uh1jhjblhhhjzlhMrubeh}(h]h ](jstructeh"]h$]h&]jjjjmjjmjjjuh1j2hhhj17hNhNubj)}(hX**Definition**:: struct drm_gpuvm_bo { struct drm_gpuvm *vm; struct drm_gem_object *obj; bool evicted; struct kref kref; struct { struct list_head gpuva; struct { struct list_head gem; struct list_head extobj; struct list_head evict; } entry; } list; }; **Members** ``vm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. This is a reference counted pointer. ``obj`` The :c:type:`drm_gem_object` being mapped in **vm**. This is a reference counted pointer. ``evicted`` Indicates whether the :c:type:`drm_gem_object` is evicted; field protected by the :c:type:`drm_gem_object`'s dma-resv lock. ``kref`` The reference count for this :c:type:`drm_gpuvm_bo`. ``list`` Structure containing all :c:type:`list_heads`. ``list.gpuva`` The list of linked :c:type:`drm_gpuvas`. It is safe to access entries from this list as long as the GEM's gpuva lock is held. See also struct drm_gem_object. ``list.entry`` Structure containing all :c:type:`list_heads` serving as entry. ``list.entry.gem`` List entry to attach to the :c:type:`drm_gem_objects` gpuva list. ``list.entry.evict`` List entry to attach to the :c:type:`drm_gpuvms` evict list.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh:}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMzhjmubjT)}(hX@struct drm_gpuvm_bo { struct drm_gpuvm *vm; struct drm_gem_object *obj; bool evicted; struct kref kref; struct { struct list_head gpuva; struct { struct list_head gem; struct list_head extobj; struct list_head evict; } entry; } list; };h]hX@struct drm_gpuvm_bo { struct drm_gpuvm *vm; struct drm_gem_object *obj; bool evicted; struct kref kref; struct { struct list_head gpuva; struct { struct list_head gem; struct list_head extobj; struct list_head evict; } entry; } list; };}hj9msbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM|hjmubh)}(h **Members**h]j)}(hjJmh]hMembers}(hjLmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHmubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjmubj)}(hhh](j)}(h^``vm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. This is a reference counted pointer. h](j)}(h``vm``h]j)}(hjimh]hvm}(hjkmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgmubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjcmubj )}(hhh]h)}(hVThe :c:type:`drm_gpuvm` the **obj** is mapped in. This is a reference counted pointer.h](hThe }(hjmhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjmh]h drm_gpuvm}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjmubh the }(hjmhhhNhNubj)}(h**obj**h]hobj}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh3 is mapped in. This is a reference counted pointer.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjmubah}(h]h ]h"]h$]h&]uh1j hjcmubeh}(h]h ]h"]h$]h&]uh1jhj~mhMhj`mubj)}(hb``obj`` The :c:type:`drm_gem_object` being mapped in **vm**. This is a reference counted pointer. h](j)}(h``obj``h]j)}(hjmh]hobj}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjmubj )}(hhh]h)}(hYThe :c:type:`drm_gem_object` being mapped in **vm**. This is a reference counted pointer.h](hThe }(hjmhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjmh]hdrm_gem_object}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjmubh being mapped in }(hjmhhhNhNubj)}(h**vm**h]hvm}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh&. This is a reference counted pointer.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhjmubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMhj`mubj)}(h``evicted`` Indicates whether the :c:type:`drm_gem_object` is evicted; field protected by the :c:type:`drm_gem_object`'s dma-resv lock. h](j)}(h ``evicted``h]j)}(hjGnh]hevicted}(hjInhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEnubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjAnubj )}(hhh]h)}(h{Indicates whether the :c:type:`drm_gem_object` is evicted; field protected by the :c:type:`drm_gem_object`'s dma-resv lock.h](hIndicates whether the }(hj`nhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjjnh]hdrm_gem_object}(hjlnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjhnubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj`nubh$ is evicted; field protected by the }(hj`nhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjnh]hdrm_gem_object}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjnhMhj`nubh’s dma-resv lock.}(hj`nhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhj]nubah}(h]h ]h"]h$]h&]uh1j hjAnubeh}(h]h ]h"]h$]h&]uh1jhj\nhMhj`mubj)}(h>``kref`` The reference count for this :c:type:`drm_gpuvm_bo`. h](j)}(h``kref``h]j)}(hjnh]hkref}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjnubj )}(hhh]h)}(h4The reference count for this :c:type:`drm_gpuvm_bo`.h](hThe reference count for this }(hjnhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjnh]h drm_gpuvm_bo}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjnhMhjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhj`mubj)}(h8``list`` Structure containing all :c:type:`list_heads`. h](j)}(h``list``h]j)}(hj#oh]hlist}(hj%ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!oubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjoubj )}(hhh]h)}(h.Structure containing all :c:type:`list_heads`.h](hStructure containing all }(hj)}(hAstruct drm_gpuvm_bo *drm_gpuvm_bo_get(struct drm_gpuvm_bo *vm_bo)h](jD)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjrhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hj#rhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrhhhj"rhMubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hj4rhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6rmodnameN classnameNjj)}j]j)}jdrm_gpuvm_bo_getsbc.drm_gpuvm_bo_getasbuh1hhjrhhhj"rhMubjV)}(h h]h }(hjUrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrhhhj"rhMubj)}(hjh]h*}(hjcrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhj"rhMubjg)}(hdrm_gpuvm_bo_geth]jm)}(hjRrh]hdrm_gpuvm_bo_get}(hjtrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjprubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjrhhhj"rhMubj)}(h(struct drm_gpuvm_bo *vm_bo)h]j)}(hstruct drm_gpuvm_bo *vm_boh](jD)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjrubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]jPrc.drm_gpuvm_bo_getasbuh1hhjrubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjm)}(hvm_boh]hvm_bo}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhjrhhhj"rhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj rhhhj"rhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1j7hj"rhMhj rhhubj)}(hhh]h)}(h'acquire a struct drm_gpuvm_bo referenceh]h'acquire a struct drm_gpuvm_bo reference}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj shhubah}(h]h ]h"]h$]h&]uh1jhj rhhhj"rhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(sjj(sjjjuh1j2hhhj17hNhNubj)}(hXA**Parameters** ``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to acquire the reference of **Description** This function acquires an additional reference to **vm_bo**. It is illegal to call this without already holding a reference. No locks required. **Return** the :c:type:`struct vm_bo ` pointerh](h)}(h**Parameters**h]j)}(hj2sh]h Parameters}(hj4shhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0subah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj,subj)}(hhh]j)}(hV``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to acquire the reference of h](j)}(h``struct drm_gpuvm_bo *vm_bo``h]j)}(hjQsh]hstruct drm_gpuvm_bo *vm_bo}(hjSshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOsubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjKsubj )}(hhh]h)}(h6the :c:type:`drm_gpuvm_bo` to acquire the reference ofh](hthe }(hjjshhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjtsh]h drm_gpuvm_bo}(hjvshhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjrsubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjfshMhjjsubh to acquire the reference of}(hjjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfshMhjgsubah}(h]h ]h"]h$]h&]uh1j hjKsubeh}(h]h ]h"]h$]h&]uh1jhjfshMhjHsubah}(h]h ]h"]h$]h&]uh1jhj,subh)}(h**Description**h]j)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj,subh)}(hThis function acquires an additional reference to **vm_bo**. It is illegal to call this without already holding a reference. No locks required.h](h2This function acquires an additional reference to }(hjshhhNhNubj)}(h **vm_bo**h]hvm_bo}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubhT. It is illegal to call this without already holding a reference. No locks required.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj,subh)}(h **Return**h]j)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj,subh)}(h*the :c:type:`struct vm_bo ` pointerh](hthe }(hjshhhNhNubh)}(h:c:type:`struct vm_bo `h]j)}(hjth]h struct vm_bo}(hj thhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3vm_bouh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjsubh pointer}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%thMhj,subeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_gpuvm_bo_gem_evict (C function)c.drm_gpuvm_bo_gem_evicthNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hDvoid drm_gpuvm_bo_gem_evict (struct drm_gem_object *obj, bool evict)h]j>)}(hCvoid drm_gpuvm_bo_gem_evict(struct drm_gem_object *obj, bool evict)h](jc)}(hvoidh]hvoid}(hjPthhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjLthhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hj_thhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjLthhhj^thMubjg)}(hdrm_gpuvm_bo_gem_evicth]jm)}(hdrm_gpuvm_bo_gem_evicth]hdrm_gpuvm_bo_gem_evict}(hjqthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjmtubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjLthhhj^thMubj)}(h((struct drm_gem_object *obj, bool evict)h](j)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjtubjV)}(h h]h }(hjthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjtubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j)}jjstsbc.drm_gpuvm_bo_gem_evictasbuh1hhjtubjV)}(h h]h }(hjthhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjtubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjm)}(hobjh]hobj}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubj)}(h bool evicth](jc)}(hj h]hbool}(hjthhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjtubjV)}(h h]h }(hj uhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjtubjm)}(hevicth]hevict}(hjuhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubeh}(h]h ]h"]h$]h&]jjuh1jhjLthhhj^thMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjHthhhj^thMubah}(h]jCtah ](jjeh"]h$]h&]jj)jhuh1j7hj^thMhjEthhubj)}(hhh]h)}(haadd/remove all :c:type:`drm_gpuvm_bo`'s in the list to/from the :c:type:`drm_gpuvms` evicted listh](hadd/remove all }(hjDuhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjNuh]h drm_gpuvm_bo}(hjPuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLuubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jtc.drm_gpuvm_bo_gem_evictasbj3 drm_gpuvm_bouh1hhj?hKhjDuubh’s in the list to/from the }(hjDuhhhNhNubh)}(h:c:type:`drm_gpuvms`h]j)}(hjvuh]h drm_gpuvms}(hjxuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjtuubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjjuj3 drm_gpuvmsuh1hhj?hKhjDuubh evicted list}(hjDuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjAuhhubah}(h]h ]h"]h$]h&]uh1jhjEthhhj^thMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` ``bool evict`` indicates whether **obj** is evicted **Description** See drm_gpuvm_bo_evict().h](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjuubj)}(hhh](j)}(h<``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` h](j)}(h``struct drm_gem_object *obj``h]j)}(hjuh]hstruct drm_gem_object *obj}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjuubj )}(hhh]h)}(hthe :c:type:`drm_gem_object`h](hthe }(hjuhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjuh]hdrm_gem_object}(hjuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjuhMhjuubeh}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1j hjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjuubj)}(h4``bool evict`` indicates whether **obj** is evicted h](j)}(h``bool evict``h]j)}(hj(vh]h bool evict}(hj*vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&vubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj"vubj )}(hhh]h)}(h$indicates whether **obj** is evictedh](hindicates whether }(hjAvhhhNhNubj)}(h**obj**h]hobj}(hjIvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAvubh is evicted}(hjAvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=vhMhj>vubah}(h]h ]h"]h$]h&]uh1j hj"vubeh}(h]h ]h"]h$]h&]uh1jhj=vhMhjuubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjuvh]h Description}(hjwvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsvubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjuubh)}(hSee drm_gpuvm_bo_evict().h]hSee drm_gpuvm_bo_evict().}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gpuvm_bo_for_each_va (C macro)c.drm_gpuvm_bo_for_each_vahNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuvm_bo_for_each_vah]j>)}(hdrm_gpuvm_bo_for_each_vah]jg)}(hdrm_gpuvm_bo_for_each_vah]jm)}(hjvh]hdrm_gpuvm_bo_for_each_va}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjvhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjvhhhjvhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1j7hjvhMhjvhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjvhhhjvhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjvjjvjjjuh1j2hhhj17hNhNubh)}(h,``drm_gpuvm_bo_for_each_va (va__, vm_bo__)``h]j)}(hjvh]h(drm_gpuvm_bo_for_each_va (va__, vm_bo__)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h4iterator to walk over a list of :c:type:`drm_gpuva` h]h)}(h3iterator to walk over a list of :c:type:`drm_gpuva`h](h iterator to walk over a list of }(hj whhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjwh]h drm_gpuva}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj wubeh}(h]h ]h"]h$]h&]uh1hhj1whMhjwubah}(h]h ]h"]h$]h&]uh1j?-hj1whMhj17hhubj)}(hX`**Parameters** ``va__`` :c:type:`drm_gpuva` structure to assign to in each iteration step ``vm_bo__`` the :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated with **Description** This iterator walks over all :c:type:`drm_gpuva` structures associated with the :c:type:`drm_gpuvm_bo`. The caller must hold the GEM's gpuva lock.h](h)}(h**Parameters**h]j)}(hjDwh]h Parameters}(hjFwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBwubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj>wubj)}(hhh](j)}(hK``va__`` :c:type:`drm_gpuva` structure to assign to in each iteration step h](j)}(h``va__``h]j)}(hjcwh]hva__}(hjewhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjawubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj]wubj )}(hhh]h)}(hA:c:type:`drm_gpuva` structure to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j)}(hjwh]h drm_gpuva}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjxwhMhj|wubh. structure to assign to in each iteration step}(hj|whhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxwhMhjywubah}(h]h ]h"]h$]h&]uh1j hj]wubeh}(h]h ]h"]h$]h&]uh1jhjxwhMhjZwubj)}(h[``vm_bo__`` the :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated with h](j)}(h ``vm_bo__``h]j)}(hjwh]hvm_bo__}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjwubj )}(hhh]h)}(hNthe :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated withh](hthe }(hjwhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjwh]h drm_gpuvm_bo}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjwhMhjwubh the }(hjwhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjxh]h drm_gpuva}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjwhMhjwubh to walk are associated with}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1j hjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjZwubeh}(h]h ]h"]h$]h&]uh1jhj>wubh)}(h**Description**h]j)}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:xubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj>wubh)}(hgThis iterator walks over all :c:type:`drm_gpuva` structures associated with the :c:type:`drm_gpuvm_bo`.h](hThis iterator walks over all }(hjRxhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj\xh]h drm_gpuva}(hj^xhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjZxubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjRxubh structures associated with the }(hjRxhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjxh]h drm_gpuvm_bo}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj~xubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjyxhMhjRxubh.}(hjRxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyxhMhj>wubh)}(h*The caller must hold the GEM's gpuva lock.h]h,The caller must hold the GEM’s gpuva lock.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj>wubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_gpuvm_bo_for_each_va_safe (C macro)c.drm_gpuvm_bo_for_each_va_safehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuvm_bo_for_each_va_safeh]j>)}(hdrm_gpuvm_bo_for_each_va_safeh]jg)}(hdrm_gpuvm_bo_for_each_va_safeh]jm)}(hjxh]hdrm_gpuvm_bo_for_each_va_safe}(hjxhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjxhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjxhhhjxhMubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1j7hjxhMhjxhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjxhhhjxhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjyjjyjjjuh1j2hhhj17hNhNubh)}(h9``drm_gpuvm_bo_for_each_va_safe (va__, next__, vm_bo__)``h]j)}(hj yh]h5drm_gpuvm_bo_for_each_va_safe (va__, next__, vm_bo__)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj yubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h;iterator to safely walk over a list of :c:type:`drm_gpuva` h]h)}(h:iterator to safely walk over a list of :c:type:`drm_gpuva`h](h'iterator to safely walk over a list of }(hj&yhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj0yh]h drm_gpuva}(hj2yhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj.yubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj&yubeh}(h]h ]h"]h$]h&]uh1hhjMyhMhj"yubah}(h]h ]h"]h$]h&]uh1j?-hjMyhMhj17hhubj)}(hX **Parameters** ``va__`` :c:type:`drm_gpuva` structure to assign to in each iteration step ``next__`` :c:type:`next` :c:type:`drm_gpuva` to store the next step ``vm_bo__`` the :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated with **Description** This iterator walks over all :c:type:`drm_gpuva` structures associated with the :c:type:`drm_gpuvm_bo`. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements. The caller must hold the GEM's gpuva lock.h](h)}(h**Parameters**h]j)}(hj`yh]h Parameters}(hjbyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^yubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjZyubj)}(hhh](j)}(hK``va__`` :c:type:`drm_gpuva` structure to assign to in each iteration step h](j)}(h``va__``h]j)}(hjyh]hva__}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}yubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjyyubj )}(hhh]h)}(hA:c:type:`drm_gpuva` structure to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j)}(hjyh]h drm_gpuva}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjyhM hjyubh. structure to assign to in each iteration step}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhM hjyubah}(h]h ]h"]h$]h&]uh1j hjyyubeh}(h]h ]h"]h$]h&]uh1jhjyhM hjvyubj)}(hE``next__`` :c:type:`next` :c:type:`drm_gpuva` to store the next step h](j)}(h ``next__``h]j)}(hjyh]hnext__}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjyubj )}(hhh]h)}(h9:c:type:`next` :c:type:`drm_gpuva` to store the next steph](h)}(h:c:type:`next`h]j)}(hjyh]hnext}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3nextuh1hhjyhM hjyubh }(hjyhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjzh]h drm_gpuva}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjyhM hjyubh to store the next step}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhM hjyubah}(h]h ]h"]h$]h&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhjyhM hjvyubj)}(h[``vm_bo__`` the :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated with h](j)}(h ``vm_bo__``h]j)}(hjRzh]hvm_bo__}(hjTzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPzubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjLzubj )}(hhh]h)}(hNthe :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated withh](hthe }(hjkzhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjuzh]h drm_gpuvm_bo}(hjwzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjszubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjgzhM hjkzubh the }(hjkzhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjzh]h drm_gpuva}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjgzhM hjkzubh to walk are associated with}(hjkzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjgzhM hjhzubah}(h]h ]h"]h$]h&]uh1j hjLzubeh}(h]h ]h"]h$]h&]uh1jhjgzhM hjvyubeh}(h]h ]h"]h$]h&]uh1jhjZyubh)}(h**Description**h]j)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjZyubh)}(hThis iterator walks over all :c:type:`drm_gpuva` structures associated with the :c:type:`drm_gpuvm_bo`. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements.h](hThis iterator walks over all }(hjzhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjzh]h drm_gpuva}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjzubh structures associated with the }(hjzhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj{h]h drm_gpuvm_bo}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhj{hM hjzubhb. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hM hjZyubh)}(h*The caller must hold the GEM's gpuva lock.h]h,The caller must hold the GEM’s gpuva lock.}(hj>{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjZyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_op_type (C enum)c.drm_gpuva_op_typehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_op_typeh]j>)}(henum drm_gpuva_op_typeh](jD)}(hjGh]henum}(hjm{hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChji{hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hj{{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhji{hhhjz{hMubjg)}(hdrm_gpuva_op_typeh]jm)}(hjg{h]hdrm_gpuva_op_type}(hj{hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhji{hhhjz{hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhje{hhhjz{hMubah}(h]j`{ah ](jjeh"]h$]h&]jj)jhuh1j7hjz{hMhjb{hhubj)}(hhh]h)}(hGPU VA operation typeh]hGPU VA operation type}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj{hhubah}(h]h ]h"]h$]h&]uh1jhjb{hhhjz{hMubeh}(h]h ](jenumeh"]h$]h&]jjjj{jj{jjjuh1j2hhhj17hNhNubj)}(h**Constants** ``DRM_GPUVA_OP_MAP`` the map op type ``DRM_GPUVA_OP_REMAP`` the remap op type ``DRM_GPUVA_OP_UNMAP`` the unmap op type ``DRM_GPUVA_OP_PREFETCH`` the prefetch op type ``DRM_GPUVA_OP_DRIVER`` the driver defined op typeh](h)}(h **Constants**h]j)}(hj{h]h Constants}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj{ubj)}(hhh](j)}(h%``DRM_GPUVA_OP_MAP`` the map op type h](j)}(h``DRM_GPUVA_OP_MAP``h]j)}(hj{h]hDRM_GPUVA_OP_MAP}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj{ubj )}(hhh]h)}(hthe map op typeh]hthe map op type}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj{ubj)}(h)``DRM_GPUVA_OP_REMAP`` the remap op type h](j)}(h``DRM_GPUVA_OP_REMAP``h]j)}(hj)|h]hDRM_GPUVA_OP_REMAP}(hj+|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'|ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM!hj#|ubj )}(hhh]h)}(hthe remap op typeh]hthe remap op type}(hjB|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>|hM!hj?|ubah}(h]h ]h"]h$]h&]uh1j hj#|ubeh}(h]h ]h"]h$]h&]uh1jhj>|hM!hj{ubj)}(h)``DRM_GPUVA_OP_UNMAP`` the unmap op type h](j)}(h``DRM_GPUVA_OP_UNMAP``h]j)}(hjb|h]hDRM_GPUVA_OP_UNMAP}(hjd|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`|ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM$hj\|ubj )}(hhh]h)}(hthe unmap op typeh]hthe unmap op type}(hj{|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw|hM$hjx|ubah}(h]h ]h"]h$]h&]uh1j hj\|ubeh}(h]h ]h"]h$]h&]uh1jhjw|hM$hj{ubj)}(h/``DRM_GPUVA_OP_PREFETCH`` the prefetch op type h](j)}(h``DRM_GPUVA_OP_PREFETCH``h]j)}(hj|h]hDRM_GPUVA_OP_PREFETCH}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM'hj|ubj )}(hhh]h)}(hthe prefetch op typeh]hthe prefetch op type}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hM'hj|ubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hM'hj{ubj)}(h2``DRM_GPUVA_OP_DRIVER`` the driver defined op typeh](j)}(h``DRM_GPUVA_OP_DRIVER``h]j)}(hj|h]hDRM_GPUVA_OP_DRIVER}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM)hj|ubj )}(hhh]h)}(hthe driver defined op typeh]hthe driver defined op type}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM*hj|ubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hM)hj{ubeh}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM-hj17hhubh)}(hKOperations to alter the GPU VA mappings tracked by the :c:type:`drm_gpuvm`.h](h7Operations to alter the GPU VA mappings tracked by the }(hj-}hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj7}h]h drm_gpuvm}(hj9}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj5}ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj-}ubh.}(hj-}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjT}hMhj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_op_map (C struct)c.drm_gpuva_op_maphNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_op_maph]j>)}(hstruct drm_gpuva_op_maph](jD)}(hjh]hstruct}(hjx}hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjt}hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjt}hhhj}hMubjg)}(hdrm_gpuva_op_maph]jm)}(hjr}h]hdrm_gpuva_op_map}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjt}hhhj}hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjp}hhhj}hMubah}(h]jk}ah ](jjeh"]h$]h&]jj)jhuh1j7hj}hMhjm}hhubj)}(hhh]h)}(hGPU VA map operationh]hGPU VA map operation}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM7hj}hhubah}(h]h ]h"]h$]h&]uh1jhjm}hhhj}hMubeh}(h]h ](jstructeh"]h$]h&]jjjj}jj}jjjuh1j2hhhj17hNhNubj)}(hXB**Definition**:: struct drm_gpuva_op_map { struct { u64 addr; u64 range; } va; struct { u64 offset; struct drm_gem_object *obj; } gem; }; **Members** ``va`` structure containing address and range of a map operation ``va.addr`` the base address of the new mapping ``va.range`` the range of the new mapping ``gem`` structure containing the :c:type:`drm_gem_object` and it's offset ``gem.offset`` the offset within the :c:type:`drm_gem_object` ``gem.obj`` the :c:type:`drm_gem_object` to maph](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh:}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM;hj}ubjT)}(hstruct drm_gpuva_op_map { struct { u64 addr; u64 range; } va; struct { u64 offset; struct drm_gem_object *obj; } gem; };h]hstruct drm_gpuva_op_map { struct { u64 addr; u64 range; } va; struct { u64 offset; struct drm_gem_object *obj; } gem; };}hj}sbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM=hj}ubh)}(h **Members**h]j)}(hj~h]hMembers}(hj ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMHhj}ubj)}(hhh](j)}(hA``va`` structure containing address and range of a map operation h](j)}(h``va``h]j)}(hj'~h]hva}(hj)~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%~ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM@hj!~ubj )}(hhh]h)}(h9structure containing address and range of a map operationh]h9structure containing address and range of a map operation}(hj@~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM?hj=~ubah}(h]h ]h"]h$]h&]uh1j hj!~ubeh}(h]h ]h"]h$]h&]uh1jhj<~hM@hj~ubj)}(h0``va.addr`` the base address of the new mapping h](j)}(h ``va.addr``h]j)}(hja~h]hva.addr}(hjc~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_~ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMDhj[~ubj )}(hhh]h)}(h#the base address of the new mappingh]h#the base address of the new mapping}(hjz~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv~hMDhjw~ubah}(h]h ]h"]h$]h&]uh1j hj[~ubeh}(h]h ]h"]h$]h&]uh1jhjv~hMDhj~ubj)}(h*``va.range`` the range of the new mapping h](j)}(h ``va.range``h]j)}(hj~h]hva.range}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMIhj~ubj )}(hhh]h)}(hthe range of the new mappingh]hthe range of the new mapping}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMIhj~ubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMIhj~ubj)}(hJ``gem`` structure containing the :c:type:`drm_gem_object` and it's offset h](j)}(h``gem``h]j)}(hj~h]hgem}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMOhj~ubj )}(hhh]h)}(hAstructure containing the :c:type:`drm_gem_object` and it's offseth](hstructure containing the }(hj~hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj~h]hdrm_gem_object}(hj~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj~hMOhj~ubh and it’s offset}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~hMOhj~ubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMOhj~ubj)}(h>``gem.offset`` the offset within the :c:type:`drm_gem_object` h](j)}(h``gem.offset``h]j)}(hj/h]h gem.offset}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMShj)ubj )}(hhh]h)}(h.the offset within the :c:type:`drm_gem_object`h](hthe offset within the }(hjHhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjRh]hdrm_gem_object}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjDhMShjHubeh}(h]h ]h"]h$]h&]uh1hhjDhMShjEubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMShj~ubj)}(h/``gem.obj`` the :c:type:`drm_gem_object` to maph](j)}(h ``gem.obj``h]j)}(hjh]hgem.obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMWhjubj )}(hhh]h)}(h#the :c:type:`drm_gem_object` to maph](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMXhjubh to map}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhj~ubeh}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM[hj17hhubh)}(hUThis structure represents a single map operation generated by the DRM GPU VA manager.h]hUThis structure represents a single map operation generated by the DRM GPU VA manager.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM8hj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_op_unmap (C struct)c.drm_gpuva_op_unmaphNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_op_unmaph]j>)}(hstruct drm_gpuva_op_unmaph](jD)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj'hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM>ubjV)}(h h]h }(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj'hhhj8hM>ubjg)}(hdrm_gpuva_op_unmaph]jm)}(hj%h]hdrm_gpuva_op_unmap}(hjKhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj'hhhj8hM>ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj#hhhj8hM>ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj8hM>hj hhubj)}(hhh]h)}(hGPU VA unmap operationh]hGPU VA unmap operation}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM^hjjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj8hM>ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Definition**:: struct drm_gpuva_op_unmap { struct drm_gpuva *va; bool keep; }; **Members** ``va`` the :c:type:`drm_gpuva` to unmap ``keep`` Indicates whether this :c:type:`drm_gpuva` is physically contiguous with the original mapping request. Optionally, if :c:type:`keep` is set, drivers may keep the actual page table mappings for this :c:type:`drm_gpuva`, adding the missing page table entries only and update the :c:type:`drm_gpuvm` accordingly.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMbhjubjT)}(hGstruct drm_gpuva_op_unmap { struct drm_gpuva *va; bool keep; };h]hGstruct drm_gpuva_op_unmap { struct drm_gpuva *va; bool keep; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMdhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMihjubj)}(hhh](j)}(h(``va`` the :c:type:`drm_gpuva` to unmap h](j)}(h``va``h]j)}(hjڀh]hva}(hj܀hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؀ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMfhjԀubj )}(hhh]h)}(h the :c:type:`drm_gpuva` to unmaph](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjhMfhjubh to unmap}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1j hjԀubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjрubj)}(hX?``keep`` Indicates whether this :c:type:`drm_gpuva` is physically contiguous with the original mapping request. Optionally, if :c:type:`keep` is set, drivers may keep the actual page table mappings for this :c:type:`drm_gpuva`, adding the missing page table entries only and update the :c:type:`drm_gpuvm` accordingly.h](j)}(h``keep``h]j)}(hj6h]hkeep}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMohj0ubj )}(hhh](h)}(hfIndicates whether this :c:type:`drm_gpuva` is physically contiguous with the original mapping request.h](hIndicates whether this }(hjOhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjYh]h drm_gpuva}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMkhjOubh< is physically contiguous with the original mapping request.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMkhjLubh)}(hOptionally, if :c:type:`keep` is set, drivers may keep the actual page table mappings for this :c:type:`drm_gpuva`, adding the missing page table entries only and update the :c:type:`drm_gpuvm` accordingly.h](hOptionally, if }(hjhhhNhNubh)}(h:c:type:`keep`h]j)}(hjh]hkeep}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3keepuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMnhjubhB is set, drivers may keep the actual page table mappings for this }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjhMnhjubh<, adding the missing page table entries only and update the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjҁh]h drm_gpuvm}(hjԁhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjЁubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhMnhjubh accordingly.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMnhjLubeh}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMohjрubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMshj17hhubh)}(hWThis structure represents a single unmap operation generated by the DRM GPU VA manager.h]hWThis structure represents a single unmap operation generated by the DRM GPU VA manager.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM_hj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_op_remap (C struct)c.drm_gpuva_op_remaphNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_op_remaph]j>)}(hstruct drm_gpuva_op_remaph](jD)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjNhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMeubjV)}(h h]h }(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjNhhhj_hMeubjg)}(hdrm_gpuva_op_remaph]jm)}(hjLh]hdrm_gpuva_op_remap}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjNhhhj_hMeubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjJhhhj_hMeubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1j7hj_hMehjGhhubj)}(hhh]h)}(hGPU VA remap operationh]hGPU VA remap operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMwhjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj_hMeubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX[**Definition**:: struct drm_gpuva_op_remap { struct drm_gpuva_op_map *prev; struct drm_gpuva_op_map *next; struct drm_gpuva_op_unmap *unmap; }; **Members** ``prev`` the preceding part of a split mapping ``next`` the subsequent part of a split mapping ``unmap`` the unmap operation for the original existing mappingh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM{hjubjT)}(hstruct drm_gpuva_op_remap { struct drm_gpuva_op_map *prev; struct drm_gpuva_op_map *next; struct drm_gpuva_op_unmap *unmap; };h]hstruct drm_gpuva_op_remap { struct drm_gpuva_op_map *prev; struct drm_gpuva_op_map *next; struct drm_gpuva_op_unmap *unmap; };}hjтsbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM}hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj)}(hhh](j)}(h/``prev`` the preceding part of a split mapping h](j)}(h``prev``h]j)}(hjh]hprev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh]h)}(h%the preceding part of a split mappingh]h%the preceding part of a split mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``next`` the subsequent part of a split mapping h](j)}(h``next``h]j)}(hj:h]hnext}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj4ubj )}(hhh]h)}(h&the subsequent part of a split mappingh]h&the subsequent part of a split mapping}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(h?``unmap`` the unmap operation for the original existing mappingh](j)}(h ``unmap``h]j)}(hjsh]hunmap}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjmubj )}(hhh]h)}(h5the unmap operation for the original existing mappingh]h5the unmap operation for the original existing mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubh)}(hMThis represents a single remap operation generated by the DRM GPU VA manager.h]hMThis represents a single remap operation generated by the DRM GPU VA manager.}(hj̃hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMxhj17hhubh)}(hA remap operation is generated when an existing GPU VA mmapping is split up by inserting a new GPU VA mapping or by partially unmapping existent mapping(s), hence it consists of a maximum of two map and one unmap operation.h]hA remap operation is generated when an existing GPU VA mmapping is split up by inserting a new GPU VA mapping or by partially unmapping existent mapping(s), hence it consists of a maximum of two map and one unmap operation.}(hjۃhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMzhj17hhubh)}(hThe **unmap** operation takes care of removing the original existing mapping. **prev** is used to remap the preceding part, **next** the subsequent part.h](hThe }(hjhhhNhNubj)}(h **unmap**h]hunmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhA operation takes care of removing the original existing mapping. }(hjhhhNhNubj)}(h**prev**h]hprev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& is used to remap the preceding part, }(hjhhhNhNubj)}(h**next**h]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh the subsequent part.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubh)}(hIf either a new mapping's start address is aligned with the start address of the old mapping or the new mapping's end address is aligned with the end address of the old mapping, either **prev** or **next** is NULL.h](hIf either a new mapping’s start address is aligned with the start address of the old mapping or the new mapping’s end address is aligned with the end address of the old mapping, either }(hj/hhhNhNubj)}(h**prev**h]hprev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh or }(hj/hhhNhNubj)}(h**next**h]hnext}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh is NULL.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubh)}(hX<Note, the reason for a dedicated remap operation, rather than arbitrary unmap and map operations, is to give drivers the chance of extracting driver specific data for creating the new mappings from the unmap operations's :c:type:`drm_gpuva` structure which typically is embedded in larger driver specific structures.h](hNote, the reason for a dedicated remap operation, rather than arbitrary unmap and map operations, is to give drivers the chance of extracting driver specific data for creating the new mappings from the unmap operations’s }(hjbhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjlh]h drm_gpuva}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjbubhL structure which typically is embedded in larger driver specific structures.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gpuva_op_prefetch (C struct)c.drm_gpuva_op_prefetchhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_op_prefetchh]j>)}(hstruct drm_gpuva_op_prefetchh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuva_op_prefetchh]jm)}(hjh]hdrm_gpuva_op_prefetch}(hj̈́hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjɄubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hGPU VA prefetch operationh]hGPU VA prefetch operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(h**Definition**:: struct drm_gpuva_op_prefetch { struct drm_gpuva *va; }; **Members** ``va`` the :c:type:`drm_gpuva` to prefetchh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj ubjT)}(h;struct drm_gpuva_op_prefetch { struct drm_gpuva *va; };h]h;struct drm_gpuva_op_prefetch { struct drm_gpuva *va; };}hj,sbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj ubh)}(h **Members**h]j)}(hj=h]hMembers}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj ubj)}(hhh]j)}(h*``va`` the :c:type:`drm_gpuva` to prefetchh](j)}(h``va``h]j)}(hj\h]hva}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjVubj )}(hhh]h)}(h#the :c:type:`drm_gpuva` to prefetchh](hthe }(hjuhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjuubh to prefetch}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjrubah}(h]h ]h"]h$]h&]uh1j hjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hj…h]h Description}(hjąhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubh)}(hZThis structure represents a single prefetch operation generated by the DRM GPU VA manager.h]hZThis structure represents a single prefetch operation generated by the DRM GPU VA manager.}(hj؅hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_op (C struct)c.drm_gpuva_ophNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h drm_gpuva_oph]j>)}(hstruct drm_gpuva_oph](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj hMubjg)}(h drm_gpuva_oph]jm)}(hjh]h drm_gpuva_op}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj hMhjhhubj)}(hhh]h)}(hGPU VA operationh]hGPU VA operation}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj?hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jstructeh"]h$]h&]jjjjZjjZjjjuh1j2hhhj17hNhNubj)}(hX}**Definition**:: struct drm_gpuva_op { struct list_head entry; enum drm_gpuva_op_type op; union { struct drm_gpuva_op_map map; struct drm_gpuva_op_remap remap; struct drm_gpuva_op_unmap unmap; struct drm_gpuva_op_prefetch prefetch; }; }; **Members** ``entry`` The :c:type:`list_head` used to distribute instances of this struct within :c:type:`drm_gpuva_ops`. ``op`` the type of the operation ``{unnamed_union}`` anonymous ``map`` the map operation ``remap`` the remap operation ``unmap`` the unmap operation ``prefetch`` the prefetch operationh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh:}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj^ubjT)}(hX struct drm_gpuva_op { struct list_head entry; enum drm_gpuva_op_type op; union { struct drm_gpuva_op_map map; struct drm_gpuva_op_remap remap; struct drm_gpuva_op_unmap unmap; struct drm_gpuva_op_prefetch prefetch; }; };h]hX struct drm_gpuva_op { struct list_head entry; enum drm_gpuva_op_type op; union { struct drm_gpuva_op_map map; struct drm_gpuva_op_remap remap; struct drm_gpuva_op_unmap unmap; struct drm_gpuva_op_prefetch prefetch; }; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj^ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj^ubj)}(hhh](j)}(hn``entry`` The :c:type:`list_head` used to distribute instances of this struct within :c:type:`drm_gpuva_ops`. h](j)}(h ``entry``h]j)}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh]h)}(hcThe :c:type:`list_head` used to distribute instances of this struct within :c:type:`drm_gpuva_ops`.h](hThe }(hjȆhhhNhNubh)}(h:c:type:`list_head`h]j)}(hj҆h]h list_head}(hjԆhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjІubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjȆubh4 used to distribute instances of this struct within }(hjȆhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhjhMhjȆubh.}(hjȆhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjņubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjĆhMhjubj)}(h!``op`` the type of the operation h](j)}(h``op``h]j)}(hj/h]hop}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj)ubj )}(hhh]h)}(hthe type of the operationh]hthe type of the operation}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjhh]h{unnamed_union}}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjbubj )}(hhh]h)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjubj)}(h``map`` the map operation h](j)}(h``map``h]j)}(hjh]hmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh]h)}(hthe map operationh]hthe map operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``remap`` the remap operation h](j)}(h ``remap``h]j)}(hjڇh]hremap}(hj܇hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؇ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjԇubj )}(hhh]h)}(hthe remap operationh]hthe remap operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjԇubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``unmap`` the unmap operation h](j)}(h ``unmap``h]j)}(hjh]hunmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj ubj )}(hhh]h)}(hthe unmap operationh]hthe unmap operation}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubj)}(h#``prefetch`` the prefetch operationh](j)}(h ``prefetch``h]j)}(hjLh]hprefetch}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjFubj )}(hhh]h)}(hthe prefetch operationh]hthe prefetch operation}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjbubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjubeh}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubh)}(h5This structure represents a single generic operation.h]h5This structure represents a single generic operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubh)}(h:The particular type of the operation is defined by **op**.h](h3The particular type of the operation is defined by }(hjhhhNhNubj)}(h**op**h]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_ops (C struct)c.drm_gpuva_opshNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h drm_gpuva_opsh]j>)}(hstruct drm_gpuva_opsh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(h drm_gpuva_opsh]jm)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h&wraps a list of :c:type:`drm_gpuva_op`h](hwraps a list of }(hj0hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hj:h]h drm_gpuva_op}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j)}jjsbc.drm_gpuva_opsasbj3 drm_gpuva_opuh1hhj?hKhj0ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj-hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjnjjnjjjuh1j2hhhj17hNhNubj)}(h}**Definition**:: struct drm_gpuva_ops { struct list_head list; }; **Members** ``list`` the :c:type:`list_head`h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh:}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjrubjT)}(h4struct drm_gpuva_ops { struct list_head list; };h]h4struct drm_gpuva_ops { struct list_head list; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjrubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjrubj)}(hhh]j)}(h ``list`` the :c:type:`list_head`h](j)}(h``list``h]j)}(hjÉh]hlist}(hjʼnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh]h)}(hthe :c:type:`list_head`h](hthe }(hj܉hhhNhNubh)}(h:c:type:`list_head`h]j)}(hjh]h list_head}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj܉ubeh}(h]h ]h"]h$]h&]uh1hhjhMhjىubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj؉hMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_for_each_op (C macro)c.drm_gpuva_for_each_ophNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_for_each_oph]j>)}(hdrm_gpuva_for_each_oph]jg)}(hdrm_gpuva_for_each_oph]jm)}(hj6h]hdrm_gpuva_for_each_op}(hj@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj8hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj4hhhjShMubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1j7hjShMhj1hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj1hhhjShMubeh}(h]h ](jmacroeh"]h$]h&]jjjjljjljjjuh1j2hhhj17hNhNubh)}(h#``drm_gpuva_for_each_op (op, ops)``h]j)}(hjrh]hdrm_gpuva_for_each_op (op, ops)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h.iterator to walk over :c:type:`drm_gpuva_ops` h]h)}(h-iterator to walk over :c:type:`drm_gpuva_ops`h](hiterator to walk over }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j?-hjhMhj17hhubj)}(h**Parameters** ``op`` :c:type:`drm_gpuva_op` to assign in each iteration step ``ops`` :c:type:`drm_gpuva_ops` to walk **Description** This iterator walks over all ops within a given list of operations.h](h)}(h**Parameters**h]j)}(hjƊh]h Parameters}(hjȊhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĊubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj)}(hhh](j)}(h?``op`` :c:type:`drm_gpuva_op` to assign in each iteration step h](j)}(h``op``h]j)}(hjh]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjߊubj )}(hhh]h)}(h7:c:type:`drm_gpuva_op` to assign in each iteration steph](h)}(h:c:type:`drm_gpuva_op`h]j)}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhjhMhjubh! to assign in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjߊubeh}(h]h ]h"]h$]h&]uh1jhjhMhj܊ubj)}(h(``ops`` :c:type:`drm_gpuva_ops` to walk h](j)}(h``ops``h]j)}(hj=h]hops}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj7ubj )}(hhh]h)}(h:c:type:`drm_gpuva_ops` to walkh](h)}(h:c:type:`drm_gpuva_ops`h]j)}(hj\h]h drm_gpuva_ops}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhjRhMhjVubh to walk}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj܊ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubh)}(hCThis iterator walks over all ops within a given list of operations.h]hCThis iterator walks over all ops within a given list of operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_gpuva_for_each_op_safe (C macro)c.drm_gpuva_for_each_op_safehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_for_each_op_safeh]j>)}(hdrm_gpuva_for_each_op_safeh]jg)}(hdrm_gpuva_for_each_op_safeh]jm)}(hj֋h]hdrm_gpuva_for_each_op_safe}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj܋ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj؋hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjԋhhhjhMubah}(h]jϋah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjыhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjыhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1j2hhhj17hNhNubh)}(h.``drm_gpuva_for_each_op_safe (op, next, ops)``h]j)}(hjh]h*drm_gpuva_for_each_op_safe (op, next, ops)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h5iterator to safely walk over :c:type:`drm_gpuva_ops` h]h)}(h4iterator to safely walk over :c:type:`drm_gpuva_ops`h](hiterator to safely walk over }(hj,hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj6h]h drm_gpuva_ops}(hj8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj,ubeh}(h]h ]h"]h$]h&]uh1hhjShMhj(ubah}(h]h ]h"]h$]h&]uh1j?-hjShMhj17hhubj)}(hXl**Parameters** ``op`` :c:type:`drm_gpuva_op` to assign in each iteration step ``next`` :c:type:`next` :c:type:`drm_gpuva_op` to store the next step ``ops`` :c:type:`drm_gpuva_ops` to walk **Description** This iterator walks over all ops within a given list of operations. It is implemented with list_for_each_safe(), so save against removal of elements.h](h)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj`ubj)}(hhh](j)}(h?``op`` :c:type:`drm_gpuva_op` to assign in each iteration step h](j)}(h``op``h]j)}(hjh]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh]h)}(h7:c:type:`drm_gpuva_op` to assign in each iteration steph](h)}(h:c:type:`drm_gpuva_op`h]j)}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhjhMhjubh! to assign in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(hF``next`` :c:type:`next` :c:type:`drm_gpuva_op` to store the next step h](j)}(h``next``h]j)}(hj݌h]hnext}(hjߌhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjیubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj׌ubj )}(hhh]h)}(h<:c:type:`next` :c:type:`drm_gpuva_op` to store the next steph](h)}(h:c:type:`next`h]j)}(hjh]hnext}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3nextuh1hhjhMhjubh }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjh]h drm_gpuva_op}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhjhMhjubh to store the next step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj׌ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(h(``ops`` :c:type:`drm_gpuva_ops` to walk h](j)}(h``ops``h]j)}(hjXh]hops}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjRubj )}(hhh]h)}(h:c:type:`drm_gpuva_ops` to walkh](h)}(h:c:type:`drm_gpuva_ops`h]j)}(hjwh]h drm_gpuva_ops}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhjmhMhjqubh to walk}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj`ubh)}(hThis iterator walks over all ops within a given list of operations. It is implemented with list_for_each_safe(), so save against removal of elements.h]hThis iterator walks over all ops within a given list of operations. It is implemented with list_for_each_safe(), so save against removal of elements.}(hjȍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.,drm_gpuva_for_each_op_from_reverse (C macro)$c.drm_gpuva_for_each_op_from_reversehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h"drm_gpuva_for_each_op_from_reverseh]j>)}(h"drm_gpuva_for_each_op_from_reverseh]jg)}(h"drm_gpuva_for_each_op_from_reverseh]jm)}(hjh]h"drm_gpuva_for_each_op_from_reverse}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj'jj'jjjuh1j2hhhj17hNhNubh)}(h0``drm_gpuva_for_each_op_from_reverse (op, ops)``h]j)}(hj-h]h,drm_gpuva_for_each_op_from_reverse (op, ops)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h'iterate backwards from the given point h]h)}(h&iterate backwards from the given pointh]h&iterate backwards from the given point}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjCubah}(h]h ]h"]h$]h&]uh1j?-hjUhMhj17hhubj)}(hX**Parameters** ``op`` :c:type:`drm_gpuva_op` to assign in each iteration step ``ops`` :c:type:`drm_gpuva_ops` to walk **Description** This iterator walks over all ops within a given list of operations beginning from the given operation in reverse order.h](h)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj\ubj)}(hhh](j)}(h?``op`` :c:type:`drm_gpuva_op` to assign in each iteration step h](j)}(h``op``h]j)}(hjh]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj{ubj )}(hhh]h)}(h7:c:type:`drm_gpuva_op` to assign in each iteration steph](h)}(h:c:type:`drm_gpuva_op`h]j)}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhjhMhjubh! to assign in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubj)}(h(``ops`` :c:type:`drm_gpuva_ops` to walk h](j)}(h``ops``h]j)}(hjَh]hops}(hjێhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׎ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjӎubj )}(hhh]h)}(h:c:type:`drm_gpuva_ops` to walkh](h)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhjhMhjubh to walk}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjӎubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubh)}(h**Description**h]j)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj\ubh)}(hwThis iterator walks over all ops within a given list of operations beginning from the given operation in reverse order.h]hwThis iterator walks over all ops within a given list of operations beginning from the given operation in reverse order.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_gpuva_for_each_op_reverse (C macro)c.drm_gpuva_for_each_op_reversehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_for_each_op_reverseh]j>)}(hdrm_gpuva_for_each_op_reverseh]jg)}(hdrm_gpuva_for_each_op_reverseh]jm)}(hjrh]hdrm_gpuva_for_each_op_reverse}(hj|hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjthhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjphhhjhMubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjmhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjmhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubh)}(h+``drm_gpuva_for_each_op_reverse (op, ops)``h]j)}(hjh]h'drm_gpuva_for_each_op_reverse (op, ops)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hj17hhubj@-)}(h9iterator to walk over :c:type:`drm_gpuva_ops` in reverse h]h)}(h8iterator to walk over :c:type:`drm_gpuva_ops` in reverseh](hiterator to walk over }(hjȏhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjҏh]h drm_gpuva_ops}(hjԏhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjЏubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjȏubh in reverse}(hjȏhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjďubah}(h]h ]h"]h$]h&]uh1j?-hjhMhj17hhubj)}(h**Parameters** ``op`` :c:type:`drm_gpuva_op` to assign in each iteration step ``ops`` :c:type:`drm_gpuva_ops` to walk **Description** This iterator walks over all ops within a given list of operations in reverseh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj)}(hhh](j)}(h?``op`` :c:type:`drm_gpuva_op` to assign in each iteration step h](j)}(h``op``h]j)}(hj%h]hop}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh]h)}(h7:c:type:`drm_gpuva_op` to assign in each iteration steph](h)}(h:c:type:`drm_gpuva_op`h]j)}(hjDh]h drm_gpuva_op}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhj:hMhj>ubh! to assign in each iteration step}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h(``ops`` :c:type:`drm_gpuva_ops` to walk h](j)}(h``ops``h]j)}(hj}h]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjwubj )}(hhh]h)}(h:c:type:`drm_gpuva_ops` to walkh](h)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhjhMhjubh to walk}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjאh]h Description}(hjِhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՐubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubh)}(hMThis iterator walks over all ops within a given list of operations in reverseh]hMThis iterator walks over all ops within a given list of operations in reverse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_first_op (C macro)c.drm_gpuva_first_ophNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_first_oph]j>)}(hdrm_gpuva_first_oph]jg)}(hdrm_gpuva_first_oph]jm)}(hjh]hdrm_gpuva_first_op}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj3hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj3hMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj3hMubeh}(h]h ](jmacroeh"]h$]h&]jjjjLjjLjjjuh1j2hhhj17hNhNubh)}(h``drm_gpuva_first_op (ops)``h]j)}(hjRh]hdrm_gpuva_first_op (ops)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(hFreturns the first :c:type:`drm_gpuva_op` from :c:type:`drm_gpuva_ops` h]h)}(hEreturns the first :c:type:`drm_gpuva_op` from :c:type:`drm_gpuva_ops`h](hreturns the first }(hjlhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjvh]h drm_gpuva_op}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjlubh from }(hjlhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhjhM hjlubeh}(h]h ]h"]h$]h&]uh1hhjhM hjhubah}(h]h ]h"]h$]h&]uh1j?-hjhM hj17hhubj)}(ha**Parameters** ``ops`` the :c:type:`drm_gpuva_ops` to get the fist :c:type:`drm_gpuva_op` fromh](h)}(h**Parameters**h]j)}(hjɑh]h Parameters}(hjˑhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǑubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjÑubj)}(hhh]j)}(hO``ops`` the :c:type:`drm_gpuva_ops` to get the fist :c:type:`drm_gpuva_op` fromh](j)}(h``ops``h]j)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh]h)}(hGthe :c:type:`drm_gpuva_ops` to get the fist :c:type:`drm_gpuva_op` fromh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj h]h drm_gpuva_ops}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjubh to get the fist }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hj/h]h drm_gpuva_op}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhj(hM hjubh from}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjߑubah}(h]h ]h"]h$]h&]uh1jhjÑubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_last_op (C macro)c.drm_gpuva_last_ophNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_last_oph]j>)}(hdrm_gpuva_last_oph]jg)}(hdrm_gpuva_last_oph]jm)}(hjh]hdrm_gpuva_last_op}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhj}hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj}hhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubh)}(h``drm_gpuva_last_op (ops)``h]j)}(hjh]hdrm_gpuva_last_op (ops)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(hEreturns the last :c:type:`drm_gpuva_op` from :c:type:`drm_gpuva_ops` h]h)}(hDreturns the last :c:type:`drm_gpuva_op` from :c:type:`drm_gpuva_ops`h](hreturns the last }(hjؒhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjؒubh from }(hjؒhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhjhMhjؒubeh}(h]h ]h"]h$]h&]uh1hhjhMhjԒubah}(h]h ]h"]h$]h&]uh1j?-hjhMhj17hhubj)}(ha**Parameters** ``ops`` the :c:type:`drm_gpuva_ops` to get the last :c:type:`drm_gpuva_op` fromh](h)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj/ubj)}(hhh]j)}(hO``ops`` the :c:type:`drm_gpuva_ops` to get the last :c:type:`drm_gpuva_op` fromh](j)}(h``ops``h]j)}(hjTh]hops}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjNubj )}(hhh]h)}(hGthe :c:type:`drm_gpuva_ops` to get the last :c:type:`drm_gpuva_op` fromh](hthe }(hjmhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjwh]h drm_gpuva_ops}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjmubh to get the last }(hjmhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhjhMhjmubh from}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjjubah}(h]h ]h"]h$]h&]uh1j hjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_prev_op (C macro)c.drm_gpuva_prev_ophNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_prev_oph]j>)}(hdrm_gpuva_prev_oph]jg)}(hdrm_gpuva_prev_oph]jm)}(hjh]hdrm_gpuva_prev_op}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj hMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj$jj$jjjuh1j2hhhj17hNhNubh)}(h``drm_gpuva_prev_op (op)``h]j)}(hj*h]hdrm_gpuva_prev_op (op)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubj@-)}(h,previous :c:type:`drm_gpuva_op` in the list h]h)}(h+previous :c:type:`drm_gpuva_op` in the listh](h previous }(hjDhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjNh]h drm_gpuva_op}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjDubh in the list}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhMhj@ubah}(h]h ]h"]h$]h&]uh1j?-hjkhMhj17hhubj)}(h;**Parameters** ``op`` the current :c:type:`drm_gpuva_op`h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj|ubj)}(hhh]j)}(h)``op`` the current :c:type:`drm_gpuva_op`h](j)}(h``op``h]j)}(hjh]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjubj )}(hhh]h)}(h"the current :c:type:`drm_gpuva_op`h](h the current }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjĔh]h drm_gpuva_op}(hjƔhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj”ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_next_op (C macro)c.drm_gpuva_next_ophNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdrm_gpuva_next_oph]j>)}(hdrm_gpuva_next_oph]jg)}(hdrm_gpuva_next_oph]jm)}(hjh]hdrm_gpuva_next_op}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM#ubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj1hM#ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj1hM#hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj1hM#ubeh}(h]h ](jmacroeh"]h$]h&]jjjjJjjJjjjuh1j2hhhj17hNhNubh)}(h``drm_gpuva_next_op (op)``h]j)}(hjPh]hdrm_gpuva_next_op (op)}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM%hj17hhubj@-)}(h(next :c:type:`drm_gpuva_op` in the list h]h)}(h'next :c:type:`drm_gpuva_op` in the listh](hnext }(hjjhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjth]h drm_gpuva_op}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM hjjubh in the list}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjfubah}(h]h ]h"]h$]h&]uh1j?-hjhM hj17hhubj)}(h;**Parameters** ``op`` the current :c:type:`drm_gpuva_op`h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM$hjubj)}(hhh]j)}(h)``op`` the current :c:type:`drm_gpuva_op`h](j)}(h``op``h]j)}(hjǕh]hop}(hjɕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŕubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM&hjubj )}(hhh]h)}(h"the current :c:type:`drm_gpuva_op`h](h the current }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM!hjubeh}(h]h ]h"]h$]h&]uh1hhjhM!hjݕubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjܕhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_ops (C struct)c.drm_gpuvm_opshNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h drm_gpuvm_opsh]j>)}(hstruct drm_gpuvm_opsh](jD)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj<hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM&ubjV)}(h h]h }(hjNhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<hhhjMhM&ubjg)}(h drm_gpuvm_opsh]jm)}(hj:h]h drm_gpuvm_ops}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj<hhhjMhM&ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj8hhhjMhM&ubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1j7hjMhM&hj5hhubj)}(hhh]h)}(hcallbacks for split/merge stepsh]hcallbacks for split/merge steps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM?hjhhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjMhM&ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX9**Definition**:: struct drm_gpuvm_ops { void (*vm_free)(struct drm_gpuvm *gpuvm); struct drm_gpuva_op *(*op_alloc)(void); void (*op_free)(struct drm_gpuva_op *op); struct drm_gpuvm_bo *(*vm_bo_alloc)(void); void (*vm_bo_free)(struct drm_gpuvm_bo *vm_bo); int (*vm_bo_validate)(struct drm_gpuvm_bo *vm_bo, struct drm_exec *exec); int (*sm_step_map)(struct drm_gpuva_op *op, void *priv); int (*sm_step_remap)(struct drm_gpuva_op *op, void *priv); int (*sm_step_unmap)(struct drm_gpuva_op *op, void *priv); }; **Members** ``vm_free`` called when the last reference of a struct drm_gpuvm is dropped This callback is mandatory. ``op_alloc`` called when the :c:type:`drm_gpuvm` allocates a struct drm_gpuva_op Some drivers may want to embed struct drm_gpuva_op into driver specific structures. By implementing this callback drivers can allocate memory accordingly. This callback is optional. ``op_free`` called when the :c:type:`drm_gpuvm` frees a struct drm_gpuva_op Some drivers may want to embed struct drm_gpuva_op into driver specific structures. By implementing this callback drivers can free the previously allocated memory accordingly. This callback is optional. ``vm_bo_alloc`` called when the :c:type:`drm_gpuvm` allocates a struct drm_gpuvm_bo Some drivers may want to embed struct drm_gpuvm_bo into driver specific structures. By implementing this callback drivers can allocate memory accordingly. This callback is optional. ``vm_bo_free`` called when the :c:type:`drm_gpuvm` frees a struct drm_gpuvm_bo Some drivers may want to embed struct drm_gpuvm_bo into driver specific structures. By implementing this callback drivers can free the previously allocated memory accordingly. This callback is optional. ``vm_bo_validate`` called from drm_gpuvm_validate() Drivers receive this callback for every evicted :c:type:`drm_gem_object` being mapped in the corresponding :c:type:`drm_gpuvm`. Typically, drivers would call their driver specific variant of ttm_bo_validate() from within this callback. ``sm_step_map`` called from :c:type:`drm_gpuvm_sm_map` to finally insert the mapping once all previous steps were completed The :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively. Can be NULL if :c:type:`drm_gpuvm_sm_map` is used. ``sm_step_remap`` called from :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to split up an existent mapping This callback is called when existent mapping needs to be split up. This is the case when either a newly requested mapping overlaps or is enclosed by an existent mapping or a partial unmap of an existent mapping is requested. The :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively. Can be NULL if neither :c:type:`drm_gpuvm_sm_map` nor :c:type:`drm_gpuvm_sm_unmap` is used. ``sm_step_unmap`` called from :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to unmap an existent mapping This callback is called when existent mapping needs to be unmapped. This is the case when either a newly requested mapping encloses an existent mapping or an unmap of an existent mapping is requested. The :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively. Can be NULL if neither :c:type:`drm_gpuvm_sm_map` nor :c:type:`drm_gpuvm_sm_unmap` is used.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMChjubjT)}(hX struct drm_gpuvm_ops { void (*vm_free)(struct drm_gpuvm *gpuvm); struct drm_gpuva_op *(*op_alloc)(void); void (*op_free)(struct drm_gpuva_op *op); struct drm_gpuvm_bo *(*vm_bo_alloc)(void); void (*vm_bo_free)(struct drm_gpuvm_bo *vm_bo); int (*vm_bo_validate)(struct drm_gpuvm_bo *vm_bo, struct drm_exec *exec); int (*sm_step_map)(struct drm_gpuva_op *op, void *priv); int (*sm_step_remap)(struct drm_gpuva_op *op, void *priv); int (*sm_step_unmap)(struct drm_gpuva_op *op, void *priv); };h]hX struct drm_gpuvm_ops { void (*vm_free)(struct drm_gpuvm *gpuvm); struct drm_gpuva_op *(*op_alloc)(void); void (*op_free)(struct drm_gpuva_op *op); struct drm_gpuvm_bo *(*vm_bo_alloc)(void); void (*vm_bo_free)(struct drm_gpuvm_bo *vm_bo); int (*vm_bo_validate)(struct drm_gpuvm_bo *vm_bo, struct drm_exec *exec); int (*sm_step_map)(struct drm_gpuva_op *op, void *priv); int (*sm_step_remap)(struct drm_gpuva_op *op, void *priv); int (*sm_step_unmap)(struct drm_gpuva_op *op, void *priv); };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMEhjubh)}(h **Members**h]j)}(hjЖh]hMembers}(hjҖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΖubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMQhjubj)}(hhh](j)}(hi``vm_free`` called when the last reference of a struct drm_gpuvm is dropped This callback is mandatory. h](j)}(h ``vm_free``h]j)}(hjh]hvm_free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMKhjubj )}(hhh](h)}(h?called when the last reference of a struct drm_gpuvm is droppedh]h?called when the last reference of a struct drm_gpuvm is dropped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMHhjubh)}(hThis callback is mandatory.h]hThis callback is mandatory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMKhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubj)}(hX ``op_alloc`` called when the :c:type:`drm_gpuvm` allocates a struct drm_gpuva_op Some drivers may want to embed struct drm_gpuva_op into driver specific structures. By implementing this callback drivers can allocate memory accordingly. This callback is optional. h](j)}(h ``op_alloc``h]j)}(hj7h]hop_alloc}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMWhj1ubj )}(hhh](h)}(hCcalled when the :c:type:`drm_gpuvm` allocates a struct drm_gpuva_oph](hcalled when the }(hjPhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjZh]h drm_gpuvm}(hj\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMPhjPubh allocates a struct drm_gpuva_op}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhMPhjMubh)}(hSome drivers may want to embed struct drm_gpuva_op into driver specific structures. By implementing this callback drivers can allocate memory accordingly.h]hSome drivers may want to embed struct drm_gpuva_op into driver specific structures. By implementing this callback drivers can allocate memory accordingly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMShjMubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMWhjMubeh}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMWhjubj)}(hX``op_free`` called when the :c:type:`drm_gpuvm` frees a struct drm_gpuva_op Some drivers may want to embed struct drm_gpuva_op into driver specific structures. By implementing this callback drivers can free the previously allocated memory accordingly. This callback is optional. h](j)}(h ``op_free``h]j)}(hjh]hop_free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMchjubj )}(hhh](h)}(h?called when the :c:type:`drm_gpuvm` frees a struct drm_gpuva_oph](hcalled when the }(hjʗhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjԗh]h drm_gpuvm}(hj֗hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjҗubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM\hjʗubh frees a struct drm_gpuva_op}(hjʗhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM\hjǗubh)}(hSome drivers may want to embed struct drm_gpuva_op into driver specific structures. By implementing this callback drivers can free the previously allocated memory accordingly.h]hSome drivers may want to embed struct drm_gpuva_op into driver specific structures. By implementing this callback drivers can free the previously allocated memory accordingly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM_hjǗubh)}(hThis callback is optional.h]hThis callback is optional.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƗhMchjǗubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjƗhMchjubj)}(hX ``vm_bo_alloc`` called when the :c:type:`drm_gpuvm` allocates a struct drm_gpuvm_bo Some drivers may want to embed struct drm_gpuvm_bo into driver specific structures. By implementing this callback drivers can allocate memory accordingly. This callback is optional. h](j)}(h``vm_bo_alloc``h]j)}(hj+h]h vm_bo_alloc}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMohj%ubj )}(hhh](h)}(hCcalled when the :c:type:`drm_gpuvm` allocates a struct drm_gpuvm_boh](hcalled when the }(hjDhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjNh]h drm_gpuvm}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhhjDubh allocates a struct drm_gpuvm_bo}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhMhhjAubh)}(hSome drivers may want to embed struct drm_gpuvm_bo into driver specific structures. By implementing this callback drivers can allocate memory accordingly.h]hSome drivers may want to embed struct drm_gpuvm_bo into driver specific structures. By implementing this callback drivers can allocate memory accordingly.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMkhjAubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMohjAubeh}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMohjubj)}(hX``vm_bo_free`` called when the :c:type:`drm_gpuvm` frees a struct drm_gpuvm_bo Some drivers may want to embed struct drm_gpuvm_bo into driver specific structures. By implementing this callback drivers can free the previously allocated memory accordingly. This callback is optional. h](j)}(h``vm_bo_free``h]j)}(hjh]h vm_bo_free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM{hjubj )}(hhh](h)}(h?called when the :c:type:`drm_gpuvm` frees a struct drm_gpuvm_boh](hcalled when the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjȘh]h drm_gpuvm}(hjʘhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjƘubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMthjubh frees a struct drm_gpuvm_bo}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMthjubh)}(hSome drivers may want to embed struct drm_gpuvm_bo into driver specific structures. By implementing this callback drivers can free the previously allocated memory accordingly.h]hSome drivers may want to embed struct drm_gpuvm_bo into driver specific structures. By implementing this callback drivers can free the previously allocated memory accordingly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMwhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubj)}(hX"``vm_bo_validate`` called from drm_gpuvm_validate() Drivers receive this callback for every evicted :c:type:`drm_gem_object` being mapped in the corresponding :c:type:`drm_gpuvm`. Typically, drivers would call their driver specific variant of ttm_bo_validate() from within this callback. h](j)}(h``vm_bo_validate``h]j)}(hjh]hvm_bo_validate}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh](h)}(h called from drm_gpuvm_validate()h]h called from drm_gpuvm_validate()}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj5ubh)}(hDrivers receive this callback for every evicted :c:type:`drm_gem_object` being mapped in the corresponding :c:type:`drm_gpuvm`.h](h0Drivers receive this callback for every evicted }(hjGhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjQh]hdrm_gem_object}(hjShhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjGubh# being mapped in the corresponding }(hjGhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjuh]h drm_gpuvm}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjnhMhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhj5ubh)}(hkTypically, drivers would call their driver specific variant of ttm_bo_validate() from within this callback.h]hkTypically, drivers would call their driver specific variant of ttm_bo_validate() from within this callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj5ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(hX;``sm_step_map`` called from :c:type:`drm_gpuvm_sm_map` to finally insert the mapping once all previous steps were completed The :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively. Can be NULL if :c:type:`drm_gpuvm_sm_map` is used. h](j)}(h``sm_step_map``h]j)}(hjh]h sm_step_map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh](h)}(hkcalled from :c:type:`drm_gpuvm_sm_map` to finally insert the mapping once all previous steps were completedh](h called from }(hj֙hhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjޙubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj֙ubhE to finally insert the mapping once all previous steps were completed}(hj֙hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjәubh)}(hThe :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively.h](hThe }(hjhhhNhNubh)}(h:c:type:`priv`h]j)}(hjh]hpriv}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3privuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubh. pointer matches the one the driver passed to }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hj6h]hdrm_gpuvm_sm_map}(hj8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhj/hMhjubh or }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjYh]hdrm_gpuvm_sm_unmap}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhj/hMhjubh, respectively.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hMhjәubh)}(h2Can be NULL if :c:type:`drm_gpuvm_sm_map` is used.h](hCan be NULL if }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhjҙhMhjubh is used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjҙhMhjәubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjҙhMhjubj)}(hXE``sm_step_remap`` called from :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to split up an existent mapping This callback is called when existent mapping needs to be split up. This is the case when either a newly requested mapping overlaps or is enclosed by an existent mapping or a partial unmap of an existent mapping is requested. The :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively. Can be NULL if neither :c:type:`drm_gpuvm_sm_map` nor :c:type:`drm_gpuvm_sm_unmap` is used. h](j)}(h``sm_step_remap``h]j)}(hjÚh]h sm_step_remap}(hjŚhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh](h)}(hgcalled from :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to split up an existent mappingh](h called from }(hjܚhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjܚubh and }(hjܚhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hj h]hdrm_gpuvm_sm_unmap}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhjhMhjܚubh to split up an existent mapping}(hjܚhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjٚubh)}(hThis callback is called when existent mapping needs to be split up. This is the case when either a newly requested mapping overlaps or is enclosed by an existent mapping or a partial unmap of an existent mapping is requested.h]hThis callback is called when existent mapping needs to be split up. This is the case when either a newly requested mapping overlaps or is enclosed by an existent mapping or a partial unmap of an existent mapping is requested.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjٚubh)}(hThe :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively.h](hThe }(hj@hhhNhNubh)}(h:c:type:`priv`h]j)}(hjJh]hpriv}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3privuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj@ubh. pointer matches the one the driver passed to }(hj@hhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjnh]hdrm_gpuvm_sm_map}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhjghMhj@ubh or }(hj@hhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhjghMhj@ubh, respectively.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjghMhjٚubh)}(h[Can be NULL if neither :c:type:`drm_gpuvm_sm_map` nor :c:type:`drm_gpuvm_sm_unmap` is used.h](hCan be NULL if neither }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hj›h]hdrm_gpuvm_sm_map}(hjěhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubh nor }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhjߛhMhjubh is used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjߛhMhjٚubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjؚhMhjubj)}(hX(``sm_step_unmap`` called from :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to unmap an existent mapping This callback is called when existent mapping needs to be unmapped. This is the case when either a newly requested mapping encloses an existent mapping or an unmap of an existent mapping is requested. The :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively. Can be NULL if neither :c:type:`drm_gpuvm_sm_map` nor :c:type:`drm_gpuvm_sm_unmap` is used.h](j)}(h``sm_step_unmap``h]j)}(hjh]h sm_step_unmap}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh](h)}(hdcalled from :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to unmap an existent mappingh](h called from }(hj8hhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjBh]hdrm_gpuvm_sm_map}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj8ubh and }(hj8hhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjfh]hdrm_gpuvm_sm_unmap}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhj_hMhj8ubh to unmap an existent mapping}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_hMhj5ubh)}(hThis callback is called when existent mapping needs to be unmapped. This is the case when either a newly requested mapping encloses an existent mapping or an unmap of an existent mapping is requested.h]hThis callback is called when existent mapping needs to be unmapped. This is the case when either a newly requested mapping encloses an existent mapping or an unmap of an existent mapping is requested.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj5ubh)}(hThe :c:type:`priv` pointer matches the one the driver passed to :c:type:`drm_gpuvm_sm_map` or :c:type:`drm_gpuvm_sm_unmap`, respectively.h](hThe }(hjhhhNhNubh)}(h:c:type:`priv`h]j)}(hjh]hpriv}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3privuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubh. pointer matches the one the driver passed to }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjʜh]hdrm_gpuvm_sm_map}(hj̜hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjȜubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhjÜhMhjubh or }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhjÜhMhjubh, respectively.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjÜhMhj5ubh)}(h[Can be NULL if neither :c:type:`drm_gpuvm_sm_map` nor :c:type:`drm_gpuvm_sm_unmap` is used.h](hCan be NULL if neither }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjh]hdrm_gpuvm_sm_map}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhj4hMhjubh nor }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjAh]hdrm_gpuvm_sm_unmap}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhj4hMhjubh is used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj17hhubh)}(hThis structure defines the callbacks used by :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to provide the split/merge steps for map and unmap operations to drivers.h](h-This structure defines the callbacks used by }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhM@hjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjǝh]hdrm_gpuvm_sm_unmap}(hjɝhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjŝubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhjhM@hjubhJ to provide the split/merge steps for map and unmap operations to drivers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM@hj17hhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j..drm_gpuva_op_remap_to_unmap_range (C function)#c.drm_gpuva_op_remap_to_unmap_rangehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hivoid drm_gpuva_op_remap_to_unmap_range (const struct drm_gpuva_op_remap *op, u64 *start_addr, u64 *range)h]j>)}(hhvoid drm_gpuva_op_remap_to_unmap_range(const struct drm_gpuva_op_remap *op, u64 *start_addr, u64 *range)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(h!drm_gpuva_op_remap_to_unmap_rangeh]jm)}(h!drm_gpuva_op_remap_to_unmap_rangeh]h!drm_gpuva_op_remap_to_unmap_range}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hB(const struct drm_gpuva_op_remap *op, u64 *start_addr, u64 *range)h](j)}(h#const struct drm_gpuva_op_remap *oph](jD)}(hj&h]hconst}(hjDhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj@ubjV)}(h h]h }(hjQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubjD)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj@ubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubh)}(hhh]jm)}(hdrm_gpuva_op_remaph]hdrm_gpuva_op_remap}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj*sb#c.drm_gpuva_op_remap_to_unmap_rangeasbuh1hhj@ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjm)}(hoph]hop}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hu64 *start_addrh](h)}(hhh]jm)}(hu64h]hu64}(hjԞhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjўubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj֞modnameN classnameNjj)}j]j#c.drm_gpuva_op_remap_to_unmap_rangeasbuh1hhj͞ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj͞ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͞ubjm)}(h start_addrh]h start_addr}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj͞ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(h u64 *rangeh](h)}(hhh]jm)}(hu64h]hu64}(hj)hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j#c.drm_gpuva_op_remap_to_unmap_rangeasbuh1hhj"ubjV)}(h h]h }(hjGhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj"ubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjm)}(hrangeh]hrange}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hCHelper to get the start and range of the unmap stage of a remap op.h]hCHelper to get the start and range of the unmap stage of a remap op.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``const struct drm_gpuva_op_remap *op`` Remap op. ``u64 *start_addr`` Output pointer for the start of the required unmap. ``u64 *range`` Output pointer for the length of the required unmap. **Description** The given start address and range will be set such that they represent the range of the address space that was previously covered by the mapping being re-mapped, but is now empty.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj)}(hhh](j)}(h2``const struct drm_gpuva_op_remap *op`` Remap op. h](j)}(h'``const struct drm_gpuva_op_remap *op``h]j)}(hj͟h]h#const struct drm_gpuva_op_remap *op}(hjϟhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˟ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjǟubj )}(hhh]h)}(h Remap op.h]h Remap op.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjǟubeh}(h]h ]h"]h$]h&]uh1jhjhMhjğubj)}(hH``u64 *start_addr`` Output pointer for the start of the required unmap. h](j)}(h``u64 *start_addr``h]j)}(hjh]hu64 *start_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubj )}(hhh]h)}(h3Output pointer for the start of the required unmap.h]h3Output pointer for the start of the required unmap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjğubj)}(hD``u64 *range`` Output pointer for the length of the required unmap. h](j)}(h``u64 *range``h]j)}(hj?h]h u64 *range}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhj9ubj )}(hhh]h)}(h4Output pointer for the length of the required unmap.h]h4Output pointer for the length of the required unmap.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhjğubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubh)}(hThe given start address and range will be set such that they represent the range of the address space that was previously covered by the mapping being re-mapped, but is now empty.h]hThe given start address and range will be set such that they represent the range of the address space that was previously covered by the mapping being re-mapped, but is now empty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:503: ./include/drm/drm_gpuvm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_gpuvm_range_valid (C function)c.drm_gpuvm_range_validhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hIbool drm_gpuvm_range_valid (struct drm_gpuvm *gpuvm, u64 addr, u64 range)h]j>)}(hHbool drm_gpuvm_range_valid(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hj͠hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj̠hMubjg)}(hdrm_gpuvm_range_validh]jm)}(hdrm_gpuvm_range_validh]hdrm_gpuvm_range_valid}(hjߠhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj۠ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj̠hMubj)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_range_validasbuh1hhjubjV)}(h h]h }(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 addrh](h)}(hhh]jm)}(hu64h]hu64}(hjphhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j5c.drm_gpuvm_range_validasbuh1hhjiubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjiubjm)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 rangeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.drm_gpuvm_range_validasbuh1hhjubjV)}(h h]h }(hj֡hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj̠hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj̠hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj̠hMhjhhubj)}(hhh]h)}(hIchecks whether the given range is valid for the given :c:type:`drm_gpuvm`h](h6checks whether the given range is valid for the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j5c.drm_gpuvm_range_validasbj3 drm_gpuvmuh1hhj̠hMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj̠hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1j2hhhj17hNhNubj)}(hX3**Parameters** ``struct drm_gpuvm *gpuvm`` the GPUVM to check the range for ``u64 addr`` the base address ``u64 range`` the range starting from the base address **Description** Checks whether the range is within the GPUVM's managed boundaries. **Return** true for a valid range, false otherwiseh](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjNubj)}(hhh](j)}(h=``struct drm_gpuvm *gpuvm`` the GPUVM to check the range for h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjsh]hstruct drm_gpuvm *gpuvm}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjmubj )}(hhh]h)}(h the GPUVM to check the range forh]h the GPUVM to check the range for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(h``u64 addr`` the base address h](j)}(h ``u64 addr``h]j)}(hjh]hu64 addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hthe base addressh]hthe base address}(hjŢhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj¢ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(h7``u64 range`` the range starting from the base address h](j)}(h ``u64 range``h]j)}(hjh]h u64 range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjߢubj )}(hhh]h)}(h(the range starting from the base addressh]h(the range starting from the base address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjߢubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubh)}(h**Description**h]j)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjNubh)}(hBChecks whether the range is within the GPUVM's managed boundaries.h]hDChecks whether the range is within the GPUVM’s managed boundaries.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjNubh)}(h **Return**h]j)}(hjGh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjNubh)}(h'true for a valid range, false otherwiseh]h'true for a valid range, false otherwise}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_gpuvm_resv_object_alloc (C function)c.drm_gpuvm_resv_object_allochNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hLstruct drm_gem_object * drm_gpuvm_resv_object_alloc (struct drm_device *drm)h]j>)}(hJstruct drm_gem_object *drm_gpuvm_resv_object_alloc(struct drm_device *drm)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gpuvm_resv_object_allocsbc.drm_gpuvm_resv_object_allocasbuh1hhjhhhjhMubjV)}(h h]h }(hj̣hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubj)}(hjh]h*}(hjڣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjg)}(hdrm_gpuvm_resv_object_alloch]jm)}(hjɣh]hdrm_gpuvm_resv_object_alloc}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(struct drm_device *drm)h]j)}(hstruct drm_device *drmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]jǣc.drm_gpuvm_resv_object_allocasbuh1hhjubjV)}(h h]h }(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdrmh]hdrm}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h)allocate a dummy :c:type:`drm_gem_object`h](hallocate a dummy }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jǣc.drm_gpuvm_resv_object_allocasbj3drm_gem_objectuh1hhj̠hMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjäjjäjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_device *drm`` the drivers :c:type:`drm_device` **Description** Allocates a dummy :c:type:`drm_gem_object` which can be passed to drm_gpuvm_init() in order to serve as root GEM object providing the :c:type:`drm_resv` shared across :c:type:`drm_gem_objects` local to a single GPUVM. **Return** the :c:type:`drm_gem_object` on success, NULL on failureh](h)}(h**Parameters**h]j)}(hjͤh]h Parameters}(hjϤhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˤubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjǤubj)}(hhh]j)}(h<``struct drm_device *drm`` the drivers :c:type:`drm_device` h](j)}(h``struct drm_device *drm``h]j)}(hjh]hstruct drm_device *drm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h the drivers :c:type:`drm_device`h](h the drivers }(hjhhhNhNubh)}(h:c:type:`drm_device`h]j)}(hjh]h drm_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǤubh)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjǤubh)}(hAllocates a dummy :c:type:`drm_gem_object` which can be passed to drm_gpuvm_init() in order to serve as root GEM object providing the :c:type:`drm_resv` shared across :c:type:`drm_gem_objects` local to a single GPUVM.h](hAllocates a dummy }(hj\hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjfh]hdrm_gem_object}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj\ubh\ which can be passed to drm_gpuvm_init() in order to serve as root GEM object providing the }(hj\hhhNhNubh)}(h:c:type:`drm_resv`h]j)}(hjh]hdrm_resv}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_resvuh1hhjhMhj\ubh shared across }(hj\hhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhjhMhj\ubh local to a single GPUVM.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjǤubh)}(h **Return**h]j)}(hj֥h]hReturn}(hjإhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԥubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjǤubh)}(h8the :c:type:`drm_gem_object` on success, NULL on failureh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh on success, NULL on failure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjǤubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_init (C function)c.drm_gpuvm_inithNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hvoid drm_gpuvm_init (struct drm_gpuvm *gpuvm, const char *name, enum drm_gpuvm_flags flags, struct drm_device *drm, struct drm_gem_object *r_obj, u64 start_offset, u64 range, u64 reserve_offset, u64 reserve_range, const struct drm_gpuvm_ops *ops)h]j>)}(hvoid drm_gpuvm_init(struct drm_gpuvm *gpuvm, const char *name, enum drm_gpuvm_flags flags, struct drm_device *drm, struct drm_gem_object *r_obj, u64 start_offset, u64 range, u64 reserve_offset, u64 reserve_range, const struct drm_gpuvm_ops *ops)h](jc)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj:hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj:hhhjLhMubjg)}(hdrm_gpuvm_inith]jm)}(hdrm_gpuvm_inith]hdrm_gpuvm_init}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj:hhhjLhMubj)}(h(struct drm_gpuvm *gpuvm, const char *name, enum drm_gpuvm_flags flags, struct drm_device *drm, struct drm_gem_object *r_obj, u64 start_offset, u64 range, u64 reserve_offset, u64 reserve_range, const struct drm_gpuvm_ops *ops)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjwubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjasbc.drm_gpuvm_initasbuh1hhjwubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwubj)}(hjh]h*}(hjǦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjm)}(hgpuvmh]hgpuvm}(hjԦhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hconst char *nameh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnameh]hname}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(henum drm_gpuvm_flags flagsh](jD)}(hjGh]henum}(hjJhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjFubjV)}(h h]h }(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjFubh)}(hhh]jm)}(hdrm_gpuvm_flagsh]hdrm_gpuvm_flags}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]jc.drm_gpuvm_initasbuh1hhjFubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjFubjm)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hstruct drm_device *drmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_deviceh]h drm_device}(hj˧hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjȧubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjͧmodnameN classnameNjj)}j]jc.drm_gpuvm_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hstruct drm_gem_object *r_objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]jc.drm_gpuvm_initasbuh1hhjubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hr_objh]hr_obj}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hu64 start_offseth](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h start_offseth]h start_offset}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h u64 rangeh](h)}(hhh]jm)}(hu64h]hu64}(hjبhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjըubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjڨmodnameN classnameNjj)}j]jc.drm_gpuvm_initasbuh1hhjѨubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjѨubjm)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjѨubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hu64 reserve_offseth](h)}(hhh]jm)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]jc.drm_gpuvm_initasbuh1hhjubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hreserve_offseth]hreserve_offset}(hjLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hu64 reserve_rangeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]jc.drm_gpuvm_initasbuh1hhjaubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjaubjm)}(h reserve_rangeh]h reserve_range}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hconst struct drm_gpuvm_ops *opsh](jD)}(hj&h]hconst}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjD)}(hjh]hstruct}(hjȩhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjթhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvm_opsh]h drm_gpuvm_ops}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hopsh]hops}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhj:hhhjLhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj6hhhjLhMubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1j7hjLhMhj3hhubj)}(hhh]h)}(h initialize a :c:type:`drm_gpuvm`h](h initialize a }(hjIhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjSh]h drm_gpuvm}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuvm_initasbj3 drm_gpuvmuh1hhj̠hMhjIubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jhj3hhhjLhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` pointer to the :c:type:`drm_gpuvm` to initialize ``const char *name`` the name of the GPU VA space ``enum drm_gpuvm_flags flags`` the :c:type:`drm_gpuvm_flags` for this GPUVM ``struct drm_device *drm`` the :c:type:`drm_device` this VM resides in ``struct drm_gem_object *r_obj`` the resv :c:type:`drm_gem_object` providing the GPUVM's common :c:type:`dma_resv` ``u64 start_offset`` the start offset of the GPU VA space ``u64 range`` the size of the GPU VA space ``u64 reserve_offset`` the start of the kernel reserved GPU VA area ``u64 reserve_range`` the size of the kernel reserved GPU VA area ``const struct drm_gpuvm_ops *ops`` :c:type:`drm_gpuvm_ops` called on :c:type:`drm_gpuvm_sm_map` / :c:type:`drm_gpuvm_sm_unmap` **Description** The :c:type:`drm_gpuvm` must be initialized with this function before use. Note that **gpuvm** must be cleared to 0 before calling this function. The given :c:type:`name` is expected to be managed by the surrounding driver structures.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(hM``struct drm_gpuvm *gpuvm`` pointer to the :c:type:`drm_gpuvm` to initialize h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h0pointer to the :c:type:`drm_gpuvm` to initializeh](hpointer to the }(hjǪhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjѪh]h drm_gpuvm}(hjӪhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjϪubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjêhMhjǪubh to initialize}(hjǪhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjêhMhjĪubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjêhMhjubj)}(h2``const char *name`` the name of the GPU VA space h](j)}(h``const char *name``h]j)}(hj h]hconst char *name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hthe name of the GPU VA spaceh]hthe name of the GPU VA space}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hL``enum drm_gpuvm_flags flags`` the :c:type:`drm_gpuvm_flags` for this GPUVM h](j)}(h``enum drm_gpuvm_flags flags``h]j)}(hjCh]henum drm_gpuvm_flags flags}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj=ubj )}(hhh]h)}(h,the :c:type:`drm_gpuvm_flags` for this GPUVMh](hthe }(hj\hhhNhNubh)}(h:c:type:`drm_gpuvm_flags`h]j)}(hjfh]hdrm_gpuvm_flags}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_flagsuh1hhjXhMhj\ubh for this GPUVM}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjubj)}(hG``struct drm_device *drm`` the :c:type:`drm_device` this VM resides in h](j)}(h``struct drm_device *drm``h]j)}(hjh]hstruct drm_device *drm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h+the :c:type:`drm_device` this VM resides inh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_device`h]j)}(hj«h]h drm_device}(hjīhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_deviceuh1hhjhMhjubh this VM resides in}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hs``struct drm_gem_object *r_obj`` the resv :c:type:`drm_gem_object` providing the GPUVM's common :c:type:`dma_resv` h](j)}(h ``struct drm_gem_object *r_obj``h]j)}(hjh]hstruct drm_gem_object *r_obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hQthe resv :c:type:`drm_gem_object` providing the GPUVM's common :c:type:`dma_resv`h](h the resv }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhMhjubh providing the GPUVM’s common }(hjhhhNhNubh)}(h:c:type:`dma_resv`h]j)}(hjAh]hdma_resv}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_resvuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``u64 start_offset`` the start offset of the GPU VA space h](j)}(h``u64 start_offset``h]j)}(hjvh]hu64 start_offset}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjpubj )}(hhh]h)}(h$the start offset of the GPU VA spaceh]h$the start offset of the GPU VA space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``u64 range`` the size of the GPU VA space h](j)}(h ``u64 range``h]j)}(hjh]h u64 range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hthe size of the GPU VA spaceh]hthe size of the GPU VA space}(hjȬhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĬhMhjŬubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjĬhMhjubj)}(hD``u64 reserve_offset`` the start of the kernel reserved GPU VA area h](j)}(h``u64 reserve_offset``h]j)}(hjh]hu64 reserve_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h,the start of the kernel reserved GPU VA areah]h,the start of the kernel reserved GPU VA area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hB``u64 reserve_range`` the size of the kernel reserved GPU VA area h](j)}(h``u64 reserve_range``h]j)}(hj!h]hu64 reserve_range}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h+the size of the kernel reserved GPU VA areah]h+the size of the kernel reserved GPU VA area}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubj)}(h``const struct drm_gpuvm_ops *ops`` :c:type:`drm_gpuvm_ops` called on :c:type:`drm_gpuvm_sm_map` / :c:type:`drm_gpuvm_sm_unmap` h](j)}(h#``const struct drm_gpuvm_ops *ops``h]j)}(hjZh]hconst struct drm_gpuvm_ops *ops}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjTubj )}(hhh]h)}(h[:c:type:`drm_gpuvm_ops` called on :c:type:`drm_gpuvm_sm_map` / :c:type:`drm_gpuvm_sm_unmap`h](h)}(h:c:type:`drm_gpuvm_ops`h]j)}(hjyh]h drm_gpuvm_ops}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhjohMhjsubh called on }(hjshhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhjohMhjsubh / }(hjshhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhjohMhjsubeh}(h]h ]h"]h$]h&]uh1hhjohMhjpubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hJThe :c:type:`drm_gpuvm` must be initialized with this function before use.h](hThe }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj ubh3 must be initialized with this function before use.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhjubh)}(hNote that **gpuvm** must be cleared to 0 before calling this function. The given :c:type:`name` is expected to be managed by the surrounding driver structures.h](h Note that }(hj>hhhNhNubj)}(h **gpuvm**h]hgpuvm}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh> must be cleared to 0 before calling this function. The given }(hj>hhhNhNubh)}(h:c:type:`name`h]j)}(hjZh]hname}(hj\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3nameuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj>ubh@ is expected to be managed by the surrounding driver structures.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_put (C function)c.drm_gpuvm_puthNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h,void drm_gpuvm_put (struct drm_gpuvm *gpuvm)h]j>)}(h+void drm_gpuvm_put(struct drm_gpuvm *gpuvm)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM8ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM8ubjg)}(h drm_gpuvm_puth]jm)}(h drm_gpuvm_puth]h drm_gpuvm_put}(hjîhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM8ubj)}(h(struct drm_gpuvm *gpuvm)h]j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hj߮hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjۮubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjۮubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjŮsbc.drm_gpuvm_putasbuh1hhjۮubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjۮubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۮubjm)}(hgpuvmh]hgpuvm}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjۮubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj׮ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM8ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM8ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM8hjhhubj)}(hhh]h)}(h!drop a struct drm_gpuvm referenceh]h!drop a struct drm_gpuvm reference}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM1hj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to release the reference of **Description** This releases a reference to **gpuvm**. This function may be called from atomic context.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM5hj~ubj)}(hhh]j)}(hP``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to release the reference of h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM2hjubj )}(hhh]h)}(h3the :c:type:`drm_gpuvm` to release the reference ofh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjƯh]h drm_gpuvm}(hjȯhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjįubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhM2hjubh to release the reference of}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhj~ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM4hj~ubh)}(h'This releases a reference to **gpuvm**.h](hThis releases a reference to }(hjhhhNhNubj)}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM4hj~ubh)}(h0This function may be called from atomic context.h]h0This function may be called from atomic context.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM6hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_gpuvm_prepare_vm (C function)c.drm_gpuvm_prepare_vmhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hbint drm_gpuvm_prepare_vm (struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences)h]j>)}(haint drm_gpuvm_prepare_vm(struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences)h](jc)}(hinth]hint}(hjghhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjchhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMVubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjchhhjuhMVubjg)}(hdrm_gpuvm_prepare_vmh]jm)}(hdrm_gpuvm_prepare_vmh]hdrm_gpuvm_prepare_vm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjchhhjuhMVubj)}(hI(struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hj°hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjİmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_prepare_vmasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jްc.drm_gpuvm_prepare_vmasbuh1hhjubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hexech]hexec}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int num_fencesh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h num_fencesh]h num_fences}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjchhhjuhMVubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj_hhhjuhMVubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1j7hjuhMVhj\hhubj)}(hhh]h)}(h"prepare the GPUVMs common dma-resvh]h"prepare the GPUVMs common dma-resv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMIhjhhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX!**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` ``struct drm_exec *exec`` the :c:type:`drm_exec` context ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve **Description** Calls drm_exec_prepare_obj() for the GPUVMs dummy :c:type:`drm_gem_object`; if **num_fences** is zero drm_exec_lock_obj() is called instead. Using this function directly, it is the drivers responsibility to call drm_exec_init() and drm_exec_fini() accordingly. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMMhjubj)}(hhh](j)}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hj)h]hstruct drm_gpuvm *gpuvm}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMJhj#ubj )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hjBhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjLh]h drm_gpuvm}(hjNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj>hMJhjBubeh}(h]h ]h"]h$]h&]uh1hhj>hMJhj?ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMJhj ubj)}(h9``struct drm_exec *exec`` the :c:type:`drm_exec` context h](j)}(h``struct drm_exec *exec``h]j)}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMKhj{ubj )}(hhh]h)}(hthe :c:type:`drm_exec` contexth](hthe }(hjhhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hjh]hdrm_exec}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhjhMKhjubh context}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMKhjubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMKhj ubj)}(hJ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve h](j)}(h``unsigned int num_fences``h]j)}(hjݲh]hunsigned int num_fences}(hj߲hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۲ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMLhjײubj )}(hhh]h)}(h-the amount of :c:type:`dma_fences` to reserveh](hthe amount of }(hjhhhNhNubh)}(h:c:type:`dma_fences`h]j)}(hjh]h dma_fences}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_fencesuh1hhjhMLhjubh to reserve}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMLhjubah}(h]h ]h"]h$]h&]uh1j hjײubeh}(h]h ]h"]h$]h&]uh1jhjhMLhj ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMNhjubh)}(hCalls drm_exec_prepare_obj() for the GPUVMs dummy :c:type:`drm_gem_object`; if **num_fences** is zero drm_exec_lock_obj() is called instead.h](h2Calls drm_exec_prepare_obj() for the GPUVMs dummy }(hjQhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj[h]hdrm_gem_object}(hj]hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMNhjQubh; if }(hjQhhhNhNubj)}(h**num_fences**h]h num_fences}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh/ is zero drm_exec_lock_obj() is called instead.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMNhjubh)}(hwUsing this function directly, it is the drivers responsibility to call drm_exec_init() and drm_exec_fini() accordingly.h]hwUsing this function directly, it is the drivers responsibility to call drm_exec_init() and drm_exec_fini() accordingly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMQhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMThjubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMThjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_gpuvm_prepare_objects (C function)c.drm_gpuvm_prepare_objectshNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hgint drm_gpuvm_prepare_objects (struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences)h]j>)}(hfint drm_gpuvm_prepare_objects(struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuvm_prepare_objectsh]jm)}(hdrm_gpuvm_prepare_objectsh]hdrm_gpuvm_prepare_objects}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hI(struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj$ubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj$ubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjFhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_prepare_objectsasbuh1hhj$ubjV)}(h h]h }(hjfhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj$ubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jbc.drm_gpuvm_prepare_objectsasbuh1hhjubjV)}(h h]h }(hjִhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned int num_fencesh](jc)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hinth]hint}(hj&hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h num_fencesh]h num_fences}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]j޳ah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hprepare all assoiciated BOsh]hprepare all assoiciated BOs}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` ``struct drm_exec *exec`` the :c:type:`drm_exec` locking context ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve **Description** Calls drm_exec_prepare_obj() for all :c:type:`drm_gem_objects` the given :c:type:`drm_gpuvm` contains mappings of; if **num_fences** is zero drm_exec_lock_obj() is called instead. Using this function directly, it is the drivers responsibility to call drm_exec_init() and drm_exec_fini() accordingly. Drivers need to make sure to protect this case with either an outer VM lock or by calling drm_gpuvm_prepare_vm() before this function within the drm_exec_until_all_locked() loop, such that the GPUVM's dma-resv lock ensures mutual exclusion. **Note** This function is safe against concurrent insertion and removal of external objects, however it is not safe against concurrent usage itself. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hjƵhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjеh]h drm_gpuvm}(hjҵhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjεubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjµhMhjƵubeh}(h]h ]h"]h$]h&]uh1hhjµhMhjõubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjµhMhjubj)}(hA``struct drm_exec *exec`` the :c:type:`drm_exec` locking context h](j)}(h``struct drm_exec *exec``h]j)}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h&the :c:type:`drm_exec` locking contexth](hthe }(hjhhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hj(h]hdrm_exec}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhjhMhjubh locking context}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hJ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve h](j)}(h``unsigned int num_fences``h]j)}(hjah]hunsigned int num_fences}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj[ubj )}(hhh]h)}(h-the amount of :c:type:`dma_fences` to reserveh](hthe amount of }(hjzhhhNhNubh)}(h:c:type:`dma_fences`h]j)}(hjh]h dma_fences}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_fencesuh1hhjvhMhjzubh to reserve}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hCalls drm_exec_prepare_obj() for all :c:type:`drm_gem_objects` the given :c:type:`drm_gpuvm` contains mappings of; if **num_fences** is zero drm_exec_lock_obj() is called instead.h](h%Calls drm_exec_prepare_obj() for all }(hjնhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hj߶h]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjݶubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjնubh the given }(hjնhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhMhjնubh contains mappings of; if }(hjնhhhNhNubj)}(h**num_fences**h]h num_fences}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjնubh/ is zero drm_exec_lock_obj() is called instead.}(hjնhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hwUsing this function directly, it is the drivers responsibility to call drm_exec_init() and drm_exec_fini() accordingly.h]hwUsing this function directly, it is the drivers responsibility to call drm_exec_init() and drm_exec_fini() accordingly.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hDrivers need to make sure to protect this case with either an outer VM lock or by calling drm_gpuvm_prepare_vm() before this function within the drm_exec_until_all_locked() loop, such that the GPUVM's dma-resv lock ensures mutual exclusion.h]hDrivers need to make sure to protect this case with either an outer VM lock or by calling drm_gpuvm_prepare_vm() before this function within the drm_exec_until_all_locked() loop, such that the GPUVM’s dma-resv lock ensures mutual exclusion.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h**Note**h]j)}(hj\h]hNote}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hThis function is safe against concurrent insertion and removal of external objects, however it is not safe against concurrent usage itself.h]hThis function is safe against concurrent insertion and removal of external objects, however it is not safe against concurrent usage itself.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_gpuvm_prepare_range (C function)c.drm_gpuvm_prepare_rangehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hzint drm_gpuvm_prepare_range (struct drm_gpuvm *gpuvm, struct drm_exec *exec, u64 addr, u64 range, unsigned int num_fences)h]j>)}(hyint drm_gpuvm_prepare_range(struct drm_gpuvm *gpuvm, struct drm_exec *exec, u64 addr, u64 range, unsigned int num_fences)h](jc)}(hinth]hint}(hjȷhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjķhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hj׷hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjķhhhjַhMubjg)}(hdrm_gpuvm_prepare_rangeh]jm)}(hdrm_gpuvm_prepare_rangeh]hdrm_gpuvm_prepare_range}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjķhhhjַhMubj)}(h^(struct drm_gpuvm *gpuvm, struct drm_exec *exec, u64 addr, u64 range, unsigned int num_fences)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_prepare_rangeasbuh1hhjubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjsubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j?c.drm_gpuvm_prepare_rangeasbuh1hhjsubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjm)}(hexech]hexec}(hjθhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 addrh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j?c.drm_gpuvm_prepare_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 rangeh](h)}(hhh]jm)}(hu64h]hu64}(hj2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j?c.drm_gpuvm_prepare_rangeasbuh1hhj+ubjV)}(h h]h }(hjPhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+ubjm)}(hrangeh]hrange}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int num_fencesh](jc)}(hunsignedh]hunsigned}(hjwhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjsubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubjc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjsubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubjm)}(h num_fencesh]h num_fences}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjķhhhjַhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjַhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjַhMhjhhubj)}(hhh]h)}(h+prepare all BOs mapped within a given rangeh]h+prepare all BOs mapped within a given range}(hjٹhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjֹhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjַhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hXE**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` ``struct drm_exec *exec`` the :c:type:`drm_exec` locking context ``u64 addr`` the start address within the VA space ``u64 range`` the range to iterate within the VA space ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve **Description** Calls drm_exec_prepare_obj() for all :c:type:`drm_gem_objects` mapped between **addr** and **addr** + **range**; if **num_fences** is zero drm_exec_lock_obj() is called instead. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hj3hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj=h]h drm_gpuvm}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj/hMhj3ubeh}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(hA``struct drm_exec *exec`` the :c:type:`drm_exec` locking context h](j)}(h``struct drm_exec *exec``h]j)}(hjrh]hstruct drm_exec *exec}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjlubj )}(hhh]h)}(h&the :c:type:`drm_exec` locking contexth](hthe }(hjhhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hjh]hdrm_exec}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhjhMhjubh locking context}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``u64 addr`` the start address within the VA space h](j)}(h ``u64 addr``h]j)}(hjκh]hu64 addr}(hjкhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̺ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjȺubj )}(hhh]h)}(h%the start address within the VA spaceh]h%the start address within the VA space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjȺubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``u64 range`` the range to iterate within the VA space h](j)}(h ``u64 range``h]j)}(hjh]h u64 range}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h(the range to iterate within the VA spaceh]h(the range to iterate within the VA space}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hJ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve h](j)}(h``unsigned int num_fences``h]j)}(hj@h]hunsigned int num_fences}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj:ubj )}(hhh]h)}(h-the amount of :c:type:`dma_fences` to reserveh](hthe amount of }(hjYhhhNhNubh)}(h:c:type:`dma_fences`h]j)}(hjch]h dma_fences}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_fencesuh1hhjUhMhjYubh to reserve}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hCalls drm_exec_prepare_obj() for all :c:type:`drm_gem_objects` mapped between **addr** and **addr** + **range**; if **num_fences** is zero drm_exec_lock_obj() is called instead.h](h%Calls drm_exec_prepare_obj() for all }(hjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh mapped between }(hjhhhNhNubj)}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h **range**h]hrange}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh; if }(hjhhhNhNubj)}(h**num_fences**h]h num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ is zero drm_exec_lock_obj() is called instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjۻhMhjubh)}(h **Return**h]j)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gpuvm_exec_lock (C function)c.drm_gpuvm_exec_lockhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h8int drm_gpuvm_exec_lock (struct drm_gpuvm_exec *vm_exec)h]j>)}(h7int drm_gpuvm_exec_lock(struct drm_gpuvm_exec *vm_exec)h](jc)}(hinth]hint}(hjuhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjqhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjqhhhjhMubjg)}(hdrm_gpuvm_exec_lockh]jm)}(hdrm_gpuvm_exec_lockh]hdrm_gpuvm_exec_lock}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjqhhhjhMubj)}(h (struct drm_gpuvm_exec *vm_exec)h]j)}(hstruct drm_gpuvm_exec *vm_exech](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjмhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjͼubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjҼmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_exec_lockasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvm_exech]hvm_exec}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjjhhubj)}(hhh]h)}(h(lock all dma-resv of all assoiciated BOsh]h(lock all dma-resv of all assoiciated BOs}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1j2hhhj17hNhNubj)}(hX>**Parameters** ``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper **Description** Acquires all dma-resv locks of all :c:type:`drm_gem_objects` the given :c:type:`drm_gpuvm` contains mappings of. Addionally, when calling this function with struct drm_gpuvm_exec::extra being set the driver receives the given **fn** callback to lock additional dma-resv in the context of the :c:type:`drm_gpuvm_exec` instance. Typically, drivers would call drm_exec_prepare_obj() from within this callback. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjQubj)}(hhh]j)}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](j)}(h"``struct drm_gpuvm_exec *vm_exec``h]j)}(hjvh]hstruct drm_gpuvm_exec *vm_exec}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjpubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j)}(hjh]hdrm_gpuvm_exec}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_execuh1hhjhMhjubh wrapper}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubh)}(h**Description**h]j)}(hjԽh]h Description}(hjֽhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҽubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjQubh)}(hpAcquires all dma-resv locks of all :c:type:`drm_gem_objects` the given :c:type:`drm_gpuvm` contains mappings of.h](h#Acquires all dma-resv locks of all }(hjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhMhjubh contains mappings of.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjQubh)}(hX%Addionally, when calling this function with struct drm_gpuvm_exec::extra being set the driver receives the given **fn** callback to lock additional dma-resv in the context of the :c:type:`drm_gpuvm_exec` instance. Typically, drivers would call drm_exec_prepare_obj() from within this callback.h](hqAddionally, when calling this function with struct drm_gpuvm_exec::extra being set the driver receives the given }(hj?hhhNhNubj)}(h**fn**h]hfn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh< callback to lock additional dma-resv in the context of the }(hj?hhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j)}(hj[h]hdrm_gpuvm_exec}(hj]hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_execuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj?ubhZ instance. Typically, drivers would call drm_exec_prepare_obj() from within this callback.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMhjQubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjQubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_gpuvm_exec_lock_array (C function)c.drm_gpuvm_exec_lock_arrayhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hsint drm_gpuvm_exec_lock_array (struct drm_gpuvm_exec *vm_exec, struct drm_gem_object **objs, unsigned int num_objs)h]j>)}(hrint drm_gpuvm_exec_lock_array(struct drm_gpuvm_exec *vm_exec, struct drm_gem_object **objs, unsigned int num_objs)h](jc)}(hinth]hint}(hjʾhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjƾhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjپhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjƾhhhjؾhMubjg)}(hdrm_gpuvm_exec_lock_arrayh]jm)}(hdrm_gpuvm_exec_lock_arrayh]hdrm_gpuvm_exec_lock_array}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjƾhhhjؾhMubj)}(hU(struct drm_gpuvm_exec *vm_exec, struct drm_gem_object **objs, unsigned int num_objs)h](j)}(hstruct drm_gpuvm_exec *vm_exech](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_exec_lock_arrayasbuh1hhjubjV)}(h h]h }(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvm_exech]hvm_exec}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object **objsh](jD)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jAc.drm_gpuvm_exec_lock_arrayasbuh1hhjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubj)}(hjh]h*}(hjÿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]h*}(hjпhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjm)}(hobjsh]hobjs}(hjݿhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int num_objsh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hnum_objsh]hnum_objs}(hj.hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjƾhhhjؾhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj¾hhhjؾhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjؾhMhjhhubj)}(hhh]h)}(h(lock all dma-resv of all assoiciated BOsh]h(lock all dma-resv of all assoiciated BOs}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjؾhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjpjjpjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper ``struct drm_gem_object **objs`` additional :c:type:`drm_gem_objects` to lock ``unsigned int num_objs`` the number of additional :c:type:`drm_gem_objects` to lock **Description** Acquires all dma-resv locks of all :c:type:`drm_gem_objects` the given :c:type:`drm_gpuvm` contains mappings of, plus the ones given through **objs**. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjtubj)}(hhh](j)}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](j)}(h"``struct drm_gpuvm_exec *vm_exec``h]j)}(hjh]hstruct drm_gpuvm_exec *vm_exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j)}(hjh]hdrm_gpuvm_exec}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_execuh1hhjhMhjubh wrapper}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hN``struct drm_gem_object **objs`` additional :c:type:`drm_gem_objects` to lock h](j)}(h ``struct drm_gem_object **objs``h]j)}(hjh]hstruct drm_gem_object **objs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h,additional :c:type:`drm_gem_objects` to lockh](h additional }(hjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhj hMhjubh to lock}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hU``unsigned int num_objs`` the number of additional :c:type:`drm_gem_objects` to lock h](j)}(h``unsigned int num_objs``h]j)}(hjQh]hunsigned int num_objs}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjKubj )}(hhh]h)}(h:the number of additional :c:type:`drm_gem_objects` to lockh](hthe number of additional }(hjjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjth]hdrm_gem_objects}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhjfhMhjjubh to lock}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubeh}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjtubh)}(hAcquires all dma-resv locks of all :c:type:`drm_gem_objects` the given :c:type:`drm_gpuvm` contains mappings of, plus the ones given through **objs**.h](h#Acquires all dma-resv locks of all }(hjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhMhjubh3 contains mappings of, plus the ones given through }(hjhhhNhNubj)}(h**objs**h]hobjs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjtubh)}(h **Return**h]j)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjtubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_gpuvm_exec_lock_range (C function)c.drm_gpuvm_exec_lock_rangehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hSint drm_gpuvm_exec_lock_range (struct drm_gpuvm_exec *vm_exec, u64 addr, u64 range)h]j>)}(hRint drm_gpuvm_exec_lock_range(struct drm_gpuvm_exec *vm_exec, u64 addr, u64 range)h](jc)}(hinth]hint}(hjshhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjohhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM8ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjohhhjhM8ubjg)}(hdrm_gpuvm_exec_lock_rangeh]jm)}(hdrm_gpuvm_exec_lock_rangeh]hdrm_gpuvm_exec_lock_range}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjohhhjhM8ubj)}(h5(struct drm_gpuvm_exec *vm_exec, u64 addr, u64 range)h](j)}(hstruct drm_gpuvm_exec *vm_exech](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_exec_lock_rangeasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvm_exech]hvm_exec}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 addrh](h)}(hhh]jm)}(hu64h]hu64}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]jc.drm_gpuvm_exec_lock_rangeasbuh1hhjubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(haddrh]haddr}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 rangeh](h)}(hhh]jm)}(hu64h]hu64}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]jc.drm_gpuvm_exec_lock_rangeasbuh1hhjfubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubjm)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjohhhjhM8ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjkhhhjhM8ubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1j7hjhM8hjhhhubj)}(hhh]h)}(h+prepare all BOs mapped within a given rangeh]h+prepare all BOs mapped within a given range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM.hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhM8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper ``u64 addr`` the start address within the VA space ``u64 range`` the range to iterate within the VA space **Description** Acquires all dma-resv locks of all :c:type:`drm_gem_objects` mapped between **addr** and **addr** + **range**. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM2hjubj)}(hhh](j)}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](j)}(h"``struct drm_gpuvm_exec *vm_exec``h]j)}(hjh]hstruct drm_gpuvm_exec *vm_exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM/hjubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j)}(hj'h]hdrm_gpuvm_exec}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_execuh1hhjhM/hjubh wrapper}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM/hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(h3``u64 addr`` the start address within the VA space h](j)}(h ``u64 addr``h]j)}(hj`h]hu64 addr}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM0hjZubj )}(hhh]h)}(h%the start address within the VA spaceh]h%the start address within the VA space}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM0hjvubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjuhM0hjubj)}(h7``u64 range`` the range to iterate within the VA space h](j)}(h ``u64 range``h]j)}(hjh]h u64 range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM1hjubj )}(hhh]h)}(h(the range to iterate within the VA spaceh]h(the range to iterate within the VA space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM3hjubh)}(hnAcquires all dma-resv locks of all :c:type:`drm_gem_objects` mapped between **addr** and **addr** + **range**.h](h#Acquires all dma-resv locks of all }(hjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j)}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM3hjubh mapped between }(hjhhhNhNubj)}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**addr**h]haddr}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h **range**h]hrange}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM3hjubh)}(h **Return**h]j)}(hjTh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM6hjubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_validate (C function)c.drm_gpuvm_validatehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hGint drm_gpuvm_validate (struct drm_gpuvm *gpuvm, struct drm_exec *exec)h]j>)}(hFint drm_gpuvm_validate(struct drm_gpuvm *gpuvm, struct drm_exec *exec)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuvm_validateh]jm)}(hdrm_gpuvm_validateh]hdrm_gpuvm_validate}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h0(struct drm_gpuvm *gpuvm, struct drm_exec *exec)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_validateasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjDubjV)}(h h]h }(hjUhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjDubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjfhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]jc.drm_gpuvm_validateasbuh1hhjDubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjDubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjm)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h"validate all BOs marked as evictedh]h"validate all BOs marked as evicted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM~hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to validate evicted BOs ``struct drm_exec *exec`` the :c:type:`drm_exec` instance used for locking the GPUVM **Description** Calls the :c:type:`drm_gpuvm_ops`::vm_bo_validate callback for all evicted buffer objects being mapped in the given :c:type:`drm_gpuvm`. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(hL``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to validate evicted BOs h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hj h]hstruct drm_gpuvm *gpuvm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h/the :c:type:`drm_gpuvm` to validate evicted BOsh](hthe }(hj#hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj-h]h drm_gpuvm}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhMhj#ubh to validate evicted BOs}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hU``struct drm_exec *exec`` the :c:type:`drm_exec` instance used for locking the GPUVM h](j)}(h``struct drm_exec *exec``h]j)}(hjfh]hstruct drm_exec *exec}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj`ubj )}(hhh]h)}(h:the :c:type:`drm_exec` instance used for locking the GPUVMh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hjh]hdrm_exec}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhj{hMhjubh$ instance used for locking the GPUVM}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hCalls the :c:type:`drm_gpuvm_ops`::vm_bo_validate callback for all evicted buffer objects being mapped in the given :c:type:`drm_gpuvm`.h](h Calls the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j)}(hjh]h drm_gpuvm_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubhS::vm_bo_validate callback for all evicted buffer objects being mapped in the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j)}(hj1h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gpuvm_resv_add_fence (C function)c.drm_gpuvm_resv_add_fencehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hvoid drm_gpuvm_resv_add_fence (struct drm_gpuvm *gpuvm, struct drm_exec *exec, struct dma_fence *fence, enum dma_resv_usage private_usage, enum dma_resv_usage extobj_usage)h]j>)}(hvoid drm_gpuvm_resv_add_fence(struct drm_gpuvm *gpuvm, struct drm_exec *exec, struct dma_fence *fence, enum dma_resv_usage private_usage, enum dma_resv_usage extobj_usage)h](jc)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjrhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrhhhjhMubjg)}(hdrm_gpuvm_resv_add_fenceh]jm)}(hdrm_gpuvm_resv_add_fenceh]hdrm_gpuvm_resv_add_fence}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjrhhhjhMubj)}(h(struct drm_gpuvm *gpuvm, struct drm_exec *exec, struct dma_fence *fence, enum dma_resv_usage private_usage, enum dma_resv_usage extobj_usage)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_resv_add_fenceasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj!ubjV)}(h h]h }(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!ubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]jc.drm_gpuvm_resv_add_fenceasbuh1hhj!ubjV)}(h h]h }(hjahhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjm)}(hexech]hexec}(hj|hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct dma_fence *fenceh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_resv_add_fenceasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hfenceh]hfence}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!enum dma_resv_usage private_usageh](jD)}(hjGh]henum}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_resv_usageh]hdma_resv_usage}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]jc.drm_gpuvm_resv_add_fenceasbuh1hhjubjV)}(h h]h }(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h private_usageh]h private_usage}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h enum dma_resv_usage extobj_usageh](jD)}(hjGh]henum}(hjhhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjdubjV)}(h h]h }(hjuhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdubh)}(hhh]jm)}(hdma_resv_usageh]hdma_resv_usage}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_resv_add_fenceasbuh1hhjdubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdubjm)}(h extobj_usageh]h extobj_usage}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjrhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjnhhhjhMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjkhhubj)}(hhh]h)}(h,add fence to private and all extobj dma-resvh]h,add fence to private and all extobj dma-resv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hXE**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to add a fence to ``struct drm_exec *exec`` the :c:type:`drm_exec` locking context ``struct dma_fence *fence`` fence to add ``enum dma_resv_usage private_usage`` private dma-resv usage ``enum dma_resv_usage extobj_usage`` extobj dma-resv usageh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(hF``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to add a fence to h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h)the :c:type:`drm_gpuvm` to add a fence toh](hthe }(hj6hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj@h]h drm_gpuvm}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj2hMhj6ubh to add a fence to}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubj)}(hA``struct drm_exec *exec`` the :c:type:`drm_exec` locking context h](j)}(h``struct drm_exec *exec``h]j)}(hjyh]hstruct drm_exec *exec}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjsubj )}(hhh]h)}(h&the :c:type:`drm_exec` locking contexth](hthe }(hjhhhNhNubh)}(h:c:type:`drm_exec`h]j)}(hjh]hdrm_exec}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_execuh1hhjhMhjubh locking context}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h)``struct dma_fence *fence`` fence to add h](j)}(h``struct dma_fence *fence``h]j)}(hjh]hstruct dma_fence *fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h fence to addh]h fence to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``enum dma_resv_usage private_usage`` private dma-resv usage h](j)}(h%``enum dma_resv_usage private_usage``h]j)}(hjh]h!enum dma_resv_usage private_usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hprivate dma-resv usageh]hprivate dma-resv usage}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(h:``enum dma_resv_usage extobj_usage`` extobj dma-resv usageh](j)}(h$``enum dma_resv_usage extobj_usage``h]j)}(hjGh]h enum dma_resv_usage extobj_usage}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjAubj )}(hhh]h)}(hextobj dma-resv usageh]hextobj dma-resv usage}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gpuvm_bo_create (C function)c.drm_gpuvm_bo_createhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h_struct drm_gpuvm_bo * drm_gpuvm_bo_create (struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h]j>)}(h]struct drm_gpuvm_bo *drm_gpuvm_bo_create(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gpuvm_bo_createsbc.drm_gpuvm_bo_createasbuh1hhjhhhjhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjg)}(hdrm_gpuvm_bo_createh]jm)}(hjh]hdrm_gpuvm_bo_create}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h5(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]jc.drm_gpuvm_bo_createasbuh1hhjubjV)}(h h]h }(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_bo_createasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h,create a new instance of struct drm_gpuvm_boh]h,create a new instance of struct drm_gpuvm_bo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. ``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. **Description** If provided by the driver, this function uses the :c:type:`drm_gpuvm_ops` vm_bo_alloc() callback to allocate. **Return** a pointer to the :c:type:`drm_gpuvm_bo` on success, NULL on failureh](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj(ubj)}(hhh](j)}(hN``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjMh]hstruct drm_gpuvm *gpuvm}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjGubj )}(hhh]h)}(h1The :c:type:`drm_gpuvm` the **obj** is mapped in.h](hThe }(hjfhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjph]h drm_gpuvm}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjbhMhjfubh the }(hjfhhhNhNubj)}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh is mapped in.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubj)}(h[``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h;The :c:type:`drm_gem_object` being mapped in the **gpuvm**.h](hThe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhMhjubh being mapped in the }(hjhhhNhNubj)}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj(ubh)}(hmIf provided by the driver, this function uses the :c:type:`drm_gpuvm_ops` vm_bo_alloc() callback to allocate.h](h2If provided by the driver, this function uses the }(hjAhhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j)}(hjKh]h drm_gpuvm_ops}(hjMhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjAubh$ vm_bo_alloc() callback to allocate.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhhMhj(ubh)}(h **Return**h]j)}(hjuh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj(ubh)}(hCa pointer to the :c:type:`drm_gpuvm_bo` on success, NULL on failureh](ha pointer to the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh on success, NULL on failure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_bo_put (C function)c.drm_gpuvm_bo_puthNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h2bool drm_gpuvm_bo_put (struct drm_gpuvm_bo *vm_bo)h]j>)}(h1bool drm_gpuvm_bo_put(struct drm_gpuvm_bo *vm_bo)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuvm_bo_puth]jm)}(hdrm_gpuvm_bo_puth]hdrm_gpuvm_bo_put}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(struct drm_gpuvm_bo *vm_bo)h]j)}(hstruct drm_gpuvm_bo *vm_boh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hj7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_bo_putasbuh1hhjubjV)}(h h]h }(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvm_boh]hvm_bo}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h$drop a struct drm_gpuvm_bo referenceh]h$drop a struct drm_gpuvm_bo reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX4**Parameters** ``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to release the reference of **Description** This releases a reference to **vm_bo**. If the reference count drops to zero, the :c:type:`gpuvm_bo` is destroyed, which includes removing it from the GEMs gpuva list. Hence, if a call to this function can potentially let the reference count drop to zero the caller must hold the dma-resv or driver specific GEM gpuva lock. This function may only be called from non-atomic context. **Return** true if vm_bo was destroyed, false otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh]j)}(hV``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to release the reference of h](j)}(h``struct drm_gpuvm_bo *vm_bo``h]j)}(hjh]hstruct drm_gpuvm_bo *vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h6the :c:type:`drm_gpuvm_bo` to release the reference ofh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhMhjubh to release the reference of}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h'This releases a reference to **vm_bo**.h](hThis releases a reference to }(hjQhhhNhNubj)}(h **vm_bo**h]hvm_bo}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hXIf the reference count drops to zero, the :c:type:`gpuvm_bo` is destroyed, which includes removing it from the GEMs gpuva list. Hence, if a call to this function can potentially let the reference count drop to zero the caller must hold the dma-resv or driver specific GEM gpuva lock.h](h*If the reference count drops to zero, the }(hjrhhhNhNubh)}(h:c:type:`gpuvm_bo`h]j)}(hj|h]hgpuvm_bo}(hj~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjrubh is destroyed, which includes removing it from the GEMs gpuva list. Hence, if a call to this function can potentially let the reference count drop to zero the caller must hold the dma-resv or driver specific GEM gpuva lock.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h9This function may only be called from non-atomic context.h]h9This function may only be called from non-atomic context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h-true if vm_bo was destroyed, false otherwise.h]h-true if vm_bo was destroyed, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_bo_find (C function)c.drm_gpuvm_bo_findhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h]struct drm_gpuvm_bo * drm_gpuvm_bo_find (struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h]j>)}(h[struct drm_gpuvm_bo *drm_gpuvm_bo_find(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM+ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM+ubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gpuvm_bo_findsbc.drm_gpuvm_bo_findasbuh1hhjhhhjhM+ubjV)}(h h]h }(hj:hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM+ubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM+ubjg)}(hdrm_gpuvm_bo_findh]jm)}(hj7h]hdrm_gpuvm_bo_find}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM+ubj)}(h5(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjpubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjpubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.drm_gpuvm_bo_findasbuh1hhjpubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.drm_gpuvm_bo_findasbuh1hhjubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hj;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM+ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM+ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM+hjhhubj)}(hhh]h)}(h^find the :c:type:`drm_gpuvm_bo` for the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`h](h find the }(hjehhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjoh]h drm_gpuvm_bo}(hjqhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j5c.drm_gpuvm_bo_findasbj3 drm_gpuvm_bouh1hhj̠hMhjeubh for the given }(hjehhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3 drm_gpuvmuh1hhj̠hMhjeubh and }(hjehhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3drm_gem_objectuh1hhj̠hMhjeubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjbhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. ``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. **Description** Find the :c:type:`drm_gpuvm_bo` representing the combination of the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`. If found, increases the reference count of the :c:type:`drm_gpuvm_bo` accordingly. **Return** a pointer to the :c:type:`drm_gpuvm_bo` on success, NULL on failureh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM$hjubj)}(hhh](j)}(hN``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM"hj ubj )}(hhh]h)}(h1The :c:type:`drm_gpuvm` the **obj** is mapped in.h](hThe }(hj)hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj3h]h drm_gpuvm}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj%hM"hj)ubh the }(hj)hhhNhNubj)}(h**obj**h]hobj}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh is mapped in.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hM"hj&ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj%hM"hjubj)}(h[``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. h](j)}(h``struct drm_gem_object *obj``h]j)}(hj~h]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM#hjxubj )}(hhh]h)}(h;The :c:type:`drm_gem_object` being mapped in the **gpuvm**.h](hThe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhM#hjubh being mapped in the }(hjhhhNhNubj)}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1j hjxubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM%hjubh)}(hFind the :c:type:`drm_gpuvm_bo` representing the combination of the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`. If found, increases the reference count of the :c:type:`drm_gpuvm_bo` accordingly.h](h Find the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM%hjubh+ representing the combination of the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj2h]h drm_gpuvm}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj+hM%hjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjUh]hdrm_gem_object}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj+hM%hjubh1. If found, increases the reference count of the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjxh]h drm_gpuvm_bo}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhj+hM%hjubh accordingly.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hM%hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM)hjubh)}(hCa pointer to the :c:type:`drm_gpuvm_bo` on success, NULL on failureh](ha pointer to the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM)hjubh on success, NULL on failure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM)hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gpuvm_bo_obtain (C function)c.drm_gpuvm_bo_obtainhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h_struct drm_gpuvm_bo * drm_gpuvm_bo_obtain (struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h]j>)}(h]struct drm_gpuvm_bo *drm_gpuvm_bo_obtain(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMDubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMDubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j)}jdrm_gpuvm_bo_obtainsbc.drm_gpuvm_bo_obtainasbuh1hhjhhhjhMDubjV)}(h h]h }(hjIhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMDubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMDubjg)}(hdrm_gpuvm_bo_obtainh]jm)}(hjFh]hdrm_gpuvm_bo_obtain}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMDubj)}(h5(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jDc.drm_gpuvm_bo_obtainasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jDc.drm_gpuvm_bo_obtainasbuh1hhjubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjJhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMDubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMDhjhhubj)}(hhh]h)}(hqobtains and instance of the :c:type:`drm_gpuvm_bo` for the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`h](hobtains and instance of the }(hjthhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj~h]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jDc.drm_gpuvm_bo_obtainasbj3 drm_gpuvm_bouh1hhj̠hMhjtubh for the given }(hjthhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3 drm_gpuvmuh1hhj̠hMhjtubh and }(hjthhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3drm_gem_objectuh1hhj̠hMhjtubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM6hjqhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hXj**Parameters** ``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. ``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. **Description** Find the :c:type:`drm_gpuvm_bo` representing the combination of the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`. If found, increases the reference count of the :c:type:`drm_gpuvm_bo` accordingly. If not found, allocates a new :c:type:`drm_gpuvm_bo`. A new :c:type:`drm_gpuvm_bo` is added to the GEMs gpuva list. **Return** a pointer to the :c:type:`drm_gpuvm_bo` on success, an ERR_PTR on failureh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM:hjubj)}(hhh](j)}(hN``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM8hjubj )}(hhh]h)}(h1The :c:type:`drm_gpuvm` the **obj** is mapped in.h](hThe }(hj8hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjBh]h drm_gpuvm}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj4hM8hj8ubh the }(hj8hhhNhNubj)}(h**obj**h]hobj}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh is mapped in.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hM8hj5ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj4hM8hjubj)}(h[``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM9hjubj )}(hhh]h)}(h;The :c:type:`drm_gem_object` being mapped in the **gpuvm**.h](hThe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhM9hjubh being mapped in the }(hjhhhNhNubj)}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM;hjubh)}(hXFind the :c:type:`drm_gpuvm_bo` representing the combination of the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`. If found, increases the reference count of the :c:type:`drm_gpuvm_bo` accordingly. If not found, allocates a new :c:type:`drm_gpuvm_bo`.h](h Find the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM;hjubh+ representing the combination of the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjAh]h drm_gpuvm}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj:hM;hjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjdh]hdrm_gem_object}(hjfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj:hM;hjubh1. If found, increases the reference count of the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhj:hM;hjubh, accordingly. If not found, allocates a new }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jIhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhj:hM;hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hM;hjubh)}(h=A new :c:type:`drm_gpuvm_bo` is added to the GEMs gpuva list.h](hA new }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM@hjubh! is added to the GEMs gpuva list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM@hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMBhjubh)}(hIa pointer to the :c:type:`drm_gpuvm_bo` on success, an ERR_PTR on failureh](ha pointer to the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj%h]h drm_gpuvm_bo}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMBhjubh" on success, an ERR_PTR on failure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhMBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)drm_gpuvm_bo_obtain_prealloc (C function)c.drm_gpuvm_bo_obtain_preallochNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hQstruct drm_gpuvm_bo * drm_gpuvm_bo_obtain_prealloc (struct drm_gpuvm_bo *__vm_bo)h]j>)}(hOstruct drm_gpuvm_bo *drm_gpuvm_bo_obtain_prealloc(struct drm_gpuvm_bo *__vm_bo)h](jD)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjihhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMiubjV)}(h h]h }(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjihhhjzhMiubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gpuvm_bo_obtain_preallocsbc.drm_gpuvm_bo_obtain_preallocasbuh1hhjihhhjzhMiubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjihhhjzhMiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjzhMiubjg)}(hdrm_gpuvm_bo_obtain_prealloch]jm)}(hjh]hdrm_gpuvm_bo_obtain_prealloc}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjihhhjzhMiubj)}(h(struct drm_gpuvm_bo *__vm_bo)h]j)}(hstruct drm_gpuvm_bo *__vm_boh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_bo_obtain_preallocasbuh1hhjubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h__vm_boh]h__vm_bo}(hj>hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjihhhjzhMiubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjehhhjzhMiubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1j7hjzhMihjbhhubj)}(hhh]h)}(hqobtains and instance of the :c:type:`drm_gpuvm_bo` for the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`h](hobtains and instance of the }(hjhhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjrh]h drm_gpuvm_bo}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuvm_bo_obtain_preallocasbj3 drm_gpuvm_bouh1hhj̠hMhjhubh for the given }(hjhhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3 drm_gpuvmuh1hhj̠hMhjhubh and }(hjhhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3drm_gem_objectuh1hhj̠hMhjhubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMZhjehhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjzhMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm_bo *__vm_bo`` A pre-allocated struct drm_gpuvm_bo. **Description** Find the :c:type:`drm_gpuvm_bo` representing the combination of the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`. If found, increases the reference count of the found :c:type:`drm_gpuvm_bo` accordingly, while the **__vm_bo** reference count is decreased. If not found **__vm_bo** is returned without further increase of the reference count. A new :c:type:`drm_gpuvm_bo` is added to the GEMs gpuva list. **Return** a pointer to the found :c:type:`drm_gpuvm_bo` or **__vm_bo** if no existing :c:type:`drm_gpuvm_bo` was foundh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM^hjubj)}(hhh]j)}(hF``struct drm_gpuvm_bo *__vm_bo`` A pre-allocated struct drm_gpuvm_bo. h](j)}(h ``struct drm_gpuvm_bo *__vm_bo``h]j)}(hjh]hstruct drm_gpuvm_bo *__vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM\hj ubj )}(hhh]h)}(h$A pre-allocated struct drm_gpuvm_bo.h]h$A pre-allocated struct drm_gpuvm_bo.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM\hj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM\hj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM^hjubh)}(hX^Find the :c:type:`drm_gpuvm_bo` representing the combination of the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`. If found, increases the reference count of the found :c:type:`drm_gpuvm_bo` accordingly, while the **__vm_bo** reference count is decreased. If not found **__vm_bo** is returned without further increase of the reference count.h](h Find the }(hjdhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjnh]h drm_gpuvm_bo}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM^hjdubh+ representing the combination of the given }(hjdhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhM^hjdubh and }(hjdhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhM^hjdubh7. If found, increases the reference count of the found }(hjdhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhM^hjdubh accordingly, while the }(hjdhhhNhNubj)}(h **__vm_bo**h]h__vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh, reference count is decreased. If not found }(hjdhhhNhNubj)}(h **__vm_bo**h]h__vm_bo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh= is returned without further increase of the reference count.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM^hjubh)}(h=A new :c:type:`drm_gpuvm_bo` is added to the GEMs gpuva list.h](hA new }(hj#hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj-h]h drm_gpuvm_bo}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMdhj#ubh! is added to the GEMs gpuva list.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhMdhjubh)}(h **Return**h]j)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMfhjubh)}(hla pointer to the found :c:type:`drm_gpuvm_bo` or **__vm_bo** if no existing :c:type:`drm_gpuvm_bo` was foundh](ha pointer to the found }(hjmhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjwh]h drm_gpuvm_bo}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMfhjmubh or }(hjmhhhNhNubj)}(h **__vm_bo**h]h__vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh if no existing }(hjmhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhMfhjmubh was found}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_gpuvm_bo_extobj_add (C function)c.drm_gpuvm_bo_extobj_addhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h9void drm_gpuvm_bo_extobj_add (struct drm_gpuvm_bo *vm_bo)h]j>)}(h8void drm_gpuvm_bo_extobj_add(struct drm_gpuvm_bo *vm_bo)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuvm_bo_extobj_addh]jm)}(hdrm_gpuvm_bo_extobj_addh]hdrm_gpuvm_bo_extobj_add}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(struct drm_gpuvm_bo *vm_bo)h]j)}(hstruct drm_gpuvm_bo *vm_boh](jD)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj-ubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-ubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_bo_extobj_addasbuh1hhj-ubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjm)}(hvm_boh]hvm_bo}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hHadds the :c:type:`drm_gpuvm_bo` to its :c:type:`drm_gpuvm`'s extobj listh](h adds the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jkc.drm_gpuvm_bo_extobj_addasbj3 drm_gpuvm_bouh1hhj̠hMhjubh to its }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3 drm_gpuvmuh1hhj̠hMhjubh’s extobj list}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM~hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hXB**Parameters** ``struct drm_gpuvm_bo *vm_bo`` The :c:type:`drm_gpuvm_bo` to add to its :c:type:`drm_gpuvm`'s the extobj list. **Description** Adds the given **vm_bo** to its :c:type:`drm_gpuvm`'s extobj list if not on the list already and if the corresponding :c:type:`drm_gem_object` is an external object, actually.h](h)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh]j)}(ho``struct drm_gpuvm_bo *vm_bo`` The :c:type:`drm_gpuvm_bo` to add to its :c:type:`drm_gpuvm`'s the extobj list. h](j)}(h``struct drm_gpuvm_bo *vm_bo``h]j)}(hj@h]hstruct drm_gpuvm_bo *vm_bo}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj:ubj )}(hhh]h)}(hOThe :c:type:`drm_gpuvm_bo` to add to its :c:type:`drm_gpuvm`'s the extobj list.h](hThe }(hjYhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjch]h drm_gpuvm_bo}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjUhMhjYubh to add to its }(hjYhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjUhMhjYubh’s the extobj list.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hAdds the given **vm_bo** to its :c:type:`drm_gpuvm`'s extobj list if not on the list already and if the corresponding :c:type:`drm_gem_object` is an external object, actually.h](hAdds the given }(hjhhhNhNubj)}(h **vm_bo**h]hvm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to its }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubhE’s extobj list if not on the list already and if the corresponding }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhMhjubh! is an external object, actually.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_bo_evict (C function)c.drm_gpuvm_bo_evicthNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h@void drm_gpuvm_bo_evict (struct drm_gpuvm_bo *vm_bo, bool evict)h]j>)}(h?void drm_gpuvm_bo_evict(struct drm_gpuvm_bo *vm_bo, bool evict)h](jc)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjZhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjZhhhjlhMubjg)}(hdrm_gpuvm_bo_evicth]jm)}(hdrm_gpuvm_bo_evicth]hdrm_gpuvm_bo_evict}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjZhhhjlhMubj)}(h((struct drm_gpuvm_bo *vm_bo, bool evict)h](j)}(hstruct drm_gpuvm_bo *vm_boh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_bo_evictasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvm_boh]hvm_bo}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool evicth](jc)}(hj h]hbool}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjm)}(hevicth]hevict}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1j7hjlhMhjShhubj)}(hhh]h)}(hUadd / remove a :c:type:`drm_gpuvm_bo` to / from the :c:type:`drm_gpuvms` evicted listh](hadd / remove a }(hjRhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj\h]h drm_gpuvm_bo}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuvm_bo_evictasbj3 drm_gpuvm_bouh1hhj̠hMhjRubh to / from the }(hjRhhhNhNubh)}(h:c:type:`drm_gpuvms`h]j)}(hjh]h drm_gpuvms}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjxj3 drm_gpuvmsuh1hhj̠hMhjRubh evicted list}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to add or remove ``bool evict`` indicates whether the object is evicted **Description** Adds a :c:type:`drm_gpuvm_bo` to or removes it from the :c:type:`drm_gpuvms` evicted list.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(hK``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to add or remove h](j)}(h``struct drm_gpuvm_bo *vm_bo``h]j)}(hjh]hstruct drm_gpuvm_bo *vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h+the :c:type:`drm_gpuvm_bo` to add or removeh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhMhjubh to add or remove}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``bool evict`` indicates whether the object is evicted h](j)}(h``bool evict``h]j)}(hj:h]h bool evict}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj4ubj )}(hhh]h)}(h'indicates whether the object is evictedh]h'indicates whether the object is evicted}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hZAdds a :c:type:`drm_gpuvm_bo` to or removes it from the :c:type:`drm_gpuvms` evicted list.h](hAdds a }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh to or removes it from the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvms`h]j)}(hjh]h drm_gpuvms}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmsuh1hhjhMhjubh evicted list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_insert (C function)c.drm_gpuva_inserthNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hDint drm_gpuva_insert (struct drm_gpuvm *gpuvm, struct drm_gpuva *va)h]j>)}(hCint drm_gpuva_insert(struct drm_gpuvm *gpuvm, struct drm_gpuva *va)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuva_inserth]jm)}(hdrm_gpuva_inserth]hdrm_gpuva_insert}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h/(struct drm_gpuvm *gpuvm, struct drm_gpuva *va)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj9ubjV)}(h h]h }(hjJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9ubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hj[hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j)}jj#sbc.drm_gpuva_insertasbuh1hhj9ubjV)}(h h]h }(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(hstruct drm_gpuva *vah](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jwc.drm_gpuva_insertasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvah]hva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hinsert a :c:type:`drm_gpuva`h](h insert a }(hj0hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj:h]h drm_gpuva}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jwc.drm_gpuva_insertasbj3 drm_gpuvauh1hhj̠hMhj0ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjljjljjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to insert the :c:type:`drm_gpuva` in ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to insert **Description** Insert a :c:type:`drm_gpuva` with a given address and range into a :c:type:`drm_gpuvm`. It is safe to use this function using the safe versions of iterating the GPU VA space, such as drm_gpuvm_for_each_va_safe() and drm_gpuvm_for_each_va_range_safe(). **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjpubj)}(hhh](j)}(hY``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to insert the :c:type:`drm_gpuva` in h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h)}(h+void drm_gpuva_remove(struct drm_gpuva *va)h](jc)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj/hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/hhhjAhMubjg)}(hdrm_gpuva_removeh]jm)}(hdrm_gpuva_removeh]hdrm_gpuva_remove}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj/hhhjAhMubj)}(h(struct drm_gpuva *va)h]j)}(hstruct drm_gpuva *vah](jD)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjlubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjVsbc.drm_gpuva_removeasbuh1hhjlubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjm)}(hvah]hva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubah}(h]h ]h"]h$]h&]jjuh1jhj/hhhjAhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj+hhhjAhMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1j7hjAhMhj(hhubj)}(hhh]h)}(hremove a :c:type:`drm_gpuva`h](h remove a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_removeasbj3 drm_gpuvauh1hhj̠hMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjAhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1j2hhhj17hNhNubj)}(hXB**Parameters** ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to remove **Description** This removes the given :c:type:`va` from the underlaying tree. It is safe to use this function using the safe versions of iterating the GPU VA space, such as drm_gpuvm_for_each_va_safe() and drm_gpuvm_for_each_va_range_safe().h](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj3ubj)}(hhh]j)}(h;``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to remove h](j)}(h``struct drm_gpuva *va``h]j)}(hjXh]hstruct drm_gpuva *va}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjRubj )}(hhh]h)}(h!the :c:type:`drm_gpuva` to removeh](hthe }(hjqhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj{h]h drm_gpuva}(hj}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjmhMhjqubh to remove}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj3ubh)}(h>This removes the given :c:type:`va` from the underlaying tree.h](hThis removes the given }(hjhhhNhNubh)}(h :c:type:`va`h]j)}(hjh]hva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3vauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh from the underlaying tree.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj3ubh)}(hIt is safe to use this function using the safe versions of iterating the GPU VA space, such as drm_gpuvm_for_each_va_safe() and drm_gpuvm_for_each_va_range_safe().h]hIt is safe to use this function using the safe versions of iterating the GPU VA space, such as drm_gpuvm_for_each_va_safe() and drm_gpuvm_for_each_va_range_safe().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_link (C function)c.drm_gpuva_linkhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hFvoid drm_gpuva_link (struct drm_gpuva *va, struct drm_gpuvm_bo *vm_bo)h]j>)}(hEvoid drm_gpuva_link(struct drm_gpuva *va, struct drm_gpuvm_bo *vm_bo)h](jc)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj)hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM%ubjV)}(h h]h }(hj<hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj)hhhj;hM%ubjg)}(hdrm_gpuva_linkh]jm)}(hdrm_gpuva_linkh]hdrm_gpuva_link}(hjNhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj)hhhj;hM%ubj)}(h2(struct drm_gpuva *va, struct drm_gpuvm_bo *vm_bo)h](j)}(hstruct drm_gpuva *vah](jD)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjfubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjPsbc.drm_gpuva_linkasbuh1hhjfubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjm)}(hvah]hva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hstruct drm_gpuvm_bo *vm_boh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuva_linkasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvm_boh]hvm_bo}(hj3hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubeh}(h]h ]h"]h$]h&]jjuh1jhj)hhhj;hM%ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj%hhhj;hM%ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj;hM%hj"hhubj)}(hhh]h)}(hlink a :c:type:`drm_gpuva`h](hlink a }(hj]hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjgh]h drm_gpuva}(hjihhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_linkasbj3 drm_gpuvauh1hhj̠hMhj]ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hM%ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to link ``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to add the :c:type:`drm_gpuva` to **Description** This adds the given :c:type:`va` to the GPU VA list of the :c:type:`drm_gpuvm_bo` and the :c:type:`drm_gpuvm_bo` to the :c:type:`drm_gem_object` it is associated with. For every :c:type:`drm_gpuva` entry added to the :c:type:`drm_gpuvm_bo` an additional reference of the latter is taken. This function expects the caller to protect the GEM's GPUVA list against concurrent access using either the GEMs dma_resv lock or a driver specific lock set through drm_gem_gpuva_set_lock().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(h9``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to link h](j)}(h``struct drm_gpuva *va``h]j)}(hjh]hstruct drm_gpuva *va}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hthe :c:type:`drm_gpuva` to linkh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjhMhjubh to link}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h\``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to add the :c:type:`drm_gpuva` to h](j)}(h``struct drm_gpuvm_bo *vm_bo``h]j)}(hjh]hstruct drm_gpuvm_bo *vm_bo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h)}(h+void drm_gpuva_unlink(struct drm_gpuva *va)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMIubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMIubjg)}(hdrm_gpuva_unlinkh]jm)}(hdrm_gpuva_unlinkh]hdrm_gpuva_unlink}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMIubj)}(h(struct drm_gpuva *va)h]j)}(hstruct drm_gpuva *vah](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j)}jjsbc.drm_gpuva_unlinkasbuh1hhj ubjV)}(h h]h }(hjOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hvah]hva}(hjjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMIubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMIubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMIhjhhubj)}(hhh]h)}(hunlink a :c:type:`drm_gpuva`h](h unlink a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jKc.drm_gpuva_unlinkasbj3 drm_gpuvauh1hhj̠hMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM8hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMIubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to unlink **Description** This removes the given :c:type:`va` from the GPU VA list of the :c:type:`drm_gem_object` it is associated with. This removes the given :c:type:`va` from the GPU VA list of the :c:type:`drm_gpuvm_bo` and the :c:type:`drm_gpuvm_bo` from the :c:type:`drm_gem_object` it is associated with in case this call unlinks the last :c:type:`drm_gpuva` from the :c:type:`drm_gpuvm_bo`. For every :c:type:`drm_gpuva` entry removed from the :c:type:`drm_gpuvm_bo` a reference of the latter is dropped. This function expects the caller to protect the GEM's GPUVA list against concurrent access using either the GEMs dma_resv lock or a driver specific lock set through drm_gem_gpuva_set_lock().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM<hjubj)}(hhh]j)}(h;``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to unlink h](j)}(h``struct drm_gpuva *va``h]j)}(hjh]hstruct drm_gpuva *va}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM9hjubj )}(hhh]h)}(h!the :c:type:`drm_gpuva` to unlinkh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjhM9hjubh to unlink}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM;hjubh)}(hoThis removes the given :c:type:`va` from the GPU VA list of the :c:type:`drm_gem_object` it is associated with.h](hThis removes the given }(hjmhhhNhNubh)}(h :c:type:`va`h]j)}(hjwh]hva}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3vauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM;hjmubh from the GPU VA list of the }(hjmhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhM;hjmubh it is associated with.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM;hjubh)}(hXThis removes the given :c:type:`va` from the GPU VA list of the :c:type:`drm_gpuvm_bo` and the :c:type:`drm_gpuvm_bo` from the :c:type:`drm_gem_object` it is associated with in case this call unlinks the last :c:type:`drm_gpuva` from the :c:type:`drm_gpuvm_bo`.h](hThis removes the given }(hjhhhNhNubh)}(h :c:type:`va`h]j)}(hjh]hva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3vauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM>hjubh from the GPU VA list of the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhM>hjubh and the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhM>hjubh from the }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj6h]hdrm_gem_object}(hj8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhM>hjubh: it is associated with in case this call unlinks the last }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjYh]h drm_gpuva}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjhM>hjubh from the }hjsbh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj|h]h drm_gpuvm_bo}(hj~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhM>hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM>hjubh)}(hqFor every :c:type:`drm_gpuva` entry removed from the :c:type:`drm_gpuvm_bo` a reference of the latter is dropped.h](h For every }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMBhjubh entry removed from the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjhMBhjubh& a reference of the latter is dropped.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMBhjubh)}(hThis function expects the caller to protect the GEM's GPUVA list against concurrent access using either the GEMs dma_resv lock or a driver specific lock set through drm_gem_gpuva_set_lock().h]hThis function expects the caller to protect the GEM’s GPUVA list against concurrent access using either the GEMs dma_resv lock or a driver specific lock set through drm_gem_gpuva_set_lock().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_gpuva_find_first (C function)c.drm_gpuva_find_firsthNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hVstruct drm_gpuva * drm_gpuva_find_first (struct drm_gpuvm *gpuvm, u64 addr, u64 range)h]j>)}(hTstruct drm_gpuva *drm_gpuva_find_first(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jD)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMbubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#hhhj4hMbubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjFhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jdrm_gpuva_find_firstsbc.drm_gpuva_find_firstasbuh1hhj#hhhj4hMbubjV)}(h h]h }(hjghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#hhhj4hMbubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj4hMbubjg)}(hdrm_gpuva_find_firsth]jm)}(hjdh]hdrm_gpuva_find_first}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj#hhhj4hMbubj)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jbc.drm_gpuva_find_firstasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 addrh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jbc.drm_gpuva_find_firstasbuh1hhj ubjV)}(h h]h }(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjm)}(haddrh]haddr}(hj@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 rangeh](h)}(hhh]jm)}(hu64h]hu64}(hj\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]jbc.drm_gpuva_find_firstasbuh1hhjUubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUubjm)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj4hMbubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj4hMbubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj4hMbhjhhubj)}(hhh]h)}(h5find the first :c:type:`drm_gpuva` in the given rangeh](hfind the first }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jbc.drm_gpuva_find_firstasbj3 drm_gpuvauh1hhj̠hMhjubh in the given range}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM[hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in ``u64 addr`` the :c:type:`drm_gpuvas` address ``u64 range`` the :c:type:`drm_gpuvas` range **Return** the first :c:type:`drm_gpuva` within the given rangeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM_hjubj)}(hhh](j)}(hA``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM\hjubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm` to search inh](hthe }(hj4hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj>h]h drm_gpuvm}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj0hM\hj4ubh to search in}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hM\hj1ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj0hM\hjubj)}(h.``u64 addr`` the :c:type:`drm_gpuvas` address h](j)}(h ``u64 addr``h]j)}(hjwh]hu64 addr}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM]hjqubj )}(hhh]h)}(h the :c:type:`drm_gpuvas` addressh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hjh]h drm_gpuvas}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhjhM]hjubh address}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM]hjubah}(h]h ]h"]h$]h&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubj)}(h-``u64 range`` the :c:type:`drm_gpuvas` range h](j)}(h ``u64 range``h]j)}(hjh]h u64 range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM^hjubj )}(hhh]h)}(hthe :c:type:`drm_gpuvas` rangeh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hjh]h drm_gpuvas}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhjhM^hjubh range}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM^hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hj1h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM`hjubh)}(h4the first :c:type:`drm_gpuva` within the given rangeh](h the first }(hjGhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjQh]h drm_gpuva}(hjShhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM`hjGubh within the given range}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhM`hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_find (C function)c.drm_gpuva_findhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hPstruct drm_gpuva * drm_gpuva_find (struct drm_gpuvm *gpuvm, u64 addr, u64 range)h]j>)}(hNstruct drm_gpuva *drm_gpuva_find(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMtubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMtubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gpuva_findsbc.drm_gpuva_findasbuh1hhjhhhjhMtubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMtubjg)}(hdrm_gpuva_findh]jm)}(hjh]hdrm_gpuva_find}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMtubj)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]jc.drm_gpuva_findasbuh1hhjubjV)}(h h]h }(hjOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hu64 addrh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuva_findasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h u64 rangeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuva_findasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMtubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMtubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMthjhhubj)}(hhh]h)}(hfind a :c:type:`drm_gpuva`h](hfind a }(hj$hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj.h]h drm_gpuva}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_findasbj3 drm_gpuvauh1hhj̠hMhj$ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMmhj!hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMtubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in ``u64 addr`` the :c:type:`drm_gpuvas` address ``u64 range`` the :c:type:`drm_gpuvas` range **Return** the :c:type:`drm_gpuva` at a given :c:type:`addr` and with a given :c:type:`range`h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMqhjdubj)}(hhh](j)}(hA``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMnhjubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm` to search inh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhMnhjubh to search in}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubj)}(h.``u64 addr`` the :c:type:`drm_gpuvas` address h](j)}(h ``u64 addr``h]j)}(hjh]hu64 addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMohjubj )}(hhh]h)}(h the :c:type:`drm_gpuvas` addressh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hjh]h drm_gpuvas}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhjhMohjubh address}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMohjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMohjubj)}(h-``u64 range`` the :c:type:`drm_gpuvas` range h](j)}(h ``u64 range``h]j)}(hjAh]h u64 range}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMphj;ubj )}(hhh]h)}(hthe :c:type:`drm_gpuvas` rangeh](hthe }(hjZhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j)}(hjdh]h drm_gpuvas}(hjfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvasuh1hhjVhMphjZubh range}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhMphjWubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMphjubeh}(h]h ]h"]h$]h&]uh1jhjdubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMrhjdubh)}(hRthe :c:type:`drm_gpuva` at a given :c:type:`addr` and with a given :c:type:`range`h](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMrhjubh at a given }(hjhhhNhNubh)}(h:c:type:`addr`h]j)}(hjh]haddr}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3addruh1hhjhMrhjubh and with a given }(hjhhhNhNubh)}(h:c:type:`range`h]j)}(hjh]hrange}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3rangeuh1hhjhMrhjubeh}(h]h ]h"]h$]h&]uh1hhjhMrhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gpuva_find_prev (C function)c.drm_gpuva_find_prevhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hKstruct drm_gpuva * drm_gpuva_find_prev (struct drm_gpuvm *gpuvm, u64 start)h]j>)}(hIstruct drm_gpuva *drm_gpuva_find_prev(struct drm_gpuvm *gpuvm, u64 start)h](jD)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjEhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjEhhhjVhMubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j)}jdrm_gpuva_find_prevsbc.drm_gpuva_find_prevasbuh1hhjEhhhjVhMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjEhhhjVhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjVhMubjg)}(hdrm_gpuva_find_prevh]jm)}(hjh]hdrm_gpuva_find_prev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjEhhhjVhMubj)}(h$(struct drm_gpuvm *gpuvm, u64 start)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuva_find_prevasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 starth](h)}(hhh]jm)}(hu64h]hu64}(hj6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]jc.drm_gpuva_find_prevasbuh1hhj/ubjV)}(h h]h }(hjThhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/ubjm)}(hstarth]hstart}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjEhhhjVhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjAhhhjVhMubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1j7hjVhMhj>hhubj)}(hhh]h)}(h5find the :c:type:`drm_gpuva` before the given addressh](h find the }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_find_prevasbj3 drm_gpuvauh1hhj̠hMhjubh before the given address}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjVhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in ``u64 start`` the given GPU VA's start address **Description** Find the adjacent :c:type:`drm_gpuva` before the GPU VA with given :c:type:`start` address. Note that if there is any free space between the GPU VA mappings no mapping is returned. **Return** a pointer to the found :c:type:`drm_gpuva` or NULL if none was foundh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(hA``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm` to search inh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj hMhjubh to search in}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h/``u64 start`` the given GPU VA's start address h](j)}(h ``u64 start``h]j)}(hjQh]h u64 start}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjKubj )}(hhh]h)}(h the given GPU VA's start addressh]h"the given GPU VA’s start address}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h[Find the adjacent :c:type:`drm_gpuva` before the GPU VA with given :c:type:`start` address.h](hFind the adjacent }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh before the GPU VA with given }(hjhhhNhNubh)}(h:c:type:`start`h]j)}(hjh]hstart}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3startuh1hhjhMhjubh address.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hXNote that if there is any free space between the GPU VA mappings no mapping is returned.h]hXNote that if there is any free space between the GPU VA mappings no mapping is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hDa pointer to the found :c:type:`drm_gpuva` or NULL if none was foundh](ha pointer to the found }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hj(h]h drm_gpuva}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh or NULL if none was found}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjEhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_gpuva_find_next (C function)c.drm_gpuva_find_nexthNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hIstruct drm_gpuva * drm_gpuva_find_next (struct drm_gpuvm *gpuvm, u64 end)h]j>)}(hGstruct drm_gpuva *drm_gpuva_find_next(struct drm_gpuvm *gpuvm, u64 end)h](jD)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjlhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hj~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlhhhj}hMubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gpuva_find_nextsbc.drm_gpuva_find_nextasbuh1hhjlhhhj}hMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlhhhj}hMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj}hMubjg)}(hdrm_gpuva_find_nexth]jm)}(hjh]hdrm_gpuva_find_next}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjlhhhj}hMubj)}(h"(struct drm_gpuvm *gpuvm, u64 end)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_gpuva_find_nextasbuh1hhjubjV)}(h h]h }(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjAhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 endh](h)}(hhh]jm)}(hu64h]hu64}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]jc.drm_gpuva_find_nextasbuh1hhjVubjV)}(h h]h }(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVubjm)}(hendh]hend}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhj}hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhhj}hMubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1j7hj}hMhjehhubj)}(hhh]h)}(h4find the :c:type:`drm_gpuva` after the given addressh](h find the }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_find_nextasbj3 drm_gpuvauh1hhj̠hMhjubh after the given address}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj}hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in ``u64 end`` the given GPU VA's end address **Description** Find the adjacent :c:type:`drm_gpuva` after the GPU VA with given :c:type:`end` address. Note that if there is any free space between the GPU VA mappings no mapping is returned. **Return** a pointer to the found :c:type:`drm_gpuva` or NULL if none was foundh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(hA``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h$the :c:type:`drm_gpuvm` to search inh](hthe }(hj5hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj?h]h drm_gpuvm}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj1hMhj5ubh to search in}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h+``u64 end`` the given GPU VA's end address h](j)}(h ``u64 end``h]j)}(hjxh]hu64 end}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjrubj )}(hhh]h)}(hthe given GPU VA's end addressh]h the given GPU VA’s end address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hXFind the adjacent :c:type:`drm_gpuva` after the GPU VA with given :c:type:`end` address.h](hFind the adjacent }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh after the GPU VA with given }(hjhhhNhNubh)}(h :c:type:`end`h]j)}(hjh]hend}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3enduh1hhjhMhjubh address.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hXNote that if there is any free space between the GPU VA mappings no mapping is returned.h]hXNote that if there is any free space between the GPU VA mappings no mapping is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h **Return**h]j)}(hj/h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hDa pointer to the found :c:type:`drm_gpuva` or NULL if none was foundh](ha pointer to the found }(hjEhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjOh]h drm_gpuva}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjEubh or NULL if none was found}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjlhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_gpuvm_interval_empty (C function)c.drm_gpuvm_interval_emptyhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hLbool drm_gpuvm_interval_empty (struct drm_gpuvm *gpuvm, u64 addr, u64 range)h]j>)}(hKbool drm_gpuvm_interval_empty(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuvm_interval_emptyh]jm)}(hdrm_gpuvm_interval_emptyh]hdrm_gpuvm_interval_empty}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_interval_emptyasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 addrh](h)}(hhh]jm)}(hu64h]hu64}(hjHhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j c.drm_gpuvm_interval_emptyasbuh1hhjAubjV)}(h h]h }(hjfhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAubjm)}(haddrh]haddr}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 rangeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_gpuvm_interval_emptyasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h:indicate whether a given interval of the VA space is emptyh]h:indicate whether a given interval of the VA space is empty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to check the range for ``u64 addr`` the start address of the range ``u64 range`` the range of the interval **Return** true if the interval is empty, false otherwiseh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(hK``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to check the range for h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hj'h]hstruct drm_gpuvm *gpuvm}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj!ubj )}(hhh]h)}(h.the :c:type:`drm_gpuvm` to check the range forh](hthe }(hj@hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjJh]h drm_gpuvm}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj<hMhj@ubh to check the range for}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhj=ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubj)}(h,``u64 addr`` the start address of the range h](j)}(h ``u64 addr``h]j)}(hjh]hu64 addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj}ubj )}(hhh]h)}(hthe start address of the rangeh]hthe start address of the range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``u64 range`` the range of the interval h](j)}(h ``u64 range``h]j)}(hjh]h u64 range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hthe range of the intervalh]hthe range of the interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h.true if the interval is empty, false otherwiseh]h.true if the interval is empty, false otherwise}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_map (C function)c.drm_gpuva_maphNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h_void drm_gpuva_map (struct drm_gpuvm *gpuvm, struct drm_gpuva *va, struct drm_gpuva_op_map *op)h]j>)}(h^void drm_gpuva_map(struct drm_gpuvm *gpuvm, struct drm_gpuva *va, struct drm_gpuva_op_map *op)h](jc)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj8hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8hhhjJhMubjg)}(h drm_gpuva_maph]jm)}(h drm_gpuva_maph]h drm_gpuva_map}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj8hhhjJhMubj)}(hL(struct drm_gpuvm *gpuvm, struct drm_gpuva *va, struct drm_gpuva_op_map *op)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj_sbc.drm_gpuva_mapasbuh1hhjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hstruct drm_gpuva *vah](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_gpuva_mapasbuh1hhjubjV)}(h h]h }(hj'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hvah]hva}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hstruct drm_gpuva_op_map *oph](jD)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjWubjV)}(h h]h }(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWubh)}(hhh]jm)}(hdrm_gpuva_op_maph]hdrm_gpuva_op_map}(hjyhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]jc.drm_gpuva_mapasbuh1hhjWubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjm)}(hoph]hop}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhjJhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj4hhhjJhMubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1j7hjJhMhj1hhubj)}(hhh]h)}(hPhelper to insert a :c:type:`drm_gpuva` according to a :c:type:`drm_gpuva_op_map`h](hhelper to insert a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_mapasbj3 drm_gpuvauh1hhj̠hMhjubh according to a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op_map`h]j)}(hjh]hdrm_gpuva_op_map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3drm_gpuva_op_mapuh1hhj̠hMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1j2hhhj17hNhNubj)}(hXA**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to insert ``struct drm_gpuva_op_map *op`` the :c:type:`drm_gpuva_op_map` to initialize **va** with **Description** Initializes the **va** from the **op** and inserts it into the given **gpuvm**.h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj?ubj)}(hhh](j)}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjdh]hstruct drm_gpuvm *gpuvm}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj^ubj )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hj}hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjyhMhj}ubeh}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubj)}(h;``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to insert h](j)}(h``struct drm_gpuva *va``h]j)}(hjh]hstruct drm_gpuva *va}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h!the :c:type:`drm_gpuva` to inserth](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjhMhjubh to insert}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj[ubj)}(hY``struct drm_gpuva_op_map *op`` the :c:type:`drm_gpuva_op_map` to initialize **va** with h](j)}(h``struct drm_gpuva_op_map *op``h]j)}(hjh]hstruct drm_gpuva_op_map *op}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(h8the :c:type:`drm_gpuva_op_map` to initialize **va** withh](hthe }(hj1hhhNhNubh)}(h:c:type:`drm_gpuva_op_map`h]j)}(hj;h]hdrm_gpuva_op_map}(hj=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_op_mapuh1hhj-hMhj1ubh to initialize }(hj1hhhNhNubj)}(h**va**h]hva}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh with}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj[ubeh}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj?ubh)}(hOInitializes the **va** from the **op** and inserts it into the given **gpuvm**.h](hInitializes the }(hjhhhNhNubj)}(h**va**h]hva}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh from the }(hjhhhNhNubj)}(h**op**h]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and inserts it into the given }(hjhhhNhNubj)}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_remap (C function)c.drm_gpuva_remaphNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hdvoid drm_gpuva_remap (struct drm_gpuva *prev, struct drm_gpuva *next, struct drm_gpuva_op_remap *op)h]j>)}(hcvoid drm_gpuva_remap(struct drm_gpuva *prev, struct drm_gpuva *next, struct drm_gpuva_op_remap *op)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuva_remaph]jm)}(hdrm_gpuva_remaph]hdrm_gpuva_remap}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hO(struct drm_gpuva *prev, struct drm_gpuva *next, struct drm_gpuva_op_remap *op)h](j)}(hstruct drm_gpuva *prevh](jD)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj<ubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<ubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j)}jj&sbc.drm_gpuva_remapasbuh1hhj<ubjV)}(h h]h }(hj~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjm)}(hprevh]hprev}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(hstruct drm_gpuva *nexth](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jzc.drm_gpuva_remapasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hnexth]hnext}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(hstruct drm_gpuva_op_remap *oph](jD)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpuva_op_remaph]hdrm_gpuva_op_remap}(hj@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jzc.drm_gpuva_remapasbuh1hhjubjV)}(h h]h }(hj^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hoph]hop}(hjyhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hQhelper to remap a :c:type:`drm_gpuva` according to a :c:type:`drm_gpuva_op_remap`h](hhelper to remap a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jzc.drm_gpuva_remapasbj3 drm_gpuvauh1hhj̠hMhjubh according to a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op_remap`h]j)}(hjh]hdrm_gpuva_op_remap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3drm_gpuva_op_remapuh1hhj̠hMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuva *prev`` the :c:type:`drm_gpuva` to remap when keeping the start of a mapping ``struct drm_gpuva *next`` the :c:type:`drm_gpuva` to remap when keeping the end of a mapping ``struct drm_gpuva_op_remap *op`` the :c:type:`drm_gpuva_op_remap` to initialize **prev** and **next** with **Description** Removes the currently mapped :c:type:`drm_gpuva` and remaps it using **prev** and/or **next**.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh](j)}(h```struct drm_gpuva *prev`` the :c:type:`drm_gpuva` to remap when keeping the start of a mapping h](j)}(h``struct drm_gpuva *prev``h]j)}(hj+h]hstruct drm_gpuva *prev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj%ubj )}(hhh]h)}(hDthe :c:type:`drm_gpuva` to remap when keeping the start of a mappingh](hthe }(hjDhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjNh]h drm_gpuva}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhj@hMhjDubh- to remap when keeping the start of a mapping}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj"ubj)}(h^``struct drm_gpuva *next`` the :c:type:`drm_gpuva` to remap when keeping the end of a mapping h](j)}(h``struct drm_gpuva *next``h]j)}(hjh]hstruct drm_gpuva *next}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hBthe :c:type:`drm_gpuva` to remap when keeping the end of a mappingh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjhMhjubh+ to remap when keeping the end of a mapping}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj"ubj)}(hl``struct drm_gpuva_op_remap *op`` the :c:type:`drm_gpuva_op_remap` to initialize **prev** and **next** with h](j)}(h!``struct drm_gpuva_op_remap *op``h]j)}(hjh]hstruct drm_gpuva_op_remap *op}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj )}(hhh]h)}(hIthe :c:type:`drm_gpuva_op_remap` to initialize **prev** and **next** withh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op_remap`h]j)}(hjh]hdrm_gpuva_op_remap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_op_remapuh1hhjhMhjubh to initialize }(hjhhhNhNubj)}(h**prev**h]hprev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**next**h]hnext}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h^Removes the currently mapped :c:type:`drm_gpuva` and remaps it using **prev** and/or **next**.h](hRemoves the currently mapped }(hj{hhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj{ubh and remaps it using }(hj{hhhNhNubj)}(h**prev**h]hprev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh and/or }(hj{hhhNhNubj)}(h**next**h]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_unmap (C function)c.drm_gpuva_unmaphNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(h4void drm_gpuva_unmap (struct drm_gpuva_op_unmap *op)h]j>)}(h3void drm_gpuva_unmap(struct drm_gpuva_op_unmap *op)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_gpuva_unmaph]jm)}(hdrm_gpuva_unmaph]hdrm_gpuva_unmap}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h(struct drm_gpuva_op_unmap *op)h]j)}(hstruct drm_gpuva_op_unmap *oph](jD)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj*ubjV)}(h h]h }(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*ubh)}(hhh]jm)}(hdrm_gpuva_op_unmaph]hdrm_gpuva_op_unmap}(hjLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]j)}jjsbc.drm_gpuva_unmapasbuh1hhj*ubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjm)}(hoph]hop}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hRhelper to remove a :c:type:`drm_gpuva` according to a :c:type:`drm_gpuva_op_unmap`h](hhelper to remove a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jhc.drm_gpuva_unmapasbj3 drm_gpuvauh1hhj̠hMhjubh according to a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op_unmap`h]j)}(hjh]hdrm_gpuva_op_unmap}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjjj3drm_gpuva_op_unmapuh1hhj̠hMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(h**Parameters** ``struct drm_gpuva_op_unmap *op`` the :c:type:`drm_gpuva_op_unmap` specifying the :c:type:`drm_gpuva` to remove **Description** Removes the :c:type:`drm_gpuva` associated with the :c:type:`drm_gpuva_op_unmap`.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubj)}(hhh]j)}(hp``struct drm_gpuva_op_unmap *op`` the :c:type:`drm_gpuva_op_unmap` specifying the :c:type:`drm_gpuva` to remove h](j)}(h!``struct drm_gpuva_op_unmap *op``h]j)}(hj9h]hstruct drm_gpuva_op_unmap *op}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj3ubj )}(hhh]h)}(hMthe :c:type:`drm_gpuva_op_unmap` specifying the :c:type:`drm_gpuva` to removeh](hthe }(hjRhhhNhNubh)}(h:c:type:`drm_gpuva_op_unmap`h]j)}(hj\h]hdrm_gpuva_op_unmap}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_op_unmapuh1hhjNhMhjRubh specifying the }(hjRhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhjNhMhjRubh to remove}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hQRemoves the :c:type:`drm_gpuva` associated with the :c:type:`drm_gpuva_op_unmap`.h](h Removes the }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j)}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhjubh associated with the }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op_unmap`h]j)}(hjh]hdrm_gpuva_op_unmap}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_op_unmapuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_sm_map (C function)c.drm_gpuvm_sm_maphNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hint drm_gpuvm_sm_map (struct drm_gpuvm *gpuvm, void *priv, u64 req_addr, u64 req_range, struct drm_gem_object *req_obj, u64 req_offset)h]j>)}(hint drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, void *priv, u64 req_addr, u64 req_range, struct drm_gem_object *req_obj, u64 req_offset)h](jc)}(hinth]hint}(hjE hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjA hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM ubjV)}(h h]h }(hjT hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjA hhhjS hM ubjg)}(hdrm_gpuvm_sm_maph]jm)}(hdrm_gpuvm_sm_maph]hdrm_gpuvm_sm_map}(hjf hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjb ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjA hhhjS hM ubj)}(hr(struct drm_gpuvm *gpuvm, void *priv, u64 req_addr, u64 req_range, struct drm_gem_object *req_obj, u64 req_offset)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj~ ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~ ubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjh sbc.drm_gpuvm_sm_mapasbuh1hhj~ ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~ ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ ubjm)}(hgpuvmh]hgpuvm}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj~ ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz ubj)}(h void *privh](jc)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hprivh]hpriv}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz ubj)}(h u64 req_addrh](h)}(hhh]jm)}(hu64h]hu64}(hj9 hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj; modnameN classnameNjj)}j]j c.drm_gpuvm_sm_mapasbuh1hhj2 ubjV)}(h h]h }(hjW hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2 ubjm)}(hreq_addrh]hreq_addr}(hje hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2 ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz ubj)}(h u64 req_rangeh](h)}(hhh]jm)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj~ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.drm_gpuvm_sm_mapasbuh1hhjz ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjz ubjm)}(h req_rangeh]h req_range}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjz ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz ubj)}(hstruct drm_gem_object *req_objh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.drm_gpuvm_sm_mapasbuh1hhj ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hreq_objh]hreq_obj}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz ubj)}(hu64 req_offseth](h)}(hhh]jm)}(hu64h]hu64}(hj9 hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj; modnameN classnameNjj)}j]j c.drm_gpuvm_sm_mapasbuh1hhj2 ubjV)}(h h]h }(hjW hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2 ubjm)}(h req_offseth]h req_offset}(hje hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2 ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz ubeh}(h]h ]h"]h$]h&]jjuh1jhjA hhhjS hM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj= hhhjS hM ubah}(h]j8 ah ](jjeh"]h$]h&]jj)jhuh1j7hjS hM hj: hhubj)}(hhh]h)}(h4creates the :c:type:`drm_gpuva_op` split/merge stepsh](h creates the }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j)}(hj h]h drm_gpuva_op}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j c.drm_gpuvm_sm_mapasbj3 drm_gpuva_opuh1hhj̠hMhj ubh split/merge steps}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj: hhhjS hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j2hhhj17hNhNubj)}(hX(**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``void *priv`` pointer to a driver private data structure ``u64 req_addr`` the start address of the new mapping ``u64 req_range`` the range of the new mapping ``struct drm_gem_object *req_obj`` the :c:type:`drm_gem_object` to map ``u64 req_offset`` the offset within the :c:type:`drm_gem_object` **Description** This function iterates the given range of the GPU VA space. It utilizes the :c:type:`drm_gpuvm_ops` to call back into the driver providing the split and merge steps. Drivers may use these callbacks to update the GPU VA space right away within the callback. In case the driver decides to copy and store the operations for later processing neither this function nor :c:type:`drm_gpuvm_sm_unmap` is allowed to be called before the :c:type:`drm_gpuvm`'s view of the GPU VA space was updated with the previous set of operations. To update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used. A sequence of callbacks can contain map, unmap and remap operations, but the sequence of callbacks might also be empty if no operation is required, e.g. if the requested mapping already exists in the exact same way. There can be an arbitrary amount of unmap operations, a maximum of two remap operations and a single map operation. The latter one represents the original map operation requested by the caller. **Return** 0 on success or a negative error codeh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubj)}(hhh](j)}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hj h]hstruct drm_gpuvm *gpuvm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMhj ubj )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj h]h drm_gpuvm}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj hMhj ubh representing the GPU VA space}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h:``void *priv`` pointer to a driver private data structure h](j)}(h``void *priv``h]j)}(hjT h]h void *priv}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjN ubj )}(hhh]h)}(h*pointer to a driver private data structureh]h*pointer to a driver private data structure}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji hM hjj ubah}(h]h ]h"]h$]h&]uh1j hjN ubeh}(h]h ]h"]h$]h&]uh1jhji hM hj ubj)}(h6``u64 req_addr`` the start address of the new mapping h](j)}(h``u64 req_addr``h]j)}(hj h]h u64 req_addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubj )}(hhh]h)}(h$the start address of the new mappingh]h$the start address of the new mapping}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubj)}(h/``u64 req_range`` the range of the new mapping h](j)}(h``u64 req_range``h]j)}(hj h]h u64 req_range}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubj )}(hhh]h)}(hthe range of the new mappingh]hthe range of the new mapping}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubj)}(hG``struct drm_gem_object *req_obj`` the :c:type:`drm_gem_object` to map h](j)}(h"``struct drm_gem_object *req_obj``h]j)}(hj h]hstruct drm_gem_object *req_obj}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubj )}(hhh]h)}(h#the :c:type:`drm_gem_object` to maph](hthe }(hj hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj" h]hdrm_gem_object}(hj$ hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhj hM hj ubh to map}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubj)}(hB``u64 req_offset`` the offset within the :c:type:`drm_gem_object` h](j)}(h``u64 req_offset``h]j)}(hj[ h]hu64 req_offset}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjU ubj )}(hhh]h)}(h.the offset within the :c:type:`drm_gem_object`h](hthe offset within the }(hjt hhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hj~ h]hdrm_gem_object}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj| ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjp hM hjt ubeh}(h]h ]h"]h$]h&]uh1hhjp hM hjq ubah}(h]h ]h"]h$]h&]uh1j hjU ubeh}(h]h ]h"]h$]h&]uh1jhjp hM hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubh)}(hThis function iterates the given range of the GPU VA space. It utilizes the :c:type:`drm_gpuvm_ops` to call back into the driver providing the split and merge steps.h](hLThis function iterates the given range of the GPU VA space. It utilizes the }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j)}(hj h]h drm_gpuvm_ops}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubhB to call back into the driver providing the split and merge steps.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM hj ubh)}(hXDrivers may use these callbacks to update the GPU VA space right away within the callback. In case the driver decides to copy and store the operations for later processing neither this function nor :c:type:`drm_gpuvm_sm_unmap` is allowed to be called before the :c:type:`drm_gpuvm`'s view of the GPU VA space was updated with the previous set of operations. To update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.h](hDrivers may use these callbacks to update the GPU VA space right away within the callback. In case the driver decides to copy and store the operations for later processing neither this function nor }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j)}(hjh]hdrm_gpuvm_sm_unmap}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_unmapuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubh$ is allowed to be called before the }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hj+h]h drm_gpuvm}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj$hM hj ubh]’s view of the GPU VA space was updated with the previous set of operations. To update the }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjNh]h drm_gpuvm}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhj$hM hj ubh’s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hM hj ubh)}(hA sequence of callbacks can contain map, unmap and remap operations, but the sequence of callbacks might also be empty if no operation is required, e.g. if the requested mapping already exists in the exact same way.h]hA sequence of callbacks can contain map, unmap and remap operations, but the sequence of callbacks might also be empty if no operation is required, e.g. if the requested mapping already exists in the exact same way.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubh)}(hThere can be an arbitrary amount of unmap operations, a maximum of two remap operations and a single map operation. The latter one represents the original map operation requested by the caller.h]hThere can be an arbitrary amount of unmap operations, a maximum of two remap operations and a single map operation. The latter one represents the original map operation requested by the caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubh)}(h%0 on success or a negative error codeh]h%0 on success or a negative error code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuvm_sm_unmap (C function)c.drm_gpuvm_sm_unmaphNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hYint drm_gpuvm_sm_unmap (struct drm_gpuvm *gpuvm, void *priv, u64 req_addr, u64 req_range)h]j>)}(hXint drm_gpuvm_sm_unmap(struct drm_gpuvm *gpuvm, void *priv, u64 req_addr, u64 req_range)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMJ ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMJ ubjg)}(hdrm_gpuvm_sm_unmaph]jm)}(hdrm_gpuvm_sm_unmaph]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMJ ubj)}(hB(struct drm_gpuvm *gpuvm, void *priv, u64 req_addr, u64 req_range)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j)}jjsbc.drm_gpuvm_sm_unmapasbuh1hhjubjV)}(h h]h }(hjUhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hgpuvmh]hgpuvm}(hjphhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *privh](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hprivh]hpriv}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 req_addrh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jQc.drm_gpuvm_sm_unmapasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hreq_addrh]hreq_addr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 req_rangeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jQc.drm_gpuvm_sm_unmapasbuh1hhjubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h req_rangeh]h req_range}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMJ ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMJ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMJ hjhhubj)}(hhh]h)}(h5creates the :c:type:`drm_gpuva_ops` to split on unmaph](h creates the }(hjlhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjvh]h drm_gpuva_ops}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jQc.drm_gpuvm_sm_unmapasbj3 drm_gpuva_opsuh1hhj̠hMhjlubh to split on unmap}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM0 hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMJ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``void *priv`` pointer to a driver private data structure ``u64 req_addr`` the start address of the range to unmap ``u64 req_range`` the range of the mappings to unmap **Description** This function iterates the given range of the GPU VA space. It utilizes the :c:type:`drm_gpuvm_ops` to call back into the driver providing the operations to unmap and, if required, split existent mappings. Drivers may use these callbacks to update the GPU VA space right away within the callback. In case the driver decides to copy and store the operations for later processing neither this function nor :c:type:`drm_gpuvm_sm_map` is allowed to be called before the :c:type:`drm_gpuvm`'s view of the GPU VA space was updated with the previous set of operations. To update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used. A sequence of callbacks can contain unmap and remap operations, depending on whether there are actual overlapping mappings to split. There can be an arbitrary amount of unmap operations and a maximum of two remap operations. **Return** 0 on success or a negative error codeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM4 hjubj)}(hhh](j)}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM1 hjubj )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhM1 hjubh representing the GPU VA space}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM1 hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM1 hjubj)}(h:``void *priv`` pointer to a driver private data structure h](j)}(h``void *priv``h]j)}(hj1h]h void *priv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM2 hj+ubj )}(hhh]h)}(h*pointer to a driver private data structureh]h*pointer to a driver private data structure}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhM2 hjGubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM2 hjubj)}(h9``u64 req_addr`` the start address of the range to unmap h](j)}(h``u64 req_addr``h]j)}(hjjh]h u64 req_addr}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM3 hjdubj )}(hhh]h)}(h'the start address of the range to unmaph]h'the start address of the range to unmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3 hjubah}(h]h ]h"]h$]h&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1jhjhM3 hjubj)}(h5``u64 req_range`` the range of the mappings to unmap h](j)}(h``u64 req_range``h]j)}(hjh]h u64 req_range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM4 hjubj )}(hhh]h)}(h"the range of the mappings to unmaph]h"the range of the mappings to unmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4 hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM4 hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM6 hjubh)}(hThis function iterates the given range of the GPU VA space. It utilizes the :c:type:`drm_gpuvm_ops` to call back into the driver providing the operations to unmap and, if required, split existent mappings.h](hLThis function iterates the given range of the GPU VA space. It utilizes the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j)}(hjh]h drm_gpuvm_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM6 hjubhj to call back into the driver providing the operations to unmap and, if required, split existent mappings.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM6 hjubh)}(hXDrivers may use these callbacks to update the GPU VA space right away within the callback. In case the driver decides to copy and store the operations for later processing neither this function nor :c:type:`drm_gpuvm_sm_map` is allowed to be called before the :c:type:`drm_gpuvm`'s view of the GPU VA space was updated with the previous set of operations. To update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.h](hDrivers may use these callbacks to update the GPU VA space right away within the callback. In case the driver decides to copy and store the operations for later processing neither this function nor }(hj&hhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j)}(hj0h]hdrm_gpuvm_sm_map}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuvm_sm_mapuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM: hj&ubh$ is allowed to be called before the }(hj&hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjTh]h drm_gpuvm}(hjVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjMhM: hj&ubh]’s view of the GPU VA space was updated with the previous set of operations. To update the }(hj&hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjwh]h drm_gpuvm}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjMhM: hj&ubh’s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhM: hjubh)}(hA sequence of callbacks can contain unmap and remap operations, depending on whether there are actual overlapping mappings to split.h]hA sequence of callbacks can contain unmap and remap operations, depending on whether there are actual overlapping mappings to split.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMB hjubh)}(h[There can be an arbitrary amount of unmap operations and a maximum of two remap operations.h]h[There can be an arbitrary amount of unmap operations and a maximum of two remap operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chME hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMH hjubh)}(h%0 on success or a negative error codeh]h%0 on success or a negative error code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMH hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.(drm_gpuvm_sm_map_ops_create (C function)c.drm_gpuvm_sm_map_ops_createhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hstruct drm_gpuva_ops * drm_gpuvm_sm_map_ops_create (struct drm_gpuvm *gpuvm, u64 req_addr, u64 req_range, struct drm_gem_object *req_obj, u64 req_offset)h]j>)}(hstruct drm_gpuva_ops *drm_gpuvm_sm_map_ops_create(struct drm_gpuvm *gpuvm, u64 req_addr, u64 req_range, struct drm_gem_object *req_obj, u64 req_offset)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM ubh)}(hhh]jm)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hj"hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j)}jdrm_gpuvm_sm_map_ops_createsbc.drm_gpuvm_sm_map_ops_createasbuh1hhjhhhjhM ubjV)}(h h]h }(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM ubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubjg)}(hdrm_gpuvm_sm_map_ops_createh]jm)}(hj@h]hdrm_gpuvm_sm_map_ops_create}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM ubj)}(hf(struct drm_gpuvm *gpuvm, u64 req_addr, u64 req_range, struct drm_gem_object *req_obj, u64 req_offset)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjyubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>c.drm_gpuvm_sm_map_ops_createasbuh1hhjyubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(h u64 req_addrh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>c.drm_gpuvm_sm_map_ops_createasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hreq_addrh]hreq_addr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(h u64 req_rangeh](h)}(hhh]jm)}(hu64h]hu64}(hj8hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j>c.drm_gpuvm_sm_map_ops_createasbuh1hhj1ubjV)}(h h]h }(hjVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1ubjm)}(h req_rangeh]h req_range}(hjdhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(hstruct drm_gem_object *req_objh](jD)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjyubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>c.drm_gpuvm_sm_map_ops_createasbuh1hhjyubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjm)}(hreq_objh]hreq_obj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(hu64 req_offseth](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>c.drm_gpuvm_sm_map_ops_createasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h req_offseth]h req_offset}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM hjhhubj)}(hhh]h)}(h6creates the :c:type:`drm_gpuva_ops` to split and mergeh](h creates the }(hjFhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjPh]h drm_gpuva_ops}(hjRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j>c.drm_gpuvm_sm_map_ops_createasbj3 drm_gpuva_opsuh1hhj̠hMhjFubh to split and merge}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjChhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX#**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``u64 req_addr`` the start address of the new mapping ``u64 req_range`` the range of the new mapping ``struct drm_gem_object *req_obj`` the :c:type:`drm_gem_object` to map ``u64 req_offset`` the offset within the :c:type:`drm_gem_object` **Description** This function creates a list of operations to perform splitting and merging of existent mapping(s) with the newly requested one. The list can be iterated with :c:type:`drm_gpuva_for_each_op` and must be processed in the given order. It can contain map, unmap and remap operations, but it also can be empty if no operation is required, e.g. if the requested mapping already exists is the exact same way. There can be an arbitrary amount of unmap operations, a maximum of two remap operations and a single map operation. The latter one represents the original map operation requested by the caller. Note that before calling this function again with another mapping request it is necessary to update the :c:type:`drm_gpuvm`'s view of the GPU VA space. The previously obtained operations must be either processed or abandoned. To update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used. After the caller finished processing the returned :c:type:`drm_gpuva_ops`, they must be freed with :c:type:`drm_gpuva_ops_free`. **Return** a pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubj)}(hhh](j)}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubj )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhM hjubh representing the GPU VA space}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h6``u64 req_addr`` the start address of the new mapping h](j)}(h``u64 req_addr``h]j)}(hj h]h u64 req_addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubj )}(hhh]h)}(h$the start address of the new mappingh]h$the start address of the new mapping}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj!ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h/``u64 req_range`` the range of the new mapping h](j)}(h``u64 req_range``h]j)}(hjDh]h u64 req_range}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj>ubj )}(hhh]h)}(hthe range of the new mappingh]hthe range of the new mapping}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhM hjZubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM hjubj)}(hG``struct drm_gem_object *req_obj`` the :c:type:`drm_gem_object` to map h](j)}(h"``struct drm_gem_object *req_obj``h]j)}(hj}h]hstruct drm_gem_object *req_obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjwubj )}(hhh]h)}(h#the :c:type:`drm_gem_object` to maph](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhM hjubh to map}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjwubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hB``u64 req_offset`` the offset within the :c:type:`drm_gem_object` h](j)}(h``u64 req_offset``h]j)}(hjh]hu64 req_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubj )}(hhh]h)}(h.the offset within the :c:type:`drm_gem_object`h](hthe offset within the }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gem_objectuh1hhjhM hjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubh)}(hThis function creates a list of operations to perform splitting and merging of existent mapping(s) with the newly requested one.h]hThis function creates a list of operations to perform splitting and merging of existent mapping(s) with the newly requested one.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubh)}(hXThe list can be iterated with :c:type:`drm_gpuva_for_each_op` and must be processed in the given order. It can contain map, unmap and remap operations, but it also can be empty if no operation is required, e.g. if the requested mapping already exists is the exact same way.h](hThe list can be iterated with }(hjXhhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j)}(hjbh]hdrm_gpuva_for_each_op}(hjdhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjXubh and must be processed in the given order. It can contain map, unmap and remap operations, but it also can be empty if no operation is required, e.g. if the requested mapping already exists is the exact same way.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubh)}(hThere can be an arbitrary amount of unmap operations, a maximum of two remap operations and a single map operation. The latter one represents the original map operation requested by the caller.h]hThere can be an arbitrary amount of unmap operations, a maximum of two remap operations and a single map operation. The latter one represents the original map operation requested by the caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubh)}(hXNote that before calling this function again with another mapping request it is necessary to update the :c:type:`drm_gpuvm`'s view of the GPU VA space. The previously obtained operations must be either processed or abandoned. To update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.h](hhNote that before calling this function again with another mapping request it is necessary to update the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubhw’s view of the GPU VA space. The previously obtained operations must be either processed or abandoned. To update the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhM hjubh’s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubh)}(hAfter the caller finished processing the returned :c:type:`drm_gpuva_ops`, they must be freed with :c:type:`drm_gpuva_ops_free`.h](h2After the caller finished processing the returned }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubh, they must be freed with }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_ops_free`h]j)}(hjh]hdrm_gpuva_ops_free}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_ops_freeuh1hhjhM hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubh)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubh)}(hJa pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](ha pointer to the }(hj[hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjeh]h drm_gpuva_ops}(hjghhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj[ubh" on success, an ERR_PTR on failure}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_gpuvm_sm_unmap_ops_create (C function)c.drm_gpuvm_sm_unmap_ops_createhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hkstruct drm_gpuva_ops * drm_gpuvm_sm_unmap_ops_create (struct drm_gpuvm *gpuvm, u64 req_addr, u64 req_range)h]j>)}(histruct drm_gpuva_ops *drm_gpuvm_sm_unmap_ops_create(struct drm_gpuvm *gpuvm, u64 req_addr, u64 req_range)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM ubh)}(hhh]jm)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jdrm_gpuvm_sm_unmap_ops_createsbc.drm_gpuvm_sm_unmap_ops_createasbuh1hhjhhhjhM ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubjg)}(hdrm_gpuvm_sm_unmap_ops_createh]jm)}(hjh]hdrm_gpuvm_sm_unmap_ops_create}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM ubj)}(h6(struct drm_gpuvm *gpuvm, u64 req_addr, u64 req_range)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#ubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjEhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jc.drm_gpuvm_sm_unmap_ops_createasbuh1hhj#ubjV)}(h h]h }(hjchhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjm)}(hgpuvmh]hgpuvm}(hj~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 req_addrh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_sm_unmap_ops_createasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hreq_addrh]hreq_addr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 req_rangeh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_sm_unmap_ops_createasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h req_rangeh]h req_range}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM hjhhubj)}(hhh]h)}(h5creates the :c:type:`drm_gpuva_ops` to split on unmaph](h creates the }(hj8hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjBh]h drm_gpuva_ops}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gpuvm_sm_unmap_ops_createasbj3 drm_gpuva_opsuh1hhj̠hMhj8ubh to split on unmap}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj5hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``u64 req_addr`` the start address of the range to unmap ``u64 req_range`` the range of the mappings to unmap **Description** This function creates a list of operations to perform unmapping and, if required, splitting of the mappings overlapping the unmap range. The list can be iterated with :c:type:`drm_gpuva_for_each_op` and must be processed in the given order. It can contain unmap and remap operations, depending on whether there are actual overlapping mappings to split. There can be an arbitrary amount of unmap operations and a maximum of two remap operations. Note that before calling this function again with another range to unmap it is necessary to update the :c:type:`drm_gpuvm`'s view of the GPU VA space. The previously obtained operations must be processed or abandoned. To update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used. After the caller finished processing the returned :c:type:`drm_gpuva_ops`, they must be freed with :c:type:`drm_gpuva_ops_free`. **Return** a pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj|ubj)}(hhh](j)}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubj )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhM hjubh representing the GPU VA space}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h9``u64 req_addr`` the start address of the range to unmap h](j)}(h``u64 req_addr``h]j)}(hjh]h u64 req_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubj )}(hhh]h)}(h'the start address of the range to unmaph]h'the start address of the range to unmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h5``u64 req_range`` the range of the mappings to unmap h](j)}(h``u64 req_range``h]j)}(hj6h]h u64 req_range}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj0ubj )}(hhh]h)}(h"the range of the mappings to unmaph]h"the range of the mappings to unmap}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM hjLubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM hjubeh}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj|ubh)}(hThis function creates a list of operations to perform unmapping and, if required, splitting of the mappings overlapping the unmap range.h]hThis function creates a list of operations to perform unmapping and, if required, splitting of the mappings overlapping the unmap range.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj|ubh)}(hThe list can be iterated with :c:type:`drm_gpuva_for_each_op` and must be processed in the given order. It can contain unmap and remap operations, depending on whether there are actual overlapping mappings to split.h](hThe list can be iterated with }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j)}(hjh]hdrm_gpuva_for_each_op}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubh and must be processed in the given order. It can contain unmap and remap operations, depending on whether there are actual overlapping mappings to split.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hj|ubh)}(h[There can be an arbitrary amount of unmap operations and a maximum of two remap operations.h]h[There can be an arbitrary amount of unmap operations and a maximum of two remap operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj|ubh)}(hXyNote that before calling this function again with another range to unmap it is necessary to update the :c:type:`drm_gpuvm`'s view of the GPU VA space. The previously obtained operations must be processed or abandoned. To update the :c:type:`drm_gpuvm`'s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.h](hgNote that before calling this function again with another range to unmap it is necessary to update the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubhp’s view of the GPU VA space. The previously obtained operations must be processed or abandoned. To update the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhM hjubh’s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hj|ubh)}(hAfter the caller finished processing the returned :c:type:`drm_gpuva_ops`, they must be freed with :c:type:`drm_gpuva_ops_free`.h](h2After the caller finished processing the returned }(hj,hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj6h]h drm_gpuva_ops}(hj8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj,ubh, they must be freed with }(hj,hhhNhNubh)}(h:c:type:`drm_gpuva_ops_free`h]j)}(hjZh]hdrm_gpuva_ops_free}(hj\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_ops_freeuh1hhjShM hj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjShM hj|ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj|ubh)}(hJa pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](ha pointer to the }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjubh" on success, an ERR_PTR on failure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_gpuvm_prefetch_ops_create (C function)c.drm_gpuvm_prefetch_ops_createhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hcstruct drm_gpuva_ops * drm_gpuvm_prefetch_ops_create (struct drm_gpuvm *gpuvm, u64 addr, u64 range)h]j>)}(hastruct drm_gpuva_ops *drm_gpuvm_prefetch_ops_create(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMG ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMG ubh)}(hhh]jm)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jdrm_gpuvm_prefetch_ops_createsbc.drm_gpuvm_prefetch_ops_createasbuh1hhjhhhjhMG ubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMG ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMG ubjg)}(hdrm_gpuvm_prefetch_ops_createh]jm)}(hj(h]hdrm_gpuvm_prefetch_ops_create}(hjJhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjFubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMG ubj)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjaubjV)}(h h]h }(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjaubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j&c.drm_gpuvm_prefetch_ops_createasbuh1hhjaubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjm)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hu64 addrh](h)}(hhh]jm)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j&c.drm_gpuvm_prefetch_ops_createasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(h u64 rangeh](h)}(hhh]jm)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j&c.drm_gpuvm_prefetch_ops_createasbuh1hhjubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hrangeh]hrange}(hjLhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMG ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMG ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMG hjhhubj)}(hhh]h)}(h/creates the :c:type:`drm_gpuva_ops` to prefetchh](h creates the }(hjvhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j&c.drm_gpuvm_prefetch_ops_createasbj3 drm_gpuva_opsuh1hhj̠hMhjvubh to prefetch}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM6 hjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMG ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``u64 addr`` the start address of the range to prefetch ``u64 range`` the range of the mappings to prefetch **Description** This function creates a list of operations to perform prefetching. The list can be iterated with :c:type:`drm_gpuva_for_each_op` and must be processed in the given order. It can contain prefetch operations. There can be an arbitrary amount of prefetch operations. After the caller finished processing the returned :c:type:`drm_gpuva_ops`, they must be freed with :c:type:`drm_gpuva_ops_free`. **Return** a pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM: hjubj)}(hhh](j)}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM7 hjubj )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhjhM7 hjubh representing the GPU VA space}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM7 hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM7 hjubj)}(h8``u64 addr`` the start address of the range to prefetch h](j)}(h ``u64 addr``h]j)}(hj;h]hu64 addr}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM8 hj5ubj )}(hhh]h)}(h*the start address of the range to prefetchh]h*the start address of the range to prefetch}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM8 hjQubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM8 hjubj)}(h4``u64 range`` the range of the mappings to prefetch h](j)}(h ``u64 range``h]j)}(hjth]h u64 range}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM9 hjnubj )}(hhh]h)}(h%the range of the mappings to prefetchh]h%the range of the mappings to prefetch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM9 hjubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1jhjhM9 hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM; hjubh)}(hBThis function creates a list of operations to perform prefetching.h]hBThis function creates a list of operations to perform prefetching.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM; hjubh)}(hThe list can be iterated with :c:type:`drm_gpuva_for_each_op` and must be processed in the given order. It can contain prefetch operations.h](hThe list can be iterated with }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j)}(hjh]hdrm_gpuva_for_each_op}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM= hjubhN and must be processed in the given order. It can contain prefetch operations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM= hjubh)}(h8There can be an arbitrary amount of prefetch operations.h]h8There can be an arbitrary amount of prefetch operations.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM@ hjubh)}(hAfter the caller finished processing the returned :c:type:`drm_gpuva_ops`, they must be freed with :c:type:`drm_gpuva_ops_free`.h](h2After the caller finished processing the returned }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj h]h drm_gpuva_ops}(hj! hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMB hj ubh, they must be freed with }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_ops_free`h]j)}(hjC h]hdrm_gpuva_ops_free}(hjE hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_ops_freeuh1hhj< hMB hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj< hMB hjubh)}(h **Return**h]j)}(hjl h]hReturn}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chME hjubh)}(hJa pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](ha pointer to the }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj h]h drm_gpuva_ops}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chME hj ubh" on success, an ERR_PTR on failure}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hME hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_gpuvm_bo_unmap_ops_create (C function)c.drm_gpuvm_bo_unmap_ops_createhNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hQstruct drm_gpuva_ops * drm_gpuvm_bo_unmap_ops_create (struct drm_gpuvm_bo *vm_bo)h]j>)}(hOstruct drm_gpuva_ops *drm_gpuvm_bo_unmap_ops_create(struct drm_gpuvm_bo *vm_bo)h](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM} ubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhj hM} ubh)}(hhh]jm)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jdrm_gpuvm_bo_unmap_ops_createsbc.drm_gpuvm_bo_unmap_ops_createasbuh1hhj hhhj hM} ubjV)}(h h]h }(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj hhhj hM} ubj)}(hjh]h*}(hj"!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM} ubjg)}(hdrm_gpuvm_bo_unmap_ops_createh]jm)}(hj!h]hdrm_gpuvm_bo_unmap_ops_create}(hj3!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/!ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj hhhj hM} ubj)}(h(struct drm_gpuvm_bo *vm_bo)h]j)}(hstruct drm_gpuvm_bo *vm_boh](jD)}(hjh]hstruct}(hjN!hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjJ!ubjV)}(h h]h }(hj[!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJ!ubh)}(hhh]jm)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjl!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhji!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjn!modnameN classnameNjj)}j]j!c.drm_gpuvm_bo_unmap_ops_createasbuh1hhjJ!ubjV)}(h h]h }(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJ!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ!ubjm)}(hvm_boh]hvm_bo}(hj!hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJ!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF!ubah}(h]h ]h"]h$]h&]jjuh1jhj hhhj hM} ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj hM} ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j7hj hM} hj hhubj)}(hhh]h)}(h2creates the :c:type:`drm_gpuva_ops` to unmap a GEMh](h creates the }(hj!hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj!h]h drm_gpuva_ops}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j!c.drm_gpuvm_bo_unmap_ops_createasbj3 drm_gpuva_opsuh1hhj̠hMhj!ubh to unmap a GEM}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMl hj!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM} ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` abstraction **Description** This function creates a list of operations to perform unmapping for every GPUVA attached to a GEM. The list can be iterated with :c:type:`drm_gpuva_for_each_op` and consists out of an arbitrary amount of unmap operations. After the caller finished processing the returned :c:type:`drm_gpuva_ops`, they must be freed with :c:type:`drm_gpuva_ops_free`. It is the callers responsibility to protect the GEMs GPUVA list against concurrent access using the GEMs dma_resv lock. **Return** a pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMp hj"ubj)}(hhh]j)}(hF``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` abstraction h](j)}(h``struct drm_gpuvm_bo *vm_bo``h]j)}(hj8"h]hstruct drm_gpuvm_bo *vm_bo}(hj:"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6"ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMm hj2"ubj )}(hhh]h)}(h&the :c:type:`drm_gpuvm_bo` abstractionh](hthe }(hjQ"hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j)}(hj["h]h drm_gpuvm_bo}(hj]"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjY"ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvm_bouh1hhjM"hMm hjQ"ubh abstraction}(hjQ"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjM"hMm hjN"ubah}(h]h ]h"]h$]h&]uh1j hj2"ubeh}(h]h ]h"]h$]h&]uh1jhjM"hMm hj/"ubah}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMo hj"ubh)}(hbThis function creates a list of operations to perform unmapping for every GPUVA attached to a GEM.h]hbThis function creates a list of operations to perform unmapping for every GPUVA attached to a GEM.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMo hj"ubh)}(hzThe list can be iterated with :c:type:`drm_gpuva_for_each_op` and consists out of an arbitrary amount of unmap operations.h](hThe list can be iterated with }(hj"hhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j)}(hj"h]hdrm_gpuva_for_each_op}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMr hj"ubh= and consists out of an arbitrary amount of unmap operations.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hMr hj"ubh)}(hAfter the caller finished processing the returned :c:type:`drm_gpuva_ops`, they must be freed with :c:type:`drm_gpuva_ops_free`.h](h2After the caller finished processing the returned }(hj"hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj"h]h drm_gpuva_ops}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMu hj"ubh, they must be freed with }(hj"hhhNhNubh)}(h:c:type:`drm_gpuva_ops_free`h]j)}(hj#h]hdrm_gpuva_ops_free}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpuva_ops_freeuh1hhj#hMu hj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMu hj"ubh)}(hwIt is the callers responsibility to protect the GEMs GPUVA list against concurrent access using the GEMs dma_resv lock.h]hwIt is the callers responsibility to protect the GEMs GPUVA list against concurrent access using the GEMs dma_resv lock.}(hjB#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chMx hj"ubh)}(h **Return**h]j)}(hjS#h]hReturn}(hjU#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ#ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM{ hj"ubh)}(hJa pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](ha pointer to the }(hji#hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hjs#h]h drm_gpuva_ops}(hju#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjq#ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM{ hji#ubh" on success, an ERR_PTR on failure}(hji#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hM{ hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpuva_ops_free (C function)c.drm_gpuva_ops_freehNtauh1j!hj17hhhNhNubj3)}(hhh](j8)}(hLvoid drm_gpuva_ops_free (struct drm_gpuvm *gpuvm, struct drm_gpuva_ops *ops)h]j>)}(hKvoid drm_gpuva_ops_free(struct drm_gpuvm *gpuvm, struct drm_gpuva_ops *ops)h](jc)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj#hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM ubjV)}(h h]h }(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#hhhj#hM ubjg)}(hdrm_gpuva_ops_freeh]jm)}(hdrm_gpuva_ops_freeh]hdrm_gpuva_ops_free}(hj#hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj#hhhj#hM ubj)}(h4(struct drm_gpuvm *gpuvm, struct drm_gpuva_ops *ops)h](j)}(hstruct drm_gpuvm *gpuvmh](jD)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#ubjV)}(h h]h }(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubh)}(hhh]jm)}(h drm_gpuvmh]h drm_gpuvm}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j)}jj#sbc.drm_gpuva_ops_freeasbuh1hhj#ubjV)}(h h]h }(hj6$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubj)}(hjh]h*}(hjD$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjm)}(hgpuvmh]hgpuvm}(hjQ$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(hstruct drm_gpuva_ops *opsh](jD)}(hjh]hstruct}(hjj$hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjf$ubjV)}(h h]h }(hjw$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjf$ubh)}(hhh]jm)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j2$c.drm_gpuva_ops_freeasbuh1hhjf$ubjV)}(h h]h }(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjf$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf$ubjm)}(hopsh]hops}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjf$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj#hM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj#hhhj#hM ubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1j7hj#hM hj#hhubj)}(hhh]h)}(h&free the given :c:type:`drm_gpuva_ops`h](hfree the given }(hj$hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj$h]h drm_gpuva_ops}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj)}j]j2$c.drm_gpuva_ops_freeasbj3 drm_gpuva_opsuh1hhj̠hMhj$ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj$hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj#hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'%jj'%jjjuh1j2hhhj17hNhNubj)}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` the ops were created for ``struct drm_gpuva_ops *ops`` the :c:type:`drm_gpuva_ops` to free **Description** Frees the given :c:type:`drm_gpuva_ops` structure including all the ops associated with it.h](h)}(h**Parameters**h]j)}(hj1%h]h Parameters}(hj3%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/%ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj+%ubj)}(hhh](j)}(hM``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` the ops were created for h](j)}(h``struct drm_gpuvm *gpuvm``h]j)}(hjP%h]hstruct drm_gpuvm *gpuvm}(hjR%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN%ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hjJ%ubj )}(hhh]h)}(h0the :c:type:`drm_gpuvm` the ops were created forh](hthe }(hji%hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j)}(hjs%h]h drm_gpuvm}(hju%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjq%ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuvmuh1hhje%hM hji%ubh the ops were created for}(hji%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhje%hM hjf%ubah}(h]h ]h"]h$]h&]uh1j hjJ%ubeh}(h]h ]h"]h$]h&]uh1jhje%hM hjG%ubj)}(hB``struct drm_gpuva_ops *ops`` the :c:type:`drm_gpuva_ops` to free h](j)}(h``struct drm_gpuva_ops *ops``h]j)}(hj%h]hstruct drm_gpuva_ops *ops}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj%ubj )}(hhh]h)}(h#the :c:type:`drm_gpuva_ops` to freeh](hthe }(hj%hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj%h]h drm_gpuva_ops}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhj%hM hj%ubh to free}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hM hj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM hjG%ubeh}(h]h ]h"]h$]h&]uh1jhj+%ubh)}(h**Description**h]j)}(hj &h]h Description}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj+%ubh)}(h[Frees the given :c:type:`drm_gpuva_ops` structure including all the ops associated with it.h](hFrees the given }(hj &hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j)}(hj*&h]h drm_gpuva_ops}(hj,&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj(&ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:506: ./drivers/gpu/drm/drm_gpuvm.chM hj &ubh4 structure including all the ops associated with it.}(hj &hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjG&hM hj+%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj17hhhNhNubeh}(h]drm-gpuvm-function-referencesah ]h"]drm gpuvm function referencesah$]h&]uh1hhj'hhhhhMubeh}(h](j&id2eh ]h"]( drm gpuvm drm_gpuvmeh$]h&]uh1hhhhhhhhMj}jg&j&sj}j&j&subh)}(hhh](h)}(hDRM Buddy Allocatorh]hDRM Buddy Allocator}(hjo&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl&hhhhhMubh)}(hhh](h)}(hDRM Buddy Function Referencesh]hDRM Buddy Function References}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}&hhhhhMubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_buddy_init (C function)c.drm_buddy_inithNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(hCint drm_buddy_init (struct drm_buddy *mm, u64 size, u64 chunk_size)h]j>)}(hBint drm_buddy_init(struct drm_buddy *mm, u64 size, u64 chunk_size)h](jc)}(hinth]hint}(hj&hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj&hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKubjV)}(h h]h }(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&hhhj&hKubjg)}(hdrm_buddy_inith]jm)}(hdrm_buddy_inith]hdrm_buddy_init}(hj&hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj&hhhj&hKubj)}(h0(struct drm_buddy *mm, u64 size, u64 chunk_size)h](j)}(hstruct drm_buddy *mmh](jD)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj&ubjV)}(h h]h }(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&ubh)}(hhh]jm)}(h drm_buddyh]h drm_buddy}(hj'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jj&sbc.drm_buddy_initasbuh1hhj&ubjV)}(h h]h }(hj"'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&ubj)}(hjh]h*}(hj0'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjm)}(hmmh]hmm}(hj='hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hu64 sizeh](h)}(hhh]jm)}(hu64h]hu64}(hjY'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjV'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj['modnameN classnameNjj)}j]j'c.drm_buddy_initasbuh1hhjR'ubjV)}(h h]h }(hjw'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjR'ubjm)}(hsizeh]hsize}(hj'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjR'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hu64 chunk_sizeh](h)}(hhh]jm)}(hu64h]hu64}(hj'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j'c.drm_buddy_initasbuh1hhj'ubjV)}(h h]h }(hj'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj'ubjm)}(h chunk_sizeh]h chunk_size}(hj'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj&hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj&hhhj&hKubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1j7hj&hKhj&hhubj)}(hhh]h)}(hinit memory managerh]hinit memory manager}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1j2hhhj}&hNhNubj)}(hX-**Parameters** ``struct drm_buddy *mm`` DRM buddy manager to initialize ``u64 size`` size in bytes to manage ``u64 chunk_size`` minimum page size in bytes for our allocations **Description** Initializes the memory manager and its resources. **Return** 0 on success, error code on failure.h](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhj(ubj)}(hhh](j)}(h9``struct drm_buddy *mm`` DRM buddy manager to initialize h](j)}(h``struct drm_buddy *mm``h]j)}(hj8(h]hstruct drm_buddy *mm}(hj:(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6(ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhj2(ubj )}(hhh]h)}(hDRM buddy manager to initializeh]hDRM buddy manager to initialize}(hjQ(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM(hKhjN(ubah}(h]h ]h"]h$]h&]uh1j hj2(ubeh}(h]h ]h"]h$]h&]uh1jhjM(hKhj/(ubj)}(h%``u64 size`` size in bytes to manage h](j)}(h ``u64 size``h]j)}(hjq(h]hu64 size}(hjs(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo(ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhjk(ubj )}(hhh]h)}(hsize in bytes to manageh]hsize in bytes to manage}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1j hjk(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj/(ubj)}(hB``u64 chunk_size`` minimum page size in bytes for our allocations h](j)}(h``u64 chunk_size``h]j)}(hj(h]hu64 chunk_size}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhj(ubj )}(hhh]h)}(h.minimum page size in bytes for our allocationsh]h.minimum page size in bytes for our allocations}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj/(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhj(ubh)}(h1Initializes the memory manager and its resources.h]h1Initializes the memory manager and its resources.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhj(ubh)}(h **Return**h]j)}(hj )h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj )ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhj(ubh)}(h$0 on success, error code on failure.h]h$0 on success, error code on failure.}(hj")hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chKhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_buddy_fini (C function)c.drm_buddy_finihNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(h*void drm_buddy_fini (struct drm_buddy *mm)h]j>)}(h)void drm_buddy_fini(struct drm_buddy *mm)h](jc)}(hvoidh]hvoid}(hjQ)hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjM)hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMGubjV)}(h h]h }(hj`)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjM)hhhj_)hMGubjg)}(hdrm_buddy_finih]jm)}(hdrm_buddy_finih]hdrm_buddy_fini}(hjr)hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjn)ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjM)hhhj_)hMGubj)}(h(struct drm_buddy *mm)h]j)}(hstruct drm_buddy *mmh](jD)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj)ubjV)}(h h]h }(hj)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj)ubh)}(hhh]jm)}(h drm_buddyh]h drm_buddy}(hj)hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j)}jjt)sbc.drm_buddy_finiasbuh1hhj)ubjV)}(h h]h }(hj)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjm)}(hmmh]hmm}(hj)hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubah}(h]h ]h"]h$]h&]jjuh1jhjM)hhhj_)hMGubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjI)hhhj_)hMGubah}(h]jD)ah ](jjeh"]h$]h&]jj)jhuh1j7hj_)hMGhjF)hhubj)}(hhh]h)}(htear down the memory managerh]htear down the memory manager}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMAhj*hhubah}(h]h ]h"]h$]h&]uh1jhjF)hhhj_)hMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)*jj)*jjjuh1j2hhhj}&hNhNubj)}(h**Parameters** ``struct drm_buddy *mm`` DRM buddy manager to free **Description** Cleanup memory manager resources and the freelisth](h)}(h**Parameters**h]j)}(hj3*h]h Parameters}(hj5*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1*ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMEhj-*ubj)}(hhh]j)}(h3``struct drm_buddy *mm`` DRM buddy manager to free h](j)}(h``struct drm_buddy *mm``h]j)}(hjR*h]hstruct drm_buddy *mm}(hjT*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP*ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMChjL*ubj )}(hhh]h)}(hDRM buddy manager to freeh]hDRM buddy manager to free}(hjk*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg*hMChjh*ubah}(h]h ]h"]h$]h&]uh1j hjL*ubeh}(h]h ]h"]h$]h&]uh1jhjg*hMChjI*ubah}(h]h ]h"]h$]h&]uh1jhj-*ubh)}(h**Description**h]j)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMEhj-*ubh)}(h1Cleanup memory manager resources and the freelisth]h1Cleanup memory manager resources and the freelist}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMEhj-*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_get_buddy (C function)c.drm_get_buddyhNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(hFstruct drm_buddy_block * drm_get_buddy (struct drm_buddy_block *block)h]j>)}(hDstruct drm_buddy_block *drm_get_buddy(struct drm_buddy_block *block)h](jD)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj*hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMubjV)}(h h]h }(hj*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*hhhj*hMubh)}(hhh]jm)}(hdrm_buddy_blockh]hdrm_buddy_block}(hj*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j)}j drm_get_buddysbc.drm_get_buddyasbuh1hhj*hhhj*hMubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*hhhj*hMubj)}(hjh]h*}(hj +hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hMubjg)}(h drm_get_buddyh]jm)}(hj+h]h drm_get_buddy}(hj1+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj-+ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj*hhhj*hMubj)}(h(struct drm_buddy_block *block)h]j)}(hstruct drm_buddy_block *blockh](jD)}(hjh]hstruct}(hjL+hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjH+ubjV)}(h h]h }(hjY+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjH+ubh)}(hhh]jm)}(hdrm_buddy_blockh]hdrm_buddy_block}(hjj+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjg+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjl+modnameN classnameNjj)}j]j +c.drm_get_buddyasbuh1hhjH+ubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjH+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH+ubjm)}(hblockh]hblock}(hj+hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjH+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD+ubah}(h]h ]h"]h$]h&]jjuh1jhj*hhhj*hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj*hhhj*hMubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1j7hj*hMhj*hhubj)}(hhh]h)}(hget buddy addressh]hget buddy address}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj+hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj*hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1j2hhhj}&hNhNubj)}(hX%**Parameters** ``struct drm_buddy_block *block`` DRM buddy block **Description** Returns the corresponding buddy block for **block**, or NULL if this is a root block and can't be merged further. Requires some kind of locking to protect against any concurrent allocate and free operations.h](h)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj+ubj)}(hhh]j)}(h2``struct drm_buddy_block *block`` DRM buddy block h](j)}(h!``struct drm_buddy_block *block``h]j)}(hj,h]hstruct drm_buddy_block *block}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ,ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj,ubj )}(hhh]h)}(hDRM buddy blockh]hDRM buddy block}(hj',hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#,hMhj$,ubah}(h]h ]h"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]uh1jhj#,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubh)}(h**Description**h]j)}(hjI,h]h Description}(hjK,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG,ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj+ubh)}(hReturns the corresponding buddy block for **block**, or NULL if this is a root block and can't be merged further. Requires some kind of locking to protect against any concurrent allocate and free operations.h](h*Returns the corresponding buddy block for }(hj_,hhhNhNubj)}(h **block**h]hblock}(hjg,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_,ubh, or NULL if this is a root block and can’t be merged further. Requires some kind of locking to protect against any concurrent allocate and free operations.}(hj_,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_buddy_free_block (C function)c.drm_buddy_free_blockhNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(hOvoid drm_buddy_free_block (struct drm_buddy *mm, struct drm_buddy_block *block)h]j>)}(hNvoid drm_buddy_free_block(struct drm_buddy *mm, struct drm_buddy_block *block)h](jc)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj,hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMubjV)}(h h]h }(hj,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,hhhj,hMubjg)}(hdrm_buddy_free_blockh]jm)}(hdrm_buddy_free_blockh]hdrm_buddy_free_block}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj,hhhj,hMubj)}(h5(struct drm_buddy *mm, struct drm_buddy_block *block)h](j)}(hstruct drm_buddy *mmh](jD)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj,ubjV)}(h h]h }(hj,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,ubh)}(hhh]jm)}(h drm_buddyh]h drm_buddy}(hj,hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j)}jj,sbc.drm_buddy_free_blockasbuh1hhj,ubjV)}(h h]h }(hj-hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,ubj)}(hjh]h*}(hj)-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjm)}(hmmh]hmm}(hj6-hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubj)}(hstruct drm_buddy_block *blockh](jD)}(hjh]hstruct}(hjO-hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjK-ubjV)}(h h]h }(hj\-hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjK-ubh)}(hhh]jm)}(hdrm_buddy_blockh]hdrm_buddy_block}(hjm-hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjo-modnameN classnameNjj)}j]j-c.drm_buddy_free_blockasbuh1hhjK-ubjV)}(h h]h }(hj-hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjK-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK-ubjm)}(hblockh]hblock}(hj-hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjK-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubeh}(h]h ]h"]h$]h&]jjuh1jhj,hhhj,hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj,hhhj,hMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1j7hj,hMhj,hhubj)}(hhh]h)}(h free a blockh]h free a block}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj,hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1j2hhhj}&hNhNubj)}(hs**Parameters** ``struct drm_buddy *mm`` DRM buddy manager ``struct drm_buddy_block *block`` block to be freedh](h)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj-ubj)}(hhh](j)}(h+``struct drm_buddy *mm`` DRM buddy manager h](j)}(h``struct drm_buddy *mm``h]j)}(hj.h]hstruct drm_buddy *mm}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj .ubj )}(hhh]h)}(hDRM buddy managerh]hDRM buddy manager}(hj*.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&.hMhj'.ubah}(h]h ]h"]h$]h&]uh1j hj .ubeh}(h]h ]h"]h$]h&]uh1jhj&.hMhj.ubj)}(h3``struct drm_buddy_block *block`` block to be freedh](j)}(h!``struct drm_buddy_block *block``h]j)}(hjJ.h]hstruct drm_buddy_block *block}(hjL.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjD.ubj )}(hhh]h)}(hblock to be freedh]hblock to be freed}(hjc.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj`.ubah}(h]h ]h"]h$]h&]uh1j hjD.ubeh}(h]h ]h"]h$]h&]uh1jhj_.hMhj.ubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_buddy_free_list (C function)c.drm_buddy_free_listhNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(h^void drm_buddy_free_list (struct drm_buddy *mm, struct list_head *objects, unsigned int flags)h]j>)}(h]void drm_buddy_free_list(struct drm_buddy *mm, struct list_head *objects, unsigned int flags)h](jc)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj.hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.hhhj.hMubjg)}(hdrm_buddy_free_listh]jm)}(hdrm_buddy_free_listh]hdrm_buddy_free_list}(hj.hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj.hhhj.hMubj)}(hE(struct drm_buddy *mm, struct list_head *objects, unsigned int flags)h](j)}(hstruct drm_buddy *mmh](jD)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj.ubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.ubh)}(hhh]jm)}(h drm_buddyh]h drm_buddy}(hj.hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j)}jj.sbc.drm_buddy_free_listasbuh1hhj.ubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.ubj)}(hjh]h*}(hj-/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjm)}(hmmh]hmm}(hj:/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hstruct list_head *objectsh](jD)}(hjh]hstruct}(hjS/hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjO/ubjV)}(h h]h }(hj`/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjO/ubh)}(hhh]jm)}(h list_headh]h list_head}(hjq/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjn/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjs/modnameN classnameNjj)}j]j/c.drm_buddy_free_listasbuh1hhjO/ubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjO/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO/ubjm)}(hobjectsh]hobjects}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjO/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hunsigned int flagsh](jc)}(hunsignedh]hunsigned}(hj/hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj/ubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/ubjc)}(hinth]hint}(hj/hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj/ubjV)}(h h]h }(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/ubjm)}(hflagsh]hflags}(hj/hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhj.hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj.hhhj.hMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1j7hj.hMhj.hhubj)}(hhh]h)}(h free blocksh]h free blocks}(hj%0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj"0hhubah}(h]h ]h"]h$]h&]uh1jhj.hhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=0jj=0jjjuh1j2hhhj}&hNhNubj)}(h**Parameters** ``struct drm_buddy *mm`` DRM buddy manager ``struct list_head *objects`` input list head to free blocks ``unsigned int flags`` optional flags like DRM_BUDDY_CLEAREDh](h)}(h**Parameters**h]j)}(hjG0h]h Parameters}(hjI0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE0ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjA0ubj)}(hhh](j)}(h+``struct drm_buddy *mm`` DRM buddy manager h](j)}(h``struct drm_buddy *mm``h]j)}(hjf0h]hstruct drm_buddy *mm}(hjh0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj`0ubj )}(hhh]h)}(hDRM buddy managerh]hDRM buddy manager}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{0hMhj|0ubah}(h]h ]h"]h$]h&]uh1j hj`0ubeh}(h]h ]h"]h$]h&]uh1jhj{0hMhj]0ubj)}(h=``struct list_head *objects`` input list head to free blocks h](j)}(h``struct list_head *objects``h]j)}(hj0h]hstruct list_head *objects}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj0ubj )}(hhh]h)}(hinput list head to free blocksh]hinput list head to free blocks}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj]0ubj)}(h<``unsigned int flags`` optional flags like DRM_BUDDY_CLEAREDh](j)}(h``unsigned int flags``h]j)}(hj0h]hunsigned int flags}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj0ubj )}(hhh]h)}(h%optional flags like DRM_BUDDY_CLEAREDh]h%optional flags like DRM_BUDDY_CLEARED}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj0ubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj]0ubeh}(h]h ]h"]h$]h&]uh1jhjA0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_buddy_block_trim (C function)c.drm_buddy_block_trimhNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(hcint drm_buddy_block_trim (struct drm_buddy *mm, u64 *start, u64 new_size, struct list_head *blocks)h]j>)}(hbint drm_buddy_block_trim(struct drm_buddy *mm, u64 *start, u64 new_size, struct list_head *blocks)h](jc)}(hinth]hint}(hj21hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj.1hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMjubjV)}(h h]h }(hjA1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.1hhhj@1hMjubjg)}(hdrm_buddy_block_trimh]jm)}(hdrm_buddy_block_trimh]hdrm_buddy_block_trim}(hjS1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjO1ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj.1hhhj@1hMjubj)}(hJ(struct drm_buddy *mm, u64 *start, u64 new_size, struct list_head *blocks)h](j)}(hstruct drm_buddy *mmh](jD)}(hjh]hstruct}(hjo1hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjk1ubjV)}(h h]h }(hj|1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjk1ubh)}(hhh]jm)}(h drm_buddyh]h drm_buddy}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j)}jjU1sbc.drm_buddy_block_trimasbuh1hhjk1ubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjk1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk1ubjm)}(hmmh]hmm}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjk1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjg1ubj)}(h u64 *starth](h)}(hhh]jm)}(hu64h]hu64}(hj1hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j1c.drm_buddy_block_trimasbuh1hhj1ubjV)}(h h]h }(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjm)}(hstarth]hstart}(hj2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjg1ubj)}(h u64 new_sizeh](h)}(hhh]jm)}(hu64h]hu64}(hj92hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj62ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;2modnameN classnameNjj)}j]j1c.drm_buddy_block_trimasbuh1hhj22ubjV)}(h h]h }(hjW2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj22ubjm)}(hnew_sizeh]hnew_size}(hje2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj22ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjg1ubj)}(hstruct list_head *blocksh](jD)}(hjh]hstruct}(hj~2hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjz2ubjV)}(h h]h }(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjz2ubh)}(hhh]jm)}(h list_headh]h list_head}(hj2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j1c.drm_buddy_block_trimasbuh1hhjz2ubjV)}(h h]h }(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjz2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz2ubjm)}(hblocksh]hblocks}(hj2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjz2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjg1ubeh}(h]h ]h"]h$]h&]jjuh1jhj.1hhhj@1hMjubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj*1hhhj@1hMjubah}(h]j%1ah ](jjeh"]h$]h&]jj)jhuh1j7hj@1hMjhj'1hhubj)}(hhh]h)}(hfree unused pagesh]hfree unused pages}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMXhj2hhubah}(h]h ]h"]h$]h&]uh1jhj'1hhhj@1hMjubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1j2hhhj}&hNhNubj)}(hX**Parameters** ``struct drm_buddy *mm`` DRM buddy manager ``u64 *start`` start address to begin the trimming. ``u64 new_size`` original size requested ``struct list_head *blocks`` Input and output list of allocated blocks. MUST contain single block as input to be trimmed. On success will contain the newly allocated blocks making up the **new_size**. Blocks always appear in ascending order **Description** For contiguous allocation, we round up the size to the nearest power of two value, drivers consume *actual* size, so remaining portions are unused and can be optionally freed with this function **Return** 0 on success, error code on failure.h](h)}(h**Parameters**h]j)}(hj!3h]h Parameters}(hj#3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chM\hj3ubj)}(hhh](j)}(h+``struct drm_buddy *mm`` DRM buddy manager h](j)}(h``struct drm_buddy *mm``h]j)}(hj@3h]hstruct drm_buddy *mm}(hjB3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMZhj:3ubj )}(hhh]h)}(hDRM buddy managerh]hDRM buddy manager}(hjY3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU3hMZhjV3ubah}(h]h ]h"]h$]h&]uh1j hj:3ubeh}(h]h ]h"]h$]h&]uh1jhjU3hMZhj73ubj)}(h4``u64 *start`` start address to begin the trimming. h](j)}(h``u64 *start``h]j)}(hjy3h]h u64 *start}(hj{3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chM[hjs3ubj )}(hhh]h)}(h$start address to begin the trimming.h]h$start address to begin the trimming.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM[hj3ubah}(h]h ]h"]h$]h&]uh1j hjs3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM[hj73ubj)}(h)``u64 new_size`` original size requested h](j)}(h``u64 new_size``h]j)}(hj3h]h u64 new_size}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chM\hj3ubj )}(hhh]h)}(horiginal size requestedh]horiginal size requested}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM\hj3ubah}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM\hj73ubj)}(h``struct list_head *blocks`` Input and output list of allocated blocks. MUST contain single block as input to be trimmed. On success will contain the newly allocated blocks making up the **new_size**. Blocks always appear in ascending order h](j)}(h``struct list_head *blocks``h]j)}(hj3h]hstruct list_head *blocks}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMahj3ubj )}(hhh]h)}(hInput and output list of allocated blocks. MUST contain single block as input to be trimmed. On success will contain the newly allocated blocks making up the **new_size**. Blocks always appear in ascending orderh](hInput and output list of allocated blocks. MUST contain single block as input to be trimmed. On success will contain the newly allocated blocks making up the }(hj4hhhNhNubj)}(h **new_size**h]hnew_size}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh). Blocks always appear in ascending order}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chM]hj4ubah}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMahj73ubeh}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]j)}(hj94h]h Description}(hj;4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj74ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMchj3ubh)}(hFor contiguous allocation, we round up the size to the nearest power of two value, drivers consume *actual* size, so remaining portions are unused and can be optionally freed with this functionh](hcFor contiguous allocation, we round up the size to the nearest power of two value, drivers consume }(hjO4hhhNhNubj)}(h*actual*h]hactual}(hjW4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO4ubhV size, so remaining portions are unused and can be optionally freed with this function}(hjO4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMchj3ubh)}(h **Return**h]j)}(hjr4h]hReturn}(hjt4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMghj3ubh)}(h$0 on success, error code on failure.h]h$0 on success, error code on failure.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMghj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_buddy_alloc_blocks (C function)c.drm_buddy_alloc_blockshNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(hint drm_buddy_alloc_blocks (struct drm_buddy *mm, u64 start, u64 end, u64 size, u64 min_block_size, struct list_head *blocks, unsigned long flags)h]j>)}(hint drm_buddy_alloc_blocks(struct drm_buddy *mm, u64 start, u64 end, u64 size, u64 min_block_size, struct list_head *blocks, unsigned long flags)h](jc)}(hinth]hint}(hj4hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj4hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMubjV)}(h h]h }(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj4hhhj4hMubjg)}(hdrm_buddy_alloc_blocksh]jm)}(hdrm_buddy_alloc_blocksh]hdrm_buddy_alloc_blocks}(hj4hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj4hhhj4hMubj)}(hw(struct drm_buddy *mm, u64 start, u64 end, u64 size, u64 min_block_size, struct list_head *blocks, unsigned long flags)h](j)}(hstruct drm_buddy *mmh](jD)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj4ubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj4ubh)}(hhh]jm)}(h drm_buddyh]h drm_buddy}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j)}jj4sbc.drm_buddy_alloc_blocksasbuh1hhj4ubjV)}(h h]h }(hj25hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj4ubj)}(hjh]h*}(hj@5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjm)}(hmmh]hmm}(hjM5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(h u64 starth](h)}(hhh]jm)}(hu64h]hu64}(hji5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjf5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjk5modnameN classnameNjj)}j]j.5c.drm_buddy_alloc_blocksasbuh1hhjb5ubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjb5ubjm)}(hstarth]hstart}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjb5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hu64 endh](h)}(hhh]jm)}(hu64h]hu64}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j.5c.drm_buddy_alloc_blocksasbuh1hhj5ubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj5ubjm)}(hendh]hend}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hu64 sizeh](h)}(hhh]jm)}(hu64h]hu64}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j.5c.drm_buddy_alloc_blocksasbuh1hhj5ubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj5ubjm)}(hsizeh]hsize}(hj%6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hu64 min_block_sizeh](h)}(hhh]jm)}(hu64h]hu64}(hjA6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjC6modnameN classnameNjj)}j]j.5c.drm_buddy_alloc_blocksasbuh1hhj:6ubjV)}(h h]h }(hj_6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj:6ubjm)}(hmin_block_sizeh]hmin_block_size}(hjm6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hstruct list_head *blocksh](jD)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj6ubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubh)}(hhh]jm)}(h list_headh]h list_head}(hj6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j.5c.drm_buddy_alloc_blocksasbuh1hhj6ubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjm)}(hblocksh]hblocks}(hj6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hunsigned long flagsh](jc)}(hunsignedh]hunsigned}(hj6hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj6ubjV)}(h h]h }(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubjc)}(hlongh]hlong}(hj7hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj6ubjV)}(h h]h }(hj 7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubjm)}(hflagsh]hflags}(hj.7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubeh}(h]h ]h"]h$]h&]jjuh1jhj4hhhj4hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj4hhhj4hMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1j7hj4hMhj4hhubj)}(hhh]h)}(hallocate power-of-two blocksh]hallocate power-of-two blocks}(hjX7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjU7hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjp7jjp7jjjuh1j2hhhj}&hNhNubj)}(hX**Parameters** ``struct drm_buddy *mm`` DRM buddy manager to allocate from ``u64 start`` start of the allowed range for this block ``u64 end`` end of the allowed range for this block ``u64 size`` size of the allocation in bytes ``u64 min_block_size`` alignment of the allocation ``struct list_head *blocks`` output list head to add allocated blocks ``unsigned long flags`` DRM_BUDDY_*_ALLOCATION flags **Description** alloc_range_bias() called on range limitations, which traverses the tree and returns the desired block. alloc_from_freelist() called when *no* range restrictions are enforced, which picks the block from the freelist. **Return** 0 on success, error code on failure.h](h)}(h**Parameters**h]j)}(hjz7h]h Parameters}(hj|7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx7ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjt7ubj)}(hhh](j)}(h<``struct drm_buddy *mm`` DRM buddy manager to allocate from h](j)}(h``struct drm_buddy *mm``h]j)}(hj7h]hstruct drm_buddy *mm}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj7ubj )}(hhh]h)}(h"DRM buddy manager to allocate fromh]h"DRM buddy manager to allocate from}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubj)}(h8``u64 start`` start of the allowed range for this block h](j)}(h ``u64 start``h]j)}(hj7h]h u64 start}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj7ubj )}(hhh]h)}(h)start of the allowed range for this blockh]h)start of the allowed range for this block}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubj)}(h4``u64 end`` end of the allowed range for this block h](j)}(h ``u64 end``h]j)}(hj 8h]hu64 end}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj8ubj )}(hhh]h)}(h'end of the allowed range for this blockh]h'end of the allowed range for this block}(hj$8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 8hMhj!8ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhj 8hMhj7ubj)}(h-``u64 size`` size of the allocation in bytes h](j)}(h ``u64 size``h]j)}(hjD8h]hu64 size}(hjF8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj>8ubj )}(hhh]h)}(hsize of the allocation in bytesh]hsize of the allocation in bytes}(hj]8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY8hMhjZ8ubah}(h]h ]h"]h$]h&]uh1j hj>8ubeh}(h]h ]h"]h$]h&]uh1jhjY8hMhj7ubj)}(h3``u64 min_block_size`` alignment of the allocation h](j)}(h``u64 min_block_size``h]j)}(hj}8h]hu64 min_block_size}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjw8ubj )}(hhh]h)}(halignment of the allocationh]halignment of the allocation}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hjw8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj7ubj)}(hF``struct list_head *blocks`` output list head to add allocated blocks h](j)}(h``struct list_head *blocks``h]j)}(hj8h]hstruct list_head *blocks}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj8ubj )}(hhh]h)}(h(output list head to add allocated blocksh]h(output list head to add allocated blocks}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj7ubj)}(h5``unsigned long flags`` DRM_BUDDY_*_ALLOCATION flags h](j)}(h``unsigned long flags``h]j)}(hj8h]hunsigned long flags}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj8ubj )}(hhh]h)}(hDRM_BUDDY_*_ALLOCATION flagsh]hDRM_BUDDY_*_ALLOCATION flags}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhjt7ubh)}(h**Description**h]j)}(hj*9h]h Description}(hj,9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjt7ubh)}(hgalloc_range_bias() called on range limitations, which traverses the tree and returns the desired block.h]hgalloc_range_bias() called on range limitations, which traverses the tree and returns the desired block.}(hj@9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjt7ubh)}(hpalloc_from_freelist() called when *no* range restrictions are enforced, which picks the block from the freelist.h](h"alloc_from_freelist() called when }(hjO9hhhNhNubj)}(h*no*h]hno}(hjW9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO9ubhJ range restrictions are enforced, which picks the block from the freelist.}(hjO9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjt7ubh)}(h **Return**h]j)}(hjr9h]hReturn}(hjt9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjt7ubh)}(h$0 on success, error code on failure.h]h$0 on success, error code on failure.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhjt7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_buddy_block_print (C function)c.drm_buddy_block_printhNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(hgvoid drm_buddy_block_print (struct drm_buddy *mm, struct drm_buddy_block *block, struct drm_printer *p)h]j>)}(hfvoid drm_buddy_block_print(struct drm_buddy *mm, struct drm_buddy_block *block, struct drm_printer *p)h](jc)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj9hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMoubjV)}(h h]h }(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9hhhj9hMoubjg)}(hdrm_buddy_block_printh]jm)}(hdrm_buddy_block_printh]hdrm_buddy_block_print}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj9hhhj9hMoubj)}(hL(struct drm_buddy *mm, struct drm_buddy_block *block, struct drm_printer *p)h](j)}(hstruct drm_buddy *mmh](jD)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj9ubjV)}(h h]h }(hj:hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9ubh)}(hhh]jm)}(h drm_buddyh]h drm_buddy}(hj:hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j)}jj9sbc.drm_buddy_block_printasbuh1hhj9ubjV)}(h h]h }(hj2:hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9ubj)}(hjh]h*}(hj@:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjm)}(hmmh]hmm}(hjM:hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(hstruct drm_buddy_block *blockh](jD)}(hjh]hstruct}(hjf:hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjb:ubjV)}(h h]h }(hjs:hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjb:ubh)}(hhh]jm)}(hdrm_buddy_blockh]hdrm_buddy_block}(hj:hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j.:c.drm_buddy_block_printasbuh1hhjb:ubjV)}(h h]h }(hj:hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjb:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb:ubjm)}(hblockh]hblock}(hj:hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjb:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj:ubjV)}(h h]h }(hj:hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj:ubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hj:hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j.:c.drm_buddy_block_printasbuh1hhj:ubjV)}(h h]h }(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj:ubj)}(hjh]h*}(hj ;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjm)}(hjh]hp}(hj-;hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubeh}(h]h ]h"]h$]h&]jjuh1jhj9hhhj9hMoubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj9hhhj9hMoubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1j7hj9hMohj9hhubj)}(hhh]h)}(hprint block informationh]hprint block information}(hjV;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMihjS;hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj9hMoubeh}(h]h ](jfunctioneh"]h$]h&]jjjjn;jjn;jjjuh1j2hhhj}&hNhNubj)}(h**Parameters** ``struct drm_buddy *mm`` DRM buddy manager ``struct drm_buddy_block *block`` DRM buddy block ``struct drm_printer *p`` DRM printer to useh](h)}(h**Parameters**h]j)}(hjx;h]h Parameters}(hjz;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv;ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMmhjr;ubj)}(hhh](j)}(h+``struct drm_buddy *mm`` DRM buddy manager h](j)}(h``struct drm_buddy *mm``h]j)}(hj;h]hstruct drm_buddy *mm}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMkhj;ubj )}(hhh]h)}(hDRM buddy managerh]hDRM buddy manager}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMkhj;ubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMkhj;ubj)}(h2``struct drm_buddy_block *block`` DRM buddy block h](j)}(h!``struct drm_buddy_block *block``h]j)}(hj;h]hstruct drm_buddy_block *block}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMlhj;ubj )}(hhh]h)}(hDRM buddy blockh]hDRM buddy block}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMlhj;ubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMlhj;ubj)}(h,``struct drm_printer *p`` DRM printer to useh](j)}(h``struct drm_printer *p``h]j)}(hj <h]hstruct drm_printer *p}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMnhj<ubj )}(hhh]h)}(hDRM printer to useh]hDRM printer to use}(hj"<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMmhj<ubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMnhj;ubeh}(h]h ]h"]h$]h&]uh1jhjr;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_buddy_print (C function)c.drm_buddy_printhNtauh1j!hj}&hhhNhNubj3)}(hhh](j8)}(hBvoid drm_buddy_print (struct drm_buddy *mm, struct drm_printer *p)h]j>)}(hAvoid drm_buddy_print(struct drm_buddy *mm, struct drm_printer *p)h](jc)}(hvoidh]hvoid}(hjc<hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj_<hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMubjV)}(h h]h }(hjr<hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj_<hhhjq<hMubjg)}(hdrm_buddy_printh]jm)}(hdrm_buddy_printh]hdrm_buddy_print}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj_<hhhjq<hMubj)}(h-(struct drm_buddy *mm, struct drm_printer *p)h](j)}(hstruct drm_buddy *mmh](jD)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj<ubjV)}(h h]h }(hj<hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<ubh)}(hhh]jm)}(h drm_buddyh]h drm_buddy}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j)}jj<sbc.drm_buddy_printasbuh1hhj<ubjV)}(h h]h }(hj<hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjm)}(hmmh]hmm}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hstruct drm_printer *ph](jD)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj=ubjV)}(h h]h }(hj=hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=ubh)}(hhh]jm)}(h drm_printerh]h drm_printer}(hj0=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj-=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2=modnameN classnameNjj)}j]j<c.drm_buddy_printasbuh1hhj=ubjV)}(h h]h }(hjN=hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=ubj)}(hjh]h*}(hj\=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjm)}(hjh]hp}(hji=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhj_<hhhjq<hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj[<hhhjq<hMubah}(h]jV<ah ](jjeh"]h$]h&]jj)jhuh1j7hjq<hMhjX<hhubj)}(hhh]h)}(hprint allocator stateh]hprint allocator state}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chM{hj=hhubah}(h]h ]h"]h$]h&]uh1jhjX<hhhjq<hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1j2hhhj}&hNhNubj)}(hl**Parameters** ``struct drm_buddy *mm`` DRM buddy manager ``struct drm_printer *p`` DRM printer to useh](h)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj=ubj)}(hhh](j)}(h+``struct drm_buddy *mm`` DRM buddy manager h](j)}(h``struct drm_buddy *mm``h]j)}(hj=h]hstruct drm_buddy *mm}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chM}hj=ubj )}(hhh]h)}(hDRM buddy managerh]hDRM buddy manager}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM}hj=ubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM}hj=ubj)}(h,``struct drm_printer *p`` DRM printer to useh](j)}(h``struct drm_printer *p``h]j)}(hj >h]hstruct drm_printer *p}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj >ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chMhj>ubj )}(hhh]h)}(hDRM printer to useh]hDRM printer to use}(hj%>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:515: ./drivers/gpu/drm/drm_buddy.chM~hj">ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhj!>hMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj}&hhhNhNubeh}(h]drm-buddy-function-referencesah ]h"]drm buddy function referencesah$]h&]uh1hhjl&hhhhhMubeh}(h]drm-buddy-allocatorah ]h"]drm buddy allocatorah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h'DRM Cache Handling and Fast WC memcpy()h]h'DRM Cache Handling and Fast WC memcpy()}(hj`>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]>hhhhhMubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_clflush_pages (C function)c.drm_clflush_pageshNtauh1j!hj]>hhhNhNubj3)}(hhh](j8)}(hFvoid drm_clflush_pages (struct page *pages[], unsigned long num_pages)h]j>)}(hEvoid drm_clflush_pages(struct page *pages[], unsigned long num_pages)h](jc)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj>hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKVubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>hhhj>hKVubjg)}(hdrm_clflush_pagesh]jm)}(hdrm_clflush_pagesh]hdrm_clflush_pages}(hj>hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj>hhhj>hKVubj)}(h/(struct page *pages[], unsigned long num_pages)h](j)}(hstruct page *pages[]h](jD)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj>ubjV)}(h h]h }(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>ubh)}(hhh]jm)}(hpageh]hpage}(hj>hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j)}jj>sbc.drm_clflush_pagesasbuh1hhj>ubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjm)}(hpagesh]hpages}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj>ubj)}(h[h]h[}(hj+?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h]h]h]}(hj9?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hunsigned long num_pagesh](jc)}(hunsignedh]hunsigned}(hjR?hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjN?ubjV)}(h h]h }(hj`?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjN?ubjc)}(hlongh]hlong}(hjn?hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjN?ubjV)}(h h]h }(hj|?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjN?ubjm)}(h num_pagesh]h num_pages}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjN?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhj>hKVubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj>hhhj>hKVubah}(h]jz>ah ](jjeh"]h$]h&]jj)jhuh1j7hj>hKVhj|>hhubj)}(hhh]h)}(h%Flush dcache lines of a set of pages.h]h%Flush dcache lines of a set of pages.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKOhj?hhubah}(h]h ]h"]h$]h&]uh1jhj|>hhhj>hKVubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1j2hhhj]>hNhNubj)}(h**Parameters** ``struct page *pages[]`` List of pages to be flushed. ``unsigned long num_pages`` Number of pages in the array. **Description** Flush every data cache line entry that points to an address belonging to a page in the array.h](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKShj?ubj)}(hhh](j)}(h6``struct page *pages[]`` List of pages to be flushed. h](j)}(h``struct page *pages[]``h]j)}(hj?h]hstruct page *pages[]}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKPhj?ubj )}(hhh]h)}(hList of pages to be flushed.h]hList of pages to be flushed.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj @hKPhj @ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1jhj @hKPhj?ubj)}(h:``unsigned long num_pages`` Number of pages in the array. h](j)}(h``unsigned long num_pages``h]j)}(hj.@h]hunsigned long num_pages}(hj0@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,@ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKQhj(@ubj )}(hhh]h)}(hNumber of pages in the array.h]hNumber of pages in the array.}(hjG@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC@hKQhjD@ubah}(h]h ]h"]h$]h&]uh1j hj(@ubeh}(h]h ]h"]h$]h&]uh1jhjC@hKQhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j)}(hji@h]h Description}(hjk@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg@ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKShj?ubh)}(h]Flush every data cache line entry that points to an address belonging to a page in the array.h]h]Flush every data cache line entry that points to an address belonging to a page in the array.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKShj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]>hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_clflush_sg (C function)c.drm_clflush_sghNtauh1j!hj]>hhhNhNubj3)}(hhh](j8)}(h)void drm_clflush_sg (struct sg_table *st)h]j>)}(h(void drm_clflush_sg(struct sg_table *st)h](jc)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj@hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKubjV)}(h h]h }(hj@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@hhhj@hKubjg)}(hdrm_clflush_sgh]jm)}(hdrm_clflush_sgh]hdrm_clflush_sg}(hj@hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj@hhhj@hKubj)}(h(struct sg_table *st)h]j)}(hstruct sg_table *sth](jD)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj@ubjV)}(h h]h }(hj@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubh)}(hhh]jm)}(hsg_tableh]hsg_table}(hj AhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj AmodnameN classnameNjj)}j]j)}jj@sbc.drm_clflush_sgasbuh1hhj@ubjV)}(h h]h }(hj)AhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@ubj)}(hjh]h*}(hj7AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjm)}(hsth]hst}(hjDAhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@ubah}(h]h ]h"]h$]h&]jjuh1jhj@hhhj@hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj@hhhj@hKubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1j7hj@hKhj@hhubj)}(hhh]h)}(h0Flush dcache lines pointing to a scather-gather.h]h0Flush dcache lines pointing to a scather-gather.}(hjnAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKyhjkAhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj@hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1j2hhhj]>hNhNubj)}(h**Parameters** ``struct sg_table *st`` struct sg_table. **Description** Flush every data cache line entry that points to an address in the sg.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chK}hjAubj)}(hhh]j)}(h)``struct sg_table *st`` struct sg_table. h](j)}(h``struct sg_table *st``h]j)}(hjAh]hstruct sg_table *st}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKzhjAubj )}(hhh]h)}(hstruct sg_table.h]hstruct sg_table.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKzhjAubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhjAhKzhjAubah}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chK|hjAubh)}(hFFlush every data cache line entry that points to an address in the sg.h]hFFlush every data cache line entry that points to an address in the sg.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chK|hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]>hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_clflush_virt_range (C function)c.drm_clflush_virt_rangehNtauh1j!hj]>hhhNhNubj3)}(hhh](j8)}(h>void drm_clflush_virt_range (void *addr, unsigned long length)h]j>)}(h=void drm_clflush_virt_range(void *addr, unsigned long length)h](jc)}(hvoidh]hvoid}(hj/BhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj+BhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKubjV)}(h h]h }(hj>BhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+Bhhhj=BhKubjg)}(hdrm_clflush_virt_rangeh]jm)}(hdrm_clflush_virt_rangeh]hdrm_clflush_virt_range}(hjPBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjLBubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj+Bhhhj=BhKubj)}(h"(void *addr, unsigned long length)h](j)}(h void *addrh](jc)}(hvoidh]hvoid}(hjlBhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhBubjV)}(h h]h }(hjzBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhBubjm)}(haddrh]haddr}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdBubj)}(hunsigned long lengthh](jc)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjBubjV)}(h h]h }(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubjc)}(hlongh]hlong}(hjBhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjBubjV)}(h h]h }(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubjm)}(hlengthh]hlength}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdBubeh}(h]h ]h"]h$]h&]jjuh1jhj+Bhhhj=BhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj'Bhhhj=BhKubah}(h]j"Bah ](jjeh"]h$]h&]jj)jhuh1j7hj=BhKhj$Bhhubj)}(hhh]h)}(hFlush dcache lines of a regionh]hFlush dcache lines of a region}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKhj Chhubah}(h]h ]h"]h$]h&]uh1jhj$Bhhhj=BhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(Cjj(Cjjjuh1j2hhhj]>hNhNubj)}(h**Parameters** ``void *addr`` Initial kernel memory address. ``unsigned long length`` Region size. **Description** Flush every data cache line entry that points to an address in the region requested.h](h)}(h**Parameters**h]j)}(hj2Ch]h Parameters}(hj4ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Cubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKhj,Cubj)}(hhh](j)}(h.``void *addr`` Initial kernel memory address. h](j)}(h``void *addr``h]j)}(hjQCh]h void *addr}(hjSChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOCubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKhjKCubj )}(hhh]h)}(hInitial kernel memory address.h]hInitial kernel memory address.}(hjjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfChKhjgCubah}(h]h ]h"]h$]h&]uh1j hjKCubeh}(h]h ]h"]h$]h&]uh1jhjfChKhjHCubj)}(h&``unsigned long length`` Region size. h](j)}(h``unsigned long length``h]j)}(hjCh]hunsigned long length}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKhjCubj )}(hhh]h)}(h Region size.h]h Region size.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChKhjCubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhjChKhjHCubeh}(h]h ]h"]h$]h&]uh1jhj,Cubh)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKhj,Cubh)}(hTFlush every data cache line entry that points to an address in the region requested.h]hTFlush every data cache line entry that points to an address in the region requested.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chKhj,Cubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]>hhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_memcpy_from_wc (C function)c.drm_memcpy_from_wchNtauh1j!hj]>hhhNhNubj3)}(hhh](j8)}(h_void drm_memcpy_from_wc (struct iosys_map *dst, const struct iosys_map *src, unsigned long len)h]j>)}(h^void drm_memcpy_from_wc(struct iosys_map *dst, const struct iosys_map *src, unsigned long len)h](jc)}(hvoidh]hvoid}(hj DhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjDhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chM1ubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjDhhhjDhM1ubjg)}(hdrm_memcpy_from_wch]jm)}(hdrm_memcpy_from_wch]hdrm_memcpy_from_wc}(hj+DhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'Dubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjDhhhjDhM1ubj)}(hG(struct iosys_map *dst, const struct iosys_map *src, unsigned long len)h](j)}(hstruct iosys_map *dsth](jD)}(hjh]hstruct}(hjGDhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjCDubjV)}(h h]h }(hjTDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjCDubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjeDhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjbDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgDmodnameN classnameNjj)}j]j)}jj-Dsbc.drm_memcpy_from_wcasbuh1hhjCDubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjCDubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCDubjm)}(hdsth]hdst}(hjDhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjCDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?Dubj)}(hconst struct iosys_map *srch](jD)}(hj&h]hconst}(hjDhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjDubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjDubjD)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjDubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjDubh)}(hhh]jm)}(h iosys_maph]h iosys_map}(hjDhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jDc.drm_memcpy_from_wcasbuh1hhjDubjV)}(h h]h }(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjDubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjm)}(hsrch]hsrc}(hj+EhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?Dubj)}(hunsigned long lenh](jc)}(hunsignedh]hunsigned}(hjDEhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj@EubjV)}(h h]h }(hjREhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@Eubjc)}(hlongh]hlong}(hj`EhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj@EubjV)}(h h]h }(hjnEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj@Eubjm)}(hlenh]hlen}(hj|EhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj@Eubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?Dubeh}(h]h ]h"]h$]h&]jjuh1jhjDhhhjDhM1ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjDhhhjDhM1ubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1j7hjDhM1hjChhubj)}(hhh]h)}(hBPerform the fastest available memcpy from a source that may be WC.h]hBPerform the fastest available memcpy from a source that may be WC.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chM(hjEhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjDhM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1j2hhhj]>hNhNubj)}(hXZ**Parameters** ``struct iosys_map *dst`` The destination pointer ``const struct iosys_map *src`` The source pointer ``unsigned long len`` The size of the area o transfer in bytes **Description** Tries an arch optimized memcpy for prefetching reading out of a WC region, and if no such beast is available, falls back to a normal memcpy.h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chM,hjEubj)}(hhh](j)}(h2``struct iosys_map *dst`` The destination pointer h](j)}(h``struct iosys_map *dst``h]j)}(hjEh]hstruct iosys_map *dst}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chM*hjEubj )}(hhh]h)}(hThe destination pointerh]hThe destination pointer}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM*hjEubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhjEhM*hjEubj)}(h3``const struct iosys_map *src`` The source pointer h](j)}(h``const struct iosys_map *src``h]j)}(hj Fh]hconst struct iosys_map *src}(hj"FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chM+hjFubj )}(hhh]h)}(hThe source pointerh]hThe source pointer}(hj9FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5FhM+hj6Fubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhj5FhM+hjEubj)}(h?``unsigned long len`` The size of the area o transfer in bytes h](j)}(h``unsigned long len``h]j)}(hjYFh]hunsigned long len}(hj[FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chM,hjSFubj )}(hhh]h)}(h(The size of the area o transfer in bytesh]h(The size of the area o transfer in bytes}(hjrFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnFhM,hjoFubah}(h]h ]h"]h$]h&]uh1j hjSFubeh}(h]h ]h"]h$]h&]uh1jhjnFhM,hjEubeh}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chM.hjEubh)}(hTries an arch optimized memcpy for prefetching reading out of a WC region, and if no such beast is available, falls back to a normal memcpy.h]hTries an arch optimized memcpy for prefetching reading out of a WC region, and if no such beast is available, falls back to a normal memcpy.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:521: ./drivers/gpu/drm/drm_cache.chM.hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]>hhhNhNubj1)}(h.. _drm_sync_objects:h]h}(h]h ]h"]h$]h&]j<drm-sync-objectsuh1j0hM hj]>hhhhubeh}(h]%drm-cache-handling-and-fast-wc-memcpyah ]h"]'drm cache handling and fast wc memcpy()ah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hDRM Sync Objectsh]hDRM Sync Objects}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhhhhhMubh)}(hXDRM synchronisation objects (syncobj, see struct :c:type:`drm_syncobj`) provide a container for a synchronization primitive which can be used by userspace to explicitly synchronize GPU commands, can be shared between userspace processes, and can be shared between different DRM drivers. Their primary use-case is to implement Vulkan fences and semaphores. The syncobj userspace API provides ioctls for several operations:h](h1DRM synchronisation objects (syncobj, see struct }(hjFhhhNhNubh)}(h:c:type:`drm_syncobj`h]j)}(hjFh]h drm_syncobj}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_syncobjuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhjFubhX_) provide a container for a synchronization primitive which can be used by userspace to explicitly synchronize GPU commands, can be shared between userspace processes, and can be shared between different DRM drivers. Their primary use-case is to implement Vulkan fences and semaphores. The syncobj userspace API provides ioctls for several operations:}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj GhKhjFhhubj@-)}(hXC- Creation and destruction of syncobjs - Import and export of syncobjs to/from a syncobj file descriptor - Import and export a syncobj's underlying fence to/from a sync file - Reset a syncobj (set its fence to NULL) - Signal a syncobj (set a trivially signaled fence) - Wait for a syncobj's fence to appear and be signaled h]jy)}(hhh](jy)}(h$Creation and destruction of syncobjsh]h)}(hjGh]h$Creation and destruction of syncobjs}(hj!GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK%hjGubah}(h]h ]h"]h$]h&]uh1jyhjGubjy)}(h?Import and export of syncobjs to/from a syncobj file descriptorh]h)}(hj7Gh]h?Import and export of syncobjs to/from a syncobj file descriptor}(hj9GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK&hj5Gubah}(h]h ]h"]h$]h&]uh1jyhjGubjy)}(hBImport and export a syncobj's underlying fence to/from a sync fileh]h)}(hjOGh]hDImport and export a syncobj’s underlying fence to/from a sync file}(hjQGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK'hjMGubah}(h]h ]h"]h$]h&]uh1jyhjGubjy)}(h'Reset a syncobj (set its fence to NULL)h]h)}(hjgGh]h'Reset a syncobj (set its fence to NULL)}(hjiGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK(hjeGubah}(h]h ]h"]h$]h&]uh1jyhjGubjy)}(h1Signal a syncobj (set a trivially signaled fence)h]h)}(hjGh]h1Signal a syncobj (set a trivially signaled fence)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK)hj}Gubah}(h]h ]h"]h$]h&]uh1jyhjGubjy)}(h5Wait for a syncobj's fence to appear and be signaled h]h)}(h4Wait for a syncobj's fence to appear and be signaledh]h6Wait for a syncobj’s fence to appear and be signaled}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK*hjGubah}(h]h ]h"]h$]h&]uh1jyhjGubeh}(h]h ]h"]h$]h&]jyjyuh1jyhj.GhK%hjGubah}(h]h ]h"]h$]h&]uh1j?-hj.GhK%hjFhhubh)}(hThe syncobj userspace API also provides operations to manipulate a syncobj in terms of a timeline of struct :c:type:`dma_fence_chain` rather than a single struct :c:type:`dma_fence`, through the following operations:h](hlThe syncobj userspace API also provides operations to manipulate a syncobj in terms of a timeline of struct }(hjGhhhNhNubh)}(h:c:type:`dma_fence_chain`h]j)}(hjGh]hdma_fence_chain}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_fence_chainuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK,hjGubh rather than a single struct }(hjGhhhNhNubh)}(h:c:type:`dma_fence`h]j)}(hjGh]h dma_fence}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_fenceuh1hhjGhK,hjGubh#, through the following operations:}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhK,hjFhhubj@-)}(h- Signal a given point on the timeline - Wait for a given point to appear and/or be signaled - Import and export from/to a given point of a timeline h]jy)}(hhh](jy)}(h$Signal a given point on the timelineh]h)}(hjHh]h$Signal a given point on the timeline}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK0hjHubah}(h]h ]h"]h$]h&]uh1jyhjHubjy)}(h3Wait for a given point to appear and/or be signaledh]h)}(hj0Hh]h3Wait for a given point to appear and/or be signaled}(hj2HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK1hj.Hubah}(h]h ]h"]h$]h&]uh1jyhjHubjy)}(h6Import and export from/to a given point of a timeline h]h)}(h5Import and export from/to a given point of a timelineh]h5Import and export from/to a given point of a timeline}(hjJHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK2hjFHubah}(h]h ]h"]h$]h&]uh1jyhjHubeh}(h]h ]h"]h$]h&]jyjyuh1jyhj'HhK0hjHubah}(h]h ]h"]h$]h&]uh1j?-hj'HhK0hjFhhubh)}(hXJAt it's core, a syncobj is simply a wrapper around a pointer to a struct :c:type:`dma_fence` which may be NULL. When a syncobj is first created, its pointer is either NULL or a pointer to an already signaled fence depending on whether the :c:type:`DRM_SYNCOBJ_CREATE_SIGNALED` flag is passed to :c:type:`DRM_IOCTL_SYNCOBJ_CREATE`.h](hKAt it’s core, a syncobj is simply a wrapper around a pointer to a struct }(hjkHhhhNhNubh)}(h:c:type:`dma_fence`h]j)}(hjuHh]h dma_fence}(hjwHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjsHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_fenceuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK4hjkHubh which may be NULL. When a syncobj is first created, its pointer is either NULL or a pointer to an already signaled fence depending on whether the }(hjkHhhhNhNubh)}(h%:c:type:`DRM_SYNCOBJ_CREATE_SIGNALED`h]j)}(hjHh]hDRM_SYNCOBJ_CREATE_SIGNALED}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_SYNCOBJ_CREATE_SIGNALEDuh1hhjHhK4hjkHubh flag is passed to }(hjkHhhhNhNubh)}(h":c:type:`DRM_IOCTL_SYNCOBJ_CREATE`h]j)}(hjHh]hDRM_IOCTL_SYNCOBJ_CREATE}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_CREATEuh1hhjHhK4hjkHubh.}(hjkHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhK4hjFhhubh)}(hXIf the syncobj is considered as a binary (its state is either signaled or unsignaled) primitive, when GPU work is enqueued in a DRM driver to signal the syncobj, the syncobj's fence is replaced with a fence which will be signaled by the completion of that work. If the syncobj is considered as a timeline primitive, when GPU work is enqueued in a DRM driver to signal the a given point of the syncobj, a new struct :c:type:`dma_fence_chain` pointing to the DRM driver's fence and also pointing to the previous fence that was in the syncobj. The new struct :c:type:`dma_fence_chain` fence replace the syncobj's fence and will be signaled by completion of the DRM driver's work and also any work associated with the fence previously in the syncobj.h](hXIf the syncobj is considered as a binary (its state is either signaled or unsignaled) primitive, when GPU work is enqueued in a DRM driver to signal the syncobj, the syncobj’s fence is replaced with a fence which will be signaled by the completion of that work. If the syncobj is considered as a timeline primitive, when GPU work is enqueued in a DRM driver to signal the a given point of the syncobj, a new struct }(hjHhhhNhNubh)}(h:c:type:`dma_fence_chain`h]j)}(hjHh]hdma_fence_chain}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_fence_chainuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK;hjHubhv pointing to the DRM driver’s fence and also pointing to the previous fence that was in the syncobj. The new struct }(hjHhhhNhNubh)}(h:c:type:`dma_fence_chain`h]j)}(hjIh]hdma_fence_chain}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_fence_chainuh1hhj IhK;hjHubh fence replace the syncobj’s fence and will be signaled by completion of the DRM driver’s work and also any work associated with the fence previously in the syncobj.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj IhK;hjFhhubh)}(hWhen GPU work which waits on a syncobj is enqueued in a DRM driver, at the time the work is enqueued, it waits on the syncobj's fence before submitting the work to hardware. That fence is either :h]hWhen GPU work which waits on a syncobj is enqueued in a DRM driver, at the time the work is enqueued, it waits on the syncobj’s fence before submitting the work to hardware. That fence is either :}(hj8IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKGhjFhhubj@-)}(h- The syncobj's current fence if the syncobj is considered as a binary primitive. - The struct :c:type:`dma_fence` associated with a given point if the syncobj is considered as a timeline primitive. h]jy)}(hhh](jy)}(hOThe syncobj's current fence if the syncobj is considered as a binary primitive.h]h)}(hOThe syncobj's current fence if the syncobj is considered as a binary primitive.h]hQThe syncobj’s current fence if the syncobj is considered as a binary primitive.}(hjRIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKKhjNIubah}(h]h ]h"]h$]h&]uh1jyhjKIubjy)}(hsThe struct :c:type:`dma_fence` associated with a given point if the syncobj is considered as a timeline primitive. h]h)}(hrThe struct :c:type:`dma_fence` associated with a given point if the syncobj is considered as a timeline primitive.h](h The struct }(hjkIhhhNhNubh)}(h:c:type:`dma_fence`h]j)}(hjuIh]h dma_fence}(hjwIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjsIubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_fenceuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKMhjkIubhT associated with a given point if the syncobj is considered as a timeline primitive.}(hjkIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhKMhjgIubah}(h]h ]h"]h$]h&]uh1jyhjKIubeh}(h]h ]h"]h$]h&]jyjyuh1jyhj`IhKKhjGIubah}(h]h ]h"]h$]h&]uh1j?-hj`IhKKhjFhhubh)}(hsIf the syncobj's fence is NULL or not present in the syncobj's timeline, the enqueue operation is expected to fail.h]hwIf the syncobj’s fence is NULL or not present in the syncobj’s timeline, the enqueue operation is expected to fail.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKPhjFhhubh)}(hXWith binary syncobj, all manipulation of the syncobjs's fence happens in terms of the current fence at the time the ioctl is called by userspace regardless of whether that operation is an immediate host-side operation (signal or reset) or or an operation which is enqueued in some driver queue. :c:type:`DRM_IOCTL_SYNCOBJ_RESET` and :c:type:`DRM_IOCTL_SYNCOBJ_SIGNAL` can be used to manipulate a syncobj from the host by resetting its pointer to NULL or setting its pointer to a fence which is already signaled.h](hX)With binary syncobj, all manipulation of the syncobjs’s fence happens in terms of the current fence at the time the ioctl is called by userspace regardless of whether that operation is an immediate host-side operation (signal or reset) or or an operation which is enqueued in some driver queue. }(hjIhhhNhNubh)}(h!:c:type:`DRM_IOCTL_SYNCOBJ_RESET`h]j)}(hjIh]hDRM_IOCTL_SYNCOBJ_RESET}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_RESETuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKShjIubh and }(hjIhhhNhNubh)}(h":c:type:`DRM_IOCTL_SYNCOBJ_SIGNAL`h]j)}(hjIh]hDRM_IOCTL_SYNCOBJ_SIGNAL}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_SIGNALuh1hhjIhKShjIubh can be used to manipulate a syncobj from the host by resetting its pointer to NULL or setting its pointer to a fence which is already signaled.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhKShjFhhubh)}(hWith a timeline syncobj, all manipulation of the synobj's fence happens in terms of a u64 value referring to point in the timeline. See dma_fence_chain_find_seqno() to see how a given point is found in the timeline.h]hWith a timeline syncobj, all manipulation of the synobj’s fence happens in terms of a u64 value referring to point in the timeline. See dma_fence_chain_find_seqno() to see how a given point is found in the timeline.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK[hjFhhubh)}(hXNote that applications should be careful to always use timeline set of ioctl() when dealing with syncobj considered as timeline. Using a binary set of ioctl() with a syncobj considered as timeline could result incorrect synchronization. The use of binary syncobj is supported through the timeline set of ioctl() by using a point value of 0, this will reproduce the behavior of the binary set of ioctl() (for example replace the syncobj's fence when signaling).h]hXNote that applications should be careful to always use timeline set of ioctl() when dealing with syncobj considered as timeline. Using a binary set of ioctl() with a syncobj considered as timeline could result incorrect synchronization. The use of binary syncobj is supported through the timeline set of ioctl() by using a point value of 0, this will reproduce the behavior of the binary set of ioctl() (for example replace the syncobj’s fence when signaling).}(hj"JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chK`hjFhhubh)}(hhh](h)}(hHost-side wait on syncobjsh]hHost-side wait on syncobjs}(hj4JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1JhNhNubh)}(hX:c:type:`DRM_IOCTL_SYNCOBJ_WAIT` takes an array of syncobj handles and does a host-side wait on all of the syncobj fences simultaneously. If :c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL` is set, the wait ioctl will wait on all of the syncobj fences to be signaled before it returns. Otherwise, it returns once at least one syncobj fence has been signaled and the index of a signaled fence is written back to the client.h](h)}(h :c:type:`DRM_IOCTL_SYNCOBJ_WAIT`h]j)}(hjHJh]hDRM_IOCTL_SYNCOBJ_WAIT}(hjJJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjFJubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_WAITuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKlhjBJubhm takes an array of syncobj handles and does a host-side wait on all of the syncobj fences simultaneously. If }(hjBJhhhNhNubh)}(h):c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL`h]j)}(hjlJh]hDRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL}(hjnJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjjJubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALLuh1hhjeJhKlhjBJubh is set, the wait ioctl will wait on all of the syncobj fences to be signaled before it returns. Otherwise, it returns once at least one syncobj fence has been signaled and the index of a signaled fence is written back to the client.}(hjBJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjeJhKlhj1Jubh)}(hXUnlike the enqueued GPU work dependencies which fail if they see a NULL fence in a syncobj, if :c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT` is set, the host-side wait will first wait for the syncobj to receive a non-NULL fence and then wait on that fence. If :c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT` is not set and any one of the syncobjs in the array has a NULL fence, -EINVAL will be returned. Assuming the syncobj starts off with a NULL fence, this allows a client to do a host wait in one thread (or process) which waits on GPU work submitted in another thread (or process) without having to manually synchronize between the two. This requirement is inherited from the Vulkan fence API.h](h_Unlike the enqueued GPU work dependencies which fail if they see a NULL fence in a syncobj, if }(hjJhhhNhNubh)}(h0:c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT`h]j)}(hjJh]h&DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3&DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMITuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKshjJubhx is set, the host-side wait will first wait for the syncobj to receive a non-NULL fence and then wait on that fence. If }(hjJhhhNhNubh)}(h0:c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT`h]j)}(hjJh]h&DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3&DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMITuh1hhjJhKshjJubhX is not set and any one of the syncobjs in the array has a NULL fence, -EINVAL will be returned. Assuming the syncobj starts off with a NULL fence, this allows a client to do a host wait in one thread (or process) which waits on GPU work submitted in another thread (or process) without having to manually synchronize between the two. This requirement is inherited from the Vulkan fence API.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhKshj1Jubh)}(hX+If :c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE` is set, the ioctl will also set a fence deadline hint on the backing fences before waiting, to provide the fence signaler with an appropriate sense of urgency. The deadline is specified as an absolute :c:type:`CLOCK_MONOTONIC` value in units of ns.h](hIf }(hjJhhhNhNubh)}(h.:c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE`h]j)}(hjJh]h$DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3$DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhjJubh is set, the ioctl will also set a fence deadline hint on the backing fences before waiting, to provide the fence signaler with an appropriate sense of urgency. The deadline is specified as an absolute }(hjJhhhNhNubh)}(h:c:type:`CLOCK_MONOTONIC`h]j)}(hjKh]hCLOCK_MONOTONIC}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3CLOCK_MONOTONICuh1hhjKhKhjJubh value in units of ns.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhKhj1Jubh)}(hSimilarly, :c:type:`DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT` takes an array of syncobj handles as well as an array of u64 points and does a host-side wait on all of syncobj fences at the given points simultaneously.h](h Similarly, }(hj=KhhhNhNubh)}(h):c:type:`DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT`h]j)}(hjGKh]hDRM_IOCTL_SYNCOBJ_TIMELINE_WAIT}(hjIKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjEKubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_TIMELINE_WAITuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhj=Kubh takes an array of syncobj handles as well as an array of u64 points and does a host-side wait on all of syncobj fences at the given points simultaneously.}(hj=KhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdKhKhj1Jubh)}(hXZ:c:type:`DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT` also adds the ability to wait for a given fence to materialize on the timeline without waiting for the fence to be signaled by using the :c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE` flag. This requirement is inherited from the wait-before-signal behavior required by the Vulkan timeline semaphore API.h](h)}(h):c:type:`DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT`h]j)}(hjuKh]hDRM_IOCTL_SYNCOBJ_TIMELINE_WAIT}(hjwKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjsKubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_TIMELINE_WAITuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhjoKubh also adds the ability to wait for a given fence to materialize on the timeline without waiting for the fence to be signaled by using the }(hjoKhhhNhNubh)}(h/:c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE`h]j)}(hjKh]h%DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3%DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLEuh1hhjKhKhjoKubhx flag. This requirement is inherited from the wait-before-signal behavior required by the Vulkan timeline semaphore API.}(hjoKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhKhj1Jubh)}(hAlternatively, :c:type:`DRM_IOCTL_SYNCOBJ_EVENTFD` can be used to wait without blocking: an eventfd will be signaled when the syncobj is. This is useful to integrate the wait in an event loop.h](hAlternatively, }(hjKhhhNhNubh)}(h#:c:type:`DRM_IOCTL_SYNCOBJ_EVENTFD`h]j)}(hjKh]hDRM_IOCTL_SYNCOBJ_EVENTFD}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_EVENTFDuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhjKubh can be used to wait without blocking: an eventfd will be signaled when the syncobj is. This is useful to integrate the wait in an event loop.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhKhj1Jubeh}(h]host-side-wait-on-syncobjsah ]h"]host-side wait on syncobjsah$]h&]uh1hhjFhhhNhNubh)}(hhh](h)}(hImport/export of syncobjsh]hImport/export of syncobjs}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhNhNubh)}(h:c:type:`DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE` and :c:type:`DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD` provide two mechanisms for import/export of syncobjs.h](h)}(h(:c:type:`DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE`h]j)}(hjLh]hDRM_IOCTL_SYNCOBJ_FD_TO_HANDLE}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_FD_TO_HANDLEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhj Lubh and }(hj LhhhNhNubh)}(h(:c:type:`DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD`h]j)}(hj5Lh]hDRM_IOCTL_SYNCOBJ_HANDLE_TO_FD}(hj7LhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj3Lubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_HANDLE_TO_FDuh1hhj.LhKhj Lubh6 provide two mechanisms for import/export of syncobjs.}(hj LhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.LhKhjKubh)}(hXThe first lets the client import or export an entire syncobj to a file descriptor. These fd's are opaque and have no other use case, except passing the syncobj between processes. All exported file descriptors and any syncobj handles created as a result of importing those file descriptors own a reference to the same underlying struct :c:type:`drm_syncobj` and the syncobj can be used persistently across all the processes with which it is shared. The syncobj is freed only once the last reference is dropped. Unlike dma-buf, importing a syncobj creates a new handle (with its own reference) for every import instead of de-duplicating. The primary use-case of this persistent import/export is for shared Vulkan fences and semaphores.h](hXQThe first lets the client import or export an entire syncobj to a file descriptor. These fd’s are opaque and have no other use case, except passing the syncobj between processes. All exported file descriptors and any syncobj handles created as a result of importing those file descriptors own a reference to the same underlying struct }(hj\LhhhNhNubh)}(h:c:type:`drm_syncobj`h]j)}(hjfLh]h drm_syncobj}(hjhLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjdLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_syncobjuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhj\LubhXy and the syncobj can be used persistently across all the processes with which it is shared. The syncobj is freed only once the last reference is dropped. Unlike dma-buf, importing a syncobj creates a new handle (with its own reference) for every import instead of de-duplicating. The primary use-case of this persistent import/export is for shared Vulkan fences and semaphores.}(hj\LhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjLhKhjKubh)}(hXThe second import/export mechanism, which is indicated by :c:type:`DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE` or :c:type:`DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE` lets the client import/export the syncobj's current fence from/to a :c:type:`sync_file`. When a syncobj is exported to a sync file, that sync file wraps the sycnobj's fence at the time of export and any later signal or reset operations on the syncobj will not affect the exported sync file. When a sync file is imported into a syncobj, the syncobj's fence is set to the fence wrapped by that sync file. Because sync files are immutable, resetting or signaling the syncobj will not affect any sync files whose fences have been imported into the syncobj.h](h:The second import/export mechanism, which is indicated by }(hjLhhhNhNubh)}(h9:c:type:`DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE`h]j)}(hjLh]h/DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3/DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhjLubh or }(hjLhhhNhNubh)}(h9:c:type:`DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE`h]j)}(hjLh]h/DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3/DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILEuh1hhjLhKhjLubhG lets the client import/export the syncobj’s current fence from/to a }(hjLhhhNhNubh)}(h:c:type:`sync_file`h]j)}(hjLh]h sync_file}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 sync_fileuh1hhjLhKhjLubhX. When a syncobj is exported to a sync file, that sync file wraps the sycnobj’s fence at the time of export and any later signal or reset operations on the syncobj will not affect the exported sync file. When a sync file is imported into a syncobj, the syncobj’s fence is set to the fence wrapped by that sync file. Because sync files are immutable, resetting or signaling the syncobj will not affect any sync files whose fences have been imported into the syncobj.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjLhKhjKubeh}(h]import-export-of-syncobjsah ]h"]import/export of syncobjsah$]h&]uh1hhjFhhhNhNubh)}(hhh](h)}(h5Import/export of timeline points in timeline syncobjsh]h5Import/export of timeline points in timeline syncobjs}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhNhNubh)}(h:c:type:`DRM_IOCTL_SYNCOBJ_TRANSFER` provides a mechanism to transfer a struct :c:type:`dma_fence_chain` of a syncobj at a given u64 point to another u64 point into another syncobj.h](h)}(h$:c:type:`DRM_IOCTL_SYNCOBJ_TRANSFER`h]j)}(hj%Mh]hDRM_IOCTL_SYNCOBJ_TRANSFER}(hj'MhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj#Mubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3DRM_IOCTL_SYNCOBJ_TRANSFERuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhjMubh+ provides a mechanism to transfer a struct }(hjMhhhNhNubh)}(h:c:type:`dma_fence_chain`h]j)}(hjIMh]hdma_fence_chain}(hjKMhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjGMubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_fence_chainuh1hhjBMhKhjMubhM of a syncobj at a given u64 point to another u64 point into another syncobj.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBMhKhjMubh)}(hNote that if you want to transfer a struct :c:type:`dma_fence_chain` from a given point on a timeline syncobj from/into a binary syncobj, you can use the point 0 to mean take/replace the fence in the syncobj.h](h+Note that if you want to transfer a struct }(hjpMhhhNhNubh)}(h:c:type:`dma_fence_chain`h]j)}(hjzMh]hdma_fence_chain}(hj|MhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjxMubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3dma_fence_chainuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:529: ./drivers/gpu/drm/drm_syncobj.chKhjpMubh from a given point on a timeline syncobj from/into a binary syncobj, you can use the point 0 to mean take/replace the fence in the syncobj.}(hjpMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhKhjMubeh}(h]5import-export-of-timeline-points-in-timeline-syncobjsah ]h"]5import/export of timeline points in timeline syncobjsah$]h&]uh1hhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_syncobj (C struct) c.drm_syncobjhNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(h drm_syncobjh]j>)}(hstruct drm_syncobjh](jD)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjMhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKubjV)}(h h]h }(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMhhhjMhKubjg)}(h drm_syncobjh]jm)}(hjMh]h drm_syncobj}(hjMhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjMhhhjMhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjMhhhjMhKubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1j7hjMhKhjMhhubj)}(hhh]h)}(h sync object.h]h sync object.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK#hjNhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjMhKubeh}(h]h ](jstructeh"]h$]h&]jjjjNjjNjjjuh1j2hhhjFhNhNubj)}(hX**Definition**:: struct drm_syncobj { struct kref refcount; struct dma_fence __rcu *fence; struct list_head cb_list; struct list_head ev_fd_list; spinlock_t lock; struct file *file; }; **Members** ``refcount`` Reference count of this object. ``fence`` NULL or a pointer to the fence bound to this object. This field should not be used directly. Use drm_syncobj_fence_get() and drm_syncobj_replace_fence() instead. ``cb_list`` List of callbacks to call when the :c:type:`fence` gets replaced. ``ev_fd_list`` List of registered eventfd. ``lock`` Protects :c:type:`cb_list` and :c:type:`ev_fd_list`, and write-locks :c:type:`fence`. ``file`` A file backing for this syncobj.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj)NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Nubh:}(hj%NhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK'hj!NubjT)}(hstruct drm_syncobj { struct kref refcount; struct dma_fence __rcu *fence; struct list_head cb_list; struct list_head ev_fd_list; spinlock_t lock; struct file *file; };h]hstruct drm_syncobj { struct kref refcount; struct dma_fence __rcu *fence; struct list_head cb_list; struct list_head ev_fd_list; spinlock_t lock; struct file *file; };}hjBNsbah}(h]h ]h"]h$]h&]jjuh1jShU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK)hj!Nubh)}(h **Members**h]j)}(hjSNh]hMembers}(hjUNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK2hj!Nubj)}(hhh](j)}(h-``refcount`` Reference count of this object. h](j)}(h ``refcount``h]j)}(hjrNh]hrefcount}(hjtNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK*hjlNubj )}(hhh]h)}(hReference count of this object.h]hReference count of this object.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhK*hjNubah}(h]h ]h"]h$]h&]uh1j hjlNubeh}(h]h ]h"]h$]h&]uh1jhjNhK*hjiNubj)}(h``fence`` NULL or a pointer to the fence bound to this object. This field should not be used directly. Use drm_syncobj_fence_get() and drm_syncobj_replace_fence() instead. h](j)}(h ``fence``h]j)}(hjNh]hfence}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK1hjNubj )}(hhh](h)}(h4NULL or a pointer to the fence bound to this object.h]h4NULL or a pointer to the fence bound to this object.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK.hjNubh)}(hlThis field should not be used directly. Use drm_syncobj_fence_get() and drm_syncobj_replace_fence() instead.h]hlThis field should not be used directly. Use drm_syncobj_fence_get() and drm_syncobj_replace_fence() instead.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK0hjNubeh}(h]h ]h"]h$]h&]uh1j hjNubeh}(h]h ]h"]h$]h&]uh1jhjNhK1hjiNubj)}(hN``cb_list`` List of callbacks to call when the :c:type:`fence` gets replaced. h](j)}(h ``cb_list``h]j)}(hjNh]hcb_list}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK6hjNubj )}(hhh]h)}(hAList of callbacks to call when the :c:type:`fence` gets replaced.h](h#List of callbacks to call when the }(hj OhhhNhNubh)}(h:c:type:`fence`h]j)}(hjOh]hfence}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3fenceuh1hhj OhK6hj Oubh gets replaced.}(hj OhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj OhK6hj Oubah}(h]h ]h"]h$]h&]uh1j hjNubeh}(h]h ]h"]h$]h&]uh1jhj OhK6hjiNubj)}(h+``ev_fd_list`` List of registered eventfd. h](j)}(h``ev_fd_list``h]j)}(hjPOh]h ev_fd_list}(hjROhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNOubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK:hjJOubj )}(hhh]h)}(hList of registered eventfd.h]hList of registered eventfd.}(hjiOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeOhK:hjfOubah}(h]h ]h"]h$]h&]uh1j hjJOubeh}(h]h ]h"]h$]h&]uh1jhjeOhK:hjiNubj)}(h_``lock`` Protects :c:type:`cb_list` and :c:type:`ev_fd_list`, and write-locks :c:type:`fence`. h](j)}(h``lock``h]j)}(hjOh]hlock}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK>hjOubj )}(hhh]h)}(hUProtects :c:type:`cb_list` and :c:type:`ev_fd_list`, and write-locks :c:type:`fence`.h](h Protects }(hjOhhhNhNubh)}(h:c:type:`cb_list`h]j)}(hjOh]hcb_list}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3cb_listuh1hhjOhK>hjOubh and }(hjOhhhNhNubh)}(h:c:type:`ev_fd_list`h]j)}(hjOh]h ev_fd_list}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 ev_fd_listuh1hhjOhK>hjOubh, and write-locks }(hjOhhhNhNubh)}(h:c:type:`fence`h]j)}(hjOh]hfence}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3fenceuh1hhjOhK>hjOubh.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhK>hjOubah}(h]h ]h"]h$]h&]uh1j hjOubeh}(h]h ]h"]h$]h&]uh1jhjOhK>hjiNubj)}(h)``file`` A file backing for this syncobj.h](j)}(h``file``h]j)}(hj+Ph]hfile}(hj-PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)Pubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKAhj%Pubj )}(hhh]h)}(h A file backing for this syncobj.h]h A file backing for this syncobj.}(hjDPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKBhjAPubah}(h]h ]h"]h$]h&]uh1j hj%Pubeh}(h]h ]h"]h$]h&]uh1jhj@PhKAhjiNubeh}(h]h ]h"]h$]h&]uh1jhj!Nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubh)}(h**Description**h]j)}(hjnPh]h Description}(hjpPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlPubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKEhjFhhubh)}(hOThis structure defines a generic sync object which wraps a :c:type:`dma_fence`.h](h;This structure defines a generic sync object which wraps a }(hjPhhhNhNubh)}(h:c:type:`dma_fence`h]j)}(hjPh]h dma_fence}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 dma_fenceuh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK$hjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjPhK$hjFhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_syncobj_get (C function)c.drm_syncobj_gethNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(h.void drm_syncobj_get (struct drm_syncobj *obj)h]j>)}(h-void drm_syncobj_get(struct drm_syncobj *obj)h](jc)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjPhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKOubjV)}(h h]h }(hjPhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPhhhjPhKOubjg)}(hdrm_syncobj_geth]jm)}(hdrm_syncobj_geth]hdrm_syncobj_get}(hjPhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjPhhhjPhKOubj)}(h(struct drm_syncobj *obj)h]j)}(hstruct drm_syncobj *objh](jD)}(hjh]hstruct}(hj QhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjQubjV)}(h h]h }(hjQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hj*QhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj'Qubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,QmodnameN classnameNjj)}j]j)}jjPsbc.drm_syncobj_getasbuh1hhjQubjV)}(h h]h }(hjJQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjQubj)}(hjh]h*}(hjXQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjm)}(hobjh]hobj}(hjeQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubah}(h]h ]h"]h$]h&]jjuh1jhjPhhhjPhKOubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjPhhhjPhKOubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1j7hjPhKOhjPhhubj)}(hhh]h)}(hacquire a syncobj referenceh]hacquire a syncobj reference}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKIhjQhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjPhKOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1j2hhhjFhNhNubj)}(h**Parameters** ``struct drm_syncobj *obj`` sync object **Description** This acquires an additional reference to **obj**. It is illegal to call this without already holding a reference. No locks required.h](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKMhjQubj)}(hhh]j)}(h(``struct drm_syncobj *obj`` sync object h](j)}(h``struct drm_syncobj *obj``h]j)}(hjQh]hstruct drm_syncobj *obj}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKJhjQubj )}(hhh]h)}(h sync objecth]h sync object}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKJhjQubah}(h]h ]h"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]uh1jhjQhKJhjQubah}(h]h ]h"]h$]h&]uh1jhjQubh)}(h**Description**h]j)}(hj Rh]h Description}(hj RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Rubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKLhjQubh)}(hThis acquires an additional reference to **obj**. It is illegal to call this without already holding a reference. No locks required.h](h)This acquires an additional reference to }(hj!RhhhNhNubj)}(h**obj**h]hobj}(hj)RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!RubhT. It is illegal to call this without already holding a reference. No locks required.}(hj!RhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKLhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_syncobj_put (C function)c.drm_syncobj_puthNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(h.void drm_syncobj_put (struct drm_syncobj *obj)h]j>)}(h-void drm_syncobj_put(struct drm_syncobj *obj)h](jc)}(hvoidh]hvoid}(hjbRhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj^RhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKYubjV)}(h h]h }(hjqRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^RhhhjpRhKYubjg)}(hdrm_syncobj_puth]jm)}(hdrm_syncobj_puth]hdrm_syncobj_put}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj^RhhhjpRhKYubj)}(h(struct drm_syncobj *obj)h]j)}(hstruct drm_syncobj *objh](jD)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjRubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j)}jjRsbc.drm_syncobj_putasbuh1hhjRubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjm)}(hobjh]hobj}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubah}(h]h ]h"]h$]h&]jjuh1jhj^RhhhjpRhKYubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjZRhhhjpRhKYubah}(h]jURah ](jjeh"]h$]h&]jj)jhuh1j7hjpRhKYhjWRhhubj)}(hhh]h)}(h%release a reference to a sync object.h]h%release a reference to a sync object.}(hj"ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKVhjShhubah}(h]h ]h"]h$]h&]uh1jhjWRhhhjpRhKYubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:Sjj:Sjjjuh1j2hhhjFhNhNubj)}(h:**Parameters** ``struct drm_syncobj *obj`` sync object.h](h)}(h**Parameters**h]j)}(hjDSh]h Parameters}(hjFShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBSubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKZhj>Subj)}(hhh]j)}(h(``struct drm_syncobj *obj`` sync object.h](j)}(h``struct drm_syncobj *obj``h]j)}(hjcSh]hstruct drm_syncobj *obj}(hjeShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK\hj]Subj )}(hhh]h)}(h sync object.h]h sync object.}(hj|ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKWhjySubah}(h]h ]h"]h$]h&]uh1j hj]Subeh}(h]h ]h"]h$]h&]uh1jhjxShK\hjZSubah}(h]h ]h"]h$]h&]uh1jhj>Subeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_syncobj_fence_get (C function)c.drm_syncobj_fence_gethNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(hFstruct dma_fence * drm_syncobj_fence_get (struct drm_syncobj *syncobj)h]j>)}(hDstruct dma_fence *drm_syncobj_fence_get(struct drm_syncobj *syncobj)h](jD)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjShhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKjubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjShhhjShKjubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hjShhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j)}jdrm_syncobj_fence_getsbc.drm_syncobj_fence_getasbuh1hhjShhhjShKjubjV)}(h h]h }(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjShhhjShKjubj)}(hjh]h*}(hj ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShKjubjg)}(hdrm_syncobj_fence_geth]jm)}(hjSh]hdrm_syncobj_fence_get}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjShhhjShKjubj)}(h(struct drm_syncobj *syncobj)h]j)}(hstruct drm_syncobj *syncobjh](jD)}(hjh]hstruct}(hj7ThhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj3TubjV)}(h h]h }(hjDThhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3Tubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hjUThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjRTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWTmodnameN classnameNjj)}j]jSc.drm_syncobj_fence_getasbuh1hhj3TubjV)}(h h]h }(hjsThhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3Tubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Tubjm)}(hsyncobjh]hsyncobj}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3Tubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/Tubah}(h]h ]h"]h$]h&]jjuh1jhjShhhjShKjubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjShhhjShKjubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1j7hjShKjhjShhubj)}(hhh]h)}(h+get a reference to a fence in a sync objecth]h+get a reference to a fence in a sync object}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhK`hjThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShKjubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1j2hhhjFhNhNubj)}(hXX**Parameters** ``struct drm_syncobj *syncobj`` sync object. **Description** This acquires additional reference to :c:type:`drm_syncobj.fence ` contained in **obj**, if not NULL. It is illegal to call this without already holding a reference. No locks required. **Return** Either the fence of **obj** or NULL if there's none.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKdhjTubj)}(hhh]j)}(h-``struct drm_syncobj *syncobj`` sync object. h](j)}(h``struct drm_syncobj *syncobj``h]j)}(hjTh]hstruct drm_syncobj *syncobj}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKahjTubj )}(hhh]h)}(h sync object.h]h sync object.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKahjUubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjUhKahjTubah}(h]h ]h"]h$]h&]uh1jhjTubh)}(h**Description**h]j)}(hj4Uh]h Description}(hj6UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Uubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKchjTubh)}(hThis acquires additional reference to :c:type:`drm_syncobj.fence ` contained in **obj**, if not NULL. It is illegal to call this without already holding a reference. No locks required.h](h&This acquires additional reference to }(hjJUhhhNhNubh)}(h):c:type:`drm_syncobj.fence `h]j)}(hjTUh]hdrm_syncobj.fence}(hjVUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjRUubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_syncobjuh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKchjJUubh contained in }(hjJUhhhNhNubj)}(h**obj**h]hobj}(hjvUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJUubha, if not NULL. It is illegal to call this without already holding a reference. No locks required.}(hjJUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjqUhKchjTubh)}(h **Return**h]j)}(hjUh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKghjTubh)}(h4Either the fence of **obj** or NULL if there's none.h](hEither the fence of }(hjUhhhNhNubj)}(h**obj**h]hobj}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh or NULL if there’s none.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:532: ./include/drm/drm_syncobj.hhKghjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_syncobj_find (C function)c.drm_syncobj_findhNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(hQstruct drm_syncobj * drm_syncobj_find (struct drm_file *file_private, u32 handle)h]j>)}(hOstruct drm_syncobj *drm_syncobj_find(struct drm_file *file_private, u32 handle)h](jD)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjUhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chKubjV)}(h h]h }(hjUhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUhhhjUhKubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j)}jdrm_syncobj_findsbc.drm_syncobj_findasbuh1hhjUhhhjUhKubjV)}(h h]h }(hj'VhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUhhhjUhKubj)}(hjh]h*}(hj5VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhKubjg)}(hdrm_syncobj_findh]jm)}(hj$Vh]hdrm_syncobj_find}(hjFVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjBVubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjUhhhjUhKubj)}(h+(struct drm_file *file_private, u32 handle)h](j)}(hstruct drm_file *file_privateh](jD)}(hjh]hstruct}(hjaVhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj]VubjV)}(h h]h }(hjnVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]Vubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj|Vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j"Vc.drm_syncobj_findasbuh1hhj]VubjV)}(h h]h }(hjVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]Vubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Vubjm)}(h file_privateh]h file_private}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]Vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYVubj)}(h u32 handleh](h)}(hhh]jm)}(hu32h]hu32}(hjVhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j"Vc.drm_syncobj_findasbuh1hhjVubjV)}(h h]h }(hjVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVubjm)}(hhandleh]hhandle}(hjWhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYVubeh}(h]h ]h"]h$]h&]jjuh1jhjUhhhjUhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjUhhhjUhKubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1j7hjUhKhjUhhubj)}(hhh]h)}(h#lookup and reference a sync object.h]h#lookup and reference a sync object.}(hj*WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chKhj'Whhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBWjjBWjjjuh1j2hhhjFhNhNubj)}(hX **Parameters** ``struct drm_file *file_private`` drm file private pointer ``u32 handle`` sync object handle to lookup. **Description** Returns a reference to the syncobj pointed to by handle or NULL. The reference must be released by calling drm_syncobj_put().h](h)}(h**Parameters**h]j)}(hjLWh]h Parameters}(hjNWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJWubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chKhjFWubj)}(hhh](j)}(h;``struct drm_file *file_private`` drm file private pointer h](j)}(h!``struct drm_file *file_private``h]j)}(hjkWh]hstruct drm_file *file_private}(hjmWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiWubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chKhjeWubj )}(hhh]h)}(hdrm file private pointerh]hdrm file private pointer}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhKhjWubah}(h]h ]h"]h$]h&]uh1j hjeWubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjbWubj)}(h-``u32 handle`` sync object handle to lookup. h](j)}(h``u32 handle``.h]j)}(hjWh]h u32 handle}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chKhjWubj )}(hhh]h)}(hsync object handle to lookup.h]hsync object handle to lookup.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhKhjWubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjbWubeh}(h]h ]h"]h$]h&]uh1jhjFWubh)}(h**Description**h]j)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chKhjFWubh)}(h}Returns a reference to the syncobj pointed to by handle or NULL. The reference must be released by calling drm_syncobj_put().h]h}Returns a reference to the syncobj pointed to by handle or NULL. The reference must be released by calling drm_syncobj_put().}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chKhjFWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_syncobj_add_point (C function)c.drm_syncobj_add_pointhNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(hvoid drm_syncobj_add_point (struct drm_syncobj *syncobj, struct dma_fence_chain *chain, struct dma_fence *fence, uint64_t point)h]j>)}(hvoid drm_syncobj_add_point(struct drm_syncobj *syncobj, struct dma_fence_chain *chain, struct dma_fence *fence, uint64_t point)h](jc)}(hvoidh]hvoid}(hj$XhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj XhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMLubjV)}(h h]h }(hj3XhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj Xhhhj2XhMLubjg)}(hdrm_syncobj_add_pointh]jm)}(hdrm_syncobj_add_pointh]hdrm_syncobj_add_point}(hjEXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjAXubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj Xhhhj2XhMLubj)}(he(struct drm_syncobj *syncobj, struct dma_fence_chain *chain, struct dma_fence *fence, uint64_t point)h](j)}(hstruct drm_syncobj *syncobjh](jD)}(hjh]hstruct}(hjaXhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj]XubjV)}(h h]h }(hjnXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]Xubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hjXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj|Xubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j)}jjGXsbc.drm_syncobj_add_pointasbuh1hhj]XubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]Xubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Xubjm)}(hsyncobjh]hsyncobj}(hjXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]Xubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYXubj)}(hstruct dma_fence_chain *chainh](jD)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjXubjV)}(h h]h }(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXubh)}(hhh]jm)}(hdma_fence_chainh]hdma_fence_chain}(hjXhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]jXc.drm_syncobj_add_pointasbuh1hhjXubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjm)}(hchainh]hchain}(hj*YhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYXubj)}(hstruct dma_fence *fenceh](jD)}(hjh]hstruct}(hjCYhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj?YubjV)}(h h]h }(hjPYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?Yubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hjaYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^Yubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcYmodnameN classnameNjj)}j]jXc.drm_syncobj_add_pointasbuh1hhj?YubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?Yubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Yubjm)}(hfenceh]hfence}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?Yubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYXubj)}(huint64_t pointh](h)}(hhh]jm)}(huint64_th]huint64_t}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]jXc.drm_syncobj_add_pointasbuh1hhjYubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYubjm)}(hpointh]hpoint}(hjYhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYXubeh}(h]h ]h"]h$]h&]jjuh1jhj Xhhhj2XhMLubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjXhhhj2XhMLubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1j7hj2XhMLhjXhhubj)}(hhh]h)}(h%add new timeline point to the syncobjh]h%add new timeline point to the syncobj}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMDhj Zhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhj2XhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$Zjj$Zjjjuh1j2hhhjFhNhNubj)}(hXj**Parameters** ``struct drm_syncobj *syncobj`` sync object to add timeline point do ``struct dma_fence_chain *chain`` chain node to use to add the point ``struct dma_fence *fence`` fence to encapsulate in the chain node ``uint64_t point`` sequence number to use for the point **Description** Add the chain node as new timeline point to the syncobj.h](h)}(h**Parameters**h]j)}(hj.Zh]h Parameters}(hj0ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Zubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMHhj(Zubj)}(hhh](j)}(hE``struct drm_syncobj *syncobj`` sync object to add timeline point do h](j)}(h``struct drm_syncobj *syncobj``h]j)}(hjMZh]hstruct drm_syncobj *syncobj}(hjOZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKZubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMEhjGZubj )}(hhh]h)}(h$sync object to add timeline point doh]h$sync object to add timeline point do}(hjfZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbZhMEhjcZubah}(h]h ]h"]h$]h&]uh1j hjGZubeh}(h]h ]h"]h$]h&]uh1jhjbZhMEhjDZubj)}(hE``struct dma_fence_chain *chain`` chain node to use to add the point h](j)}(h!``struct dma_fence_chain *chain``h]j)}(hjZh]hstruct dma_fence_chain *chain}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMFhjZubj )}(hhh]h)}(h"chain node to use to add the pointh]h"chain node to use to add the point}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMFhjZubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMFhjDZubj)}(hC``struct dma_fence *fence`` fence to encapsulate in the chain node h](j)}(h``struct dma_fence *fence``h]j)}(hjZh]hstruct dma_fence *fence}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMGhjZubj )}(hhh]h)}(h&fence to encapsulate in the chain nodeh]h&fence to encapsulate in the chain node}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMGhjZubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMGhjDZubj)}(h8``uint64_t point`` sequence number to use for the point h](j)}(h``uint64_t point``h]j)}(hjZh]huint64_t point}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMHhjZubj )}(hhh]h)}(h$sequence number to use for the pointh]h$sequence number to use for the point}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj [hMHhj[ubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhj [hMHhjDZubeh}(h]h ]h"]h$]h&]uh1jhj(Zubh)}(h**Description**h]j)}(hj3[h]h Description}(hj5[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1[ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMJhj(Zubh)}(h8Add the chain node as new timeline point to the syncobj.h]h8Add the chain node as new timeline point to the syncobj.}(hjI[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMJhj(Zubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_syncobj_replace_fence (C function)c.drm_syncobj_replace_fencehNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(hUvoid drm_syncobj_replace_fence (struct drm_syncobj *syncobj, struct dma_fence *fence)h]j>)}(hTvoid drm_syncobj_replace_fence(struct drm_syncobj *syncobj, struct dma_fence *fence)h](jc)}(hvoidh]hvoid}(hjx[hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjt[hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMsubjV)}(h h]h }(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjt[hhhj[hMsubjg)}(hdrm_syncobj_replace_fenceh]jm)}(hdrm_syncobj_replace_fenceh]hdrm_syncobj_replace_fence}(hj[hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjt[hhhj[hMsubj)}(h6(struct drm_syncobj *syncobj, struct dma_fence *fence)h](j)}(hstruct drm_syncobj *syncobjh](jD)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj[ubjV)}(h h]h }(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hj[hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j)}jj[sbc.drm_syncobj_replace_fenceasbuh1hhj[ubjV)}(h h]h }(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjm)}(hsyncobjh]hsyncobj}(hj\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubj)}(hstruct dma_fence *fenceh](jD)}(hjh]hstruct}(hj'\hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#\ubjV)}(h h]h }(hj4\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#\ubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hjE\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjB\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG\modnameN classnameNjj)}j]j[c.drm_syncobj_replace_fenceasbuh1hhj#\ubjV)}(h h]h }(hjc\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#\ubj)}(hjh]h*}(hjq\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#\ubjm)}(hfenceh]hfence}(hj~\hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubeh}(h]h ]h"]h$]h&]jjuh1jhjt[hhhj[hMsubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjp[hhhj[hMsubah}(h]jk[ah ](jjeh"]h$]h&]jj)jhuh1j7hj[hMshjm[hhubj)}(hhh]h)}(hreplace fence in a sync object.h]hreplace fence in a sync object.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMmhj\hhubah}(h]h ]h"]h$]h&]uh1jhjm[hhhj[hMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\jj\jjjuh1j2hhhjFhNhNubj)}(h**Parameters** ``struct drm_syncobj *syncobj`` Sync object to replace fence in ``struct dma_fence *fence`` fence to install in sync file. **Description** This replaces the fence on a sync object.h](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMqhj\ubj)}(hhh](j)}(h@``struct drm_syncobj *syncobj`` Sync object to replace fence in h](j)}(h``struct drm_syncobj *syncobj``h]j)}(hj\h]hstruct drm_syncobj *syncobj}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMnhj\ubj )}(hhh]h)}(hSync object to replace fence inh]hSync object to replace fence in}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMnhj\ubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMnhj\ubj)}(h;``struct dma_fence *fence`` fence to install in sync file. h](j)}(h``struct dma_fence *fence``h]j)}(hj"]h]hstruct dma_fence *fence}(hj$]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ]ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMohj]ubj )}(hhh]h)}(hfence to install in sync file.h]hfence to install in sync file.}(hj;]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7]hMohj8]ubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhj7]hMohj\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubh)}(h**Description**h]j)}(hj]]h]h Description}(hj_]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[]ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMqhj\ubh)}(h)This replaces the fence on a sync object.h]h)This replaces the fence on a sync object.}(hjs]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMqhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_syncobj_find_fence (C function)c.drm_syncobj_find_fencehNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(hvint drm_syncobj_find_fence (struct drm_file *file_private, u32 handle, u64 point, u64 flags, struct dma_fence **fence)h]j>)}(huint drm_syncobj_find_fence(struct drm_file *file_private, u32 handle, u64 point, u64 flags, struct dma_fence **fence)h](jc)}(hinth]hint}(hj]hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj]hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMubjV)}(h h]h }(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]hhhj]hMubjg)}(hdrm_syncobj_find_fenceh]jm)}(hdrm_syncobj_find_fenceh]hdrm_syncobj_find_fence}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj]hhhj]hMubj)}(h[(struct drm_file *file_private, u32 handle, u64 point, u64 flags, struct dma_fence **fence)h](j)}(hstruct drm_file *file_privateh](jD)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj]ubjV)}(h h]h }(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]ubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j)}jj]sbc.drm_syncobj_find_fenceasbuh1hhj]ubjV)}(h h]h }(hj^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]ubj)}(hjh]h*}(hj+^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjm)}(h file_privateh]h file_private}(hj8^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(h u32 handleh](h)}(hhh]jm)}(hu32h]hu32}(hjT^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjQ^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjV^modnameN classnameNjj)}j]j^c.drm_syncobj_find_fenceasbuh1hhjM^ubjV)}(h h]h }(hjr^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjM^ubjm)}(hhandleh]hhandle}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjM^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(h u64 pointh](h)}(hhh]jm)}(hu64h]hu64}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j^c.drm_syncobj_find_fenceasbuh1hhj^ubjV)}(h h]h }(hj^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^ubjm)}(hpointh]hpoint}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(h u64 flagsh](h)}(hhh]jm)}(hu64h]hu64}(hj^hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j^c.drm_syncobj_find_fenceasbuh1hhj^ubjV)}(h h]h }(hj_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^ubjm)}(hflagsh]hflags}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hstruct dma_fence **fenceh](jD)}(hjh]hstruct}(hj)_hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj%_ubjV)}(h h]h }(hj6_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%_ubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hjG_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjD_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjI_modnameN classnameNjj)}j]j^c.drm_syncobj_find_fenceasbuh1hhj%_ubjV)}(h h]h }(hje_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj%_ubj)}(hjh]h*}(hjs_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%_ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%_ubjm)}(hfenceh]hfence}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj%_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubeh}(h]h ]h"]h$]h&]jjuh1jhj]hhhj]hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj]hhhj]hMubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1j7hj]hMhj]hhubj)}(hhh]h)}(h/lookup and reference the fence in a sync objecth]h/lookup and reference the fence in a sync object}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj]hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1j2hhhjFhNhNubj)}(hX2**Parameters** ``struct drm_file *file_private`` drm file private pointer ``u32 handle`` sync object handle to lookup. ``u64 point`` timeline point ``u64 flags`` DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not ``struct dma_fence **fence`` out parameter for the fence **Description** This is just a convenience function that combines drm_syncobj_find() and drm_syncobj_fence_get(). Returns 0 on success or a negative error value on failure. On success **fence** contains a reference to the fence, which must be released by calling dma_fence_put().h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj_ubj)}(hhh](j)}(h;``struct drm_file *file_private`` drm file private pointer h](j)}(h!``struct drm_file *file_private``h]j)}(hj_h]hstruct drm_file *file_private}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj_ubj )}(hhh]h)}(hdrm file private pointerh]hdrm file private pointer}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj `hMhj`ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhj `hMhj_ubj)}(h-``u32 handle`` sync object handle to lookup. h](j)}(h``u32 handle``h]j)}(hj1`h]h u32 handle}(hj3`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/`ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj+`ubj )}(hhh]h)}(hsync object handle to lookup.h]hsync object handle to lookup.}(hjJ`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF`hMhjG`ubah}(h]h ]h"]h$]h&]uh1j hj+`ubeh}(h]h ]h"]h$]h&]uh1jhjF`hMhj_ubj)}(h``u64 point`` timeline point h](j)}(h ``u64 point``h]j)}(hjj`h]h u64 point}(hjl`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh`ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjd`ubj )}(hhh]h)}(htimeline pointh]htimeline point}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1j hjd`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj_ubj)}(h<``u64 flags`` DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not h](j)}(h ``u64 flags``h]j)}(hj`h]h u64 flags}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj`ubj )}(hhh]h)}(h-DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or noth]h-DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj_ubj)}(h9``struct dma_fence **fence`` out parameter for the fence h](j)}(h``struct dma_fence **fence``h]j)}(hj`h]hstruct dma_fence **fence}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj`ubj )}(hhh]h)}(hout parameter for the fenceh]hout parameter for the fence}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubh)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj_ubh)}(haThis is just a convenience function that combines drm_syncobj_find() and drm_syncobj_fence_get().h]haThis is just a convenience function that combines drm_syncobj_find() and drm_syncobj_fence_get().}(hj-ahhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj_ubh)}(hReturns 0 on success or a negative error value on failure. On success **fence** contains a reference to the fence, which must be released by calling dma_fence_put().h](hFReturns 0 on success or a negative error value on failure. On success }(hj)}(h(void drm_syncobj_free(struct kref *kref)h](jc)}(hvoidh]hvoid}(hj}ahhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjyahhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM ubjV)}(h h]h }(hjahhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyahhhjahM ubjg)}(hdrm_syncobj_freeh]jm)}(hdrm_syncobj_freeh]hdrm_syncobj_free}(hjahhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjyahhhjahM ubj)}(h(struct kref *kref)h]j)}(hstruct kref *krefh](jD)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjaubjV)}(h h]h }(hjahhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjaubh)}(hhh]jm)}(hkrefh]hkref}(hjahhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j)}jjasbc.drm_syncobj_freeasbuh1hhjaubjV)}(h h]h }(hjahhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjaubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjm)}(hkrefh]hkref}(hjbhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubah}(h]h ]h"]h$]h&]jjuh1jhjyahhhjahM ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjuahhhjahM ubah}(h]jpaah ](jjeh"]h$]h&]jj)jhuh1j7hjahM hjrahhubj)}(hhh]h)}(hfree a sync object.h]hfree a sync object.}(hj=bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhj:bhhubah}(h]h ]h"]h$]h&]uh1jhjrahhhjahM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUbjjUbjjjuh1j2hhhjFhNhNubj)}(h{**Parameters** ``struct kref *kref`` kref to free. **Description** Only to be called from kref_put in drm_syncobj_put.h](h)}(h**Parameters**h]j)}(hj_bh]h Parameters}(hjabhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]bubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM hjYbubj)}(hhh]j)}(h$``struct kref *kref`` kref to free. h](j)}(h``struct kref *kref``h]j)}(hj~bh]hstruct kref *kref}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|bubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM hjxbubj )}(hhh]h)}(h kref to free.h]h kref to free.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM hjbubah}(h]h ]h"]h$]h&]uh1j hjxbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hjububah}(h]h ]h"]h$]h&]uh1jhjYbubh)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM hjYbubh)}(h3Only to be called from kref_put in drm_syncobj_put.h]h3Only to be called from kref_put in drm_syncobj_put.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM hjYbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_syncobj_create (C function)c.drm_syncobj_createhNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(hbint drm_syncobj_create (struct drm_syncobj **out_syncobj, uint32_t flags, struct dma_fence *fence)h]j>)}(haint drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags, struct dma_fence *fence)h](jc)}(hinth]hint}(hjbhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjbhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM)ubjV)}(h h]h }(hj chhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjbhhhj chM)ubjg)}(hdrm_syncobj_createh]jm)}(hdrm_syncobj_createh]hdrm_syncobj_create}(hjchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjbhhhj chM)ubj)}(hK(struct drm_syncobj **out_syncobj, uint32_t flags, struct dma_fence *fence)h](j)}(h struct drm_syncobj **out_syncobjh](jD)}(hjh]hstruct}(hj;chhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj7cubjV)}(h h]h }(hjHchhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7cubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hjYchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjVcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[cmodnameN classnameNjj)}j]j)}jj!csbc.drm_syncobj_createasbuh1hhj7cubjV)}(h h]h }(hjychhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7cubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7cubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7cubjm)}(h out_syncobjh]h out_syncobj}(hjchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj7cubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3cubj)}(huint32_t flagsh](h)}(hhh]jm)}(huint32_th]huint32_t}(hjchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]jucc.drm_syncobj_createasbuh1hhjcubjV)}(h h]h }(hjchhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjcubjm)}(hflagsh]hflags}(hjchhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3cubj)}(hstruct dma_fence *fenceh](jD)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjcubjV)}(h h]h }(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjcubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hj dhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"dmodnameN classnameNjj)}j]jucc.drm_syncobj_createasbuh1hhjcubjV)}(h h]h }(hj>dhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjcubj)}(hjh]h*}(hjLdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjm)}(hfenceh]hfence}(hjYdhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3cubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhj chM)ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjbhhhj chM)ubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1j7hj chM)hjbhhubj)}(hhh]h)}(hcreate a new syncobjh]hcreate a new syncobj}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjdhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj chM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1j2hhhjFhNhNubj)}(hX**Parameters** ``struct drm_syncobj **out_syncobj`` returned syncobj ``uint32_t flags`` DRM_SYNCOBJ_* flags ``struct dma_fence *fence`` if non-NULL, the syncobj will represent this fence **Description** This is the first function to create a sync object. After creating, drivers probably want to make it available to userspace, either through drm_syncobj_get_handle() or drm_syncobj_get_fd(). Returns 0 on success or a negative error value on failure.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM"hjdubj)}(hhh](j)}(h6``struct drm_syncobj **out_syncobj`` returned syncobj h](j)}(h$``struct drm_syncobj **out_syncobj``h]j)}(hjdh]h struct drm_syncobj **out_syncobj}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjdubj )}(hhh]h)}(hreturned syncobjh]hreturned syncobj}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjdubj)}(h'``uint32_t flags`` DRM_SYNCOBJ_* flags h](j)}(h``uint32_t flags``h]j)}(hjdh]huint32_t flags}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM hjdubj )}(hhh]h)}(hDRM_SYNCOBJ_* flagsh]hDRM_SYNCOBJ_* flags}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehM hjeubah}(h]h ]h"]h$]h&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1jhjehM hjdubj)}(hO``struct dma_fence *fence`` if non-NULL, the syncobj will represent this fence h](j)}(h``struct dma_fence *fence``h]j)}(hj6eh]hstruct dma_fence *fence}(hj8ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4eubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM!hj0eubj )}(hhh]h)}(h2if non-NULL, the syncobj will represent this fenceh]h2if non-NULL, the syncobj will represent this fence}(hjOehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKehM!hjLeubah}(h]h ]h"]h$]h&]uh1j hj0eubeh}(h]h ]h"]h$]h&]uh1jhjKehM!hjdubeh}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j)}(hjqeh]h Description}(hjsehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoeubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM#hjdubh)}(hThis is the first function to create a sync object. After creating, drivers probably want to make it available to userspace, either through drm_syncobj_get_handle() or drm_syncobj_get_fd().h]hThis is the first function to create a sync object. After creating, drivers probably want to make it available to userspace, either through drm_syncobj_get_handle() or drm_syncobj_get_fd().}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM#hjdubh)}(h:Returns 0 on success or a negative error value on failure.h]h:Returns 0 on success or a negative error value on failure.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chM'hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_syncobj_get_handle (C function)c.drm_syncobj_get_handlehNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(hdint drm_syncobj_get_handle (struct drm_file *file_private, struct drm_syncobj *syncobj, u32 *handle)h]j>)}(hcint drm_syncobj_get_handle(struct drm_file *file_private, struct drm_syncobj *syncobj, u32 *handle)h](jc)}(hinth]hint}(hjehhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjehhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMSubjV)}(h h]h }(hjehhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjehhhjehMSubjg)}(hdrm_syncobj_get_handleh]jm)}(hdrm_syncobj_get_handleh]hdrm_syncobj_get_handle}(hjehhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjehhhjehMSubj)}(hI(struct drm_file *file_private, struct drm_syncobj *syncobj, u32 *handle)h](j)}(hstruct drm_file *file_privateh](jD)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjeubjV)}(h h]h }(hjfhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjeubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hj fhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"fmodnameN classnameNjj)}j]j)}jjesbc.drm_syncobj_get_handleasbuh1hhjeubjV)}(h h]h }(hj@fhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjeubj)}(hjh]h*}(hjNfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjm)}(h file_privateh]h file_private}(hj[fhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hstruct drm_syncobj *syncobjh](jD)}(hjh]hstruct}(hjtfhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjpfubjV)}(h h]h }(hjfhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjpfubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hjfhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j)}(h>int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd)h](jc)}(hinth]hint}(hjhhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMubjV)}(h h]h }(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhhjhhMubjg)}(hdrm_syncobj_get_fdh]jm)}(hdrm_syncobj_get_fdh]hdrm_syncobj_get_fd}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhhjhhMubj)}(h((struct drm_syncobj *syncobj, int *p_fd)h](j)}(hstruct drm_syncobj *syncobjh](jD)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhubjV)}(h h]h }(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhubh)}(hhh]jm)}(h drm_syncobjh]h drm_syncobj}(hjhhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j)}jjhsbc.drm_syncobj_get_fdasbuh1hhjhubjV)}(h h]h }(hjihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhubj)}(hjh]h*}(hj'ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjm)}(hsyncobjh]hsyncobj}(hj4ihhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(h int *p_fdh](jc)}(hinth]hint}(hjMihhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjIiubjV)}(h h]h }(hj[ihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIiubj)}(hjh]h*}(hjiihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIiubjm)}(hp_fdh]hp_fd}(hjvihhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjIiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhhjhhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhhjhhMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1j7hjhhMhjhhhubj)}(hhh]h)}(h$get a file descriptor from a syncobjh]h$get a file descriptor from a syncobj}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1j2hhhjFhNhNubj)}(hX**Parameters** ``struct drm_syncobj *syncobj`` Sync object to export ``int *p_fd`` out parameter with the new file descriptor **Description** Exports a sync object created with drm_syncobj_create() as a file descriptor. Returns 0 on success or a negative error value on failure.h](h)}(h**Parameters**h]j)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjiubj)}(hhh](j)}(h6``struct drm_syncobj *syncobj`` Sync object to export h](j)}(h``struct drm_syncobj *syncobj``h]j)}(hjih]hstruct drm_syncobj *syncobj}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjiubj )}(hhh]h)}(hSync object to exporth]hSync object to export}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjiubj)}(h9``int *p_fd`` out parameter with the new file descriptor h](j)}(h ``int *p_fd``h]j)}(hjjh]h int *p_fd}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjjubj )}(hhh]h)}(h*out parameter with the new file descriptorh]h*out parameter with the new file descriptor}(hj3jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/jhMhj0jubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhj/jhMhjiubeh}(h]h ]h"]h$]h&]uh1jhjiubh)}(h**Description**h]j)}(hjUjh]h Description}(hjWjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjiubh)}(hMExports a sync object created with drm_syncobj_create() as a file descriptor.h]hMExports a sync object created with drm_syncobj_create() as a file descriptor.}(hjkjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjiubh)}(h:Returns 0 on success or a negative error value on failure.h]h:Returns 0 on success or a negative error value on failure.}(hjzjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:535: ./drivers/gpu/drm/drm_syncobj.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjFhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'drm_timeout_abs_to_jiffies (C function)c.drm_timeout_abs_to_jiffieshNtauh1j!hjFhhhNhNubj3)}(hhh](j8)}(h=signed long drm_timeout_abs_to_jiffies (int64_t timeout_nsec)h]j>)}(hresv, fence, DMA_RESV_USAGE_READ); ... } drm_exec_fini(&exec);h]hX`struct drm_gem_object *obj; struct drm_exec exec; unsigned long index; int ret; drm_exec_init(&exec, DRM_EXEC_INTERRUPTIBLE_WAIT); drm_exec_until_all_locked(&exec) { ret = drm_exec_prepare_obj(&exec, boA, 1); drm_exec_retry_on_contention(&exec); if (ret) goto error; ret = drm_exec_prepare_obj(&exec, boB, 1); drm_exec_retry_on_contention(&exec); if (ret) goto error; } drm_exec_for_each_locked_object(&exec, index, obj) { dma_resv_add_fence(obj->resv, fence, DMA_RESV_USAGE_READ); ... } drm_exec_fini(&exec);}hj]lsbah}(h]h ]h"]h$]h&]jjuh1jShV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:541: ./drivers/gpu/drm/drm_exec.chKhjlhhubh)}(h%See struct dma_exec for more details.h]h%See struct dma_exec for more details.}(hjllhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:541: ./drivers/gpu/drm/drm_exec.chK-hjlhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_exec (C struct) c.drm_exechNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(hdrm_exech]j>)}(hstruct drm_exech](jD)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjlhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlhhhjlhKubjg)}(hdrm_exech]jm)}(hjlh]hdrm_exec}(hjlhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjlhhhjlhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjlhhhjlhKubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1j7hjlhKhjlhhubj)}(hhh]h)}(hExecution contexth]hExecution context}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjlhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjlhKubeh}(h]h ](jstructeh"]h$]h&]jjjjljjljjjuh1j2hhhjlhNhNubj)}(hX**Definition**:: struct drm_exec { u32 flags; struct ww_acquire_ctx ticket; unsigned int num_objects; unsigned int max_objects; struct drm_gem_object **objects; struct drm_gem_object *contended; struct drm_gem_object *prelocked; }; **Members** ``flags`` Flags to control locking behavior ``ticket`` WW ticket used for acquiring locks ``num_objects`` number of objects locked ``max_objects`` maximum objects in array ``objects`` array of the locked objects ``contended`` contended GEM object we backed off for ``prelocked`` already locked GEM object due to contentionh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh:}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjlubjT)}(hXstruct drm_exec { u32 flags; struct ww_acquire_ctx ticket; unsigned int num_objects; unsigned int max_objects; struct drm_gem_object **objects; struct drm_gem_object *contended; struct drm_gem_object *prelocked; };h]hXstruct drm_exec { u32 flags; struct ww_acquire_ctx ticket; unsigned int num_objects; unsigned int max_objects; struct drm_gem_object **objects; struct drm_gem_object *contended; struct drm_gem_object *prelocked; };}hjmsbah}(h]h ]h"]h$]h&]jjuh1jShR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjlubh)}(h **Members**h]j)}(hj$mh]hMembers}(hj&mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"mubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjlubj)}(hhh](j)}(h,``flags`` Flags to control locking behavior h](j)}(h ``flags``h]j)}(hjCmh]hflags}(hjEmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhj=mubj )}(hhh]h)}(h!Flags to control locking behaviorh]h!Flags to control locking behavior}(hj\mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXmhKhjYmubah}(h]h ]h"]h$]h&]uh1j hj=mubeh}(h]h ]h"]h$]h&]uh1jhjXmhKhj:mubj)}(h.``ticket`` WW ticket used for acquiring locks h](j)}(h ``ticket``h]j)}(hj|mh]hticket}(hj~mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjvmubj )}(hhh]h)}(h"WW ticket used for acquiring locksh]h"WW ticket used for acquiring locks}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjmubah}(h]h ]h"]h$]h&]uh1j hjvmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhj:mubj)}(h)``num_objects`` number of objects locked h](j)}(h``num_objects``h]j)}(hjmh]h num_objects}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjmubj )}(hhh]h)}(hnumber of objects lockedh]hnumber of objects locked}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjmubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhj:mubj)}(h)``max_objects`` maximum objects in array h](j)}(h``max_objects``h]j)}(hjmh]h max_objects}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK#hjmubj )}(hhh]h)}(hmaximum objects in arrayh]hmaximum objects in array}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhK#hjnubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjnhK#hj:mubj)}(h(``objects`` array of the locked objects h](j)}(h ``objects``h]j)}(hj'nh]hobjects}(hj)nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%nubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK(hj!nubj )}(hhh]h)}(harray of the locked objectsh]harray of the locked objects}(hj@nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)}(hOstruct drm_gem_object *drm_exec_obj(struct drm_exec *exec, unsigned long index)h](jD)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjnhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK>ubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnhhhjohK>ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j)}j drm_exec_objsbc.drm_exec_objasbuh1hhjnhhhjohK>ubjV)}(h h]h }(hj3ohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnhhhjohK>ubj)}(hjh]h*}(hjAohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhjohK>ubjg)}(h drm_exec_objh]jm)}(hj0oh]h drm_exec_obj}(hjRohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjNoubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjnhhhjohK>ubj)}(h,(struct drm_exec *exec, unsigned long index)h](j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hjmohhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjioubjV)}(h h]h }(hjzohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjioubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j.oc.drm_exec_objasbuh1hhjioubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjioubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjioubjm)}(hexech]hexec}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjioubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeoubj)}(hunsigned long indexh](jc)}(hunsignedh]hunsigned}(hjohhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjoubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubjc)}(hlongh]hlong}(hjohhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjoubjV)}(h h]h }(hjphhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubjm)}(hindexh]hindex}(hjphhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeoubeh}(h]h ]h"]h$]h&]jjuh1jhjnhhhjohK>ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjnhhhjohK>ubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1j7hjohK>hjnhhubj)}(hhh]h)}(h+Return the object for a give drm_exec indexh]h+Return the object for a give drm_exec index}(hj?phhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK7hjubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWpjjWpjjjuh1j2hhhjlhNhNubj)}(h**Parameters** ``struct drm_exec *exec`` Pointer to the drm_exec context ``unsigned long index`` The index. **Return** Pointer to the locked object corresponding to **index** if index is within the number of locked objects. NULL otherwise.h](h)}(h**Parameters**h]j)}(hjaph]h Parameters}(hjcphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_pubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK;hj[pubj)}(hhh](j)}(h:``struct drm_exec *exec`` Pointer to the drm_exec context h](j)}(h``struct drm_exec *exec``h]j)}(hjph]hstruct drm_exec *exec}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~pubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK8hjzpubj )}(hhh]h)}(hPointer to the drm_exec contexth]hPointer to the drm_exec context}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK8hjpubah}(h]h ]h"]h$]h&]uh1j hjzpubeh}(h]h ]h"]h$]h&]uh1jhjphK8hjwpubj)}(h#``unsigned long index`` The index. h](j)}(h``unsigned long index``h]j)}(hjph]hunsigned long index}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK9hjpubj )}(hhh]h)}(h The index.h]h The index.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK9hjpubah}(h]h ]h"]h$]h&]uh1j hjpubeh}(h]h ]h"]h$]h&]uh1jhjphK9hjwpubeh}(h]h ]h"]h$]h&]uh1jhj[pubh)}(h **Return**h]j)}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK;hj[pubh)}(hxPointer to the locked object corresponding to **index** if index is within the number of locked objects. NULL otherwise.h](h.Pointer to the locked object corresponding to }(hj qhhhNhNubj)}(h **index**h]hindex}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj qubhA if index is within the number of locked objects. NULL otherwise.}(hj qhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK;hj[pubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)drm_exec_for_each_locked_object (C macro)!c.drm_exec_for_each_locked_objecthNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(hdrm_exec_for_each_locked_objecth]j>)}(hdrm_exec_for_each_locked_objecth]jg)}(hdrm_exec_for_each_locked_objecth]jm)}(hjEqh]hdrm_exec_for_each_locked_object}(hjOqhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKqubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjGqhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKLubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjCqhhhjbqhKLubah}(h]j>qah ](jjeh"]h$]h&]jj)jhuh1j7hjbqhKLhj@qhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj@qhhhjbqhKLubeh}(h]h ](jmacroeh"]h$]h&]jjjj{qjj{qjjjuh1j2hhhjlhNhNubh)}(h6``drm_exec_for_each_locked_object (exec, index, obj)``h]j)}(hjqh]h2drm_exec_for_each_locked_object (exec, index, obj)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKNhjlhhubj@-)}(h$iterate over all the locked objects h]h)}(h#iterate over all the locked objectsh]h#iterate over all the locked objects}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKEhjqubah}(h]h ]h"]h$]h&]uh1j?-hjqhKEhjlhhubj)}(h**Parameters** ``exec`` drm_exec object ``index`` unsigned long index for the iteration ``obj`` the current GEM object **Description** Iterate over all the locked GEM objects inside the drm_exec object.h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKIhjqubj)}(hhh](j)}(h``exec`` drm_exec object h](j)}(h``exec``h]j)}(hjqh]hexec}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKFhjqubj )}(hhh]h)}(hdrm_exec objecth]hdrm_exec object}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKFhjqubah}(h]h ]h"]h$]h&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjqhKFhjqubj)}(h0``index`` unsigned long index for the iteration h](j)}(h ``index``h]j)}(hjrh]hindex}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj rubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKGhjrubj )}(hhh]h)}(h%unsigned long index for the iterationh]h%unsigned long index for the iteration}(hj'rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#rhKGhj$rubah}(h]h ]h"]h$]h&]uh1j hjrubeh}(h]h ]h"]h$]h&]uh1jhj#rhKGhjqubj)}(h``obj`` the current GEM object h](j)}(h``obj``h]j)}(hjGrh]hobj}(hjIrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjErubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKHhjArubj )}(hhh]h)}(hthe current GEM objecth]hthe current GEM object}(hj`rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\rhKHhj]rubah}(h]h ]h"]h$]h&]uh1j hjArubeh}(h]h ]h"]h$]h&]uh1jhj\rhKHhjqubeh}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKJhjqubh)}(hCIterate over all the locked GEM objects inside the drm_exec object.h]hCIterate over all the locked GEM objects inside the drm_exec object.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKJhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.1drm_exec_for_each_locked_object_reverse (C macro))c.drm_exec_for_each_locked_object_reversehNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(h'drm_exec_for_each_locked_object_reverseh]j>)}(h'drm_exec_for_each_locked_object_reverseh]jg)}(h'drm_exec_for_each_locked_object_reverseh]jm)}(hjrh]h'drm_exec_for_each_locked_object_reverse}(hjrhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjrhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKZubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjrhhhjrhKZubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1j7hjrhKZhjrhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjrhhhjrhKZubeh}(h]h ](jmacroeh"]h$]h&]jjjjrjjrjjjuh1j2hhhjlhNhNubh)}(h>``drm_exec_for_each_locked_object_reverse (exec, index, obj)``h]j)}(hjrh]h:drm_exec_for_each_locked_object_reverse (exec, index, obj)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK\hjlhhubj@-)}(h=iterate over all the locked objects in reverse locking order h]h)}(h)}(hdrm_exec_until_all_lockedh]jg)}(hdrm_exec_until_all_lockedh]jm)}(hjOth]hdrm_exec_until_all_locked}(hjYthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUtubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjQthhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKiubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjMthhhjlthKiubah}(h]jHtah ](jjeh"]h$]h&]jj)jhuh1j7hjlthKihjJthhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjJthhhjlthKiubeh}(h]h ](jmacroeh"]h$]h&]jjjjtjjtjjjuh1j2hhhjlhNhNubh)}(h$``drm_exec_until_all_locked (exec)``h]j)}(hjth]h drm_exec_until_all_locked (exec)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKkhjlhhubj@-)}(h&loop until all GEM objects are locked h]h)}(h%loop until all GEM objects are lockedh]h%loop until all GEM objects are locked}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK_hjtubah}(h]h ]h"]h$]h&]uh1j?-hjthK_hjlhhubj)}(hX**Parameters** ``exec`` drm_exec object **Description** Core functionality of the drm_exec object. Loops until all GEM objects are locked and no more contention exists. At the beginning of the loop it is guaranteed that no GEM object is locked. Since labels can't be defined local to the loops body we use a jump pointer to make sure that the retry is only used from within the loops body.h](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKchjtubj)}(hhh]j)}(h``exec`` drm_exec object h](j)}(h``exec``h]j)}(hjth]hexec}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhK`hjtubj )}(hhh]h)}(hdrm_exec objecth]hdrm_exec object}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthK`hjtubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhjthK`hjtubah}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKbhjtubh)}(hCore functionality of the drm_exec object. Loops until all GEM objects are locked and no more contention exists. At the beginning of the loop it is guaranteed that no GEM object is locked.h]hCore functionality of the drm_exec object. Loops until all GEM objects are locked and no more contention exists. At the beginning of the loop it is guaranteed that no GEM object is locked.}(hj0uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKbhjtubh)}(hSince labels can't be defined local to the loops body we use a jump pointer to make sure that the retry is only used from within the loops body.h]hSince labels can’t be defined local to the loops body we use a jump pointer to make sure that the retry is only used from within the loops body.}(hj?uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKfhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_exec_retry_on_contention (C macro)c.drm_exec_retry_on_contentionhNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(hdrm_exec_retry_on_contentionh]j>)}(hdrm_exec_retry_on_contentionh]jg)}(hdrm_exec_retry_on_contentionh]jm)}(hjhuh]hdrm_exec_retry_on_contention}(hjruhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjnuubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjjuhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKxubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjfuhhhjuhKxubah}(h]jauah ](jjeh"]h$]h&]jj)jhuh1j7hjuhKxhjcuhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjcuhhhjuhKxubeh}(h]h ](jmacroeh"]h$]h&]jjjjujjujjjuh1j2hhhjlhNhNubh)}(h'``drm_exec_retry_on_contention (exec)``h]j)}(hjuh]h#drm_exec_retry_on_contention (exec)}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKzhjlhhubj@-)}(h#restart the loop to grap all locks h]h)}(h"restart the loop to grap all locksh]h"restart the loop to grap all locks}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKrhjuubah}(h]h ]h"]h$]h&]uh1j?-hjuhKrhjlhhubj)}(h**Parameters** ``exec`` drm_exec object **Description** Control flow helper to continue when a contention was detected and we need to clean up and re-start the loop to prepare all GEM objects.h](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKvhjuubj)}(hhh]j)}(h``exec`` drm_exec object h](j)}(h``exec``h]j)}(hjuh]hexec}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKshjuubj )}(hhh]h)}(hdrm_exec objecth]hdrm_exec object}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj vhKshjvubah}(h]h ]h"]h$]h&]uh1j hjuubeh}(h]h ]h"]h$]h&]uh1jhj vhKshjuubah}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hj3vh]h Description}(hj5vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1vubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKuhjuubh)}(hControl flow helper to continue when a contention was detected and we need to clean up and re-start the loop to prepare all GEM objects.h]hControl flow helper to continue when a contention was detected and we need to clean up and re-start the loop to prepare all GEM objects.}(hjIvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKuhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_exec_is_contended (C function)c.drm_exec_is_contendedhNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(h2bool drm_exec_is_contended (struct drm_exec *exec)h]j>)}(h1bool drm_exec_is_contended(struct drm_exec *exec)h](jc)}(hj h]hbool}(hjxvhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjtvhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjtvhhhjvhKubjg)}(hdrm_exec_is_contendedh]jm)}(hdrm_exec_is_contendedh]hdrm_exec_is_contended}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjtvhhhjvhKubj)}(h(struct drm_exec *exec)h]j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjvubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjvubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjvhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j)}jjvsbc.drm_exec_is_contendedasbuh1hhjvubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjvubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjm)}(hexech]hexec}(hj whhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubah}(h]h ]h"]h$]h&]jjuh1jhjtvhhhjvhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjpvhhhjvhKubah}(h]jkvah ](jjeh"]h$]h&]jj)jhuh1j7hjvhKhjmvhhubj)}(hhh]h)}(hcheck for contentionh]hcheck for contention}(hj7whhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhj4whhubah}(h]h ]h"]h$]h&]uh1jhjmvhhhjvhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOwjjOwjjjuh1j2hhhjlhNhNubj)}(h**Parameters** ``struct drm_exec *exec`` drm_exec object **Description** Returns true if the drm_exec object has run into some contention while locking a GEM object and needs to clean up.h](h)}(h**Parameters**h]j)}(hjYwh]h Parameters}(hj[whhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWwubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjSwubj)}(hhh]j)}(h*``struct drm_exec *exec`` drm_exec object h](j)}(h``struct drm_exec *exec``h]j)}(hjxwh]hstruct drm_exec *exec}(hjzwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvwubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjrwubj )}(hhh]h)}(hdrm_exec objecth]hdrm_exec object}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhKhjwubah}(h]h ]h"]h$]h&]uh1j hjrwubeh}(h]h ]h"]h$]h&]uh1jhjwhKhjowubah}(h]h ]h"]h$]h&]uh1jhjSwubh)}(h**Description**h]j)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjSwubh)}(hrReturns true if the drm_exec object has run into some contention while locking a GEM object and needs to clean up.h]hrReturns true if the drm_exec object has run into some contention while locking a GEM object and needs to clean up.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:544: ./include/drm/drm_exec.hhKhjSwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_exec_init (C function)c.drm_exec_inithNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(hBvoid drm_exec_init (struct drm_exec *exec, u32 flags, unsigned nr)h]j>)}(hAvoid drm_exec_init(struct drm_exec *exec, u32 flags, unsigned nr)h](jc)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjwhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKOubjV)}(h h]h }(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjwhhhjxhKOubjg)}(h drm_exec_inith]jm)}(h drm_exec_inith]h drm_exec_init}(hjxhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjwhhhjxhKOubj)}(h/(struct drm_exec *exec, u32 flags, unsigned nr)h](j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hj5xhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj1xubjV)}(h h]h }(hjBxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1xubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjSxhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjPxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUxmodnameN classnameNjj)}j]j)}jjxsbc.drm_exec_initasbuh1hhj1xubjV)}(h h]h }(hjsxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj1xubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1xubjm)}(hexech]hexec}(hjxhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj1xubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-xubj)}(h u32 flagsh](h)}(hhh]jm)}(hu32h]hu32}(hjxhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]joxc.drm_exec_initasbuh1hhjxubjV)}(h h]h }(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjxubjm)}(hflagsh]hflags}(hjxhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-xubj)}(h unsigned nrh](jc)}(hunsignedh]hunsigned}(hjxhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjxubjV)}(h h]h }(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjxubjm)}(hnrh]hnr}(hj yhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-xubeh}(h]h ]h"]h$]h&]jjuh1jhjwhhhjxhKOubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjwhhhjxhKOubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1j7hjxhKOhjwhhubj)}(hhh]h)}(hinitialize a drm_exec objecth]hinitialize a drm_exec object}(hj5yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKEhj2yhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjxhKOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMyjjMyjjjuh1j2hhhjlhNhNubj)}(hX**Parameters** ``struct drm_exec *exec`` the drm_exec object to initialize ``u32 flags`` controls locking behavior, see DRM_EXEC_* defines ``unsigned nr`` the initial # of objects **Description** Initialize the object and make sure that we can track locked objects. If nr is non-zero then it is used as the initial objects table size. In either case, the table will grow (be re-allocated) on demand.h](h)}(h**Parameters**h]j)}(hjWyh]h Parameters}(hjYyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUyubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKIhjQyubj)}(hhh](j)}(h<``struct drm_exec *exec`` the drm_exec object to initialize h](j)}(h``struct drm_exec *exec``h]j)}(hjvyh]hstruct drm_exec *exec}(hjxyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtyubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKFhjpyubj )}(hhh]h)}(h!the drm_exec object to initializeh]h!the drm_exec object to initialize}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKFhjyubah}(h]h ]h"]h$]h&]uh1j hjpyubeh}(h]h ]h"]h$]h&]uh1jhjyhKFhjmyubj)}(h@``u32 flags`` controls locking behavior, see DRM_EXEC_* defines h](j)}(h ``u32 flags``h]j)}(hjyh]h u32 flags}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKGhjyubj )}(hhh]h)}(h1controls locking behavior, see DRM_EXEC_* definesh]h1controls locking behavior, see DRM_EXEC_* defines}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKGhjyubah}(h]h ]h"]h$]h&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhjyhKGhjmyubj)}(h)``unsigned nr`` the initial # of objects h](j)}(h``unsigned nr``h]j)}(hjyh]h unsigned nr}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKHhjyubj )}(hhh]h)}(hthe initial # of objectsh]hthe initial # of objects}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKHhjyubah}(h]h ]h"]h$]h&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhjyhKHhjmyubeh}(h]h ]h"]h$]h&]uh1jhjQyubh)}(h**Description**h]j)}(hj#zh]h Description}(hj%zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!zubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKJhjQyubh)}(hEInitialize the object and make sure that we can track locked objects.h]hEInitialize the object and make sure that we can track locked objects.}(hj9zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKJhjQyubh)}(hIf nr is non-zero then it is used as the initial objects table size. In either case, the table will grow (be re-allocated) on demand.h]hIf nr is non-zero then it is used as the initial objects table size. In either case, the table will grow (be re-allocated) on demand.}(hjHzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKLhjQyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_exec_fini (C function)c.drm_exec_finihNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(h*void drm_exec_fini (struct drm_exec *exec)h]j>)}(h)void drm_exec_fini(struct drm_exec *exec)h](jc)}(hvoidh]hvoid}(hjwzhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjszhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKfubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjszhhhjzhKfubjg)}(h drm_exec_finih]jm)}(h drm_exec_finih]h drm_exec_fini}(hjzhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjszhhhjzhKfubj)}(h(struct drm_exec *exec)h]j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjzubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjzubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjzhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j)}jjzsbc.drm_exec_finiasbuh1hhjzubjV)}(h h]h }(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjzubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjm)}(hexech]hexec}(hj {hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzubah}(h]h ]h"]h$]h&]jjuh1jhjszhhhjzhKfubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjozhhhjzhKfubah}(h]jjzah ](jjeh"]h$]h&]jj)jhuh1j7hjzhKfhjlzhhubj)}(hhh]h)}(hfinalize a drm_exec objecth]hfinalize a drm_exec object}(hj7{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chK`hj4{hhubah}(h]h ]h"]h$]h&]uh1jhjlzhhhjzhKfubeh}(h]h ](jfunctioneh"]h$]h&]jjjjO{jjO{jjjuh1j2hhhjlhNhNubj)}(h**Parameters** ``struct drm_exec *exec`` the drm_exec object to finalize **Description** Unlock all locked objects, drop the references to objects and free all memory used for tracking the state.h](h)}(h**Parameters**h]j)}(hjY{h]h Parameters}(hj[{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW{ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKdhjS{ubj)}(hhh]j)}(h:``struct drm_exec *exec`` the drm_exec object to finalize h](j)}(h``struct drm_exec *exec``h]j)}(hjx{h]hstruct drm_exec *exec}(hjz{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv{ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKahjr{ubj )}(hhh]h)}(hthe drm_exec object to finalizeh]hthe drm_exec object to finalize}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hKahj{ubah}(h]h ]h"]h$]h&]uh1j hjr{ubeh}(h]h ]h"]h$]h&]uh1jhj{hKahjo{ubah}(h]h ]h"]h$]h&]uh1jhjS{ubh)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKchjS{ubh)}(hjUnlock all locked objects, drop the references to objects and free all memory used for tracking the state.h]hjUnlock all locked objects, drop the references to objects and free all memory used for tracking the state.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKchjS{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_exec_cleanup (C function)c.drm_exec_cleanuphNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(h-bool drm_exec_cleanup (struct drm_exec *exec)h]j>)}(h,bool drm_exec_cleanup(struct drm_exec *exec)h](jc)}(hj h]hbool}(hj{hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj{hhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKyubjV)}(h h]h }(hj|hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{hhhj|hKyubjg)}(hdrm_exec_cleanuph]jm)}(hdrm_exec_cleanuph]hdrm_exec_cleanup}(hj|hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj{hhhj|hKyubj)}(h(struct drm_exec *exec)h]j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hj4|hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj0|ubjV)}(h h]h }(hjA|hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj0|ubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjR|hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjO|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjT|modnameN classnameNjj)}j]j)}jj|sbc.drm_exec_cleanupasbuh1hhj0|ubjV)}(h h]h }(hjr|hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj0|ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0|ubjm)}(hexech]hexec}(hj|hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj0|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,|ubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhj|hKyubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj{hhhj|hKyubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1j7hj|hKyhj{hhubj)}(hhh]h)}(h#cleanup when contention is detectedh]h#cleanup when contention is detected}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKrhj|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj|hKyubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1j2hhhjlhNhNubj)}(hX**Parameters** ``struct drm_exec *exec`` the drm_exec object to cleanup **Description** Cleanup the current state and return true if we should stay inside the retry loop, false if there wasn't any contention detected and we can keep the objects locked.h](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKvhj|ubj)}(hhh]j)}(h9``struct drm_exec *exec`` the drm_exec object to cleanup h](j)}(h``struct drm_exec *exec``h]j)}(hj|h]hstruct drm_exec *exec}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKshj|ubj )}(hhh]h)}(hthe drm_exec object to cleanuph]hthe drm_exec object to cleanup}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj }hKshj}ubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhj }hKshj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hj3}h]h Description}(hj5}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1}ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKuhj|ubh)}(hCleanup the current state and return true if we should stay inside the retry loop, false if there wasn't any contention detected and we can keep the objects locked.h]hCleanup the current state and return true if we should stay inside the retry loop, false if there wasn’t any contention detected and we can keep the objects locked.}(hjI}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKuhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_exec_lock_obj (C function)c.drm_exec_lock_objhNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(hIint drm_exec_lock_obj (struct drm_exec *exec, struct drm_gem_object *obj)h]j>)}(hHint drm_exec_lock_obj(struct drm_exec *exec, struct drm_gem_object *obj)h](jc)}(hinth]hint}(hjx}hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjt}hhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjt}hhhj}hKubjg)}(hdrm_exec_lock_objh]jm)}(hdrm_exec_lock_objh]hdrm_exec_lock_obj}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjt}hhhj}hKubj)}(h3(struct drm_exec *exec, struct drm_gem_object *obj)h](j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj}ubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j)}jj}sbc.drm_exec_lock_objasbuh1hhj}ubjV)}(h h]h }(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjm)}(hexech]hexec}(hj~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hj'~hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj#~ubjV)}(h h]h }(hj4~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#~ubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjE~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjB~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG~modnameN classnameNjj)}j]j}c.drm_exec_lock_objasbuh1hhj#~ubjV)}(h h]h }(hjc~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#~ubj)}(hjh]h*}(hjq~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#~ubjm)}(hobjh]hobj}(hj~~hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubeh}(h]h ]h"]h$]h&]jjuh1jhjt}hhhj}hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjp}hhhj}hKubah}(h]jk}ah ](jjeh"]h$]h&]jj)jhuh1j7hj}hKhjm}hhubj)}(hhh]h)}(hlock a GEM object for useh]hlock a GEM object for use}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhj~hhubah}(h]h ]h"]h$]h&]uh1jhjm}hhhj}hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1j2hhhjlhNhNubj)}(hX**Parameters** ``struct drm_exec *exec`` the drm_exec object with the state ``struct drm_gem_object *obj`` the GEM object to lock **Description** Lock a GEM object for use and grab a reference to it. **Return** -EDEADLK if a contention is detected, -EALREADY when object is already locked (can be suppressed by setting the DRM_EXEC_IGNORE_DUPLICATES flag), -ENOMEM when memory allocation failed and zero for success.h](h)}(h**Parameters**h]j)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhj~ubj)}(hhh](j)}(h=``struct drm_exec *exec`` the drm_exec object with the state h](j)}(h``struct drm_exec *exec``h]j)}(hj~h]hstruct drm_exec *exec}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhj~ubj )}(hhh]h)}(h"the drm_exec object with the stateh]h"the drm_exec object with the state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKhj~ubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj~ubj)}(h6``struct drm_gem_object *obj`` the GEM object to lock h](j)}(h``struct drm_gem_object *obj``h]j)}(hj"h]hstruct drm_gem_object *obj}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhjubj )}(hhh]h)}(hthe GEM object to lockh]hthe GEM object to lock}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hKhj8ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj7hKhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubh)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhj~ubh)}(h5Lock a GEM object for use and grab a reference to it.h]h5Lock a GEM object for use and grab a reference to it.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhj~ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhj~ubh)}(h-EDEADLK if a contention is detected, -EALREADY when object is already locked (can be suppressed by setting the DRM_EXEC_IGNORE_DUPLICATES flag), -ENOMEM when memory allocation failed and zero for success.h]h-EDEADLK if a contention is detected, -EALREADY when object is already locked (can be suppressed by setting the DRM_EXEC_IGNORE_DUPLICATES flag), -ENOMEM when memory allocation failed and zero for success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_exec_unlock_obj (C function)c.drm_exec_unlock_objhNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(hLvoid drm_exec_unlock_obj (struct drm_exec *exec, struct drm_gem_object *obj)h]j>)}(hKvoid drm_exec_unlock_obj(struct drm_exec *exec, struct drm_gem_object *obj)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_exec_unlock_objh]jm)}(hdrm_exec_unlock_objh]hdrm_exec_unlock_obj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h3(struct drm_exec *exec, struct drm_gem_object *obj)h](j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}jjsbc.drm_exec_unlock_objasbuh1hhjubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hexech]hexec}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjtubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjtubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j@c.drm_exec_unlock_objasbuh1hhjtubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjtubj)}(hjh]h*}(hj€hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjm)}(hobjh]hobj}(hjπhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h(unlock a GEM object in this exec contexth]h(unlock a GEM object in this exec context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjlhNhNubj)}(hXa**Parameters** ``struct drm_exec *exec`` the drm_exec object with the state ``struct drm_gem_object *obj`` the GEM object to unlock **Description** Unlock the GEM object and remove it from the collection of locked objects. Should only be used to unlock the most recently locked objects. It's not time efficient to unlock objects locked long ago.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubj)}(hhh](j)}(h=``struct drm_exec *exec`` the drm_exec object with the state h](j)}(h``struct drm_exec *exec``h]j)}(hj:h]hstruct drm_exec *exec}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhj4ubj )}(hhh]h)}(h"the drm_exec object with the stateh]h"the drm_exec object with the state}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKhjPubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhj1ubj)}(h8``struct drm_gem_object *obj`` the GEM object to unlock h](j)}(h``struct drm_gem_object *obj``h]j)}(hjsh]hstruct drm_gem_object *obj}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chKhjmubj )}(hhh]h)}(hthe GEM object to unlockh]hthe GEM object to unlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjhKhj1ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubh)}(hUnlock the GEM object and remove it from the collection of locked objects. Should only be used to unlock the most recently locked objects. It's not time efficient to unlock objects locked long ago.h]hUnlock the GEM object and remove it from the collection of locked objects. Should only be used to unlock the most recently locked objects. It’s not time efficient to unlock objects locked long ago.}(hjāhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.!drm_exec_prepare_obj (C function)c.drm_exec_prepare_objhNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(heint drm_exec_prepare_obj (struct drm_exec *exec, struct drm_gem_object *obj, unsigned int num_fences)h]j>)}(hdint drm_exec_prepare_obj(struct drm_exec *exec, struct drm_gem_object *obj, unsigned int num_fences)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM!ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM!ubjg)}(hdrm_exec_prepare_objh]jm)}(hdrm_exec_prepare_objh]hdrm_exec_prepare_obj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM!ubj)}(hL(struct drm_exec *exec, struct drm_gem_object *obj, unsigned int num_fences)h](j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj,ubjV)}(h h]h }(hj=hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,ubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hjNhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j)}jjsbc.drm_exec_prepare_objasbuh1hhj,ubjV)}(h h]h }(hjnhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj,ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjm)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj‚modnameN classnameNjj)}j]jjc.drm_exec_prepare_objasbuh1hhjubjV)}(h h]h }(hjނhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(hunsigned int num_fencesh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hinth]hint}(hj.hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj<hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h num_fencesh]h num_fences}(hjJhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM!ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM!ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM!hjhhubj)}(hhh]h)}(hprepare a GEM object for useh]hprepare a GEM object for use}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjlhNhNubj)}(hX**Parameters** ``struct drm_exec *exec`` the drm_exec object with the state ``struct drm_gem_object *obj`` the GEM object to prepare ``unsigned int num_fences`` how many fences to reserve **Description** Prepare a GEM object for use by locking it and reserving fence slots. **Return** -EDEADLK if a contention is detected, -EALREADY when object is already locked, -ENOMEM when memory allocation failed and zero for success.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubj)}(hhh](j)}(h=``struct drm_exec *exec`` the drm_exec object with the state h](j)}(h``struct drm_exec *exec``h]j)}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubj )}(hhh]h)}(h"the drm_exec object with the stateh]h"the drm_exec object with the state}(hj΃hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjʃhMhj˃ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjʃhMhjubj)}(h9``struct drm_gem_object *obj`` the GEM object to prepare h](j)}(h``struct drm_gem_object *obj``h]j)}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubj )}(hhh]h)}(hthe GEM object to prepareh]hthe GEM object to prepare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``unsigned int num_fences`` how many fences to reserve h](j)}(h``unsigned int num_fences``h]j)}(hj'h]hunsigned int num_fences}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhj!ubj )}(hhh]h)}(hhow many fences to reserveh]hhow many fences to reserve}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj=ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubh)}(hEPrepare a GEM object for use by locking it and reserving fence slots.h]hEPrepare a GEM object for use by locking it and reserving fence slots.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubh)}(h-EDEADLK if a contention is detected, -EALREADY when object is already locked, -ENOMEM when memory allocation failed and zero for success.h]h-EDEADLK if a contention is detected, -EALREADY when object is already locked, -ENOMEM when memory allocation failed and zero for success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_exec_prepare_array (C function)c.drm_exec_prepare_arrayhNtauh1j!hjlhhhNhNubj3)}(hhh](j8)}(hint drm_exec_prepare_array (struct drm_exec *exec, struct drm_gem_object **objects, unsigned int num_objects, unsigned int num_fences)h]j>)}(hint drm_exec_prepare_array(struct drm_exec *exec, struct drm_gem_object **objects, unsigned int num_objects, unsigned int num_fences)h](jc)}(hinth]hint}(hj΄hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjʄhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chMAubjV)}(h h]h }(hj݄hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjʄhhhj܄hMAubjg)}(hdrm_exec_prepare_arrayh]jm)}(hdrm_exec_prepare_arrayh]hdrm_exec_prepare_array}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjʄhhhj܄hMAubj)}(hk(struct drm_exec *exec, struct drm_gem_object **objects, unsigned int num_objects, unsigned int num_fences)h](j)}(hstruct drm_exec *exech](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_exech]hdrm_exec}(hj)hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j)}jjsbc.drm_exec_prepare_arrayasbuh1hhjubjV)}(h h]h }(hjIhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hexech]hexec}(hjdhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object **objectsh](jD)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjyubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jEc.drm_exec_prepare_arrayasbuh1hhjyubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyubj)}(hjh]h*}(hjDžhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hjh]h*}(hjԅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjm)}(hobjectsh]hobjects}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int num_objectsh](jc)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(h num_objectsh]h num_objects}(hj2hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int num_fencesh](jc)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjGubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjGubjc)}(hinth]hint}(hjghhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjGubjV)}(h h]h }(hjuhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjGubjm)}(h num_fencesh]h num_fences}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjʄhhhj܄hMAubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjƄhhhj܄hMAubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj܄hMAhjÄhhubj)}(hhh]h)}(h%helper to prepare an array of objectsh]h%helper to prepare an array of objects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM5hjhhubah}(h]h ]h"]h$]h&]uh1jhjÄhhhj܄hMAubeh}(h]h ](jfunctioneh"]h$]h&]jjjjņjjņjjjuh1j2hhhjlhNhNubj)}(hX=**Parameters** ``struct drm_exec *exec`` the drm_exec object with the state ``struct drm_gem_object **objects`` array of GEM object to prepare ``unsigned int num_objects`` number of GEM objects in the array ``unsigned int num_fences`` number of fences to reserve on each GEM object **Description** Prepares all GEM objects in an array, aborts on first error. Reserves **num_fences** on each GEM object after locking it. **Return** -EDEADLOCK on contention, -EALREADY when object is already locked, -ENOMEM when memory allocation failed and zero for success.h](h)}(h**Parameters**h]j)}(hjφh]h Parameters}(hjцhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͆ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM9hjɆubj)}(hhh](j)}(h=``struct drm_exec *exec`` the drm_exec object with the state h](j)}(h``struct drm_exec *exec``h]j)}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM6hjubj )}(hhh]h)}(h"the drm_exec object with the stateh]h"the drm_exec object with the state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(hC``struct drm_gem_object **objects`` array of GEM object to prepare h](j)}(h#``struct drm_gem_object **objects``h]j)}(hj'h]hstruct drm_gem_object **objects}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM7hj!ubj )}(hhh]h)}(harray of GEM object to prepareh]harray of GEM object to prepare}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM7hj=ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM7hjubj)}(h@``unsigned int num_objects`` number of GEM objects in the array h](j)}(h``unsigned int num_objects``h]j)}(hj`h]hunsigned int num_objects}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM8hjZubj )}(hhh]h)}(h"number of GEM objects in the arrayh]h"number of GEM objects in the array}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM8hjvubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjuhM8hjubj)}(hK``unsigned int num_fences`` number of fences to reserve on each GEM object h](j)}(h``unsigned int num_fences``h]j)}(hjh]hunsigned int num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM9hjubj )}(hhh]h)}(h.number of fences to reserve on each GEM objecth]h.number of fences to reserve on each GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubeh}(h]h ]h"]h$]h&]uh1jhjɆubh)}(h**Description**h]j)}(hjԇh]h Description}(hjևhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj҇ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM;hjɆubh)}(hyPrepares all GEM objects in an array, aborts on first error. Reserves **num_fences** on each GEM object after locking it.h](hFPrepares all GEM objects in an array, aborts on first error. Reserves }(hjhhhNhNubj)}(h**num_fences**h]h num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% on each GEM object after locking it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM;hjɆubh)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM>hjɆubh)}(h~-EDEADLOCK on contention, -EALREADY when object is already locked, -ENOMEM when memory allocation failed and zero for success.h]h~-EDEADLOCK on contention, -EALREADY when object is already locked, -ENOMEM when memory allocation failed and zero for success.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:547: ./drivers/gpu/drm/drm_exec.chM>hjɆubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjlhhhNhNubeh}(h]drm-execution-contextah ]h"]drm execution contextah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h GPU Schedulerh]h GPU Scheduler}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhhhhhM'ubh)}(hhh](h)}(hOverviewh]hOverview}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhhhhhM*ubh)}(hXThe GPU scheduler provides entities which allow userspace to push jobs into software queues which are then scheduled on a hardware run queue. The software queues have a priority among them. The scheduler selects the entities from the run queue using a FIFO. The scheduler provides dependency handling features among jobs. The driver is supposed to provide callback functions for backend operations to the scheduler like submitting a job to hardware run queue, returning the dependencies of a job etc.h]hXThe GPU scheduler provides entities which allow userspace to push jobs into software queues which are then scheduled on a hardware run queue. The software queues have a priority among them. The scheduler selects the entities from the run queue using a FIFO. The scheduler provides dependency handling features among jobs. The driver is supposed to provide callback functions for backend operations to the scheduler like submitting a job to hardware run queue, returning the dependencies of a job etc.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:556: ./drivers/gpu/drm/scheduler/sched_main.chKhjRhhubh)}(h3The organisation of the scheduler is the following:h]h3The organisation of the scheduler is the following:}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:556: ./drivers/gpu/drm/scheduler/sched_main.chK!hjRhhubj0)}(hhh](jy)}(h#Each hw run queue has one schedulerh]h)}(hjh]h#Each hw run queue has one scheduler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:556: ./drivers/gpu/drm/scheduler/sched_main.chK#hjubah}(h]h ]h"]h$]h&]uh1jyhjubjy)}(hhEach scheduler has multiple run queues with different priorities (e.g., HIGH_HW,HIGH_SW, KERNEL, NORMAL)h]h)}(hhEach scheduler has multiple run queues with different priorities (e.g., HIGH_HW,HIGH_SW, KERNEL, NORMAL)h]hhEach scheduler has multiple run queues with different priorities (e.g., HIGH_HW,HIGH_SW, KERNEL, NORMAL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:556: ./drivers/gpu/drm/scheduler/sched_main.chK$hjubah}(h]h ]h"]h$]h&]uh1jyhjubjy)}(hh]hdrm_gpu_scheduler}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpu_scheduleruh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:562: ./drivers/gpu/drm/scheduler/sched_main.chK7hj4ubhv keeps track of a driver specified credit limit representing the capacity of this scheduler and a credit count; every }(hj4hhhNhNubh)}(h:c:type:`drm_sched_job`h]j)}(hjbh]h drm_sched_job}(hjdhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_sched_jobuh1hhj[hK7hj4ubh. carries a driver specified number of credits.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hK7hjhhubh)}(hXOnce a job is executed (but not yet finished), the job's credits contribute to the scheduler's credit count until the job is finished. If by executing one more job the scheduler's credit count would exceed the scheduler's credit limit, the job won't be executed. Instead, the scheduler will wait until the credit count has decreased enough to not overflow its credit limit. This implies waiting for previously executed jobs.h]hXOnce a job is executed (but not yet finished), the job’s credits contribute to the scheduler’s credit count until the job is finished. If by executing one more job the scheduler’s credit count would exceed the scheduler’s credit limit, the job won’t be executed. Instead, the scheduler will wait until the credit count has decreased enough to not overflow its credit limit. This implies waiting for previously executed jobs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:562: ./drivers/gpu/drm/scheduler/sched_main.chK;hjhhubeh}(h] flow-controlah ]h"] flow controlah$]h&]uh1hhjAhhhhhM0ubh)}(hhh](h)}(hScheduler Function Referencesh]hScheduler Function References}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM6ubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.'DRM_SCHED_FENCE_DONT_PIPELINE (C macro)c.DRM_SCHED_FENCE_DONT_PIPELINEhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hDRM_SCHED_FENCE_DONT_PIPELINEh]j>)}(hDRM_SCHED_FENCE_DONT_PIPELINEh]jg)}(hDRM_SCHED_FENCE_DONT_PIPELINEh]jm)}(hjĉh]hDRM_SCHED_FENCE_DONT_PIPELINE}(hjΉhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjʉubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjƉhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK*ubah}(h]h ]h"]h$]h&]jjjuh1j=jjhj‰hhhjhK*ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhK*hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK*ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubh)}(h!``DRM_SCHED_FENCE_DONT_PIPELINE``h]j)}(hjh]hDRM_SCHED_FENCE_DONT_PIPELINE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK,hjhhubj@-)}(h Prevent dependency pipelining **Description** Setting this flag on a scheduler fence prevents pipelining of jobs depending on this fence. In other words we always insert a full CPU round trip before dependent jobs are pushed to the hw queue. h](j@-)}(hPrevent dependency pipelining h]h)}(hPrevent dependency pipeliningh]hPrevent dependency pipelining}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK$hjubah}(h]h ]h"]h$]h&]uh1j?-hj,hK$hjubh)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK&hjubh)}(hSetting this flag on a scheduler fence prevents pipelining of jobs depending on this fence. In other words we always insert a full CPU round trip before dependent jobs are pushed to the hw queue.h]hSetting this flag on a scheduler fence prevents pipelining of jobs depending on this fence. In other words we always insert a full CPU round trip before dependent jobs are pushed to the hw queue.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK%hjubeh}(h]h ]h"]h$]h&]uh1j?-hj,hK$hjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j./DRM_SCHED_FENCE_FLAG_HAS_DEADLINE_BIT (C macro)'c.DRM_SCHED_FENCE_FLAG_HAS_DEADLINE_BIThNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h%DRM_SCHED_FENCE_FLAG_HAS_DEADLINE_BITh]j>)}(h%DRM_SCHED_FENCE_FLAG_HAS_DEADLINE_BITh]jg)}(h%DRM_SCHED_FENCE_FLAG_HAS_DEADLINE_BITh]jm)}(hjsh]h%DRM_SCHED_FENCE_FLAG_HAS_DEADLINE_BIT}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjuhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK3ubah}(h]h ]h"]h$]h&]jjjuh1j=jjhjqhhhjhK3ubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1j7hjhK3hjnhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjnhhhjhK3ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubh)}(h)``DRM_SCHED_FENCE_FLAG_HAS_DEADLINE_BIT``h]j)}(hjh]h%DRM_SCHED_FENCE_FLAG_HAS_DEADLINE_BIT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK5hjhhubj@-)}(h A fence deadline hint has been set **Description** Because we could have a deadline hint can be set before the backing hw fence is created, we need to keep track of whether a deadline has already been set. h](j@-)}(h#A fence deadline hint has been set h]h)}(h"A fence deadline hint has been seth]h"A fence deadline hint has been set}(hj͊hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK-hjɊubah}(h]h ]h"]h$]h&]uh1j?-hjۊhK-hjŊubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK/hjŊubh)}(hBecause we could have a deadline hint can be set before the backing hw fence is created, we need to keep track of whether a deadline has already been set.h]hBecause we could have a deadline hint can be set before the backing hw fence is created, we need to keep track of whether a deadline has already been set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK.hjŊubeh}(h]h ]h"]h$]h&]uh1j?-hjۊhK-hjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_entity (C struct)c.drm_sched_entityhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hdrm_sched_entityh]j>)}(hstruct drm_sched_entityh](jD)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj$hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK5ubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj$hhhj5hK5ubjg)}(hdrm_sched_entityh]jm)}(hj"h]hdrm_sched_entity}(hjHhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj$hhhj5hK5ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj hhhj5hK5ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj5hK5hjhhubj)}(hhh]h)}(hGA wrapper around a job queue (typically attached to the DRM file_priv).h]hGA wrapper around a job queue (typically attached to the DRM file_priv).}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKKhjghhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hK5ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX **Definition**:: struct drm_sched_entity { struct list_head list; spinlock_t lock; struct drm_sched_rq *rq; struct drm_gpu_scheduler **sched_list; unsigned int num_sched_list; enum drm_sched_priority priority; struct spsc_queue job_queue; atomic_t fence_seq; uint64_t fence_context; struct dma_fence *dependency; struct dma_fence_cb cb; atomic_t *guilty; struct dma_fence __rcu *last_scheduled; struct task_struct *last_user; bool stopped; struct completion entity_idle; ktime_t oldest_job_waiting; struct rb_node rb_tree_node; }; **Members** ``list`` Used to append this struct to the list of entities in the runqueue **rq** under :c:type:`drm_sched_rq.entities `. Protected by :c:type:`drm_sched_rq.lock ` of **rq**. ``lock`` Lock protecting the run-queue (**rq**) to which this entity belongs, **priority** and the list of schedulers (**sched_list**, **num_sched_list**). ``rq`` Runqueue on which this entity is currently scheduled. FIXME: Locking is very unclear for this. Writers are protected by **lock**, but readers are generally lockless and seem to just race with not even a READ_ONCE. ``sched_list`` A list of schedulers (struct drm_gpu_scheduler). Jobs from this entity can be scheduled on any scheduler on this list. This can be modified by calling drm_sched_entity_modify_sched(). Locking is entirely up to the driver, see the above function for more details. This will be set to NULL if :c:type:`num_sched_list` equals 1 and **rq** has been set already. FIXME: This means priority changes through drm_sched_entity_set_priority() will be lost henceforth in this case. ``num_sched_list`` Number of drm_gpu_schedulers in the **sched_list**. ``priority`` Priority of the entity. This can be modified by calling drm_sched_entity_set_priority(). Protected by **lock**. ``job_queue`` the list of jobs of this entity. ``fence_seq`` A linearly increasing seqno incremented with each new :c:type:`drm_sched_fence` which is part of the entity. FIXME: Callers of drm_sched_job_arm() need to ensure correct locking, this doesn't need to be atomic. ``fence_context`` A unique context for all the fences which belong to this entity. The :c:type:`drm_sched_fence.scheduled ` uses the fence_context but :c:type:`drm_sched_fence.finished ` uses fence_context + 1. ``dependency`` The dependency fence of the job which is on the top of the job queue. ``cb`` Callback for the dependency fence above. ``guilty`` Points to entities' guilty. ``last_scheduled`` Points to the finished fence of the last scheduled job. Only written by the scheduler thread, can be accessed locklessly from drm_sched_job_arm() if the queue is empty. ``last_user`` last group leader pushing a job into the entity. ``stopped`` Marks the enity as removed from rq and destined for termination. This is set by calling drm_sched_entity_flush() and by drm_sched_fini(). ``entity_idle`` Signals when entity is not in use, used to sequence entity cleanup in drm_sched_entity_fini(). ``oldest_job_waiting`` Marks earliest job waiting in SW queue ``rb_tree_node`` The node used to insert this entity into time based priority queueh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKOhjubjT)}(hXstruct drm_sched_entity { struct list_head list; spinlock_t lock; struct drm_sched_rq *rq; struct drm_gpu_scheduler **sched_list; unsigned int num_sched_list; enum drm_sched_priority priority; struct spsc_queue job_queue; atomic_t fence_seq; uint64_t fence_context; struct dma_fence *dependency; struct dma_fence_cb cb; atomic_t *guilty; struct dma_fence __rcu *last_scheduled; struct task_struct *last_user; bool stopped; struct completion entity_idle; ktime_t oldest_job_waiting; struct rb_node rb_tree_node; };h]hXstruct drm_sched_entity { struct list_head list; spinlock_t lock; struct drm_sched_rq *rq; struct drm_gpu_scheduler **sched_list; unsigned int num_sched_list; enum drm_sched_priority priority; struct spsc_queue job_queue; atomic_t fence_seq; uint64_t fence_context; struct dma_fence *dependency; struct dma_fence_cb cb; atomic_t *guilty; struct dma_fence __rcu *last_scheduled; struct task_struct *last_user; bool stopped; struct completion entity_idle; ktime_t oldest_job_waiting; struct rb_node rb_tree_node; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKQhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKfhjubj)}(hhh](j)}(h``list`` Used to append this struct to the list of entities in the runqueue **rq** under :c:type:`drm_sched_rq.entities `. Protected by :c:type:`drm_sched_rq.lock ` of **rq**. h](j)}(h``list``h]j)}(hj׋h]hlist}(hjًhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՋubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKXhjыubj )}(hhh](h)}(hUsed to append this struct to the list of entities in the runqueue **rq** under :c:type:`drm_sched_rq.entities `.h](hCUsed to append this struct to the list of entities in the runqueue }(hjhhhNhNubj)}(h**rq**h]hrq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh under }(hjhhhNhNubh)}(h.:c:type:`drm_sched_rq.entities `h]j)}(hj h]hdrm_sched_rq.entities}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_sched_rquh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKUhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hKUhjubh)}(hBProtected by :c:type:`drm_sched_rq.lock ` of **rq**.h](h Protected by }(hj4hhhNhNubh)}(h*:c:type:`drm_sched_rq.lock `h]j)}(hj>h]hdrm_sched_rq.lock}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_sched_rquh1hhjhKXhj4ubh of }(hj4hhhNhNubj)}(h**rq**h]hrq}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKXhjubeh}(h]h ]h"]h$]h&]uh1j hjыubeh}(h]h ]h"]h$]h&]uh1jhjhKXhj΋ubj)}(h``lock`` Lock protecting the run-queue (**rq**) to which this entity belongs, **priority** and the list of schedulers (**sched_list**, **num_sched_list**). h](j)}(h``lock``h]j)}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK`hjubj )}(hhh]h)}(hLock protecting the run-queue (**rq**) to which this entity belongs, **priority** and the list of schedulers (**sched_list**, **num_sched_list**).h](hLock protecting the run-queue (}(hjhhhNhNubj)}(h**rq**h]hrq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ) to which this entity belongs, }(hjhhhNhNubj)}(h **priority**h]hpriority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and the list of schedulers (}(hjhhhNhNubj)}(h**sched_list**h]h sched_list}(hjΌhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**num_sched_list**h]hnum_sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK_hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK`hj΋ubj)}(h``rq`` Runqueue on which this entity is currently scheduled. FIXME: Locking is very unclear for this. Writers are protected by **lock**, but readers are generally lockless and seem to just race with not even a READ_ONCE. h](j)}(h``rq``h]j)}(hj h]hrq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKkhjubj )}(hhh](h)}(h5Runqueue on which this entity is currently scheduled.h]h5Runqueue on which this entity is currently scheduled.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKghj!ubh)}(hFIXME: Locking is very unclear for this. Writers are protected by **lock**, but readers are generally lockless and seem to just race with not even a READ_ONCE.h](hBFIXME: Locking is very unclear for this. Writers are protected by }(hj3hhhNhNubj)}(h**lock**h]hlock}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubhU, but readers are generally lockless and seem to just race with not even a READ_ONCE.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKihj!ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKkhj΋ubj)}(hX``sched_list`` A list of schedulers (struct drm_gpu_scheduler). Jobs from this entity can be scheduled on any scheduler on this list. This can be modified by calling drm_sched_entity_modify_sched(). Locking is entirely up to the driver, see the above function for more details. This will be set to NULL if :c:type:`num_sched_list` equals 1 and **rq** has been set already. FIXME: This means priority changes through drm_sched_entity_set_priority() will be lost henceforth in this case. h](j)}(h``sched_list``h]j)}(hjfh]h sched_list}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK}hj`ubj )}(hhh](h)}(hwA list of schedulers (struct drm_gpu_scheduler). Jobs from this entity can be scheduled on any scheduler on this list.h]hwA list of schedulers (struct drm_gpu_scheduler). Jobs from this entity can be scheduled on any scheduler on this list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKrhj|ubh)}(hThis can be modified by calling drm_sched_entity_modify_sched(). Locking is entirely up to the driver, see the above function for more details.h]hThis can be modified by calling drm_sched_entity_modify_sched(). Locking is entirely up to the driver, see the above function for more details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKuhj|ubh)}(h^This will be set to NULL if :c:type:`num_sched_list` equals 1 and **rq** has been set already.h](hThis will be set to NULL if }(hjhhhNhNubh)}(h:c:type:`num_sched_list`h]j)}(hjh]hnum_sched_list}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3num_sched_listuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKyhjubh equals 1 and }(hjhhhNhNubj)}(h**rq**h]hrq}(hjɍhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh has been set already.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjčhKyhj|ubh)}(hpFIXME: This means priority changes through drm_sched_entity_set_priority() will be lost henceforth in this case.h]hpFIXME: This means priority changes through drm_sched_entity_set_priority() will be lost henceforth in this case.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhK|hj|ubeh}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hK}hj΋ubj)}(hG``num_sched_list`` Number of drm_gpu_schedulers in the **sched_list**. h](j)}(h``num_sched_list``h]j)}(hjh]hnum_sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(h3Number of drm_gpu_schedulers in the **sched_list**.h](h$Number of drm_gpu_schedulers in the }(hjhhhNhNubj)}(h**sched_list**h]h sched_list}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj΋ubj)}(h}``priority`` Priority of the entity. This can be modified by calling drm_sched_entity_set_priority(). Protected by **lock**. h](j)}(h ``priority``h]j)}(hjMh]hpriority}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjGubj )}(hhh]h)}(hoPriority of the entity. This can be modified by calling drm_sched_entity_set_priority(). Protected by **lock**.h](hfPriority of the entity. This can be modified by calling drm_sched_entity_set_priority(). Protected by }(hjfhhhNhNubj)}(h**lock**h]hlock}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjcubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKhj΋ubj)}(h/``job_queue`` the list of jobs of this entity. h](j)}(h ``job_queue``h]j)}(hjh]h job_queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(h the list of jobs of this entity.h]h the list of jobs of this entity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj΋ubj)}(h``fence_seq`` A linearly increasing seqno incremented with each new :c:type:`drm_sched_fence` which is part of the entity. FIXME: Callers of drm_sched_job_arm() need to ensure correct locking, this doesn't need to be atomic. h](j)}(h ``fence_seq``h]j)}(hjҎh]h fence_seq}(hjԎhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЎubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhj̎ubj )}(hhh](h)}(hlA linearly increasing seqno incremented with each new :c:type:`drm_sched_fence` which is part of the entity.h](h6A linearly increasing seqno incremented with each new }(hjhhhNhNubh)}(h:c:type:`drm_sched_fence`h]j)}(hjh]hdrm_sched_fence}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_sched_fenceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubh which is part of the entity.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(heFIXME: Callers of drm_sched_job_arm() need to ensure correct locking, this doesn't need to be atomic.h]hgFIXME: Callers of drm_sched_job_arm() need to ensure correct locking, this doesn’t need to be atomic.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubeh}(h]h ]h"]h$]h&]uh1j hj̎ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj΋ubj)}(h``fence_context`` A unique context for all the fences which belong to this entity. The :c:type:`drm_sched_fence.scheduled ` uses the fence_context but :c:type:`drm_sched_fence.finished ` uses fence_context + 1. h](j)}(h``fence_context``h]j)}(hj>h]h fence_context}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhj8ubj )}(hhh]h)}(hA unique context for all the fences which belong to this entity. The :c:type:`drm_sched_fence.scheduled ` uses the fence_context but :c:type:`drm_sched_fence.finished ` uses fence_context + 1.h](hFA unique context for all the fences which belong to this entity. The }(hjWhhhNhNubh)}(h5:c:type:`drm_sched_fence.scheduled `h]j)}(hjah]hdrm_sched_fence.scheduled}(hjchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_sched_fenceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjWubh uses the fence_context but }(hjWhhhNhNubh)}(h4:c:type:`drm_sched_fence.finished `h]j)}(hjh]hdrm_sched_fence.finished}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_sched_fenceuh1hhj~hKhjWubh uses fence_context + 1.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~hKhjTubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKhj΋ubj)}(hU``dependency`` The dependency fence of the job which is on the top of the job queue. h](j)}(h``dependency``h]j)}(hjh]h dependency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(hEThe dependency fence of the job which is on the top of the job queue.h]hEThe dependency fence of the job which is on the top of the job queue.}(hj׏hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjӏhKhjԏubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjӏhKhj΋ubj)}(h0``cb`` Callback for the dependency fence above. h](j)}(h``cb``h]j)}(hjh]hcb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(h(Callback for the dependency fence above.h]h(Callback for the dependency fence above.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhj΋ubj)}(h'``guilty`` Points to entities' guilty. h](j)}(h ``guilty``h]j)}(hj0h]hguilty}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhj*ubj )}(hhh]h)}(hPoints to entities' guilty.h]hPoints to entities’ guilty.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjFubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhKhj΋ubj)}(h``last_scheduled`` Points to the finished fence of the last scheduled job. Only written by the scheduler thread, can be accessed locklessly from drm_sched_job_arm() if the queue is empty. h](j)}(h``last_scheduled``h]j)}(hjih]hlast_scheduled}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjcubj )}(hhh]h)}(hPoints to the finished fence of the last scheduled job. Only written by the scheduler thread, can be accessed locklessly from drm_sched_job_arm() if the queue is empty.h]hPoints to the finished fence of the last scheduled job. Only written by the scheduler thread, can be accessed locklessly from drm_sched_job_arm() if the queue is empty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj΋ubj)}(h?``last_user`` last group leader pushing a job into the entity. h](j)}(h ``last_user``h]j)}(hjh]h last_user}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(h0last group leader pushing a job into the entity.h]h0last group leader pushing a job into the entity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj΋ubj)}(h``stopped`` Marks the enity as removed from rq and destined for termination. This is set by calling drm_sched_entity_flush() and by drm_sched_fini(). h](j)}(h ``stopped``h]j)}(hjܐh]hstopped}(hjސhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڐubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhj֐ubj )}(hhh]h)}(hMarks the enity as removed from rq and destined for termination. This is set by calling drm_sched_entity_flush() and by drm_sched_fini().h]hMarks the enity as removed from rq and destined for termination. This is set by calling drm_sched_entity_flush() and by drm_sched_fini().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubah}(h]h ]h"]h$]h&]uh1j hj֐ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj΋ubj)}(ho``entity_idle`` Signals when entity is not in use, used to sequence entity cleanup in drm_sched_entity_fini(). h](j)}(h``entity_idle``h]j)}(hjh]h entity_idle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(h^Signals when entity is not in use, used to sequence entity cleanup in drm_sched_entity_fini().h]h^Signals when entity is not in use, used to sequence entity cleanup in drm_sched_entity_fini().}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhj,ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj΋ubj)}(h>``oldest_job_waiting`` Marks earliest job waiting in SW queue h](j)}(h``oldest_job_waiting``h]j)}(hjPh]holdest_job_waiting}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjJubj )}(hhh]h)}(h&Marks earliest job waiting in SW queueh]h&Marks earliest job waiting in SW queue}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehKhjfubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjehKhj΋ubj)}(hS``rb_tree_node`` The node used to insert this entity into time based priority queueh](j)}(h``rb_tree_node``h]j)}(hjh]h rb_tree_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(hBThe node used to insert this entity into time based priority queueh]hBThe node used to insert this entity into time based priority queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj΋ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hj̑h]h Description}(hjΑhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʑubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjhhubh)}(hEntities will emit jobs in order to their corresponding hardware ring, and the scheduler will alternate between entities based on scheduling policy.h]hEntities will emit jobs in order to their corresponding hardware ring, and the scheduler will alternate between entities based on scheduling policy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKLhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_rq (C struct)c.drm_sched_rqhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h drm_sched_rqh]j>)}(hstruct drm_sched_rqh](jD)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKSubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhKSubjg)}(h drm_sched_rqh]jm)}(hjh]h drm_sched_rq}(hj*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhKSubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhKSubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhKShjhhubj)}(hhh]h)}(h"queue of entities to be scheduled.h]h"queue of entities to be scheduled.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjIhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKSubeh}(h]h ](jstructeh"]h$]h&]jjjjdjjdjjjuh1j2hhhjhNhNubj)}(hXf**Definition**:: struct drm_sched_rq { struct drm_gpu_scheduler *sched; spinlock_t lock; struct drm_sched_entity *current_entity; struct list_head entities; struct rb_root_cached rb_tree_root; }; **Members** ``sched`` the scheduler to which this rq belongs to. ``lock`` protects **entities**, **rb_tree_root** and **current_entity**. ``current_entity`` the entity which is to be scheduled. ``entities`` list of the entities to be scheduled. ``rb_tree_root`` root of time based priority queue of entities for FIFO schedulingh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh:}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjhubjT)}(hstruct drm_sched_rq { struct drm_gpu_scheduler *sched; spinlock_t lock; struct drm_sched_entity *current_entity; struct list_head entities; struct rb_root_cached rb_tree_root; };h]hstruct drm_sched_rq { struct drm_gpu_scheduler *sched; spinlock_t lock; struct drm_sched_entity *current_entity; struct list_head entities; struct rb_root_cached rb_tree_root; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjhubh)}(h **Members**h]j)}(hjh]hMembersI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjhubj)}(hhh](j)}(h5``sched`` the scheduler to which this rq belongs to. h](j)}(h ``sched``h]j)}(hjh]hsched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(h*the scheduler to which this rq belongs to.h]h*the scheduler to which this rq belongs to.}(hjҒhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjΒhKhjϒubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjΒhKhjubj)}(hI``lock`` protects **entities**, **rb_tree_root** and **current_entity**. h](j)}(h``lock``h]j)}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(h?protects **entities**, **rb_tree_root** and **current_entity**.h](h protects }(hj hhhNhNubj)}(h **entities**h]hentities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj)}(h**rb_tree_root**h]h rb_tree_root}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh and }(hj hhhNhNubj)}(h**current_entity**h]hcurrent_entity}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h8``current_entity`` the entity which is to be scheduled. h](j)}(h``current_entity``h]j)}(hjah]hcurrent_entity}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhj[ubj )}(hhh]h)}(h$the entity which is to be scheduled.h]h$the entity which is to be scheduled.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhKhjwubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhKhjubj)}(h3``entities`` list of the entities to be scheduled. h](j)}(h ``entities``h]j)}(hjh]hentities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubj )}(hhh]h)}(h%list of the entities to be scheduled.h]h%list of the entities to be scheduled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hR``rb_tree_root`` root of time based priority queue of entities for FIFO schedulingh](j)}(h``rb_tree_root``h]j)}(hjӓh]h rb_tree_root}(hjՓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjѓubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhj͓ubj )}(hhh]h)}(hAroot of time based priority queue of entities for FIFO schedulingh]hAroot of time based priority queue of entities for FIFO scheduling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjubah}(h]h ]h"]h$]h&]uh1j hj͓ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjhhubh)}(hRun queue is a set of entities scheduling command submissions for one specific ring. It implements the scheduling policy that selects the next entity to emit commands from.h]hRun queue is a set of entities scheduling command submissions for one specific ring. It implements the scheduling policy that selects the next entity to emit commands from.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_fence (C struct)c.drm_sched_fencehNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hdrm_sched_fenceh]j>)}(hstruct drm_sched_fenceh](jD)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjPhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhKubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPhhhjahKubjg)}(hdrm_sched_fenceh]jm)}(hjNh]hdrm_sched_fence}(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjPhhhjahKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjLhhhjahKubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1j7hjahKhjIhhubj)}(hhh]h)}(h0fences corresponding to the scheduling of a job.h]h0fences corresponding to the scheduling of a job.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjahKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXY**Definition**:: struct drm_sched_fence { struct dma_fence scheduled; struct dma_fence finished; ktime_t deadline; struct dma_fence *parent; struct drm_gpu_scheduler *sched; spinlock_t lock; void *owner; }; **Members** ``scheduled`` this fence is what will be signaled by the scheduler when the job is scheduled. ``finished`` this fence is what will be signaled by the scheduler when the job is completed. When setting up an out fence for the job, you should use this, since it's available immediately upon drm_sched_job_init(), and the fence returned by the driver from run_job() won't be created until the dependencies have resolved. ``deadline`` deadline set on :c:type:`drm_sched_fence.finished ` which potentially needs to be propagated to :c:type:`drm_sched_fence.parent ` ``parent`` the fence returned by :c:type:`drm_sched_backend_ops.run_job ` when scheduling the job on hardware. We signal the :c:type:`drm_sched_fence.finished ` fence once parent is signalled. ``sched`` the scheduler instance to which the job having this struct belongs to. ``lock`` the lock used by the scheduled and the finished fences. ``owner`` job owner for debuggingh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM hjubjT)}(hX struct drm_sched_fence { struct dma_fence scheduled; struct dma_fence finished; ktime_t deadline; struct dma_fence *parent; struct drm_gpu_scheduler *sched; spinlock_t lock; void *owner; };h]hX struct drm_sched_fence { struct dma_fence scheduled; struct dma_fence finished; ktime_t deadline; struct dma_fence *parent; struct drm_gpu_scheduler *sched; spinlock_t lock; void *owner; };}hjӔsbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj)}(hhh](j)}(h^``scheduled`` this fence is what will be signaled by the scheduler when the job is scheduled. h](j)}(h ``scheduled``h]j)}(hjh]h scheduled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM hjubj )}(hhh]h)}(hOthis fence is what will be signaled by the scheduler when the job is scheduled.h]hOthis fence is what will be signaled by the scheduler when the job is scheduled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hXD``finished`` this fence is what will be signaled by the scheduler when the job is completed. When setting up an out fence for the job, you should use this, since it's available immediately upon drm_sched_job_init(), and the fence returned by the driver from run_job() won't be created until the dependencies have resolved. h](j)}(h ``finished``h]j)}(hj=h]hfinished}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj7ubj )}(hhh](h)}(hOthis fence is what will be signaled by the scheduler when the job is completed.h]hOthis fence is what will be signaled by the scheduler when the job is completed.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjSubh)}(hWhen setting up an out fence for the job, you should use this, since it's available immediately upon drm_sched_job_init(), and the fence returned by the driver from run_job() won't be created until the dependencies have resolved.h]hWhen setting up an out fence for the job, you should use this, since it’s available immediately upon drm_sched_job_init(), and the fence returned by the driver from run_job() won’t be created until the dependencies have resolved.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjSubeh}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjubj)}(h``deadline`` deadline set on :c:type:`drm_sched_fence.finished ` which potentially needs to be propagated to :c:type:`drm_sched_fence.parent ` h](j)}(h ``deadline``h]j)}(hjh]hdeadline}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(hdeadline set on :c:type:`drm_sched_fence.finished ` which potentially needs to be propagated to :c:type:`drm_sched_fence.parent `h](hdeadline set on }(hjhhhNhNubh)}(h4:c:type:`drm_sched_fence.finished `h]j)}(hjh]hdrm_sched_fence.finished}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_sched_fenceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubh- which potentially needs to be propagated to }(hjhhhNhNubh)}(h2:c:type:`drm_sched_fence.parent `h]j)}(hj͕h]hdrm_sched_fence.parent}(hjϕhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj˕ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_sched_fenceuh1hhjƕhMhjubeh}(h]h ]h"]h$]h&]uh1hhjƕhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``parent`` the fence returned by :c:type:`drm_sched_backend_ops.run_job ` when scheduling the job on hardware. We signal the :c:type:`drm_sched_fence.finished ` fence once parent is signalled. h](j)}(h ``parent``h]j)}(hjh]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM%hjubj )}(hhh]h)}(hthe fence returned by :c:type:`drm_sched_backend_ops.run_job ` when scheduling the job on hardware. We signal the :c:type:`drm_sched_fence.finished ` fence once parent is signalled.h](hthe fence returned by }(hjhhhNhNubh)}(h?:c:type:`drm_sched_backend_ops.run_job `h]j)}(hj%h]hdrm_sched_backend_ops.run_job}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_sched_backend_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM#hjubh4 when scheduling the job on hardware. We signal the }(hjhhhNhNubh)}(h4:c:type:`drm_sched_fence.finished `h]j)}(hjIh]hdrm_sched_fence.finished}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_sched_fenceuh1hhjBhM#hjubh fence once parent is signalled.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhM#hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubj)}(hQ``sched`` the scheduler instance to which the job having this struct belongs to. h](j)}(h ``sched``h]j)}(hjh]hsched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM*hj|ubj )}(hhh]h)}(hFthe scheduler instance to which the job having this struct belongs to.h]hFthe scheduler instance to which the job having this struct belongs to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM)hjubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubj)}(hA``lock`` the lock used by the scheduled and the finished fences. h](j)}(h``lock``h]j)}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM.hjubj )}(hhh]h)}(h7the lock used by the scheduled and the finished fences.h]h7the lock used by the scheduled and the finished fences.}(hjՖhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjіhM.hjҖubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjіhM.hjubj)}(h!``owner`` job owner for debuggingh](j)}(h ``owner``h]j)}(hjh]howner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM1hjubj )}(hhh]h)}(hjob owner for debuggingh]hjob owner for debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM2hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hM1hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_job (C struct)c.drm_sched_jobhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h drm_sched_jobh]j>)}(hstruct drm_sched_jobh](jD)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjKhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM8ubjV)}(h h]h }(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKhhhj\hM8ubjg)}(h drm_sched_jobh]jm)}(hjIh]h drm_sched_job}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjKhhhj\hM8ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjGhhhj\hM8ubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1j7hj\hM8hjDhhubj)}(hhh]h)}(hA job to be run by an entity.h]hA job to be run by an entity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM9hjhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj\hM8ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct drm_sched_job { u64 id; ktime_t submit_ts; struct drm_gpu_scheduler *sched; struct drm_sched_fence *s_fence; struct drm_sched_entity *entity; enum drm_sched_priority s_priority; u32 credits; unsigned int last_dependency; atomic_t karma; struct spsc_node queue_node; struct list_head list; union { struct dma_fence_cb finish_cb; struct work_struct work; }; struct dma_fence_cb cb; struct xarray dependencies; }; **Members** ``id`` a unique id assigned to each job scheduled on the scheduler. ``submit_ts`` When the job was pushed into the entity queue. ``sched`` The scheduler this job is or will be scheduled on. Gets set by drm_sched_job_arm(). Valid until drm_sched_backend_ops.free_job() has finished. ``s_fence`` contains the fences for the scheduling of job. ``entity`` the entity to which this job belongs. ``s_priority`` the priority of the job. ``credits`` the number of credits this job contributes to the scheduler ``last_dependency`` tracks **dependencies** as they signal ``karma`` increment on every hang caused by this job. If this exceeds the hang limit of the scheduler then the job is marked guilty and will not be scheduled further. ``queue_node`` used to append this struct to the queue of jobs in an entity. ``list`` a job participates in a "pending" and "done" lists. ``{unnamed_union}`` anonymous ``finish_cb`` the callback for the finished fence. ``work`` Helper to reschedule job kill to different context. ``cb`` the callback for the parent fence in s_fence. ``dependencies`` Contains the dependencies as struct dma_fence for this job, see drm_sched_job_add_dependency() and drm_sched_job_add_implicit_dependencies().h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM=hjubjT)}(hXestruct drm_sched_job { u64 id; ktime_t submit_ts; struct drm_gpu_scheduler *sched; struct drm_sched_fence *s_fence; struct drm_sched_entity *entity; enum drm_sched_priority s_priority; u32 credits; unsigned int last_dependency; atomic_t karma; struct spsc_node queue_node; struct list_head list; union { struct dma_fence_cb finish_cb; struct work_struct work; }; struct dma_fence_cb cb; struct xarray dependencies; };h]hXestruct drm_sched_job { u64 id; ktime_t submit_ts; struct drm_gpu_scheduler *sched; struct drm_sched_fence *s_fence; struct drm_sched_entity *entity; enum drm_sched_priority s_priority; u32 credits; unsigned int last_dependency; atomic_t karma; struct spsc_node queue_node; struct list_head list; union { struct dma_fence_cb finish_cb; struct work_struct work; }; struct dma_fence_cb cb; struct xarray dependencies; };}hjΗsbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM?hjubh)}(h **Members**h]j)}(hjߗh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݗubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMShjubj)}(hhh](j)}(hD``id`` a unique id assigned to each job scheduled on the scheduler. h](j)}(h``id``h]j)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMChjubj )}(hhh]h)}(h)}(hstruct drm_sched_backend_opsh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMQubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMQubjg)}(hdrm_sched_backend_opsh]jm)}(hjh]hdrm_sched_backend_ops}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMQubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMQubah}(h]jݛah ](jjeh"]h$]h&]jj)jhuh1j7hjhMQhjߛhhubj)}(hhh]h)}(h5Define the backend operations called by the schedulerh]h5Define the backend operations called by the scheduler}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj)hhubah}(h]h ]h"]h$]h&]uh1jhjߛhhhjhMQubeh}(h]h ](jstructeh"]h$]h&]jjjjDjjDjjjuh1j2hhhjhNhNubj)}(hX` **Definition**:: struct drm_sched_backend_ops { struct dma_fence *(*prepare_job)(struct drm_sched_job *sched_job, struct drm_sched_entity *s_entity); struct dma_fence *(*run_job)(struct drm_sched_job *sched_job); enum drm_gpu_sched_stat (*timedout_job)(struct drm_sched_job *sched_job); void (*free_job)(struct drm_sched_job *sched_job); }; **Members** ``prepare_job`` Called when the scheduler is considering scheduling this job next, to get another struct dma_fence for this job to block on. Once it returns NULL, run_job() may be called. Can be NULL if no additional preparation to the dependencies are necessary. Skipped when jobs are killed instead of run. ``run_job`` Called to execute the job once all of the dependencies have been resolved. This may be called multiple times, if timedout_job() has happened and drm_sched_job_recovery() decides to try it again. ``timedout_job`` Called when a job has taken too long to execute, to trigger GPU recovery. This method is called in a workqueue context. Drivers typically issue a reset to recover from GPU hangs, and this procedure usually follows the following workflow: 1. Stop the scheduler using drm_sched_stop(). This will park the scheduler thread and cancel the timeout work, guaranteeing that nothing is queued while we reset the hardware queue 2. Try to gracefully stop non-faulty jobs (optional) 3. Issue a GPU reset (driver-specific) 4. Re-submit jobs using drm_sched_resubmit_jobs() 5. Restart the scheduler using drm_sched_start(). At that point, new jobs can be queued, and the scheduler thread is unblocked Note that some GPUs have distinct hardware queues but need to reset the GPU globally, which requires extra synchronization between the timeout handler of the different :c:type:`drm_gpu_scheduler`. One way to achieve this synchronization is to create an ordered workqueue (using alloc_ordered_workqueue()) at the driver level, and pass this queue to drm_sched_init(), to guarantee that timeout handlers are executed sequentially. The above workflow needs to be slightly adjusted in that case: 1. Stop all schedulers impacted by the reset using drm_sched_stop() 2. Try to gracefully stop non-faulty jobs on all queues impacted by the reset (optional) 3. Issue a GPU reset on all faulty queues (driver-specific) 4. Re-submit jobs on all schedulers impacted by the reset using drm_sched_resubmit_jobs() 5. Restart all schedulers that were stopped in step #1 using drm_sched_start() Return DRM_GPU_SCHED_STAT_NOMINAL, when all is normal, and the underlying driver has started or completed recovery. Return DRM_GPU_SCHED_STAT_ENODEV, if the device is no longer available, i.e. has been unplugged. ``free_job`` Called once the job's finished fence has been signaled and it's time to clean it up.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh:}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjHubjT)}(hXSstruct drm_sched_backend_ops { struct dma_fence *(*prepare_job)(struct drm_sched_job *sched_job, struct drm_sched_entity *s_entity); struct dma_fence *(*run_job)(struct drm_sched_job *sched_job); enum drm_gpu_sched_stat (*timedout_job)(struct drm_sched_job *sched_job); void (*free_job)(struct drm_sched_job *sched_job); };h]hXSstruct drm_sched_backend_ops { struct dma_fence *(*prepare_job)(struct drm_sched_job *sched_job, struct drm_sched_entity *s_entity); struct dma_fence *(*run_job)(struct drm_sched_job *sched_job); enum drm_gpu_sched_stat (*timedout_job)(struct drm_sched_job *sched_job); void (*free_job)(struct drm_sched_job *sched_job); };}hjisbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjHubh)}(h **Members**h]j)}(hjzh]hMembers}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjHubj)}(hhh](j)}(hX7``prepare_job`` Called when the scheduler is considering scheduling this job next, to get another struct dma_fence for this job to block on. Once it returns NULL, run_job() may be called. Can be NULL if no additional preparation to the dependencies are necessary. Skipped when jobs are killed instead of run. h](j)}(h``prepare_job``h]j)}(hjh]h prepare_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh](h)}(hCalled when the scheduler is considering scheduling this job next, to get another struct dma_fence for this job to block on. Once it returns NULL, run_job() may be called.h]hCalled when the scheduler is considering scheduling this job next, to get another struct dma_fence for this job to block on. Once it returns NULL, run_job() may be called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubh)}(hxCan be NULL if no additional preparation to the dependencies are necessary. Skipped when jobs are killed instead of run.h]hxCan be NULL if no additional preparation to the dependencies are necessary. Skipped when jobs are killed instead of run.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``run_job`` Called to execute the job once all of the dependencies have been resolved. This may be called multiple times, if timedout_job() has happened and drm_sched_job_recovery() decides to try it again. h](j)}(h ``run_job``h]j)}(hjh]hrun_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjܜubj )}(hhh]h)}(hCalled to execute the job once all of the dependencies have been resolved. This may be called multiple times, if timedout_job() has happened and drm_sched_job_recovery() decides to try it again.h]hCalled to execute the job once all of the dependencies have been resolved. This may be called multiple times, if timedout_job() has happened and drm_sched_job_recovery() decides to try it again.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjܜubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hX``timedout_job`` Called when a job has taken too long to execute, to trigger GPU recovery. This method is called in a workqueue context. Drivers typically issue a reset to recover from GPU hangs, and this procedure usually follows the following workflow: 1. Stop the scheduler using drm_sched_stop(). This will park the scheduler thread and cancel the timeout work, guaranteeing that nothing is queued while we reset the hardware queue 2. Try to gracefully stop non-faulty jobs (optional) 3. Issue a GPU reset (driver-specific) 4. Re-submit jobs using drm_sched_resubmit_jobs() 5. Restart the scheduler using drm_sched_start(). At that point, new jobs can be queued, and the scheduler thread is unblocked Note that some GPUs have distinct hardware queues but need to reset the GPU globally, which requires extra synchronization between the timeout handler of the different :c:type:`drm_gpu_scheduler`. One way to achieve this synchronization is to create an ordered workqueue (using alloc_ordered_workqueue()) at the driver level, and pass this queue to drm_sched_init(), to guarantee that timeout handlers are executed sequentially. The above workflow needs to be slightly adjusted in that case: 1. Stop all schedulers impacted by the reset using drm_sched_stop() 2. Try to gracefully stop non-faulty jobs on all queues impacted by the reset (optional) 3. Issue a GPU reset on all faulty queues (driver-specific) 4. Re-submit jobs on all schedulers impacted by the reset using drm_sched_resubmit_jobs() 5. Restart all schedulers that were stopped in step #1 using drm_sched_start() Return DRM_GPU_SCHED_STAT_NOMINAL, when all is normal, and the underlying driver has started or completed recovery. Return DRM_GPU_SCHED_STAT_ENODEV, if the device is no longer available, i.e. has been unplugged. h](j)}(h``timedout_job``h]j)}(hjh]h timedout_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh](h)}(hICalled when a job has taken too long to execute, to trigger GPU recovery.h]hICalled when a job has taken too long to execute, to trigger GPU recovery.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj2ubh)}(h-This method is called in a workqueue context.h]h-This method is called in a workqueue context.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj2ubh)}(huDrivers typically issue a reset to recover from GPU hangs, and this procedure usually follows the following workflow:h]huDrivers typically issue a reset to recover from GPU hangs, and this procedure usually follows the following workflow:}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj2ubj0)}(hhh](jy)}(hStop the scheduler using drm_sched_stop(). This will park the scheduler thread and cancel the timeout work, guaranteeing that nothing is queued while we reset the hardware queueh]h)}(hStop the scheduler using drm_sched_stop(). This will park the scheduler thread and cancel the timeout work, guaranteeing that nothing is queued while we reset the hardware queueh]hStop the scheduler using drm_sched_stop(). This will park the scheduler thread and cancel the timeout work, guaranteeing that nothing is queued while we reset the hardware queue}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjeubah}(h]h ]h"]h$]h&]uh1jyhjbubjy)}(h1Try to gracefully stop non-faulty jobs (optional)h]h)}(hjh]h1Try to gracefully stop non-faulty jobs (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj~ubah}(h]h ]h"]h$]h&]uh1jyhjbubjy)}(h#Issue a GPU reset (driver-specific)h]h)}(hjh]h#Issue a GPU reset (driver-specific)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1jyhjbubjy)}(h.Re-submit jobs using drm_sched_resubmit_jobs()h]h)}(hjh]h.Re-submit jobs using drm_sched_resubmit_jobs()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1jyhjbubjy)}(h|Restart the scheduler using drm_sched_start(). At that point, new jobs can be queued, and the scheduler thread is unblocked h]h)}(h{Restart the scheduler using drm_sched_start(). At that point, new jobs can be queued, and the scheduler thread is unblockedh]h{Restart the scheduler using drm_sched_start(). At that point, new jobs can be queued, and the scheduler thread is unblocked}(hjʝhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjƝubah}(h]h ]h"]h$]h&]uh1jyhjbubeh}(h]h ]h"]h$]h&]jl3jm3jn3hjo3juh1j0hj2ubh)}(hXNote that some GPUs have distinct hardware queues but need to reset the GPU globally, which requires extra synchronization between the timeout handler of the different :c:type:`drm_gpu_scheduler`. One way to achieve this synchronization is to create an ordered workqueue (using alloc_ordered_workqueue()) at the driver level, and pass this queue to drm_sched_init(), to guarantee that timeout handlers are executed sequentially. The above workflow needs to be slightly adjusted in that case:h](hNote that some GPUs have distinct hardware queues but need to reset the GPU globally, which requires extra synchronization between the timeout handler of the different }(hjhhhNhNubh)}(h:c:type:`drm_gpu_scheduler`h]j)}(hjh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_gpu_scheduleruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubhX(. One way to achieve this synchronization is to create an ordered workqueue (using alloc_ordered_workqueue()) at the driver level, and pass this queue to drm_sched_init(), to guarantee that timeout handlers are executed sequentially. The above workflow needs to be slightly adjusted in that case:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj2ubj0)}(hhh](jy)}(h@Stop all schedulers impacted by the reset using drm_sched_stop()h]h)}(hjh]h@Stop all schedulers impacted by the reset using drm_sched_stop()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1jyhjubjy)}(hUTry to gracefully stop non-faulty jobs on all queues impacted by the reset (optional)h]h)}(hUTry to gracefully stop non-faulty jobs on all queues impacted by the reset (optional)h]hUTry to gracefully stop non-faulty jobs on all queues impacted by the reset (optional)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj2ubah}(h]h ]h"]h$]h&]uh1jyhjubjy)}(h8Issue a GPU reset on all faulty queues (driver-specific)h]h)}(hjMh]h8Issue a GPU reset on all faulty queues (driver-specific)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjKubah}(h]h ]h"]h$]h&]uh1jyhjubjy)}(hVRe-submit jobs on all schedulers impacted by the reset using drm_sched_resubmit_jobs()h]h)}(hVRe-submit jobs on all schedulers impacted by the reset using drm_sched_resubmit_jobs()h]hVRe-submit jobs on all schedulers impacted by the reset using drm_sched_resubmit_jobs()}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjcubah}(h]h ]h"]h$]h&]uh1jyhjubjy)}(hLRestart all schedulers that were stopped in step #1 using drm_sched_start() h]h)}(hKRestart all schedulers that were stopped in step #1 using drm_sched_start()h]hKRestart all schedulers that were stopped in step #1 using drm_sched_start()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj|ubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]jl3jm3jn3hjo3juh1j0hj2ubh)}(hsReturn DRM_GPU_SCHED_STAT_NOMINAL, when all is normal, and the underlying driver has started or completed recovery.h]hsReturn DRM_GPU_SCHED_STAT_NOMINAL, when all is normal, and the underlying driver has started or completed recovery.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj2ubh)}(h`Return DRM_GPU_SCHED_STAT_ENODEV, if the device is no longer available, i.e. has been unplugged.h]h`Return DRM_GPU_SCHED_STAT_ENODEV, if the device is no longer available, i.e. has been unplugged.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj2ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(ha``free_job`` Called once the job's finished fence has been signaled and it's time to clean it up.h](j)}(h ``free_job``h]j)}(hj˞h]hfree_job}(hj͞hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɞubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjŞubj )}(hhh]h)}(hTCalled once the job's finished fence has been signaled and it's time to clean it up.h]hXCalled once the job’s finished fence has been signaled and it’s time to clean it up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjŞubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjhhubh)}(h9These functions should be implemented in the driver side.h]h9These functions should be implemented in the driver side.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gpu_scheduler (C struct)c.drm_gpu_schedulerhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hdrm_gpu_schedulerh]j>)}(hstruct drm_gpu_schedulerh](jD)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjGhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMubjV)}(h h]h }(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjGhhhjXhMubjg)}(hdrm_gpu_schedulerh]jm)}(hjEh]hdrm_gpu_scheduler}(hjkhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjGhhhjXhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjChhhjXhMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1j7hjXhMhj@hhubj)}(hhh]h)}(h scheduler instance-specific datah]h scheduler instance-specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjXhMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX **Definition**:: struct drm_gpu_scheduler { const struct drm_sched_backend_ops *ops; u32 credit_limit; atomic_t credit_count; long timeout; const char *name; u32 num_rqs; struct drm_sched_rq **sched_rq; wait_queue_head_t job_scheduled; atomic64_t job_id_count; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; struct work_struct work_run_job; struct work_struct work_free_job; struct delayed_work work_tdr; struct list_head pending_list; spinlock_t job_list_lock; int hang_limit; atomic_t *score; atomic_t _score; bool ready; bool free_guilty; bool pause_submit; bool own_submit_wq; struct device *dev; }; **Members** ``ops`` backend operations provided by the driver. ``credit_limit`` the credit limit of this scheduler ``credit_count`` the current credit count of this scheduler ``timeout`` the time after which a job is removed from the scheduler. ``name`` name of the ring for which this scheduler is being used. ``num_rqs`` Number of run-queues. This is at most DRM_SCHED_PRIORITY_COUNT, as there's usually one run-queue per priority, but could be less. ``sched_rq`` An allocated array of run-queues of size **num_rqs**; ``job_scheduled`` once **drm_sched_entity_do_release** is called the scheduler waits on this wait queue until all the scheduled jobs are finished. ``job_id_count`` used to assign unique id to the each job. ``submit_wq`` workqueue used to queue **work_run_job** and **work_free_job** ``timeout_wq`` workqueue used to queue **work_tdr** ``work_run_job`` work which calls run_job op of each scheduler. ``work_free_job`` work which calls free_job op of each scheduler. ``work_tdr`` schedules a delayed call to **drm_sched_job_timedout** after the timeout interval is over. ``pending_list`` the list of jobs which are currently in the job queue. ``job_list_lock`` lock to protect the pending_list. ``hang_limit`` once the hangs by a job crosses this limit then it is marked guilty and it will no longer be considered for scheduling. ``score`` score to help loadbalancer pick a idle sched ``_score`` score used when the driver doesn't provide one ``ready`` marks if the underlying HW is ready to work ``free_guilty`` A hit to time out handler to free the guilty job. ``pause_submit`` pause queuing of **work_run_job** on **submit_wq** ``own_submit_wq`` scheduler owns allocation of **submit_wq** ``dev`` system :c:type:`struct device `h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubjT)}(hXAstruct drm_gpu_scheduler { const struct drm_sched_backend_ops *ops; u32 credit_limit; atomic_t credit_count; long timeout; const char *name; u32 num_rqs; struct drm_sched_rq **sched_rq; wait_queue_head_t job_scheduled; atomic64_t job_id_count; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; struct work_struct work_run_job; struct work_struct work_free_job; struct delayed_work work_tdr; struct list_head pending_list; spinlock_t job_list_lock; int hang_limit; atomic_t *score; atomic_t _score; bool ready; bool free_guilty; bool pause_submit; bool own_submit_wq; struct device *dev; };h]hXAstruct drm_gpu_scheduler { const struct drm_sched_backend_ops *ops; u32 credit_limit; atomic_t credit_count; long timeout; const char *name; u32 num_rqs; struct drm_sched_rq **sched_rq; wait_queue_head_t job_scheduled; atomic64_t job_id_count; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; struct work_struct work_run_job; struct work_struct work_free_job; struct delayed_work work_tdr; struct list_head pending_list; spinlock_t job_list_lock; int hang_limit; atomic_t *score; atomic_t _score; bool ready; bool free_guilty; bool pause_submit; bool own_submit_wq; struct device *dev; };}hjʟsbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubh)}(h **Members**h]j)}(hj۟h]hMembers}(hjݟhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٟubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj)}(hhh](j)}(h3``ops`` backend operations provided by the driver. h](j)}(h``ops``h]j)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h*backend operations provided by the driver.h]h*backend operations provided by the driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``credit_limit`` the credit limit of this scheduler h](j)}(h``credit_limit``h]j)}(hj3h]h credit_limit}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj-ubj )}(hhh]h)}(h"the credit limit of this schedulerh]h"the credit limit of this scheduler}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubj)}(h<``credit_count`` the current credit count of this scheduler h](j)}(h``credit_count``h]j)}(hjlh]h credit_count}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjfubj )}(hhh]h)}(h*the current credit count of this schedulerh]h*the current credit count of this scheduler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``timeout`` the time after which a job is removed from the scheduler. h](j)}(h ``timeout``h]j)}(hjh]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.h hMhjubj )}(hhh]h)}(h9the time after which a job is removed from the scheduler.h]h9the time after which a job is removed from the scheduler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hB``name`` name of the ring for which this scheduler is being used. h](j)}(h``name``h]j)}(hjޠh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܠubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjؠubj )}(hhh]h)}(h8name of the ring for which this scheduler is being used.h]h8name of the ring for which this scheduler is being used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjؠubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``num_rqs`` Number of run-queues. This is at most DRM_SCHED_PRIORITY_COUNT, as there's usually one run-queue per priority, but could be less. h](j)}(h ``num_rqs``h]j)}(hjh]hnum_rqs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(hNumber of run-queues. This is at most DRM_SCHED_PRIORITY_COUNT, as there's usually one run-queue per priority, but could be less.h]hNumber of run-queues. This is at most DRM_SCHED_PRIORITY_COUNT, as there’s usually one run-queue per priority, but could be less.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj-ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(hC``sched_rq`` An allocated array of run-queues of size **num_rqs**; h](j)}(h ``sched_rq``h]j)}(hjQh]hsched_rq}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjKubj )}(hhh]h)}(h5An allocated array of run-queues of size **num_rqs**;h](h)An allocated array of run-queues of size }(hjjhhhNhNubj)}(h **num_rqs**h]hnum_rqs}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh;}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubj)}(h``job_scheduled`` once **drm_sched_entity_do_release** is called the scheduler waits on this wait queue until all the scheduled jobs are finished. h](j)}(h``job_scheduled``h]j)}(hjh]h job_scheduled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(honce **drm_sched_entity_do_release** is called the scheduler waits on this wait queue until all the scheduled jobs are finished.h](honce }(hjhhhNhNubj)}(h**drm_sched_entity_do_release**h]hdrm_sched_entity_do_release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh\ is called the scheduler waits on this wait queue until all the scheduled jobs are finished.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``job_id_count`` used to assign unique id to the each job. h](j)}(h``job_id_count``h]j)}(hjh]h job_id_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h)used to assign unique id to the each job.h]h)used to assign unique id to the each job.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hM``submit_wq`` workqueue used to queue **work_run_job** and **work_free_job** h](j)}(h ``submit_wq``h]j)}(hj!h]h submit_wq}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h>workqueue used to queue **work_run_job** and **work_free_job**h](hworkqueue used to queue }(hj:hhhNhNubj)}(h**work_run_job**h]h work_run_job}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh and }(hj:hhhNhNubj)}(h**work_free_job**h]h work_free_job}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubj)}(h4``timeout_wq`` workqueue used to queue **work_tdr** h](j)}(h``timeout_wq``h]j)}(hjzh]h timeout_wq}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjtubj )}(hhh]h)}(h$workqueue used to queue **work_tdr**h](hworkqueue used to queue }(hjhhhNhNubj)}(h **work_tdr**h]hwork_tdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``work_run_job`` work which calls run_job op of each scheduler. h](j)}(h``work_run_job``h]j)}(hjh]h work_run_job}(hjâhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h.work which calls run_job op of each scheduler.h]h.work which calls run_job op of each scheduler.}(hjڢhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj֢hMhjעubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj֢hMhjubj)}(hB``work_free_job`` work which calls free_job op of each scheduler. h](j)}(h``work_free_job``h]j)}(hjh]h work_free_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h/work which calls free_job op of each scheduler.h]h/work which calls free_job op of each scheduler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hh``work_tdr`` schedules a delayed call to **drm_sched_job_timedout** after the timeout interval is over. h](j)}(h ``work_tdr``h]j)}(hj3h]hwork_tdr}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj-ubj )}(hhh]h)}(hZschedules a delayed call to **drm_sched_job_timedout** after the timeout interval is over.h](hschedules a delayed call to }(hjLhhhNhNubj)}(h**drm_sched_job_timedout**h]hdrm_sched_job_timedout}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh$ after the timeout interval is over.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjIubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubj)}(hH``pending_list`` the list of jobs which are currently in the job queue. h](j)}(h``pending_list``h]j)}(hjh]h pending_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjyubj )}(hhh]h)}(h6the list of jobs which are currently in the job queue.h]h6the list of jobs which are currently in the job queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``job_list_lock`` lock to protect the pending_list. h](j)}(h``job_list_lock``h]j)}(hjh]h job_list_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h!lock to protect the pending_list.h]h!lock to protect the pending_list.}(hjѣhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjͣhMhjΣubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjͣhMhjubj)}(h``hang_limit`` once the hangs by a job crosses this limit then it is marked guilty and it will no longer be considered for scheduling. h](j)}(h``hang_limit``h]j)}(hjh]h hang_limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(hwonce the hangs by a job crosses this limit then it is marked guilty and it will no longer be considered for scheduling.h]hwonce the hangs by a job crosses this limit then it is marked guilty and it will no longer be considered for scheduling.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``score`` score to help loadbalancer pick a idle sched h](j)}(h ``score``h]j)}(hj+h]hscore}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj%ubj )}(hhh]h)}(h,score to help loadbalancer pick a idle schedh]h,score to help loadbalancer pick a idle sched}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubj)}(h:``_score`` score used when the driver doesn't provide one h](j)}(h ``_score``h]j)}(hjdh]h_score}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj^ubj )}(hhh]h)}(h.score used when the driver doesn't provide oneh]h0score used when the driver doesn’t provide one}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjubj)}(h6``ready`` marks if the underlying HW is ready to work h](j)}(h ``ready``h]j)}(hjh]hready}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h+marks if the underlying HW is ready to workh]h+marks if the underlying HW is ready to work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hB``free_guilty`` A hit to time out handler to free the guilty job. h](j)}(h``free_guilty``h]j)}(hj֤h]h free_guilty}(hjؤhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԤubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjФubj )}(hhh]h)}(h1A hit to time out handler to free the guilty job.h]h1A hit to time out handler to free the guilty job.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjФubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hD``pause_submit`` pause queuing of **work_run_job** on **submit_wq** h](j)}(h``pause_submit``h]j)}(hjh]h pause_submit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj ubj )}(hhh]h)}(h2pause queuing of **work_run_job** on **submit_wq**h](hpause queuing of }(hj(hhhNhNubj)}(h**work_run_job**h]h work_run_job}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh on }(hj(hhhNhNubj)}(h **submit_wq**h]h submit_wq}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1hhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(h=``own_submit_wq`` scheduler owns allocation of **submit_wq** h](j)}(h``own_submit_wq``h]j)}(hjhh]h own_submit_wq}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjbubj )}(hhh]h)}(h*scheduler owns allocation of **submit_wq**h](hscheduler owns allocation of }(hjhhhNhNubj)}(h **submit_wq**h]h submit_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjubj)}(h/``dev`` system :c:type:`struct device `h](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h'system :c:type:`struct device `h](hsystem }(hjȥhhhNhNubh)}(h :c:type:`struct device `h]j)}(hjҥh]h struct device}(hjԥhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjХubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3deviceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjȥubeh}(h]h ]h"]h$]h&]uh1hhjhMhjťubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjĥhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjhhubh)}(h4One scheduler is implemented for each hardware ring.h]h4One scheduler is implemented for each hardware ring.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjhhubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_init_args (C struct)c.drm_sched_init_argshNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hdrm_sched_init_argsh]j>)}(hstruct drm_sched_init_argsh](jD)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjKhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMubjV)}(h h]h }(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKhhhj\hMubjg)}(hdrm_sched_init_argsh]jm)}(hjIh]hdrm_sched_init_args}(hjohhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjKhhhj\hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjGhhhj\hMubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1j7hj\hMhjDhhubj)}(hhh]h)}(h/parameters for initializing a DRM GPU schedulerh]h/parameters for initializing a DRM GPU scheduler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj\hMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Definition**:: struct drm_sched_init_args { const struct drm_sched_backend_ops *ops; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; u32 num_rqs; u32 credit_limit; unsigned int hang_limit; long timeout; atomic_t *score; const char *name; struct device *dev; }; **Members** ``ops`` backend operations provided by the driver ``submit_wq`` workqueue to use for submission. If NULL, an ordered wq is allocated and used. ``timeout_wq`` workqueue to use for timeout work. If NULL, the system_wq is used. ``num_rqs`` Number of run-queues. This may be at most DRM_SCHED_PRIORITY_COUNT, as there's usually one run-queue per priority, but may be less. ``credit_limit`` the number of credits this scheduler can hold from all jobs ``hang_limit`` number of times to allow a job to hang before dropping it. This mechanism is DEPRECATED. Set it to 0. ``timeout`` timeout value in jiffies for submitted jobs. ``score`` score atomic shared with other schedulers. May be NULL. ``name`` name (typically the driver's name). Used for debugging ``dev`` associated device. Used for debuggingh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubjT)}(hX6struct drm_sched_init_args { const struct drm_sched_backend_ops *ops; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; u32 num_rqs; u32 credit_limit; unsigned int hang_limit; long timeout; atomic_t *score; const char *name; struct device *dev; };h]hX6struct drm_sched_init_args { const struct drm_sched_backend_ops *ops; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; u32 num_rqs; u32 credit_limit; unsigned int hang_limit; long timeout; atomic_t *score; const char *name; struct device *dev; };}hjΦsbah}(h]h ]h"]h$]h&]jjuh1jShW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubh)}(h **Members**h]j)}(hjߦh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݦubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM)hjubj)}(hhh](j)}(h2``ops`` backend operations provided by the driver h](j)}(h``ops``h]j)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(h)backend operations provided by the driverh]h)backend operations provided by the driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h]``submit_wq`` workqueue to use for submission. If NULL, an ordered wq is allocated and used. h](j)}(h ``submit_wq``h]j)}(hj7h]h submit_wq}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj1ubj )}(hhh]h)}(hNworkqueue to use for submission. If NULL, an ordered wq is allocated and used.h]hNworkqueue to use for submission. If NULL, an ordered wq is allocated and used.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjMubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubj)}(hR``timeout_wq`` workqueue to use for timeout work. If NULL, the system_wq is used. h](j)}(h``timeout_wq``h]j)}(hjqh]h timeout_wq}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM"hjkubj )}(hhh]h)}(hBworkqueue to use for timeout work. If NULL, the system_wq is used.h]hBworkqueue to use for timeout work. If NULL, the system_wq is used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1j hjkubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h``num_rqs`` Number of run-queues. This may be at most DRM_SCHED_PRIORITY_COUNT, as there's usually one run-queue per priority, but may be less. h](j)}(h ``num_rqs``h]j)}(hjh]hnum_rqs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubj )}(hhh]h)}(hNumber of run-queues. This may be at most DRM_SCHED_PRIORITY_COUNT, as there's usually one run-queue per priority, but may be less.h]hNumber of run-queues. This may be at most DRM_SCHED_PRIORITY_COUNT, as there’s usually one run-queue per priority, but may be less.}(hjçhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hM``credit_limit`` the number of credits this scheduler can hold from all jobs h](j)}(h``credit_limit``h]j)}(hjh]h credit_limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhjާubj )}(hhh]h)}(h;the number of credits this scheduler can hold from all jobsh]h;the number of credits this scheduler can hold from all jobs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjާubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hu``hang_limit`` number of times to allow a job to hang before dropping it. This mechanism is DEPRECATED. Set it to 0. h](j)}(h``hang_limit``h]j)}(hjh]h hang_limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM hjubj )}(hhh]h)}(henumber of times to allow a job to hang before dropping it. This mechanism is DEPRECATED. Set it to 0.h]henumber of times to allow a job to hang before dropping it. This mechanism is DEPRECATED. Set it to 0.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhMhj3ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj2hM hjubj)}(h9``timeout`` timeout value in jiffies for submitted jobs. h](j)}(h ``timeout``h]j)}(hjWh]htimeout}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM!hjQubj )}(hhh]h)}(h,timeout value in jiffies for submitted jobs.h]h,timeout value in jiffies for submitted jobs.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM!hjmubah}(h]h ]h"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM!hjubj)}(hB``score`` score atomic shared with other schedulers. May be NULL. h](j)}(h ``score``h]j)}(hjh]hscore}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM#hjubj )}(hhh]h)}(h7score atomic shared with other schedulers. May be NULL.h]h7score atomic shared with other schedulers. May be NULL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(h@``name`` name (typically the driver's name). Used for debugging h](j)}(h``name``h]j)}(hjɨh]hname}(hj˨hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǨubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM$hjèubj )}(hhh]h)}(h6name (typically the driver's name). Used for debuggingh]h8name (typically the driver’s name). Used for debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjިhM$hjߨubah}(h]h ]h"]h$]h&]uh1j hjèubeh}(h]h ]h"]h$]h&]uh1jhjިhM$hjubj)}(h-``dev`` associated device. Used for debuggingh](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM$hjubj )}(hhh]h)}(h%associated device. Used for debuggingh]h%associated device. Used for debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:568: ./include/drm/gpu_scheduler.hhM%hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_sched_tdr_queue_imm (C function)c.drm_sched_tdr_queue_immhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h>void drm_sched_tdr_queue_imm (struct drm_gpu_scheduler *sched)h]j>)}(h=void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched)h](jc)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjXhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXhhhjjhMubjg)}(hdrm_sched_tdr_queue_immh]jm)}(hdrm_sched_tdr_queue_immh]hdrm_sched_tdr_queue_imm}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjXhhhjjhMubj)}(h!(struct drm_gpu_scheduler *sched)h]j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_tdr_queue_immasbuh1hhjubjV)}(h h]h }(hjשhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjXhhhjjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjThhhjjhMubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1j7hjjhMhjQhhubj)}(hhh]jy)}(hhh]jy)}(h%immediately start job timeout handlerh]h)}(hj!h]h%immediately start job timeout handler}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubah}(h]h ]h"]h$]h&]uh1jyhjhhhj0hNubah}(h]h ]h"]h$]h&]jyjyuh1jyhj0hMhjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler for which the timeout handling should be started. **Description** Start timeout handling immediately for the named scheduler.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjJubj)}(hhh]j)}(h```struct drm_gpu_scheduler *sched`` scheduler for which the timeout handling should be started. h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjoh]hstruct drm_gpu_scheduler *sched}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjiubj )}(hhh]h)}(h;scheduler for which the timeout handling should be started.h]h;scheduler for which the timeout handling should be started.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjJubh)}(h;Start timeout handling immediately for the named scheduler.h]h;Start timeout handling immediately for the named scheduler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_fault (C function)c.drm_sched_faulthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h6void drm_sched_fault (struct drm_gpu_scheduler *sched)h]j>)}(h5void drm_sched_fault(struct drm_gpu_scheduler *sched)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_sched_faulth]jm)}(hdrm_sched_faulth]hdrm_sched_fault}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h!(struct drm_gpu_scheduler *sched)h]j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj(ubjV)}(h h]h }(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(ubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjJhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_faultasbuh1hhj(ubjV)}(h h]h }(hjjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(ubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjm)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(h!immediately start timeout handlerh]h!immediately start timeout handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjǫjjǫjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler where the timeout handling should be started. **Description** Start timeout handling immediately when the driver detects a hardware fault.h](h)}(h**Parameters**h]j)}(hjѫh]h Parameters}(hjӫhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϫubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj˫ubj)}(hhh]j)}(h\``struct drm_gpu_scheduler *sched`` scheduler where the timeout handling should be started. h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(h7scheduler where the timeout handling should be started.h]h7scheduler where the timeout handling should be started.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj˫ubh)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj˫ubh)}(hLStart timeout handling immediately when the driver detects a hardware fault.h]hLStart timeout handling immediately when the driver detects a hardware fault.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj˫ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_sched_suspend_timeout (C function)c.drm_sched_suspend_timeouthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hIunsigned long drm_sched_suspend_timeout (struct drm_gpu_scheduler *sched)h]j>)}(hHunsigned long drm_sched_suspend_timeout(struct drm_gpu_scheduler *sched)h](jc)}(hunsignedh]hunsigned}(hjphhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjlhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlhhhj~hMubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjlhhhj~hMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlhhhj~hMubjg)}(hdrm_sched_suspend_timeouth]jm)}(hdrm_sched_suspend_timeouth]hdrm_sched_suspend_timeout}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjlhhhj~hMubj)}(h!(struct drm_gpu_scheduler *sched)h]j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hjɬhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjŬubjV)}(h h]h }(hj֬hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjŬubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_suspend_timeoutasbuh1hhjŬubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjŬubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŬubjm)}(hschedh]hsched}(hj"hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjŬubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjlhhhj~hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhhj~hMubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1j7hj~hMhjehhubj)}(hhh]h)}(hSuspend scheduler job timeouth]hSuspend scheduler job timeout}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj~hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1j2hhhjhNhNubj)}(hXA**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance for which to suspend the timeout **Description** Suspend the delayed work timeout for the scheduler. This is done by modifying the delayed work timeout to an arbitrary large value, MAX_SCHEDULE_TIMEOUT in this case. Returns the timeout remainingh](h)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhubj)}(hhh]j)}(hX``struct drm_gpu_scheduler *sched`` scheduler instance for which to suspend the timeout h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(h3scheduler instance for which to suspend the timeouth]h3scheduler instance for which to suspend the timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubh)}(h**Description**h]j)}(hjȭh]h Description}(hjʭhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƭubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhubh)}(hSuspend the delayed work timeout for the scheduler. This is done by modifying the delayed work timeout to an arbitrary large value, MAX_SCHEDULE_TIMEOUT in this case.h]hSuspend the delayed work timeout for the scheduler. This is done by modifying the delayed work timeout to an arbitrary large value, MAX_SCHEDULE_TIMEOUT in this case.}(hjޭhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhubh)}(hReturns the timeout remainingh]hReturns the timeout remaining}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_sched_resume_timeout (C function)c.drm_sched_resume_timeouthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hXvoid drm_sched_resume_timeout (struct drm_gpu_scheduler *sched, unsigned long remaining)h]j>)}(hWvoid drm_sched_resume_timeout(struct drm_gpu_scheduler *sched, unsigned long remaining)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj*hMubjg)}(hdrm_sched_resume_timeouth]jm)}(hdrm_sched_resume_timeouth]hdrm_sched_resume_timeout}(hj=hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj*hMubj)}(h:(struct drm_gpu_scheduler *sched, unsigned long remaining)h](j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjUubjV)}(h h]h }(hjfhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjwhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j)}jj?sbc.drm_sched_resume_timeoutasbuh1hhjUubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjm)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hunsigned long remainingh](jc)}(hunsignedh]hunsigned}(hjˮhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjǮubjV)}(h h]h }(hjٮhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjǮubjc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjǮubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjǮubjm)}(h remainingh]h remaining}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjǮubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj*hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj*hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj*hMhjhhubj)}(hhh]h)}(hResume scheduler job timeouth]hResume scheduler job timeout}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj*hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance for which to resume the timeout ``unsigned long remaining`` remaining timeout **Description** Resume the delayed work timeout for the scheduler.h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjIubj)}(hhh](j)}(hW``struct drm_gpu_scheduler *sched`` scheduler instance for which to resume the timeout h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjnh]hstruct drm_gpu_scheduler *sched}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhubj )}(hhh]h)}(h2scheduler instance for which to resume the timeouth]h2scheduler instance for which to resume the timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(h.``unsigned long remaining`` remaining timeout h](j)}(h``unsigned long remaining``h]j)}(hjh]hunsigned long remaining}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hremaining timeouth]hremaining timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjIubh)}(h2Resume the delayed work timeout for the scheduler.h]h2Resume the delayed work timeout for the scheduler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_stop (C function)c.drm_sched_stophNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hPvoid drm_sched_stop (struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)h]j>)}(hOvoid drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)h](jc)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj#hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMRubjV)}(h h]h }(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#hhhj5hMRubjg)}(hdrm_sched_stoph]jm)}(hdrm_sched_stoph]hdrm_sched_stop}(hjHhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj#hhhj5hMRubj)}(h<(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)h](j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj`ubjV)}(h h]h }(hjqhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj`ubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjJsbc.drm_sched_stopasbuh1hhj`ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjm)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(hstruct drm_sched_job *badh](jD)}(hjh]hstruct}(hjְhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjҰubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjҰubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_sched_stopasbuh1hhjҰubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjҰubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҰubjm)}(hbadh]hbad}(hj-hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjҰubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj5hMRubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj5hMRubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj5hMRhjhhubj)}(hhh]h)}(hstop the schedulerh]hstop the scheduler}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMDhjThhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1j2hhhjhNhNubj)}(hXH**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance ``struct drm_sched_job *bad`` job which caused the time out **Description** Stop the scheduler and also removes and frees all completed jobs. This function is typically used for reset recovery (see the docu of drm_sched_backend_ops.timedout_job() for details). Do not call it for scheduler teardown, i.e., before calling drm_sched_fini(). **Note** bad job will not be freed as it might be used later and so it's callers responsibility to release it manually if it's not part of the pending list any more.h](h)}(h**Parameters**h]j)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMHhjsubj)}(hhh](j)}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMFhjubj )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubj)}(h<``struct drm_sched_job *bad`` job which caused the time out h](j)}(h``struct drm_sched_job *bad``h]j)}(hjѱh]hstruct drm_sched_job *bad}(hjӱhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϱubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMGhj˱ubj )}(hhh]h)}(hjob which caused the time outh]hjob which caused the time out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1j hj˱ubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjubeh}(h]h ]h"]h$]h&]uh1jhjsubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMIhjsubh)}(hXStop the scheduler and also removes and frees all completed jobs. This function is typically used for reset recovery (see the docu of drm_sched_backend_ops.timedout_job() for details). Do not call it for scheduler teardown, i.e., before calling drm_sched_fini().h]hXStop the scheduler and also removes and frees all completed jobs. This function is typically used for reset recovery (see the docu of drm_sched_backend_ops.timedout_job() for details). Do not call it for scheduler teardown, i.e., before calling drm_sched_fini().}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMIhjsubh)}(h**Note**h]j)}(hj3h]hNote}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMNhjsubh)}(hbad job will not be freed as it might be used later and so it's callers responsibility to release it manually if it's not part of the pending list any more.h]hbad job will not be freed as it might be used later and so it’s callers responsibility to release it manually if it’s not part of the pending list any more.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMJhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_start (C function)c.drm_sched_starthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hAvoid drm_sched_start (struct drm_gpu_scheduler *sched, int errno)h]j>)}(h@void drm_sched_start(struct drm_gpu_scheduler *sched, int errno)h](jc)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjthhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjthhhjhMubjg)}(hdrm_sched_starth]jm)}(hdrm_sched_starth]hdrm_sched_start}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjthhhjhMubj)}(h,(struct drm_gpu_scheduler *sched, int errno)h](j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj²hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjӲhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjвubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjղmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_startasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int errnoh](jc)}(hinth]hint}(hj'hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj#ubjV)}(h h]h }(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#ubjm)}(herrnoh]herrno}(hjChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjthhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjphhhjhMubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjmhhubj)}(hhh]h)}(hrecover jobs after a reseth]hrecover jobs after a reset}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXw**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance ``int errno`` error to set on the pending fences **Description** This function is typically used for reset recovery (see the docu of drm_sched_backend_ops.timedout_job() for details). Do not call it for scheduler startup. The scheduler itself is fully operational after drm_sched_init() succeeded.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj)}(hhh](j)}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjdzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjóhMhjijubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjóhMhjubj)}(h1``int errno`` error to set on the pending fences h](j)}(h ``int errno``h]j)}(hjh]h int errno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(h"error to set on the pending fencesh]h"error to set on the pending fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(hThis function is typically used for reset recovery (see the docu of drm_sched_backend_ops.timedout_job() for details). Do not call it for scheduler startup. The scheduler itself is fully operational after drm_sched_init() succeeded.h]hThis function is typically used for reset recovery (see the docu of drm_sched_backend_ops.timedout_job() for details). Do not call it for scheduler startup. The scheduler itself is fully operational after drm_sched_init() succeeded.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.$drm_sched_resubmit_jobs (C function)c.drm_sched_resubmit_jobshNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h>void drm_sched_resubmit_jobs (struct drm_gpu_scheduler *sched)h]j>)}(h=void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched)h](jc)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjchhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjchhhjuhMubjg)}(hdrm_sched_resubmit_jobsh]jm)}(hdrm_sched_resubmit_jobsh]hdrm_sched_resubmit_jobs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjchhhjuhMubj)}(h!(struct drm_gpu_scheduler *sched)h]j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hj´hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjĴmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_resubmit_jobsasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjchhhjuhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj_hhhjuhMubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1j7hjuhMhj\hhubj)}(hhh]h)}(h"Deprecated, don't use in new code!h]h$Deprecated, don’t use in new code!}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1j2hhhjhNhNubj)}(hXx**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance **Description** Re-submitting jobs was a concept AMD came up as cheap way to implement recovery after a job timeout. This turned out to be not working very well. First of all there are many problem with the dma_fence implementation and requirements. Either the implementation is risking deadlocks with core memory management or violating documented implementation details of the dma_fence object. Drivers can still save and restore their state for recovery operations, but we shouldn't make this a general scheduler feature around the dma_fence interface.h](h)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjCubj)}(hhh]j)}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjhh]hstruct drm_gpu_scheduler *sched}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjbubj )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjCubh)}(hdRe-submitting jobs was a concept AMD came up as cheap way to implement recovery after a job timeout.h]hdRe-submitting jobs was a concept AMD came up as cheap way to implement recovery after a job timeout.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjCubh)}(hXThis turned out to be not working very well. First of all there are many problem with the dma_fence implementation and requirements. Either the implementation is risking deadlocks with core memory management or violating documented implementation details of the dma_fence object.h]hXThis turned out to be not working very well. First of all there are many problem with the dma_fence implementation and requirements. Either the implementation is risking deadlocks with core memory management or violating documented implementation details of the dma_fence object.}(hjȵhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjCubh)}(hDrivers can still save and restore their state for recovery operations, but we shouldn't make this a general scheduler feature around the dma_fence interface.h]hDrivers can still save and restore their state for recovery operations, but we shouldn’t make this a general scheduler feature around the dma_fence interface.}(hj׵hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_job_init (C function)c.drm_sched_job_inithNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hmint drm_sched_job_init (struct drm_sched_job *job, struct drm_sched_entity *entity, u32 credits, void *owner)h]j>)}(hlint drm_sched_job_init(struct drm_sched_job *job, struct drm_sched_entity *entity, u32 credits, void *owner)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_sched_job_inith]jm)}(hdrm_sched_job_inith]hdrm_sched_job_init}(hj'hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hV(struct drm_sched_job *job, struct drm_sched_entity *entity, u32 credits, void *owner)h](j)}(hstruct drm_sched_job *jobh](jD)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj?ubjV)}(h h]h }(hjPhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hjahhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j)}jj)sbc.drm_sched_job_initasbuh1hhj?ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjm)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hstruct drm_sched_entity *entityh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj¶hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_sched_entityh]hdrm_sched_entity}(hjӶhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjжubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjնmodnameN classnameNjj)}j]j}c.drm_sched_job_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hentityh]hentity}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h u32 creditsh](h)}(hhh]jm)}(hu32h]hu32}(hj(hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j}c.drm_sched_job_initasbuh1hhj!ubjV)}(h h]h }(hjFhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!ubjm)}(hcreditsh]hcredits}(hjThhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h void *ownerh](jc)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjiubjV)}(h h]h }(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjm)}(hownerh]howner}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hinit a scheduler jobh]hinit a scheduler job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjطjjطjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_sched_job *job`` scheduler job to init ``struct drm_sched_entity *entity`` scheduler entity to use ``u32 credits`` the number of credits this job contributes to the schedulers credit limit ``void *owner`` job owner for debugging **Description** Refer to drm_sched_entity_push_job() documentation for locking considerations. Drivers must make sure drm_sched_job_cleanup() if this function returns successfully, even when **job** is aborted before drm_sched_job_arm() is called. Note that this function does not assign a valid value to each struct member of struct drm_sched_job. Take a look at that struct's documentation to see who sets which struct member with what lifetime. WARNING: amdgpu abuses :c:type:`drm_sched.ready ` to signal when the hardware has died, which can mean that there's no valid runqueue for a **entity**. This function returns -ENOENT in this case (which probably should be -EIO as a more meanigful return value). Returns 0 for success, negative error code otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjܷubj)}(hhh](j)}(h4``struct drm_sched_job *job`` scheduler job to init h](j)}(h``struct drm_sched_job *job``h]j)}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hscheduler job to inith]hscheduler job to init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``struct drm_sched_entity *entity`` scheduler entity to use h](j)}(h#``struct drm_sched_entity *entity``h]j)}(hj:h]hstruct drm_sched_entity *entity}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj4ubj )}(hhh]h)}(hscheduler entity to useh]hscheduler entity to use}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(hZ``u32 credits`` the number of credits this job contributes to the schedulers credit limit h](j)}(h``u32 credits``h]j)}(hjsh]h u32 credits}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjmubj )}(hhh]h)}(hIthe number of credits this job contributes to the schedulers credit limith]hIthe number of credits this job contributes to the schedulers credit limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``void *owner`` job owner for debugging h](j)}(h``void *owner``h]j)}(hjh]h void *owner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hjob owner for debuggingh]hjob owner for debugging}(hjƸhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj¸hMhjøubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj¸hMhjubeh}(h]h ]h"]h$]h&]uh1jhjܷubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjܷubh)}(hNRefer to drm_sched_entity_push_job() documentation for locking considerations.h]hNRefer to drm_sched_entity_push_job() documentation for locking considerations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjܷubh)}(hDrivers must make sure drm_sched_job_cleanup() if this function returns successfully, even when **job** is aborted before drm_sched_job_arm() is called.h](h`Drivers must make sure drm_sched_job_cleanup() if this function returns successfully, even when }(hj hhhNhNubj)}(h**job**h]hjob}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh1 is aborted before drm_sched_job_arm() is called.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjܷubh)}(hNote that this function does not assign a valid value to each struct member of struct drm_sched_job. Take a look at that struct's documentation to see who sets which struct member with what lifetime.h]hNote that this function does not assign a valid value to each struct member of struct drm_sched_job. Take a look at that struct’s documentation to see who sets which struct member with what lifetime.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjܷubh)}(hXWARNING: amdgpu abuses :c:type:`drm_sched.ready ` to signal when the hardware has died, which can mean that there's no valid runqueue for a **entity**. This function returns -ENOENT in this case (which probably should be -EIO as a more meanigful return value).h](hWARNING: amdgpu abuses }(hj=hhhNhNubh)}(h%:c:type:`drm_sched.ready `h]j)}(hjGh]hdrm_sched.ready}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_scheduh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM hj=ubh] to signal when the hardware has died, which can mean that there’s no valid runqueue for a }(hj=hhhNhNubj)}(h **entity**h]hentity}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubhn. This function returns -ENOENT in this case (which probably should be -EIO as a more meanigful return value).}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhM hjܷubh)}(h5Returns 0 for success, negative error code otherwise.h]h5Returns 0 for success, negative error code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjܷubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_job_arm (C function)c.drm_sched_job_armhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h2void drm_sched_job_arm (struct drm_sched_job *job)h]j>)}(h1void drm_sched_job_arm(struct drm_sched_job *job)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMFubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMFubjg)}(hdrm_sched_job_armh]jm)}(hdrm_sched_job_armh]hdrm_sched_job_arm}(hjѹhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj͹ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMFubj)}(h(struct drm_sched_job *job)h]j)}(hstruct drm_sched_job *jobh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjӹsbc.drm_sched_job_armasbuh1hhjubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hjobh]hjob}(hjFhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMFubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMFubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMFhjhhubj)}(hhh]h)}(h!arm a scheduler job for executionh]h!arm a scheduler job for execution}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM:hjmhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMFubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_sched_job *job`` scheduler job to arm **Description** This arms a scheduler job for execution. Specifically it initializes the :c:type:`drm_sched_job.s_fence ` of **job**, so that it can be attached to struct dma_resv or other places that need to track the completion of this job. Refer to drm_sched_entity_push_job() documentation for locking considerations. This can only be called if drm_sched_job_init() succeeded.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM>hjubj)}(hhh]j)}(h3``struct drm_sched_job *job`` scheduler job to arm h](j)}(h``struct drm_sched_job *job``h]j)}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM;hjubj )}(hhh]h)}(hscheduler job to armh]hscheduler job to arm}(hjʺhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƺhM;hjǺubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjƺhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM=hjubh)}(hThis arms a scheduler job for execution. Specifically it initializes the :c:type:`drm_sched_job.s_fence ` of **job**, so that it can be attached to struct dma_resv or other places that need to track the completion of this job.h](hIThis arms a scheduler job for execution. Specifically it initializes the }(hjhhhNhNubh)}(h/:c:type:`drm_sched_job.s_fence `h]j)}(hj h]hdrm_sched_job.s_fence}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 drm_sched_jobuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM=hjubh of }(hjhhhNhNubj)}(h**job**h]hjob}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhn, so that it can be attached to struct dma_resv or other places that need to track the completion of this job.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hM=hjubh)}(hNRefer to drm_sched_entity_push_job() documentation for locking considerations.h]hNRefer to drm_sched_entity_push_job() documentation for locking considerations.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMAhjubh)}(h:This can only be called if drm_sched_job_init() succeeded.h]h:This can only be called if drm_sched_job_init() succeeded.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)drm_sched_job_add_dependency (C function)c.drm_sched_job_add_dependencyhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hUint drm_sched_job_add_dependency (struct drm_sched_job *job, struct dma_fence *fence)h]j>)}(hTint drm_sched_job_add_dependency(struct drm_sched_job *job, struct dma_fence *fence)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMaubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMaubjg)}(hdrm_sched_job_add_dependencyh]jm)}(hdrm_sched_job_add_dependencyh]hdrm_sched_job_add_dependency}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMaubj)}(h4(struct drm_sched_job *job, struct dma_fence *fence)h](j)}(hstruct drm_sched_job *jobh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjλhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hj߻hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjܻubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_job_add_dependencyasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct dma_fence *fenceh](jD)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj/ubjV)}(h h]h }(hj@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/ubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]jc.drm_sched_job_add_dependencyasbuh1hhj/ubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjm)}(hfenceh]hfence}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMaubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj|hhhjhMaubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1j7hjhMahjyhhubj)}(hhh]h)}(h"adds the fence as a job dependencyh]h"adds the fence as a job dependency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMXhjhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhMaubeh}(h]h ](jfunctioneh"]h$]h&]jjjj̼jj̼jjjuh1j2hhhjhNhNubj)}(hXG**Parameters** ``struct drm_sched_job *job`` scheduler job to add the dependencies to ``struct dma_fence *fence`` the dma_fence to add to the list of dependencies. **Description** Note that **fence** is consumed in both the success and error cases. **Return** 0 on success, or an error on failing to expand the array.h](h)}(h**Parameters**h]j)}(hjּh]h Parameters}(hjؼhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԼubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM\hjмubj)}(hhh](j)}(hG``struct drm_sched_job *job`` scheduler job to add the dependencies to h](j)}(h``struct drm_sched_job *job``h]j)}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMYhjubj )}(hhh]h)}(h(scheduler job to add the dependencies toh]h(scheduler job to add the dependencies to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMYhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMYhjubj)}(hN``struct dma_fence *fence`` the dma_fence to add to the list of dependencies. h](j)}(h``struct dma_fence *fence``h]j)}(hj.h]hstruct dma_fence *fence}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMZhj(ubj )}(hhh]h)}(h1the dma_fence to add to the list of dependencies.h]h1the dma_fence to add to the list of dependencies.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMZhjDubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMZhjubeh}(h]h ]h"]h$]h&]uh1jhjмubh)}(h**Description**h]j)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM\hjмubh)}(hDNote that **fence** is consumed in both the success and error cases.h](h Note that }(hjhhhNhNubj)}(h **fence**h]hfence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh1 is consumed in both the success and error cases.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM\hjмubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM^hjмubh)}(h90 on success, or an error on failing to expand the array.h]h90 on success, or an error on failing to expand the array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM^hjмubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.1drm_sched_job_add_syncobj_dependency (C function)&c.drm_sched_job_add_syncobj_dependencyhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hrint drm_sched_job_add_syncobj_dependency (struct drm_sched_job *job, struct drm_file *file, u32 handle, u32 point)h]j>)}(hqint drm_sched_job_add_syncobj_dependency(struct drm_sched_job *job, struct drm_file *file, u32 handle, u32 point)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(h$drm_sched_job_add_syncobj_dependencyh]jm)}(h$drm_sched_job_add_syncobj_dependencyh]h$drm_sched_job_add_syncobj_dependency}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hI(struct drm_sched_job *job, struct drm_file *file, u32 handle, u32 point)h](j)}(hstruct drm_sched_job *jobh](jD)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j)}jj sb&c.drm_sched_job_add_syncobj_dependencyasbuh1hhj ubjV)}(h h]h }(hjbhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjm)}(hjobh]hjob}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *fileh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j^&c.drm_sched_job_add_syncobj_dependencyasbuh1hhjubjV)}(h h]h }(hjҾhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 handleh](h)}(hhh]jm)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j^&c.drm_sched_job_add_syncobj_dependencyasbuh1hhjubjV)}(h h]h }(hj'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hhandleh]hhandle}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 pointh](h)}(hhh]jm)}(hu32h]hu32}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j^&c.drm_sched_job_add_syncobj_dependencyasbuh1hhjJubjV)}(h h]h }(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubjm)}(hpointh]hpoint}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj߽hhhjhMubah}(h]jڽah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjܽhhubj)}(hhh]h)}(h*adds a syncobj's fence as a job dependencyh]h,adds a syncobj’s fence as a job dependency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjܽhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXm**Parameters** ``struct drm_sched_job *job`` scheduler job to add the dependencies to ``struct drm_file *file`` drm file private pointer ``u32 handle`` syncobj handle to lookup ``u32 point`` timeline point **Description** This adds the fence matching the given syncobj to **job**. **Return** 0 on success, or an error on failing to expand the array.h](h)}(h**Parameters**h]j)}(hjɿh]h Parameters}(hj˿hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǿubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjÿubj)}(hhh](j)}(hG``struct drm_sched_job *job`` scheduler job to add the dependencies to h](j)}(h``struct drm_sched_job *job``h]j)}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(h(scheduler job to add the dependencies toh]h(scheduler job to add the dependencies to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj߿ubj)}(h3``struct drm_file *file`` drm file private pointer h](j)}(h``struct drm_file *file``h]j)}(hj!h]hstruct drm_file *file}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hdrm file private pointerh]hdrm file private pointer}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj߿ubj)}(h(``u32 handle`` syncobj handle to lookup h](j)}(h``u32 handle``h]j)}(hjZh]h u32 handle}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjTubj )}(hhh]h)}(hsyncobj handle to lookuph]hsyncobj handle to lookup}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjpubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhj߿ubj)}(h``u32 point`` timeline point h](j)}(h ``u32 point``h]j)}(hjh]h u32 point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(htimeline pointh]htimeline point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj߿ubeh}(h]h ]h"]h$]h&]uh1jhjÿubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjÿubh)}(h:This adds the fence matching the given syncobj to **job**.h](h2This adds the fence matching the given syncobj to }(hjhhhNhNubj)}(h**job**h]hjob}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjÿubh)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjÿubh)}(h90 on success, or an error on failing to expand the array.h]h90 on success, or an error on failing to expand the array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjÿubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.0drm_sched_job_add_resv_dependencies (C function)%c.drm_sched_job_add_resv_dependencieshNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(huint drm_sched_job_add_resv_dependencies (struct drm_sched_job *job, struct dma_resv *resv, enum dma_resv_usage usage)h]j>)}(htint drm_sched_job_add_resv_dependencies(struct drm_sched_job *job, struct dma_resv *resv, enum dma_resv_usage usage)h](jc)}(hinth]hint}(hjLhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjHhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHhhhjZhMubjg)}(h#drm_sched_job_add_resv_dependenciesh]jm)}(h#drm_sched_job_add_resv_dependenciesh]h#drm_sched_job_add_resv_dependencies}(hjmhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjHhhhjZhMubj)}(hM(struct drm_sched_job *job, struct dma_resv *resv, enum dma_resv_usage usage)h](j)}(hstruct drm_sched_job *jobh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjosb%c.drm_sched_job_add_resv_dependenciesasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct dma_resv *resvh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdma_resvh]hdma_resv}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%c.drm_sched_job_add_resv_dependenciesasbuh1hhjubjV)}(h h]h }(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hresvh]hresv}(hjRhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum dma_resv_usage usageh](jD)}(hjGh]henum}(hjkhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjgubjV)}(h h]h }(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjgubh)}(hhh]jm)}(hdma_resv_usageh]hdma_resv_usage}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%c.drm_sched_job_add_resv_dependenciesasbuh1hhjgubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjgubjm)}(husageh]husage}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjHhhhjZhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjDhhhjZhMubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j7hjZhMhjAhhubj)}(hhh]h)}(h'add all fences from the resv to the jobh]h'add all fences from the resv to the job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjZhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_sched_job *job`` scheduler job to add the dependencies to ``struct dma_resv *resv`` the dma_resv object to get the fences from ``enum dma_resv_usage usage`` the dma_resv_usage to use to filter the fences **Description** This adds all fences matching the given usage from **resv** to **job**. Must be called with the **resv** lock held. **Return** 0 on success, or an error on failing to expand the array.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj)}(hhh](j)}(hG``struct drm_sched_job *job`` scheduler job to add the dependencies to h](j)}(h``struct drm_sched_job *job``h]j)}(hj h]hstruct drm_sched_job *job}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(h(scheduler job to add the dependencies toh]h(scheduler job to add the dependencies to}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubj)}(hE``struct dma_resv *resv`` the dma_resv object to get the fences from h](j)}(h``struct dma_resv *resv``h]j)}(hjYh]hstruct dma_resv *resv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjSubj )}(hhh]h)}(h*the dma_resv object to get the fences fromh]h*the dma_resv object to get the fences from}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjubj)}(hM``enum dma_resv_usage usage`` the dma_resv_usage to use to filter the fences h](j)}(h``enum dma_resv_usage usage``h]j)}(hjh]henum dma_resv_usage usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(h.the dma_resv_usage to use to filter the fencesh]h.the dma_resv_usage to use to filter the fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(hsThis adds all fences matching the given usage from **resv** to **job**. Must be called with the **resv** lock held.h](h3This adds all fences matching the given usage from }(hjhhhNhNubj)}(h**resv**h]hresv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**job**h]hjob}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. Must be called with the }(hjhhhNhNubj)}(h**resv**h]hresv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh lock held.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(h **Return**h]j)}(hj*h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(h90 on success, or an error on failing to expand the array.h]h90 on success, or an error on failing to expand the array.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.4drm_sched_job_add_implicit_dependencies (C function))c.drm_sched_job_add_implicit_dependencieshNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hoint drm_sched_job_add_implicit_dependencies (struct drm_sched_job *job, struct drm_gem_object *obj, bool write)h]j>)}(hnint drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job, struct drm_gem_object *obj, bool write)h](jc)}(hinth]hint}(hjohhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjkhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hj~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjkhhhj}hMubjg)}(h'drm_sched_job_add_implicit_dependenciesh]jm)}(h'drm_sched_job_add_implicit_dependenciesh]h'drm_sched_job_add_implicit_dependencies}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjkhhhj}hMubj)}(hC(struct drm_sched_job *job, struct drm_gem_object *obj, bool write)h](j)}(hstruct drm_sched_job *jobh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb)c.drm_sched_job_add_implicit_dependenciesasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_gem_object *objh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gem_objecth]hdrm_gem_object}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j)c.drm_sched_job_add_implicit_dependenciesasbuh1hhjubjV)}(h h]h }(hjZhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hobjh]hobj}(hjuhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool writeh](jc)}(hj h]hbool}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjkhhhj}hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjghhhj}hMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1j7hj}hMhjdhhubj)}(hhh]h)}(h.adds implicit dependencies as job dependenciesh]h.adds implicit dependencies as job dependencies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_sched_job *job`` scheduler job to add the dependencies to ``struct drm_gem_object *obj`` the gem object to add new dependencies from. ``bool write`` whether the job might write the object (so we need to depend on shared fences in the reservation object). **Description** This should be called after drm_gem_lock_reservations() on your array of GEM objects used in the job but before updating the reservations with your own fences. **Return** 0 on success, or an error on failing to expand the array.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj)}(hhh](j)}(hG``struct drm_sched_job *job`` scheduler job to add the dependencies to h](j)}(h``struct drm_sched_job *job``h]j)}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(h(scheduler job to add the dependencies toh]h(scheduler job to add the dependencies to}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj ubj)}(hL``struct drm_gem_object *obj`` the gem object to add new dependencies from. h](j)}(h``struct drm_gem_object *obj``h]j)}(hjMh]hstruct drm_gem_object *obj}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjGubj )}(hhh]h)}(h,the gem object to add new dependencies from.h]h,the gem object to add new dependencies from.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhj ubj)}(hy``bool write`` whether the job might write the object (so we need to depend on shared fences in the reservation object). h](j)}(h``bool write``h]j)}(hjh]h bool write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hiwhether the job might write the object (so we need to depend on shared fences in the reservation object).h]hiwhether the job might write the object (so we need to depend on shared fences in the reservation object).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(hThis should be called after drm_gem_lock_reservations() on your array of GEM objects used in the job but before updating the reservations with your own fences.h]hThis should be called after drm_gem_lock_reservations() on your array of GEM objects used in the job but before updating the reservations with your own fences.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(h90 on success, or an error on failing to expand the array.h]h90 on success, or an error on failing to expand the array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.)drm_sched_job_has_dependency (C function)c.drm_sched_job_has_dependencyhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hVbool drm_sched_job_has_dependency (struct drm_sched_job *job, struct dma_fence *fence)h]j>)}(hUbool drm_sched_job_has_dependency(struct drm_sched_job *job, struct dma_fence *fence)h](jc)}(hj h]hbool}(hj.hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj*hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hj<hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*hhhj;hMubjg)}(hdrm_sched_job_has_dependencyh]jm)}(hdrm_sched_job_has_dependencyh]hdrm_sched_job_has_dependency}(hjNhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj*hhhj;hMubj)}(h4(struct drm_sched_job *job, struct dma_fence *fence)h](j)}(hstruct drm_sched_job *jobh](jD)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjfubjV)}(h h]h }(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjPsbc.drm_sched_job_has_dependencyasbuh1hhjfubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjm)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hstruct dma_fence *fenceh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h dma_fenceh]h dma_fence}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_sched_job_has_dependencyasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hfenceh]hfence}(hj3hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubeh}(h]h ]h"]h$]h&]jjuh1jhj*hhhj;hMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj&hhhj;hMubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1j7hj;hMhj#hhubj)}(hhh]h)}(h+check whether fence is the job's dependencyh]h-check whether fence is the job’s dependency}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj;hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_sched_job *job`` scheduler job to check ``struct dma_fence *fence`` fence to look for **Return** True if **fence** is found within the job's dependencies, or otherwise false.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjyubj)}(hhh](j)}(h5``struct drm_sched_job *job`` scheduler job to check h](j)}(h``struct drm_sched_job *job``h]j)}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hscheduler job to checkh]hscheduler job to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``struct dma_fence *fence`` fence to look for h](j)}(h``struct dma_fence *fence``h]j)}(hjh]hstruct dma_fence *fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hfence to look forh]hfence to look for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjyubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjyubh)}(hMTrue if **fence** is found within the job's dependencies, or otherwise false.h](hTrue if }(hj(hhhNhNubj)}(h **fence**h]hfence}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh> is found within the job’s dependencies, or otherwise false.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_sched_job_cleanup (C function)c.drm_sched_job_cleanuphNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h6void drm_sched_job_cleanup (struct drm_sched_job *job)h]j>)}(h5void drm_sched_job_cleanup(struct drm_sched_job *job)h](jc)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjehhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjehhhjwhMubjg)}(hdrm_sched_job_cleanuph]jm)}(hdrm_sched_job_cleanuph]hdrm_sched_job_cleanup}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjehhhjwhMubj)}(h(struct drm_sched_job *job)h]j)}(hstruct drm_sched_job *jobh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_job_cleanupasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjehhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjahhhjwhMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1j7hjwhMhj^hhubj)}(hhh]h)}(h clean up scheduler job resourcesh]h clean up scheduler job resources}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjwhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1j2hhhjhNhNubj)}(hXw**Parameters** ``struct drm_sched_job *job`` scheduler job to clean up **Description** Cleans up the resources allocated with drm_sched_job_init(). Drivers should call this from their error unwind code if **job** is aborted before it was submitted to an entity with drm_sched_entity_push_job(). Since calling drm_sched_job_arm() causes the job's fences to be initialized, it is up to the driver to ensure that fences that were exposed to external parties get signaled. drm_sched_job_cleanup() does not ensure this. This function must also be called in :c:type:`struct drm_sched_backend_ops `.free_jobh](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjEubj)}(hhh]j)}(h8``struct drm_sched_job *job`` scheduler job to clean up h](j)}(h``struct drm_sched_job *job``h]j)}(hjjh]hstruct drm_sched_job *job}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjdubj )}(hhh]h)}(hscheduler job to clean uph]hscheduler job to clean up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjEubh)}(h`.free_jobh](h%This function must also be called in }(hjhhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j)}(hjh]hstruct drm_sched_backend_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3drm_sched_backend_opsuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh .free_job}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j. drm_sched_pick_best (C function)c.drm_sched_pick_besthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hsstruct drm_gpu_scheduler * drm_sched_pick_best (struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list)h]j>)}(hqstruct drm_gpu_scheduler *drm_sched_pick_best(struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list)h](jD)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjHhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMwubjV)}(h h]h }(hjZhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHhhhjYhMwubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjkhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j)}jdrm_sched_pick_bestsbc.drm_sched_pick_bestasbuh1hhjHhhhjYhMwubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHhhhjYhMwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhMwubjg)}(hdrm_sched_pick_besth]jm)}(hjh]hdrm_sched_pick_best}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjHhhhjYhMwubj)}(hD(struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list)h](j)}(h%struct drm_gpu_scheduler **sched_listh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_sched_pick_bestasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h sched_listh]h sched_list}(hj*hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int num_sched_listh](jc)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj?ubjV)}(h h]h }(hjQhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubjc)}(hinth]hint}(hj_hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj?ubjV)}(h h]h }(hjmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubjm)}(hnum_sched_listh]hnum_sched_list}(hj{hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjHhhhjYhMwubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjDhhhjYhMwubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j7hjYhMwhjAhhubj)}(hhh]h)}(h5Get a drm sched from a sched_list with the least loadh]h5Get a drm sched from a sched_list with the least load}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMphjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhMwubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_gpu_scheduler **sched_list`` list of drm_gpu_schedulers ``unsigned int num_sched_list`` number of drm_gpu_schedulers in the sched_list **Description** Returns pointer of the sched with the least load or NULL if none of the drm_gpu_schedulers are readyh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMthjubj)}(hhh](j)}(hE``struct drm_gpu_scheduler **sched_list`` list of drm_gpu_schedulers h](j)}(h)``struct drm_gpu_scheduler **sched_list``h]j)}(hjh]h%struct drm_gpu_scheduler **sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMqhjubj )}(hhh]h)}(hlist of drm_gpu_schedulersh]hlist of drm_gpu_schedulers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubj)}(hO``unsigned int num_sched_list`` number of drm_gpu_schedulers in the sched_list h](j)}(h``unsigned int num_sched_list``h]j)}(hjh]hunsigned int num_sched_list}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMrhjubj )}(hhh]h)}(h.number of drm_gpu_schedulers in the sched_listh]h.number of drm_gpu_schedulers in the sched_list}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMrhj5ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj4hMrhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMthjubh)}(hdReturns pointer of the sched with the least load or NULL if none of the drm_gpu_schedulers are readyh]hdReturns pointer of the sched with the least load or NULL if none of the drm_gpu_schedulers are ready}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMthjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_init (C function)c.drm_sched_inithNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h\int drm_sched_init (struct drm_gpu_scheduler *sched, const struct drm_sched_init_args *args)h]j>)}(h[int drm_sched_init(struct drm_gpu_scheduler *sched, const struct drm_sched_init_args *args)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_sched_inith]jm)}(hdrm_sched_inith]hdrm_sched_init}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hI(struct drm_gpu_scheduler *sched, const struct drm_sched_init_args *args)h](j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hschedh]hsched}(hj5hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&const struct drm_sched_init_args *argsh](jD)}(hj&h]hconst}(hjNhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjJubjV)}(h h]h }(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubjD)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjJubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubh)}(hhh]jm)}(hdrm_sched_init_argsh]hdrm_sched_init_args}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_sched_initasbuh1hhjJubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjm)}(hargsh]hargs}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hInit a gpu scheduler instanceh]hInit a gpu scheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance ``const struct drm_sched_init_args *args`` scheduler initialization arguments **Description** Return 0 on success, otherwise error code.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj)}(hhh](j)}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hj+h]hstruct drm_gpu_scheduler *sched}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj%ubj )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj"ubj)}(hN``const struct drm_sched_init_args *args`` scheduler initialization arguments h](j)}(h*``const struct drm_sched_init_args *args``h]j)}(hjdh]h&const struct drm_sched_init_args *args}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj^ubj )}(hhh]h)}(h"scheduler initialization argumentsh]h"scheduler initialization arguments}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(h*Return 0 on success, otherwise error code.h]h*Return 0 on success, otherwise error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_sched_fini (C function)c.drm_sched_finihNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h5void drm_sched_fini (struct drm_gpu_scheduler *sched)h]j>)}(h4void drm_sched_fini(struct drm_gpu_scheduler *sched)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMOubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMOubjg)}(hdrm_sched_finih]jm)}(hdrm_sched_finih]hdrm_sched_fini}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMOubj)}(h!(struct drm_gpu_scheduler *sched)h]j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hj?hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_finiasbuh1hhjubjV)}(h h]h }(hj_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hschedh]hsched}(hjzhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMOubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMOubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMOhjhhubj)}(hhh]h)}(hDestroy a gpu schedulerh]hDestroy a gpu scheduler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM;hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX?**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance **Description** Tears down and cleans up the scheduler. This stops submission of new jobs to the hardware through drm_sched_backend_ops.run_job(). Consequently, drm_sched_backend_ops.free_job() will not be called for all jobs still in drm_gpu_scheduler.pending_list. There is no solution for this currently. Thus, it is up to the driver to make sure that: a) drm_sched_fini() is only called after for all submitted jobs drm_sched_backend_ops.free_job() has been called or that b) the jobs for which drm_sched_backend_ops.free_job() has not been called after drm_sched_fini() ran are freed manually. FIXME: Take care of the above problem and prevent this function from leaking the jobs in drm_gpu_scheduler.pending_list under any circumstances.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM?hjubj)}(hhh]j)}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM=hjubj )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM?hjubh)}(h'Tears down and cleans up the scheduler.h]h'Tears down and cleans up the scheduler.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM?hjubh)}(hX+This stops submission of new jobs to the hardware through drm_sched_backend_ops.run_job(). Consequently, drm_sched_backend_ops.free_job() will not be called for all jobs still in drm_gpu_scheduler.pending_list. There is no solution for this currently. Thus, it is up to the driver to make sure that:h]hX+This stops submission of new jobs to the hardware through drm_sched_backend_ops.run_job(). Consequently, drm_sched_backend_ops.free_job() will not be called for all jobs still in drm_gpu_scheduler.pending_list. There is no solution for this currently. Thus, it is up to the driver to make sure that:}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMAhjubj@-)}(ha) drm_sched_fini() is only called after for all submitted jobs drm_sched_backend_ops.free_job() has been called or that b) the jobs for which drm_sched_backend_ops.free_job() has not been called after drm_sched_fini() ran are freed manually. h]j0)}(hhh](jy)}(hudrm_sched_fini() is only called after for all submitted jobs drm_sched_backend_ops.free_job() has been called or thath]h)}(hudrm_sched_fini() is only called after for all submitted jobs drm_sched_backend_ops.free_job() has been called or thath]hudrm_sched_fini() is only called after for all submitted jobs drm_sched_backend_ops.free_job() has been called or that}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMGhj[ubah}(h]h ]h"]h$]h&]uh1jyhjXubjy)}(hwthe jobs for which drm_sched_backend_ops.free_job() has not been called after drm_sched_fini() ran are freed manually. h]h)}(hvthe jobs for which drm_sched_backend_ops.free_job() has not been called after drm_sched_fini() ran are freed manually.h]hvthe jobs for which drm_sched_backend_ops.free_job() has not been called after drm_sched_fini() ran are freed manually.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMIhjtubah}(h]h ]h"]h$]h&]uh1jyhjXubeh}(h]h ]h"]h$]h&]jl3 loweralphajn3hjo3jWuh1j0hjTubah}(h]h ]h"]h$]h&]uh1j?-hjmhMGhjubh)}(hFIXME: Take care of the above problem and prevent this function from leaking the jobs in drm_gpu_scheduler.pending_list under any circumstances.h]hFIXME: Take care of the above problem and prevent this function from leaking the jobs in drm_gpu_scheduler.pending_list under any circumstances.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMLhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_sched_increase_karma (C function)c.drm_sched_increase_karmahNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h9void drm_sched_increase_karma (struct drm_sched_job *bad)h]j>)}(h8void drm_sched_increase_karma(struct drm_sched_job *bad)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chM|ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhM|ubjg)}(hdrm_sched_increase_karmah]jm)}(hdrm_sched_increase_karmah]hdrm_sched_increase_karma}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhM|ubj)}(h(struct drm_sched_job *bad)h]j)}(hstruct drm_sched_job *badh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hj$hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}jjsbc.drm_sched_increase_karmaasbuh1hhjubjV)}(h h]h }(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hbadh]hbad}(hj_hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM|ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhM|ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhM|hjhhubj)}(hhh]h)}(hUpdate sched_entity guilty flagh]hUpdate sched_entity guilty flag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMthjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM|ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_sched_job *bad`` The job guilty of time out **Description** Increment on every hang caused by the 'bad' job. If this exceeds the hang limit of the scheduler then the respective sched entity is marked guilty and jobs from it will not be scheduled furtherh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMxhjubj)}(hhh]j)}(h9``struct drm_sched_job *bad`` The job guilty of time out h](j)}(h``struct drm_sched_job *bad``h]j)}(hjh]hstruct drm_sched_job *bad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMvhjubj )}(hhh]h)}(hThe job guilty of time outh]hThe job guilty of time out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMxhjubh)}(hIncrement on every hang caused by the 'bad' job. If this exceeds the hang limit of the scheduler then the respective sched entity is marked guilty and jobs from it will not be scheduled furtherh]hIncrement on every hang caused by the ‘bad’ job. If this exceeds the hang limit of the scheduler then the respective sched entity is marked guilty and jobs from it will not be scheduled further}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_sched_wqueue_ready (C function)c.drm_sched_wqueue_readyhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h=bool drm_sched_wqueue_ready (struct drm_gpu_scheduler *sched)h]j>)}(h)}(h;void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_sched_wqueue_stoph]jm)}(hdrm_sched_wqueue_stoph]hdrm_sched_wqueue_stop}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h!(struct drm_gpu_scheduler *sched)h]j)}(hstruct drm_gpu_scheduler *schedh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hj%hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jjsbc.drm_sched_wqueue_stopasbuh1hhjubjV)}(h h]h }(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hschedh]hsched}(hj`hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hstop scheduler submissionh]hstop scheduler submission}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance **Description** Stops the scheduler from pulling new jobs from entities. It also stops freeing jobs automatically through drm_sched_backend_ops.free_job().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj)}(hhh]j)}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubj )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(hStops the scheduler from pulling new jobs from entities. It also stops freeing jobs automatically through drm_sched_backend_ops.free_job().h]hStops the scheduler from pulling new jobs from entities. It also stops freeing jobs automatically through drm_sched_backend_ops.free_job().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_sched_wqueue_start (C function)c.drm_sched_wqueue_starthNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h=void drm_sched_wqueue_start (struct drm_gpu_scheduler *sched)h]j>)}(hah ](jjeh"]h$]h&]jj)jhuh1j7hjYhMhj@hhubj)}(hhh]h)}(hstart scheduler submissionh]hstart scheduler submission}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1j2hhhjhNhNubj)}(hX **Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance **Description** Restarts the scheduler after drm_sched_wqueue_stop() has stopped it. This function is not necessary for 'conventional' startup. The scheduler is fully operational after drm_sched_init() succeeded.h](h)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj'ubj)}(hhh]j)}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](j)}(h#``struct drm_gpu_scheduler *sched``h]j)}(hjLh]hstruct drm_gpu_scheduler *sched}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhjFubj )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj'ubh)}(hDRestarts the scheduler after drm_sched_wqueue_stop() has stopped it.h]hDRestarts the scheduler after drm_sched_wqueue_stop() has stopped it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj'ubh)}(hThis function is not necessary for 'conventional' startup. The scheduler is fully operational after drm_sched_init() succeeded.h]hThis function is not necessary for ‘conventional’ startup. The scheduler is fully operational after drm_sched_init() succeeded.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:571: ./drivers/gpu/drm/scheduler/sched_main.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_sched_entity_init (C function)c.drm_sched_entity_inithNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hint drm_sched_entity_init (struct drm_sched_entity *entity, enum drm_sched_priority priority, struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list, atomic_t *guilty)h]j>)}(hint drm_sched_entity_init(struct drm_sched_entity *entity, enum drm_sched_priority priority, struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list, atomic_t *guilty)h](jc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK:ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhK:ubjg)}(hdrm_sched_entity_inith]jm)}(hdrm_sched_entity_inith]hdrm_sched_entity_init}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhK:ubj)}(h(struct drm_sched_entity *entity, enum drm_sched_priority priority, struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list, atomic_t *guilty)h](j)}(hstruct drm_sched_entity *entityh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_sched_entityh]hdrm_sched_entity}(hj6hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)}jjsbc.drm_sched_entity_initasbuh1hhjubjV)}(h h]h }(hjVhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hentityh]hentity}(hjqhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h enum drm_sched_priority priorityh](jD)}(hjGh]henum}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_sched_priorityh]hdrm_sched_priority}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jRc.drm_sched_entity_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjm)}(hpriorityh]hpriority}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h%struct drm_gpu_scheduler **sched_listh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jRc.drm_sched_entity_initasbuh1hhjubjV)}(h h]h }(hj)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h sched_listh]h sched_list}(hjQhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int num_sched_listh](jc)}(hunsignedh]hunsigned}(hjjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjfubjV)}(h h]h }(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubjc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjfubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjfubjm)}(hnum_sched_listh]hnum_sched_list}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hatomic_t *guiltyh](h)}(hhh]jm)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jRc.drm_sched_entity_initasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hguiltyh]hguilty}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK:ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhK:ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhK:hjhhubj)}(hhh]h)}(h?Init a context entity used by scheduler when submit to HW ring.h]h?Init a context entity used by scheduler when submit to HW ring.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK$hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1j2hhhjhNhNubj)}(hXt**Parameters** ``struct drm_sched_entity *entity`` scheduler entity to init ``enum drm_sched_priority priority`` priority of the entity ``struct drm_gpu_scheduler **sched_list`` the list of drm scheds on which jobs from this entity can be submitted ``unsigned int num_sched_list`` number of drm sched in sched_list ``atomic_t *guilty`` atomic_t set to 1 when a job on this queue is found to be guilty causing a timeout **Description** Note that the :c:type:`sched_list` must have at least one element to schedule the entity. For changing **priority** later on at runtime see drm_sched_entity_set_priority(). For changing the set of schedulers **sched_list** at runtime see drm_sched_entity_modify_sched(). An entity is cleaned up by calling drm_sched_entity_fini(). See also drm_sched_entity_destroy(). Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK(hj=ubj)}(hhh](j)}(h=``struct drm_sched_entity *entity`` scheduler entity to init h](j)}(h#``struct drm_sched_entity *entity``h]j)}(hjbh]hstruct drm_sched_entity *entity}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK'hj\ubj )}(hhh]h)}(hscheduler entity to inith]hscheduler entity to init}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhK'hjxubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhK'hjYubj)}(h<``enum drm_sched_priority priority`` priority of the entity h](j)}(h$``enum drm_sched_priority priority``h]j)}(hjh]h enum drm_sched_priority priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK(hjubj )}(hhh]h)}(hpriority of the entityh]hpriority of the entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK(hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK(hjYubj)}(hq``struct drm_gpu_scheduler **sched_list`` the list of drm scheds on which jobs from this entity can be submitted h](j)}(h)``struct drm_gpu_scheduler **sched_list``h]j)}(hjh]h%struct drm_gpu_scheduler **sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK*hjubj )}(hhh]h)}(hFthe list of drm scheds on which jobs from this entity can be submittedh]hFthe list of drm scheds on which jobs from this entity can be submitted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK)hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK*hjYubj)}(hB``unsigned int num_sched_list`` number of drm sched in sched_list h](j)}(h``unsigned int num_sched_list``h]j)}(hjh]hunsigned int num_sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK+hjubj )}(hhh]h)}(h!number of drm sched in sched_listh]h!number of drm sched in sched_list}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hK+hj$ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj#hK+hjYubj)}(hh``atomic_t *guilty`` atomic_t set to 1 when a job on this queue is found to be guilty causing a timeout h](j)}(h``atomic_t *guilty``h]j)}(hjGh]hatomic_t *guilty}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK-hjAubj )}(hhh]h)}(hRatomic_t set to 1 when a job on this queue is found to be guilty causing a timeouth]hRatomic_t set to 1 when a job on this queue is found to be guilty causing a timeout}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK,hj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hK-hjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK/hj=ubh)}(hYNote that the :c:type:`sched_list` must have at least one element to schedule the entity.h](hNote that the }(hjhhhNhNubh)}(h:c:type:`sched_list`h]j)}(hjh]h sched_list}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj* refdomainjreftypetype refexplicitrefwarnjj0j3 sched_listuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK/hjubh7 must have at least one element to schedule the entity.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK/hj=ubh)}(hFor changing **priority** later on at runtime see drm_sched_entity_set_priority(). For changing the set of schedulers **sched_list** at runtime see drm_sched_entity_modify_sched().h](h For changing }(hjhhhNhNubj)}(h **priority**h]hpriority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh] later on at runtime see drm_sched_entity_set_priority(). For changing the set of schedulers }(hjhhhNhNubj)}(h**sched_list**h]h sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 at runtime see drm_sched_entity_modify_sched().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK1hj=ubh)}(h`An entity is cleaned up by calling drm_sched_entity_fini(). See also drm_sched_entity_destroy().h]h`An entity is cleaned up by calling drm_sched_entity_fini(). See also drm_sched_entity_destroy().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK5hj=ubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK8hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_sched_entity_modify_sched (C function)c.drm_sched_entity_modify_schedhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hvoid drm_sched_entity_modify_sched (struct drm_sched_entity *entity, struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list)h]j>)}(hvoid drm_sched_entity_modify_sched(struct drm_sched_entity *entity, struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list)h](jc)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj8hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKubjV)}(h h]h }(hjKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj8hhhjJhKubjg)}(hdrm_sched_entity_modify_schedh]jm)}(hdrm_sched_entity_modify_schedh]hdrm_sched_entity_modify_sched}(hj]hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj8hhhjJhKubj)}(he(struct drm_sched_entity *entity, struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list)h](j)}(hstruct drm_sched_entity *entityh](jD)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubh)}(hhh]jm)}(hdrm_sched_entityh]hdrm_sched_entity}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj_sbc.drm_sched_entity_modify_schedasbuh1hhjuubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjm)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(h%struct drm_gpu_scheduler **sched_listh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_sched_entity_modify_schedasbuh1hhjubjV)}(h h]h }(hj'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h sched_listh]h sched_list}(hjOhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hunsigned int num_sched_listh](jc)}(hunsignedh]hunsigned}(hjhhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjdubjV)}(h h]h }(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdubjc)}(hinth]hint}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjdubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdubjm)}(hnum_sched_listh]hnum_sched_list}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhjJhKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj4hhhjJhKubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1j7hjJhKhj1hhubj)}(hhh]h)}(hModify sched of an entityh]hModify sched of an entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKvhjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_sched_entity *entity`` scheduler entity to init ``struct drm_gpu_scheduler **sched_list`` the list of new drm scheds which will replace existing entity->sched_list ``unsigned int num_sched_list`` number of drm sched in sched_list **Description** Note that this must be called under the same common lock for **entity** as drm_sched_job_arm() and drm_sched_entity_push_job(), or the driver needs to guarantee through some other means that this is never called while new jobs can be pushed to **entity**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKzhjubj)}(hhh](j)}(h=``struct drm_sched_entity *entity`` scheduler entity to init h](j)}(h#``struct drm_sched_entity *entity``h]j)}(hj h]hstruct drm_sched_entity *entity}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKwhjubj )}(hhh]h)}(hscheduler entity to inith]hscheduler entity to init}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKwhj!ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKwhjubj)}(ht``struct drm_gpu_scheduler **sched_list`` the list of new drm scheds which will replace existing entity->sched_list h](j)}(h)``struct drm_gpu_scheduler **sched_list``h]j)}(hjDh]h%struct drm_gpu_scheduler **sched_list}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKyhj>ubj )}(hhh]h)}(hIthe list of new drm scheds which will replace existing entity->sched_listh]hIthe list of new drm scheds which will replace existing entity->sched_list}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKxhjZubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhKyhjubj)}(hB``unsigned int num_sched_list`` number of drm sched in sched_list h](j)}(h``unsigned int num_sched_list``h]j)}(hj~h]hunsigned int num_sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKzhjxubj )}(hhh]h)}(h!number of drm sched in sched_listh]h!number of drm sched in sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKzhjubah}(h]h ]h"]h$]h&]uh1j hjxubeh}(h]h ]h"]h$]h&]uh1jhjhKzhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK|hjubh)}(hNote that this must be called under the same common lock for **entity** as drm_sched_job_arm() and drm_sched_entity_push_job(), or the driver needs to guarantee through some other means that this is never called while new jobs can be pushed to **entity**.h](h=Note that this must be called under the same common lock for }(hjhhhNhNubj)}(h **entity**h]hentity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh as drm_sched_job_arm() and drm_sched_entity_push_job(), or the driver needs to guarantee through some other means that this is never called while new jobs can be pushed to }(hjhhhNhNubj)}(h **entity**h]hentity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chK|hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_sched_entity_error (C function)c.drm_sched_entity_errorhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h)}(h;int drm_sched_entity_error(struct drm_sched_entity *entity)h](jc)}(hinth]hint}(hj"hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKubjV)}(h h]h }(hj1hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhj0hKubjg)}(hdrm_sched_entity_errorh]jm)}(hdrm_sched_entity_errorh]hdrm_sched_entity_error}(hjChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhj0hKubj)}(h!(struct drm_sched_entity *entity)h]j)}(hstruct drm_sched_entity *entityh](jD)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj[ubjV)}(h h]h }(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubh)}(hhh]jm)}(hdrm_sched_entityh]hdrm_sched_entity}(hj}hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjEsbc.drm_sched_entity_errorasbuh1hhj[ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjm)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj0hKubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhj0hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hj0hKhjhhubj)}(hhh]h)}(h"return error of last scheduled jobh]h"return error of last scheduled job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_sched_entity *entity`` scheduler entity to check **Description** Opportunistically return the error of the last scheduled job. Result can change any time when new jobs are pushed to the hw.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubj)}(hhh]j)}(h>``struct drm_sched_entity *entity`` scheduler entity to check h](j)}(h#``struct drm_sched_entity *entity``h]j)}(hj#h]hstruct drm_sched_entity *entity}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubj )}(hhh]h)}(hscheduler entity to checkh]hscheduler entity to check}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubh)}(h|Opportunistically return the error of the last scheduled job. Result can change any time when new jobs are pushed to the hw.h]h|Opportunistically return the error of the last scheduled job. Result can change any time when new jobs are pushed to the hw.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.#drm_sched_entity_flush (C function)c.drm_sched_entity_flushhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hKlong drm_sched_entity_flush (struct drm_sched_entity *entity, long timeout)h]j>)}(hJlong drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)h](jc)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_sched_entity_flushh]jm)}(hdrm_sched_entity_flushh]hdrm_sched_entity_flush}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(h/(struct drm_sched_entity *entity, long timeout)h](j)}(hstruct drm_sched_entity *entityh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_sched_entityh]hdrm_sched_entity}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_entity_flushasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hentityh]hentity}(hj9hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h long timeouth](jc)}(hlongh]hlong}(hjRhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjNubjV)}(h h]h }(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjNubjm)}(htimeouth]htimeout}(hjnhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hFlush a context entityh]hFlush a context entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_sched_entity *entity`` scheduler entity ``long timeout`` time to wait in for Q to become empty in jiffies. **Description** Splitting drm_sched_entity_fini() into two functions, The first one does the waiting, removes the entity from the runqueue and returns an error when the process was killed. Returns the remaining time in jiffies left from the input timeouth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubj)}(hhh](j)}(h5``struct drm_sched_entity *entity`` scheduler entity h](j)}(h#``struct drm_sched_entity *entity``h]j)}(hjh]hstruct drm_sched_entity *entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM hjubj )}(hhh]h)}(hscheduler entityh]hscheduler entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hC``long timeout`` time to wait in for Q to become empty in jiffies. h](j)}(h``long timeout``h]j)}(hjh]h long timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM hj ubj )}(hhh]h)}(h1time to wait in for Q to become empty in jiffies.h]h1time to wait in for Q to become empty in jiffies.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hM hj(ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubh)}(hSplitting drm_sched_entity_fini() into two functions, The first one does the waiting, removes the entity from the runqueue and returns an error when the process was killed.h]hSplitting drm_sched_entity_fini() into two functions, The first one does the waiting, removes the entity from the runqueue and returns an error when the process was killed.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubh)}(hAReturns the remaining time in jiffies left from the input timeouth]hAReturns the remaining time in jiffies left from the input timeout}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j."drm_sched_entity_fini (C function)c.drm_sched_entity_finihNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h)}(h;void drm_sched_entity_fini(struct drm_sched_entity *entity)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMCubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMCubjg)}(hdrm_sched_entity_finih]jm)}(hdrm_sched_entity_finih]hdrm_sched_entity_fini}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMCubj)}(h!(struct drm_sched_entity *entity)h]j)}(hstruct drm_sched_entity *entityh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_sched_entityh]hdrm_sched_entity}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.drm_sched_entity_finiasbuh1hhjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hentityh]hentity}(hj7hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMCubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMCubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMChjhhubj)}(hhh]h)}(hDestroy a context entityh]hDestroy a context entity}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM9hj^hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1j2hhhjhNhNubj)}(hX**Parameters** ``struct drm_sched_entity *entity`` scheduler entity **Description** Cleanups up **entity** which has been initialized by drm_sched_entity_init(). If there are potentially job still in flight or getting newly queued drm_sched_entity_flush() must be called first. This function then goes over the entity and signals all jobs with an error code if the process was killed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM=hj}ubj)}(hhh]j)}(h5``struct drm_sched_entity *entity`` scheduler entity h](j)}(h#``struct drm_sched_entity *entity``h]j)}(hjh]hstruct drm_sched_entity *entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM;hjubj )}(hhh]h)}(hscheduler entityh]hscheduler entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhj}ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM=hj}ubh)}(hMCleanups up **entity** which has been initialized by drm_sched_entity_init().h](h Cleanups up }(hjhhhNhNubj)}(h **entity**h]hentity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh7 which has been initialized by drm_sched_entity_init().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM=hj}ubh)}(hIf there are potentially job still in flight or getting newly queued drm_sched_entity_flush() must be called first. This function then goes over the entity and signals all jobs with an error code if the process was killed.h]hIf there are potentially job still in flight or getting newly queued drm_sched_entity_flush() must be called first. This function then goes over the entity and signals all jobs with an error code if the process was killed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM?hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.%drm_sched_entity_destroy (C function)c.drm_sched_entity_destroyhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h?void drm_sched_entity_destroy (struct drm_sched_entity *entity)h]j>)}(h>void drm_sched_entity_destroy(struct drm_sched_entity *entity)h](jc)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj?hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM^ubjV)}(h h]h }(hjRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?hhhjQhM^ubjg)}(hdrm_sched_entity_destroyh]jm)}(hdrm_sched_entity_destroyh]hdrm_sched_entity_destroy}(hjdhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jfhj?hhhjQhM^ubj)}(h!(struct drm_sched_entity *entity)h]j)}(hstruct drm_sched_entity *entityh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj|ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj|ubh)}(hhh]jm)}(hdrm_sched_entityh]hdrm_sched_entity}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjfsbc.drm_sched_entity_destroyasbuh1hhj|ubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj|ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjm)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubah}(h]h ]h"]h$]h&]jjuh1jhj?hhhjQhM^ubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhj;hhhjQhM^ubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1j7hjQhM^hj8hhubj)}(hhh]h)}(hDestroy a context entityh]hDestroy a context entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMXhjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjQhM^ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_sched_entity *entity`` scheduler entity **Description** Calls drm_sched_entity_flush() and drm_sched_entity_fini() as a convenience wrapper.h](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM\hjubj)}(hhh]j)}(h5``struct drm_sched_entity *entity`` scheduler entity h](j)}(h#``struct drm_sched_entity *entity``h]j)}(hjDh]hstruct drm_sched_entity *entity}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMYhj>ubj )}(hhh]h)}(hscheduler entityh]hscheduler entity}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMYhjZubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMYhj;ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM[hjubh)}(hTCalls drm_sched_entity_flush() and drm_sched_entity_fini() as a convenience wrapper.h]hTCalls drm_sched_entity_flush() and drm_sched_entity_fini() as a convenience wrapper.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.*drm_sched_entity_set_priority (C function)c.drm_sched_entity_set_priorityhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(hfvoid drm_sched_entity_set_priority (struct drm_sched_entity *entity, enum drm_sched_priority priority)h]j>)}(hevoid drm_sched_entity_set_priority(struct drm_sched_entity *entity, enum drm_sched_priority priority)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMubjg)}(hdrm_sched_entity_set_priorityh]jm)}(hdrm_sched_entity_set_priorityh]hdrm_sched_entity_set_priority}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMubj)}(hC(struct drm_sched_entity *entity, enum drm_sched_priority priority)h](j)}(hstruct drm_sched_entity *entityh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(hdrm_sched_entityh]hdrm_sched_entity}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j)}jjsbc.drm_sched_entity_set_priorityasbuh1hhjubjV)}(h h]h }(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(hentityh]hentity}(hjZhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h enum drm_sched_priority priorityh](jD)}(hjGh]henum}(hjshhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjoubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubh)}(hhh]jm)}(hdrm_sched_priorityh]hdrm_sched_priority}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j;c.drm_sched_entity_set_priorityasbuh1hhjoubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjoubjm)}(hpriorityh]hpriority}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMhjhhubj)}(hhh]h)}(hSets priority of the entityh]hSets priority of the entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(h**Parameters** ``struct drm_sched_entity *entity`` scheduler entity ``enum drm_sched_priority priority`` scheduler priority **Description** Update the priority of runqueues used for the entity.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubj)}(hhh](j)}(h5``struct drm_sched_entity *entity`` scheduler entity h](j)}(h#``struct drm_sched_entity *entity``h]j)}(hj(h]hstruct drm_sched_entity *entity}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhj"ubj )}(hhh]h)}(hscheduler entityh]hscheduler entity}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj>ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h8``enum drm_sched_priority priority`` scheduler priority h](j)}(h$``enum drm_sched_priority priority``h]j)}(hjah]h enum drm_sched_priority priority}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhj[ubj )}(hhh]h)}(hscheduler priorityh]hscheduler priority}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubh)}(h5Update the priority of runqueues used for the entity.h]h5Update the priority of runqueues used for the entity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj")}(hhh]h}(h]h ]h"]h$]h&]entries](j.&drm_sched_entity_push_job (C function)c.drm_sched_entity_push_jobhNtauh1j!hjhhhNhNubj3)}(hhh](j8)}(h@void drm_sched_entity_push_job (struct drm_sched_job *sched_job)h]j>)}(h?void drm_sched_entity_push_job(struct drm_sched_job *sched_job)h](jc)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMGubjV)}(h h]h }(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhjhMGubjg)}(hdrm_sched_entity_push_jobh]jm)}(hdrm_sched_entity_push_jobh]hdrm_sched_entity_push_job}(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubah}(h]h ](jjeh"]h$]h&]jjuh1jfhjhhhjhMGubj)}(h!(struct drm_sched_job *sched_job)h]j)}(hstruct drm_sched_job *sched_jobh](jD)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubjV)}(h h]h }(hj+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubh)}(hhh]jm)}(h drm_sched_jobh]h drm_sched_job}(hj<hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j)}jjsbc.drm_sched_entity_push_jobasbuh1hhjubjV)}(h h]h }(hj\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjm)}(h sched_jobh]h sched_job}(hjwhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMGubeh}(h]h ]h"]h$]h&]jjjuh1j=jjhjhhhjhMGubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j7hjhMGhjhhubj)}(hhh]h)}(h&Submit a job to the entity's job queueh]h(Submit a job to the entity’s job queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j2hhhjhNhNubj)}(hXM**Parameters** ``struct drm_sched_job *sched_job`` job to submit **Note** To guarantee that the order of insertion to queue matches the job's fence sequence number this function should be called with drm_sched_job_arm() under common lock for the struct drm_sched_entity that was set up for **sched_job** in drm_sched_job_init().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMChjubj)}(hhh]j)}(h2``struct drm_sched_job *sched_job`` job to submit h](j)}(h#``struct drm_sched_job *sched_job``h]j)}(hjh]hstruct drm_sched_job *sched_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chM@hjubj )}(hhh]h)}(h job to submith]h job to submit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMBhjubh)}(hTo guarantee that the order of insertion to queue matches the job's fence sequence number this function should be called with drm_sched_job_arm() under common lock for the struct drm_sched_entity that was set up for **sched_job** in drm_sched_job_init().h](hTo guarantee that the order of insertion to queue matches the job’s fence sequence number this function should be called with drm_sched_job_arm() under common lock for the struct drm_sched_entity that was set up for }(hj3hhhNhNubj)}(h **sched_job**h]h sched_job}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh in drm_sched_job_init().}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:574: ./drivers/gpu/drm/scheduler/sched_entity.chMBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]scheduler-function-referencesah ]h"]scheduler function referencesah$]h&]uh1hhjAhhhhhM6ubeh}(h] gpu-schedulerah ]h"] gpu schedulerah$]h&]uh1hhhhhhhhM'ubeh}(h]drm-memory-managementah ]h"]drm memory managementah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}(j=]j2aj&]j&ajz3]jp3ajF]jFaunameids}(jpjmj#yj yj j jjj9Ej6Ejhjhjyjyj6zj3zjMzjJzjF{jC{j{j{j|j|j}j}j}j}j}j}jjj-j*j;j;jkjkj.zj+zjCj@jj=jjj=j:j5j2jjj>j;jjjjj&j&overviewNjqjnj&j&jg&j&jf&jc&j3j}3j36jz3j26j/6j.7j+7j^&j[&jZ>jW>jR>jO>jFjFj ljFj ljljKjKj MjMjMjMj>j;jhjejjj`j]u nametypes}(jpj#yj jj9Ejhjyj6zjMzjF{j{j|j}j}j}jj-j;jkj.zjCjjj=j5jj>jjj&jjqj&jg&jf&j3j36j26j.7j^&jZ>jR>jFj lj ljKj MjMj>jhjj`uh}(jmhj yhj0j9j jjjjFjKjUjZjj j j jjj6Ejjjj jjMjRjDjIjjjXj]j'j,jjj=jBj j j #j%#j&j&j'j(j)j)jt+jy+j,j,j+.j0.j/j/j1j1jz3j3jh6jm6j8j8j.;j3;j<j<j>j>jBjBjhjj>jAjAjBjBj%Dj*DjGKjLKjMjMjlOjqOjQjQj SjSj/Vj4Vj\YjaYj\j\j^j^j ajaj"ej'ejgjgjjjjj`ljeljrj rjCtjHtjvjvjxjxj`{je{jk}jp}jj#jEjJjjjjjjj/j4jϋjԋjjjkjpjjj{jjjj jj3j8jjjjjjj1j6jjjZj_j޳jjjjhjmjj¾jfjkjjjijnjjjjjjjjj`jejjjQjVjjj&j+j j%jjjjjjj<jAjcjhjjj/j4jjjjj8 j= jjjjjjjjj j j#j#jW>jl&jO>j}&j&j&jD)jI)j*j*j,j,j.j.j%1j*1j4j4j9j9jV<j[<jFj]>jz>j>j@j@j"Bj'BjCjDjFjFjljFjKj1JjMjKjMjMjMjMjPjPjURjZRjSjSjUjUjXjXjk[jp[j]j]jpajuajbjbjejejhjhjjjjj;jljljljnjnj>qjCqjrjrjHtjMtjaujfujkvjpvjwjwjjzjozj{j{jk}jp}jjjjjjƄjejAjjRjjj]jjj‰jljqjj jjjGjLjBjGjݛjj>jCjBjGjOjTjjjcjhjjjjjkjpjZj_jjjjjwj|jڽj߽j?jDjbjgj!j&j\jaj?jDjjjjjjj=jBjjj>jCjjj/j4jjjjjjj6j;jjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages](hsystem_message)}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j-alevelKtypeINFOsourcehlineMuh1jhj'hhhhhMubj)}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehlineM*uh1jhjRhhhhhM*ubetransform_messages](j)}(hhh]h)}(hhh]h:Hyperlink target "prime-buffer-sharing" is not referenced.}hj;sbah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineMuh1jubj)}(hhh]h)}(hhh]h/Hyperlink target "drm-gpuvm" is not referenced.}hjUsbah}(h]h ]h"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineMuh1jubj)}(hhh]h)}(hhh]h7Hyperlink target "drm-gpuvm-locking" is not referenced.}hjosbah}(h]h ]h"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineMuh1jubj)}(hhh]h)}(hhh]h6Hyperlink target "drm-sync-objects" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineM uh1jube transformerN include_log] decorationNhhub.