<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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/pt_BR/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&]refidid6uh1hhhhhh8/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&]uh1hhhhKhhhhubhtopic)}(h Contents h](h)}(hContentsh]hContents}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh bullet_list)}(hhh]h list_item)}(hhh](h)}(hhh]h reference)}(hhh]hDRM Memory Management}(hjhhhNhNubah}(h]hah ]h"]h$]h&]refiddrm-memory-managementuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubj)}(hhh](j)}(hhh](h)}(hhh]j)}(hhh]h#The Translation Table Manager (TTM)}(hj:hhhNhNubah}(h]id7ah ]h"]h$]h&]refid!the-translation-table-manager-ttmuh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhj4ubj)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]hTTM device object reference}(hjYhhhNhNubah}(h]id8ah ]h"]h$]h&]refidttm-device-object-referenceuh1jhjVubah}(h]h ]h"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&]uh1jhjPubj)}(hhh]h)}(hhh]j)}(hhh]h TTM resource placement reference}(hj{hhhNhNubah}(h]id9ah ]h"]h$]h&]refid ttm-resource-placement-referenceuh1jhjxubah}(h]h ]h"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&]uh1jhjPubj)}(hhh]h)}(hhh]j)}(hhh]hTTM resource object reference}(hjhhhNhNubah}(h]id10ah ]h"]h$]h&]refidttm-resource-object-referenceuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjPubj)}(hhh]h)}(hhh]j)}(hhh]hTTM TT object reference}(hjhhhNhNubah}(h]id11ah ]h"]h$]h&]refidttm-tt-object-referenceuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjPubj)}(hhh]h)}(hhh]j)}(hhh]hTTM page pool reference}(hjhhhNhNubah}(h]id12ah ]h"]h$]h&]refidttm-page-pool-referenceuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh](h)}(hhh]j)}(hhh]h$The Graphics Execution Manager (GEM)}(hjhhhNhNubah}(h]id13ah ]h"]h$]h&]refid"the-graphics-execution-manager-gemuh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj ubj)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]hGEM Initialization}(hj.hhhNhNubah}(h]id14ah ]h"]h$]h&]refidgem-initializationuh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]hGEM Objects Creation}(hjPhhhNhNubah}(h]id15ah ]h"]h$]h&]refidgem-objects-creationuh1jhjMubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]hGEM Objects Lifetime}(hjrhhhNhNubah}(h]id16ah ]h"]h$]h&]refidgem-objects-lifetimeuh1jhjoubah}(h]h ]h"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]hGEM Objects Naming}(hjhhhNhNubah}(h]id17ah ]h"]h$]h&]refidgem-objects-naminguh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]hGEM Objects Mapping}(hjhhhNhNubah}(h]id18ah ]h"]h$]h&]refidgem-objects-mappinguh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]hMemory Coherency}(hjhhhNhNubah}(h]id19ah ]h"]h$]h&]refidmemory-coherencyuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]hCommand Execution}(hjhhhNhNubah}(h]id20ah ]h"]h$]h&]refidcommand-executionuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]hGEM Function Reference}(hjhhhNhNubah}(h]id21ah ]h"]h$]h&]refidgem-function-referenceuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]h"GEM DMA Helper Functions Reference}(hj>hhhNhNubah}(h]id22ah ]h"]h$]h&]refid"gem-dma-helper-functions-referenceuh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]h#GEM SHMEM Helper Function Reference}(hj`hhhNhNubah}(h]id23ah ]h"]h$]h&]refid#gem-shmem-helper-function-referenceuh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]h#GEM VRAM Helper Functions Reference}(hjhhhNhNubah}(h]id24ah ]h"]h$]h&]refid#gem-vram-helper-functions-referenceuh1jhjubah}(h]h ]h"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&]uh1jhj%ubj)}(hhh]h)}(hhh]j)}(hhh]h"GEM TTM Helper Functions Reference}(hjhhhNhNubah}(h]id25ah ]h"]h$]h&]refid"gem-ttm-helper-functions-referenceuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh]h)}(hhh]j)}(hhh]hVMA Offset Manager}(hjhhhNhNubah}(h]id26ah ]h"]h$]h&]refidvma-offset-manageruh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh](h)}(hhh]j)}(hhh]hPRIME Buffer Sharing}(hjhhhNhNubah}(h]id27ah ]h"]h$]h&]refidprime-buffer-sharinguh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubj)}(hhh](j)}(hhh](h)}(hhh]j)}(hhh]hOverview and Lifetime Rules}(hjhhhNhNubah}(h]id28ah ]h"]h$]h&]refidoverview-and-lifetime-rulesuh1jhjubah}(h]h ]h"]h$]h&]uh1hhj ubj)}(hhh]j)}(hhh]h)}(hhh]j)}(hhh]h"Reference Counting for GEM Drivers}(hj2hhhNhNubah}(h]id29ah ]h"]h$]h&]refid"reference-counting-for-gem-driversuh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh](h)}(hhh]j)}(hhh]hPRIME Helper Functions}(hj`hhhNhNubah}(h]id30ah ]h"]h$]h&]refidprime-helper-functionsuh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhjZubj)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]hExporting buffers}(hjhhhNhNubah}(h]id31ah ]h"]h$]h&]refidexporting-buffersuh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&]uh1jhjvubj)}(hhh]h)}(hhh]j)}(hhh]hImporting buffers}(hjhhhNhNubah}(h]id32ah ]h"]h$]h&]refidimporting-buffersuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hhh]j)}(hhh]hPRIME Function References}(hjhhhNhNubah}(h]id33ah ]h"]h$]h&]refidprime-function-referencesuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh](h)}(hhh]j)}(hhh]hDRM MM Range Allocator}(hjhhhNhNubah}(h]id34ah ]h"]h$]h&]refiddrm-mm-range-allocatoruh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubj)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]hOverview}(hjhhhNhNubah}(h]id35ah ]h"]h$]h&]refidoverviewuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hhh]j)}(hhh]hLRU Scan/Eviction Support}(hj>hhhNhNubah}(h]id36ah ]h"]h$]h&]refidlru-scan-eviction-supportuh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hhh]j)}(hhh]h*DRM MM Range Allocator Function References}(hj`hhhNhNubah}(h]id37ah ]h"]h$]h&]refid*drm-mm-range-allocator-function-referencesuh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh](h)}(hhh]j)}(hhh]h DRM GPUVM}(hjhhhNhNubah}(h]id38ah ]h"]h$]h&]refid drm-gpuvmuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubj)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]hOverview}(hjhhhNhNubah}(h]id39ah ]h"]h$]h&]refidid3uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hhh]j)}(hhh]hSplit and Merge}(hjhhhNhNubah}(h]id40ah ]h"]h$]h&]refidsplit-and-mergeuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hhh]j)}(hhh]hLocking}(hjhhhNhNubah}(h]id41ah ]h"]h$]h&]refidlockinguh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hhh]j)}(hhh]hExamples}(hjhhhNhNubah}(h]id42ah ]h"]h$]h&]refidexamplesuh1jhjubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hhh]j)}(hhh]hDRM GPUVM Function References}(hj5hhhNhNubah}(h]id43ah ]h"]h$]h&]refiddrm-gpuvm-function-referencesuh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh](h)}(hhh]j)}(hhh]hDRM Buddy Allocator}(hjchhhNhNubah}(h]id44ah ]h"]h$]h&]refiddrm-buddy-allocatoruh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhj]ubj)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]h/Buddy Allocator Function References (GPU buddy)}(hjhhhNhNubah}(h]id45ah ]h"]h$]h&]refid-buddy-allocator-function-references-gpu-buddyuh1jhjubah}(h]h ]h"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&]uh1jhjyubj)}(hhh]h)}(hhh]j)}(hhh]h.DRM Buddy Specific Logging Function References}(hjhhhNhNubah}(h]id46ah ]h"]h$]h&]refid.drm-buddy-specific-logging-function-referencesuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh]h)}(hhh]j)}(hhh]h'DRM Cache Handling and Fast WC memcpy()}(hjhhhNhNubah}(h]id47ah ]h"]h$]h&]refid%drm-cache-handling-and-fast-wc-memcpyuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh](h)}(hhh]j)}(hhh]hDRM Sync Objects}(hjhhhNhNubah}(h]id48ah ]h"]h$]h&]refiddrm-sync-objectsuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubj)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]hHost-side wait on syncobjs}(hjhhhNhNubah}(h]id49ah ]h"]h$]h&]refidhost-side-wait-on-syncobjsuh1jhjubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hhh]j)}(hhh]hImport/export of syncobjs}(hj5hhhNhNubah}(h]id50ah ]h"]h$]h&]refidimport-export-of-syncobjsuh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hhh]j)}(hhh]h5Import/export of timeline points in timeline syncobjs}(hjWhhhNhNubah}(h]id51ah ]h"]h$]h&]refid5import-export-of-timeline-points-in-timeline-syncobjsuh1jhjTubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh]h)}(hhh]j)}(hhh]hDRM Execution context}(hjhhhNhNubah}(h]id52ah ]h"]h$]h&]refiddrm-execution-contextuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhj1ubj)}(hhh](h)}(hhh]j)}(hhh]h GPU Scheduler}(hjhhhNhNubah}(h]id53ah ]h"]h$]h&]refid gpu-scheduleruh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubj)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]hOverview}(hjhhhNhNubah}(h]id54ah ]h"]h$]h&]refidid5uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hhh]j)}(hhh]h Flow Control}(hjhhhNhNubah}(h]id55ah ]h"]h$]h&]refid flow-controluh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hhh]j)}(hhh]hScheduler Function References}(hj hhhNhNubah}(h]id56ah ]h"]h$]h&]refidscheduler-function-referencesuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hhhhhNhNubeh}(h]contentsah ]contentsah"]contentsah$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h#The Translation Table Manager (TTM)h]h#The Translation Table Manager (TTM)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]hjCuh1hhjMhhhhhKubh)}(hFTTM is a memory manager for accelerator devices with dedicated memory.h]hFTTM is a memory manager for accelerator devices with dedicated memory.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:33: ./drivers/gpu/drm/ttm/ttm_module.chK+hjMhhubh)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:33: ./drivers/gpu/drm/ttm/ttm_module.chK-hjMhhubh)}(h6TODO: Add more design background and information here.h]h6TODO: Add more design background and information here.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:33: ./drivers/gpu/drm/ttm/ttm_module.chK1hjMhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlettm_caching (C enum) c.ttm_cachinghNtauh1jhjMhhhNhNubhdesc)}(hhh](hdesc_signature)}(h ttm_cachingh]hdesc_signature_line)}(henum ttm_cachingh](hdesc_sig_keyword)}(henumh]henum}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:36: ./include/drm/ttm/ttm_caching.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(h ttm_cachingh]h desc_sig_name)}(hjh]h ttm_caching}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(h&CPU caching and BUS snooping behavior.h]h&CPU caching and BUS snooping behavior.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:36: ./include/drm/ttm/ttm_caching.hhK!hj hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](cenumeh"]h$]h&]domainj! objtypej" desctypej" noindex noindexentrynocontentsentryuh1jhhhjMhNhNubh 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)}(hj4 h]h Constants}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2 ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:36: ./include/drm/ttm/ttm_caching.hhK%hj. ubhdefinition_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)}(hj[ h]h ttm_uncached}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjY ubah}(h]h ]h"]h$]h&]uh1jW hX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:36: ./include/drm/ttm/ttm_caching.hhK)hjS ubh 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.}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:36: ./include/drm/ttm/ttm_caching.hhK(hju ubah}(h]h ]h"]h$]h&]uh1js hjS ubeh}(h]h ]h"]h$]h&]uh1jQ hjr hK)hjN ubjR )}(h\``ttm_write_combined`` Don't cache read accesses, but allow at least writes to be combined. h](jX )}(h``ttm_write_combined``h]j^ )}(hj h]httm_write_combined}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:36: ./include/drm/ttm/ttm_caching.hhK-hj ubjt )}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:36: ./include/drm/ttm/ttm_caching.hhK,hj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hK-hjN ubjR )}(hm``ttm_cached`` Fully cached like normal system memory, requires that devices snoop the CPU cache on accesses.h](jX )}(h``ttm_cached``h]j^ )}(hj h]h ttm_cached}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hX/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:36: ./include/drm/ttm/ttm_caching.hhK0hj ubjt )}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK0hj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hK0hjN ubeh}(h]h ]h"]h$]h&]uh1jL hj. ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubh)}(hhh](h)}(hTTM device object referenceh]hTTM device object reference}(hj hhhNhNubah}(h]h ]h"]h$]h&]hjbuh1hhj hhhhhK(ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_global (C struct) c.ttm_globalhNtauh1jhj hhhNhNubj)}(hhh](j)}(h ttm_globalh]j)}(hstruct ttm_globalh](j)}(hstructh]hstruct}(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKubj)}(h h]h }(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 hhhjK hKubj)}(h ttm_globalh]j)}(hj7 h]h ttm_global}(hj^ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9 hhhjK hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5 hhhjK hKubah}(h]j0 ah ](jjeh"]h$]h&]j j )j huh1jhjK hKhj2 hhubj )}(hhh]h)}(h!Buffer object driver global data.h]h!Buffer object driver global data.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK(hj} hhubah}(h]h ]h"]h$]h&]uh1j hj2 hhhjK hKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhj hNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK,hj ubh 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; };}hj sbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK.hj ubh)}(h **Members**h]j7 )}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK4hj ubjM )}(hhh](jR )}(hq``dummy_read_page`` Pointer to a dummy page used for mapping requests of unpopulated pages. Constant after init. h](jX )}(h``dummy_read_page``h]j^ )}(hj h]hdummy_read_page}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK/hj ubjt )}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK.hj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hK/hj ubjR )}(hN``device_list`` List of buffer object devices. Protected by ttm_global_mutex. h](jX )}(h``device_list``h]j^ )}(hj) h]h device_list}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj' ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK5hj# ubjt )}(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.}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK4hj? ubah}(h]h ]h"]h$]h&]uh1js hj# ubeh}(h]h ]h"]h$]h&]uh1jQ hj> hK5hj ubjR )}(h;``bo_count`` Number of buffer objects allocated by devices.h](jX )}(h ``bo_count``h]j^ )}(hjc h]hbo_count}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hja ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK9hj] ubjt )}(hhh]h)}(h.Number of buffer objects allocated by devices.h]h.Number of buffer objects allocated by devices.}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK:hjy ubah}(h]h ]h"]h$]h&]uh1js hj] ubeh}(h]h ]h"]h$]h&]uh1jQ hjx hK9hj ubeh}(h]h ]h"]h$]h&]uh1jL hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_device (C struct) c.ttm_devicehNtauh1jhj hhhNhNubj)}(hhh](j)}(h ttm_deviceh]j)}(hstruct ttm_deviceh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhK@ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hK@ubj)}(h ttm_deviceh]j)}(hj h]h ttm_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hK@ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hK@ubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj hK@hj hhubj )}(hhh]h)}(h*Buffer object driver device-specific data.h]h*Buffer object driver device-specific data.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKhj hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj hK@ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhj hNhNubj- )}(hX,**Definition**:: struct ttm_device { struct list_head device_list; unsigned int alloc_flags; 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 ``alloc_flags`` TTM_ALLOCATION_* flags. ``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](j7 )}(h**Definition**h]h Definition}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKhj ubj )}(hXstruct ttm_device { struct list_head device_list; unsigned int alloc_flags; 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; unsigned int alloc_flags; 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; };}hj< sbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKhj ubh)}(h **Members**h]j7 )}(hjM h]hMembers}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjK ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKhj ubjM )}(hhh](jR )}(hS``device_list`` Our entry in the global device list. Constant after bo device init h](jX )}(h``device_list``h]j^ )}(hjl h]h device_list}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKhjf ubjt )}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKhj ubah}(h]h ]h"]h$]h&]uh1js hjf ubeh}(h]h ]h"]h$]h&]uh1jQ hj hKhjc ubjR )}(h(``alloc_flags`` TTM_ALLOCATION_* flags. h](jX )}(h``alloc_flags``h]j^ )}(hj h]h alloc_flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKhj ubjt )}(hhh]h)}(hTTM_ALLOCATION_* flags.h]hTTM_ALLOCATION_* flags.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hKhjc ubjR )}(hG``funcs`` Function table for the device. Constant after bo device init h](jX )}(h ``funcs``h]j^ )}(hj h]hfuncs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:42: ./include/drm/ttm/ttm_device.hhKhj ubjt )}(hhh]h)}(h)}(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, unsigned int alloc_flags)h](jD)}(hstruct ttm_device *bdevh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ttm_deviceh]h ttm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.ttm_device_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbdevh]hbdev}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h$const struct ttm_device_funcs *funcsh](j)}(hconsth]hconst}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hj? h]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(httm_device_funcsh]httm_device_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.ttm_device_initasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hfuncsh]hfuncs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.ttm_device_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct address_space *mappingh](j)}(hj? h]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(h address_spaceh]h address_space}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjdmodnameN classnameNjj)}j]jc.ttm_device_initasbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h*struct drm_vma_offset_manager *vma_managerh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.ttm_device_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h vma_managerh]h vma_manager}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned int alloc_flagsh](j)}(hunsignedh]hunsigned}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h alloc_flagsh]h alloc_flags}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj hNhNubj- )}(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. ``unsigned int alloc_flags`` TTM_ALLOCATION_* flags. **Description** Initializes a struct ttm_device: **Return** !0: Failure.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubjM )}(hhh](jR )}(hL``struct ttm_device *bdev`` A pointer to a struct ttm_device to initialize. h](jX )}(h``struct ttm_device *bdev``h]j^ )}(hjh]hstruct ttm_device *bdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubjt )}(hhh]h)}(h/A pointer to a struct ttm_device to initialize.h]h/A pointer to a struct ttm_device to initialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(hH``const struct ttm_device_funcs *funcs`` Function table for the device. h](jX )}(h(``const struct ttm_device_funcs *funcs``h]j^ )}(hjh]h$const struct ttm_device_funcs *funcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubjt )}(hhh]h)}(hFunction table for the device.h]hFunction table for the device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(hX``struct device *dev`` The core kernel device pointer for DMA mappings and allocations. h](jX )}(h``struct device *dev``h]j^ )}(hj*h]hstruct device *dev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]uh1jW h[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhj$ubjt )}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj@ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj?hKhjubjR )}(hH``struct address_space *mapping`` The address space to use for this bo. h](jX )}(h!``struct address_space *mapping``h]j^ )}(hjch]hstruct address_space *mapping}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjaubah}(h]h ]h"]h$]h&]uh1jW h[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhj]ubjt )}(hhh]h)}(h%The address space to use for this bo.h]h%The address space to use for this bo.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjyubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hjxhKhjubjR )}(hK``struct drm_vma_offset_manager *vma_manager`` A pointer to a vma manager. h](jX )}(h.``struct drm_vma_offset_manager *vma_manager``h]j^ )}(hjh]h*struct drm_vma_offset_manager *vma_manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubjt )}(hhh]h)}(hA pointer to a vma manager.h]hA pointer to a vma manager.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h5``unsigned int alloc_flags`` TTM_ALLOCATION_* flags. h](jX )}(h``unsigned int alloc_flags``h]j^ )}(hjh]hunsigned int alloc_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubjt )}(hhh]h)}(hTTM_ALLOCATION_* flags.h]hTTM_ALLOCATION_* flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubh)}(h Initializes a struct ttm_device:h]h Initializes a struct ttm_device:}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubh)}(h **Return**h]j7 )}(hj7h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj5ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubh)}(h !0: Failure.h]h !0: Failure.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:45: ./drivers/gpu/drm/ttm/ttm_device.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj hhhNhNubeh}(h]jhah ]h"]ttm device object referenceah$]h&]uh1hhjMhhhhhK(ubh)}(hhh](h)}(h TTM resource placement referenceh]h TTM resource placement reference}(hjmhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjjhhhhhK1ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_place (C struct) c.ttm_placehNtauh1jhjjhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:51: ./include/drm/ttm/ttm_placement.hhNubj)}(hhh](j)}(h ttm_placeh]j)}(hstruct ttm_placeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:51: ./include/drm/ttm/ttm_placement.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h ttm_placeh]j)}(hjh]h ttm_place}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjjhjhNubj- )}(hX**Definition**:: struct ttm_place { uint64_t fpfn; uint64_t 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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:51: ./include/drm/ttm/ttm_placement.hhKNhjubj )}(hfstruct ttm_place { uint64_t fpfn; uint64_t lpfn; uint32_t mem_type; uint32_t flags; };h]hfstruct ttm_place { uint64_t fpfn; uint64_t lpfn; uint32_t mem_type; uint32_t flags; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j hZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:51: ./include/drm/ttm/ttm_placement.hhKPhjubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:51: ./include/drm/ttm/ttm_placement.hhKWhjubjM )}(hhh](jR )}(h9``fpfn`` first valid page frame number to put the object h](jX )}(h``fpfn``h]j^ )}(hj5h]hfpfn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj3ubah}(h]h ]h"]h$]h&]uh1jW hZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:51: ./include/drm/ttm/ttm_placement.hhKMhj/ubjt )}(hhh]h)}(h/first valid page frame number to put the objecth]h/first valid page frame number to put the object}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKMhjKubah}(h]h ]h"]h$]h&]uh1js hj/ubeh}(h]h ]h"]h$]h&]uh1jQ hjJhKMhj,ubjR )}(h8``lpfn`` last valid page frame number to put the object h](jX )}(h``lpfn``h]j^ )}(hjnh]hlpfn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjlubah}(h]h ]h"]h$]h&]uh1jW hZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:51: ./include/drm/ttm/ttm_placement.hhKNhjhubjt )}(hhh]h)}(h.last valid page frame number to put the objecth]h.last valid page frame number to put the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKNhjubah}(h]h ]h"]h$]h&]uh1js hjhubeh}(h]h ]h"]h$]h&]uh1jQ hjhKNhj,ubjR )}(hJ``mem_type`` One of TTM_PL_* where the resource should be allocated from. h](jX )}(h ``mem_type``h]j^ )}(hjh]hmem_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:51: ./include/drm/ttm/ttm_placement.hhKOhjubjt )}(hhh]h)}(hubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhK9hj!ubh)}(hPipelined evictions can be spread on multiple entities. This is the max number of entities that can be used by the driver for that purpose.h]hPipelined evictions can be spread on multiple entities. This is the max number of entities that can be used by the driver for that purpose.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhK8hj!ubeh}(h]h ]h"]h$]h&]uh1jhj7hK7hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_lru_item_type (C enum)c.ttm_lru_item_typehNtauh1jhjhhhNhNubj)}(hhh](j)}(httm_lru_item_typeh]j)}(henum ttm_lru_item_typeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhK?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK?ubj)}(httm_lru_item_typeh]j)}(hj~h]httm_lru_item_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK?ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj|hhhjhK?ubah}(h]jwah ](jjeh"]h$]h&]j j )j huh1jhjhK?hjyhhubj )}(hhh]h)}(h!enumerate ttm_lru_item subclassesh]h!enumerate ttm_lru_item subclasses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhK@hjhhubah}(h]h ]h"]h$]h&]uh1j hjyhhhjhK?ubeh}(h]h ](j! enumeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hl**Constants** ``TTM_LRU_RESOURCE`` The resource subclass ``TTM_LRU_HITCH`` The iterator hitch subclassh](h)}(h **Constants**h]j7 )}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKDhjubjM )}(hhh](jR )}(h+``TTM_LRU_RESOURCE`` The resource subclass h](jX )}(h``TTM_LRU_RESOURCE``h]j^ )}(hjh]hTTM_LRU_RESOURCE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKGhjubjt )}(hhh]h)}(hThe resource subclassh]hThe resource subclass}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKGhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKGhjubjR )}(h-``TTM_LRU_HITCH`` The iterator hitch subclassh](jX )}(h``TTM_LRU_HITCH``h]j^ )}(hj@h]h TTM_LRU_HITCH}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKIhj:ubjt )}(hhh]h)}(hThe iterator hitch subclassh]hThe iterator hitch subclass}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKJhjVubah}(h]h ]h"]h$]h&]uh1js hj:ubeh}(h]h ]h"]h$]h&]uh1jQ hjUhKIhjubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_lru_item (C struct)c.ttm_lru_itemhNtauh1jhjhhhNhNubj)}(hhh](j)}(h ttm_lru_itemh]j)}(hstruct ttm_lru_itemh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKOubj)}(h ttm_lru_itemh]j)}(hjh]h ttm_lru_item}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKOubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKOubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKOhjhhubj )}(hhh]h)}(h The TTM lru list node base classh]h The TTM lru list node base class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKJhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKOubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKNhjubj )}(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&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKPhjubh)}(h **Members**h]j7 )}(hj*h]hMembers}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj(ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKUhjubjM )}(hhh](jR )}(h``link`` The list link h](jX )}(h``link``h]j^ )}(hjIh]hlink}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjGubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKLhjCubjt )}(hhh]h)}(h The list linkh]h The list link}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKLhj_ubah}(h]h ]h"]h$]h&]uh1js hjCubeh}(h]h ]h"]h$]h&]uh1jQ hj^hKLhj@ubjR )}(h``type`` The subclass typeh](jX )}(h``type``h]j^ )}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKLhj|ubjt )}(hhh]h)}(hThe subclass typeh]hThe subclass type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKMhjubah}(h]h ]h"]h$]h&]uh1js hj|ubeh}(h]h ]h"]h$]h&]uh1jQ hjhKLhj@ubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_lru_item_init (C function)c.ttm_lru_item_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKTubj)}(httm_lru_item_inith]j)}(httm_lru_item_inith]httm_lru_item_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKTubj>)}(h8(struct ttm_lru_item *item, enum ttm_lru_item_type type)h](jD)}(hstruct ttm_lru_item *itemh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ttm_lru_itemh]h ttm_lru_item}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj9modnameN classnameNjj)}j]j)}j}jsbc.ttm_lru_item_initasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hitemh]hitem}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(henum ttm_lru_item_type typeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(httm_lru_item_typeh]httm_lru_item_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jSc.ttm_lru_item_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKTubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKTubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKThjhhubj )}(hhh]h)}(h initialize a struct ttm_lru_itemh]h initialize a struct ttm_lru_item}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKThjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKTubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(h{**Parameters** ``struct ttm_lru_item *item`` The item to initialize ``enum ttm_lru_item_type type`` The subclass typeh](h)}(h**Parameters**h]j7 )}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKXhjubjM )}(hhh](jR )}(h5``struct ttm_lru_item *item`` The item to initialize h](jX )}(h``struct ttm_lru_item *item``h]j^ )}(hj@h]hstruct ttm_lru_item *item}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKUhj:ubjt )}(hhh]h)}(hThe item to initializeh]hThe item to initialize}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKUhjVubah}(h]h ]h"]h$]h&]uh1js hj:ubeh}(h]h ]h"]h$]h&]uh1jQ hjUhKUhj7ubjR )}(h1``enum ttm_lru_item_type type`` The subclass typeh](jX )}(h``enum ttm_lru_item_type type``h]j^ )}(hjyh]henum ttm_lru_item_type type}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKWhjsubjt )}(hhh]h)}(hThe subclass typeh]hThe subclass type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKVhjubah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjhKWhj7ubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_resource_manager (C struct)c.ttm_resource_managerhNtauh1jhjhhhNhNubj)}(hhh](j)}(httm_resource_managerh]j)}(hstruct ttm_resource_managerh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhK[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK[ubj)}(httm_resource_managerh]j)}(hjh]httm_resource_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK[ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK[ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhK[hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhK[ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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 eviction_lock; struct dma_fence *eviction_fences[TTM_NUM_MOVE_FENCES]; 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 ``eviction_lock`` lock for eviction fences ``eviction_fences`` The fences 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](j7 )}(h**Definition**h]h Definition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&ubh:}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj"ubj )}(hXfstruct 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 eviction_lock; struct dma_fence *eviction_fences[TTM_NUM_MOVE_FENCES]; struct list_head lru[TTM_MAX_BO_PRIORITY]; uint64_t usage; struct dmem_cgroup_region *cg; };h]hXfstruct 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 eviction_lock; struct dma_fence *eviction_fences[TTM_NUM_MOVE_FENCES]; struct list_head lru[TTM_MAX_BO_PRIORITY]; uint64_t usage; struct dmem_cgroup_region *cg; };}hjCsbah}(h]h ]h"]h$]h&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj"ubh)}(h **Members**h]j7 )}(hjTh]hMembers}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj"ubjM )}(hhh](jR )}(h)``use_type`` The memory type is enabled. h](jX )}(h ``use_type``h]j^ )}(hjsh]huse_type}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjmubjt )}(hhh]h)}(hThe memory type is enabled.h]hThe memory type is enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjjubjR )}(h@``use_tt`` If a TT object should be used for the backing store. h](jX )}(h ``use_tt``h]j^ )}(hjh]huse_tt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjjubjR )}(h,``bdev`` ttm device this manager belongs to h](jX )}(h``bdev``h]j^ )}(hjh]hbdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjubjt )}(hhh]h)}(h"ttm device this manager belongs toh]h"ttm device this manager belongs to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjjubjR )}(h%``size`` Size of the managed region. h](jX )}(h``size``h]j^ )}(hjh]hsize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjubjt )}(hhh]h)}(hSize of the managed region.h]hSize of the managed region.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhj4ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj3hKhjjubjR )}(hE``func`` structure pointer implementing the range manager. See above h](jX )}(h``func``h]j^ )}(hjWh]hfunc}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjUubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjQubjt )}(hhh]h)}(h;structure pointer implementing the range manager. See aboveh]h;structure pointer implementing the range manager. See above}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhKhjmubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hjlhKhjjubjR )}(h+``eviction_lock`` lock for eviction fences h](jX )}(h``eviction_lock``h]j^ )}(hjh]h eviction_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjubjt )}(hhh]h)}(hlock for eviction fencesh]hlock for eviction fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjjubjR )}(hE``eviction_fences`` The fences of the last pipelined move operation. h](jX )}(h``eviction_fences``h]j^ )}(hjh]heviction_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjubjt )}(hhh]h)}(h0The fences of the last pipelined move operation.h]h0The fences of the last pipelined move operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjjubjR )}(h+``lru`` The lru list for this memory type. h](jX )}(h``lru``h]j^ )}(hj h]hlru}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjubjt )}(hhh]h)}(h"The lru list for this memory type.h]h"The lru list for this memory type.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hKhjjubjR )}(hO``usage`` How much of the resources are used, protected by the bdev->lru_lock. h](jX )}(h ``usage``h]j^ )}(hj; h]husage}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj9 ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj5 ubjt )}(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.}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjQ ubah}(h]h ]h"]h$]h&]uh1js hj5 ubeh}(h]h ]h"]h$]h&]uh1jQ hjP hKhjjubjR )}(hL``cg`` :c:type:`dmem_cgroup_region` used for memory accounting, if not NULL.h](jX )}(h``cg``h]j^ )}(hju h]hcg}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjs ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjo ubjt )}(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^ )}(hj h]hdmem_cgroup_region}(hj hhhNhNubah}(h]h ](xrefj! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdoc gpu/drm-mm refdomainj! reftypetype refexplicitrefwarnjj)}j]sb reftargetdmem_cgroup_regionuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj ubh) used for memory accounting, if not NULL.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1js hjo ubeh}(h]h ]h"]h$]h&]uh1jQ hj hKhjjubeh}(h]h ]h"]h$]h&]uh1jL hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_bus_placement (C struct)c.ttm_bus_placementhNtauh1jhjhhhNhNubj)}(hhh](j)}(httm_bus_placementh]j)}(hstruct ttm_bus_placementh](j)}(hj? h]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKubj)}(h h]h }(hj)!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj(!hKubj)}(httm_bus_placementh]j)}(hj!h]httm_bus_placement}(hj;!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj(!hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!hhhj(!hKubah}(h]j!ah ](jjeh"]h$]h&]j j )j huh1jhj(!hKhj!hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj!hhhj(!hKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jf!j( jf!j) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjr!hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjn!ubh:}(hjn!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjj!ubj )}(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&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjj!ubh)}(h **Members**h]j7 )}(hj!h]hMembers}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj!ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhjj!ubjM )}(hhh](jR )}(h ``addr`` mapped virtual address h](jX )}(h``addr``h]j^ )}(hj!h]haddr}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj!ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj!ubjt )}(hhh]h)}(hmapped virtual addressh]hmapped virtual address}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1js hj!ubeh}(h]h ]h"]h$]h&]uh1jQ hj!hKhj!ubjR )}(h``offset`` physical addr h](jX )}(h ``offset``h]j^ )}(hj!h]hoffset}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj!ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj!ubjt )}(hhh]h)}(h physical addrh]h physical addr}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj "hKhj "ubah}(h]h ]h"]h$]h&]uh1js hj!ubeh}(h]h ]h"]h$]h&]uh1jQ hj "hKhj!ubjR )}(h!``is_iomem`` is this io memory ? h](jX )}(h ``is_iomem``h]j^ )}(hj-"h]his_iomem}(hj/"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj+"ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj'"ubjt )}(hhh]h)}(his this io memory ?h]his this io memory ?}(hjF"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB"hKhjC"ubah}(h]h ]h"]h$]h&]uh1js hj'"ubeh}(h]h ]h"]h$]h&]uh1jQ hjB"hKhj!ubjR )}(h ``caching`` See enum ttm_cachingh](jX )}(h ``caching``h]j^ )}(hjf"h]hcaching}(hjh"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjd"ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj`"ubjt )}(hhh]h)}(hSee enum ttm_cachingh]hSee enum ttm_caching}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj|"ubah}(h]h ]h"]h$]h&]uh1js hj`"ubeh}(h]h ]h"]h$]h&]uh1jQ hj{"hKhj!ubeh}(h]h ]h"]h$]h&]uh1jL hjj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj"ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./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:57: ./include/drm/ttm/ttm_resource.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_resource (C struct)c.ttm_resourcehNtauh1jhjhhhNhNubj)}(hhh](j)}(h ttm_resourceh]j)}(hstruct ttm_resourceh](j)}(hj? h]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hKubj)}(h ttm_resourceh]j)}(hj"h]h ttm_resource}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj"hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj"hKubah}(h]j"ah ](jjeh"]h$]h&]j j )j huh1jhj"hKhj"hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj"hhhj"hKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j2#j( j2#j) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj>#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:#ubh:}(hj:#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj6#ubj )}(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; };}hjW#sbah}(h]h ]h"]h$]h&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj6#ubh)}(h **Members**h]j7 )}(hjh#h]hMembers}(hjj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjf#ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM hj6#ubjM )}(hhh](jR )}(h#``start`` Start of the allocation. h](jX )}(h ``start``h]j^ )}(hj#h]hstart}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj#ubjt )}(hhh]h)}(hStart of the allocation.h]hStart of the allocation.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1js hj#ubeh}(h]h ]h"]h$]h&]uh1jQ hj#hKhj~#ubjR )}(h+``size`` Actual size of resource in bytes. h](jX )}(h``size``h]j^ )}(hj#h]hsize}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj#ubjt )}(hhh]h)}(h!Actual size of resource in bytes.h]h!Actual size of resource in bytes.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1js hj#ubeh}(h]h ]h"]h$]h&]uh1jQ hj#hKhj~#ubjR )}(h.``mem_type`` Resource type of the allocation. h](jX )}(h ``mem_type``h]j^ )}(hj#h]hmem_type}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhKhj#ubjt )}(hhh]h)}(h Resource type of the allocation.h]h Resource type of the allocation.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1js hj#ubeh}(h]h ]h"]h$]h&]uh1jQ hj$hKhj~#ubjR )}(h``placement`` Placement flags. h](jX )}(h ``placement``h]j^ )}(hj2$h]h placement}(hj4$hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj0$ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj,$ubjt )}(hhh]h)}(hPlacement flags.h]hPlacement flags.}(hjK$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG$hMhjH$ubah}(h]h ]h"]h$]h&]uh1js hj,$ubeh}(h]h ]h"]h$]h&]uh1jQ hjG$hMhj~#ubjR )}(h2``bus`` Placement on io bus accessible to the CPU h](jX )}(h``bus``h]j^ )}(hjk$h]hbus}(hjm$hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hji$ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhje$ubjt )}(hhh]h)}(h)Placement on io bus accessible to the CPUh]h)Placement on io bus accessible to the CPU}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1js hje$ubeh}(h]h ]h"]h$]h&]uh1jQ hj$hMhj~#ubjR )}(hC``bo`` weak reference to the BO, protected by ttm_device::lru_lock h](jX )}(h``bo``h]j^ )}(hj$h]hbo}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj$ubjt )}(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&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj$hMhj~#ubjR )}(h1``css`` cgroup state this resource is charged to h](jX )}(h``css``h]j^ )}(hj$h]hcss}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj$ubjt )}(hhh]h)}(h(cgroup state this resource is charged toh]h(cgroup state this resource is charged to}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj$hMhj~#ubjR )}(h_``lru`` Least recently used list, see :c:type:`ttm_resource_manager.lru `h](jX )}(h``lru``h]j^ )}(hj%h]hlru}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj%ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj%ubjt )}(hhh]h)}(hWLeast recently used list, see :c:type:`ttm_resource_manager.lru `h](hLeast recently used list, see }(hj/%hhhNhNubh)}(h9:c:type:`ttm_resource_manager.lru `h]j^ )}(hj9%h]httm_resource_manager.lru}(hj;%hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj7%ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j ttm_resource_manageruh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj/%ubeh}(h]h ]h"]h$]h&]uh1hhjV%hMhj,%ubah}(h]h ]h"]h$]h&]uh1js hj%ubeh}(h]h ]h"]h$]h&]uh1jQ hj+%hMhj~#ubeh}(h]h ]h"]h$]h&]uh1jL hj6#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjx%h]h Description}(hjz%hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjv%ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhjhhubh)}(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:57: ./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_reshNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMubh)}(hhh]j)}(h ttm_resourceh]h ttm_resource}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj%modnameN classnameNjj)}j]j)}j}ttm_lru_item_to_ressbc.ttm_lru_item_to_resasbuh1hhj%hhhj%hMubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMubj)}(httm_lru_item_to_resh]j)}(hj%h]httm_lru_item_to_res}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj%hMubj>)}(h(struct ttm_lru_item *item)h]jD)}(hstruct ttm_lru_item *itemh](j)}(hj? h]hstruct}(hj0&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,&ubj)}(h h]h }(hj=&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,&ubh)}(hhh]j)}(h ttm_lru_itemh]h ttm_lru_item}(hjN&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK&ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjP&modnameN classnameNjj)}j]j%c.ttm_lru_item_to_resasbuh1hhj,&ubj)}(h h]h }(hjl&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,&ubj)}(hjh]h*}(hjz&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,&ubj)}(hitemh]hitem}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(&ubah}(h]h ]h"]h$]h&]jjuh1j=hj%hhhj%hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj%hhhj%hMubah}(h]j%ah ](jjeh"]h$]h&]j j )j huh1jhj%hMhj%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:57: ./include/drm/ttm/ttm_resource.hhMhj&hhubah}(h]h ]h"]h$]h&]uh1j hj%hhhj%hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j&j( j&j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj&ubjM )}(hhh]jR )}(hB``struct ttm_lru_item *item`` The struct ttm_lru_item to downcast h](jX )}(h``struct ttm_lru_item *item``h]j^ )}(hj&h]hstruct ttm_lru_item *item}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj&ubjt )}(hhh]h)}(h#The struct ttm_lru_item to downcasth]h#The struct ttm_lru_item to downcast}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1js hj&ubeh}(h]h ]h"]h$]h&]uh1jQ hj'hMhj&ubah}(h]h ]h"]h$]h&]uh1jL hj&ubh)}(h **Return**h]j7 )}(hj-'h]hReturn}(hj/'hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+'ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj&ubh)}(h,Pointer to the embedding struct ttm_resourceh]h,Pointer to the embedding struct ttm_resource}(hjC'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ttm_lru_bulk_move_pos (C struct)c.ttm_lru_bulk_move_poshNtauh1jhjhhhNhNubj)}(hhh](j)}(httm_lru_bulk_move_posh]j)}(hstruct ttm_lru_bulk_move_posh](j)}(hj? h]hstruct}(hjr'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn'hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn'hhhj'hM ubj)}(httm_lru_bulk_move_posh]j)}(hjl'h]httm_lru_bulk_move_pos}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjn'hhhj'hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjj'hhhj'hM ubah}(h]je'ah ](jjeh"]h$]h&]j j )j huh1jhj'hM hjg'hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjg'hhhj'hM ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j'j( j'j) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj'ubh:}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM(hj'ubj )}(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&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM*hj'ubh)}(h **Members**h]j7 )}(hj'h]hMembers}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj'ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM/hj'ubjM )}(hhh](jR )}(h+``first`` first res in the bulk move range h](jX )}(h ``first``h]j^ )}(hj(h]hfirst}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM'hj (ubjt )}(hhh]h)}(h first res in the bulk move rangeh]h first res in the bulk move range}(hj+(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'(hM'hj((ubah}(h]h ]h"]h$]h&]uh1js hj (ubeh}(h]h ]h"]h$]h&]uh1jQ hj'(hM'hj (ubjR )}(h(``last`` last res in the bulk move rangeh](jX )}(h``last``h]j^ )}(hjK(h]hlast}(hjM(hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjI(ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM'hjE(ubjt )}(hhh]h)}(hlast res in the bulk move rangeh]hlast res in the bulk move range}(hjd(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM(hja(ubah}(h]h ]h"]h$]h&]uh1js hjE(ubeh}(h]h ]h"]h$]h&]uh1jQ hj`(hM'hj (ubeh}(h]h ]h"]h$]h&]uh1jL hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj(ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./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:57: ./include/drm/ttm/ttm_resource.hhM%hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_lru_bulk_move (C struct)c.ttm_lru_bulk_movehNtauh1jhjhhhNhNubj)}(hhh](j)}(httm_lru_bulk_moveh]j)}(hstruct ttm_lru_bulk_moveh](j)}(hj? h]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM*ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hM*ubj)}(httm_lru_bulk_moveh]j)}(hj(h]httm_lru_bulk_move}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj(hM*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj(hhhj(hM*ubah}(h]j(ah ](jjeh"]h$]h&]j j )j huh1jhj(hM*hj(hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj(hhhj(hM*ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j)j( j)j) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj#)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubh:}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM5hj)ubj )}(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; };}hj<)sbah}(h]h ]h"]h$]h&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM7hj)ubh)}(h **Members**h]j7 )}(hjM)h]hMembers}(hjO)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjK)ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM<hj)ubjM )}(hhh](jR )}(hG``pos`` first/last lru entry for resources in the each domain/priority h](jX )}(h``pos``h]j^ )}(hjl)h]hpos}(hjn)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjj)ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM3hjf)ubjt )}(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&]uh1hhj)hM3hj)ubah}(h]h ]h"]h$]h&]uh1js hjf)ubeh}(h]h ]h"]h$]h&]uh1jQ hj)hM3hjc)ubjR )}(h``cursor_list`` The list of cursors currently traversing any of the sublists of **pos**. Protected by the ttm device's lru_lock.h](jX )}(h``cursor_list``h]j^ )}(hj)h]h cursor_list}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM4hj)ubjt )}(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)hhhNhNubj7 )}(h**pos**h]hpos}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubh+. Protected by the ttm device’s lru_lock.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hM4hj)ubah}(h]h ]h"]h$]h&]uh1js hj)ubeh}(h]h ]h"]h$]h&]uh1jQ hj)hM4hjc)ubeh}(h]h ]h"]h$]h&]uh1jL hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM8hjhhubh)}(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:57: ./include/drm/ttm/ttm_resource.hhM5hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_resource_cursor (C struct)c.ttm_resource_cursorhNtauh1jhjhhhNhNubj)}(hhh](j)}(httm_resource_cursorh]j)}(hstruct ttm_resource_cursorh](j)}(hj? h]hstruct}(hj7*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3*hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM>ubj)}(h h]h }(hjE*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3*hhhjD*hM>ubj)}(httm_resource_cursorh]j)}(hj1*h]httm_resource_cursor}(hjW*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3*hhhjD*hM>ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj/*hhhjD*hM>ubah}(h]j**ah ](jjeh"]h$]h&]j j )j huh1jhjD*hM>hj,*hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj,*hhhjD*hM>ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j*j( j*j) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj*ubh:}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMFhj*ubj )}(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&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMHhj*ubh)}(h **Members**h]j7 )}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj*ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMQhj*ubjM )}(hhh](jR )}(h;``man`` The resource manager currently being iterated over h](jX )}(h``man``h]j^ )}(hj*h]hman}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj*ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMDhj*ubjt )}(hhh]h)}(h2The resource manager currently being iterated overh]h2The resource manager currently being iterated over}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMDhj*ubah}(h]h ]h"]h$]h&]uh1js hj*ubeh}(h]h ]h"]h$]h&]uh1jQ hj*hMDhj*ubjR )}(hO``hitch`` A hitch list node inserted before the next resource to iterate over. h](jX )}(h ``hitch``h]j^ )}(hj+h]hhitch}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj+ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMFhj +ubjt )}(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:57: ./include/drm/ttm/ttm_resource.hhMEhj&+ubah}(h]h ]h"]h$]h&]uh1js hj +ubeh}(h]h ]h"]h$]h&]uh1jQ hj%+hMFhj*ubjR )}(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](jX )}(h ``bulk_link``h]j^ )}(hjJ+h]h bulk_link}(hjL+hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjH+ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMHhjD+ubjt )}(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 }(hjc+hhhNhNubj7 )}(h**bulk**h]hbulk}(hjk+hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjc+ubh+. Protected by the ttm device’s lru_lock.}(hjc+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMGhj`+ubah}(h]h ]h"]h$]h&]uh1js hjD+ubeh}(h]h ]h"]h$]h&]uh1jQ hj_+hMHhj*ubjR )}(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](jX )}(h``bulk``h]j^ )}(hj+h]hbulk}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj+ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMLhj+ubjt )}(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+hhhNhNubj7 )}(h **hitch**h]hhitch}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+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:57: ./include/drm/ttm/ttm_resource.hhMIhj+ubah}(h]h ]h"]h$]h&]uh1js hj+ubeh}(h]h ]h"]h$]h&]uh1jQ hj+hMLhj*ubjR )}(hh``mem_type`` The memory type of the LRU list being traversed. This field is valid iff **bulk** != NULL. h](jX )}(h ``mem_type``h]j^ )}(hj+h]hmem_type}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj+ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMNhj+ubjt )}(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 }(hj+hhhNhNubj7 )}(h**bulk**h]hbulk}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+ubh != NULL.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMMhj+ubah}(h]h ]h"]h$]h&]uh1js hj+ubeh}(h]h ]h"]h$]h&]uh1jQ hj+hMNhj*ubjR )}(h!``priority`` the current priorityh](jX )}(h ``priority``h]j^ )}(hj.,h]hpriority}(hj0,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj,,ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMNhj(,ubjt )}(hhh]h)}(hthe current priorityh]hthe current priority}(hjG,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMOhjD,ubah}(h]h ]h"]h$]h&]uh1js hj(,ubeh}(h]h ]h"]h$]h&]uh1jQ hjC,hMNhj*ubeh}(h]h ]h"]h$]h&]uh1jL hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjq,h]h Description}(hjs,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjo,ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMRhjhhubh)}(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:57: ./include/drm/ttm/ttm_resource.hhMOhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_kmap_iter_iomap (C struct)c.ttm_kmap_iter_iomaphNtauh1jhjhhhNhNubj)}(hhh](j)}(httm_kmap_iter_iomaph]j)}(hstruct ttm_kmap_iter_iomaph](j)}(hj? h]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMTubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj,hMTubj)}(httm_kmap_iter_iomaph]j)}(hj,h]httm_kmap_iter_iomap}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj,hMTubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj,hhhj,hMTubah}(h]j,ah ](jjeh"]h$]h&]j j )j huh1jhj,hMThj,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.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMahj,hhubah}(h]h ]h"]h$]h&]uh1j hj,hhhj,hMTubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j -j( j -j) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj-ubh:}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMehj -ubj )}(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&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMghj -ubh)}(h **Members**h]j7 )}(hj?-h]hMembers}(hjA-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj=-ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMthj -ubjM )}(hhh](jR )}(hF``base`` Embedded struct ttm_kmap_iter providing the usage interface. h](jX )}(h``base``h]j^ )}(hj^-h]hbase}(hj`-hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj\-ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMdhjX-ubjt )}(hhh]h)}(hsgl) - **start** == 0 for **iomap** start. h](jX )}(h ``start``h]j^ )}(hj.h]hstart}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhhj.ubjt )}(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 }(hj4.hhhNhNubj7 )}(h**st**h]hst}(hj<.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4.ubh# to make sg_dma_address(st->sgl) - }(hj4.hhhNhNubj7 )}(h **start**h]hstart}(hjN.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4.ubh == 0 for }(hj4.hhhNhNubj7 )}(h **iomap**h]hiomap}(hj`.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4.ubh start.}(hj4.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMghj1.ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj0.hMhhjU-ubjR )}(h8``cache`` Scatterlist traversal cache for fast lookups. h](jX )}(h ``cache``h]j^ )}(hj.h]hcache}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMihj.ubjt )}(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.hMihj.ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj.hMihjU-ubjR )}(hB``cache.sg`` Pointer to the currently cached scatterlist segment. h](jX )}(h ``cache.sg``h]j^ )}(hj.h]hcache.sg}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMjhj.ubjt )}(hhh]h)}(h4Pointer to the currently cached scatterlist segment.h]h4Pointer to the currently cached scatterlist segment.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMjhj.ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj.hMjhjU-ubjR )}(h:``cache.i`` First index of **sg**. PAGE_SIZE granularity. h](jX )}(h ``cache.i``h]j^ )}(hj.h]hcache.i}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMkhj.ubjt )}(hhh]h)}(h-First index of **sg**. PAGE_SIZE granularity.h](hFirst index of }(hj/hhhNhNubj7 )}(h**sg**h]hsg}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubh. PAGE_SIZE granularity.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hMkhj/ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj/hMkhjU-ubjR )}(h?``cache.end`` Last index + 1 of **sg**. PAGE_SIZE granularity. h](jX )}(h ``cache.end``h]j^ )}(hjH/h]h cache.end}(hjJ/hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjF/ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMlhjB/ubjt )}(hhh]h)}(h0Last index + 1 of **sg**. PAGE_SIZE granularity.h](hLast index + 1 of }(hja/hhhNhNubj7 )}(h**sg**h]hsg}(hji/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hja/ubh. PAGE_SIZE granularity.}(hja/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]/hMlhj^/ubah}(h]h ]h"]h$]h&]uh1js hjB/ubeh}(h]h ]h"]h$]h&]uh1jQ hj]/hMlhjU-ubjR )}(hL``cache.offs`` First offset into **iomap** of **sg**. PAGE_SIZE granularity.h](jX )}(h``cache.offs``h]j^ )}(hj/h]h cache.offs}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj/ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMlhj/ubjt )}(hhh]h)}(h=First offset into **iomap** of **sg**. PAGE_SIZE granularity.h](hFirst offset into }(hj/hhhNhNubj7 )}(h **iomap**h]hiomap}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubh of }(hj/hhhNhNubj7 )}(h**sg**h]hsg}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubh. PAGE_SIZE granularity.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMmhj/ubah}(h]h ]h"]h$]h&]uh1js hj/ubeh}(h]h ]h"]h$]h&]uh1jQ hj/hMlhjU-ubeh}(h]h ]h"]h$]h&]uh1jL hj -ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ttm_kmap_iter_linear_io (C struct)c.ttm_kmap_iter_linear_iohNtauh1jhjhhhNhNubj)}(hhh](j)}(httm_kmap_iter_linear_ioh]j)}(hstruct ttm_kmap_iter_linear_ioh](j)}(hj? h]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 0hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMsubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 0hhhj0hMsubj)}(httm_kmap_iter_linear_ioh]j)}(hj 0h]httm_kmap_iter_linear_io}(hj10hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj 0hhhj0hMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj 0hhhj0hMsubah}(h]j0ah ](jjeh"]h$]h&]j j )j huh1jhj0hMshj0hhubj )}(hhh]h)}(h%Iterator specialization for linear ioh]h%Iterator specialization for linear io}(hjS0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM|hjP0hhubah}(h]h ]h"]h$]h&]uh1j hj0hhhj0hMsubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jk0j( jk0j) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjw0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjs0ubh:}(hjs0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhjo0ubj )}(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; };}hj0sbah}(h]h ]h"]h$]h&]jjuh1j hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhjo0ubh)}(h **Members**h]j7 )}(hj0h]hMembers}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj0ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhjo0ubjM )}(hhh](jR )}(h``base`` The base iterator h](jX )}(h``base``h]j^ )}(hj0h]hbase}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj0ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhM~hj0ubjt )}(hhh]h)}(hThe base iteratorh]hThe base iterator}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM~hj0ubah}(h]h ]h"]h$]h&]uh1js hj0ubeh}(h]h ]h"]h$]h&]uh1jQ hj0hM~hj0ubjR )}(h6``dmap`` Points to the starting address of the region h](jX )}(h``dmap``h]j^ )}(hj0h]hdmap}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj0ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj0ubjt )}(hhh]h)}(h,Points to the starting address of the regionh]h,Points to the starting address of the region}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1js hj0ubeh}(h]h ]h"]h$]h&]uh1jQ hj1hMhj0ubjR )}(h0``needs_unmap`` Whether we need to unmap on finih](jX )}(h``needs_unmap``h]j^ )}(hj21h]h needs_unmap}(hj41hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj01ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj,1ubjt )}(hhh]h)}(h Whether we need to unmap on finih]h Whether we need to unmap on fini}(hjK1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhjH1ubah}(h]h ]h"]h$]h&]uh1js hj,1ubeh}(h]h ]h"]h$]h&]uh1jQ hjG1hMhj0ubeh}(h]h ]h"]h$]h&]uh1jL hjo0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*ttm_resource_manager_set_used (C function)c.ttm_resource_manager_set_usedhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hMubj)}(httm_resource_manager_set_usedh]j)}(httm_resource_manager_set_usedh]httm_resource_manager_set_used}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhj1hMubj>)}(h-(struct ttm_resource_manager *man, bool used)h](jD)}(h struct ttm_resource_manager *manh](j)}(hj? h]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(httm_resource_managerh]httm_resource_manager}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj1modnameN classnameNjj)}j]j)}j}j1sbc.ttm_resource_manager_set_usedasbuh1hhj1ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hmanh]hman}(hj"2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubjD)}(h bool usedh](j)}(hboolh]hbool}(hj;2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj72ubj)}(h h]h }(hjI2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj72ubj)}(husedh]hused}(hjW2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj72ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubeh}(h]h ]h"]h$]h&]jjuh1j=hj1hhhj1hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1hhhj1hMubah}(h]j1ah ](jjeh"]h$]h&]j j )j huh1jhj1hMhj1hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj1hhhj1hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j2j( j2j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj2ubjM )}(hhh](jR )}(h>``struct ttm_resource_manager *man`` A memory manager object. h](jX )}(h$``struct ttm_resource_manager *man``h]j^ )}(hj2h]h struct ttm_resource_manager *man}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj2ubjt )}(hhh]h)}(hA memory manager object.h]hA memory manager object.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hj2hMhj2ubjR )}(h"``bool used`` usage state to set. h](jX )}(h ``bool used``h]j^ )}(hj2h]h bool used}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj2ubjt )}(hhh]h)}(husage state to set.h]husage state to set.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hj3hMhj2ubeh}(h]h ]h"]h$]h&]uh1jL hj2ubh)}(h**Description**h]j7 )}(hj'3h]h Description}(hj)3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj%3ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj2ubh)}(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=3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ttm_resource_manager_used (C function)c.ttm_resource_manager_usedhNtauh1jhjhhhNhNubj)}(hhh](j)}(hAbool ttm_resource_manager_used (struct ttm_resource_manager *man)h]j)}(h@bool ttm_resource_manager_used(struct ttm_resource_manager *man)h](j)}(hj=2h]hbool}(hjl3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh3hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMubj)}(h h]h }(hjz3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh3hhhjy3hMubj)}(httm_resource_manager_usedh]j)}(httm_resource_manager_usedh]httm_resource_manager_used}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjh3hhhjy3hMubj>)}(h"(struct ttm_resource_manager *man)h]jD)}(h struct ttm_resource_manager *manh](j)}(hj? h]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(httm_resource_managerh]httm_resource_manager}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj3modnameN classnameNjj)}j]j)}j}j3sbc.ttm_resource_manager_usedasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hmanh]hman}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj3ubah}(h]h ]h"]h$]h&]jjuh1j=hjh3hhhjy3hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjd3hhhjy3hMubah}(h]j_3ah ](jjeh"]h$]h&]j j )j huh1jhjy3hMhja3hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hja3hhhjy3hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j44j( j44j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj>4h]h Parameters}(hj@4hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj<4ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj84ubjM )}(hhh]jR )}(hC``struct ttm_resource_manager *man`` Manager to get used state for h](jX )}(h$``struct ttm_resource_manager *man``h]j^ )}(hj]4h]h struct ttm_resource_manager *man}(hj_4hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj[4ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhjW4ubjt )}(hhh]h)}(hManager to get used state forh]hManager to get used state for}(hjv4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr4hMhjs4ubah}(h]h ]h"]h$]h&]uh1js hjW4ubeh}(h]h ]h"]h$]h&]uh1jQ hjr4hMhjT4ubah}(h]h ]h"]h$]h&]uh1jL hj84ubh)}(h**Description**h]j7 )}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj84ubh)}(h"Get the in use flag for a manager.h]h"Get the in use flag for a manager.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj84ubh)}(h **Return**h]j7 )}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj84ubh)}(htrue is used, false if not.h]htrue is used, false if not.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj84ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)ttm_resource_manager_cleanup (C function)c.ttm_resource_manager_cleanuphNtauh1jhjhhhNhNubj)}(hhh](j)}(hDvoid ttm_resource_manager_cleanup (struct ttm_resource_manager *man)h]j)}(hCvoid ttm_resource_manager_cleanup(struct ttm_resource_manager *man)h](j)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hMubj)}(httm_resource_manager_cleanuph]j)}(httm_resource_manager_cleanuph]httm_resource_manager_cleanup}(hj%5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhj5hMubj>)}(h"(struct ttm_resource_manager *man)h]jD)}(h struct ttm_resource_manager *manh](j)}(hj? h]hstruct}(hjA5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=5ubj)}(h h]h }(hjN5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=5ubh)}(hhh]j)}(httm_resource_managerh]httm_resource_manager}(hj_5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\5ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetja5modnameN classnameNjj)}j]j)}j}j'5sbc.ttm_resource_manager_cleanupasbuh1hhj=5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=5ubj)}(hmanh]hman}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj95ubah}(h]h ]h"]h$]h&]jjuh1j=hj5hhhj5hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhj5hMubah}(h]j4ah ](jjeh"]h$]h&]j j )j huh1jhj5hMhj4hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj4hhhj5hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j5j( j5j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj5ubjM )}(hhh]jR )}(h>``struct ttm_resource_manager *man`` A memory manager object. h](jX )}(h$``struct ttm_resource_manager *man``h]j^ )}(hj5h]h struct ttm_resource_manager *man}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj5ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj5ubjt )}(hhh]h)}(hA memory manager object.h]hA memory manager object.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 6hMhj 6ubah}(h]h ]h"]h$]h&]uh1js hj5ubeh}(h]h ]h"]h$]h&]uh1jQ hj 6hMhj5ubah}(h]h ]h"]h$]h&]uh1jL hj5ubh)}(h**Description**h]j7 )}(hj16h]h Description}(hj36hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj5ubh)}(h7Cleanup the move fences from the memory manager object.h]h7Cleanup the move fences from the memory manager object.}(hjG6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j+ttm_resource_manager_for_each_res (C macro)#c.ttm_resource_manager_for_each_reshNtauh1jhjhhhNhNubj)}(hhh](j)}(h!ttm_resource_manager_for_each_resh]j)}(h!ttm_resource_manager_for_each_resh]j)}(h!ttm_resource_manager_for_each_resh]j)}(hjp6h]h!ttm_resource_manager_for_each_res}(hjz6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjr6hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjn6hhhj6hMubah}(h]ji6ah ](jjeh"]h$]h&]j j )j huh1jhj6hMhjk6hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjk6hhhj6hMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' j6j( j6j) j* j+ uh1jhhhjhNhNubh)}(h3``ttm_resource_manager_for_each_res (cursor, res)``h]j^ )}(hj6h]h/ttm_resource_manager_for_each_res (cursor, res)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhjhhubj )}(hiterate over all resources h]h)}(hiterate over all resourcesh]hiterate over all resources}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6hMhjhhubj- )}(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]j7 )}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj6ubjM )}(hhh](jR )}(h?``cursor`` struct ttm_resource_cursor for the current position h](jX )}(h ``cursor``h]j^ )}(hj7h]hcursor}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj6ubjt )}(hhh]h)}(h3struct ttm_resource_cursor for the current positionh]h3struct ttm_resource_cursor for the current position}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1js hj6ubeh}(h]h ]h"]h$]h&]uh1jQ hj7hMhj6ubjR )}(h``res`` the current resource h](jX )}(h``res``h]j^ )}(hj97h]hres}(hj;7hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj77ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj37ubjt )}(hhh]h)}(hthe current resourceh]hthe current resource}(hjR7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN7hMhjO7ubah}(h]h ]h"]h$]h&]uh1js hj37ubeh}(h]h ]h"]h$]h&]uh1jQ hjN7hMhj6ubeh}(h]h ]h"]h$]h&]uh1jL hj6ubh)}(h**Description**h]j7 )}(hjt7h]h Description}(hjv7hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjr7ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj6ubh)}(h?Iterate over all the evictable resources in a resource manager.h]h?Iterate over all the evictable resources in a resource manager.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:57: ./include/drm/ttm/ttm_resource.hhMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ttm_lru_bulk_move_init (C function)c.ttm_lru_bulk_move_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h)}(h (struct ttm_lru_bulk_move *bulk)h]jD)}(hstruct ttm_lru_bulk_move *bulkh](j)}(hj? h]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(httm_lru_bulk_moveh]httm_lru_bulk_move}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj8modnameN classnameNjj)}j]j)}j}j7sbc.ttm_lru_bulk_move_initasbuh1hhj7ubj)}(h h]h }(hj48hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]h*}(hjB8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hbulkh]hbulk}(hjO8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj7ubah}(h]h ]h"]h$]h&]jjuh1j=hj7hhhj7hKxubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhj7hKxubah}(h]j7ah ](jjeh"]h$]h&]j j )j huh1jhj7hKxhj7hhubj )}(hhh]h)}(h initialize a bulk move structureh]h initialize a bulk move structure}(hjy8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKxhjv8hhubah}(h]h ]h"]h$]h&]uh1j hj7hhhj7hKxubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j8j( j8j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj8ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chK|hj8ubjM )}(hhh]jR )}(h9``struct ttm_lru_bulk_move *bulk`` the structure to init h](jX )}(h"``struct ttm_lru_bulk_move *bulk``h]j^ )}(hj8h]hstruct ttm_lru_bulk_move *bulk}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKyhj8ubjt )}(hhh]h)}(hthe structure to inith]hthe structure to init}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKyhj8ubah}(h]h ]h"]h$]h&]uh1js hj8ubeh}(h]h ]h"]h$]h&]uh1jQ hj8hKyhj8ubah}(h]h ]h"]h$]h&]uh1jL hj8ubh)}(h**Description**h]j7 )}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj8ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chK{hj8ubh)}(h*For now just memset the structure to zero.h]h*For now just memset the structure to zero.}(hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKzhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ttm_lru_bulk_move_fini (C function)c.ttm_lru_bulk_move_finihNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj:9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj69hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKubj)}(h h]h }(hjI9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj69hhhjH9hKubj)}(httm_lru_bulk_move_finih]j)}(httm_lru_bulk_move_finih]httm_lru_bulk_move_fini}(hj[9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj69hhhjH9hKubj>)}(h9(struct ttm_device *bdev, struct ttm_lru_bulk_move *bulk)h](jD)}(hstruct ttm_device *bdevh](j)}(hj? h]hstruct}(hjw9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs9ubh)}(hhh]j)}(h ttm_deviceh]h ttm_device}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj9modnameN classnameNjj)}j]j)}j}j]9sbc.ttm_lru_bulk_move_finiasbuh1hhjs9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs9ubj)}(hbdevh]hbdev}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjo9ubjD)}(hstruct ttm_lru_bulk_move *bulkh](j)}(hj? h]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(httm_lru_bulk_moveh]httm_lru_bulk_move}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj :modnameN classnameNjj)}j]j9c.ttm_lru_bulk_move_finiasbuh1hhj9ubj)}(h h]h }(hj%:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]h*}(hj3:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hbulkh]hbulk}(hj@:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjo9ubeh}(h]h ]h"]h$]h&]jjuh1j=hj69hhhjH9hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj29hhhjH9hKubah}(h]j-9ah ](jjeh"]h$]h&]j j )j huh1jhjH9hKhj/9hhubj )}(hhh]h)}(hfinalize a bulk move structureh]hfinalize a bulk move structure}(hjj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhjg:hhubah}(h]h ]h"]h$]h&]uh1j hj/9hhhjH9hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j:j( j:j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj:ubjM )}(hhh](jR )}(h2``struct ttm_device *bdev`` The struct ttm_device h](jX )}(h``struct ttm_device *bdev``h]j^ )}(hj:h]hstruct ttm_device *bdev}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj:ubjt )}(hhh]h)}(hThe struct ttm_deviceh]hThe struct ttm_device}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj:ubah}(h]h ]h"]h$]h&]uh1js hj:ubeh}(h]h ]h"]h$]h&]uh1jQ hj:hKhj:ubjR )}(h=``struct ttm_lru_bulk_move *bulk`` the structure to finalize h](jX )}(h"``struct ttm_lru_bulk_move *bulk``h]j^ )}(hj:h]hstruct ttm_lru_bulk_move *bulk}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj:ubjt )}(hhh]h)}(hthe structure to finalizeh]hthe structure to finalize}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj:ubah}(h]h ]h"]h$]h&]uh1js hj:ubeh}(h]h ]h"]h$]h&]uh1jQ hj:hKhj:ubeh}(h]h ]h"]h$]h&]uh1jL hj:ubh)}(h**Description**h]j7 )}(hj;h]h Description}(hj!;hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj:ubh)}(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.}(hj5;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ttm_lru_bulk_move_tail (C function)c.ttm_lru_bulk_move_tailhNtauh1jhjhhhNhNubj)}(hhh](j)}(h)}(h (struct ttm_lru_bulk_move *bulk)h]jD)}(hstruct ttm_lru_bulk_move *bulkh](j)}(hj? h]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(httm_lru_bulk_moveh]httm_lru_bulk_move}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj;modnameN classnameNjj)}j]j)}j}j;sbc.ttm_lru_bulk_move_tailasbuh1hhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hbulkh]hbulk}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubah}(h]h ]h"]h$]h&]jjuh1j=hj`;hhhjr;hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\;hhhjr;hKubah}(h]jW;ah ](jjeh"]h$]h&]j j )j huh1jhjr;hKhjY;hhubj )}(hhh]h)}(h-bulk move range of resources to the LRU tail.h]h-bulk move range of resources to the LRU tail.}(hj$<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj!<hhubah}(h]h ]h"]h$]h&]uh1j hjY;hhhjr;hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j<<j( j<<j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjF<h]h Parameters}(hjH<hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjD<ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj@<ubjM )}(hhh]jR )}(h7``struct ttm_lru_bulk_move *bulk`` bulk move structure h](jX )}(h"``struct ttm_lru_bulk_move *bulk``h]j^ )}(hje<h]hstruct ttm_lru_bulk_move *bulk}(hjg<hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjc<ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj_<ubjt )}(hhh]h)}(hbulk move structureh]hbulk move structure}(hj~<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz<hKhj{<ubah}(h]h ]h"]h$]h&]uh1js hj_<ubeh}(h]h ]h"]h$]h&]uh1jQ hjz<hKhj\<ubah}(h]h ]h"]h$]h&]uh1jL hj@<ubh)}(h**Description**h]j7 )}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj<ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj@<ubh)}(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 }(hj<hhhNhNubh)}(h*:c:type:`ttm_device.lru_lock `h]j^ )}(hj<h]httm_device.lru_lock}(hj<hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j ttm_deviceuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chKhj<ubh held.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hKhj@<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_resource_init (C function)c.ttm_resource_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMMubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj=hMMubj)}(httm_resource_inith]j)}(httm_resource_inith]httm_resource_init}(hj)=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhj=hMMubj>)}(hW(struct ttm_buffer_object *bo, const struct ttm_place *place, struct ttm_resource *res)h](jD)}(hstruct ttm_buffer_object *boh](j)}(hj? h]hstruct}(hjE=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA=ubj)}(h h]h }(hjR=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA=ubh)}(hhh]j)}(httm_buffer_objecth]httm_buffer_object}(hjc=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`=ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetje=modnameN classnameNjj)}j]j)}j}j+=sbc.ttm_resource_initasbuh1hhjA=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA=ubj)}(hboh]hbo}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj==ubjD)}(hconst struct ttm_place *placeh](j)}(hjJh]hconst}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hj? h]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j)}(h ttm_placeh]h ttm_place}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj=modnameN classnameNjj)}j]j=c.ttm_resource_initasbuh1hhj=ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hplaceh]hplace}(hj)>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj==ubjD)}(hstruct ttm_resource *resh](j)}(hj? h]hstruct}(hjB>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>>ubj)}(h h]h }(hjO>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>>ubh)}(hhh]j)}(h ttm_resourceh]h ttm_resource}(hj`>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]>ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjb>modnameN classnameNjj)}j]j=c.ttm_resource_initasbuh1hhj>>ubj)}(h h]h }(hj~>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>>ubj)}(hresh]hres}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj==ubeh}(h]h ]h"]h$]h&]jjuh1j=hj=hhhj=h'MMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj=hhhj=hMMubah}(h]j<ah ](jjeh"]h$]h&]j j )j huh1jhj=hMMhj<hhubj )}(hhh]h)}(hresource object constructorh]hresource object constructor}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMMhj>hhubah}(h]h ]h"]h$]h&]uh1j hj<hhhj=hMMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j>j( j>j) j* j+ uh1jhhhjhNhNubj- )}(hX8**Parameters** ``struct ttm_buffer_object *bo`` buffer object this resource is allocated for ``const struct ttm_place *place`` placement of the resource ``struct ttm_resource *res`` the resource object to initialize **Description** Initialize a new resource object. Counterpart of ttm_resource_fini().h](h)}(h**Parameters**h]j7 )}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj>ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMQhj>ubjM )}(hhh](jR )}(hN``struct ttm_buffer_object *bo`` buffer object this resource is allocated for h](jX )}(h ``struct ttm_buffer_object *bo``h]j^ )}(hj?h]hstruct ttm_buffer_object *bo}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMNhj>ubjt )}(hhh]h)}(h,buffer object this resource is allocated forh]h,buffer object this resource is allocated for}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMNhj?ubah}(h]h ]h"]h$]h&]uh1js hj>ubeh}(h]h ]h"]h$]h&]uh1jQ hj?hMNhj>ubjR )}(h<``const struct ttm_place *place`` placement of the resource h](jX )}(h!``const struct ttm_place *place``h]j^ )}(hj=?h]hconst struct ttm_place *place}(hj??hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj;?ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMOhj7?ubjt )}(hhh]h)}(hplacement of the resourceh]hplacement of the resource}(hjV?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR?hMOhjS?ubah}(h]h ]h"]h$]h&]uh1js hj7?ubeh}(h]h ]h"]h$]h&]uh1jQ hjR?hMOhj>ubjR )}(h?``struct ttm_resource *res`` the resource object to initialize h](jX )}(h``struct ttm_resource *res``h]j^ )}(hjv?h]hstruct ttm_resource *res}(hjx?hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjt?ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMPhjp?ubjt )}(hhh]h)}(h!the resource object to initializeh]h!the resource object to initialize}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMPhj?ubah}(h]h ]h"]h$]h&]uh1js hjp?ubeh}(h]h ]h"]h$]h&]uh1jQ hj?hMPhj>ubeh}(h]h ]h"]h$]h&]uh1jL hj>ubh)}(h**Description**h]j7 )}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj?ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMRhj>ubh)}(hEInitialize a new resource object. Counterpart of ttm_resource_fini().h]hEInitialize a new resource object. Counterpart of ttm_resource_fini().}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMQhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_resource_fini (C function)c.ttm_resource_finihNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMpubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj@hMpubj)}(httm_resource_finih]j)}(httm_resource_finih]httm_resource_fini}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhj@hMpubj>)}(h<(struct ttm_resource_manager *man, struct ttm_resource *res)h](jD)}(h struct ttm_resource_manager *manh](j)}(hj? h]hstruct}(hj3@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/@ubj)}(h h]h }(hj@@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/@ubh)}(hhh]j)}(httm_resource_managerh]httm_resource_manager}(hjQ@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN@ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjS@modnameN classnameNjj)}j]j)}j}j@sbc.ttm_resource_finiasbuh1hhj/@ubj)}(h h]h }(hjq@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/@ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/@ubj)}(hmanh]hman}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj+@ubjD)}(hstruct ttm_resource *resh](j)}(hj? h]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(h ttm_resourceh]h ttm_resource}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj@modnameN classnameNjj)}j]jm@c.ttm_resource_finiasbuh1hhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hresh]hres}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj+@ubeh}(h]h ]h"]h$]h&]jjuh1j=hj?hhhj@hMpubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhj@hMpubah}(h]j?ah ](jjeh"]h$]h&]j j )j huh1jhj@hMphj?hhubj )}(hhh]h)}(hresource destructorh]hresource destructor}(hj&AhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMphj#Ahhubah}(h]h ]h"]h$]h&]uh1j hj?hhhj@hMpubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j>Aj( j>Aj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjHAh]h Parameters}(hjJAhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjFAubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMthjBAubjM )}(hhh](jR )}(hS``struct ttm_resource_manager *man`` the resource manager this resource belongs to h](jX )}(h$``struct ttm_resource_manager *man``h]j^ )}(hjgAh]h struct ttm_resource_manager *man}(hjiAhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjeAubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMqhjaAubjt )}(hhh]h)}(h-the resource manager this resource belongs toh]h-the resource manager this resource belongs to}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|AhMqhj}Aubah}(h]h ]h"]h$]h&]uh1js hjaAubeh}(h]h ]h"]h$]h&]uh1jQ hj|AhMqhj^AubjR )}(h6``struct ttm_resource *res`` the resource to clean up h](jX )}(h``struct ttm_resource *res``h]j^ )}(hjAh]hstruct ttm_resource *res}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjAubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMrhjAubjt )}(hhh]h)}(hthe resource to clean uph]hthe resource to clean up}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMrhjAubah}(h]h ]h"]h$]h&]uh1js hjAubeh}(h]h ]h"]h$]h&]uh1jQ hjAhMrhj^Aubeh}(h]h ]h"]h$]h&]uh1jL hjBAubh)}(h**Description**h]j7 )}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjAubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMthjBAubh)}(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().}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMshjBAubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ttm_resource_manager_init (C function)c.ttm_resource_manager_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMubj)}(h h]h }(hj/BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhj.BhMubj)}(httm_resource_manager_inith]j)}(httm_resource_manager_inith]httm_resource_manager_init}(hjABhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Bubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhj.BhMubj>)}(hJ(struct ttm_resource_manager *man, struct ttm_device *bdev, uint64_t size)h](jD)}(h struct ttm_resource_manager *manh](j)}(hj? h]hstruct}(hj]BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubj)}(h h]h }(hjjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubh)}(hhh]j)}(httm_resource_managerh]httm_resource_manager}(hj{BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxBubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj}BmodnameN classnameNjj)}j]j)}j}jCBsbc.ttm_resource_manager_initasbuh1hhjYBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubj)}(hmanh]hman}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjUBubjD)}(hstruct ttm_device *bdevh](j)}(hj? h]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(h ttm_deviceh]h ttm_device}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjBmodnameN classnameNjj)}j]jBc.ttm_resource_manager_initasbuh1hhjBubj)}(h h]h }(hj ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hbdevh]hbdev}(hj&ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjUBubjD)}(h uint64_t sizeh](h)}(hhh]j)}(huint64_th]huint64_t}(hjBChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Cubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjDCmodnameN classnameNjj)}j]jBc.ttm_resource_manager_initasbuh1hhj;Cubj)}(h h]h }(hj`ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Cubj)}(hsizeh]hsize}(hjnChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Cubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjUBubeh}(h]h ]h"]h$]h&]jjuh1j=hjBhhhj.BhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhj.BhMubah}(h]jBah ](jjeh"]h$]h&]j j )j huh1jhj.BhMhjBhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjBhhhj.BhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jCj( jCj) j* j+ uh1jhhhjhNhNubj- )}(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** Initialize core parts of a manager object.h](h)}(h**Parameters**h]j7 )}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjCubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjCubjM )}(hhh](jR )}(hC``struct ttm_resource_manager *man`` memory manager object to init h](jX )}(h$``struct ttm_resource_manager *man``h]j^ )}(hjCh]h struct ttm_resource_manager *man}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjCubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjCubjt )}(hhh]h)}(hmemory manager object to inith]hmemory manager object to init}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1js hjCubeh}(h]h ]h"]h$]h&]uh1jQ hjChMhjCubjR )}(h?``struct ttm_device *bdev`` ttm device this manager belongs to h](jX )}(h``struct ttm_device *bdev``h]j^ )}(hjDh]hstruct ttm_device *bdev}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjCubjt )}(hhh]h)}(h"ttm device this manager belongs toh]h"ttm device this manager belongs to}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1js hjCubeh}(h]h ]h"]h$]h&]uh1jQ hjDhMhjCubjR )}(h?``uint64_t size`` size of managed resources in arbitrary units h](jX )}(h``uint64_t size``h]j^ )}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj:Dubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhj6Dubjt )}(hhh]h)}(h,size of managed resources in arbitrary unitsh]h,size of managed resources in arbitrary units}(hjUDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQDhMhjRDubah}(h]h ]h"]h$]h&]uh1js hj6Dubeh}(h]h ]h"]h$]h&]uh1jQ hjQDhMhjCubeh}(h]h ]h"]h$]h&]uh1jL hjCubh)}(h**Description**h]j7 )}(hjwDh]h Description}(hjyDhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjuDubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjCubh)}(h*Initialize core parts of a manager object.h]h*Initialize core parts of a manager object.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'ttm_resource_manager_usage (C function)c.ttm_resource_manager_usagehNtauh1jhjhhhNhNubj)}(hhh](j)}(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]j)}(huint64_th]huint64_t}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjDmodnameN classnameNjj)}j]j)}j}ttm_resource_manager_usagesbc.ttm_resource_manager_usageasbuh1hhjDhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMVubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjDhMVubj)}(httm_resource_manager_usageh]j)}(hjDh]httm_resource_manager_usage}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjDhMVubj>)}(h"(struct ttm_resource_manager *man)h]jD)}(h struct ttm_resource_manager *manh](j)}(hj? h]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubh)}(hhh]j)}(httm_resource_managerh]httm_resource_manager}(hj,EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Eubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj.EmodnameN classnameNjj)}j]jDc.ttm_resource_manager_usageasbuh1hhj Eubj)}(h h]h }(hjJEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubj)}(hjh]h*}(hjXEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubj)}(hmanh]hman}(hjeEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjEubah}(h]h ]h"]h$]h&]jjuh1j=hjDhhhjDhMVubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjDhMVubah}(h]jDah ](jjeh"]h$]h&]j j )j huh1jhjDhMVhjDhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjDhhhjDhMVubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jEj( jEj) j* j+ uh1jhhhjhNhNubj- )}(h**Parameters** ``struct ttm_resource_manager *man`` A memory manager object. **Description** Return how many resources are currently used.h](h)}(h**Parameters**h]j7 )}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjEubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMZhjEubjM )}(hhh]jR )}(h>``struct ttm_resource_manager *man`` A memory manager object. h](jX )}(h$``struct ttm_resource_manager *man``h]j^ )}(hjEh]h struct ttm_resource_manager *man}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMXhjEubjt )}(hhh]h)}(hA memory manager object.h]hA memory manager object.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMXhjEubah}(h]h ]h"]h$]h&]uh1js hjEubeh}(h]h ]h"]h$]h&]uh1jQ hjEhMXhjEubah}(h]h ]h"]h$]h&]uh1jL hjEubh)}(h**Description**h]j7 )}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjEubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMZhjEubh)}(h-Return how many resources are currently used.h]h-Return how many resources are currently used.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMWhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'ttm_resource_manager_debug (C function)c.ttm_resource_manager_debughNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjAFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Fhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMkubj)}(h h]h }(hjPFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=FhhhjOFhMkubj)}(httm_resource_manager_debugh]j)}(httm_resource_manager_debugh]httm_resource_manager_debug}(hjbFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Fubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=FhhhjOFhMkubj>)}(h9(struct ttm_resource_manager *man, struct drm_printer *p)h](jD)}(h struct ttm_resource_manager *manh](j)}(hj? h]hstruct}(hj~FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzFubh)}(hhh]j)}(httm_resource_managerh]httm_resource_manager}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjFmodnameN classnameNjj)}j]j)}j}jdFsbc.ttm_resource_manager_debugasbuh1hhjzFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzFubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzFubj)}(hmanh]hman}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzFubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjvFubjD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Gubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjGmodnameN classnameNjj)}j]jFc.ttm_resource_manager_debugasbuh1hhjFubj)}(h h]h }(hj,GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]h*}(hj:GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]hp}(hjGGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjvFubeh}(h]h ]h"]h$]h&]jjuh1j=hj=FhhhjOFhMkubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9FhhhjOFhMkubah}(h]j4Fah ](jjeh"]h$]h&]j j )j huh1jhjOFhMkhj6Fhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj6FhhhjOFhMkubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jyGj( jyGj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjGubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMohj}GubjM )}(hhh](jR )}(h;``struct ttm_resource_manager *man`` manager type to dump. h](jX )}(h$``struct ttm_resource_manager *man``h]j^ )}(hjGh]h struct ttm_resource_manager *man}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjGubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMmhjGubjt )}(hhh]h)}(hmanager type to dump.h]hmanager type to dump.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMmhjGubah}(h]h ]h"]h$]h&]uh1js hjGubeh}(h]h ]h"]h$]h&]uh1jQ hjGhMmhjGubjR )}(h3``struct drm_printer *p`` printer to use for debug.h](jX )}(h``struct drm_printer *p``h]j^ )}(hjGh]hstruct drm_printer *p}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjGubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMohjGubjt )}(hhh]h)}(hprinter to use for debug.h]hprinter to use for debug.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMnhjGubah}(h]h ]h"]h$]h&]uh1js hjGubeh}(h]h ]h"]h$]h&]uh1jQ hjGhMohjGubeh}(h]h ]h"]h$]h&]uh1jL hj}Gubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ttm_kmap_iter_iomap_init (C function)c.ttm_kmap_iter_iomap_inithNtauh1jhjhhhNhNubj)}(hhh](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]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](j)}(hj? h]hstruct}(hj5HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Hhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chM ubj)}(h h]h }(hjCHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1HhhhjBHhM ubh)}(hhh]j)}(h ttm_kmap_iterh]h ttm_kmap_iter}(hjTHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQHubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjVHmodnameN classnameNjj)}j]j)}j}ttm_kmap_iter_iomap_initsbc.ttm_kmap_iter_iomap_initasbuh1hhj1HhhhjBHhM ubj)}(h h]h }(hjuHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1HhhhjBHhM ubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1HhhhjBHhM ubj)}(httm_kmap_iter_iomap_inith]j)}(hjrHh]httm_kmap_iter_iomap_init}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1HhhhjBHhM ubj>)}(hk(struct ttm_kmap_iter_iomap *iter_io, struct io_mapping *iomap, struct sg_table *st, resource_size_t start)h](jD)}(h#struct ttm_kmap_iter_iomap *iter_ioh](j)}(hj? h]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(httm_kmap_iter_iomaph]httm_kmap_iter_iomap}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjHmodnameN classnameNjj)}j]jpHc.ttm_kmap_iter_iomap_initasbuh1hhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hiter_ioh]hiter_io}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjHubjD)}(hstruct io_mapping *iomaph](j)}(hj? h]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hj,IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(h io_mappingh]h io_mapping}(hj=IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Iubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj?ImodnameN classnameNjj)}j]jpHc.ttm_kmap_iter_iomap_initasbuh1hhjIubj)}(h h]h }(hj[IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]h*}(hjiIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hiomaph]hiomap}(hjvIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjHubjD)}(hstruct sg_table *sth](j)}(hj? h]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjImodnameN classnameNjj)}j]jpHc.ttm_kmap_iter_iomap_initasbuh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hsth]hst}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjHubjD)}(hresource_size_t starth](h)}(hhh]j)}(hresource_size_th]hresource_size_t}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjJmodnameN classnameNjj)}j]jpHc.ttm_kmap_iter_iomap_initasbuh1hhjIubj)}(h h]h }(hj JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hstarth]hstart}(hj.JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjHubeh}(h]h ]h"]h$]h&]jjuh1j=hj1HhhhjBHhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-HhhhjBHhM ubah}(h]j(Hah ](jjeh"]h$]h&]j j )j huh1jhjBHhM hj*Hhhubj )}(hhh]h)}(h'Initialize a struct ttm_kmap_iter_iomaph]h'Initialize a struct ttm_kmap_iter_iomap}(hjXJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chM hjUJhhubah}(h]h ]h"]h$]h&]uh1j hj*HhhhjBHhM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jpJj( jpJj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjzJh]h Parameters}(hj|JhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjxJubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjtJubjM )}(hhh](jR )}(hV``struct ttm_kmap_iter_iomap *iter_io`` The struct ttm_kmap_iter_iomap to initialize. h](jX )}(h'``struct ttm_kmap_iter_iomap *iter_io``h]j^ )}(hjJh]h#struct ttm_kmap_iter_iomap *iter_io}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chM hjJubjt )}(hhh]h)}(h-The struct ttm_kmap_iter_iomap to initialize.h]h-The struct ttm_kmap_iter_iomap to initialize.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM hjJubah}(h]h ]h"]h$]h&]uh1js hjJubeh}(h]h ]h"]h$]h&]uh1jQ hjJhM hjJubjR )}(ha``struct io_mapping *iomap`` The struct io_mapping representing the underlying linear io_memory. h](jX )}(h``struct io_mapping *iomap``h]j^ )}(hjJh]hstruct io_mapping *iomap}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjJubjt )}(hhh]h)}(hCThe struct io_mapping representing the underlying linear io_memory.h]hCThe struct io_mapping representing the underlying linear io_memory.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1js hjJubeh}(h]h ]h"]h$]h&]uh1jQ hjJhMhjJubjR )}(he``struct sg_table *st`` sg_table into **iomap**, representing the memory of the struct ttm_resource. h](jX )}(h``struct sg_table *st``h]j^ )}(hj Kh]hstruct sg_table *st}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj Kubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjKubjt )}(hhh]h)}(hLsg_table into **iomap**, representing the memory of the struct ttm_resource.h](hsg_table into }(hj$KhhhNhNubj7 )}(h **iomap**h]hiomap}(hj,KhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj$Kubh5, representing the memory of the struct ttm_resource.}(hj$KhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhj!Kubah}(h]h ]h"]h$]h&]uh1js hjKubeh}(h]h ]h"]h$]h&]uh1jQ hj KhMhjJubjR )}(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](jX )}(h``resource_size_t start``h]j^ )}(hjWKh]hresource_size_t start}(hjYKhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjUKubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjQKubjt )}(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 }(hjpKhhhNhNubj7 )}(h**st**h]hst}(hjxKhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjpKubh# to make sg_dma_address(st->sgl) - }(hjpKhhhNhNubj7 )}(h **start**h]hstart}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjpKubh == 0 for }(hjpKhhhNhNubj7 )}(h **iomap**h]hiomap}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjpKubh start.}(hjpKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjmKubah}(h]h ]h"]h$]h&]uh1js hjQKubeh}(h]h ]h"]h$]h&]uh1jQ hjlKhMhjJubeh}(h]h ]h"]h$]h&]uh1jL hjtJubh)}(h **Return**h]j7 )}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjKubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjtJubh)}(h-Pointer to the embedded struct ttm_kmap_iter.h]h-Pointer to the embedded struct ttm_kmap_iter.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjtJubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j0ttm_resource_manager_create_debugfs (C function)%c.ttm_resource_manager_create_debugfshNtauh1jhjhhhNhNubj)}(hhh](j)}(htvoid 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](j)}(hvoidh]hvoid}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Lhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj LhhhjLhMubj)}(h#ttm_resource_manager_create_debugfsh]j)}(h#ttm_resource_manager_create_debugfsh]h#ttm_resource_manager_create_debugfs}(hj/LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+Lubah}(h]h ](jjeh"]h$]h&]jjuh1jhj LhhhjLhMubj>)}(hK(struct ttm_resource_manager *man, struct dentry *parent, const char *name)h](jD)}(h struct ttm_resource_manager *manh](j)}(hj? h]hstruct}(hjKLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubj)}(h h]h }(hjXLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubh)}(hhh]j)}(httm_resource_managerh]httm_resource_manager}(hjiLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfLubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkLmodnameN classnameNjj)}j]j)}j}j1Lsb%c.ttm_resource_manager_create_debugfsasbuh1hhjGLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubj)}(hmanh]hman}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjCLubjD)}(hstruct dentry *parenth](j)}(hj? h]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdentryh]hdentry}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjLmodnameN classnameNjj)}j]jL%c.ttm_resource_manager_create_debugfsasbuh1hhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hparenth]hparent}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjCLubjD)}(hconst char *nameh](j)}(hjJh]hconst}(hj-MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Mubj)}(h h]h }(hj:MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Mubj)}(hcharh]hchar}(hjHMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Mubj)}(h h]h }(hjVMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Mubj)}(hjh]h*}(hjdMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Mubj)}(hnameh]hname}(hjqMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Mubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjCLubeh}(h]h ]h"]h$]h&]jjuh1j=hj LhhhjLhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjLhhhjLhMubah}(h]jLah ](jjeh"]h$]h&]j j )j huh1jhjLhMhjLhhubj )}(hhh]h)}(h4Create debugfs entry for specified resource manager.h]h4Create debugfs entry for specified resource manager.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjMhhubah}(h]h ]h"]h$]h&]uh1j hjLhhhjLhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jMj( jMj) j* j+ uh1jhhhjhNhNubj- )}(hX**Parameters** ``struct ttm_resource_manager *man`` The TTM resource manager for which the debugfs stats file to be created ``struct dentry *parent`` debugfs directory in which the file will reside ``const char *name`` The filename to create. **Description** This function sets up a debugfs file that can be used to look at debug statistics of the specified ttm_resource_manager.h](h)}(h**Parameters**h]j7 )}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjMubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjMubjM )}(hhh](jR )}(hm``struct ttm_resource_manager *man`` The TTM resource manager for which the debugfs stats file to be created h](jX )}(h$``struct ttm_resource_manager *man``h]j^ )}(hjMh]h struct ttm_resource_manager *man}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjMubjt )}(hhh]h)}(hGThe TTM resource manager for which the debugfs stats file to be createdh]hGThe TTM resource manager for which the debugfs stats file to be created}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1js hjMubeh}(h]h ]h"]h$]h&]uh1jQ hjMhMhjMubjR )}(hJ``struct dentry *parent`` debugfs directory in which the file will reside h](jX )}(h``struct dentry *parent``h]j^ )}(hjNh]hstruct dentry *parent}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjNubjt )}(hhh]h)}(h/debugfs directory in which the file will resideh]h/debugfs directory in which the file will reside}(hj.NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*NhMhj+Nubah}(h]h ]h"]h$]h&]uh1js hjNubeh}(h]h ]h"]h$]h&]uh1jQ hj*NhMhjMubjR )}(h-``const char *name`` The filename to create. h](jX )}(h``const char *name``h]j^ )}(hjNNh]hconst char *name}(hjPNhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLNubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjHNubjt )}(hhh]h)}(hThe filename to create.h]hThe filename to create.}(hjgNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcNhMhjdNubah}(h]h ]h"]h$]h&]uh1js hjHNubeh}(h]h ]h"]h$]h&]uh1jQ hjcNhMhjMubeh}(h]h ]h"]h$]h&]uh1jL hjMubh)}(h**Description**h]j7 )}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjMubh)}(hxThis function sets up a debugfs file that can be used to look at debug statistics of the specified ttm_resource_manager.h]hxThis function sets up a debugfs file that can be used to look at debug statistics of the specified ttm_resource_manager.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:60: ./drivers/gpu/drm/ttm/ttm_resource.chMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubeh}(h]jah ]h"]ttm resource object referenceah$]h&]uh1hhjMhhhhhK7ubh)}(hhh](h)}(hTTM TT object referenceh]hTTM TT object reference}(hjNhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjNhhhhhK@ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_tt (C struct)c.ttm_tthNtauh1jhjNhhhNhNubj)}(hhh](j)}(httm_tth]j)}(h struct ttm_tth](j)}(hj? h]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhjNhKubj)}(httm_tth]j)}(hjNh]httm_tt}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNhhhjNhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjNhhhjNhKubah}(h]jNah ](jjeh"]h$]h&]j j )j huh1jhjNhKhjNhhubj )}(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.}(hj(OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK,hj%Ohhubah}(h]h ]h"]h$]h&]uh1j hjNhhhjNhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j@Oj( j@Oj) j* j+ uh1jhhhjNhNhNubj- )}(hX **Definition**:: struct ttm_tt { struct page **pages; #define TTM_TT_FLAG_SWAPPED BIT(0); #define TTM_TT_FLAG_ZERO_ALLOC BIT(1); #define TTM_TT_FLAG_EXTERNAL BIT(2); #define TTM_TT_FLAG_EXTERNAL_MAPPABLE BIT(3); #define TTM_TT_FLAG_DECRYPTED BIT(4); #define TTM_TT_FLAG_BACKED_UP BIT(5); #define TTM_TT_FLAG_PRIV_POPULATED BIT(6); uint32_t page_flags; uint32_t num_pages; struct sg_table *sg; dma_addr_t *dma_address; struct file *swap_storage; struct file *backup; enum ttm_caching caching; struct ttm_pool_tt_restore *restore; }; **Members** ``pages`` Array of pages backing the data. ``page_flags`` The page flags. Supported values: TTM_TT_FLAG_SWAPPED: Set by TTM when the pages have been unpopulated and swapped out by TTM. Calling ttm_tt_populate() will then swap the pages back in, and unset the flag. Drivers should in general never need to touch this. TTM_TT_FLAG_ZERO_ALLOC: Set if the pages will be zeroed on allocation. TTM_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. Note that enum ttm_bo_type.ttm_bo_type_sg objects will always enable this flag. TTM_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). Note that since this also implies TTM_TT_FLAG_EXTERNAL, the usage here should always be: page_flags = TTM_TT_FLAG_EXTERNAL | TTM_TT_FLAG_EXTERNAL_MAPPABLE; 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. TTM_TT_FLAG_BACKED_UP: TTM internal only. This is set if the struct ttm_tt has been (possibly partially) backed up. TTM_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(). ``num_pages`` Number of pages in the page array. ``sg`` for SG objects via dma-buf. ``dma_address`` The DMA (bus) addresses of the pages. ``swap_storage`` Pointer to shmem struct file for swap storage. ``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. ``caching`` The current caching state of the pages, see enum ttm_caching. ``restore`` Partial restoration from backup state. TTM privateh](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjLOhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjHOubh:}(hjHOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK0hjDOubj )}(hXastruct ttm_tt { struct page **pages; #define TTM_TT_FLAG_SWAPPED BIT(0); #define TTM_TT_FLAG_ZERO_ALLOC BIT(1); #define TTM_TT_FLAG_EXTERNAL BIT(2); #define TTM_TT_FLAG_EXTERNAL_MAPPABLE BIT(3); #define TTM_TT_FLAG_DECRYPTED BIT(4); #define TTM_TT_FLAG_BACKED_UP BIT(5); #define TTM_TT_FLAG_PRIV_POPULATED BIT(6); uint32_t page_flags; uint32_t num_pages; struct sg_table *sg; dma_addr_t *dma_address; struct file *swap_storage; struct file *backup; enum ttm_caching caching; struct ttm_pool_tt_restore *restore; };h]hXastruct ttm_tt { struct page **pages; #define TTM_TT_FLAG_SWAPPED BIT(0); #define TTM_TT_FLAG_ZERO_ALLOC BIT(1); #define TTM_TT_FLAG_EXTERNAL BIT(2); #define TTM_TT_FLAG_EXTERNAL_MAPPABLE BIT(3); #define TTM_TT_FLAG_DECRYPTED BIT(4); #define TTM_TT_FLAG_BACKED_UP BIT(5); #define TTM_TT_FLAG_PRIV_POPULATED BIT(6); uint32_t page_flags; uint32_t num_pages; struct sg_table *sg; dma_addr_t *dma_address; struct file *swap_storage; struct file *backup; enum ttm_caching caching; struct ttm_pool_tt_restore *restore; };}hjeOsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK2hjDOubh)}(h **Members**h]j7 )}(hjvOh]hMembers}(hjxOhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjtOubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKEhjDOubjM )}(hhh](jR )}(h+``pages`` Array of pages backing the data. h](jX )}(h ``pages``h]j^ )}(hjOh]hpages}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjOubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK2hjOubjt )}(hhh]h)}(h Array of pages backing the data.h]h Array of pages backing the data.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhK2hjOubah}(h]h ]h"]h$]h&]uh1js hjOubeh}(h]h ]h"]h$]h&]uh1jQ hjOhK2hjOubjR )}(hX``page_flags`` The page flags. Supported values: TTM_TT_FLAG_SWAPPED: Set by TTM when the pages have been unpopulated and swapped out by TTM. Calling ttm_tt_populate() will then swap the pages back in, and unset the flag. Drivers should in general never need to touch this. TTM_TT_FLAG_ZERO_ALLOC: Set if the pages will be zeroed on allocation. TTM_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. Note that enum ttm_bo_type.ttm_bo_type_sg objects will always enable this flag. TTM_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). Note that since this also implies TTM_TT_FLAG_EXTERNAL, the usage here should always be: page_flags = TTM_TT_FLAG_EXTERNAL | TTM_TT_FLAG_EXTERNAL_MAPPABLE; 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. TTM_TT_FLAG_BACKED_UP: TTM internal only. This is set if the struct ttm_tt has been (possibly partially) backed up. TTM_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](jX )}(h``page_flags``h]j^ )}(hjOh]h page_flags}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjOubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK`hjOubjt )}(hhh](h)}(hThe page flags.h]hThe page flags.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK5hjOubh)}(hSupported values:h]hSupported values:}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK7hjOubh)}(hTTM_TT_FLAG_SWAPPED: Set by TTM when the pages have been unpopulated and swapped out by TTM. Calling ttm_tt_populate() will then swap the pages back in, and unset the flag. Drivers should in general never need to touch this.h]hTTM_TT_FLAG_SWAPPED: Set by TTM when the pages have been unpopulated and swapped out by TTM. Calling ttm_tt_populate() will then swap the pages back in, and unset the flag. Drivers should in general never need to touch this.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK9hjOubh)}(hFTTM_TT_FLAG_ZERO_ALLOC: Set if the pages will be zeroed on allocation.h]hFTTM_TT_FLAG_ZERO_ALLOC: Set if the pages will be zeroed on allocation.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK>hjOubh)}(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.}(hj#PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKAhjOubh)}(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.}(hj2PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKFhjOubh)}(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).}(hjAPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKIhjOubh)}(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:}(hjPPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKOhjOubj )}(hPpage_flags = TTM_TT_FLAG_EXTERNAL | TTM_TT_FLAG_EXTERNAL_MAPPABLE; h]jM )}(hhh]jR )}(hCpage_flags = TTM_TT_FLAG_EXTERNAL | TTM_TT_FLAG_EXTERNAL_MAPPABLE; h](jX )}(h#page_flags = TTM_TT_FLAG_EXTERNAL |h]h#page_flags = TTM_TT_FLAG_EXTERNAL |}(hjjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKShjfPubjt )}(hhh]h)}(hTTM_TT_FLAG_EXTERNAL_MAPPABLE;h]hTTM_TT_FLAG_EXTERNAL_MAPPABLE;}(hj|PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxPhKShjyPubah}(h]h ]h"]h$]h&]uh1js hjfPubeh}(h]h ]h"]h$]h&]uh1jQ hjxPhKShjcPubah}(h]h ]h"]h$]h&]uh1jL hj_Pubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKRhjOubh)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKUhjOubh)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK[hjOubh)}(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().}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK^hjOubeh}(h]h ]h"]h$]h&]uh1js hjOubeh}(h]h ]h"]h$]h&]uh1jQ hjOhK`hjOubjR )}(h1``num_pages`` Number of pages in the page array. h](jX )}(h ``num_pages``h]j^ )}(hjPh]h num_pages}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjPubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKlhjPubjt )}(hhh]h)}(h"Number of pages in the page array.h]h"Number of pages in the page array.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhKlhjPubah}(h]h ]h"]h$]h&]uh1js hjPubeh}(h]h ]h"]h$]h&]uh1jQ hjPhKlhjOubjR )}(h#``sg`` for SG objects via dma-buf. h](jX )}(h``sg``h]j^ )}(hjQh]hsg}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKnhjQubjt )}(hhh]h)}(hfor SG objects via dma-buf.h]hfor SG objects via dma-buf.}(hj4QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0QhKnhj1Qubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hj0QhKnhjOubjR )}(h6``dma_address`` The DMA (bus) addresses of the pages. h](jX )}(h``dma_address``h]j^ )}(hjTQh]h dma_address}(hjVQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjRQubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKphjNQubjt )}(hhh]h)}(h%The DMA (bus) addresses of the pages.h]h%The DMA (bus) addresses of the pages.}(hjmQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiQhKphjjQubah}(h]h ]h"]h$]h&]uh1js hjNQubeh}(h]h ]h"]h$]h&]uh1jQ hjiQhKphjOubjR )}(h@``swap_storage`` Pointer to shmem struct file for swap storage. h](jX )}(h``swap_storage``h]j^ )}(hjQh]h swap_storage}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKrhjQubjt )}(hhh]h)}(h.Pointer to shmem struct file for swap storage.h]h.Pointer to shmem struct file for swap storage.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKrhjQubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hjQhKrhjOubjR )}(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](jX )}(h ``backup``h]j^ )}(hjQh]hbackup}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKxhjQubjt )}(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 }(hjQhhhNhNubj7 )}(h**swap_storage**h]h swap_storage}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjQubh]. Meanwhile, the driver’s ttm_tt_create() callback is responsible for assigning this field.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKuhjQubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hjQhKxhjOubjR )}(hJ``caching`` The current caching state of the pages, see enum ttm_caching. h](jX )}(h ``caching``h]j^ )}(hjRh]hcaching}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjRubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK}hj Rubjt )}(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.}(hj+RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhK|hj(Rubah}(h]h ]h"]h$]h&]uh1js hj Rubeh}(h]h ]h"]h$]h&]uh1jQ hj'RhK}hjOubjR )}(h>``restore`` Partial restoration from backup state. TTM privateh](jX )}(h ``restore``h]j^ )}(hjLRh]hrestore}(hjNRhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjJRubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjFRubjt )}(hhh]h)}(h2Partial restoration from backup state. TTM privateh]h2Partial restoration from backup state. TTM private}(hjeRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjbRubah}(h]h ]h"]h$]h&]uh1js hjFRubeh}(h]h ]h"]h$]h&]uh1jQ hjaRhKhjOubeh}(h]h ]h"]h$]h&]uh1jL hjDOubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_kmap_iter_tt (C struct)c.ttm_kmap_iter_tthNtauh1jhjNhhhNhNubj)}(hhh](j)}(httm_kmap_iter_tth]j)}(hstruct ttm_kmap_iter_tth](j)}(hj? h]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhKubj)}(httm_kmap_iter_tth]j)}(hjRh]httm_kmap_iter_tt}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRhhhjRhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRhhhjRhKubah}(h]jRah ](jjeh"]h$]h&]j j )j huh1jhjRhKhjRhhubj )}(hhh]h)}(h-Specialization of a mappig iterator for a tt.h]h-Specialization of a mappig iterator for a tt.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjRhhubah}(h]h ]h"]h$]h&]uh1j hjRhhhjRhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jSj( jSj) j* j+ uh1jhhhjNhNhNubj- )}(hX&**Definition**:: struct ttm_kmap_iter_tt { struct ttm_kmap_iter base; struct ttm_tt *tt; pgprot_t prot; }; **Members** ``base`` Embedded struct ttm_kmap_iter providing the usage interface ``tt`` Cached struct ttm_tt. ``prot`` Cached page protection for mapping.h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjSubh:}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjSubj )}(hestruct ttm_kmap_iter_tt { struct ttm_kmap_iter base; struct ttm_tt *tt; pgprot_t prot; };h]hestruct ttm_kmap_iter_tt { struct ttm_kmap_iter base; struct ttm_tt *tt; pgprot_t prot; };}hj%Ssbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjSubh)}(h **Members**h]j7 )}(hj6Sh]hMembers}(hj8ShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4Subah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjSubjM )}(hhh](jR )}(hE``base`` Embedded struct ttm_kmap_iter providing the usage interface h](jX )}(h``base``h]j^ )}(hjUSh]hbase}(hjWShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSSubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjOSubjt )}(hhh]h)}(h;Embedded struct ttm_kmap_iter providing the usage interfaceh]h;Embedded struct ttm_kmap_iter providing the usage interface}(hjnShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjShKhjkSubah}(h]h ]h"]h$]h&]uh1js hjOSubeh}(h]h ]h"]h$]h&]uh1jQ hjjShKhjLSubjR )}(h``tt`` Cached struct ttm_tt. h](jX )}(h``tt``h]j^ )}(hjSh]htt}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjSubjt )}(hhh]h)}(hCached struct ttm_tt.h]hCached struct ttm_tt.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjSubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjShKhjLSubjR )}(h,``prot`` Cached page protection for mapping.h](jX )}(h``prot``h]j^ )}(hjSh]hprot}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjSubjt )}(hhh]h)}(h#Cached page protection for mapping.h]h#Cached page protection for mapping.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjSubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjShKhjLSubeh}(h]h ]h"]h$]h&]uh1jL hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_tt_is_swapped (C function)c.ttm_tt_is_swappedhNtauh1jhjNhhhNhNubj)}(hhh](j)}(h0bool ttm_tt_is_swapped (const struct ttm_tt *tt)h]j)}(h/bool ttm_tt_is_swapped(const struct ttm_tt *tt)h](j)}(hj=2h]hbool}(hj!ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hj/ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhj.ThKubj)}(httm_tt_is_swappedh]j)}(httm_tt_is_swappedh]httm_tt_is_swapped}(hjAThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Tubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhj.ThKubj>)}(h(const struct ttm_tt *tt)h]jD)}(hconst struct ttm_tt *tth](j)}(hjJh]hconst}(hj]ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYTubj)}(h h]h }(hjjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYTubj)}(hj? h]hstruct}(hjxThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYTubh)}(hhh]j)}(httm_tth]httm_tt}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjTmodnameN classnameNjj)}j]j)}j}jCTsbc.ttm_tt_is_swappedasbuh1hhjYTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYTubj)}(htth]htt}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjUTubah}(h]h ]h"]h$]h&]jjuh1j=hjThhhj.ThKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjThhhj.ThKubah}(h]jTah ](jjeh"]h$]h&]j j )j huh1jhj.ThKhjThhubj )}(hhh]h)}(h.Whether the ttm_tt is swapped out or backed uph]h.Whether the ttm_tt is swapped out or backed up}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjThhubah}(h]h ]h"]h$]h&]uh1j hjThhhj.ThKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jUj( jUj) j* j+ uh1jhhhjNhNhNubj- )}(h|**Parameters** ``const struct ttm_tt *tt`` The struct ttm_tt. **Return** true if swapped or backed up, false otherwise.h](h)}(h**Parameters**h]j7 )}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjUubjM )}(hhh]jR )}(h/``const struct ttm_tt *tt`` The struct ttm_tt. h](jX )}(h``const struct ttm_tt *tt``h]j^ )}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj:Uubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj6Uubjt )}(hhh]h)}(hThe struct ttm_tt.h]hThe struct ttm_tt.}(hjUUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQUhKhjRUubah}(h]h ]h"]h$]h&]uh1js hj6Uubeh}(h]h ]h"]h$]h&]uh1jQ hjQUhKhj3Uubah}(h]h ]h"]h$]h&]uh1jL hjUubh)}(h **Return**h]j7 )}(hjwUh]hReturn}(hjyUhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjuUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjUubh)}(h.true if swapped or backed up, false otherwise.h]h.true if swapped or backed up, false otherwise.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ttm_tt_is_backed_up (C function)c.ttm_tt_is_backed_uphNtauh1jhjNhhhNhNubj)}(hhh](j)}(h2bool ttm_tt_is_backed_up (const struct ttm_tt *tt)h]j)}(h1bool ttm_tt_is_backed_up(const struct ttm_tt *tt)h](j)}(hj=2h]hbool}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhKubj)}(httm_tt_is_backed_uph]j)}(httm_tt_is_backed_uph]httm_tt_is_backed_up}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjUhKubj>)}(h(const struct ttm_tt *tt)h]jD)}(hconst struct ttm_tt *tth](j)}(hjJh]hconst}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hj? h]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hj VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(httm_tth]httm_tt}(hj1VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Vubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj3VmodnameN classnameNjj)}j]j)}j}jUsbc.ttm_tt_is_backed_upasbuh1hhjUubj)}(h h]h }(hjQVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hjh]h*}(hj_VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(htth]htt}(hjlVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjUubah}(h]h ]h"]h$]h&]jjuh1j=hjUhhhjUhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjUhKubah}(h]jUah ](jjeh"]h$]h&]j j )j huh1jhjUhKhjUhhubj )}(hhh]h)}(hWhether the ttm_tt backed uph]hWhether the ttm_tt backed up}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjVhhubah}(h]h ]h"]h$]h&]uh1j hjUhhhjUhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jVj( jVj) j* j+ uh1jhhhjNhNhNubj- )}(h|**Parameters** ``const struct ttm_tt *tt`` The struct ttm_tt. **Return** true if swapped or backed up, false otherwise.h](h)}(h**Parameters**h]j7 )}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjVubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjVubjM )}(hhh]jR )}(h/``const struct ttm_tt *tt`` The struct ttm_tt. h](jX )}(h``const struct ttm_tt *tt``h]j^ )}(hjVh]hconst struct ttm_tt *tt}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjVubjt )}(hhh]h)}(hThe struct ttm_tt.h]hThe struct ttm_tt.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKhjVubah}(h]h ]h"]h$]h&]uh1js hjVubeh}(h]h ]h"]h$]h&]uh1jQ hjVhKhjVubah}(h]h ]h"]h$]h&]uh1jL hjVubh)}(h **Return**h]j7 )}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjWubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjVubh)}(h.true if swapped or backed up, false otherwise.h]h.true if swapped or backed up, false otherwise.}(hj(WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ttm_tt_clear_backed_up (C function)c.ttm_tt_clear_backed_uphNtauh1jhjNhhhNhNubj)}(hhh](j)}(h/void ttm_tt_clear_backed_up (struct ttm_tt *tt)h]j)}(h.void ttm_tt_clear_backed_up(struct ttm_tt *tt)h](j)}(hvoidh]hvoid}(hjWWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSWhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hjfWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSWhhhjeWhKubj)}(httm_tt_clear_backed_uph]j)}(httm_tt_clear_backed_uph]httm_tt_clear_backed_up}(hjxWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtWubah}(h]h ](jjeh"]h$]h&]jjuh1jhjSWhhhjeWhKubj>)}(h(struct ttm_tt *tt)h]jD)}(hstruct ttm_tt *tth](j)}(hj? h]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(httm_tth]httm_tt}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjWmodnameN classnameNjj)}j]j)}j}jzWsbc.ttm_tt_clear_backed_upasbuh1hhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(htth]htt}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjWubah}(h]h ]h"]h$]h&]jjuh1j=hjSWhhhjeWhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOWhhhjeWhKubah}(h]jJWah ](jjeh"]h$]h&]j j )j huh1jhjeWhKhjLWhhubj )}(hhh]h)}(h!Clear the ttm_tt backed-up statush]h!Clear the ttm_tt backed-up status}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjXhhubah}(h]h ]h"]h$]h&]uh1j hjLWhhhjeWhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j/Xj( j/Xj) j* j+ uh1jhhhjNhNhNubj- )}(h**Parameters** ``struct ttm_tt *tt`` The struct ttm_tt. **Description** Drivers can use this functionto clear the backed-up status, for example before destroying or re-validating a purged tt.h](h)}(h**Parameters**h]j7 )}(hj9Xh]h Parameters}(hj;XhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj7Xubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj3XubjM )}(hhh]jR )}(h)``struct ttm_tt *tt`` The struct ttm_tt. h](jX )}(h``struct ttm_tt *tt``h]j^ )}(hjXXh]hstruct ttm_tt *tt}(hjZXhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVXubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjRXubjt )}(hhh]h)}(hThe struct ttm_tt.h]hThe struct ttm_tt.}(hjqXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmXhKhjnXubah}(h]h ]h"]h$]h&]uh1js hjRXubeh}(h]h ]h"]h$]h&]uh1jQ hjmXhKhjOXubah}(h]h ]h"]h$]h&]uh1jL hj3Xubh)}(h**Description**h]j7 )}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjXubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj3Xubh)}(hwDrivers can use this functionto clear the backed-up status, for example before destroying or re-validating a purged tt.h]hwDrivers can use this functionto clear the backed-up status, for example before destroying or re-validating a purged tt.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj3Xubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_tt_create (C function)c.ttm_tt_createhNtauh1jhjNhhhNhNubj)}(hhh](j)}(hAint ttm_tt_create (struct ttm_buffer_object *bo, bool zero_alloc)h]j)}(h@int ttm_tt_create(struct ttm_buffer_object *bo, bool zero_alloc)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhKubj)}(h ttm_tt_createh]j)}(h ttm_tt_createh]h ttm_tt_create}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhjXhhhjXhKubj>)}(h/(struct ttm_buffer_object *bo, bool zero_alloc)h](jD)}(hstruct ttm_buffer_object *boh](j)}(hj? h]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hj"YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(httm_buffer_objecth]httm_buffer_object}(hj3YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0Yubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj5YmodnameN classnameNjj)}j]j)}j}jXsbc.ttm_tt_createasbuh1hhjYubj)}(h h]h }(hjSYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]h*}(hjaYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hboh]hbo}(hjnYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj YubjD)}(hbool zero_alloch](j)}(hj=2h]hbool}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h zero_alloch]h zero_alloc}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj Yubeh}(h]h ]h"]h$]h&]jjuh1j=hjXhhhjXhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjXhhhjXhKubah}(h]jXah ](jjeh"]h$]h&]j j )j huh1jhjXhKhjXhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjXhhhjXhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jYj( jYj) j* j+ uh1jhhhjNhNhNubj- )}(hX **Parameters** ``struct ttm_buffer_object *bo`` pointer to a struct ttm_buffer_object ``bool zero_alloc`` true if allocated pages needs to be zeroed **Description** Make sure we have a TTM structure allocated for the given BO. No pages are actually allocated.h](h)}(h**Parameters**h]j7 )}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjYubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjYubjM )}(hhh](jR )}(hG``struct ttm_buffer_object *bo`` pointer to a struct ttm_buffer_object h](jX )}(h ``struct ttm_buffer_object *bo``h]j^ )}(hjYh]hstruct ttm_buffer_object *bo}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjYubjt )}(hhh]h)}(h%pointer to a struct ttm_buffer_objecth]h%pointer to a struct ttm_buffer_object}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhKhjZubah}(h]h ]h"]h$]h&]uh1js hjYubeh}(h]h ]h"]h$]h&]uh1jQ hjZhKhjYubjR )}(h?``bool zero_alloc`` true if allocated pages needs to be zeroed h](jX )}(h``bool zero_alloc``h]j^ )}(hj7Zh]hbool zero_alloc}(hj9ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj5Zubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj1Zubjt )}(hhh]h)}(h*true if allocated pages needs to be zeroedh]h*true if allocated pages needs to be zeroed}(hjPZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLZhKhjMZubah}(h]h ]h"]h$]h&]uh1js hj1Zubeh}(h]h ]h"]h$]h&]uh1jQ hjLZhKhjYubeh}(h]h ]h"]h$]h&]uh1jL hjYubh)}(h**Description**h]j7 )}(hjrZh]h Description}(hjtZhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjpZubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjYubh)}(h^Make sure we have a TTM structure allocated for the given BO. No pages are actually allocated.h]h^Make sure we have a TTM structure allocated for the given BO. No pages are actually allocated.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_tt_init (C function) c.ttm_tt_inithNtauh1jhjNhhhNhNubj)}(hhh](j)}(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]j)}(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](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhKubj)}(h ttm_tt_inith]j)}(h ttm_tt_inith]h ttm_tt_init}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjZhKubj>)}(h|(struct ttm_tt *ttm, struct ttm_buffer_object *bo, uint32_t page_flags, enum ttm_caching caching, unsigned long extra_pages)h](jD)}(hstruct ttm_tt *ttmh](j)}(hj? h]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(httm_tth]httm_tt}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj[modnameN classnameNjj)}j]j)}j}jZsb c.ttm_tt_initasbuh1hhjZubj)}(h h]h }(hj2[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]h*}(hj@[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(httmh]httm}(hjM[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubjD)}(hstruct ttm_buffer_object *boh](j)}(hj? h]hstruct}(hjf[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb[ubj)}(h h]h }(hjs[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb[ubh)}(hhh]j)}(httm_buffer_objecth]httm_buffer_object}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj[modnameN classnameNjj)}j]j.[ c.ttm_tt_initasbuh1hhjb[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb[ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb[ubj)}(hboh]hbo}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubjD)}(huint32_t page_flagsh](h)}(hhh]j)}(huint32_th]huint32_t}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj[modnameN classnameNjj)}j]j.[ c.ttm_tt_initasbuh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h page_flagsh]h page_flags}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubjD)}(henum ttm_caching cachingh](j)}(hjh]henum}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj+\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]j)}(h ttm_cachingh]h ttm_caching}(hj<\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9\ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj>\modnameN classnameNjj)}j]j.[ c.ttm_tt_initasbuh1hhj\ubj)}(h h]h }(hjZ\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hcachingh]hcaching}(hjh\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubjD)}(hunsigned long extra_pagesh](j)}(hunsignedh]hunsigned}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}\ubj)}(hlongh]hlong}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}\ubj)}(h extra_pagesh]h extra_pages}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubeh}(h]h ]h"]h$]h&]jjuh1j=hjZhhhjZhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjZhKubah}(h]jZah ](jjeh"]h$]h&]j j )j huh1jhjZhKhjZhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjZhhhjZhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j\j( j\j) j* j+ uh1jhhhjNhNhNubj- )}(hX**Parameters** ``struct ttm_tt *ttm`` The struct ttm_tt. ``struct ttm_buffer_object *bo`` The buffer object we create the ttm for. ``uint32_t page_flags`` Page flags as identified by TTM_TT_FLAG_XX flags. ``enum ttm_caching caching`` the desired caching state of the pages ``unsigned long extra_pages`` Extra pages needed for the driver. **Description** Create a struct ttm_tt to back data with system memory pages. No pages are actually allocated. **Return** NULL: Out of memory.h](h)}(h**Parameters**h]j7 )}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj\ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj\ubjM )}(hhh](jR )}(h*``struct ttm_tt *ttm`` The struct ttm_tt. h](jX )}(h``struct ttm_tt *ttm``h]j^ )}(hj]h]hstruct ttm_tt *ttm}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj]ubjt )}(hhh]h)}(hThe struct ttm_tt.h]hThe struct ttm_tt.}(hj.]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*]hKhj+]ubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hj*]hKhj ]ubjR )}(hJ``struct ttm_buffer_object *bo`` The buffer object we create the ttm for. h](jX )}(h ``struct ttm_buffer_object *bo``h]j^ )}(hjN]h]hstruct ttm_buffer_object *bo}(hjP]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjL]ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjH]ubjt )}(hhh]h)}(h(The buffer object we create the ttm for.h]h(The buffer object we create the ttm for.}(hjg]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc]hKhjd]ubah}(h]h ]h"]h$]h&]uh1js hjH]ubeh}(h]h ]h"]h$]h&]uh1jQ hjc]hKhj ]ubjR )}(hJ``uint32_t page_flags`` Page flags as identified by TTM_TT_FLAG_XX flags. h](jX )}(h``uint32_t page_flags``h]j^ )}(hj]h]huint32_t page_flags}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj]ubjt )}(hhh]h)}(h1Page flags as identified by TTM_TT_FLAG_XX flags.h]h1Page flags as identified by TTM_TT_FLAG_XX flags.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hj]hKhj ]ubjR )}(hD``enum ttm_caching caching`` the desired caching state of the pages h](jX )}(h``enum ttm_caching caching``h]j^ )}(hj]h]henum ttm_caching caching}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj]ubjt )}(hhh]h)}(h&the desired caching state of the pagesh]h&the desired caching state of the pages}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hj]hKhj ]ubjR )}(hA``unsigned long extra_pages`` Extra pages needed for the driver. h](jX )}(h``unsigned long extra_pages``h]j^ )}(hj]h]hunsigned long extra_pages}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj]ubjt )}(hhh]h)}(h"Extra pages needed for the driver.h]h"Extra pages needed for the driver.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKhj^ubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hj^hKhj ]ubeh}(h]h ]h"]h$]h&]uh1jL hj\ubh)}(h**Description**h]j7 )}(hj4^h]h Description}(hj6^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2^ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj\ubh)}(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.}(hjJ^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj\ubh)}(h **Return**h]j7 )}(hj[^h]hReturn}(hj]^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjY^ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj\ubh)}(hNULL: Out of memory.h]hNULL: Out of memory.}(hjq^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_tt_fini (C function) c.ttm_tt_finihNtauh1jhjNhhhNhNubj)}(hhh](j)}(h%void ttm_tt_fini (struct ttm_tt *ttm)h]j)}(h$void ttm_tt_fini(struct ttm_tt *ttm)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hKubj)}(h ttm_tt_finih]j)}(h ttm_tt_finih]h ttm_tt_fini}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj^hKubj>)}(h(struct ttm_tt *ttm)h]jD)}(hstruct ttm_tt *ttmh](j)}(hj? h]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(httm_tth]httm_tt}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj^modnameN classnameNjj)}j]j)}j}j^sb c.ttm_tt_finiasbuh1hhj^ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]h*}(hj)_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(httmh]httm}(hj6_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj^ubah}(h]h ]h"]h$]h&]jjuh1j=hj^hhhj^hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhj^hKubah}(h]j^ah ](jjeh"]h$]h&]j j )j huh1jhj^hKhj^hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj^hhhj^hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' ji_j( ji_j) j* j+ uh1jhhhjNhNhNubj- )}(hp**Parameters** ``struct ttm_tt *ttm`` the ttm_tt structure. **Description** Free memory of ttm_tt structureh](h)}(h**Parameters**h]j7 )}(hjs_h]h Parameters}(hju_hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjq_ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjm_ubjM )}(hhh]jR )}(h-``struct ttm_tt *ttm`` the ttm_tt structure. h](jX )}(h``struct ttm_tt *ttm``h]j^ )}(hj_h]hstruct ttm_tt *ttm}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj_ubjt )}(hhh]h)}(hthe ttm_tt structure.h]hthe ttm_tt structure.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hKhj_ubah}(h]h ]h"]h$]h&]uh1js hj_ubeh}(h]h ]h"]h$]h&]uh1jQ hj_hKhj_ubah}(h]h ]h"]h$]h&]uh1jL hjm_ubh)}(h**Description**h]j7 )}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj_ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjm_ubh)}(hFree memory of ttm_tt structureh]hFree memory of ttm_tt structure}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjm_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_tt_destroy (C function)c.ttm_tt_destroyhNtauh1jhjNhhhNhNubj)}(hhh](j)}(hAvoid ttm_tt_destroy (struct ttm_device *bdev, struct ttm_tt *ttm)h]j)}(h@void ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)h](j)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hj!`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj `hKubj)}(httm_tt_destroyh]j)}(httm_tt_destroyh]httm_tt_destroy}(hj3`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj `hKubj>)}(h-(struct ttm_device *bdev, struct ttm_tt *ttm)h](jD)}(hstruct ttm_device *bdevh](j)}(hj? h]hstruct}(hjO`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK`ubj)}(h h]h }(hj\`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK`ubh)}(hhh]j)}(h ttm_deviceh]h ttm_device}(hjm`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj`ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjo`modnameN classnameNjj)}j]j)}j}j5`sbc.ttm_tt_destroyasbuh1hhjK`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK`ubj)}(hbdevh]hbdev}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjG`ubjD)}(hstruct ttm_tt *ttmh](j)}(hj? h]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(httm_tth]httm_tt}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj`modnameN classnameNjj)}j]j`c.ttm_tt_destroyasbuh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]h*}(hj ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(httmh]httm}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjG`ubeh}(h]h ]h"]h$]h&]jjuh1j=hj`hhhj `hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj `hhhj `hKubah}(h]j`ah ](jjeh"]h$]h&]j j )j huh1jhj `hKhj`hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj`hhhj `hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jKaj( jKaj) j* j+ uh1jhhhjNhNhNubj- )}(h**Parameters** ``struct ttm_device *bdev`` the ttm_device this object belongs to ``struct ttm_tt *ttm`` The struct ttm_tt. **Description** Unbind, unpopulate and destroy common struct ttm_tt.h](h)}(h**Parameters**h]j7 )}(hjUah]h Parameters}(hjWahhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjSaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjOaubjM )}(hhh](jR )}(hB``struct ttm_device *bdev`` the ttm_device this object belongs to h](jX )}(h``struct ttm_device *bdev``h]j^ )}(hjtah]hstruct ttm_device *bdev}(hjvahhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjraubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjnaubjt )}(hhh]h)}(h%the ttm_device this object belongs toh]h%the ttm_device this object belongs to}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahKhjaubah}(h]h ]h"]h$]h&]uh1js hjnaubeh}(h]h ]h"]h$]h&]uh1jQ hjahKhjkaubjR )}(h*``struct ttm_tt *ttm`` The struct ttm_tt. h](jX )}(h``struct ttm_tt *ttm``h]j^ )}(hjah]hstruct ttm_tt *ttm}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjaubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjaubjt )}(hhh]h)}(hThe struct ttm_tt.h]hThe struct ttm_tt.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahKhjaubah}(h]h ]h"]h$]h&]uh1js hjaubeh}(h]h ]h"]h$]h&]uh1jQ hjahKhjkaubeh}(h]h ]h"]h$]h&]uh1jL hjOaubh)}(h**Description**h]j7 )}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjOaubh)}(h4Unbind, unpopulate and destroy common struct ttm_tt.h]h4Unbind, unpopulate and destroy common struct ttm_tt.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjOaubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_tt_swapin (C function)c.ttm_tt_swapinhNtauh1jhjNhhhNhNubj)}(hhh](j)}(h&int ttm_tt_swapin (struct ttm_tt *ttm)h]j)}(h%int ttm_tt_swapin(struct ttm_tt *ttm)h](j)}(hinth]hint}(hj-bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)bhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hj)}(h(struct ttm_tt *ttm)h]jD)}(hstruct ttm_tt *ttmh](j)}(hj? h]hstruct}(hjjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfbubj)}(h h]h }(hjwbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfbubh)}(hhh]j)}(httm_tth]httm_tt}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjbmodnameN classnameNjj)}j]j)}j}jPbsbc.ttm_tt_swapinasbuh1hhjfbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfbubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfbubj)}(httmh]httm}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfbubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjbbubah}(h]h ]h"]h$]h&]jjuh1j=hj)bhhhj;bhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj%bhhhj;bhKubah}(h]j bah ](jjeh"]h$]h&]j j )j huh1jhj;bhKhj"bhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj"bhhhj;bhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jbj( jbj) j* j+ uh1jhhhjNhNhNubj- )}(hs**Parameters** ``struct ttm_tt *ttm`` The struct ttm_tt. **Description** Swap in a previously swap out ttm_tt.h](h)}(h**Parameters**h]j7 )}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjbubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjbubjM )}(hhh]jR )}(h*``struct ttm_tt *ttm`` The struct ttm_tt. h](jX )}(h``struct ttm_tt *ttm``h]j^ )}(hjch]hstruct ttm_tt *ttm}(hj!chhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjcubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjcubjt )}(hhh]h)}(hThe struct ttm_tt.h]hThe struct ttm_tt.}(hj8chhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4chKhj5cubah}(h]h ]h"]h$]h&]uh1js hjcubeh}(h]h ]h"]h$]h&]uh1jQ hj4chKhjcubah}(h]h ]h"]h$]h&]uh1jL hjbubh)}(h**Description**h]j7 )}(hjZch]h Description}(hj\chhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjXcubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjbubh)}(h%Swap in a previously swap out ttm_tt.h]h%Swap in a previously swap out ttm_tt.}(hjpchhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_tt_populate (C function)c.ttm_tt_populatehNtauh1jhjNhhhNhNubj)}(hhh](j)}(h`int ttm_tt_populate (struct ttm_device *bdev, struct ttm_tt *ttm, struct ttm_operation_ctx *ctx)h]j)}(h_int ttm_tt_populate(struct ttm_device *bdev, struct ttm_tt *ttm, struct ttm_operation_ctx *ctx)h](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjchKubj)}(httm_tt_populateh]j)}(httm_tt_populateh]httm_tt_populate}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjchKubj>)}(hL(struct ttm_device *bdev, struct ttm_tt *ttm, struct ttm_operation_ctx *ctx)h](jD)}(hstruct ttm_device *bdevh](j)}(hj? h]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j)}(h ttm_deviceh]h ttm_device}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]j)}j}jcsbc.ttm_tt_populateasbuh1hhjcubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hj(dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hbdevh]hbdev}(hj5dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjcubjD)}(hstruct ttm_tt *ttmh](j)}(hj? h]hstruct}(hjNdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJdubj)}(h h]h }(hj[dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJdubh)}(hhh]j)}(httm_tth]httm_tt}(hjldhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjidubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjndmodnameN classnameNjj)}j]jdc.ttm_tt_populateasbuh1hhjJdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJdubj)}(httmh]httm}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJdubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjcubjD)}(hstruct ttm_operation_ctx *ctxh](j)}(hj? h]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(httm_operation_ctxh]httm_operation_ctx}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjdmodnameN classnameNjj)}j]jdc.ttm_tt_populateasbuh1hhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hctxh]hctx}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjcubeh}(h]h ]h"]h$]h&]jjuh1j=hjchhhjchKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjchhhjchKubah}(h]jcah ](jjeh"]h$]h&]j j )j huh1jhjchKhjchhubj )}(hhh]h)}(hallocate pages for a ttmh]hallocate pages for a ttm}(hj?ehhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhKhj)}(h-(struct ttm_device *bdev, struct ttm_tt *ttm)h](jD)}(hstruct ttm_device *bdevh](j)}(hj? h]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]j)}(h ttm_deviceh]h ttm_device}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjfmodnameN classnameNjj)}j]j)}j}jfsbc.ttm_tt_unpopulateasbuh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hbdevh]hbdev}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjfubjD)}(hstruct ttm_tt *ttmh](j)}(hj? h]hstruct}(hj!ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hj.ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j)}(httm_tth]httm_tt}(hj?ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)}(h(struct ttm_tt *ttm)h]jD)}(hstruct ttm_tt *ttmh](j)}(hj? h]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]j)}(httm_tth]httm_tt}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjhmodnameN classnameNjj)}j]j)}j}jhsbc.ttm_tt_mark_for_clearasbuh1hhjhubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hjh]h*}(hj%ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(httmh]httm}(hj2ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhhjhhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhjhhM ubah}(h]jhah ](jjeh"]h$]h&]j j )j huh1jhjhhM hjhhhubj )}(hhh]h)}(h$Mark pages for clearing on populate.h]h$Mark pages for clearing on populate.}(hj\ihhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM hjYihhubah}(h]h ]h"]h$]h&]uh1j hjhhhhjhhM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jtij( jtij) j* j+ uh1jhhhjNhNhNubj- )}(h**Parameters** ``struct ttm_tt *ttm`` Pointer to the ttm_tt structure **Description** Marks pages for clearing so that the next time the page vector is populated, the pages will be cleared.h](h)}(h**Parameters**h]j7 )}(hj~ih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj|iubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhMhjxiubjM )}(hhh]jR )}(h7``struct ttm_tt *ttm`` Pointer to the ttm_tt structure h](jX )}(h``struct ttm_tt *ttm``h]j^ )}(hjih]hstruct ttm_tt *ttm}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM hjiubjt )}(hhh]h)}(hPointer to the ttm_tt structureh]hPointer to the ttm_tt structure}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihM hjiubah}(h]h ]h"]h$]h&]uh1js hjiubeh}(h]h ]h"]h$]h&]uh1jQ hjihM hjiubah}(h]h ]h"]h$]h&]uh1jL hjxiubh)}(h**Description**h]j7 )}(hjih]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjiubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhMhjxiubh)}(hgMarks pages for clearing so that the next time the page vector is populated, the pages will be cleared.h]hgMarks pages for clearing so that the next time the page vector is populated, the pages will be cleared.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM hjxiubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_backup_flags (C struct)c.ttm_backup_flagshNtauh1jhjNhhhNhNubj)}(hhh](j)}(httm_backup_flagsh]j)}(hstruct ttm_backup_flagsh](j)}(hj? h]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhMubj)}(h h]h }(hj+jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj*jhMubj)}(httm_backup_flagsh]j)}(hjjh]httm_backup_flags}(hj=jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9jubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhj*jhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhj*jhMubah}(h]jjah ](jjeh"]h$]h&]j j )j huh1jhj*jhMhjjhhubj )}(hhh]h)}(h!Flags to govern backup behaviour.h]h!Flags to govern backup behaviour.}(hj_jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhMhj\jhhubah}(h]h ]h"]h$]h&]uh1j hjjhhhj*jhMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jwjj( jwjj) j* j+ uh1jhhhjNhNhNubj- )}(hX%**Definition**:: struct ttm_backup_flags { u32 purge : 1; u32 writeback : 1; }; **Members** ``purge`` Free pages without backing up. Bypass pools. ``writeback`` Attempt to copy contents directly to swap space, even if that means blocking on writes to external memory.h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjjubh:}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM!hj{jubj )}(hFstruct ttm_backup_flags { u32 purge : 1; u32 writeback : 1; };h]hFstruct ttm_backup_flags { u32 purge : 1; u32 writeback : 1; };}hjjsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM#hj{jubh)}(h **Members**h]j7 )}(hjjh]hMembers}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM(hj{jubjM )}(hhh](jR )}(h7``purge`` Free pages without backing up. Bypass pools. h](jX )}(h ``purge``h]j^ )}(hjjh]hpurge}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhMhjjubjt )}(hhh]h)}(h,Free pages without backing up. Bypass pools.h]h,Free pages without backing up. Bypass pools.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1js hjjubeh}(h]h ]h"]h$]h&]uh1jQ hjjhMhjjubjR )}(hx``writeback`` Attempt to copy contents directly to swap space, even if that means blocking on writes to external memory.h](jX )}(h ``writeback``h]j^ )}(hjkh]h writeback}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM hjjubjt )}(hhh]h)}(hjAttempt to copy contents directly to swap space, even if that means blocking on writes to external memory.h]hjAttempt to copy contents directly to swap space, even if that means blocking on writes to external memory.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhM hjkubah}(h]h ]h"]h$]h&]uh1js hjjubeh}(h]h ]h"]h$]h&]uh1jQ hjkhM hjjubeh}(h]h ]h"]h$]h&]uh1jL hj{jubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_agp_tt_create (C function)c.ttm_agp_tt_createhNtauh1jhjNhhhNhNubj)}(hhh](j)}(hustruct ttm_tt * ttm_agp_tt_create (struct ttm_buffer_object *bo, struct agp_bridge_data *bridge, uint32_t page_flags)h]j)}(hsstruct ttm_tt *ttm_agp_tt_create(struct ttm_buffer_object *bo, struct agp_bridge_data *bridge, uint32_t page_flags)h](j)}(hj? h]hstruct}(hj^khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZkhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM3ubj)}(h h]h }(hjlkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZkhhhjkkhM3ubh)}(hhh]j)}(httm_tth]httm_tt}(hj}khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzkubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkmodnameN classnameNjj)}j]j)}j}ttm_agp_tt_createsbc.ttm_agp_tt_createasbuh1hhjZkhhhjkkhM3ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZkhhhjkkhM3ubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZkhhhjkkhM3ubj)}(httm_agp_tt_createh]j)}(hjkh]httm_agp_tt_create}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZkhhhjkkhM3ubj>)}(hS(struct ttm_buffer_object *bo, struct agp_bridge_data *bridge, uint32_t page_flags)h](jD)}(hstruct ttm_buffer_object *boh](j)}(hj? h]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(httm_buffer_objecth]httm_buffer_object}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkmodnameN classnameNjj)}j]jkc.ttm_agp_tt_createasbuh1hhjkubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]h*}(hj"lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hboh]hbo}(hj/lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjkubjD)}(hstruct agp_bridge_data *bridgeh](j)}(hj? h]hstruct}(hjHlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDlubj)}(h h]h }(hjUlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDlubh)}(hhh]j)}(hagp_bridge_datah]hagp_bridge_data}(hjflhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjclubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjhlmodnameN classnameNjj)}j]jkc.ttm_agp_tt_createasbuh1hhjDlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDlubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDlubj)}(hbridgeh]hbridge}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDlubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjkubjD)}(huint32_t page_flagsh](h)}(hhh]j)}(huint32_th]huint32_t}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjlmodnameN classnameNjj)}j]jkc.ttm_agp_tt_createasbuh1hhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h page_flagsh]h page_flags}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjkubeh}(h]h ]h"]h$]h&]jjuh1j=hjZkhhhjkkhM3ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjVkhhhjkkhM3ubah}(h]jQkah ](jjeh"]h$]h&]j j )j huh1jhjkkhM3hjSkhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjSkhhhjkkhM3ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jmj( jmj) j* j+ uh1jhhhjNhNhNubj- )}(hX**Parameters** ``struct ttm_buffer_object *bo`` Buffer object we allocate the ttm for. ``struct agp_bridge_data *bridge`` The agp bridge this device is sitting on. ``uint32_t page_flags`` Page flags as identified by TTM_TT_FLAG_XX flags. **Description** Create a TTM backend that uses the indicated AGP bridge as an aperture for TT memory. This function uses the linux agpgart interface to bind and unbind memory backing a ttm_tt.h](h)}(h**Parameters**h]j7 )}(hj$mh]h Parameters}(hj&mhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj"mubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM7hjmubjM )}(hhh](jR )}(hH``struct ttm_buffer_object *bo`` Buffer object we allocate the ttm for. h](jX )}(h ``struct ttm_buffer_object *bo``h]j^ )}(hjCmh]hstruct ttm_buffer_object *bo}(hjEmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjAmubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM5hj=mubjt )}(hhh]h)}(h&Buffer object we allocate the ttm for.h]h&Buffer object we allocate the ttm for.}(hj\mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXmhM5hjYmubah}(h]h ]h"]h$]h&]uh1js hj=mubeh}(h]h ]h"]h$]h&]uh1jQ hjXmhM5hj:mubjR )}(hM``struct agp_bridge_data *bridge`` The agp bridge this device is sitting on. h](jX )}(h"``struct agp_bridge_data *bridge``h]j^ )}(hj|mh]hstruct agp_bridge_data *bridge}(hj~mhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjzmubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM6hjvmubjt )}(hhh]h)}(h)The agp bridge this device is sitting on.h]h)The agp bridge this device is sitting on.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM6hjmubah}(h]h ]h"]h$]h&]uh1js hjvmubeh}(h]h ]h"]h$]h&]uh1jQ hjmhM6hj:mubjR )}(hJ``uint32_t page_flags`` Page flags as identified by TTM_TT_FLAG_XX flags. h](jX )}(h``uint32_t page_flags``h]j^ )}(hjmh]huint32_t page_flags}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM7hjmubjt )}(hhh]h)}(h1Page flags as identified by TTM_TT_FLAG_XX flags.h]h1Page flags as identified by TTM_TT_FLAG_XX flags.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM7hjmubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjmhM7hj:mubeh}(h]h ]h"]h$]h&]uh1jL hjmubh)}(h**Description**h]j7 )}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjmubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM9hjmubh)}(hCreate a TTM backend that uses the indicated AGP bridge as an aperture for TT memory. This function uses the linux agpgart interface to bind and unbind memory backing a ttm_tt.h]hCreate a TTM backend that uses the indicated AGP bridge as an aperture for TT memory. This function uses the linux agpgart interface to bind and unbind memory backing a ttm_tt.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:66: ./include/drm/ttm/ttm_tt.hhM4hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ttm_kmap_iter_tt_init (C function)c.ttm_kmap_iter_tt_inithNtauh1jhjNhhhNhNubj)}(hhh](j)}(hbstruct ttm_kmap_iter * ttm_kmap_iter_tt_init (struct ttm_kmap_iter_tt *iter_tt, struct ttm_tt *tt)h]j)}(h`struct ttm_kmap_iter *ttm_kmap_iter_tt_init(struct ttm_kmap_iter_tt *iter_tt, struct ttm_tt *tt)h](j)}(hj? h]hstruct}(hj5nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1nhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMubj)}(h h]h }(hjCnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1nhhhjBnhMubh)}(hhh]j)}(h ttm_kmap_iterh]h ttm_kmap_iter}(hjTnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQnubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjVnmodnameN classnameNjj)}j]j)}j}ttm_kmap_iter_tt_initsbc.ttm_kmap_iter_tt_initasbuh1hhj1nhhhjBnhMubj)}(h h]h }(hjunhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1nhhhjBnhMubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1nhhhjBnhMubj)}(httm_kmap_iter_tt_inith]j)}(hjrnh]httm_kmap_iter_tt_init}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1nhhhjBnhMubj>)}(h5(struct ttm_kmap_iter_tt *iter_tt, struct ttm_tt *tt)h](jD)}(h struct ttm_kmap_iter_tt *iter_tth](j)}(hj? h]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(httm_kmap_iter_tth]httm_kmap_iter_tt}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjnmodnameN classnameNjj)}j]jpnc.ttm_kmap_iter_tt_initasbuh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hiter_tth]hiter_tt}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjnubjD)}(hstruct ttm_tt *tth](j)}(hj? h]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hj,ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]j)}(httm_tth]httm_tt}(hj=ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:oubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj?omodnameN classnameNjj)}j]jpnc.ttm_kmap_iter_tt_initasbuh1hhjoubj)}(h h]h }(hj[ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hjh]h*}(hjiohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(htth]htt}(hjvohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjnubeh}(h]h ]h"]h$]h&]jjuh1j=hj1nhhhjBnhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-nhhhjBnhMubah}(h]j(nah ](jjeh"]h$]h&]j j )j huh1jhjBnhMhj*nhhubj )}(hhh]h)}(h$Initialize a struct ttm_kmap_iter_tth]h$Initialize a struct ttm_kmap_iter_tt}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjohhubah}(h]h ]h"]h$]h&]uh1j hj*nhhhjBnhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' joj( joj) j* j+ uh1jhhhjNhNhNubj- )}(h**Parameters** ``struct ttm_kmap_iter_tt *iter_tt`` The struct ttm_kmap_iter_tt to initialize. ``struct ttm_tt *tt`` Struct ttm_tt holding page pointers of the struct ttm_resource. **Return** Pointer to the embedded struct ttm_kmap_iter.h](h)}(h**Parameters**h]j7 )}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjoubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjoubjM )}(hhh](jR )}(hP``struct ttm_kmap_iter_tt *iter_tt`` The struct ttm_kmap_iter_tt to initialize. h](jX )}(h$``struct ttm_kmap_iter_tt *iter_tt``h]j^ )}(hjoh]h struct ttm_kmap_iter_tt *iter_tt}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjoubjt )}(hhh]h)}(h*The struct ttm_kmap_iter_tt to initialize.h]h*The struct ttm_kmap_iter_tt to initialize.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1js hjoubeh}(h]h ]h"]h$]h&]uh1jQ hjohMhjoubjR )}(hV``struct ttm_tt *tt`` Struct ttm_tt holding page pointers of the struct ttm_resource. h](jX )}(h``struct ttm_tt *tt``h]j^ )}(hjph]hstruct ttm_tt *tt}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjpubjt )}(hhh]h)}(h?Struct ttm_tt holding page pointers of the struct ttm_resource.h]h?Struct ttm_tt holding page pointers of the struct ttm_resource.}(hj3phhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/phMhj0pubah}(h]h ]h"]h$]h&]uh1js hjpubeh}(h]h ]h"]h$]h&]uh1jQ hj/phMhjoubeh}(h]h ]h"]h$]h&]uh1jL hjoubh)}(h **Return**h]j7 )}(hjUph]hReturn}(hjWphhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjSpubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjoubh)}(h-Pointer to the embedded struct ttm_kmap_iter.h]h-Pointer to the embedded struct ttm_kmap_iter.}(hjkphhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ttm_tt_setup_backup (C function)c.ttm_tt_setup_backuphNtauh1jhjNhhhNhNubj)}(hhh](j)}(h+int ttm_tt_setup_backup (struct ttm_tt *tt)h]j)}(h*int ttm_tt_setup_backup(struct ttm_tt *tt)h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjphMubj)}(httm_tt_setup_backuph]j)}(httm_tt_setup_backuph]httm_tt_setup_backup}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjphhhjphMubj>)}(h(struct ttm_tt *tt)h]jD)}(hstruct ttm_tt *tth](j)}(hj? h]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]j)}(httm_tth]httm_tt}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjpmodnameN classnameNjj)}j]j)}j}jpsbc.ttm_tt_setup_backupasbuh1hhjpubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hjh]h*}(hj#qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(htth]htt}(hj0qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjpubah}(h]h ]h"]h$]h&]jjuh1j=hjphhhjphMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjphhhjphMubah}(h]jpah ](jjeh"]h$]h&]j j )j huh1jhjphMhjphhubj )}(hhh]h)}(h3Allocate and assign a backup structure for a ttm_tth]h3Allocate and assign a backup structure for a ttm_tt}(hjZqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjWqhhubah}(h]h ]h"]h$]h&]uh1j hjphhhjphMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jrqj( jrqj) j* j+ uh1jhhhjNhNhNubj- )}(hX=**Parameters** ``struct ttm_tt *tt`` The ttm_tt for wich to allocate and assign a backup structure. **Description** Assign a backup structure to be used for tt backup. This should typically be done at bo creation, to avoid allocations at shrinking time. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j7 )}(hj|qh]h Parameters}(hj~qhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjzqubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjvqubjM )}(hhh]jR )}(hU``struct ttm_tt *tt`` The ttm_tt for wich to allocate and assign a backup structure. h](jX )}(h``struct ttm_tt *tt``h]j^ )}(hjqh]hstruct ttm_tt *tt}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjqubjt )}(hhh]h)}(h>The 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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1js hjqubeh}(h]h ]h"]h$]h&]uh1jQ hjqhMhjqubah}(h]h ]h"]h$]h&]uh1jL hjvqubh)}(h**Description**h]j7 )}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjvqubh)}(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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chMhjvqubh)}(h **Return**h]j7 )}(hjqh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chM!hjvqubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:69: ./drivers/gpu/drm/ttm/ttm_tt.chM"hjvqubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjNhhhNhNubeh}(h]jah ]h"]ttm tt object referenceah$]h&]uh1hhjMhhhhhK@ubh)}(hhh](h)}(hTTM page pool referenceh]hTTM page pool reference}(hj3rhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj0rhhhhhKIubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_pool_type (C struct)c.ttm_pool_typehNtauh1jhj0rhhhNhNubj)}(hhh](j)}(h ttm_pool_typeh]j)}(hstruct ttm_pool_typeh](j)}(hj? h]hstruct}(hjZrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVrhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:75: ./include/drm/ttm/ttm_pool.hhKubj)}(h h]h }(hjhrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVrhhhjgrhKubj)}(h ttm_pool_typeh]j)}(hjTrh]h ttm_pool_type}(hjzrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVrhhhjgrhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRrhhhjgrhKubah}(h]jMrah ](jjeh"]h$]h&]j j )j huh1jhjgrhKhjOrhhubj )}(hhh]h)}(hPool for a certain memory typeh]hPool for a certain memory type}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:75: ./include/drm/ttm/ttm_pool.hhK+hjrhhubah}(h]h ]h"]h$]h&]uh1j hjOrhhhjgrhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jrj( jrj) j* j+ uh1jhhhj0rhNhNubj- )}(hX**Definition**:: struct ttm_pool_type { struct ttm_pool *pool; unsigned int order; enum ttm_caching caching; struct list_head shrinker_list; struct list_lru 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 ``pages`` the lru_list of pages in the poolh](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjrubh:}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:75: ./include/drm/ttm/ttm_pool.hhK/hjrubj )}(hstruct ttm_pool_type { struct ttm_pool *pool; unsigned int order; enum ttm_caching caching; struct list_head shrinker_list; struct list_lru pages; };h]hstruct ttm_pool_type { struct ttm_pool *pool; unsigned int order; enum ttm_caching caching; struct list_head shrinker_list; struct list_lru pages; };}hjrsbah}(h]h ]h"]h$]h&]jjuh1j hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:75: ./include/drm/ttm/ttm_pool.hhK1hjrubh)}(h **Members**h]j7 )}(hjrh]hMembers}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjrubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:75: ./include/drm/ttm/ttm_pool.hhK9hjrubjM )}(hhh](jR )}(hB``pool`` the pool we belong to, might be NULL for the global ones h](jX )}(h``pool``h]j^ )}(hj sh]hpool}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjsubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:75: ./include/drm/ttm/ttm_pool.hhK.hjsubjt )}(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}(hj"shhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshK.hjsubah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjshK.hjsubjR )}(h.``order`` the allocation order our pages have h](jX )}(h ``order``h]j^ )}(hjBsh]horder}(hjDshhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj@subah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:75: ./include/drm/ttm/ttm_pool.hhK/hjhjthhubah}(h]h ]h"]h$]h&]uh1j hj)}(hI(struct ttm_pool *pool, struct ttm_tt *tt, struct ttm_operation_ctx *ctx)h](jD)}(hstruct ttm_pool *poolh](j)}(hj? h]hstruct}(hj8vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4vubj)}(h h]h }(hjEvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4vubh)}(hhh]j)}(httm_poolh]httm_pool}(hjVvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSvubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjXvmodnameN classnameNjj)}j]j)}j}jvsbc.ttm_pool_allocasbuh1hhj4vubj)}(h h]h }(hjvvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4vubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4vubj)}(hpoolh]hpool}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4vubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj0vubjD)}(hstruct ttm_tt *tth](j)}(hj? h]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]j)}(httm_tth]httm_tt}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjvmodnameN classnameNjj)}j]jrvc.ttm_pool_allocasbuh1hhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(htth]htt}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj0vubjD)}(hstruct ttm_operation_ctx *ctxh](j)}(hj? h]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hj'whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(httm_operation_ctxh]httm_operation_ctx}(hj8whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5wubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj:wmodnameN classnameNjj)}j]jrvc.ttm_pool_allocasbuh1hhjwubj)}(h h]h }(hjVwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]h*}(hjdwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hctxh]hctx}(hjqwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj0vubeh}(h]h ]h"]h$]h&]jjuh1j=hjuhhhj vhMmubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhj vhMmubah}(h]juah ](jjeh"]h$]h&]j j )j huh1jhj vhMmhjuhhubj )}(hhh]h)}(hFill a ttm_tt objecth]hFill a ttm_tt object}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMmhjwhhubah}(h]h ]h"]h$]h&]uh1j hjuhhhj vhMmubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jwj( jwj) j* j+ uh1jhhhj0rhNhNubj- )}(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]j7 )}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjwubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMqhjwubjM )}(hhh](jR )}(h*``struct ttm_pool *pool`` ttm_pool to use h](jX )}(h``struct ttm_pool *pool``h]j^ )}(hjwh]hstruct ttm_pool *pool}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMohjwubjt )}(hhh]h)}(httm_pool to useh]httm_pool to use}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMohjwubah}(h]h ]h"]h$]h&]uh1js hjwubeh}(h]h ]h"]h$]h&]uh1jQ hjwhMohjwubjR )}(h,``struct ttm_tt *tt`` ttm_tt object to fill h](jX )}(h``struct ttm_tt *tt``h]j^ )}(hjxh]hstruct ttm_tt *tt}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjxubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMphjxubjt )}(hhh]h)}(httm_tt object to fillh]httm_tt object to fill}(hj.xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*xhMphj+xubah}(h]h ]h"]h$]h&]uh1js hjxubeh}(h]h ]h"]h$]h&]uh1jQ hj*xhMphjwubjR )}(h4``struct ttm_operation_ctx *ctx`` operation context h](jX )}(h!``struct ttm_operation_ctx *ctx``h]j^ )}(hjNxh]hstruct ttm_operation_ctx *ctx}(hjPxhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLxubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMqhjHxubjt )}(hhh]h)}(hoperation contexth]hoperation context}(hjgxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcxhMqhjdxubah}(h]h ]h"]h$]h&]uh1js hjHxubeh}(h]h ]h"]h$]h&]uh1jQ hjcxhMqhjwubeh}(h]h ]h"]h$]h&]uh1jL hjwubh)}(h**Description**h]j7 )}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjxubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMshjwubh)}(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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMrhjwubh)}(h **Return**h]j7 )}(hjxh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjxubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMuhjwubh)}(h-0 on successe, negative error code otherwise.h]h-0 on successe, negative error code otherwise.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMvhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj0rhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_pool_free (C function)c.ttm_pool_freehNtauh1jhj0rhhhNhNubj)}(hhh](j)}(h=void ttm_pool_free (struct ttm_pool *pool, struct ttm_tt *tt)h]j)}(h)}(h*(struct ttm_pool *pool, struct ttm_tt *tt)h](jD)}(hstruct ttm_pool *poolh](j)}(hj? h]hstruct}(hj2yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.yubj)}(h h]h }(hj?yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.yubh)}(hhh]j)}(httm_poolh]httm_pool}(hjPyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMyubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjRymodnameN classnameNjj)}j]j)}j}jysbc.ttm_pool_freeasbuh1hhj.yubj)}(h h]h }(hjpyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.yubj)}(hjh]h*}(hj~yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.yubj)}(hpoolh]hpool}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.yubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*yubjD)}(hstruct ttm_tt *tth](j)}(hj? h]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]j)}(httm_tth]httm_tt}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjymodnameN classnameNjj)}j]jlyc.ttm_pool_freeasbuh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(htth]htt}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*yubeh}(h]h ]h"]h$]h&]jjuh1j=hjxhhhjyhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjyhMubah}(h]jxah ](jjeh"]h$]h&]j j )j huh1jhjyhMhjxhhubj )}(hhh]h)}(h+Free the backing pages from a ttm_tt objecth]h+Free the backing pages from a ttm_tt object}(hj%zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj"zhhubah}(h]h ]h"]h$]h&]uh1j hjxhhhjyhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j=zj( j=zj) j* j+ uh1jhhhj0rhNhNubj- )}(h**Parameters** ``struct ttm_pool *pool`` Pool to give pages back to. ``struct ttm_tt *tt`` ttm_tt object to unpopulate **Description** Give the packing pages back to a pool or free themh](h)}(h**Parameters**h]j7 )}(hjGzh]h Parameters}(hjIzhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjEzubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhjAzubjM )}(hhh](jR )}(h6``struct ttm_pool *pool`` Pool to give pages back to. h](jX )}(h``struct ttm_pool *pool``h]j^ )}(hjfzh]hstruct ttm_pool *pool}(hjhzhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjdzubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj`zubjt )}(hhh]h)}(hPool to give pages back to.h]hPool to give pages back to.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{zhMhj|zubah}(h]h ]h"]h$]h&]uh1js hj`zubeh}(h]h ]h"]h$]h&]uh1jQ hj{zhMhj]zubjR )}(h2``struct ttm_tt *tt`` ttm_tt object to unpopulate h](jX )}(h``struct ttm_tt *tt``h]j^ )}(hjzh]hstruct ttm_tt *tt}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjzubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhjzubjt )}(hhh]h)}(httm_tt object to unpopulateh]httm_tt object to unpopulate}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1js hjzubeh}(h]h ]h"]h$]h&]uh1jQ hjzhMhj]zubeh}(h]h ]h"]h$]h&]uh1jL hjAzubh)}(h**Description**h]j7 )}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjzubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhjAzubh)}(h2Give the packing pages back to a pool or free themh]h2Give the packing pages back to a pool or free them}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhjAzubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj0rhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_pool_init (C function)c.ttm_pool_inithNtauh1jhj0rhhhNhNubj)}(hhh](j)}(havoid ttm_pool_init (struct ttm_pool *pool, struct device *dev, int nid, unsigned int alloc_flags)h]j)}(h`void ttm_pool_init(struct ttm_pool *pool, struct device *dev, int nid, unsigned int alloc_flags)h](j)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMubj)}(h h]h }(hj.{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj-{hMubj)}(h ttm_pool_inith]j)}(h ttm_pool_inith]h ttm_pool_init}(hj@{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhj-{hMubj>)}(hN(struct ttm_pool *pool, struct device *dev, int nid, unsigned int alloc_flags)h](jD)}(hstruct ttm_pool *poolh](j)}(hj? h]hstruct}(hj\{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX{ubj)}(h h]h }(hji{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX{ubh)}(hhh]j)}(httm_poolh]httm_pool}(hjz{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw{ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj|{modnameN classnameNjj)}j]j)}j}jB{sbc.ttm_pool_initasbuh1hhjX{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX{ubj)}(hpoolh]hpool}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjT{ubjD)}(hstruct device *devh](j)}(hj? h]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(hdeviceh]hdevice}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj{modnameN classnameNjj)}j]j{c.ttm_pool_initasbuh1hhj{ubj)}(h h]h }(hj |hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hdevh]hdev}(hj%|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjT{ubjD)}(hint nidh](j)}(hinth]hint}(hj>|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:|ubj)}(h h]h }(hjL|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:|ubj)}(hnidh]hnid}(hjZ|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjT{ubjD)}(hunsigned int alloc_flagsh](j)}(hunsignedh]hunsigned}(hjs|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo|ubj)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo|ubj)}(h alloc_flagsh]h alloc_flags}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjT{ubeh}(h]h ]h"]h$]h&]jjuh1j=hj{hhhj-{hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhj-{hMubah}(h]j{ah ](jjeh"]h$]h&]j j )j huh1jhj-{hMhj{hhubj )}(hhh]h)}(hInitialize a poolh]hInitialize a pool}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj|hhubah}(h]h ]h"]h$]h&]uh1j hj{hhhj-{hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j|j( j|j) j* j+ uh1jhhhj0rhNhNubj- )}(hX***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 ``unsigned int alloc_flags`` TTM_ALLOCATION_POOL_* flags **Description** Initialize the pool and its pool types.h](h)}(h**Parameters**h]j7 )}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj|ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj|ubjM )}(hhh](jR )}(h1``struct ttm_pool *pool`` the pool to initialize h](jX )}(h``struct ttm_pool *pool``h]j^ )}(hj}h]hstruct ttm_pool *pool}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj}ubjt )}(hhh]h)}(hthe pool to initializeh]hthe pool to initialize}(hj/}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+}hMhj,}ubah}(h]h ]h"]h$]h&]uh1js hj}ubeh}(h]h ]h"]h$]h&]uh1jQ hj+}hMhj }ubjR )}(h?``struct device *dev`` device for DMA allocations and mappings h](jX )}(h``struct device *dev``h]j^ )}(hjO}h]hstruct device *dev}(hjQ}hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjM}ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhjI}ubjt )}(hhh]h)}(h'device for DMA allocations and mappingsh]h'device for DMA allocations and mappings}(hjh}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd}hMhje}ubah}(h]h ]h"]h$]h&]uh1js hjI}ubeh}(h]h ]h"]h$]h&]uh1jQ hjd}hMhj }ubjR )}(h-``int nid`` NUMA node to use for allocations h](jX )}(h ``int nid``h]j^ )}(hj}h]hint nid}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj}ubjt )}(hhh]h)}(h NUMA node to use for allocationsh]h NUMA node to use for allocations}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1js hj}ubeh}(h]h ]h"]h$]h&]uh1jQ hj}hMhj }ubjR )}(h9``unsigned int alloc_flags`` TTM_ALLOCATION_POOL_* flags h](jX )}(h``unsigned int alloc_flags``h]j^ )}(hj}h]hunsigned int alloc_flags}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj}ubjt )}(hhh]h)}(hTTM_ALLOCATION_POOL_* flagsh]hTTM_ALLOCATION_POOL_* flags}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1js hj}ubeh}(h]h ]h"]h$]h&]uh1jQ hj}hMhj }ubeh}(h]h ]h"]h$]h&]uh1jL hj|ubh)}(h**Description**h]j7 )}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj}ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj|ubh)}(h'Initialize the pool and its pool types.h]h'Initialize the pool and its pool types.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj0rhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_pool_fini (C function)c.ttm_pool_finihNtauh1jhj0rhhhNhNubj)}(hhh](j)}(h*void ttm_pool_fini (struct ttm_pool *pool)h]j)}(h)void ttm_pool_fini(struct ttm_pool *pool)h](j)}(hvoidh]hvoid}(hjA~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=~hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMubj)}(h h]h }(hjP~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=~hhhjO~hMubj)}(h ttm_pool_finih]j)}(h ttm_pool_finih]h ttm_pool_fini}(hjb~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=~hhhjO~hMubj>)}(h(struct ttm_pool *pool)h]jD)}(hstruct ttm_pool *poolh](j)}(hj? h]hstruct}(hj~~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz~ubh)}(hhh]j)}(httm_poolh]httm_pool}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj~modnameN classnameNjj)}j]j)}j}jd~sbc.ttm_pool_finiasbuh1hhjz~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz~ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz~ubj)}(hpoolh]hpool}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjv~ubah}(h]h ]h"]h$]h&]jjuh1j=hj=~hhhjO~hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9~hhhjO~hMubah}(h]j4~ah ](jjeh"]h$]h&]j j )j huh1jhjO~hMhj6~hhubj )}(hhh]h)}(hCleanup a poolh]hCleanup a pool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj~hhubah}(h]h ]h"]h$]h&]uh1j hj6~hhhjO~hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj0rhNhNubj- )}(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]j7 )}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj!ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhjubjM )}(hhh]jR )}(h/``struct ttm_pool *pool`` the pool to clean up h](jX )}(h``struct ttm_pool *pool``h]j^ )}(hjBh]hstruct ttm_pool *pool}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhj<ubjt )}(hhh]h)}(hthe pool to clean uph]hthe pool to clean up}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1js hj<ubeh}(h]h ]h"]h$]h&]uh1jQ hjWhMhj9ubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj0rhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jttm_pool_debugfs (C function)c.ttm_pool_debugfshNtauh1jhj0rhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMcubj)}(httm_pool_debugfsh]j)}(httm_pool_debugfsh]httm_pool_debugfs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMcubj>)}(h+(struct ttm_pool *pool, struct seq_file *m)h](jD)}(hstruct ttm_pool *poolh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(httm_poolh]httm_pool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.ttm_pool_debugfsasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpoolh]hpool}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct seq_file *mh](j)}(hj? h]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(hseq_fileh]hseq_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j9c.ttm_pool_debugfsasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hmh]hm}(hjȀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMcubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMcubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMchjhhubj )}(hhh]h)}(h Debugfs dump function for a poolh]h Debugfs dump function for a pool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMchjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMcubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhj0rhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMghjubjM )}(hhh](jR )}(h?``struct ttm_pool *pool`` the pool to dump the information for h](jX )}(h``struct ttm_pool *pool``h]j^ )}(hj3h]hstruct ttm_pool *pool}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj1ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMehj-ubjt )}(hhh]h)}(h$the pool to dump the information forh]h$the pool to dump the information for}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMehjIubah}(h]h ]h"]h$]h&]uh1js hj-ubeh}(h]h ]h"]h$]h&]uh1jQ hjHhMehj*ubjR )}(h+``struct seq_file *m`` seq_file to dump to h](jX )}(h``struct seq_file *m``h]j^ )}(hjlh]hstruct seq_file *m}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMfhjfubjt )}(hhh]h)}(hseq_file to dump toh]hseq_file to dump to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1js hjfubeh}(h]h ]h"]h$]h&]uh1jQ hjhMfhj*ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMhhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:78: ./drivers/gpu/drm/ttm/ttm_pool.chMghjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj0rhhhNhNubeh}(h]jah ]h"]ttm page pool referenceah$]h&]uh1hhjMhhhhhKIubeh}(h]jIah ]h"]#the translation table manager (ttm)ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h$The Graphics Execution Manager (GEM)h]h$The Graphics Execution Manager (GEM)}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhKRubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjhhubh)}(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 }(hjhhhNhNubj)}(hJ`GEM - the Graphics Execution Manager `__h]h$GEM - the Graphics Execution Manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]name$GEM - the Graphics Execution Managerrefurihttp://lwn.net/Articles/283798/uh1jhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK[hjhhubh)}(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.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjhhubh)}(h8On a fundamental level, GEM involves several operations:h]h8On a fundamental level, GEM involves several operations:}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjhhubj)}(hhh](j)}(hMemory allocation and freeingh]h)}(hjEh]hMemory allocation and freeing}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhjCubah}(h]h ]h"]h$]h&]uh1jhj@hhhhhNubj)}(hCommand executionh]h)}(hj\h]hCommand execution}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjZubah}(h]h ]h"]h$]h&]uh1jhj@hhhhhNubj)}(h.Aperture management at command execution time h]h)}(h-Aperture management at command execution timeh]h-Aperture management at command execution time}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKlhjqubah}(h]h ]h"]h$]h&]uh1jhj@hhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j hhhKjhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhjhhubh)}(hhh](h)}(hGEM Initializationh]hGEM Initialization}(hjhhhNhNubah}(h]h ]h"]h$]h&]hj7uh1hhjhhhhhKwubh)}(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 }(hjhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hjȂh]hstruct drm_driver}(hjʂhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjƂubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhhhKyhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKyhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]j=ah ]h"]gem initializationah$]h&]uh1hhjhhhhhKwubh)}(hhh](h)}(hGEM Objects Creationh]hGEM Objects Creation}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjYuh1hhjhhhhhKubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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 }(hj#hhhNhNubh)}(h0:c:type:`struct drm_gem_object `h]j^ )}(hj-h]hstruct drm_gem_object}(hj/hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj+ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhhhKhj#ubh. 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 }(hj#hhhNhNubh)}(h0:c:type:`struct drm_gem_object `h]j^ )}(hjPh]hstruct drm_gem_object}(hjRhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhhhKhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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 }(hjwhhhNhNubh)}(h0:c:type:`struct drm_gem_object `h]j^ )}(hjh]hstruct drm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhhhKhjwubh 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.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXxGEM 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. Drivers can call drm_gem_huge_mnt_create() to create, mount and use a huge shmem mountpoint instead of the default one ('shm_mnt'). For builds with CONFIG_TRANSPARENT_HUGEPAGE enabled, further calls to drm_gem_object_init() will let shmem allocate huge pages when possible.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 }(hjhhhNhNubh)}(h0:c:type:`struct drm_gem_object `h]j^ )}(hjh]hstruct drm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhhhKhjubhX 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. Drivers can call drm_gem_huge_mnt_create() to create, mount and use a huge shmem mountpoint instead of the default one (‘shm_mnt’). For builds with CONFIG_TRANSPARENT_HUGEPAGE enabled, further calls to drm_gem_object_init() will let shmem allocate huge pages when possible.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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&]uh1hhhhKhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]j_ah ]h"]gem objects creationah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hGEM Objects Lifetimeh]hGEM Objects Lifetime}(hjhhhNhNubah}(h]h ]h"]h$]h&]hj{uh1hhjhhhhhKubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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 }(hjhhhNhNubh)}(h8:c:type:`struct drm_gem_object_funcs `h]j^ )}(hj%h]hstruct drm_gem_object_funcs}(hj'hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j gem_object_funcsuh1hhhhKhjubh free operation. That operation is mandatory for GEM-enabled drivers and must free the GEM object and all associated resources.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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().}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]jah ]h"]gem objects lifetimeah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hGEM Objects Namingh]hGEM Objects Naming}(hjdhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjahhhhhKubh)}(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.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjahhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjahhubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjahhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjahhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjahhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjahhubeh}(h]jah ]h"]gem objects namingah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hGEM Objects Mappingh]hGEM Objects Mapping}(hjЄhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj̈́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.}(hjhhhNhNubah}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj̈́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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj̈́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 }(hjhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hj h]hstruct drm_driver}(hj"hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhhhMhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj̈́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 }(hjGhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hjQh]hstruct drm_driver}(hjShhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjOubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhhhMhjGubh2 gem_vm_ops field with a pointer to VM operations.}(hjGhhhNhNubeh}(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 }(hjxhhhNhNubh)}(h<:c:type:`struct vm_operations_struct `h]j^ )}(hjh]hstruct vm_operations_struct}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j vm_operations_structuh1hhhhMhjxubh< made up of several fields, the more interesting ones being:}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj̈́hhubj )}(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); };}hjsbah}(h]h ]h"]h$]h&]jjforcelanguagej! highlight_args}uh1j hhhMhj̈́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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM(hj̈́hhubh)}(hXThe fault operation handler is responsible for mapping 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 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&]uh1hhhhM1hj̈́hhubh)}(hX3In order to reduce page table overhead, if the internal shmem mountpoint "shm_mnt" is configured to use transparent huge pages (for builds with CONFIG_TRANSPARENT_HUGEPAGE enabled) and if the shmem backing store managed to allocate a huge page for a faulty address, the fault handler will first attempt to insert that huge page into the VMA before falling back to individual page insertion. mmap() user address alignment for GEM objects is handled by providing a custom get_unmapped_area file operation which forwards to the shmem backing store. For most drivers, which don't create a huge mountpoint by default or through a module parameter, transparent huge pages can be enabled by either setting the "transparent_hugepage_shmem" kernel parameter or the "/sys/kernel/mm/transparent_hugepage/shmem_enabled" sysfs knob.h]hXAIn order to reduce page table overhead, if the internal shmem mountpoint “shm_mnt” is configured to use transparent huge pages (for builds with CONFIG_TRANSPARENT_HUGEPAGE enabled) and if the shmem backing store managed to allocate a huge page for a faulty address, the fault handler will first attempt to insert that huge page into the VMA before falling back to individual page insertion. mmap() user address alignment for GEM objects is handled by providing a custom get_unmapped_area file operation which forwards to the shmem backing store. For most drivers, which don’t create a huge mountpoint by default or through a module parameter, transparent huge pages can be enabled by either setting the “transparent_hugepage_shmem” kernel parameter or the “/sys/kernel/mm/transparent_hugepage/shmem_enabled” sysfs knob.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM4hj̈́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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMAhj̈́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 }(hjhhhNhNubh)}(h2:c:type:`struct file_operations `h]j^ )}(hj h]hstruct file_operations}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j file_operationsuh1hhhhMEhjubhK get_unmapped_area field with a pointer on drm_gem_dma_get_unmapped_area().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMEhj̈́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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMIhj̈́hhubeh}(h]jah ]h"]gem objects mappingah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hMemory Coherencyh]hMemory Coherency}(hjJhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjGhhhhhMMubh)}(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).}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMOhjGhhubeh}(h]jah ]h"]memory coherencyah$]h&]uh1hhjhhhhhMMubh)}(hhh](h)}(hCommand Executionh]hCommand Execution}(hjphhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjmhhhhhM]ubh)}(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&]uh1hhhhM_hjmhhubeh}(h]j ah ]h"]command executionah$]h&]uh1hhjhhhhhM]ubh)}(hhh](h)}(hGEM Function Referenceh]hGEM Function Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]hj%uh1hhjhhhhhMqubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_object_status (C enum)c.drm_gem_object_statushNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_gem_object_statush]j)}(henum drm_gem_object_statush](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKubj)}(h h]h }(hjˆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjʆhKubj)}(hdrm_gem_object_statush]j)}(hjh]hdrm_gem_object_status}(hj݆hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjنubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjʆhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjʆhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjʆhKhjhhubj )}(hhh]h)}(h,bitmask of object state for fdinfo reportingh]h,bitmask of object state for fdinfo reporting}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhK4hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjʆhKubeh}(h]h ](j! enumeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj!h]h Constants}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhK8hjubjM )}(hhh](jR )}(hL``DRM_GEM_OBJECT_RESIDENT`` object is resident in memory (ie. not unpinned) h](jX )}(h``DRM_GEM_OBJECT_RESIDENT``h]j^ )}(hj@h]hDRM_GEM_OBJECT_RESIDENT}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhK;hj:ubjt )}(hhh]h)}(h/object is resident in memory (ie. not unpinned)h]h/object is resident in memory (ie. not unpinned)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhK;hjVubah}(h]h ]h"]h$]h&]uh1js hj:ubeh}(h]h ]h"]h$]h&]uh1jQ hjUhK;hj7ubjR )}(hE``DRM_GEM_OBJECT_PURGEABLE`` object marked as purgeable by userspace h](jX )}(h``DRM_GEM_OBJECT_PURGEABLE``h]j^ )}(hjyh]hDRM_GEM_OBJECT_PURGEABLE}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhK>hjsubjt )}(hhh]h)}(h'object marked as purgeable by userspaceh]h'object marked as purgeable by userspace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK>hjubah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjhK>hj7ubjR )}(hJ``DRM_GEM_OBJECT_ACTIVE`` object is currently used by an active submissionh](jX )}(h``DRM_GEM_OBJECT_ACTIVE``h]j^ )}(hjh]hDRM_GEM_OBJECT_ACTIVE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhK@hjubjt )}(hhh]h)}(h0object is currently used by an active submissionh]h0object is currently used by an active submission}(hjˇhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKAhjȇubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjLJhK@hj7ubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKChjhhubh)}(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 }(hj hhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.status `h]j^ )}(hjh]hdrm_gem_object_funcs.status}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhK8hj ubhX 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.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hK8hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_object_funcs (C struct)c.drm_gem_object_funcshNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_gem_object_funcsh]j)}(hstruct drm_gem_object_funcsh](j)}(hj? h]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKDubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjchKDubj)}(hdrm_gem_object_funcsh]j)}(hjPh]hdrm_gem_object_funcs}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRhhhjchKDubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjNhhhjchKDubah}(h]jIah ](jjeh"]h$]h&]j j )j huh1jhjchKDhjKhhubj )}(hhh]h)}(hGEM object functionsh]hGEM object functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKIhjhhubah}(h]h ]h"]h$]h&]uh1j hjKhhhjchKDubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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, such that dma-buf importers can access it. 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. Called with a held GEM reservation lock. This callback is optional. ``vunmap`` Releases the address previously returned by **vmap**. Used by the drm_gem_dmabuf_vunmap() helper. Called with a held GEM reservation lock. 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. Called with a held GEM reservation lock. 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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKMhjubj )}(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; };}hjՈsbah}(h]h ]h"]h$]h&]jjuh1j hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKOhjubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKahjubjM )}(hhh](jR )}(hI``free`` Deconstructor for drm_gem_objects. This callback is mandatory. h](jX )}(h``free``h]j^ )}(hjh]hfree}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKPhjubjt )}(hhh](h)}(h"Deconstructor for drm_gem_objects.h]h"Deconstructor for drm_gem_objects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKNhjubh)}(hThis callback is mandatory.h]hThis callback is mandatory.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKPhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKPhjubjR )}(hF``open`` Called upon GEM handle creation. This callback is optional. h](jX )}(h``open``h]j^ )}(hjMh]hopen}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKYhjGubjt )}(hhh](h)}(h Called upon GEM handle creation.h]h Called upon GEM handle creation.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKWhjcubh)}(hThis callback is optional.h]hThis callback is optional.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKYhjcubeh}(h]h ]h"]h$]h&]uh1js hjGubeh}(h]h ]h"]h$]h&]uh1jQ hjbhKYhjubjR )}(hF``close`` Called upon GEM handle release. This callback is optional. h](jX )}(h ``close``h]j^ )}(hjh]hclose}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKbhjubjt )}(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:371: ./include/drm/drm_gem.hhK`hjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKbhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKbhjubjR )}(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](jX )}(h``print_info``h]j^ )}(hj݉h]h print_info}(hj߉hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjۉubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKqhj׉ubjt )}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKihjubhS, it can implement this optional hook for printing additional driver specific info.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKihjubh)}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKlhjubh)}(h2This callback is called from drm_gem_print_info().h]h2This callback is called from drm_gem_print_info().}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKohjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubeh}(h]h ]h"]h$]h&]uh1js hj׉ubeh}(h]h ]h"]h$]h&]uh1jQ hjhKqhjubjR )}(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](jX )}(h ``export``h]j^ )}(hjfh]hexport}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjdubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhK|hj`ubjt )}(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 }(hjhhhNhNubh)}(h:c:type:`dma_buf`h]j^ )}(hjh]hdma_buf}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_bufuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKyhjubh4. If this is not set drm_gem_prime_export() is used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKyhj|ubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hK|hj|ubeh}(h]h ]h"]h$]h&]uh1js hj`ubeh}(h]h ]h"]h$]h&]uh1jQ hj{hK|hjubjR )}(h``pin`` Pin backing buffer in memory, such that dma-buf importers can access it. Used by the drm_gem_map_attach() helper. This callback is optional. h](jX )}(h``pin``h]j^ )}(hjъh]hpin}(hjӊhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjϊubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjˊubjt )}(hhh](h)}(hqPin backing buffer in memory, such that dma-buf importers can access it. Used by the drm_gem_map_attach() helper.h]hqPin backing buffer in memory, such that dma-buf importers can access it. Used by the drm_gem_map_attach() helper.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./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&]uh1js hjˊubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(he``unpin`` Unpin backing buffer. Used by the drm_gem_map_detach() helper. This callback is optional. h](jX )}(h ``unpin``h]j^ )}(hjh]hunpin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjubjt )}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhj/ubh)}(hThis callback is optional.h]hThis callback is optional.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj/ubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj.hKhjubjR )}(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](jX )}(h``get_sg_table``h]j^ )}(hjah]h get_sg_table}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhj[ubjt )}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjwubh)}(h!See also drm_prime_pages_to_sg().h]h!See also drm_prime_pages_to_sg().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhKhjwubeh}(h]h ]h"]h$]h&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hjvhKhjubjR )}(h``vmap`` Returns a virtual address for the buffer. Used by the drm_gem_dmabuf_vmap() helper. Called with a held GEM reservation lock. This callback is optional. h](jX )}(h``vmap``h]j^ )}(hjh]hvmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjubjt )}(hhh](h)}(h|Returns a virtual address for the buffer. Used by the drm_gem_dmabuf_vmap() helper. Called with a held GEM reservation lock.h]h|Returns a virtual address for the buffer. Used by the drm_gem_dmabuf_vmap() helper. Called with a held GEM reservation lock.}(hj‹hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjыhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h``vunmap`` Releases the address previously returned by **vmap**. Used by the drm_gem_dmabuf_vunmap() helper. Called with a held GEM reservation lock. This callback is optional. h](jX )}(h ``vunmap``h]j^ )}(hjh]hvunmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjubjt )}(hhh](h)}(hReleases the address previously returned by **vmap**. Used by the drm_gem_dmabuf_vunmap() helper. Called with a held GEM reservation lock.h](h,Releases the address previously returned by }(hj hhhNhNubj7 )}(h**vmap**h]hvmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubhV. Used by the drm_gem_dmabuf_vunmap() helper. Called with a held GEM reservation lock.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(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](jX )}(h``mmap``h]j^ )}(hjKh]hmmap}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjIubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjEubjt )}(hhh](h)}(h7Handle mmap() of the gem object, setup vma accordingly.h]h7Handle mmap() of the gem object, setup vma accordingly.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjaubh)}(hThis callback is optional.h]hThis callback is optional.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjaubh)}(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 }(hjhhhNhNubj7 )}(h**mmap**h]hmmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh is present }(hjhhhNhNubj7 )}(h **vm_ops**h]hvm_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh is not used, the }(hjhhhNhNubj7 )}(h**mmap**h]hmmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh' callback must set vma->vm_ops instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjaubeh}(h]h ]h"]h$]h&]uh1js hjEubeh}(h]h ]h"]h$]h&]uh1jQ hj`hKhjubjR )}(h``evict`` Evicts gem object out from memory. Used by the drm_gem_object_evict() helper. Returns 0 on success, -errno otherwise. Called with a held GEM reservation lock. This callback is optional. h](jX )}(h ``evict``h]j^ )}(hjٌh]hevict}(hjیhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj׌ubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjӌubjt )}(hhh](h)}(hEvicts gem object out from memory. Used by the drm_gem_object_evict() helper. Returns 0 on success, -errno otherwise. Called with a held GEM reservation lock.h]hEvicts gem object out from memory. Used by the drm_gem_object_evict() helper. Returns 0 on success, -errno otherwise. Called with a held GEM reservation lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./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&]uh1js hjӌubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(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](jX )}(h ``status``h]j^ )}(hj!h]hstatus}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjubjt )}(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:371: ./include/drm/drm_gem.hhKhj7ubh)}(h"Called by drm_show_memory_stats().h]h"Called by drm_show_memory_stats().}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKhj7ubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj6hKhjubjR )}(hc``rss`` Return resident size of the object in physical memory. Called by drm_show_memory_stats(). h](jX )}(h``rss``h]j^ )}(hjih]hrss}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjgubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjcubjt )}(hhh](h)}(h6Return resident size of the object in physical memory.h]h6Return resident size of the object in physical memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjubh)}(h"Called by drm_show_memory_stats().h]h"Called by drm_show_memory_stats().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKhjubeh}(h]h ]h"]h$]h&]uh1js hjcubeh}(h]h ]h"]h$]h&]uh1jQ hj~hKhjubjR )}(hf``vm_ops`` Virtual memory operations used with mmap. This is optional but necessary for mmap support.h](jX )}(h ``vm_ops``h]j^ )}(hjh]hvm_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjubjt )}(hhh](h)}(h)Virtual memory operations used with mmap.h]h)Virtual memory operations used with mmap.}(hjʍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjǍubh)}(h0This is optional but necessary for mmap support.h]h0This is optional but necessary for mmap support.}(hjٍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjǍubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjƍhKhjubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_lru (C struct) c.drm_gem_lruhNtauh1jhjhhhNhNubj)}(hhh](j)}(h drm_gem_lruh]j)}(hstruct drm_gem_lruh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hKubj)}(h drm_gem_lruh]j)}(hjh]h drm_gem_lru}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj'hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj'hKubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj'hKhjhhubj )}(hhh]h)}(hA simple LRU helperh]hA simple LRU helper}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjYhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj'hKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jtj( jtj) j* j+ uh1jhhhjhNhNubj- )}(h**Definition**:: struct drm_gem_lru { long count; struct list_head list; }; **Members** ``count`` The total number of backing pages of the GEM objects in this LRU. ``list`` The LRU list.h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj|ubh:}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjxubj )}(hBstruct drm_gem_lru { long count; struct list_head list; };h]hBstruct drm_gem_lru { long count; struct list_head list; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjxubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjxubjM )}(hhh](jR )}(hL``count`` The total number of backing pages of the GEM objects in this LRU. h](jX )}(h ``count``h]j^ )}(hjɎh]hcount}(hjˎhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjǎubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjÎubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjߎubah}(h]h ]h"]h$]h&]uh1js hjÎubeh}(h]h ]h"]h$]h&]uh1jQ hjގhMhjubjR )}(h``list`` The LRU list.h](jX )}(h``list``h]j^ )}(hjh]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(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:371: ./include/drm/drm_gem.hhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjDubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM hjhhubh)}(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^ )}(hjfh]hshrinker.count_objects}(hjhhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjdubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j shrinkeruh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhj\ubh, and provides }(hj\hhhNhNubh)}(h:c:type:`drm_gem_lru_scan`h]j^ )}(hjh]hdrm_gem_lru_scan}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_lru_scanuh1hhjhKhj\ubh for driver’s }(hj\hhhNhNubh)}(h*:c:type:`shrinker.scan_objects `h]j^ )}(hjh]hshrinker.scan_objects}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j shrinkeruh1hhjhKhj\ubh implementation.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubh)}(hSAny access to this kind of object must be done with drm_device::gem_lru_mutex held.h]hSAny access to this kind of object must be done with drm_device::gem_lru_mutex held.}(hjԏhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_object (C struct)c.drm_gem_objecthNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_gem_objecth]j)}(hstruct drm_gem_objecth](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKubj)}(hdrm_gem_objecth]j)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj hKhjhhubj )}(hhh]h)}(hGEM buffer objecth]hGEM buffer object}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1j hjhhhj hKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jVj( jVj) j* j+ uh1jhhhjhNhNubj- )}(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; struct mutex lock; } 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`` Fields used by GPUVM to manage mappings pointing to this GEM object. When DRM_GPUVM_IMMEDIATE_MODE is set, this list is protected by the mutex. Otherwise, the list is protected by the GEMs :c:type:`dma_resv` lock. Note that all entries in this list must agree on whether DRM_GPUVM_IMMEDIATE_MODE is set. ``gpuva.list`` list of GPUVM mappings attached to this GEM object. Drivers should lock list accesses with either the GEMs :c:type:`dma_resv` lock (:c:type:`drm_gem_object.resv `) or the :c:type:`drm_gem_object.gpuva `.lock mutex. ``gpuva.lock`` lock protecting access to :c:type:`drm_gem_object.gpuva `.list when DRM_GPUVM_IMMEDIATE_MODE is used. Only used when DRM_GPUVM_IMMEDIATE_MODE is set. It should be safe to take this mutex during the fence signalling path, so do not allocate memory while holding this lock. Otherwise, the :c:type:`dma_resv` lock should be used. ``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. Access to this field must be done with drm_device::gem_lru_mutex held.h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj^ubh:}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjZubj )}(hX 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; struct mutex lock; } gpuva; const struct drm_gem_object_funcs *funcs; struct list_head lru_node; struct drm_gem_lru *lru; };h]hX 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; struct mutex lock; } gpuva; const struct drm_gem_object_funcs *funcs; struct list_head lru_node; struct drm_gem_lru *lru; };}hj{sbah}(h]h ]h"]h$]h&]jjuh1j hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjZubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM)hjZubjM )}(hhh](jR )}(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](jX )}(h ``refcount``h]j^ )}(hjh]hrefcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(hhh](h)}(hReference count of this objecth]hReference count of this object}(hjĐhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh)}(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.}(hjӐhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(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](jX )}(h``handle_count``h]j^ )}(hjh]h handle_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM)hjubjt )}(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:371: ./include/drm/drm_gem.hhM#hj ubh)}(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:371: ./include/drm/drm_gem.hhM%hj ubh)}(h@Protected by :c:type:`drm_device.object_name_lock `.h](h Protected by }(hj+hhhNhNubh)}(h2:c:type:`drm_device.object_name_lock `h]j^ )}(hj5h]hdrm_device.object_name_lock}(hj7hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj3ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhj hM)hj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM)hj ubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hM)hjubjR )}(h(``dev`` DRM dev this object belongs to. h](jX )}(h``dev``h]j^ )}(hjnh]hdev}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjlubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM0hjhubjt )}(hhh]h)}(hDRM dev this object belongs to.h]hDRM dev this object belongs to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1js hjhubeh}(h]h ]h"]h$]h&]uh1jQ hjhM0hjubjR )}(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](jX )}(h``filp``h]j^ )}(hjh]hfilp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM8hjubjt )}(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 }(hjhhhNhNubj7 )}(h**filp**h]hfilp}(hjȑhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh is NULL.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM5hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM8hjubjR )}(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](jX )}(h ``vma_node``h]j^ )}(hjh]hvma_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMDhjubjt )}(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:371: ./include/drm/drm_gem.hhM?hj ubh)}(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:371: ./include/drm/drm_gem.hhMChj ubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMDhjubjR )}(hN``size`` Size of the object, in bytes. Immutable over the object's lifetime. h](jX )}(h``size``h]j^ )}(hj<h]hsize}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMLhj6ubjt )}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMKhjRubah}(h]h ]h"]h$]h&]uh1js hj6ubeh}(h]h ]h"]h$]h&]uh1jQ hjQhMLhjubjR )}(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](jX )}(h``name``h]j^ )}(hjvh]hname}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjtubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMUhjpubjt )}(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}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMShjubh4. This is used by the GEM_FLINK and GEM_OPEN ioctls.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1js hjpubeh}(h]h ]h"]h$]h&]uh1jQ hjhMUhjubjR )}(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](jX )}(h ``dma_buf``h]j^ )}(hjӒh]hdma_buf}(hjՒhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjђubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMbhj͒ubjt )}(hhh](h)}(h(dma-buf associated with this GEM object.h]h(dma-buf associated with this GEM object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM\hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM^hjubh)}(h@Protected by :c:type:`drm_device.object_name_lock `.h](h Protected by }(hj hhhNhNubh)}(h2:c:type:`drm_device.object_name_lock `h]j^ )}(hjh]hdrm_device.object_name_lock}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhjhMbhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMbhjubeh}(h]h ]h"]h$]h&]uh1js hj͒ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMbhjubjR )}(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](jX )}(h``import_attach``h]j^ )}(hjMh]h import_attach}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMvhjGubjt )}(hhh](h)}(h'dma-buf attachment backing this object.h]h'dma-buf attachment backing this object.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMihjcubh)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMkhjcubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMohjubhg callback is responsible for cleaning up the dma_buf attachment and references acquired at import time.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMohjcubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMshjcubeh}(h]h ]h"]h$]h&]uh1js hjGubeh}(h]h ]h"]h$]h&]uh1jQ hjbhMvhjubjR )}(h``resv`` Pointer to reservation object associated with the this GEM object. Normally (**resv** == &**_resv**) except for imported GEM objects. h](jX )}(h``resv``h]j^ )}(hjדh]hresv}(hjٓhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjՓubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjѓubjt )}(hhh](h)}(hBPointer to reservation object associated with the this GEM object.h]hBPointer to reservation object associated with the this GEM object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM}hjubh)}(hBNormally (**resv** == &**_resv**) except for imported GEM objects.h](h Normally (}(hjhhhNhNubj7 )}(h**resv**h]hresv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh0 == &**_resv**) except for imported GEM objects.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1js hjѓubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h^``_resv`` A reservation object for this GEM object. This is unused for imported GEM objects. h](jX )}(h ``_resv``h]j^ )}(hj1h]h_resv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj/ubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhj+ubjt )}(hhh](h)}(h)A reservation object for this GEM object.h]h)A reservation object for this GEM object.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjGubh)}(h(This is unused for imported GEM objects.h]h(This is unused for imported GEM objects.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjGubeh}(h]h ]h"]h$]h&]uh1js hj+ubeh}(h]h ]h"]h$]h&]uh1jQ hjFhMhjubjR )}(hX<``gpuva`` Fields used by GPUVM to manage mappings pointing to this GEM object. When DRM_GPUVM_IMMEDIATE_MODE is set, this list is protected by the mutex. Otherwise, the list is protected by the GEMs :c:type:`dma_resv` lock. Note that all entries in this list must agree on whether DRM_GPUVM_IMMEDIATE_MODE is set. h](jX )}(h ``gpuva``h]j^ )}(hjyh]hgpuva}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjsubjt )}(hhh](h)}(hDFields used by GPUVM to manage mappings pointing to this GEM object.h]hDFields used by GPUVM to manage mappings pointing to this GEM object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh)}(hWhen DRM_GPUVM_IMMEDIATE_MODE is set, this list is protected by the mutex. Otherwise, the list is protected by the GEMs :c:type:`dma_resv` lock.h](hxWhen DRM_GPUVM_IMMEDIATE_MODE is set, this list is protected by the mutex. Otherwise, the list is protected by the GEMs }(hjhhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjh]hdma_resv}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjȔhMhjubh)}(hYNote that all entries in this list must agree on whether DRM_GPUVM_IMMEDIATE_MODE is set.h]hYNote that all entries in this list must agree on whether DRM_GPUVM_IMMEDIATE_MODE is set.}(hjӔhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubeh}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hX``gpuva.list`` list of GPUVM mappings attached to this GEM object. Drivers should lock list accesses with either the GEMs :c:type:`dma_resv` lock (:c:type:`drm_gem_object.resv `) or the :c:type:`drm_gem_object.gpuva `.lock mutex. h](jX )}(h``gpuva.list``h]j^ )}(hjh]h gpuva.list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(hhh](h)}(h3list of GPUVM mappings attached to this GEM object.h]h3list of GPUVM mappings attached to this GEM object.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhj ubh)}(hDrivers should lock list accesses with either the GEMs :c:type:`dma_resv` lock (:c:type:`drm_gem_object.resv `) or the :c:type:`drm_gem_object.gpuva `.lock mutex.h](h7Drivers should lock list accesses with either the GEMs }(hjhhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hj&h]hdma_resv}(hj(hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh lock (}(hjhhhNhNubh)}(h.:c:type:`drm_gem_object.resv `h]j^ )}(hjJh]hdrm_gem_object.resv}(hjLhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjChMhjubh ) or the }(hjhhhNhNubh)}(h/:c:type:`drm_gem_object.gpuva `h]j^ )}(hjmh]hdrm_gem_object.gpuva}(hjohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjChMhjubh .lock mutex.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChMhj ubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjubjR )}(hXg``gpuva.lock`` lock protecting access to :c:type:`drm_gem_object.gpuva `.list when DRM_GPUVM_IMMEDIATE_MODE is used. Only used when DRM_GPUVM_IMMEDIATE_MODE is set. It should be safe to take this mutex during the fence signalling path, so do not allocate memory while holding this lock. Otherwise, the :c:type:`dma_resv` lock should be used. h](jX )}(h``gpuva.lock``h]j^ )}(hjh]h gpuva.lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(hhh](h)}(hulock protecting access to :c:type:`drm_gem_object.gpuva `.list when DRM_GPUVM_IMMEDIATE_MODE is used.h](hlock protecting access to }(hjhhhNhNubh)}(h/:c:type:`drm_gem_object.gpuva `h]j^ )}(hjɕh]hdrm_gem_object.gpuva}(hj˕hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjǕubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh,.list when DRM_GPUVM_IMMEDIATE_MODE is used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hOnly used when DRM_GPUVM_IMMEDIATE_MODE is set. It should be safe to take this mutex during the fence signalling path, so do not allocate memory while holding this lock. Otherwise, the :c:type:`dma_resv` lock should be used.h](hOnly used when DRM_GPUVM_IMMEDIATE_MODE is set. It should be safe to take this mutex during the fence signalling path, so do not allocate memory while holding this lock. Otherwise, the }(hjhhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjh]hdma_resv}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh lock should be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(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](jX )}(h ``funcs``h]j^ )}(hj5h]hfuncs}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj3ubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhj/ubjt )}(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 }(hjNhhhNhNubh)}(h:c:type:`drm_driver`h]j^ )}(hjXh]h drm_driver}(hjZhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjNubh GEM callbacks.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhMhjKubh)}(hNew drivers should use this.h]hNew drivers should use this.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubeh}(h]h ]h"]h$]h&]uh1js hj/ubeh}(h]h ]h"]h$]h&]uh1jQ hjJhMhjubjR )}(h3``lru_node`` List node in a :c:type:`drm_gem_lru`. h](jX )}(h ``lru_node``h]j^ )}(hjh]hlru_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(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^ )}(hjÖh]h drm_gem_lru}(hjŖhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_lruuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h``lru`` The current LRU list that the GEM object is on. Access to this field must be done with drm_device::gem_lru_mutex held.h](jX )}(h``lru``h]j^ )}(hjh]hlru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh)}(hFAccess to this field must be done with drm_device::gem_lru_mutex held.h]hFAccess to this field must be done with drm_device::gem_lru_mutex held.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjKubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjhhubh)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjhhubh)}(h+Buffer objects are often abbreviated to BO.h]h+Buffer objects are often abbreviated to BO.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_GEM_FOPS (C macro)c.DRM_GEM_FOPShNtauh1jhjhhhNhNubj)}(hhh](j)}(h DRM_GEM_FOPSh]j)}(h DRM_GEM_FOPSh]j)}(h DRM_GEM_FOPSh]j)}(hjh]h DRM_GEM_FOPS}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jʗj( jʗj) j* j+ uh1jhhhjhNhNubh)}(h``DRM_GEM_FOPS``h]j^ )}(hjЗh]h DRM_GEM_FOPS}(hjҗhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjΗubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjhhubj )}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjhMhjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./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 }(hjhhhNhNubh)}(h:c:type:`file_operations`h]j^ )}(hj%h]hfile_operations}(hj'hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j file_operationsuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubhR structure. If all you need are the default ops, use DEFINE_DRM_GEM_FOPS instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jDEFINE_DRM_GEM_FOPS (C macro)c.DEFINE_DRM_GEM_FOPShNtauh1jhjhhhNhNubj)}(hhh](j)}(hDEFINE_DRM_GEM_FOPSh]j)}(hDEFINE_DRM_GEM_FOPSh]j)}(hDEFINE_DRM_GEM_FOPSh]j)}(hjfh]hDEFINE_DRM_GEM_FOPS}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjdhhhjhMubah}(h]j_ah ](jjeh"]h$]h&]j j )j huh1jhjhMhjahhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjahhhjhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubh)}(h``DEFINE_DRM_GEM_FOPS (name)``h]j^ )}(hjh]hDEFINE_DRM_GEM_FOPS (name)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjhhubj )}(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:371: ./include/drm/drm_gem.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjʘhMhjhhubj- )}(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]j7 )}(hjטh]h Parameters}(hj٘hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj՘ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjјubjM )}(hhh]jR )}(h*``name`` name for the generated structure h](jX )}(h``name``h]j^ )}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(hhh]h)}(h name for the generated structureh]h name for the generated structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjubah}(h]h ]h"]h$]h&]uh1jL hjјubh)}(h**Description**h]j7 )}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjјubh)}(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 }(hjGhhhNhNubh)}(h2:c:type:`struct file_operations `h]j^ )}(hjQh]hstruct file_operations}(hjShhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjOubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j file_operationsuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjGubh1 for GEM based drivers, which can be assigned to }(hjGhhhNhNubh)}(h&:c:type:`drm_driver.fops `h]j^ )}(hjuh]hdrm_driver.fops}(hjwhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjsubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhjnhMhjGubh. Note that this structure cannot be shared between drivers, because it contains a reference to the current module using THIS_MODULE.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhjјubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjјubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gem_get_huge_mnt (C function)c.drm_gem_get_huge_mnthNtauh1jhjhhhNhNubj)}(hhh](j)}(h?struct vfsmount * drm_gem_get_huge_mnt (struct drm_device *dev)h]j)}(h=struct vfsmount *drm_gem_get_huge_mnt(struct drm_device *dev)h](j)}(hj? h]hstruct}(hj˙hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǙhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMubj)}(h h]h }(hjٙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǙhhhjؙhMubh)}(hhh]j)}(hvfsmounth]hvfsmount}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gem_get_huge_mntsbc.drm_gem_get_huge_mntasbuh1hhjǙhhhjؙhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǙhhhjؙhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǙhhhjؙhMubj)}(hdrm_gem_get_huge_mnth]j)}(hjh]hdrm_gem_get_huge_mnt}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjǙhhhjؙhMubj>)}(h(struct drm_device *dev)h]jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjemodnameN classnameNjj)}j]jc.drm_gem_get_huge_mntasbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj=ubah}(h]h ]h"]h$]h&]jjuh1j=hjǙhhhjؙhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjÙhhhjؙhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjؙhMhjhhubj )}(hhh]h)}(h2Get the huge tmpfs mountpoint used by a DRM deviceh]h2Get the huge tmpfs mountpoint used by a DRM device}(hjƚhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjÚhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjؙhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jޚj( jޚj) j* j+ uh1jhhhjhNhNubj- )}(hXh**Parameters** ``struct drm_device *dev`` DRM device **Description** This function gets the huge tmpfs mountpoint used by DRM device **dev**. A huge tmpfs mountpoint is used instead of `shm_mnt` after a successful call to drm_gem_huge_mnt_create() when CONFIG_TRANSPARENT_HUGEPAGE is enabled. **Return** The huge tmpfs mountpoint in use, NULL otherwise.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjM )}(hhh]jR )}(h&``struct drm_device *dev`` DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hjh]hstruct drm_device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj@ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh)}(hThis function gets the huge tmpfs mountpoint used by DRM device **dev**. A huge tmpfs mountpoint is used instead of `shm_mnt` after a successful call to drm_gem_huge_mnt_create() when CONFIG_TRANSPARENT_HUGEPAGE is enabled.h](h@This function gets the huge tmpfs mountpoint used by DRM device }(hjXhhhNhNubj7 )}(h**dev**h]hdev}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjXubh-. A huge tmpfs mountpoint is used instead of }(hjXhhhNhNubhtitle_reference)}(h `shm_mnt`h]hshm_mnt}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jrhjXubhb after a successful call to drm_gem_huge_mnt_create() when CONFIG_TRANSPARENT_HUGEPAGE is enabled.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh)}(h1The huge tmpfs mountpoint in use, NULL otherwise.h]h1The huge tmpfs mountpoint in use, NULL otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_object_get (C function)c.drm_gem_object_gethNtauh1jhjhhhNhNubj)}(hhh](j)}(h4void drm_gem_object_get (struct drm_gem_object *obj)h]j)}(h3void drm_gem_object_get(struct drm_gem_object *obj)h](j)}(hvoidh]hvoid}(hjԛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЛhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM#ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЛhhhjhM#ubj)}(hdrm_gem_object_geth]j)}(hdrm_gem_object_geth]hdrm_gem_object_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjЛhhhjhM#ubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj1modnameN classnameNjj)}j]j)}j}jsbc.drm_gem_object_getasbuh1hhj ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hobjh]hobj}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubah}(h]h ]h"]h$]h&]jjuh1j=hjЛhhhjhM#ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj̛hhhjhM#ubah}(h]jǛah ](jjeh"]h$]h&]j j )j huh1jhjhM#hjɛhhubj )}(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:371: ./include/drm/drm_gem.hhM#hjhhubah}(h]h ]h"]h$]h&]uh1j hjɛhhhjhM#ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM'hjubjM )}(hhh]jR )}(h1``struct drm_gem_object *obj`` GEM buffer object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj՜h]hstruct drm_gem_object *obj}(hjלhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjӜubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM$hjϜubjt )}(hhh]h)}(hGEM buffer objecth]hGEM buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1js hjϜubeh}(h]h ]h"]h$]h&]uh1jQ hjhM$hj̜ubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM&hjubh)}(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 }(hj&hhhNhNubj7 )}(h**obj**h]hobj}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&ubhT. It is illegal to call this without already holding a reference. No locks required.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_object_put (C function)c.drm_gem_object_puthNtauh1jhjhhhNhNubj)}(hhh](j)}(h4void drm_gem_object_put (struct drm_gem_object *obj)h]j)}(h3void drm_gem_object_put(struct drm_gem_object *obj)h](j)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM6ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjuhM6ubj)}(hdrm_gem_object_puth]j)}(hdrm_gem_object_puth]hdrm_gem_object_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjuhM6ubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjĝmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_object_putasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjchhhjuhM6ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_hhhjuhM6ubah}(h]jZah ](jjeh"]h$]h&]j j )j huh1jhjuhM6hj\hhubj )}(hhh]h)}(h"drop a GEM buffer object referenceh]h"drop a GEM buffer object reference}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM6hj$hhubah}(h]h ]h"]h$]h&]uh1j hj\hhhjuhM6ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j?j( j?j) j* j+ uh1jhhhjhNhNubj- )}(hz**Parameters** ``struct drm_gem_object *obj`` GEM buffer object **Description** This releases a reference to **obj**.h](h)}(h**Parameters**h]j7 )}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjGubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM:hjCubjM )}(hhh]jR )}(h1``struct drm_gem_object *obj`` GEM buffer object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjhh]hstruct drm_gem_object *obj}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjfubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM7hjbubjt )}(hhh]h)}(hGEM buffer objecth]hGEM buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hM7hj~ubah}(h]h ]h"]h$]h&]uh1js hjbubeh}(h]h ]h"]h$]h&]uh1jQ hj}hM7hj_ubah}(h]h ]h"]h$]h&]uh1jL hjCubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM9hjCubh)}(h%This releases a reference to **obj**.h](hThis releases a reference to }(hjhhhNhNubj7 )}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM8hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_gem_object_is_shared_for_memory_stats (C function)+c.drm_gem_object_is_shared_for_memory_statshNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMqubj)}(h)drm_gem_object_is_shared_for_memory_statsh]j)}(h)drm_gem_object_is_shared_for_memory_statsh]h)drm_gem_object_is_shared_for_memory_stats}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMqubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjVmodnameN classnameNjj)}j]j)}j}jsb+c.drm_gem_object_is_shared_for_memory_statsasbuh1hhj2ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj.ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMqubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMqubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMqhjhhubj )}(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:371: ./include/drm/drm_gem.hhMqhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMqubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jџj( jџj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj۟h]h Parameters}(hjݟhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjٟubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMuhj՟ubjM )}(hhh]jR )}(h/``struct drm_gem_object *obj`` obj in question h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMvhjubjt )}(hhh]h)}(hobj in questionh]hobj in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMvhjubah}(h]h ]h"]h$]h&]uh1jL hj՟ubh)}(h**Description**h]j7 )}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMxhj՟ubh)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMrhj՟ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_is_imported (C function)c.drm_gem_is_importedhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhM~ubj)}(hdrm_gem_is_importedh]j)}(hdrm_gem_is_importedh]hdrm_gem_is_imported}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvhhhjhM~ubj>)}(h"(const struct drm_gem_object *obj)h]jD)}(h const struct drm_gem_object *objh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjàhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjѠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjޠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_is_importedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjvhhhjhM~ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjrhhhjhM~ubah}(h]jmah ](jjeh"]h$]h&]j j )j huh1jhjhM~hjohhubj )}(hhh]h)}(h.Tests if GEM object's buffer has been importedh]h0Tests if GEM object’s buffer has been imported}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhM~hjQhhubah}(h]h ]h"]h$]h&]uh1j hjohhhjhM~ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jlj( jlj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjtubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjpubjM )}(hhh]jR )}(h4``const struct drm_gem_object *obj`` the GEM object h](jX )}(h$``const struct drm_gem_object *obj``h]j^ )}(hjh]h const struct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(hhh]h)}(hthe GEM objecth]hthe GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjpubh)}(h **Return**h]j7 )}(hjСh]hReturn}(hjҡhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjΡubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjpubh)}(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:371: ./include/drm/drm_gem.hhMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_gpuva_init (C function)c.drm_gem_gpuva_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h4void drm_gem_gpuva_init (struct drm_gem_object *obj)h]j)}(h3void drm_gem_gpuva_init(struct drm_gem_object *obj)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hMubj)}(hdrm_gem_gpuva_inith]j)}(hdrm_gem_gpuva_inith]hdrm_gem_gpuva_init}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj#hMubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjrmodnameN classnameNjj)}j]j)}j}j8sbc.drm_gem_gpuva_initasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjJubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj#hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj#hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj#hMhj hhubj )}(hhh]h)}(h)initialize the gpuva list of a GEM objecth]h)initialize the gpuva list of a GEM object}(hjբhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjҢhhubah}(h]h ]h"]h$]h&]uh1j hj hhhj#hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjM )}(hhh]jR )}(h<``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(hhh]h)}(hthe :c:type:`drm_gem_object`h](hthe }(hj/hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj9h]hdrm_gem_object}(hj;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhj+hMhj/ubeh}(h]h ]h"]h$]h&]uh1hhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj+hMhj ubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh)}(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}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh’s }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMhjubh list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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 }(hjۣhhhNhNubh)}(h:c:type:`drm_driver_feature`h]j^ )}(hjh]hdrm_driver_feature}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driver_featureuh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjۣubh DRIVER_GEM_GPUVA.}(hjۣhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h"See also drm_gem_gpuva_set_lock().h]h"See also drm_gem_gpuva_set_lock().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_gem_for_each_gpuvm_bo (C macro)c.drm_gem_for_each_gpuvm_bohNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_gem_for_each_gpuvm_boh]j)}(hdrm_gem_for_each_gpuvm_boh]j)}(hdrm_gem_for_each_gpuvm_boh]j)}(hj6h]hdrm_gem_for_each_gpuvm_bo}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhjShMubah}(h]j/ah ](jjeh"]h$]h&]j j )j huh1jhjShMhj1hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj1hhhjShMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jlj( jlj) j* j+ uh1jhhhjhNhNubh)}(h.``drm_gem_for_each_gpuvm_bo (entry__, obj__)``h]j^ )}(hjrh]h*drm_gem_for_each_gpuvm_bo (entry__, obj__)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjhhubj )}(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^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhMhjhhubj- )}(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]j7 )}(hjƤh]h Parameters}(hjȤhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjĤubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjM )}(hhh](jR )}(hQ``entry__`` :c:type:`drm_gpuvm_bo` structure to assign to in each iteration step h](jX )}(h ``entry__``h]j^ )}(hjh]hentry__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjߤubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMhjubh. structure to assign to in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjߤubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjܤubjR )}(h^``obj__`` the :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated with h](jX )}(h ``obj__``h]j^ )}(hj=h]hobj__}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhj7ubjt )}(hhh]h)}(hSthe :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated withh](hthe }(hjVhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj`h]hdrm_gem_object}(hjbhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj^ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjRhMhjVubh the }(hjVhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjRhMhjVubh to walk are associated with}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1js hj7ubeh}(h]h ]h"]h$]h&]uh1jQ hjRhMhjܤubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubh)}(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 }(hjԥhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjޥh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjܥubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjԥubh structures associated with the }(hjԥhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhMhjԥubh.}(hjԥhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(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_safehNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_gem_for_each_gpuvm_bo_safeh]j)}(hdrm_gem_for_each_gpuvm_bo_safeh]j)}(hdrm_gem_for_each_gpuvm_bo_safeh]j)}(hjCh]hdrm_gem_for_each_gpuvm_bo_safe}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhj`hMubah}(h]j<ah ](jjeh"]h$]h&]j j )j huh1jhj`hMhj>hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj>hhhj`hMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jyj( jyj) j* j+ uh1jhhhjhNhNubh)}(h;``drm_gem_for_each_gpuvm_bo_safe (entry__, next__, obj__)``h]j^ )}(hjh]h7drm_gem_for_each_gpuvm_bo_safe (entry__, next__, obj__)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjhhubj )}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhMhjhhubj- )}(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]j7 )}(hjӦh]h Parameters}(hjզhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjѦubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjͦubjM )}(hhh](jR )}(hP``entry__`` :c:type:`drm_gpuvm_bostructure` to assign to in each iteration step h](jX )}(h ``entry__``h]j^ )}(hjh]hentry__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bostructureuh1hhjhMhj ubh$ to assign to in each iteration step}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hH``next__`` :c:type:`next` :c:type:`drm_gpuvm_bo` to store the next step h](jX )}(h ``next__``h]j^ )}(hjJh]hnext__}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjDubjt )}(hhh]h)}(h<:c:type:`next` :c:type:`drm_gpuvm_bo` to store the next steph](h)}(h:c:type:`next`h]j^ )}(hjih]hnext}(hjkhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjgubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j nextuh1hhj_hMhjcubh }(hjchhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhj_hMhjcubh to store the next step}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1js hjDubeh}(h]h ]h"]h$]h&]uh1jQ hj_hMhjubjR )}(h^``obj__`` the :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated with h](jX )}(h ``obj__``h]j^ )}(hjŧh]hobj__}(hjǧhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjçubah}(h]h ]h"]h$]h&]uh1jW hQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhjubjt )}(hhh]h)}(hSthe :c:type:`drm_gem_object` the :c:type:`drm_gpuvm_bo` to walk are associated withh](hthe }(hjާhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjڧhMhjާubh the }(hjާhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hj h]h drm_gpuvm_bo}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjڧhMhjާubh to walk are associated with}(hjާhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjڧhMhjۧubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjڧhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjͦubh)}(h**Description**h]j7 )}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjDubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./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 }(hj\hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjfh]h drm_gpuvm_bo}(hjhhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjdubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhQ/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:371: ./include/drm/drm_gem.hhMhj\ubh structures associated with the }(hj\hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhMhj\ubhb. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjͦubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gem_huge_mnt_create (C function)c.drm_gem_huge_mnt_createhNtauh1jhjhhhNhNubj)}(hhh](j)}(hGint drm_gem_huge_mnt_create (struct drm_device *dev, const char *value)h]j)}(hFint drm_gem_huge_mnt_create(struct drm_device *dev, const char *value)h](j)}(hinth]hint}(hjѨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͨhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chK_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͨhhhjߨhK_ubj)}(hdrm_gem_huge_mnt_createh]j)}(hdrm_gem_huge_mnt_createh]hdrm_gem_huge_mnt_create}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjͨhhhjߨhK_ubj>)}(h+(struct drm_device *dev, const char *value)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj.modnameN classnameNjj)}j]j)}j}jsbc.drm_gem_huge_mnt_createasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevh]hdev}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hconst char *valueh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hvalueh]hvalue}(hjĩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjͨhhhjߨhK_ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjɨhhhjߨhK_ubah}(h]jĨah ](jjeh"]h$]h&]j j )j huh1jhjߨhK_hjƨhhubj )}(hhh]h)}(h-Create, mount and use a huge tmpfs mountpointh]h-Create, mount and use a huge tmpfs mountpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chK_hjhhubah}(h]h ]h"]h$]h&]uh1j hjƨhhhjߨhK_ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hX**Parameters** ``struct drm_device *dev`` DRM device that will use the huge tmpfs mountpoint ``const char *value`` huge tmpfs mount option value **Description** This function creates and mounts a dedicated huge tmpfs mountpoint for the lifetime of the DRM device **dev** which is used at GEM object initialization with drm_gem_object_init(). The most common option for **value** is "within_size" which only allocates huge pages if the page will be fully within the GEM object size. "always", "advise" and "never" are supported too but the latter would just create a mountpoint similar to the default one (`shm_mnt`). See shmemfs and Transparent Hugepage for more information. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKchj ubjM )}(hhh](jR )}(hN``struct drm_device *dev`` DRM device that will use the huge tmpfs mountpoint h](jX )}(h``struct drm_device *dev``h]j^ )}(hj/h]hstruct drm_device *dev}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj-ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chK`hj)ubjt )}(hhh]h)}(h2DRM device that will use the huge tmpfs mountpointh]h2DRM device that will use the huge tmpfs mountpoint}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhK`hjEubah}(h]h ]h"]h$]h&]uh1js hj)ubeh}(h]h ]h"]h$]h&]uh1jQ hjDhK`hj&ubjR )}(h4``const char *value`` huge tmpfs mount option value h](jX )}(h``const char *value``h]j^ )}(hjhh]hconst char *value}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjfubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKahjbubjt )}(hhh]h)}(hhuge tmpfs mount option valueh]hhuge tmpfs mount option value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKahj~ubah}(h]h ]h"]h$]h&]uh1js hjbubeh}(h]h ]h"]h$]h&]uh1jQ hj}hKahj&ubeh}(h]h ]h"]h$]h&]uh1jL hj ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKchj ubh)}(hThis function creates and mounts a dedicated huge tmpfs mountpoint for the lifetime of the DRM device **dev** which is used at GEM object initialization with drm_gem_object_init().h](hfThis function creates and mounts a dedicated huge tmpfs mountpoint for the lifetime of the DRM device }(hjhhhNhNubj7 )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubhG which is used at GEM object initialization with drm_gem_object_init().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKbhj ubh)}(hXMThe most common option for **value** is "within_size" which only allocates huge pages if the page will be fully within the GEM object size. "always", "advise" and "never" are supported too but the latter would just create a mountpoint similar to the default one (`shm_mnt`). See shmemfs and Transparent Hugepage for more information.h](hThe most common option for }(hjڪhhhNhNubj7 )}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjڪubh is “within_size” which only allocates huge pages if the page will be fully within the GEM object size. “always”, “advise” and “never” are supported too but the latter would just create a mountpoint similar to the default one (}(hjڪhhhNhNubjs)}(h `shm_mnt`h]hshm_mnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jrhjڪubh=). See shmemfs and Transparent Hugepage for more information.}(hjڪhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKfhj ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKlhj 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&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKmhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_object_init (C function)c.drm_gem_object_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjbhKubj)}(hdrm_gem_object_inith]j)}(hdrm_gem_object_inith]hdrm_gem_object_init}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjbhKubj>)}(hA(struct drm_device *dev, struct drm_gem_object *obj, size_t size)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jwsbc.drm_gem_object_initasbuh1hhjubj)}(h h]h }(hjϫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjݫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj#modnameN classnameNjj)}j]j˫c.drm_gem_object_initasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjxmodnameN classnameNjj)}j]j˫c.drm_gem_object_initasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjPhhhjbhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjLhhhjbhKubah}(h]jGah ](jjeh"]h$]h&]j j )j huh1jhjbhKhjIhhubj )}(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:374: ./drivers/gpu/drm/drm_gem.chKhjɬhhubah}(h]h ]h"]h$]h&]uh1j hjIhhhjbhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hXv**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. A huge mountpoint can be used by calling drm_gem_huge_mnt_create() beforehand.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubjM )}(hhh](jR )}(hK``struct drm_device *dev`` drm_device the object should be initialized for h](jX )}(h``struct drm_device *dev``h]j^ )}(hj h]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubjt )}(hhh]h)}(h/drm_device the object should be initialized forh]h/drm_device the object should be initialized for}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hKhj#ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj"hKhjubjR )}(h<``struct drm_gem_object *obj`` drm_gem_object to initialize h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjFh]hstruct drm_gem_object *obj}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhj@ubjt )}(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&]uh1js hj@ubeh}(h]h ]h"]h$]h&]uh1jQ hj[hKhjubjR )}(h``size_t size`` object size h](jX )}(h``size_t size``h]j^ )}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjyubjt )}(hhh]h)}(h object sizeh]h object size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjyubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubh)}(hInitialize an already allocated GEM object of the specified size with shmfs backing store. A huge mountpoint can be used by calling drm_gem_huge_mnt_create() beforehand.h]hInitialize an already allocated GEM object of the specified size with shmfs backing store. A huge mountpoint can be used by calling drm_gem_huge_mnt_create() beforehand.}(hjЭhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_gem_private_object_init (C function)c.drm_gem_private_object_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKubj)}(hdrm_gem_private_object_inith]j)}(hdrm_gem_private_object_inith]hdrm_gem_private_object_init}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hKubj>)}(hA(struct drm_device *dev, struct drm_gem_object *obj, size_t size)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj\modnameN classnameNjj)}j]j)}j}j"sbc.drm_gem_private_object_initasbuh1hhj8ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj4ubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj̮hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɮubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjήmodnameN classnameNjj)}j]jvc.drm_gem_private_object_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj4ubjD)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj#modnameN classnameNjj)}j]jvc.drm_gem_private_object_initasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj4ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj hKhjhhubj )}(hhh]h)}(h*initialize an allocated private GEM objecth]h*initialize an allocated private GEM object}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjthhubah}(h]h ]h"]h$]h&]uh1j hjhhhj hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubjM )}(hhh](jR )}(hK``struct drm_device *dev`` drm_device the object should be initialized for h](jX )}(h``struct drm_device *dev``h]j^ )}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubjt )}(hhh]h)}(h/drm_device the object should be initialized forh]h/drm_device the object should be initialized for}(hjѯhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjͯhKhjίubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjͯhKhjubjR )}(h<``struct drm_gem_object *obj`` drm_gem_object to initialize h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubjt )}(hhh]h)}(hdrm_gem_object to initializeh]hdrm_gem_object to initialize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h``size_t size`` object size h](jX )}(h``size_t size``h]j^ )}(hj*h]h size_t size}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhj$ubjt )}(hhh]h)}(h object sizeh]h object size}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj@ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj?hKhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjcubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./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.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_gem_private_object_fini (C function)c.drm_gem_private_object_finihNtauh1jhjhhhNhNubj)}(hhh](j)}(h=void drm_gem_private_object_fini (struct drm_gem_object *obj)h]j)}(h)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jͰsbc.drm_gem_private_object_finiasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj߰ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h)}(h Finalize a failed drm_gem_objecth]h Finalize a failed drm_gem_object}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjghhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(h**Parameters** ``struct drm_gem_object *obj`` drm_gem_object **Description** Uninitialize an already allocated GEM object when it initialized failedh](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubjM )}(hhh]jR )}(h.``struct drm_gem_object *obj`` drm_gem_object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubjt )}(hhh]h)}(hdrm_gem_objecth]hdrm_gem_object}(hjıhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubh)}(hGUninitialize an already allocated GEM object when it initialized failedh]hGUninitialize an already allocated GEM object when it initialized failed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_handle_delete (C function)c.drm_gem_handle_deletehNtauh1jhjhhhNhNubj)}(hhh](j)}(h=int drm_gem_handle_delete (struct drm_file *filp, u32 handle)h]j)}(h)}(h#(struct drm_file *filp, u32 handle)h](jD)}(hstruct drm_file *filph](j)}(hj? h]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jNsbc.drm_gem_handle_deleteasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(h u32 handleh](h)}(hhh]j)}(hu32h]hu32}(hjݲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڲubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj߲modnameN classnameNjj)}j]jc.drm_gem_handle_deleteasbuh1hhjֲubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֲubj)}(hhandleh]hhandle}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֲubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubeh}(h]h ]h"]h$]h&]jjuh1j=hj'hhhj9hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj9hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj9hMhj hhubj )}(hhh]h)}(h%deletes the given file-private handleh]h%deletes the given file-private handle}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj0hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj9hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jKj( jKj) j* j+ uh1jhhhjhNhNubj- )}(hXW**Parameters** ``struct drm_file *filp`` drm file-private structure to use for the handle look up ``u32 handle`` userspace handle to delete **Description** Removes the GEM handle from the **filp** lookup table which has been added with drm_gem_handle_create(). If this is the last handle also cleans up linked resources like GEM names.h](h)}(h**Parameters**h]j7 )}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjSubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjOubjM )}(hhh](jR )}(hS``struct drm_file *filp`` drm file-private structure to use for the handle look up h](jX )}(h``struct drm_file *filp``h]j^ )}(hjth]hstruct drm_file *filp}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjnubjt )}(hhh]h)}(h8drm file-private structure to use for the handle look uph]h8drm file-private structure to use for the handle look up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjnubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjkubjR )}(h*``u32 handle`` userspace handle to delete h](jX )}(h``u32 handle``h]j^ )}(hjh]h u32 handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(huserspace handle to deleteh]huserspace handle to delete}(hjƳhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj³hMhjóubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj³hMhjkubeh}(h]h ]h"]h$]h&]uh1jL hjOubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjOubh)}(hRemoves the GEM handle from the **filp** lookup table which has been added with drm_gem_handle_create(). If this is the last handle also cleans up linked resources like GEM names.h](h Removes the GEM handle from the }(hjhhhNhNubj7 )}(h**filp**h]hfilp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh lookup table which has been added with drm_gem_handle_create(). If this is the last handle also cleans up linked resources like GEM names.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gem_dumb_map_offset (C function)c.drm_gem_dumb_map_offsethNtauh1jhjhhhNhNubj)}(hhh](j)}(hdint drm_gem_dumb_map_offset (struct drm_file *file, struct drm_device *dev, u32 handle, u64 *offset)h]j)}(hcint drm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev, u32 handle, u64 *offset)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhjMhMubj)}(hdrm_gem_dumb_map_offseth]j)}(hdrm_gem_dumb_map_offseth]hdrm_gem_dumb_map_offset}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhjMhMubj>)}(hH(struct drm_file *file, struct drm_device *dev, u32 handle, u64 *offset)h](jD)}(hstruct drm_file *fileh](j)}(hj? h]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jbsbc.drm_gem_dumb_map_offsetasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]h*}(hjȴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hfileh]hfile}(hjմhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubjD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dumb_map_offsetasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubjD)}(h u32 handleh](h)}(hhh]j)}(hu32h]hu32}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]jc.drm_gem_dumb_map_offsetasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubjD)}(h u64 *offseth](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dumb_map_offsetasbuh1hhjubj)}(h h]h }(hjǵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjյhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubeh}(h]h ]h"]h$]h&]jjuh1j=hj;hhhjMhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhjMhMubah}(h]j2ah ](jjeh"]h$]h&]j j )j huh1jhjMhMhj4hhubj )}(hhh]h)}(h,return the fake mmap offset for a gem objecth]h,return the fake mmap offset for a gem object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj hhubah}(h]h ]h"]h$]h&]uh1j hj4hhhjMhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j$j( j$j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj(ubjM )}(hhh](jR )}(hO``struct drm_file *file`` drm file-private structure containing the gem object h](jX )}(h``struct drm_file *file``h]j^ )}(hjMh]hstruct drm_file *file}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjGubjt )}(hhh]h)}(h4drm file-private structure containing the gem objecth]h4drm file-private structure containing the gem object}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1js hjGubeh}(h]h ]h"]h$]h&]uh1jQ hjbhMhjDubjR )}(h4``struct drm_device *dev`` corresponding drm_device h](jX )}(h``struct drm_device *dev``h]j^ )}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(hcorresponding drm_deviceh]hcorresponding drm_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjDubjR )}(h!``u32 handle`` gem object handle h](jX )}(h``u32 handle``h]j^ )}(hjh]h u32 handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(hgem object handleh]hgem object handle}(hjضhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԶhMhjնubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjԶhMhjDubjR )}(h9``u64 *offset`` return location for the fake mmap offset h](jX )}(h``u64 *offset``h]j^ )}(hjh]h u64 *offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(h(return location for the fake mmap offseth]h(return location for the fake mmap offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjDubeh}(h]h ]h"]h$]h&]uh1jL hj(ubh)}(h**Description**h]j7 )}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj1ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj(ubh)}(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 }(hjIhhhNhNubh)}(h1:c:type:`drm_driver.dumb_map_offset `h]j^ )}(hjSh]hdrm_driver.dumb_map_offset}(hjUhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjIubhO kms driver callback for drivers which use gem to manage their backing storage.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMhj(ubh)}(h **Return**h]j7 )}(hj}h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj(ubh)}(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:374: ./drivers/gpu/drm/drm_gem.chMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_handle_create (C function)c.drm_gem_handle_createhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj·hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMubj)}(h h]h }(hjѷhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjзhMubj)}(hdrm_gem_handle_createh]j)}(hdrm_gem_handle_createh]hdrm_gem_handle_create}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߷ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjзhMubj>)}(hF(struct drm_file *file_priv, struct drm_gem_object *obj, u32 *handlep)h](jD)}(hstruct drm_file *file_privh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_handle_createasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h file_privh]h file_priv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j9c.drm_gem_handle_createasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hobjh]hobj}(hjȸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u32 *handleph](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j9c.drm_gem_handle_createasbuh1hhjݸubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݸubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݸubj)}(hhandleph]hhandlep}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݸubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjзhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjзhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjзhMhjhhubj )}(hhh]h)}(h!create a gem handle for an objecth]h!create a gem handle for an object}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjDhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjзhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j_j( j_j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjgubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM hjcubjM )}(hhh](jR )}(hU``struct drm_file *file_priv`` drm file-private structure to register the handle for h](jX )}(h``struct drm_file *file_priv``h]j^ )}(hjh]hstruct drm_file *file_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h2``struct drm_gem_object *obj`` object to register h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjùhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(hobject to registerh]hobject to register}(hjڹhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjֹhMhj׹ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjֹhMhjubjR )}(hD``u32 *handlep`` pointer to return the created handle to the caller h](jX )}(h``u32 *handlep``h]j^ )}(hjh]h u32 *handlep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjcubh)}(h**Description**h]j7 )}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM!hjcubh)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM hjcubh)}(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 }(hjZhhhNhNubj7 )}(h**obj**h]hobj}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjZubh{ to userspace it must be fully set up by this point, drivers must call this last in their buffer object creation callbacks.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM$hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gem_free_mmap_offset (C function)c.drm_gem_free_mmap_offsethNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM4ubj)}(hdrm_gem_free_mmap_offseth]j)}(hdrm_gem_free_mmap_offseth]hdrm_gem_free_mmap_offset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM4ubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjغhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԺubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԺubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_free_mmap_offsetasbuh1hhjԺubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԺubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԺubj)}(hobjh]hobj}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԺubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjкubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM4ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM4ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM4hjhhubj )}(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:374: ./drivers/gpu/drm/drm_gem.chM4hjXhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM4ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jsj( jsj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM8hjwubjM )}(hhh]jR )}(h/``struct drm_gem_object *obj`` obj in question h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM5hjubjt )}(hhh]h)}(hobj in questionh]hobj in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM5hjubah}(h]h ]h"]h$]h&]uh1jL hjwubh)}(h**Description**h]j7 )}(hj׻h]h Description}(hjٻhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjջubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM7hjwubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM6hjwubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM8hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_gem_create_mmap_offset_size (C function)!c.drm_gem_create_mmap_offset_sizehNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMGubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hMGubj)}(hdrm_gem_create_mmap_offset_sizeh]j)}(hdrm_gem_create_mmap_offset_sizeh]hdrm_gem_create_mmap_offset_size}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj9hMGubj>)}(h)(struct drm_gem_object *obj, size_t size)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jNsb!c.drm_gem_create_mmap_offset_sizeasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjݼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڼubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj߼modnameN classnameNjj)}j]j!c.drm_gem_create_mmap_offset_sizeasbuh1hhjּubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjּubj)}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjּubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubeh}(h]h ]h"]h$]h&]jjuh1j=hj'hhhj9hMGubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj9hMGubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj9hMGhj hhubj )}(hhh]h)}(h'create a fake mmap offset for an objecth]h'create a fake mmap offset for an object}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMGhj0hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj9hMGubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jKj( jKj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjSubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMKhjOubjM )}(hhh](jR )}(h/``struct drm_gem_object *obj`` obj in question h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjth]hstruct drm_gem_object *obj}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMHhjnubjt )}(hhh]h)}(hobj in questionh]hobj in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1js hjnubeh}(h]h ]h"]h$]h&]uh1jQ hjhMHhjkubjR )}(h!``size_t size`` the virtual size h](jX )}(h``size_t size``h]j^ )}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMIhjubjt )}(hhh]h)}(hthe virtual sizeh]hthe virtual size}(hjƽhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj½hMIhjýubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj½hMIhjkubeh}(h]h ]h"]h$]h&]uh1jL hjOubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMKhjOubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMJhjOubh)}(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 }(hj hhhNhNubj7 )}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubhF, in cases where the virtual size differs from the physical size (ie. }(hj hhhNhNubh)}(h.:c:type:`drm_gem_object.size `h]j^ )}(hj)h]hdrm_gem_object.size}(hj+hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj'ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMOhj ubh3). Otherwise just use drm_gem_create_mmap_offset().}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhMOhjOubh)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMShjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gem_create_mmap_offset (C function)c.drm_gem_create_mmap_offsethNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhMbubj)}(hdrm_gem_create_mmap_offseth]j)}(hdrm_gem_create_mmap_offseth]hdrm_gem_create_mmap_offset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhMbubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjʾhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj۾hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؾubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjݾmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_create_mmap_offsetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hj|hhhjhMbubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhMbubah}(h]jsah ](jjeh"]h$]h&]j j )j huh1jhjhMbhjuhhubj )}(hhh]h)}(h'create a fake mmap offset for an objecth]h'create a fake mmap offset for an object}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMbhj=hhubah}(h]h ]h"]h$]h&]uh1j hjuhhhjhMbubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jXj( jXj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj`ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMfhj\ubjM )}(hhh]jR )}(h/``struct drm_gem_object *obj`` obj in question h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMchj{ubjt )}(hhh]h)}(hobj in questionh]hobj in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMchjubah}(h]h ]h"]h$]h&]uh1js hj{ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMchjxubah}(h]h ]h"]h$]h&]uh1jL hj\ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMehj\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.}(hjҿhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMdhj\ubh)}(h>This routine allocates and attaches a fake offset for **obj**.h](h6This routine allocates and attaches a fake offset for }(hjhhhNhNubj7 )}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMihj\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 }(hjhhhNhNubj7 )}(h**obj**h]hobj}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh" to release the fake offset again.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMkhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_get_pages (C function)c.drm_gem_get_pageshNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjPhMubh)}(hhh]j)}(hpageh]hpage}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjdmodnameN classnameNjj)}j]j)}j}drm_gem_get_pagessbc.drm_gem_get_pagesasbuh1hhj?hhhjPhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjPhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjPhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjPhMubj)}(hdrm_gem_get_pagesh]j)}(hjh]hdrm_gem_get_pages}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhjPhMubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j~c.drm_gem_get_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hj?hhhjPhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj;hhhjPhMubah}(h]j6ah ](jjeh"]h$]h&]j j )j huh1jhjPhMhj8hhubj )}(hhh]h)}(h)}(hL(struct drm_gem_object *obj, struct page **pages, bool dirty, bool accessed)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jksbc.drm_gem_put_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubjD)}(hstruct page **pagesh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_put_pagesasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpagesh]hpages}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubjD)}(h bool dirtyh](j)}(hj=2h]hbool}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hdirtyh]hdirty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubjD)}(h bool accessedh](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(haccessedh]haccessed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubeh}(h]h ]h"]h$]h&]jjuh1j=hjDhhhjVhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@hhhjVhMubah}(h]j;ah ](jjeh"]h$]h&]j j )j huh1jhjVhMhj=hhubj )}(hhh]h)}(h-helper to free backing pages for a GEM objecth]h-helper to free backing pages for a GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj=hhhjVhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj ubjM )}(hhh](jR )}(h/``struct drm_gem_object *obj`` obj in question h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj.h]hstruct drm_gem_object *obj}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj,ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj(ubjt )}(hhh]h)}(hobj in questionh]hobj in question}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjDubah}(h]h ]h"]h$]h&]uh1js hj(ubeh}(h]h ]h"]h$]h&]uh1jQ hjChMhj%ubjR )}(h&``struct page **pages`` pages to free h](jX )}(h``struct page **pages``h]j^ )}(hjgh]hstruct page **pages}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjeubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjaubjt )}(hhh]h)}(h pages to freeh]h pages to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1js hjaubeh}(h]h ]h"]h$]h&]uh1jQ hj|hMhj%ubjR )}(h6``bool dirty`` if true, pages will be marked as dirty h](jX )}(h``bool dirty``h]j^ )}(hjh]h bool dirty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(h&if true, pages will be marked as dirtyh]h&if true, pages will be marked as dirty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj%ubjR )}(h?``bool accessed`` if true, the pages will be marked as accessedh](jX )}(h``bool accessed``h]j^ )}(hjh]h bool accessed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(h-if true, the pages will be marked as accessedh]h-if true, the pages will be marked as accessed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj%ubeh}(h]h ]h"]h$]h&]uh1jL hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_gem_objects_lookup (C function)c.drm_gem_objects_lookuphNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM/ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhM/ubj)}(hdrm_gem_objects_lookuph]j)}(hdrm_gem_objects_lookuph]hdrm_gem_objects_lookup}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhjAhM/ubj>)}(h^(struct drm_file *filp, void __user *bo_handles, int count, struct drm_gem_object ***objs_out)h](jD)}(hstruct drm_file *filph](j)}(hj? h]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jVsbc.drm_gem_objects_lookupasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(hvoid __user *bo_handlesh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh__user}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h bo_handlesh]h bo_handles}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(h int counth](j)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hcounth]hcount}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(h!struct drm_gem_object ***objs_outh](j)}(hj? h]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_objects_lookupasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hobjs_outh]hobjs_out}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubeh}(h]h ]h"]h$]h&]jjuh1j=hj/hhhjAhM/ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhjAhM/ubah}(h]j&ah ](jjeh"]h$]h&]j j )j huh1jhjAhM/hj(hhubj )}(hhh]h)}(h,look up GEM objects from an array of handlesh]h,look up GEM objects from an array of handles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM/hjhhubah}(h]h ]h"]h$]h&]uh1j hj(hhhjAhM/ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hX**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. After a successful lookup GEM objects need to be released using drm_gem_object_put() and the array returned in **objs_out** must be freed using kvfree(). For a single handle lookup, use drm_gem_object_lookup(). **Return** Zero on success or a negative error code.h](h)}(h**Parameters**h]j7 )}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM3hj"ubjM )}(hhh](jR )}(h0``struct drm_file *filp`` DRM file private date h](jX )}(h``struct drm_file *filp``h]j^ )}(hjGh]hstruct drm_file *filp}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM0hjAubjt )}(hhh]h)}(hDRM file private dateh]hDRM file private date}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hM0hj]ubah}(h]h ]h"]h$]h&]uh1js hjAubeh}(h]h ]h"]h$]h&]uh1jQ hj\hM0hj>ubjR )}(hF``void __user *bo_handles`` user pointer to array of userspace handle h](jX )}(h``void __user *bo_handles``h]j^ )}(hjh]hvoid __user *bo_handles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj~ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM1hjzubjt )}(hhh]h)}(h)user pointer to array of userspace handleh]h)user pointer to array of userspace handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1js hjzubeh}(h]h ]h"]h$]h&]uh1jQ hjhM1hj>ubjR )}(h#``int count`` size of handle array h](jX )}(h ``int count``h]j^ )}(hjh]h int count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM2hjubjt )}(hhh]h)}(hsize of handle arrayh]hsize of handle array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM2hj>ubjR )}(h[``struct drm_gem_object ***objs_out`` returned pointer to array of drm_gem_object pointers h](jX )}(h%``struct drm_gem_object ***objs_out``h]j^ )}(hjh]h!struct drm_gem_object ***objs_out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM3hjubjt )}(hhh]h)}(h4returned pointer to array of drm_gem_object pointersh]h4returned pointer to array of drm_gem_object pointers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM3hj>ubeh}(h]h ]h"]h$]h&]uh1jL hj"ubh)}(h**Description**h]j7 )}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM5hj"ubh)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM4hj"ubh)}(hAfter a successful lookup GEM objects need to be released using drm_gem_object_put() and the array returned in **objs_out** must be freed using kvfree().h](hoAfter a successful lookup GEM objects need to be released using drm_gem_object_put() and the array returned in }(hjRhhhNhNubj7 )}(h **objs_out**h]hobjs_out}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRubh must be freed using kvfree().}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM7hj"ubh)}(h8For a single handle lookup, use drm_gem_object_lookup().h]h8For a single handle lookup, use drm_gem_object_lookup().}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM;hj"ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM=hj"ubh)}(h)Zero on success or a negative error code.h]h)Zero on success or a negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM>hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_object_lookup (C function)c.drm_gem_object_lookuphNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMhubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gem_object_lookupsbc.drm_gem_object_lookupasbuh1hhjhhhjhMhubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMhubj)}(hdrm_gem_object_lookuph]j)}(hjh]hdrm_gem_object_lookup}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMhubj>)}(h#(struct drm_file *filp, u32 handle)h](jD)}(hstruct drm_file *filph](j)}(hj? h]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]jc.drm_gem_object_lookupasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubjD)}(h u32 handleh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_object_lookupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMhubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMhubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhhjhhubj )}(hhh]h)}(h$look up a GEM object from its handleh]h$look up a GEM object from its handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhhj hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMhubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j$j( j$j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMlhj(ubjM )}(hhh](jR )}(h0``struct drm_file *filp`` DRM file private date h](jX )}(h``struct drm_file *filp``h]j^ )}(hjMh]hstruct drm_file *filp}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMihjGubjt )}(hhh]h)}(hDRM file private dateh]hDRM file private date}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMihjcubah}(h]h ]h"]h$]h&]uh1js hjGubeh}(h]h ]h"]h$]h&]uh1jQ hjbhMihjDubjR )}(h ``u32 handle`` userspace handle h](jX )}(h``u32 handle``h]j^ )}(hjh]h u32 handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMjhjubjt )}(hhh]h)}(huserspace handleh]huserspace handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMjhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMjhjDubeh}(h]h ]h"]h$]h&]uh1jL hj(ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMlhj(ubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMkhj(ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMmhj(ubh)}(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 }(hjhhhNhNubj7 )}(h**filp**h]hfilp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh, NULL otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMnhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_dma_resv_wait (C function)c.drm_gem_dma_resv_waithNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM}ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhjMhM}ubj)}(hdrm_gem_dma_resv_waith]j)}(hdrm_gem_dma_resv_waith]hdrm_gem_dma_resv_wait}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhjMhM}ubj>)}(hJ(struct drm_file *filep, u32 handle, bool wait_all, unsigned long timeout)h](jD)}(hstruct drm_file *fileph](j)}(hj? h]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jbsbc.drm_gem_dma_resv_waitasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hfileph]hfilep}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubjD)}(h u32 handleh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dma_resv_waitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubjD)}(h bool wait_allh](j)}(hj=2h]hbool}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hwait_allh]hwait_all}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubjD)}(hunsigned long timeouth](j)}(hunsignedh]hunsigned}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubeh}(h]h ]h"]h$]h&]jjuh1j=hj;hhhjMhM}ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhjMhM}ubah}(h]j2ah ](jjeh"]h$]h&]j j )j huh1jhjMhM}hj4hhubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM}hjhhubah}(h]h ]h"]h$]h&]uh1j hj4hhhjMhM}ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjM )}(hhh](jR )}(h1``struct drm_file *filep`` DRM file private date h](jX )}(h``struct drm_file *filep``h]j^ )}(hj h]hstruct drm_file *filep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj"hMhjubjR )}(h ``u32 handle`` userspace handle h](jX )}(h``u32 handle``h]j^ )}(hjFh]h u32 handle}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj@ubjt )}(hhh]h)}(huserspace handleh]huserspace handle}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1js hj@ubeh}(h]h ]h"]h$]h&]uh1jQ hj[hMhjubjR )}(hQ``bool wait_all`` if true, wait on all fences, else wait on just exclusive fence h](jX )}(h``bool wait_all``h]j^ )}(hjh]h bool wait_all}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjyubjt )}(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&]uh1js hjyubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hQ``unsigned long timeout`` timeout value in jiffies or zero to return immediately h](jX )}(h``unsigned long timeout``h]j^ )}(hjh]hunsigned long timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(h6timeout value in jiffies or zero to return immediatelyh]h6timeout value in jiffies or zero to return immediately}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_gem_object_release (C function)c.drm_gem_object_releasehNtauh1jhjhhhNhNubj)}(hhh](j)}(h8void drm_gem_object_release (struct drm_gem_object *obj)h]j)}(h7void drm_gem_object_release(struct drm_gem_object *obj)h](j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMiubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjFhMiubj)}(hdrm_gem_object_releaseh]j)}(hdrm_gem_object_releaseh]hdrm_gem_object_release}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhjFhMiubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}j[sbc.drm_gem_object_releaseasbuh1hhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjmubah}(h]h ]h"]h$]h&]jjuh1j=hj4hhhjFhMiubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhjFhMiubah}(h]j+ah ](jjeh"]h$]h&]j j )j huh1jhjFhMihj-hhubj )}(hhh]h)}(h#release GEM buffer object resourcesh]h#release GEM buffer object resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMihjhhubah}(h]h ]h"]h$]h&]uh1j hj-hhhjFhMiubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMmhjubjM )}(hhh]jR )}(h1``struct drm_gem_object *obj`` GEM buffer object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj9h]hstruct drm_gem_object *obj}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMjhj3ubjt )}(hhh]h)}(hGEM buffer objecth]hGEM buffer object}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMjhjOubah}(h]h ]h"]h$]h&]uh1js hj3ubeh}(h]h ]h"]h$]h&]uh1jQ hjNhMjhj0ubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjrubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMlhjubh)}(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 }(hjhhhNhNubj7 )}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh- 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:374: ./drivers/gpu/drm/drm_gem.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_object_free (C function)c.drm_gem_object_freehNtauh1jhjhhhNhNubj)}(hhh](j)}(h,void drm_gem_object_free (struct kref *kref)h]j)}(h+void drm_gem_object_free(struct kref *kref)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM}ubj)}(hdrm_gem_object_freeh]j)}(hdrm_gem_object_freeh]hdrm_gem_object_free}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM}ubj>)}(h(struct kref *kref)h]jD)}(hstruct kref *krefh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hkrefh]hkref}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj(modnameN classnameNjj)}j]j)}j}jsbc.drm_gem_object_freeasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkrefh]hkref}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM}ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM}ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM}hjhhubj )}(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:374: ./drivers/gpu/drm/drm_gem.chM}hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM}ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjM )}(hhh]jR )}(h1``struct kref *kref`` kref of the object to free h](jX )}(h``struct kref *kref``h]j^ )}(hjh]hstruct kref *kref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM~hjubjt )}(hhh]h)}(hkref of the object to freeh]hkref of the object to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM~hjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubh)}(h)}(h(struct vm_area_struct *vma)h]jD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}j~sbc.drm_gem_vm_openasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjWhhhjihMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjihMubah}(h]jNah ](jjeh"]h$]h&]j j )j huh1jhjihMhjPhhubj )}(hhh]h)}(h%vma->ops->open implementation for GEMh]h%vma->ops->open implementation for GEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjPhhhjihMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j3j( j3j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj=h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj7ubjM )}(hhh]jR )}(h1``struct vm_area_struct *vma`` VM area structure h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hj\h]hstruct vm_area_struct *vma}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjVubjt )}(hhh]h)}(hVM area structureh]hVM area structure}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjrubah}(h]h ]h"]h$]h&]uh1js hjVubeh}(h]h ]h"]h$]h&]uh1jQ hjqhMhjSubah}(h]h ]h"]h$]h&]uh1jL hj7ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj7ubh)}(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:374: ./drivers/gpu/drm/drm_gem.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_vm_close (C function)c.drm_gem_vm_closehNtauh1jhjhhhNhNubj)}(hhh](j)}(h2void drm_gem_vm_close (struct vm_area_struct *vma)h]j)}(h1void drm_gem_vm_close(struct vm_area_struct *vma)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_vm_closeh]j)}(hdrm_gem_vm_closeh]hdrm_gem_vm_close}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h(struct vm_area_struct *vma)h]jD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj9modnameN classnameNjj)}j]j)}j}jsbc.drm_gem_vm_closeasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvmah]hvma}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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:374: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjM )}(hhh]jR )}(h1``struct vm_area_struct *vma`` VM area structure h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(hVM area structureh]hVM area structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./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().}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_mmap_obj (C function)c.drm_gem_mmap_objhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjkhMubj)}(hdrm_gem_mmap_objh]j)}(hdrm_gem_mmap_objh]hdrm_gem_mmap_obj}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjkhMubj>)}(hP(struct drm_gem_object *obj, unsigned long obj_size, struct vm_area_struct *vma)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_mmap_objasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long obj_sizeh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobj_sizeh]hobj_size}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj}modnameN classnameNjj)}j]jc.drm_gem_mmap_objasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjYhhhjkhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjkhMubah}(h]jPah ](jjeh"]h$]h&]j j )j huh1jhjkhMhjRhhubj )}(hhh]h)}(hmemory map a GEM objecth]hmemory map a GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjRhhhjkhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjM )}(hhh](jR )}(h5``struct drm_gem_object *obj`` the GEM object to map h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(hthe GEM object to maph]hthe GEM object to map}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj4hMhjubjR )}(hB``unsigned long obj_size`` the object size to be mapped, in bytes h](jX )}(h``unsigned long obj_size``h]j^ )}(hjXh]hunsigned long obj_size}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjRubjt )}(hhh]h)}(h&the object size to be mapped, in bytesh]h&the object size to be mapped, in bytes}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1js hjRubeh}(h]h ]h"]h$]h&]uh1jQ hjmhMhjubjR )}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gem_get_unmapped_area (C function)c.drm_gem_get_unmapped_areahNtauh1jhjhhhNhNubj)}(hhh](j)}(hunsigned long drm_gem_get_unmapped_area (struct file *filp, unsigned long uaddr, unsigned long len, unsigned long pgoff, unsigned long flags)h]j)}(hunsigned long drm_gem_get_unmapped_area(struct file *filp, unsigned long uaddr, unsigned long len, unsigned long pgoff, unsigned long flags)h](j)}(hunsignedh]hunsigned}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM&ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhjLhM&ubj)}(hlongh]hlong}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhjLhM&ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhjLhM&ubj)}(hdrm_gem_get_unmapped_areah]j)}(hdrm_gem_get_unmapped_areah]hdrm_gem_get_unmapped_area}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:hhhjLhM&ubj>)}(he(struct file *filp, unsigned long uaddr, unsigned long len, unsigned long pgoff, unsigned long flags)h](jD)}(hstruct file *filph](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}j}sbc.drm_gem_get_unmapped_areaasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long uaddrh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNh<Nubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(huaddrh]huaddr}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long lenh](j)}(hunsignedh]hunsigned}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hlongh]hlong}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long pgoffh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpgoffh]hpgoff}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hj:hhhjLhM&ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj6hhhjLhM&ubah}(h]j1ah ](jjeh"]h$]h&]j j )j huh1jhjLhM&hj3hhubj )}(hhh]h)}(h1get memory mapping region routine for GEM objectsh]h1get memory mapping region routine for GEM objects}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM&hj[hhubah}(h]h ]h"]h$]h&]uh1j hj3hhhjLhM&ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jvj( jvj) j* j+ uh1jhhhjhNhNubj- )}(hX**Parameters** ``struct file *filp`` DRM file pointer ``unsigned long uaddr`` User address hint ``unsigned long len`` Mapping length ``unsigned long pgoff`` Offset (in pages) ``unsigned long flags`` Mapping flags **Description** If a driver supports GEM object mapping, before ending up in drm_gem_mmap(), mmap calls on the DRM file descriptor will first try to find a free linear address space large enough for a mapping. Since GEM objects are backed by shmem buffers, this should preferably be handled by the shmem virtual memory filesystem which can appropriately align addresses to huge page sizes when needed. Look up the GEM object based on the offset passed in (vma->vm_pgoff will contain the fake offset we created) and call shmem_get_unmapped_area() with the right file pointer. If a GEM object is not available at the given offset or if the caller is not granted access to it, fall back to mm_get_unmapped_area().h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj~ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM*hjzubjM )}(hhh](jR )}(h'``struct file *filp`` DRM file pointer h](jX )}(h``struct file *filp``h]j^ )}(hjh]hstruct file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM'hjubjt )}(hhh]h)}(hDRM file pointerh]hDRM file pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM'hjubjR )}(h*``unsigned long uaddr`` User address hint h](jX )}(h``unsigned long uaddr``h]j^ )}(hjh]hunsigned long uaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM(hjubjt )}(hhh]h)}(hUser address hinth]hUser address hint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM(hjubjR )}(h%``unsigned long len`` Mapping length h](jX )}(h``unsigned long len``h]j^ )}(hjh]hunsigned long len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM)hj ubjt )}(hhh]h)}(hMapping lengthh]hMapping length}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hM)hj'ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj&hM)hjubjR )}(h*``unsigned long pgoff`` Offset (in pages) h](jX )}(h``unsigned long pgoff``h]j^ )}(hjJh]hunsigned long pgoff}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM*hjDubjt )}(hhh]h)}(hOffset (in pages)h]hOffset (in pages)}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM*hj`ubah}(h]h ]h"]h$]h&]uh1js hjDubeh}(h]h ]h"]h$]h&]uh1jQ hj_hM*hjubjR )}(h&``unsigned long flags`` Mapping flags h](jX )}(h``unsigned long flags``h]j^ )}(hjh]hunsigned long flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM+hj}ubjt )}(hhh]h)}(h Mapping flagsh]h Mapping flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1js hj}ubeh}(h]h ]h"]h$]h&]uh1jQ hjhM+hjubeh}(h]h ]h"]h$]h&]uh1jL hjzubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM-hjzubh)}(hXIf a driver supports GEM object mapping, before ending up in drm_gem_mmap(), mmap calls on the DRM file descriptor will first try to find a free linear address space large enough for a mapping. Since GEM objects are backed by shmem buffers, this should preferably be handled by the shmem virtual memory filesystem which can appropriately align addresses to huge page sizes when needed.h]hXIf a driver supports GEM object mapping, before ending up in drm_gem_mmap(), mmap calls on the DRM file descriptor will first try to find a free linear address space large enough for a mapping. Since GEM objects are backed by shmem buffers, this should preferably be handled by the shmem virtual memory filesystem which can appropriately align addresses to huge page sizes when needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM,hjzubh)}(hLook up the GEM object based on the offset passed in (vma->vm_pgoff will contain the fake offset we created) and call shmem_get_unmapped_area() with the right file pointer.h]hLook up the GEM object based on the offset passed in (vma->vm_pgoff will contain the fake offset we created) and call shmem_get_unmapped_area() with the right file pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM3hjzubh)}(hIf a GEM object is not available at the given offset or if the caller is not granted access to it, fall back to mm_get_unmapped_area().h]hIf a GEM object is not available at the given offset or if the caller is not granted access to it, fall back to mm_get_unmapped_area().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM7hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_mmap (C function)c.drm_gem_mmaphNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMSubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hMSubj)}(h drm_gem_mmaph]j)}(h drm_gem_mmaph]h drm_gem_mmap}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hMSubj>)}(h/(struct file *filp, struct vm_area_struct *vma)h](jD)}(hstruct file *filph](j)}(hj? h]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hfileh]hfile}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj~modnameN classnameNjj)}j]j)}j}jDsbc.drm_gem_mmapasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hfilph]hfilp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjVubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_mmapasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvmah]hvma}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjVubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj/hMSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj/hMSubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj/hMShjhhubj )}(hhh]h)}(h"memory map routine for GEM objectsh]h"memory map routine for GEM objects}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMShjNhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj/hMSubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jij( jij) j* j+ uh1jhhhjhNhNubj- )}(hX**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) 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]j7 )}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMWhjmubjM )}(hhh](jR )}(h'``struct file *filp`` DRM file pointer h](jX )}(h``struct file *filp``h]j^ )}(hjh]hstruct file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMThjubjt )}(hhh]h)}(hDRM file pointerh]hDRM file pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMThjubjR )}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMUhjubjt )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMUhjubeh}(h]h ]h"]h$]h&]uh1jL hjmubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMWhjmubh)}(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:374: ./drivers/gpu/drm/drm_gem.chMVhjmubh)}(hLook up the GEM object based on the offset passed in (vma->vm_pgoff will contain the fake offset we created) 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) and map it with a call to drm_gem_mmap_obj().}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMYhjmubh)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM]hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gem_lock_reservations (C function)c.drm_gem_lock_reservationshNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjwhMubj)}(hdrm_gem_lock_reservationsh]j)}(hdrm_gem_lock_reservationsh]hdrm_gem_lock_reservations}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjwhMubj>)}(hM(struct drm_gem_object **objs, int count, struct ww_acquire_ctx *acquire_ctx)h](jD)}(hstruct drm_gem_object **objsh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_lock_reservationsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjsh]hobjs}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h int counth](j)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hcounth]hcount}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h"struct ww_acquire_ctx *acquire_ctxh](j)}(hj? h]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hww_acquire_ctxh]hww_acquire_ctx}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjzmodnameN classnameNjj)}j]jc.drm_gem_lock_reservationsasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h acquire_ctxh]h acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjehhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjwhMubah}(h]j\ah ](jjeh"]h$]h&]j j )j huh1jhjwhMhj^hhubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj^hhhjwhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjM )}(hhh](jR )}(h9``struct drm_gem_object **objs`` drm_gem_objects to lock h](jX )}(h ``struct drm_gem_object **objs``h]j^ )}(hjh]hstruct drm_gem_object **objs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(hdrm_gem_objects to lockh]hdrm_gem_objects to lock}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj1hMhjubjR )}(h,``int count`` Number of objects in **objs** h](jX )}(h ``int count``h]j^ )}(hjUh]h int count}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjOubjt )}(hhh]h)}(hNumber of objects in **objs**h](hNumber of objects in }(hjnhhhNhNubj7 )}(h**objs**h]hobjs}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubeh}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1js hjOubeh}(h]h ]h"]h$]h&]uh1jQ hjjhMhjubjR )}(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](jX )}(h&``struct ww_acquire_ctx *acquire_ctx``h]j^ )}(hjh]h"struct ww_acquire_ctx *acquire_ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_lru_init (C function)c.drm_gem_lru_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h/void drm_gem_lru_init (struct drm_gem_lru *lru)h]j)}(h.void drm_gem_lru_init(struct drm_gem_lru *lru)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hMubj)}(hdrm_gem_lru_inith]j)}(hdrm_gem_lru_inith]hdrm_gem_lru_init}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hMubj>)}(h(struct drm_gem_lru *lru)h]jD)}(hstruct drm_gem_lru *lruh](j)}(hj? h]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(h drm_gem_lruh]h drm_gem_lru}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjzmodnameN classnameNjj)}j]j)}j}j@sbc.drm_gem_lru_initasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hlruh]hlru}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjRubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj+hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj+hMhjhhubj )}(hhh]h)}(hinitialize a LRUh]hinitialize a LRU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj+hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hC**Parameters** ``struct drm_gem_lru *lru`` The LRU to initializeh](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjM )}(hhh]jR )}(h1``struct drm_gem_lru *lru`` The LRU to initializeh](jX )}(h``struct drm_gem_lru *lru``h]j^ )}(hjh]hstruct drm_gem_lru *lru}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjt )}(hhh]h)}(hThe LRU to initializeh]hThe LRU to initialize}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj4ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj3hMhjubah}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_lru_remove (C function)c.drm_gem_lru_removehNtauh1jhjhhhNhNubj)}(hhh](j)}(h4void drm_gem_lru_remove (struct drm_gem_object *obj)h]j)}(h3void drm_gem_lru_remove(struct drm_gem_object *obj)h](j)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM,ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhM,ubj)}(hdrm_gem_lru_removeh]j)}(hdrm_gem_lru_removeh]hdrm_gem_lru_remove}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhhjhM,ubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_lru_removeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjthhhjhM,ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjphhhjhM,ubah}(h]jkah ](jjeh"]h$]h&]j j )j huh1jhjhM,hjmhhubj )}(hhh]h)}(h(remove object from whatever LRU it is inh]h(remove object from whatever LRU it is in}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM,hj5hhubah}(h]h ]h"]h$]h&]uh1j hjmhhhjhM,ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jPj( jPj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjXubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM0hjTubjM )}(hhh]jR )}(hI``struct drm_gem_object *obj`` The GEM object to remove from current LRU h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjyh]hstruct drm_gem_object *obj}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM0hjsubjt )}(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&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjhM0hjpubah}(h]h ]h"]h$]h&]uh1jL hjTubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM2hjTubh)}(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:374: ./drivers/gpu/drm/drm_gem.chM-hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_gem_lru_move_tail_locked (C function)c.drm_gem_lru_move_tail_lockedhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM=ubj)}(hdrm_gem_lru_move_tail_lockedh]j)}(hdrm_gem_lru_move_tail_lockedh]hdrm_gem_lru_move_tail_locked}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM=ubj>)}(h5(struct drm_gem_lru *lru, struct drm_gem_object *obj)h](jD)}(hstruct drm_gem_lru *lruh](j)}(hj? h]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(h drm_gem_lruh]h drm_gem_lru}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjVmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_lru_move_tail_lockedasbuh1hhj2ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hlruh]hlru}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj.ubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jpc.drm_gem_lru_move_tail_lockedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj.ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM=ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM=ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM=hjhhubj )}(hhh]h)}(h&move the object to the tail of the LRUh]h&move the object to the tail of the LRU}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM=hj&hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM=ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jAj( jAj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjIubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMAhjEubjM )}(hhh](jR )}(h=``struct drm_gem_lru *lru`` The LRU to move the object into. h](jX )}(h``struct drm_gem_lru *lru``h]j^ )}(hjjh]hstruct drm_gem_lru *lru}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjhubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMAhjdubjt )}(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&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1js hjdubeh}(h]h ]h"]h$]h&]uh1jQ hjhMAhjaubjR )}(hD``struct drm_gem_object *obj`` The GEM object to move into this LRU h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMBhjubjt )}(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&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMBhjaubeh}(h]h ]h"]h$]h&]uh1jL hjEubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMDhjEubh)}(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^ )}(hjh]hdrm_gem_lru_move_tail}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_lru_move_tailuh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM>hjubh but lru lock must be held}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM>hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_lru_move_tail (C function)c.drm_gem_lru_move_tailhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMSubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjThMSubj)}(hdrm_gem_lru_move_tailh]j)}(hdrm_gem_lru_move_tailh]hdrm_gem_lru_move_tail}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhjThMSubj>)}(h5(struct drm_gem_lru *lru, struct drm_gem_object *obj)h](jD)}(hstruct drm_gem_lru *lruh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gem_lruh]h drm_gem_lru}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jisbc.drm_gem_lru_move_tailasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlruh]hlru}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj{ubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_lru_move_tailasbuh1hhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj{ubeh}(h]h ]h"]h$]h&]jjuh1j=hjBhhhjThMSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhjThMSubah}(h]j9ah ](jjeh"]h$]h&]j j )j huh1jhjThMShj;hhubj )}(hhh]h)}(h&move the object to the tail of the LRUh]h&move the object to the tail of the LRU}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMShjshhubah}(h]h ]h"]h$]h&]uh1j hj;hhhjThMSubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMWhjubjM )}(hhh](jR )}(h=``struct drm_gem_lru *lru`` The LRU to move the object into. h](jX )}(h``struct drm_gem_lru *lru``h]j^ )}(hjh]hstruct drm_gem_lru *lru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMYhjubjt )}(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&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMYhjubjR )}(hD``struct drm_gem_object *obj`` The GEM object to move into this LRU h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMZhjubjt )}(hhh]h)}(h$The GEM object to move into this LRUh]h$The GEM object to move into this LRU}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMZhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chM\hjubh)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMThjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_lru_scan (C function)c.drm_gem_lru_scanhNtauh1jhjhhhNhNubj)}(hhh](j)}(hunsigned long drm_gem_lru_scan (struct drm_device *dev, struct drm_gem_lru *lru, unsigned int nr_to_scan, unsigned long *remaining, bool (*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket), struct ww_acquire_ctx *ticket)h]j)}(hunsigned long drm_gem_lru_scan(struct drm_device *dev, struct drm_gem_lru *lru, unsigned int nr_to_scan, unsigned long *remaining, bool (*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket), struct ww_acquire_ctx *ticket)h](j)}(hunsignedh]hunsigned}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMfubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMfubj)}(hdrm_gem_lru_scanh]j)}(hdrm_gem_lru_scanh]hdrm_gem_lru_scan}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhj~hMfubj>)}(h(struct drm_device *dev, struct drm_gem_lru *lru, unsigned int nr_to_scan, unsigned long *remaining, bool (*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket), struct ww_acquire_ctx *ticket)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_lru_scanasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_lru *lruh](j)}(hj? h]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(h drm_gem_lruh]h drm_gem_lru}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj[modnameN classnameNjj)}j]jc.drm_gem_lru_scanasbuh1hhj7ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hlruh]hlru}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned int nr_to_scanh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h nr_to_scanh]h nr_to_scan}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long *remainingh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h remainingh]h remaining}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hIbool (*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket)h](j)}(hj=2h]hbool}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h(h]h(}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hshrinkh]hshrink}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h)h]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjwh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_lru_scanasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h,h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hj? h]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hww_acquire_ctxh]hww_acquire_ctx}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjZmodnameN classnameNjj)}j]jc.drm_gem_lru_scanasbuh1hhjVubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hticketh]hticket}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct ww_acquire_ctx *ticketh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hww_acquire_ctxh]hww_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_lru_scanasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hticketh]hticket}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjlhhhj~hMfubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhj~hMfubah}(h]jcah ](jjeh"]h$]h&]j j )j huh1jhj~hMfhjehhubj )}(hhh]h)}(h)helper to implement shrinker.scan_objectsh]h)helper to implement shrinker.scan_objects}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMfhj5hhubah}(h]h ]h"]h$]h&]uh1j hjehhhj~hMfubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jPj( jPj) j* j+ uh1jhhhjhNhNubj- )}(hX0**Parameters** ``struct drm_device *dev`` DRM device the LRU belongs to ``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, struct ww_acquire_ctx *ticket)`` Callback to try to shrink/reclaim the object. ``struct ww_acquire_ctx *ticket`` Optional ww_acquire_ctx context to use for locking **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]j7 )}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjXubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMjhjTubjM )}(hhh](jR )}(h9``struct drm_device *dev`` DRM device the LRU belongs to h](jX )}(h``struct drm_device *dev``h]j^ )}(hjyh]hstruct drm_device *dev}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMohjsubjt )}(hhh]h)}(hDRM device the LRU belongs toh]hDRM device the LRU belongs to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMohjubah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjhMohjpubjR )}(h,``struct drm_gem_lru *lru`` The LRU to scan h](jX )}(h``struct drm_gem_lru *lru``h]j^ )}(hjh]hstruct drm_gem_lru *lru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMphjubjt )}(hhh]h)}(hThe LRU to scanh]hThe LRU to scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMphjpubjR )}(hB``unsigned int nr_to_scan`` The number of pages to try to reclaim h](jX )}(h``unsigned int nr_to_scan``h]j^ )}(hjh]hunsigned int nr_to_scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMqhjubjt )}(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&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMqhjpubjR )}(hb``unsigned long *remaining`` The number of pages left to reclaim, should be initialized by caller h](jX )}(h``unsigned long *remaining``h]j^ )}(hj$h]hunsigned long *remaining}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMrhjubjt )}(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}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMrhj:ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj9hMrhjpubjR )}(h|``bool (*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket)`` Callback to try to shrink/reclaim the object. h](jX )}(hM``bool (*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket)``h]j^ )}(hj]h]hIbool (*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMshjWubjt )}(hhh]h)}(h-Callback to try to shrink/reclaim the object.h]h-Callback to try to shrink/reclaim the object.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMshjsubah}(h]h ]h"]h$]h&]uh1js hjWubeh}(h]h ]h"]h$]h&]uh1jQ hjrhMshjpubjR )}(hU``struct ww_acquire_ctx *ticket`` Optional ww_acquire_ctx context to use for locking h](jX )}(h!``struct ww_acquire_ctx *ticket``h]j^ )}(hjh]hstruct ww_acquire_ctx *ticket}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMthjubjt )}(hhh]h)}(h2Optional ww_acquire_ctx context to use for lockingh]h2Optional ww_acquire_ctx context to use for locking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMthjpubeh}(h]h ]h"]h$]h&]uh1jL hjTubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMvhjTubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMghjTubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMjhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gem_evict_locked (C function)c.drm_gem_evict_lockedhNtauh1jhjhhhNhNubj)}(hhh](j)}(h5int drm_gem_evict_locked (struct drm_gem_object *obj)h]j)}(h4int drm_gem_evict_locked(struct drm_gem_object *obj)h](j)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj3hMubj)}(hdrm_gem_evict_lockedh]j)}(hdrm_gem_evict_lockedh]hdrm_gem_evict_locked}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj3hMubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jHsbc.drm_gem_evict_lockedasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubah}(h]h ]h"]h$]h&]jjuh1j=hj!hhhj3hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj3hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj3hMhjhhubj )}(hhh]h)}(h.helper to evict backing pages for a GEM objecth]h.helper to evict backing pages for a GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj3hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(h@**Parameters** ``struct drm_gem_object *obj`` obj in questionh](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhjubjM )}(hhh]jR )}(h.``struct drm_gem_object *obj`` obj in questionh](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj&h]hstruct drm_gem_object *obj}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj ubjt )}(hhh]h)}(hobj in questionh]hobj in question}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:374: ./drivers/gpu/drm/drm_gem.chMhj<ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj;hMhjubah}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubeh}(h]j+ah ]h"]gem function referenceah$]h&]uh1hhjhhhhhMqubh)}(hhh](h)}(h"GEM DMA Helper Functions Referenceh]h"GEM DMA Helper Functions Reference}(hjqhhhNhNubah}(h]h ]h"]h$]h&]hjGuh1hhjnhhhhhMzubh)}(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:380: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjnhhubh)}(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:380: ./drivers/gpu/drm/drm_gem_dma_helper.chK"hjnhhubh)}(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:380: ./drivers/gpu/drm/drm_gem_dma_helper.chK(hjnhhubh)}(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^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:380: ./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&]uh1hhjhK+hjnhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_dma_object (C struct)c.drm_gem_dma_objecthNtauh1jhjnhhhNhNubj)}(hhh](j)}(hdrm_gem_dma_objecth]j)}(hstruct drm_gem_dma_objecth](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_gem_dma_objecth]j)}(hjh]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h)}(h+GEM object backed by DMA memory allocationsh]h+GEM object backed by DMA memory allocations}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhK hj6hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jQj( jQj) j* j+ uh1jhhhjnhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjYubh:}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjUubj )}(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; };}hjvsbah}(h]h ]h"]h$]h&]jjuh1j h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjUubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjUubjM )}(hhh](jR )}(h``base`` base GEM object h](jX )}(h``base``h]j^ )}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubjt )}(hhh]h)}(hbase GEM objecth]hbase GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h/``dma_addr`` DMA address of the backing memory h](jX )}(h ``dma_addr``h]j^ )}(hjh]hdma_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubjt )}(hhh]h)}(h!DMA address of the backing memoryh]h!DMA address of the backing memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(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](jX )}(h``sgt``h]j^ )}(hjh]hsgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubjt )}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhj.ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj-hKhjubjR )}(h7``vaddr`` kernel virtual address of the backing memory h](jX )}(h ``vaddr``h]j^ )}(hjRh]hvaddr}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjPubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjLubjt )}(hhh]h)}(h,kernel virtual address of the backing memoryh]h,kernel virtual address of the backing memory}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghKhjhubah}(h]h ]h"]h$]h&]uh1js hjLubeh}(h]h ]h"]h$]h&]uh1jQ hjghKhjubjR )}(hL``map_noncoherent`` if true, the GEM object is backed by non-coherent memoryh](jX )}(h``map_noncoherent``h]j^ )}(hjh]hmap_noncoherent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubjt )}(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:383: ./include/drm/drm_gem_dma_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubeh}(h]h ]h"]h$]h&]uh1jL hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gem_dma_object_free (C function)c.drm_gem_dma_object_freehNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhK4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK4ubj)}(hdrm_gem_dma_object_freeh]j)}(hdrm_gem_dma_object_freeh]hdrm_gem_dma_object_free}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK4ubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjBmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_dma_object_freeasbuh1hhjubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhK4ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK4ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhK4hjhhubj )}(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:383: ./include/drm/drm_gem_dma_helper.hhK4hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhK4ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhK8hjubjM )}(hhh]jR )}(h2``struct drm_gem_object *obj`` GEM object to free h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhK5hjubjt )}(hhh]h)}(hGEM object to freeh]hGEM object to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK5hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhK5hjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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 }(hj7hhhNhNubh)}(h::c:type:`drm_gem_object_funcs.free `h]j^ )}(hjAh]hdrm_gem_object_funcs.free}(hjChhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhK6hj7ubh handler.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hK6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gem_dma_object_print_info (C function)c.drm_gem_dma_object_print_infohNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKBubj)}(hdrm_gem_dma_object_print_infoh]j)}(hdrm_gem_dma_object_print_infoh]hdrm_gem_dma_object_print_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKBubj>)}(hN(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj)h](jD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_dma_object_print_infoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned int indenth](j)}(hunsignedh]hunsigned}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hindenth]hindent}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h const struct drm_gem_object *objh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dma_object_print_infoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKBubah}(h]j|ah ](jjeh"]h$]h&]j j )j huh1jhjhKBhj~hhubj )}(hhh]h)}(h3Print :c:type:`drm_gem_dma_object` info for debugfsh](hPrint }(hj$hhhNhNubh)}(h:c:type:`drm_gem_dma_object`h]j^ )}(hj.h]hdrm_gem_dma_object}(hj0hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj,ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gem_dma_object_print_infoasbj drm_gem_dma_objectuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhj$ubh info for debugfs}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKBhj!hhubah}(h]h ]h"]h$]h&]uh1j hj~hhhjhKBubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jej( jej) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjmubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKFhjiubjM )}(hhh](jR )}(h&``struct drm_printer *p`` DRM printer h](jX )}(h``struct drm_printer *p``h]j^ )}(hjh]hstruct drm_printer *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKChjubjt )}(hhh]h)}(h DRM printerh]h DRM printer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKChjubjR )}(h.``unsigned int indent`` Tab indentation level h](jX )}(h``unsigned int indent``h]j^ )}(hjh]hunsigned int indent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKDhjubjt )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKDhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKDhjubjR )}(h0``const struct drm_gem_object *obj`` GEM object h](jX )}(h$``const struct drm_gem_object *obj``h]j^ )}(hjh]h const struct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKEhjubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKEhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKEhjubeh}(h]h ]h"]h$]h&]uh1jL hjiubh)}(h**Description**h]j7 )}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj9ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKGhjiubh)}(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 }(hjQhhhNhNubh)}(h@:c:type:`drm_gem_object_funcs.print_info `h]j^ )}(hj[h]hdrm_gem_object_funcs.print_info}(hj]hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKFhjQubh handler.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhKFhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(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_tablehNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKSubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gem_dma_object_get_sg_tablesb!c.drm_gem_dma_object_get_sg_tableasbuh1hhjhhhjhKSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKSubj)}(hdrm_gem_dma_object_get_sg_tableh]j)}(hjh]hdrm_gem_dma_object_get_sg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKSubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj=modnameN classnameNjj)}j]j!c.drm_gem_dma_object_get_sg_tableasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKSubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKShjhhubj )}(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:383: ./include/drm/drm_gem_dma_helper.hhKShjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKSubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKWhjubjM )}(hhh]jR )}(h*``struct drm_gem_object *obj`` GEM object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKThjubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKThjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKThjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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 }(hj0hhhNhNubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKUhj0ubh handler.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhKUhjubh)}(h **Return**h]j7 )}(hjdh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjbubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKXhjubh)}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gem_dma_object_mmap (C function)c.drm_gem_dma_object_mmaphNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKwubj)}(hdrm_gem_dma_object_mmaph]j)}(hdrm_gem_dma_object_mmaph]hdrm_gem_dma_object_mmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKwubj>)}(h8(struct drm_gem_object *obj, struct vm_area_struct *vma)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_dma_object_mmapasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjxmodnameN classnameNjj)}j]j c.drm_gem_dma_object_mmapasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKwubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKwubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKwhjhhubj )}(hhh]h)}(h*GEM object function for drm_gem_dma_mmap()h]h*GEM object function for drm_gem_dma_mmap()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKwhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKwubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhK{hjubjM )}(hhh](jR )}(h*``struct drm_gem_object *obj`` GEM object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKxhjubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKxhj0ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj/hKxhjubjR )}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hjSh]hstruct vm_area_struct *vma}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKyhjMubjt )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhKyhjiubah}(h]h ]h"]h$]h&]uh1js hjMubeh}(h]h ]h"]h$]h&]uh1jQ hjhhKyhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhK{hjubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKzhjubh handler.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKzhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhK}hjubh)}(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:383: ./include/drm/drm_gem_dma_helper.hhK~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j1DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE (C macro))c.DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATEhNtauh1jhjnhhhNhNubj)}(hhh](j)}(h'DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATEh]j)}(h'DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATEh]j)}(h'DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATEh]j)}(hjh]h'DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj4hKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj4hKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhj4hKubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jMj( jMj) j* j+ uh1jhhhjnhNhNubh)}(h>``DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE (dumb_create_func)``h]j^ )}(hjSh]h:DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE (dumb_create_func)}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjnhhubj )}(hDMA GEM driver operations h]h)}(hDMA GEM driver operationsh]hDMA GEM driver operations}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjiubah}(h]h ]h"]h$]h&]uh1jhj{hKhjnhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubjM )}(hhh]jR )}(h8``dumb_create_func`` callback function for .dumb_create h](jX )}(h``dumb_create_func``h]j^ )}(hjh]hdumb_create_func}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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 }(hjhhhNhNubh)}(h:c:type:`drm_driver`h]j^ )}(hjh]h drm_driver}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubh structure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(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 }(hj*hhhNhNubh)}(h&:c:type:`struct rm_driver `h]j^ )}(hj4h]hstruct rm_driver}(hj6hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j rm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhj*ubh.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.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j DRM_GEM_DMA_DRIVER_OPS (C macro)c.DRM_GEM_DMA_DRIVER_OPShNtauh1jhjnhhhNhNubj)}(hhh](j)}(hDRM_GEM_DMA_DRIVER_OPSh]j)}(hDRM_GEM_DMA_DRIVER_OPSh]j)}(hDRM_GEM_DMA_DRIVER_OPSh]j)}(hjvh]hDRM_GEM_DMA_DRIVER_OPS}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhKubah}(h]joah ](jjeh"]h$]h&]j j )j huh1jhjhKhjqhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjqhhhjhKubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubh)}(h``DRM_GEM_DMA_DRIVER_OPS``h]j^ )}(hjh]hDRM_GEM_DMA_DRIVER_OPS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjnhhubj )}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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 }(hjhhhNhNubh)}(h:c:type:`drm_driver`h]j^ )}(hjh]h drm_driver}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubh structure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hKhjubh)}(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 }(hj/hhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hj9h]hstruct drm_driver}(hj;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhj/ubh.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.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjnhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j6DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE (C macro).c.DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATEhNtauh1jhjnhhhNhNubj)}(hhh](j)}(h,DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATEh]j)}(h,DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATEh]j)}(h,DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATEh]j)}(hjzh]h,DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhKubah}(h]jsah ](jjeh"]h$]h&]j j )j huh1jhjhKhjuhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjuhhhjhKubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubh)}(hC``DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE (dumb_create_func)``h]j^ )}(hjh]h?DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE (dumb_create_func)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjnhhubj )}(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:383: ./include/drm/drm_gem_dma_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjnhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubjM )}(hhh]jR )}(h8``dumb_create_func`` callback function for .dumb_create h](jX )}(h``dumb_create_func``h]j^ )}(hj h]hdumb_create_func}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjubjt )}(hhh]h)}(h"callback function for .dumb_createh]h"callback function for .dumb_create}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjCubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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 }(hj[hhhNhNubh)}(h:c:type:`drm_driver`h]j^ )}(hjeh]h drm_driver}(hjghhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjcubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhj[ubhN structure for drivers that need the virtual address also on imported buffers.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%DRM_GEM_DMA_DRIVER_OPS_VMAP (C macro)c.DRM_GEM_DMA_DRIVER_OPS_VMAPhNtauh1jhjnhhhNhNubj)}(hhh](j)}(hDRM_GEM_DMA_DRIVER_OPS_VMAPh]j)}(hDRM_GEM_DMA_DRIVER_OPS_VMAPh]j)}(hDRM_GEM_DMA_DRIVER_OPS_VMAPh]j)}(hjh]hDRM_GEM_DMA_DRIVER_OPS_VMAP}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubh)}(h``DRM_GEM_DMA_DRIVER_OPS_VMAP``h]j^ )}(hjh]hDRM_GEM_DMA_DRIVER_OPS_VMAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjnhhubj )}(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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhj/ubah}(h]h ]h"]h$]h&]uh1jhjAhKhj+ubh)}(h**Description**h]j7 )}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjHubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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 }(hj`hhhNhNubh)}(h:c:type:`drm_driver`h]j^ )}(hjjh]h drm_driver}(hjlhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjhubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhj`ubhN structure for drivers that need the virtual address also on imported buffers.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj+ubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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&]uh1hhjhKhj+ubeh}(h]h ]h"]h$]h&]uh1jhjAhKhjnhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!DEFINE_DRM_GEM_DMA_FOPS (C macro)c.DEFINE_DRM_GEM_DMA_FOPShNtauh1jhjnhhhNhNubj)}(hhh](j)}(hDEFINE_DRM_GEM_DMA_FOPSh]j)}(hDEFINE_DRM_GEM_DMA_FOPSh]j)}(hDEFINE_DRM_GEM_DMA_FOPSh]j)}(hjh]hDEFINE_DRM_GEM_DMA_FOPS}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubh)}(h"``DEFINE_DRM_GEM_DMA_FOPS (name)``h]j^ )}(hjh]hDEFINE_DRM_GEM_DMA_FOPS (name)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjnhhubj )}(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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhj/ubah}(h]h ]h"]h$]h&]uh1jhjAhKhjnhhubj- )}(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]j7 )}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjLubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjHubjM )}(hhh]jR )}(h*``name`` name for the generated structure h](jX )}(h``name``h]j^ )}(hjmh]hname}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]uh1jW h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjgubjt )}(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&]uh1js hjgubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjdubah}(h]h ]h"]h$]h&]uh1jL hjHubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjHubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j file_operationsuh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./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^ )}(hjh]hdrm_driver.fops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhjhKhjubh. 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&]uh1hhjhKhjHubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:383: ./include/drm/drm_gem_dma_helper.hhKhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_dma_create (C function)c.drm_gem_dma_createhNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKwubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjOhKwubh)}(hhh]j)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]j)}j}drm_gem_dma_createsbc.drm_gem_dma_createasbuh1hhj>hhhjOhKwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjOhKwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjOhKwubj)}(hdrm_gem_dma_createh]j)}(hjh]hdrm_gem_dma_create}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjOhKwubj>)}(h%(struct drm_device *drm, size_t size)h](jD)}(hstruct drm_device *drmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j}c.drm_gem_dma_createasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj1modnameN classnameNjj)}j]j}c.drm_gem_dma_createasbuh1hhj(ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hsizeh]hsize}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hj>hhhjOhKwubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj:hhhjOhKwubah}(h]j5ah ](jjeh"]h$]h&]j j )j huh1jhjOhKwhj7hhubj )}(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:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKwhjhhubah}(h]h ]h"]h$]h&]uh1j hj7hhhjOhKwubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chK{hjubjM )}(hhh](jR )}(h&``struct drm_device *drm`` DRM device h](jX )}(h``struct drm_device *drm``h]j^ )}(hjh]hstruct drm_device *drm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKxhjubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKxhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKxhjubjR )}(h/``size_t size`` size of the object to allocate h](jX )}(h``size_t size``h]j^ )}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKyhjubjt )}(hhh]h)}(hsize of the object to allocateh]hsize of the object to allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKyhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKyhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj8ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chK{hjubh)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKzhjubh)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chK}hjubh)}(h **Return**h]j7 )}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./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:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_dma_free (C function)c.drm_gem_dma_freehNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_gem_dma_freeh]j)}(hdrm_gem_dma_freeh]hdrm_gem_dma_free}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj>)}(h$(struct drm_gem_dma_object *dma_obj)h]jD)}(h"struct drm_gem_dma_object *dma_objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_dma_freeasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdma_objh]hdma_obj}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h)}(h/free resources associated with a DMA GEM objecth]h/free resources associated with a DMA GEM object}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjrhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubjM )}(hhh]jR )}(h>``struct drm_gem_dma_object *dma_obj`` DMA GEM object to free h](jX )}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubjt )}(hhh]h)}(hDMA GEM object to freeh]hDMA GEM object to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_gem_dma_dumb_create_internal (C function)"c.drm_gem_dma_dumb_create_internalhNtauh1jhjnhhhNhNubj)}(hhh](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]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](j)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjDhMubj)}(h drm_gem_dma_dumb_create_internalh]j)}(h drm_gem_dma_dumb_create_internalh]h drm_gem_dma_dumb_create_internal}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhj2hhhjDhMubj>)}(hW(struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)h](jD)}(hstruct drm_file *file_privh](j)}(hj? h]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jYsb"c.drm_gem_dma_dumb_create_internalasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h file_privh]h file_priv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjkubjD)}(hstruct drm_device *drmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j"c.drm_gem_dma_dumb_create_internalasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdrmh]hdrm}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjkubjD)}(h!struct drm_mode_create_dumb *argsh](j)}(hj? h]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]j)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjumodnameN classnameNjj)}j]j"c.drm_gem_dma_dumb_create_internalasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hargsh]hargs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjkubeh}(h]h ]h"]h$]h&]jjuh1j=hj2hhhjDhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj.hhhjDhMubah}(h]j)ah ](jjeh"]h$]h&]j j )j huh1jhjDhMhj+hhubj )}(hhh]h)}(hcreate a dumb buffer objecth]hcreate a dumb buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj+hhhjDhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjM )}(hhh](jR )}(hX``struct drm_file *file_priv`` DRM file-private structure to create the dumb buffer for h](jX )}(h``struct drm_file *file_priv``h]j^ )}(hjh]hstruct drm_file *file_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(h8DRM file-private structure to create the dumb buffer forh]h8DRM file-private structure to create the dumb buffer for}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj,hMhjubjR )}(h&``struct drm_device *drm`` DRM device h](jX )}(h``struct drm_device *drm``h]j^ )}(hjPh]hstruct drm_device *drm}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjJubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1js hjJubeh}(h]h ]h"]h$]h&]uh1jQ hjehMhjubjR )}(h1``struct drm_mode_create_dumb *args`` IOCTL data h](jX )}(h%``struct drm_mode_create_dumb *args``h]j^ )}(hjh]h!struct drm_mode_create_dumb *args}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(h IOCTL datah]h IOCTL data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh)}(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 }(hjhhhNhNubh)}(h-:c:type:`drm_driver.dumb_create `h]j^ )}(hjh]hdrm_driver.dumb_create}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM hjubh)}(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:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gem_dma_dumb_create (C function)c.drm_gem_dma_dumb_createhNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjahM"ubj)}(hdrm_gem_dma_dumb_createh]j)}(hdrm_gem_dma_dumb_createh]hdrm_gem_dma_dumb_create}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjahM"ubj>)}(hW(struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)h](jD)}(hstruct drm_file *file_privh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jvsbc.drm_gem_dma_dumb_createasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h file_privh]h file_priv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_device *drmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj"modnameN classnameNjj)}j]jc.drm_gem_dma_dumb_createasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdrmh]hdrm}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h!struct drm_mode_create_dumb *argsh](j)}(hj? h]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dma_dumb_createasbuh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hargsh]hargs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjOhhhjahM"ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhjahM"ubah}(h]jFah ](jjeh"]h$]h&]j j )j huh1jhjahM"hjHhhubj )}(hhh]h)}(hcreate a dumb buffer objecth]hcreate a dumb buffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM"hjhhubah}(h]h ]h"]h$]h&]uh1j hjHhhhjahM"ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM&hj ubjM )}(hhh](jR )}(hX``struct drm_file *file_priv`` DRM file-private structure to create the dumb buffer for h](jX )}(h``struct drm_file *file_priv``h]j^ )}(hj4 h]hstruct drm_file *file_priv}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2 ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM#hj. ubjt )}(hhh]h)}(h8DRM file-private structure to create the dumb buffer forh]h8DRM file-private structure to create the dumb buffer for}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI hM#hjJ ubah}(h]h ]h"]h$]h&]uh1js hj. ubeh}(h]h ]h"]h$]h&]uh1jQ hjI hM#hj+ ubjR )}(h&``struct drm_device *drm`` DRM device h](jX )}(h``struct drm_device *drm``h]j^ )}(hjm h]hstruct drm_device *drm}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjk ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM$hjg ubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM$hj ubah}(h]h ]h"]h$]h&]uh1js hjg ubeh}(h]h ]h"]h$]h&]uh1jQ hj hM$hj+ ubjR )}(h1``struct drm_mode_create_dumb *args`` IOCTL data h](jX )}(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&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM%hj ubjt )}(hhh]h)}(h IOCTL datah]h IOCTL data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM%hj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hM%hj+ ubeh}(h]h ]h"]h$]h&]uh1jL hj ubh)}(h**Description**h]j7 )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM'hj 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 }(hj hhhNhNubh)}(h-:c:type:`drm_driver.dumb_create `h]j^ )}(hj h]hdrm_driver.dumb_create}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM&hj ubh callback.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM&hj ubh)}(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:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM+hj ubh)}(h **Return**h]j7 )}(hj: h]hReturn}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj8 ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM/hj ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM0hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gem_dma_get_unmapped_area (C function)c.drm_gem_dma_get_unmapped_areahNtauh1jhjnhhhNhNubj)}(hhh](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]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](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMLubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ hhhj hMLubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ hhhj hMLubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ hhhj hMLubj)}(hdrm_gem_dma_get_unmapped_areah]j)}(hdrm_gem_dma_get_unmapped_areah]hdrm_gem_dma_get_unmapped_area}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{ hhhj hMLubj>)}(hd(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)h](jD)}(hstruct file *filph](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hfileh]hfile}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j)}j}j sbc.drm_gem_dma_get_unmapped_areaasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hfilph]hfilp}(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjJ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubj)}(h h]h }(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubj)}(hlongh]hlong}(hjf hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubj)}(h h]h }(hjt hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubj)}(haddrh]haddr}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hunsigned long lenh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlenh]hlen}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hunsigned long pgoffh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hpgoffh]hpgoff}(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 ubj)}(h h]h }(hjK hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 ubj)}(hlongh]hlong}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 ubj)}(h h]h }(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 ubj)}(hflagsh]hflags}(hju hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubeh}(h]h ]h"]h$]h&]jjuh1j=hj{ hhhj hMLubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjw hhhj hMLubah}(h]jr ah ](jjeh"]h$]h&]j j )j huh1jhj hMLhjt hhubj )}(hhh]h)}(h*propose address for mapping in noMMU casesh]h*propose address for mapping in noMMU cases}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMLhj hhubah}(h]h ]h"]h$]h&]uh1j hjt hhhj hMLubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMPhj ubjM )}(hhh](jR )}(h"``struct file *filp`` file object h](jX )}(h``struct file *filp``h]j^ )}(hj h]hstruct file *filp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMMhj ubjt )}(hhh]h)}(h file objecth]h file object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMMhj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hMMhj ubjR )}(h&``unsigned long addr`` memory address h](jX )}(h``unsigned long addr``h]j^ )}(hj h]hunsigned long addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMNhj ubjt )}(hhh]h)}(hmemory addressh]hmemory address}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj. hMNhj/ ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj. hMNhj ubjR )}(h"``unsigned long len`` buffer size h](jX )}(h``unsigned long len``h]j^ )}(hjR h]hunsigned long len}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjP ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMOhjL ubjt )}(hhh]h)}(h buffer sizeh]h buffer size}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg hMOhjh ubah}(h]h ]h"]h$]h&]uh1js hjL ubeh}(h]h ]h"]h$]h&]uh1jQ hjg hMOhj ubjR )}(h$``unsigned long pgoff`` page offset h](jX )}(h``unsigned long pgoff``h]j^ )}(hj h]hunsigned long pgoff}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMPhj ubjt )}(hhh]h)}(h page offseth]h page offset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMPhj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hMPhj ubjR )}(h%``unsigned long flags`` memory flags h](jX )}(h``unsigned long flags``h]j^ )}(hj h]hunsigned long flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMQhj ubjt )}(hhh]h)}(h memory flagsh]h memory flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMQhj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hMQhj ubeh}(h]h ]h"]h$]h&]uh1jL hj ubh)}(h**Description**h]j7 )}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMShj ubh)}(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 }(hjhhhNhNubh)}(h=:c:type:`file_operations.get_unmapped_area `h]j^ )}(hjh]h!file_operations.get_unmapped_area}(hj!hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j file_operationsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMRhjubh operation.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMRhj ubh)}(h **Return**h]j7 )}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjGubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMWhj ubh)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMXhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_gem_dma_print_info (C function)c.drm_gem_dma_print_infohNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_dma_print_infoh]j)}(hdrm_gem_dma_print_infoh]hdrm_gem_dma_print_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(hV(const struct drm_gem_dma_object *dma_obj, struct drm_printer *p, unsigned int indent)h](jD)}(h(const struct drm_gem_dma_object *dma_objh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_dma_print_infoasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdma_objh]hdma_obj}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjxmodnameN classnameNjj)}j]j c.drm_gem_dma_print_infoasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hjh]hp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned int indenth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hindenth]hindent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h3Print :c:type:`drm_gem_dma_object` info for debugfsh](hPrint }(hj)hhhNhNubh)}(h:c:type:`drm_gem_dma_object`h]j^ )}(hj3h]hdrm_gem_dma_object}(hj5hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj1ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j c.drm_gem_dma_print_infoasbj drm_gem_dma_objectuh1hhjOhKwhj)ubh info for debugfs}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj&hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jij( jij) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjmubjM )}(hhh](jR )}(h<``const struct drm_gem_dma_object *dma_obj`` DMA GEM object h](jX )}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(hDMA GEM objecth]hDMA GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h&``struct drm_printer *p`` DRM printer h](jX )}(h``struct drm_printer *p``h]j^ )}(hjh]hstruct drm_printer *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(h DRM printerh]h DRM printer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h.``unsigned int indent`` Tab indentation level h](jX )}(h``unsigned int indent``h]j^ )}(hjh]hunsigned int indent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjmubh)}(h**Description**h]j7 )}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj=ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjmubh)}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gem_dma_get_sg_table (C function)c.drm_gem_dma_get_sg_tablehNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gem_dma_get_sg_tablesbc.drm_gem_dma_get_sg_tableasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_dma_get_sg_tableh]j)}(hjh]hdrm_gem_dma_get_sg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h$(struct drm_gem_dma_object *dma_obj)h]jD)}(h"struct drm_gem_dma_object *dma_objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dma_get_sg_tableasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdma_objh]hdma_obj}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj|hhhjhMubah}(h]jwah ](jjeh"]h$]h&]j j )j huh1jhjhMhjyhhubj )}(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:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj|hhubah}(h]h ]h"]h$]h&]uh1j hjyhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjM )}(hhh]jR )}(h6``struct drm_gem_dma_object *dma_obj`` DMA GEM object h](jX )}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(hDMA GEM objecth]hDMA GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubh)}(h **Return**h]j7 )}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(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_tablehNtauh1jhjnhhhNhNubj)}(hhh](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]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](j)}(hj? h]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjthMubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}!drm_gem_dma_prime_import_sg_tablesb#c.drm_gem_dma_prime_import_sg_tableasbuh1hhjchhhjthMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjthMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjthMubj)}(h!drm_gem_dma_prime_import_sg_tableh]j)}(hjh]h!drm_gem_dma_prime_import_sg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjthMubj>)}(hQ(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j#c.drm_gem_dma_prime_import_sg_tableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h!struct dma_buf_attachment *attachh](j)}(hj? h]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjqmodnameN classnameNjj)}j]j#c.drm_gem_dma_prime_import_sg_tableasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct sg_table *sgth](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j#c.drm_gem_dma_prime_import_sg_tableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjchhhjthMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_hhhjthMubah}(h]jZah ](jjeh"]h$]h&]j j )j huh1jhjthMhj\hhubj )}(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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj?hhubah}(h]h ]h"]h$]h&]uh1j hj\hhhjthMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jZj( jZj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjbubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj^ubjM )}(hhh](jR )}(h1``struct drm_device *dev`` device to import into h](jX )}(h``struct drm_device *dev``h]j^ )}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj}ubjt )}(hhh]h)}(hdevice to import intoh]hdevice to import into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hj}ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjzubjR )}(h9``struct dma_buf_attachment *attach`` DMA-BUF attachment h](jX )}(h%``struct dma_buf_attachment *attach``h]j^ )}(hjh]h!struct dma_buf_attachment *attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(hDMA-BUF attachmenth]hDMA-BUF attachment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjzubjR )}(h>``struct sg_table *sgt`` scatter/gather table of pinned pages h](jX )}(h``struct sg_table *sgt``h]j^ )}(hjh]hstruct sg_table *sgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(h$scatter/gather table of pinned pagesh]h$scatter/gather table of pinned pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjzubeh}(h]h ]h"]h$]h&]uh1jL hj^ubh)}(h**Description**h]j7 )}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj.ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj^ubh)}(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 }(hjFhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j^ )}(hjPh]h$drm_driver.gem_prime_import_sg_table}(hjRhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjFubh callback.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhj^ubh)}(h **Return**h]j7 )}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjxubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj^ubh)}(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:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_dma_vmap (C function)c.drm_gem_dma_vmaphNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_dma_vmaph]j)}(hdrm_gem_dma_vmaph]hdrm_gem_dma_vmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h;(struct drm_gem_dma_object *dma_obj, struct iosys_map *map)h](jD)}(h"struct drm_gem_dma_object *dma_objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_dma_vmapasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdma_objh]hdma_obj}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct iosys_map *maph](j)}(hj? h]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j6c.drm_gem_dma_vmapasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hmaph]hmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hmap a DMA GEM object into the kernel’s virtual address space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubjM )}(hhh](jR )}(h6``struct drm_gem_dma_object *dma_obj`` DMA GEM object h](jX )}(h&``struct drm_gem_dma_object *dma_obj``h]j^ )}(hj0h]h"struct drm_gem_dma_object *dma_obj}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj*ubjt )}(hhh]h)}(hDMA GEM objecth]hDMA GEM object}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1js hj*ubeh}(h]h ]h"]h$]h&]uh1jQ hjEhMhj'ubjR )}(hd``struct iosys_map *map`` Returns the kernel virtual address of the DMA GEM object's backing store. h](jX )}(h``struct iosys_map *map``h]j^ )}(hjih]hstruct iosys_map *map}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjgubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjcubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubah}(h]h ]h"]h$]h&]uh1js hjcubeh}(h]h ]h"]h$]h&]uh1jQ hj~hMhj'ubeh}(h]h ]h"]h$]h&]uh1jL hj ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_dma_mmap (C function)c.drm_gem_dma_mmaphNtauh1jhjnhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(hdrm_gem_dma_mmaph]j)}(hdrm_gem_dma_mmaph]hdrm_gem_dma_mmap}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubj>)}(h@(struct drm_gem_dma_object *dma_obj, struct vm_area_struct *vma)h](jD)}(h"struct drm_gem_dma_object *dma_objh](j)}(hj? h]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]j)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjnmodnameN classnameNjj)}j]j)}j}j4sbc.drm_gem_dma_mmapasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hdma_objh]hdma_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjFubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dma_mmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjFubeh}(h]h ]h"]h$]h&]jjuh1j=hj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h%memory-map an exported DMA GEM objecth]h%memory-map an exported DMA GEM object}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj>hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jYj( jYj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjaubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM hj]ubjM )}(hhh](jR )}(h6``struct drm_gem_dma_object *dma_obj`` DMA GEM object h](jX )}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj|ubjt )}(hhh]h)}(hDMA GEM objecth]hDMA GEM object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hj|ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjyubjR )}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhjubjt )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjyubeh}(h]h ]h"]h$]h&]uh1jL hj]ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM hj]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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM hj]ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM hj]ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_gem_dma_prime_import_sg_table_vmap (C function)(c.drm_gem_dma_prime_import_sg_table_vmaphNtauh1jhjnhhhNhNubj)}(hhh](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]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](j)}(hj? h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM1ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjohM1ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}&drm_gem_dma_prime_import_sg_table_vmapsb(c.drm_gem_dma_prime_import_sg_table_vmapasbuh1hhj^hhhjohM1ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjohM1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjohM1ubj)}(h&drm_gem_dma_prime_import_sg_table_vmaph]j)}(hjh]h&drm_gem_dma_prime_import_sg_table_vmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhjohM1ubj>)}(hQ(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j(c.drm_gem_dma_prime_import_sg_table_vmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h!struct dma_buf_attachment *attachh](j)}(hj? h]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjlmodnameN classnameNjj)}j]j(c.drm_gem_dma_prime_import_sg_table_vmapasbuh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct sg_table *sgth](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j(c.drm_gem_dma_prime_import_sg_table_vmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hj^hhhjohM1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjohM1ubah}(h]jUah ](jjeh"]h$]h&]j j )j huh1jhjohM1hjWhhubj )}(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}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM1hj:hhubah}(h]h ]h"]h$]h&]uh1j hjWhhhjohM1ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jUj( jUj) j* j+ uh1jhhhjnhNhNubj- )}(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]j7 )}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM5hjYubjM )}(hhh](jR )}(h&``struct drm_device *dev`` DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hj~h]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM3hjxubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1js hjxubeh}(h]h ]h"]h$]h&]uh1jQ hjhM3hjuubjR )}(h9``struct dma_buf_attachment *attach`` DMA-BUF attachment h](jX )}(h%``struct dma_buf_attachment *attach``h]j^ )}(hjh]h!struct dma_buf_attachment *attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM4hjubjt )}(hhh]h)}(hDMA-BUF attachmenth]hDMA-BUF attachment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM4hjuubjR )}(h>``struct sg_table *sgt`` Scatter/gather table of pinned pages h](jX )}(h``struct sg_table *sgt``h]j^ )}(hjh]hstruct sg_table *sgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM5hjubjt )}(hhh]h)}(h$Scatter/gather table of pinned pagesh]h$Scatter/gather table of pinned pages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM5hjuubeh}(h]h ]h"]h$]h&]uh1jL hjYubh)}(h**Description**h]j7 )}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM7hjYubh)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM6hjYubh)}(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 }(hjPhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j^ )}(hjZh]h$drm_driver.gem_prime_import_sg_table}(hj\hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjXubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM;hjPubh callback. The }(hjPhhhNhNubh)}(h%:c:type:`DRM_GEM_DMA_DRIVER_OPS_VMAP`h]j^ )}(hj~h]hDRM_GEM_DMA_DRIVER_OPS_VMAP}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_GEM_DMA_DRIVER_OPS_VMAPuh1hhjwhM;hjPubhF macro provides a shortcut to set the necessary DRM driver operations.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhM;hjYubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM?hjYubh)}(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:386: ./drivers/gpu/drm/drm_gem_dma_helper.chM@hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjnhhhNhNubeh}(h]jMah ]h"]"gem dma helper functions referenceah$]h&]uh1hhjhhhhhMzubh)}(hhh](h)}(h#GEM SHMEM Helper Function Referenceh]h#GEM SHMEM Helper Function Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjiuh1hhjhhhhhMubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:392: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhjhhubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gem_shmem_object`h]j^ )}(hjh]hdrm_gem_shmem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_shmem_objectuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:392: ./drivers/gpu/drm/drm_gem_shmem_helper.chK"hjubh%. For GEM callback helpers in struct }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj(h]hdrm_gem_object}(hj*hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhj!hK"hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hK"hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_shmem_object (C struct)c.drm_gem_shmem_objecthNtauh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhNubj)}(hhh](j)}(hdrm_gem_shmem_objecth]j)}(hstruct drm_gem_shmem_objecth](j)}(hj? h]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjvhKubj)}(hdrm_gem_shmem_objecth]j)}(hjch]hdrm_gem_shmem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjvhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjvhKubah}(h]j[ah ](jjeh"]h$]h&]j j )j huh1jhjvhKhj^hhubj )}(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:395: ./include/drm/drm_gem_shmem_helper.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hj^hhhjvhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhj]hNubj- )}(hX**Definition**:: struct drm_gem_shmem_object { struct drm_gem_object base; struct page **pages; refcount_t pages_use_count; refcount_t pages_pin_count; int madv; struct list_head madv_list; struct sg_table *sgt; void *vaddr; refcount_t 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. ``pages_pin_count`` Reference count on the pinned pages table. Pages are hard-pinned and reside in memory if count greater than zero. Otherwise, when count is zero, the pages are allowed to be evicted and purged by memory shrinker. ``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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjubj )}(hXustruct drm_gem_shmem_object { struct drm_gem_object base; struct page **pages; refcount_t pages_use_count; refcount_t pages_pin_count; int madv; struct list_head madv_list; struct sg_table *sgt; void *vaddr; refcount_t vmap_use_count; bool pages_mark_dirty_on_put : 1; bool pages_mark_accessed_on_put : 1; bool map_wc : 1; };h]hXustruct drm_gem_shmem_object { struct drm_gem_object base; struct page **pages; refcount_t pages_use_count; refcount_t pages_pin_count; int madv; struct list_head madv_list; struct sg_table *sgt; void *vaddr; refcount_t vmap_use_count; bool pages_mark_dirty_on_put : 1; bool pages_mark_accessed_on_put : 1; bool map_wc : 1; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK*hjubjM )}(hhh](jR )}(h``base`` Base GEM object h](jX )}(h``base``h]j^ )}(hj h]hbase}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj ubjt )}(hhh]h)}(hBase GEM objecth]hBase GEM object}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj- hKhj. ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj- hKhj ubjR )}(h``pages`` Page table h](jX )}(h ``pages``h]j^ )}(hjQ h]hpages}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjO ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjK ubjt )}(hhh]h)}(h Page tableh]h Page table}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf hKhjg ubah}(h]h ]h"]h$]h&]uh1js hjK ubeh}(h]h ]h"]h$]h&]uh1jQ hjf hKhj ubjR )}(hg``pages_use_count`` Reference count on the pages table. The pages are put when the count reaches zero. h](jX )}(h``pages_use_count``h]j^ )}(hj h]hpages_use_count}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK%hj ubjt )}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK$hj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hK%hj ubjR )}(h``pages_pin_count`` Reference count on the pinned pages table. Pages are hard-pinned and reside in memory if count greater than zero. Otherwise, when count is zero, the pages are allowed to be evicted and purged by memory shrinker. h](jX )}(h``pages_pin_count``h]j^ )}(hj h]hpages_pin_count}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK0hj ubjt )}(hhh](h)}(h*Reference count on the pinned pages table.h]h*Reference count on the pinned pages table.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK,hj ubh)}(hPages are hard-pinned and reside in memory if count greater than zero. Otherwise, when count is zero, the pages are allowed to be evicted and purged by memory shrinker.h]hPages are hard-pinned and reside in memory if count greater than zero. Otherwise, when count is zero, the pages are allowed to be evicted and purged by memory shrinker.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK.hj ubeh}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hK0hj ubjR )}(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](jX )}(h``madv``h]j^ )}(hj !h]hmadv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj !ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK;hj!ubjt )}(hhh](h)}(hState for madviseh]hState for madvise}(hj&!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK7hj#!ubh)}(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.}(hj5!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK9hj#!ubeh}(h]h ]h"]h$]h&]uh1js hj!ubeh}(h]h ]h"]h$]h&]uh1jQ hj"!hK;hj ubjR )}(hd``madv_list`` List entry for madvise tracking Typically used by drivers to track purgeable objects h](jX )}(h ``madv_list``h]j^ )}(hjV!h]h madv_list}(hjX!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjT!ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKBhjP!ubjt )}(hhh](h)}(hList entry for madvise trackingh]hList entry for madvise tracking}(hjo!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK@hjl!ubh)}(h4Typically used by drivers to track purgeable objectsh]h4Typically used by drivers to track purgeable objects}(hj~!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk!hKBhjl!ubeh}(h]h ]h"]h$]h&]uh1js hjP!ubeh}(h]h ]h"]h$]h&]uh1jQ hjk!hKBhj ubjR )}(h8``sgt`` Scatter/gather table for imported PRIME buffers h](jX )}(h``sgt``h]j^ )}(hj!h]hsgt}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj!ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKGhj!ubjt )}(hhh]h)}(h/Scatter/gather table for imported PRIME buffersh]h/Scatter/gather table for imported PRIME buffers}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKGhj!ubah}(h]h ]h"]h$]h&]uh1js hj!ubeh}(h]h ]h"]h$]h&]uh1jQ hj!hKGhj ubjR )}(h7``vaddr`` Kernel virtual address of the backing memory h](jX )}(h ``vaddr``h]j^ )}(hj!h]hvaddr}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj!ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKLhj!ubjt )}(hhh]h)}(h,Kernel virtual address of the backing memoryh]h,Kernel virtual address of the backing memory}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKLhj!ubah}(h]h ]h"]h$]h&]uh1js hj!ubeh}(h]h ]h"]h$]h&]uh1jQ hj!hKLhj ubjR )}(hr``vmap_use_count`` Reference count on the virtual address. The address are un-mapped when the count reaches zero. h](jX )}(h``vmap_use_count``h]j^ )}(hj"h]hvmap_use_count}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKRhj "ubjt )}(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:395: ./include/drm/drm_gem_shmem_helper.hhKQhj&"ubah}(h]h ]h"]h$]h&]uh1js hj "ubeh}(h]h ]h"]h$]h&]uh1jQ hj%"hKRhj ubjR )}(hC``pages_mark_dirty_on_put`` Mark pages as dirty when they are put. h](jX )}(h``pages_mark_dirty_on_put``h]j^ )}(hjJ"h]hpages_mark_dirty_on_put}(hjL"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjH"ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKYhjD"ubjt )}(hhh]h)}(h&Mark pages as dirty when they are put.h]h&Mark pages as dirty when they are put.}(hjc"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_"hKYhj`"ubah}(h]h ]h"]h$]h&]uh1js hjD"ubeh}(h]h ]h"]h$]h&]uh1jQ hj_"hKYhj ubjR )}(hI``pages_mark_accessed_on_put`` Mark pages as accessed when they are put. h](jX )}(h``pages_mark_accessed_on_put``h]j^ )}(hj"h]hpages_mark_accessed_on_put}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhK`hj}"ubjt )}(hhh]h)}(h)Mark pages as accessed when they are put.h]h)Mark pages as accessed when they are put.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hK`hj"ubah}(h]h ]h"]h$]h&]uh1js hj}"ubeh}(h]h ]h"]h$]h&]uh1jQ hj"hK`hj ubjR )}(hG``map_wc`` map object write-combined (instead of using shmem defaults).h](jX )}(h ``map_wc``h]j^ )}(hj"h]hmap_wc}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKfhj"ubjt )}(hhh]h)}(h)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjS#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO#ubj)}(h h]h }(hj`#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO#ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjq#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn#ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjs#modnameN classnameNjj)}j]j)}j}j9#sbc.drm_gem_shmem_object_freeasbuh1hhjO#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO#ubj)}(hobjh]hobj}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjK#ubah}(h]h ]h"]h$]h&]jjuh1j=hj#hhhj$#hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj$#hKubah}(h]j #ah ](jjeh"]h$]h&]j j )j huh1jhj$#hKhj #hhubj )}(hhh]h)}(h,GEM object function for drm_gem_shmem_free()h]h,GEM object function for drm_gem_shmem_free()}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj#hhubah}(h]h ]h"]h$]h&]uh1j hj #hhhj$#hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j#j( j#j) j* j+ uh1jhhhjhj]hNubj- )}(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]j7 )}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj#ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj#ubjM )}(hhh]jR )}(h2``struct drm_gem_object *obj`` GEM object to free h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj$h]hstruct drm_gem_object *obj}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj$ubjt )}(hhh]h)}(hGEM object to freeh]hGEM object to free}(hj0$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,$hKhj-$ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj,$hKhj$ubah}(h]h ]h"]h$]h&]uh1jL hj#ubh)}(h**Description**h]j7 )}(hjR$h]h Description}(hjT$hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjP$ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj#ubh)}(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 }(hjh$hhhNhNubh)}(h::c:type:`drm_gem_object_funcs.free `h]j^ )}(hjr$h]hdrm_gem_object_funcs.free}(hjt$hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjp$ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjh$ubh handler.}(hjh$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hKhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhj]hNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_gem_shmem_object_print_info (C function)!c.drm_gem_shmem_object_print_infohNtauh1jhjhhhj]hNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj$hKubj)}(hdrm_gem_shmem_object_print_infoh]j)}(hdrm_gem_shmem_object_print_infoh]hdrm_gem_shmem_object_print_info}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj$hKubj>)}(hN(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *obj)h](jD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj%modnameN classnameNjj)}j]j)}j}j$sb!c.drm_gem_shmem_object_print_infoasbuh1hhj$ubj)}(h h]h }(hj5%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hjC%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hp}(hjP%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj$ubjD)}(hunsigned int indenth](j)}(hunsignedh]hunsigned}(hjh%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd%ubj)}(h h]h }(hjv%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd%ubj)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd%ubj)}(hindenth]hindent}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj$ubjD)}(h const struct drm_gem_object *objh](j)}(hjJh]hconst}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hj? h]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj%modnameN classnameNjj)}j]j1%!c.drm_gem_shmem_object_print_infoasbuh1hhj%ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hobjh]hobj}(hj+&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj$ubeh}(h]h ]h"]h$]h&]jjuh1j=hj$hhhj$hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj$hhhj$hKubah}(h]j$ah ](jjeh"]h$]h&]j j )j huh1jhj$hKhj$hhubj )}(hhh]h)}(h5Print :c:type:`drm_gem_shmem_object` info for debugfsh](hPrint }(hjU&hhhNhNubh)}(h:c:type:`drm_gem_shmem_object`h]j^ )}(hj_&h]hdrm_gem_shmem_object}(hja&hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj]&ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j1%!c.drm_gem_shmem_object_print_infoasbj drm_gem_shmem_objectuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjU&ubh info for debugfs}(hjU&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjR&hhubah}(h]h ]h"]h$]h&]uh1j hj$hhhj$hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j&j( j&j) j* j+ uh1jhhhjhj]hNubj- )}(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]j7 )}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj&ubjM )}(hhh](jR )}(h&``struct drm_printer *p`` DRM printer h](jX )}(h``struct drm_printer *p``h]j^ )}(hj&h]hstruct drm_printer *p}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj&ubjt )}(hhh]h)}(h DRM printerh]h DRM printer}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1js hj&ubeh}(h]h ]h"]h$]h&]uh1jQ hj&hKhj&ubjR )}(h.``unsigned int indent`` Tab indentation level h](jX )}(h``unsigned int indent``h]j^ )}(hj&h]hunsigned int indent}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj&ubjt )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 'hKhj'ubah}(h]h ]h"]h$]h&]uh1js hj&ubeh}(h]h ]h"]h$]h&]uh1jQ hj 'hKhj&ubjR )}(h0``const struct drm_gem_object *obj`` GEM object h](jX )}(h$``const struct drm_gem_object *obj``h]j^ )}(hj1'h]h const struct drm_gem_object *obj}(hj3'hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj/'ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj+'ubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hjJ'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF'hKhjG'ubah}(h]h ]h"]h$]h&]uh1js hj+'ubeh}(h]h ]h"]h$]h&]uh1jQ hjF'hKhj&ubeh}(h]h ]h"]h$]h&]uh1jL hj&ubh)}(h**Description**h]j7 )}(hjl'h]h Description}(hjn'hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjj'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj&ubh)}(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 }(hj'hhhNhNubh)}(h@:c:type:`drm_gem_object_funcs.print_info `h]j^ )}(hj'h]hdrm_gem_object_funcs.print_info}(hj'hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj'ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj'ubh handler.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hKhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhj]hNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gem_shmem_object_pin (C function)c.drm_gem_shmem_object_pinhNtauh1jhjhhhj]hNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hKubj)}(hdrm_gem_shmem_object_pinh]j)}(hdrm_gem_shmem_object_pinh]hdrm_gem_shmem_object_pin}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj'hKubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj/(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,(ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj1(modnameN classnameNjj)}j]j)}j}j'sbc.drm_gem_shmem_object_pinasbuh1hhj (ubj)}(h h]h }(hjO(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (ubj)}(hjh]h*}(hj](hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (ubj)}(hobjh]hobj}(hjj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj (ubah}(h]h ]h"]h$]h&]jjuh1j=hj'hhhj'hKubeh}(h]h ]h"]h$]h&]*jjjuh1jjjhj'hhhj'hKubah}(h]j'ah ](jjeh"]h$]h&]j j )j huh1jhj'hKhj'hhubj )}(hhh]h)}(h+GEM object function for drm_gem_shmem_pin()h]h+GEM object function for drm_gem_shmem_pin()}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj(hhubah}(h]h ]h"]h$]h&]uh1j hj'hhhj'hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j(j( j(j) j* j+ uh1jhhhjhj]hNubj- )}(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]j7 )}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj(ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj(ubjM )}(hhh]jR )}(h*``struct drm_gem_object *obj`` GEM object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj(h]hstruct drm_gem_object *obj}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj(ubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1js hj(ubeh}(h]h ]h"]h$]h&]uh1jQ hj(hKhj(ubah}(h]h ]h"]h$]h&]uh1jL hj(ubh)}(h**Description**h]j7 )}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj(ubh)}(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 }(hj&)hhhNhNubh)}(h9:c:type:`drm_gem_object_funcs.pin `h]j^ )}(hj0)h]hdrm_gem_object_funcs.pin}(hj2)hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj.)ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj&)ubh handler.}(hj&)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjM)hKhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhj]hNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gem_shmem_object_unpin (C function)c.drm_gem_shmem_object_unpinhNtauh1jhjhhhj]hNubj)}(hhh](j)}(h)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj)modnameN classnameNjj)}j]j)}j}j)sbc.drm_gem_shmem_object_unpinasbuh1hhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hobjh]hobj}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj)ubah}(h]h ]h"]h$]h&]jjuh1j=hjt)hhhj)hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjp)hhhj)hKubah}(h]jk)ah ](jjeh"]h$]h&]j j )j huh1jhj)hKhjm)hhubj )}(hhh]h)}(h-GEM object function for drm_gem_shmem_unpin()h]h-GEM object function for drm_gem_shmem_unpin()}(hj8*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj5*hhubah}(h]h ]h"]h$]h&]uh1j hjm)hhhj)hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jP*j( jP*j) j* j+ uh1jhhhjhj]hNubj- )}(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]j7 )}(hjZ*h]h Parameters}(hj\*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjX*ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjT*ubjM )}(hhh]jR )}(h*``struct drm_gem_object *obj`` GEM object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjy*h]hstruct drm_gem_object *obj}(hj{*hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjw*ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjs*ubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1js hjs*ubeh}(h]h ]h"]h$]h&]uh1jQ hj*hKhjp*ubah}(h]h ]h"]h$]h&]uh1jL hjT*ubh)}(h**Description**h]j7 )}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj*ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjT*ubh)}(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 }(hj*hhhNhNubh)}(h;:c:type:`drm_gem_object_funcs.unpin `h]j^ )}(hj*h]hdrm_gem_object_funcs.unpin}(hj*hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj*ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj*ubh handler.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hKhjT*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhj]hNubj)}(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_tablehNtauh1jhjhhhj]hNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKubj)}(h h]h }(hj*+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj)+hKubh)}(hhh]j)}(hsg_tableh]hsg_table}(hj;+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8+ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj=+modnameN classnameNjj)}j]j)}j}!drm_gem_shmem_object_get_sg_tablesb#c.drm_gem_shmem_object_get_sg_tableasbuh1hhj+hhhj)+hKubj)}(h h]h }(hj\+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj)+hKubj)}(hjh]h*}(hjj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj)+hKubj)}(h!drm_gem_shmem_object_get_sg_tableh]j)}(hjY+h]h!drm_gem_shmem_object_get_sg_table}(hj{+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj)+hKubj>)}(h(struct drm_gem_object *obj)h]jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj+modnameN classnameNjj)}j]jW+#c.drm_gem_shmem_object_get_sg_tableasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hobjh]hobj}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj+ubah}(h]h ]h"]h$]h&]jjuh1j=hj+hhhj)+hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhj)+hKubah}(h]j+ah ](jjeh"]h$]h&]j j )j huh1jhj)+hKhj+hhubj )}(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:395: ./include/drm/drm_gem_shmem_helper.hhKhj,hhubah}(h]h ]h"]h$]h&]uh1j hj+hhhj)+hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j/,j( j/,j) j* j+ uh1jhhhjhj]hNubj- )}(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]j7 )}(hj9,h]h Parameters}(hj;,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj7,ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj3,ubjM )}(hhh]jR )}(h*``struct drm_gem_object *obj`` GEM object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjX,h]hstruct drm_gem_object *obj}(hjZ,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjV,ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhjR,ubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hjq,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm,hKhjn,ubah}(h]h ]h"]h$]h&]uh1js hjR,ubeh}(h]h ]h"]h$]h&]uh1jQ hjm,hKhjO,ubah}(h]h ]h"]h$]h&]uh1jL hj3,ubh)}(h**Description**h]j7 )}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj3,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 }(hj,hhhNhNubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj,ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj,ubh handler.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hKhj3,ubh)}(h **Return**h]j7 )}(hj,h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj3,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.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhKhj3,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhj]hNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gem_shmem_object_mmap (C function)c.drm_gem_shmem_object_mmaphNtauh1jhjhhhj]hNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj"-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhMubj)}(h h]h }(hj1-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj0-hMubj)}(hdrm_gem_shmem_object_mmaph]j)}(hdrm_gem_shmem_object_mmaph]hdrm_gem_shmem_object_mmap}(hjC-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj0-hMubj>)}(h8(struct drm_gem_object *obj, struct vm_area_struct *vma)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj_-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[-ubj)}(h h]h }(hjl-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[-ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj}-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz-ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj-modnameN classnameNjj)}j]j)}j}jE-sbc.drm_gem_shmem_object_mmapasbuh1hhj[-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[-ubj)}(hobjh]hobj}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjW-ubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj-modnameN classnameNjj)}j]j-c.drm_gem_shmem_object_mmapasbuh1hhj-ubj)}(h h]h }(hj .hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hvmah]hvma}(hj(.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjW-ubeh}(h]h ]h"]h$]h&]jjuh1j=hj-hhhj0-hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-hhhj0-hMubah}(h]j-ah ](jjeh"]h$]h&]j j )j huh1jhj0-hMhj-hhubj )}(hhh]h)}(h,GEM object function for drm_gem_shmem_mmap()h]h,GEM object function for drm_gem_shmem_mmap()}(hjR.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhMhjO.hhubah}(h]h ]h"]h$]h&]uh1j hj-hhhj0-hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj.j( jj.j) j* j+ uh1jhhhjhj]hNubj- )}(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]j7 )}(hjt.h]h Parameters}(hjv.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjr.ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM hjn.ubjM )}(hhh](jR )}(h*``struct drm_gem_object *obj`` GEM object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj.h]hstruct drm_gem_object *obj}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhMhj.ubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj.hMhj.ubjR )}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hj.h]hstruct vm_area_struct *vma}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW h^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM hj.ubjt )}(hhh]h)}(hVMA for the area to be mappedh]hVMA for the area to be mapped}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hM hj.ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj.hM hj.ubeh}(h]h ]h"]h$]h&]uh1jL hjn.ubh)}(h**Description**h]j7 )}(hj/h]h Description}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM hjn.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^ )}(hj'/h]hdrm_gem_object_funcs.mmap}(hj)/hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj%/ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM hj/ubh handler.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjD/hM hjn.ubh)}(h **Return**h]j7 )}(hjQ/h]hReturn}(hjS/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjO/ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM hjn.ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjg/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhMhjn.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhj]hNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"DRM_GEM_SHMEM_DRIVER_OPS (C macro)c.DRM_GEM_SHMEM_DRIVER_OPShNtauh1jhjhhhj]hNubj)}(hhh](j)}(hDRM_GEM_SHMEM_DRIVER_OPSh]j)}(hDRM_GEM_SHMEM_DRIVER_OPSh]j)}(hDRM_GEM_SHMEM_DRIVER_OPSh]j)}(hj/h]hDRM_GEM_SHMEM_DRIVER_OPS}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM&ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj/hhhj/hM&ubah}(h]j/ah ](jjeh"]h$]h&]j j )j huh1jhj/hM&hj/hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj/hhhj/hM&ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' j/j( j/j) j* j+ uh1jhhhjhj]hNubh)}(h``DRM_GEM_SHMEM_DRIVER_OPS``h]j^ )}(hj/h]hDRM_GEM_SHMEM_DRIVER_OPS}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj/ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM(hjhhubj )}(h Default shmem GEM operations **Description** This macro provides a shortcut for setting the shmem GEM operations in the :c:type:`drm_driver` structure. Drivers that do not require an s/g table for imported buffers should use this. 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:395: ./include/drm/drm_gem_shmem_helper.hhM&hj/ubah}(h]h ]h"]h$]h&]uh1jhj/hM&hj/ubh)}(h**Description**h]j7 )}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM(hj/ubh)}(hThis macro provides a shortcut for setting the shmem GEM operations in the :c:type:`drm_driver` structure. Drivers that do not require an s/g table for imported buffers should use this.h](hKThis macro provides a shortcut for setting the shmem GEM operations in the }(hj0hhhNhNubh)}(h:c:type:`drm_driver`h]j^ )}(hj!0h]h drm_driver}(hj#0hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj0ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:395: ./include/drm/drm_gem_shmem_helper.hhM'hj0ubhZ structure. Drivers that do not require an s/g table for imported buffers should use this.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>0hM'hj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM&hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_shmem_init (C function)c.drm_gem_shmem_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h`int drm_gem_shmem_init (struct drm_device *dev, struct drm_gem_shmem_object *shmem, size_t size)h]j)}(h_int drm_gem_shmem_init(struct drm_device *dev, struct drm_gem_shmem_object *shmem, size_t size)h](j)}(hinth]hint}(hjh0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd0hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKcubj)}(h h]h }(hjw0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd0hhhjv0hKcubj)}(hdrm_gem_shmem_inith]j)}(hdrm_gem_shmem_inith]hdrm_gem_shmem_init}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjd0hhhjv0hKcubj>)}(hI(struct drm_device *dev, struct drm_gem_shmem_object *shmem, size_t size)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj0modnameN classnameNjj)}j]j)}j}j0sbc.drm_gem_shmem_initasbuh1hhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hdevh]hdev}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj0ubjD)}(h"struct drm_gem_shmem_object *shmemh](j)}(hj? h]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj$1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj51hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj21ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj71modnameN classnameNjj)}j]j0c.drm_gem_shmem_initasbuh1hhj1ubj)}(h h]h }(hjS1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]h*}(hja1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hshmemh]hshmem}(hjn1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj0ubjD)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj1modnameN classnameNjj)}j]j0c.drm_gem_shmem_initasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hsizeh]hsize}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj0ubeh}(h]h ]h"]h$]h&]jjuh1j=hjd0hhhjv0hKcubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`0hhhjv0hKcubah}(h]j[0ah ](jjeh"]h$]h&]j j )j huh1jhjv0hKchj]0hhubj )}(hhh]h)}(hInitialize an allocated object.h]hInitialize an allocated object.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKchj1hhubah}(h]h ]h"]h$]h&]uh1j hj]0hhhjv0hKcubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j1j( j1j) j* j+ uh1jhhhjhNhNubj- )}(hX3**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_gem_shmem_object *shmem`` shmem GEM object to initialize ``size_t size`` Buffer size in bytes **Description** This function initializes an allocated shmem GEM object. **Return** 0 on success, or a negative error code on failure.h](h)}(h**Parameters**h]j7 )}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKghj1ubjM )}(hhh](jR )}(h&``struct drm_device *dev`` DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hj!2h]hstruct drm_device *dev}(hj#2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKdhj2ubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hj:2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj62hKdhj72ubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hj62hKdhj2ubjR )}(hF``struct drm_gem_shmem_object *shmem`` shmem GEM object to initialize h](jX )}(h&``struct drm_gem_shmem_object *shmem``h]j^ )}(hjZ2h]h"struct drm_gem_shmem_object *shmem}(hj\2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjX2ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKehjT2ubjt )}(hhh]h)}(hshmem GEM object to initializeh]hshmem GEM object to initialize}(hjs2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo2hKehjp2ubah}(h]h ]h"]h$]h&]uh1js hjT2ubeh}(h]h ]h"]h$]h&]uh1jQ hjo2hKehj2ubjR )}(h%``size_t size`` Buffer size in bytes h](jX )}(h``size_t size``h]j^ )}(hj2h]h size_t size}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKfhj2ubjt )}(hhh]h)}(hBuffer size in bytesh]hBuffer size in bytes}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKfhj2ubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hj2hKfhj2ubeh}(h]h ]h"]h$]h&]uh1jL hj1ubh)}(h**Description**h]j7 )}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhhj1ubh)}(h8This function initializes an allocated shmem GEM object.h]h8This function initializes an allocated shmem GEM object.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKghj1ubh)}(h **Return**h]j7 )}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKihj1ubh)}(h20 on success, or a negative error code on failure.h]h20 on success, or a negative error code on failure.}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKjhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gem_shmem_create (C function)c.drm_gem_shmem_createhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj:3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj63hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKubj)}(h h]h }(hjH3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj63hhhjG3hKubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hjY3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV3ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj[3modnameN classnameNjj)}j]j)}j}drm_gem_shmem_createsbc.drm_gem_shmem_createasbuh1hhj63hhhjG3hKubj)}(h h]h }(hjz3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj63hhhjG3hKubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj63hhhjG3hKubj)}(hdrm_gem_shmem_createh]j)}(hjw3h]hdrm_gem_shmem_create}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj63hhhjG3hKubj>)}(h%(struct drm_device *dev, size_t size)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj3modnameN classnameNjj)}j]ju3c.drm_gem_shmem_createasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hdevh]hdev}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj3ubjD)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj'4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$4ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj)4modnameN classnameNjj)}j]ju3c.drm_gem_shmem_createasbuh1hhj 4ubj)}(h h]h }(hjE4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubj)}(hsizeh]hsize}(hjS4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj3ubeh}(h]h ]h"]h$]h&]jjuh1j=hj63hhhjG3hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj23hhhjG3hKubah}(h]j-3ah ](jjeh"]h$]h&]j j )j huh1jhjG3hKhj/3hhubj )}(hhh]h)}(h&Allocate an object with the given sizeh]h&Allocate an object with the given size}(hj}4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhjz4hhubah}(h]h ]h"]h$]h&]uh1j hj/3hhhjG3hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j4j( j4j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj4ubjM )}(hhh](jR )}(h&``struct drm_device *dev`` DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hj4h]hstruct drm_device *dev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj4ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj4ubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1js hj4ubeh}(h]h ]h"]h$]h&]uh1jQ hj4hKhj4ubjR )}(h/``size_t size`` Size of the object to allocate h](jX )}(h``size_t size``h]j^ )}(hj4h]h size_t size}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj4ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj4ubjt )}(hhh]h)}(hSize of the object to allocateh]hSize of the object to allocate}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 5hKhj 5ubah}(h]h ]h"]h$]h&]uh1js hj4ubeh}(h]h ]h"]h$]h&]uh1jQ hj 5hKhj4ubeh}(h]h ]h"]h$]h&]uh1jL hj4ubh)}(h**Description**h]j7 )}(hj25h]h Description}(hj45hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj05ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj4ubh)}(h)This function creates a shmem GEM object.h]h)This function creates a shmem GEM object.}(hjH5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj4ubh)}(h **Return**h]j7 )}(hjY5h]hReturn}(hj[5hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjW5ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj4ubh)}(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.}(hjo5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_shmem_release (C function)c.drm_gem_shmem_releasehNtauh1jhjhhhNhNubj)}(hhh](j)}(h?void drm_gem_shmem_release (struct drm_gem_shmem_object *shmem)h]j)}(h>void drm_gem_shmem_release(struct drm_gem_shmem_object *shmem)h](j)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hKubj)}(hdrm_gem_shmem_releaseh]j)}(hdrm_gem_shmem_releaseh]hdrm_gem_shmem_release}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhj5hKubj>)}(h$(struct drm_gem_shmem_object *shmem)h]jD)}(h"struct drm_gem_shmem_object *shmemh](j)}(hj? h]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj5modnameN classnameNjj)}j]j)}j}j5sbc.drm_gem_shmem_releaseasbuh1hhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hj'6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hshmemh]hshmem}(hj46hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj5ubah}(h]h ]h"]h$]h&]jjuh1j=hj5hhhj5hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5hhhj5hKubah}(h]j5ah ](jjeh"]h$]h&]j j )j huh1jhj5hKhj5hhubj )}(hhh]h)}(h5Release resources associated with a shmem GEM object.h]h5Release resources associated with a shmem GEM object.}(hj^6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj[6hhubah}(h]h ]h"]h$]h&]uh1j hj5hhhj5hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jv6j( jv6j) j* j+ uh1jhhhjhNhNubj- )}(hX**Parameters** ``struct drm_gem_shmem_object *shmem`` shmem GEM object **Description** This function cleans up the GEM object state, but does not free the memory used to store the object itself. This function is meant to be a dedicated helper for the Rust GEM bindings.h](h)}(h**Parameters**h]j7 )}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj~6ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhjz6ubjM )}(hhh]jR )}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](jX )}(h&``struct drm_gem_shmem_object *shmem``h]j^ )}(hj6h]h"struct drm_gem_shmem_object *shmem}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj6ubjt )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKhj6ubah}(h]h ]h"]h$]h&]uh1js hj6ubeh}(h]h ]h"]h$]h&]uh1jQ hj6hKhj6ubah}(h]h ]h"]h$]h&]uh1jL hjz6ubh)}(h**Description**h]j7 )}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj6ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhjz6ubh)}(hThis function cleans up the GEM object state, but does not free the memory used to store the object itself. This function is meant to be a dedicated helper for the Rust GEM bindings.h]hThis function cleans up the GEM object state, but does not free the memory used to store the object itself. This function is meant to be a dedicated helper for the Rust GEM bindings.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhjz6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_shmem_free (C function)c.drm_gem_shmem_freehNtauh1jhjhhhNhNubj)}(hhh](j)}(h)}(h$(struct drm_gem_shmem_object *shmem)h]jD)}(h"struct drm_gem_shmem_object *shmemh](j)}(hj? h]hstruct}(hj\7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX7ubj)}(h h]h }(hji7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX7ubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hjz7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw7ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj|7modnameN classnameNjj)}j]j)}j}jB7sbc.drm_gem_shmem_freeasbuh1hhjX7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX7ubj)}(hshmemh]hshmem}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjT7ubah}(h]h ]h"]h$]h&]jjuh1j=hj7hhhj-7hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhj-7hKubah}(h]j7ah ](jjeh"]h$]h&]j j )j huh1jhj-7hKhj7hhubj )}(hhh]h)}(h1Free resources associated with a shmem GEM objecth]h1Free resources associated with a shmem GEM object}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj7hhubah}(h]h ]h"]h$]h&]uh1j hj7hhhj-7hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j7j( j7j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj7ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj7ubjM )}(hhh]jR )}(h@``struct drm_gem_shmem_object *shmem`` shmem GEM object to free h](jX )}(h&``struct drm_gem_shmem_object *shmem``h]j^ )}(hj 8h]h"struct drm_gem_shmem_object *shmem}(hj"8hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj8ubjt )}(hhh]h)}(hshmem GEM object to freeh]hshmem GEM object to free}(hj98hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj58hKhj68ubah}(h]h ]h"]h$]h&]uh1js hj8ubeh}(h]h ]h"]h$]h&]uh1jQ hj58hKhj8ubah}(h]h ]h"]h$]h&]uh1jL hj7ubh)}(h**Description**h]j7 )}(hj[8h]h Description}(hj]8hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjY8ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj7ubh)}(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.}(hjq8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chKhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_shmem_pin (C function)c.drm_gem_shmem_pinhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMCubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMCubj)}(hdrm_gem_shmem_pinh]j)}(hdrm_gem_shmem_pinh]hdrm_gem_shmem_pin}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj8hMCubj>)}(h$(struct drm_gem_shmem_object *shmem)h]jD)}(h"struct drm_gem_shmem_object *shmemh](j)}(hj? h]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj8modnameN classnameNjj)}j]j)}j}j8sbc.drm_gem_shmem_pinasbuh1hhj8ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]h*}(hj)9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hshmemh]hshmem}(hj69hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj8ubah}(h]h ]h"]h$]h&]jjuh1j=hj8hhhj8hMCubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhj8hMCubah}(h]j8ah ](jjeh"]h$]h&]j j )j huh1jhj8hMChj8hhubj )}(hhh]h)}(h(Pin backing pages for a shmem GEM objecth]h(Pin backing pages for a shmem GEM object}(hj`9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMChj]9hhubah}(h]h ]h"]h$]h&]uh1j hj8hhhj8hMCubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jx9j( jx9j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj9ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMGhj|9ubjM )}(hhh]jR )}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](jX )}(h&``struct drm_gem_shmem_object *shmem``h]j^ )}(hj9h]h"struct drm_gem_shmem_object *shmem}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMDhj9ubjt )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMDhj9ubah}(h]h ]h"]h$]h&]uh1js hj9ubeh}(h]h ]h"]h$]h&]uh1jQ hj9hMDhj9ubah}(h]h ]h"]h$]h&]uh1jL hj|9ubh)}(h**Description**h]j7 )}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj9ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMFhj|9ubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMEhj|9ubh)}(h **Return**h]j7 )}(hj:h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMHhj|9ubh)}(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:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMIhj|9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_shmem_unpin (C function)c.drm_gem_shmem_unpinhNtauh1jhjhhhNhNubj)}(hhh](j)}(h=void drm_gem_shmem_unpin (struct drm_gem_shmem_object *shmem)h]j)}(h)}(h$(struct drm_gem_shmem_object *shmem)h]jD)}(h"struct drm_gem_shmem_object *shmemh](j)}(hj? h]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj:modnameN classnameNjj)}j]j)}j}jk:sbc.drm_gem_shmem_unpinasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hshmemh]hshmem}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}:ubah}(h]h ]h"]h$]h&]jjuh1j=hjD:hhhjV:hMaubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@:hhhjV:hMaubah}(h]j;:ah ](jjeh"]h$]h&]j j )j huh1jhjV:hMahj=:hhubj )}(hhh]h)}(h*Unpin backing pages for a shmem GEM objecth]h*Unpin backing pages for a shmem GEM object}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMahj;hhubah}(h]h ]h"]h$]h&]uh1j hj=:hhhjV:hMaubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j ;j( j ;j) j* j+ uh1jhhhjhNhNubj- )}(h**Parameters** ``struct drm_gem_shmem_object *shmem`` shmem GEM object **Description** This function removes the requirement that the backing pages are pinned in memory.h](h)}(h**Parameters**h]j7 )}(hj*;h]h Parameters}(hj,;hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj(;ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMehj$;ubjM )}(hhh]jR )}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](jX )}(h&``struct drm_gem_shmem_object *shmem``h]j^ )}(hjI;h]h"struct drm_gem_shmem_object *shmem}(hjK;hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjG;ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMbhjC;ubjt )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hjb;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^;hMbhj_;ubah}(h]h ]h"]h$]h&]uh1js hjC;ubeh}(h]h ]h"]h$]h&]uh1jQ hj^;hMbhj@;ubah}(h]h ]h"]h$]h&]uh1jL hj$;ubh)}(h**Description**h]j7 )}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMdhj$;ubh)}(hRThis function removes the requirement that the backing pages are pinned in memory.h]hRThis function removes the requirement that the backing pages are pinned in memory.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMchj$;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gem_shmem_dumb_create (C function)c.drm_gem_shmem_dumb_createhNtauh1jhjhhhNhNubj)}(hhh](j)}(hpint drm_gem_shmem_dumb_create (struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h]j)}(hoint drm_gem_shmem_dumb_create(struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM$ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhj;hM$ubj)}(hdrm_gem_shmem_dumb_createh]j)}(hdrm_gem_shmem_dumb_createh]hdrm_gem_shmem_dumb_create}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhj;hM$ubj>)}(hR(struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h](jD)}(hstruct drm_file *fileh](j)}(hj? h]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hj$<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!<ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj&<modnameN classnameNjj)}j]j)}j}j;sbc.drm_gem_shmem_dumb_createasbuh1hhj<ubj)}(h h]h }(hjD<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjh]h*}(hjR<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hfileh]hfile}(hj_<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubjD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjx<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj<modnameN classnameNjj)}j]j@<c.drm_gem_shmem_dumb_createasbuh1hhjt<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubj)}(hdevh]hdev}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubjD)}(h!struct drm_mode_create_dumb *argsh](j)}(hj? h]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj=modnameN classnameNjj)}j]j@<c.drm_gem_shmem_dumb_createasbuh1hhj<ubj)}(h h]h }(hj$=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjh]h*}(hj2=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hargsh]hargs}(hj?=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubeh}(h]h ]h"]h$]h&]jjuh1j=hj;hhhj;hM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj;hhhj;hM$ubah}(h]j;ah ](jjeh"]h$]h&]j j )j huh1jhj;hM$hj;hhubj )}(hhh]h)}(h!Create a dumb shmem buffer objecth]h!Create a dumb shmem buffer object}(hji=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM$hjf=hhubah}(h]h ]h"]h$]h&]uh1j hj;hhhj;hM$ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j=j( j=j) j* j+ uh1jhhhjhNhNubj- )}(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.kh](h)}(h**Parameters**h]j7 )}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj=ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM(hj=ubjM )}(hhh](jR )}(hK``struct drm_file *file`` DRM file structure to create the dumb buffer for h](jX )}(h``struct drm_file *file``h]j^ )}(hj=h]hstruct drm_file *file}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM%hj=ubjt )}(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=hM%hj=ubah}(h]h ]h"]h$]h&]uh1js hj=ubeh}(h]h ]h"]h$]h&]uh1jQ hj=hM%hj=ubjR )}(h&``struct drm_device *dev`` DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hj=h]hstruct drm_device *dev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM&hj=ubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM&hj=ubah}(h]h ]h"]h$]h&]uh1js hj=ubeh}(h]h ]h"]h$]h&]uh1jQ hj=hM&hj=ubjR )}(h1``struct drm_mode_create_dumb *args`` IOCTL data h](jX )}(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&]uh1j] hj>ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM'hj>ubjt )}(hhh]h)}(h IOCTL datah]h IOCTL data}(hj5>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1>hM'hj2>ubah}(h]h ]h"]h$]h&]uh1js hj>ubeh}(h]h ]h"]h$]h&]uh1jQ hj1>hM'hj=ubeh}(h]h ]h"]h$]h&]uh1jL hj=ubh)}(h**Description**h]j7 )}(hjW>h]h Description}(hjY>hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjU>ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM)hj=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 }(hjm>hhhNhNubh)}(h-:c:type:`drm_driver.dumb_create `h]j^ )}(hjw>h]hdrm_driver.dumb_create}(hjy>hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hju>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM(hjm>ubh callback.}(hjm>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>hM(hj=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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM-hj=ubh)}(h **Return**h]j7 )}(hj>h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj>ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM0hj=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:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM1hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_shmem_mmap (C function)c.drm_gem_shmem_mmaphNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj?hMubj)}(hdrm_gem_shmem_mmaph]j)}(hdrm_gem_shmem_mmaph]hdrm_gem_shmem_mmap}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhj?hMubj>)}(h@(struct drm_gem_shmem_object *shmem, struct vm_area_struct *vma)h](jD)}(h"struct drm_gem_shmem_object *shmemh](j)}(hj? h]hstruct}(hj2?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.?ubj)}(h h]h }(hj??hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.?ubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hjP?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM?ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjR?modnameN classnameNjj)}j]j)}j}j?sbc.drm_gem_shmem_mmapasbuh1hhj.?ubj)}(h h]h }(hjp?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.?ubj)}(hjh]h*}(hj~?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.?ubj)}(hshmemh]hshmem}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*?ubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj?modnameN classnameNjj)}j]jl?c.drm_gem_shmem_mmapasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hvmah]hvma}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*?ubeh}(h]h ]h"]h$]h&]jjuh1j=hj>hhhj?hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhj?hMubah}(h]j>ah ](jjeh"]h$]h&]j j )j huh1jhj?hMhj>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:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj"@hhubah}(h]h ]h"]h$]h&]uh1j hj>hhhj?hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j=@j( j=@j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjG@h]h Parameters}(hjI@hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjE@ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjA@ubjM )}(hhh](jR )}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](jX )}(h&``struct drm_gem_shmem_object *shmem``h]j^ )}(hjf@h]h"struct drm_gem_shmem_object *shmem}(hjh@hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjd@ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj`@ubjt )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{@hMhj|@ubah}(h]h ]h"]h$]h&]uh1js hj`@ubeh}(h]h ]h"]h$]h&]uh1jQ hj{@hMhj]@ubjR )}(h=``struct vm_area_struct *vma`` VMA for the area to be mapped h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hj@h]hstruct vm_area_struct *vma}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj@ubjt )}(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&]uh1js hj@ubeh}(h]h ]h"]h$]h&]uh1jQ hj@hMhj]@ubeh}(h]h ]h"]h$]h&]uh1jL hjA@ubh)}(h**Description**h]j7 )}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj@ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjA@ubh)}(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.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjA@ubh)}(h **Return**h]j7 )}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj@ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjA@ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjA@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gem_shmem_print_info (C function)c.drm_gem_shmem_print_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjFAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBAhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubj)}(h h]h }(hjUAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBAhhhjTAhMubj)}(hdrm_gem_shmem_print_infoh]j)}(hdrm_gem_shmem_print_infoh]hdrm_gem_shmem_print_info}(hjgAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcAubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBAhhhjTAhMubj>)}(hV(const struct drm_gem_shmem_object *shmem, struct drm_printer *p, unsigned int indent)h](jD)}(h(const struct drm_gem_shmem_object *shmemh](j)}(hjJh]hconst}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hj? h]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjAmodnameN classnameNjj)}j]j)}j}jiAsbc.drm_gem_shmem_print_infoasbuh1hhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hshmemh]hshmem}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj{AubjD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Bubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Bubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hj.BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+Bubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj0BmodnameN classnameNjj)}j]jAc.drm_gem_shmem_print_infoasbuh1hhj Bubj)}(h h]h }(hjLBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Bubj)}(hjh]h*}(hjZBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Bubj)}(hjh]hp}(hjgBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Bubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj{AubjD)}(hunsigned int indenth](j)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Bubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Bubj)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Bubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Bubj)}(hindenth]hindent}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Bubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj{Aubeh}(h]h ]h"]h$]h&]jjuh1j=hjBAhhhjTAhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>AhhhjTAhMubah}(h]j9Aah ](jjeh"]h$]h&]j j )j huh1jhjTAhMhj;Ahhubj )}(hhh]h)}(h5Print :c:type:`drm_gem_shmem_object` info for debugfsh](hPrint }(hjBhhhNhNubh)}(h:c:type:`drm_gem_shmem_object`h]j^ )}(hjBh]hdrm_gem_shmem_object}(hjBhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjBubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jAc.drm_gem_shmem_print_infoasbj drm_gem_shmem_objectuh1hhjv0hKchjBubh info for debugfs}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjBhhubah}(h]h ]h"]h$]h&]uh1j hj;AhhhjTAhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j!Cj( j!Cj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj+Ch]h Parameters}(hj-ChhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)Cubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM hj%CubjM )}(hhh](jR )}(h>``const struct drm_gem_shmem_object *shmem`` shmem GEM object h](jX )}(h,``const struct drm_gem_shmem_object *shmem``h]j^ )}(hjJCh]h(const struct drm_gem_shmem_object *shmem}(hjLChhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHCubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM hjDCubjt )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hjcChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ChM hj`Cubah}(h]h ]h"]h$]h&]uh1js hjDCubeh}(h]h ]h"]h$]h&]uh1jQ hj_ChM hjACubjR )}(h&``struct drm_printer *p`` DRM printer h](jX )}(h``struct drm_printer *p``h]j^ )}(hjCh]hstruct drm_printer *p}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjCubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM hj}Cubjt )}(hhh]h)}(h DRM printerh]h DRM printer}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM hjCubah}(h]h ]h"]h$]h&]uh1js hj}Cubeh}(h]h ]h"]h$]h&]uh1jQ hjChM hjACubjR )}(h-``unsigned int indent`` Tab indentation levelh](jX )}(h``unsigned int indent``h]j^ )}(hjCh]hunsigned int indent}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjCubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM hjCubjt )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM hjCubah}(h]h ]h"]h$]h&]uh1js hjCubeh}(h]h ]h"]h$]h&]uh1jQ hjChM hjACubeh}(h]h ]h"]h$]h&]uh1jL hj%Cubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gem_shmem_get_sg_table (C function)c.drm_gem_shmem_get_sg_tablehNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubj)}(h h]h }(hj$DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhj#DhMubh)}(hhh]j)}(hsg_tableh]hsg_table}(hj5DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Dubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj7DmodnameN classnameNjj)}j]j)}j}drm_gem_shmem_get_sg_tablesbc.drm_gem_shmem_get_sg_tableasbuh1hhjDhhhj#DhMubj)}(h h]h }(hjVDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhj#DhMubj)}(hjh]h*}(hjdDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhj#DhMubj)}(hdrm_gem_shmem_get_sg_tableh]j)}(hjSDh]hdrm_gem_shmem_get_sg_table}(hjuDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhj#DhMubj>)}(h$(struct drm_gem_shmem_object *shmem)h]jD)}(h"struct drm_gem_shmem_object *shmemh](j)}(hj? h]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjDmodnameN classnameNjj)}j]jQDc.drm_gem_shmem_get_sg_tableasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hshmemh]hshmem}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjDubah}(h]h ]h"]h$]h&]jjuh1j=hjDhhhj#DhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhj#DhMubah}(h]j Dah ](jjeh"]h$]h&]j j )j huh1jhj#DhMhj Dhhubj )}(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}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjEhhubah}(h]h ]h"]h$]h&]uh1j hj Dhhhj#DhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j)Ej( j)Ej) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj3Eh]h Parameters}(hj5EhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj1Eubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj-EubjM )}(hhh]jR )}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](jX )}(h&``struct drm_gem_shmem_object *shmem``h]j^ )}(hjREh]h"struct drm_gem_shmem_object *shmem}(hjTEhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjPEubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjLEubjt )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hjkEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgEhMhjhEubah}(h]h ]h"]h$]h&]uh1js hjLEubeh}(h]h ]h"]h$]h&]uh1jQ hjgEhMhjIEubah}(h]h ]h"]h$]h&]uh1jL hj-Eubh)}(h**Description**h]j7 )}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjEubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj-Eubh)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj-Eubh)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM!hj-Eubh)}(h **Return**h]j7 )}(hjEh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjEubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM$hj-Eubh)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM%hj-Eubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_gem_shmem_get_pages_sgt (C function)c.drm_gem_shmem_get_pages_sgthNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMXubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjFhMXubh)}(hhh]j)}(hsg_tableh]hsg_table}(hj'FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Fubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj)FmodnameN classnameNjj)}j]j)}j}drm_gem_shmem_get_pages_sgtsbc.drm_gem_shmem_get_pages_sgtasbuh1hhjFhhhjFhMXubj)}(h h]h }(hjHFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjFhMXubj)}(hjh]h*}(hjVFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjFhMXubj)}(hdrm_gem_shmem_get_pages_sgth]j)}(hjEFh]hdrm_gem_shmem_get_pages_sgt}(hjgFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjFhMXubj>)}(h$(struct drm_gem_shmem_object *shmem)h]jD)}(h"struct drm_gem_shmem_object *shmemh](j)}(hj? h]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Fubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Fubh)}(hhh]j)}(hdrm_gem_shmem_objecth]hdrm_gem_shmem_object}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjFmodnameN classnameNjj)}j]jCFc.drm_gem_shmem_get_pages_sgtasbuh1hhj~Fubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Fubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Fubj)}(hshmemh]hshmem}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Fubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzFubah}(h]h ]h"]h$]h&]jjuh1j=hjFhhhjFhMXubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjFhhhjFhMXubah}(h]jEah ](jjeh"]h$]h&]j j )j huh1jhjFhMXhjEhhubj )}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMXhjGhhubah}(h]h ]h"]h$]h&]uh1j hjEhhhjFhMXubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jGj( jGj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj%Gh]h Parameters}(hj'GhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj#Gubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM\hjGubjM )}(hhh]jR )}(h8``struct drm_gem_shmem_object *shmem`` shmem GEM object h](jX )}(h&``struct drm_gem_shmem_object *shmem``h]j^ )}(hjDGh]h"struct drm_gem_shmem_object *shmem}(hjFGhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjBGubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMZhj>Gubjt )}(hhh]h)}(hshmem GEM objecth]hshmem GEM object}(hj]GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYGhMZhjZGubah}(h]h ]h"]h$]h&]uh1js hj>Gubeh}(h]h ]h"]h$]h&]uh1jQ hjYGhMZhj;Gubah}(h]h ]h"]h$]h&]uh1jL hjGubh)}(h**Description**h]j7 )}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj}Gubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM\hjGubh)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM[hjGubh)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM_hjGubh)}(h **Return**h]j7 )}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjGubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMchjGubh)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMdhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_gem_shmem_prime_import_sg_table (C function)%c.drm_gem_shmem_prime_import_sg_tablehNtauh1jhjhhhNhNubj)}(hhh](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]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](j)}(hj? h]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMwubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjHhMwubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjHmodnameN classnameNjj)}j]j)}j}#drm_gem_shmem_prime_import_sg_tablesb%c.drm_gem_shmem_prime_import_sg_tableasbuh1hhjGhhhjHhMwubj)}(h h]h }(hj:HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjHhMwubj)}(hjh]h*}(hjHHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjHhMwubj)}(h#drm_gem_shmem_prime_import_sg_tableh]j)}(hj7Hh]h#drm_gem_shmem_prime_import_sg_table}(hjYHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUHubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjHhMwubj>)}(hQ(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjtHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpHubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjHmodnameN classnameNjj)}j]j5H%c.drm_gem_shmem_prime_import_sg_tableasbuh1hhjpHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpHubj)}(hdevh]hdev}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpHubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjlHubjD)}(h!struct dma_buf_attachment *attachh](j)}(hj? h]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjImodnameN classnameNjj)}j]j5H%c.drm_gem_shmem_prime_import_sg_tableasbuh1hhjHubj)}(h h]h }(hj IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]h*}(hj.IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hattachh]hattach}(hj;IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjlHubjD)}(hstruct sg_table *sgth](j)}(hj? h]hstruct}(hjTIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPIubj)}(h h]h }(hjaIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPIubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjrIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoIubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjtImodnameN classnameNjj)}j]j5H%c.drm_gem_shmem_prime_import_sg_tableasbuh1hhjPIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPIubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPIubj)}(hsgth]hsgt}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPIubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjlHubeh}(h]h ]h"]h$]h&]jjuh1j=hjGhhhjHhMwubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhjHhMwubah}(h]jGah ](jjeh"]h$]h&]j j )j huh1jhjHhMwhjGhhubj )}(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}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMwhjIhhubah}(h]h ]h"]h$]h&]uh1j hjGhhhjHhMwubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jIj( jIj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjIubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM{hjIubjM )}(hhh](jR )}(h1``struct drm_device *dev`` Device to import into h](jX )}(h``struct drm_device *dev``h]j^ )}(hjJh]hstruct drm_device *dev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMyhjJubjt )}(hhh]h)}(hDevice to import intoh]hDevice to import into}(hj/JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+JhMyhj,Jubah}(h]h ]h"]h$]h&]uh1js hjJubeh}(h]h ]h"]h$]h&]uh1jQ hj+JhMyhj JubjR )}(h9``struct dma_buf_attachment *attach`` DMA-BUF attachment h](jX )}(h%``struct dma_buf_attachment *attach``h]j^ )}(hjOJh]h!struct dma_buf_attachment *attach}(hjQJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjMJubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMzhjIJubjt )}(hhh]h)}(hDMA-BUF attachmenth]hDMA-BUF attachment}(hjhJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdJhMzhjeJubah}(h]h ]h"]h$]h&]uh1js hjIJubeh}(h]h ]h"]h$]h&]uh1jQ hjdJhMzhj JubjR )}(h>``struct sg_table *sgt`` Scatter/gather table of pinned pages h](jX )}(h``struct sg_table *sgt``h]j^ )}(hjJh]hstruct sg_table *sgt}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM{hjJubjt )}(hhh]h)}(h$Scatter/gather table of pinned pagesh]h$Scatter/gather table of pinned pages}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM{hjJubah}(h]h ]h"]h$]h&]uh1js hjJubeh}(h]h ]h"]h$]h&]uh1jQ hjJhM{hj Jubeh}(h]h ]h"]h$]h&]uh1jL hjIubh)}(h**Description**h]j7 )}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjJubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM}hjIubh)}(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 }(hjJhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j^ )}(hjJh]h$drm_driver.gem_prime_import_sg_table}(hjJhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chM|hjJubh callback.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhM|hjIubh)}(h **Return**h]j7 )}(hj Kh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj Kubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjIubh)}(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#KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_shmem_prime_import_no_map (C function)#c.drm_gem_shmem_prime_import_no_maphNtauh1jhjhhhNhNubj)}(hhh](j)}(hkstruct drm_gem_object * drm_gem_shmem_prime_import_no_map (struct drm_device *dev, struct dma_buf *dma_buf)h]j)}(histruct drm_gem_object *drm_gem_shmem_prime_import_no_map(struct drm_device *dev, struct dma_buf *dma_buf)h](j)}(hj? h]hstruct}(hjRKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMubj)}(h h]h }(hj`KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKhhhj_KhMubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjqKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnKubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjsKmodnameN classnameNjj)}j]j)}j}!drm_gem_shmem_prime_import_no_mapsb#c.drm_gem_shmem_prime_import_no_mapasbuh1hhjNKhhhj_KhMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKhhhj_KhMubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKhhhj_KhMubj)}(h!drm_gem_shmem_prime_import_no_maph]j)}(hjKh]h!drm_gem_shmem_prime_import_no_map}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNKhhhj_KhMubj>)}(h1(struct drm_device *dev, struct dma_buf *dma_buf)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjKmodnameN classnameNjj)}j]jK#c.drm_gem_shmem_prime_import_no_mapasbuh1hhjKubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hdevh]hdev}(hj#LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjKubjD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hj` implementation.h](h)}(h**Parameters**h]j7 )}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjLubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjLubjM )}(hhh](jR )}(h1``struct drm_device *dev`` Device to import into h](jX )}(h``struct drm_device *dev``h]j^ )}(hjLh]hstruct drm_device *dev}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjLubjt )}(hhh]h)}(hDevice to import intoh]hDevice to import into}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1js hjLubeh}(h]h ]h"]h$]h&]uh1jQ hjMhMhjLubjR )}(h5``struct dma_buf *dma_buf`` dma-buf object to import h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hj7Mh]hstruct dma_buf *dma_buf}(hj9MhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj5Mubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhj1Mubjt )}(hhh]h)}(hdma-buf object to importh]hdma-buf object to import}(hjPMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLMhMhjMMubah}(h]h ]h"]h$]h&]uh1js hj1Mubeh}(h]h ]h"]h$]h&]uh1jQ hjLMhMhjLubeh}(h]h ]h"]h$]h&]uh1jL hjLubh)}(h**Description**h]j7 )}(hjrMh]h Description}(hjtMhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjpMubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjLubh)}(hDrivers that use the shmem helpers but also wants to import dmabuf without mapping its sg_table can use this as their :c:type:`drm_driver.gem_prime_import ` implementation.h](hvDrivers that use the shmem helpers but also wants to import dmabuf without mapping its sg_table can use this as their }(hjMhhhNhNubh)}(h2:c:type:`drm_driver.gem_prime_import `h]j^ )}(hjMh]hdrm_driver.gem_prime_import}(hjMhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:398: ./drivers/gpu/drm/drm_gem_shmem_helper.chMhjMubh implementation.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubeh}(h]joah ]h"]#gem shmem helper function referenceah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h#GEM VRAM Helper Functions Referenceh]h#GEM VRAM Helper Functions Reference}(hjMhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjMhhhhhMubh)}(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 }(hjMhhhNhNubh)}(h::c:type:`struct drm_gem_vram_object `h]j^ )}(hjMh]hstruct drm_gem_vram_object}(hjMhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_vram_objectuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjMubh (GEM VRAM), a GEM buffer object that is backed by video RAM (VRAM). It can be used for framebuffer devices with dedicated memory.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhKhjMhhubh)}(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 }(hj NhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hjNh]hstruct drm_vram_mm}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_vram_mmuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chK hj Nubh 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.}(hj NhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2NhK hjMhhubh)}(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=NhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chK%hjMhhubh)}(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:`DEFINE_DRM_GEM_FOPS` to define :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 }(hjLNhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hjVNh]hstruct drm_vram_mm}(hjXNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjTNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_vram_mmuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chK/hjLNubh in }(hjLNhhhNhNubh)}(h(:c:type:`struct drm_device `h]j^ )}(hjzNh]hstruct drm_device}(hj|NhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjxNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhjsNhK/hjLNubh.vram_mm . Use }(hjLNhhhNhNubh)}(h:c:type:`DRM_GEM_VRAM_DRIVER`h]j^ )}(hjNh]hDRM_GEM_VRAM_DRIVER}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_GEM_VRAM_DRIVERuh1hhjsNhK/hjLNubh to initialize }(hjLNhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hjNh]hstruct drm_driver}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhjsNhK/hjLNubh and }(hjLNhhhNhNubh)}(h:c:type:`DEFINE_DRM_GEM_FOPS`h]j^ )}(hjNh]hDEFINE_DRM_GEM_FOPS}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DEFINE_DRM_GEM_FOPSuh1hhjsNhK/hjLNubh to define }(hjLNhhhNhNubh)}(h2:c:type:`struct file_operations `h]j^ )}(hjOh]hstruct file_operations}(hjOhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjOubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j file_operationsuh1hhjsNhK/hjLNubh; as illustrated below.}(hjLNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjsNhK/hjMhhubj )}(hXDEFINE_DRM_GEM_FOPS(fops); 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]hXDEFINE_DRM_GEM_FOPS(fops); 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; }}hj-Osbah}(h]h ]h"]h$]h&]jjjjj! j}uh1j ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chK5hjMhhubh)}(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=OhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hjGOh]hstruct drm_vram_mm}(hjIOhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjEOubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_vram_mmuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chKNhj=Oubh, 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=OhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdOhKNhjMhhubh)}(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.}(hjoOhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chKThjMhhubh)}(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~OhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chKXhjMhhubh)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:404: ./drivers/gpu/drm/drm_gem_vram_helper.chK^hjMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_vram_object (C struct)c.drm_gem_vram_objecthNtauh1jhjMhhhNhNubj)}(hhh](j)}(hdrm_gem_vram_objecth]j)}(hstruct drm_gem_vram_objecth](j)}(hj? h]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjOhKubj)}(hdrm_gem_vram_objecth]j)}(hjOh]hdrm_gem_vram_object}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjOhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOhhhjOhKubah}(h]jOah ](jjeh"]h$]h&]j j )j huh1jhjOhKhjOhhubj )}(hhh]h)}(hGEM object backed by VRAMh]hGEM object backed by VRAM}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK hjOhhubah}(h]h ]h"]h$]h&]uh1j hjOhhhjOhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jPj( jPj) j* j+ uh1jhhhjMhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjPubh:}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK$hjPubj )}(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]; };}hj4Psbah}(h]h ]h"]h$]h&]jjuh1j h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK&hjPubh)}(h **Members**h]j7 )}(hjEPh]hMembers}(hjGPhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjCPubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK.hjPubjM )}(hhh](jR )}(h``bo`` TTM buffer object h](jX )}(h``bo``h]j^ )}(hjdPh]hbo}(hjfPhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbPubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK"hj^Pubjt )}(hhh]h)}(hTTM buffer objecth]hTTM buffer object}(hj}PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyPhK"hjzPubah}(h]h ]h"]h$]h&]uh1js hj^Pubeh}(h]h ]h"]h$]h&]uh1jQ hjyPhK"hj[PubjR )}(h'``map`` Mapping information for **bo** h](jX )}(h``map``h]j^ )}(hjPh]hmap}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjPubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK#hjPubjt )}(hhh]h)}(hMapping information for **bo**h](hMapping information for }(hjPhhhNhNubj7 )}(h**bo**h]hbo}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjPubeh}(h]h ]h"]h$]h&]uh1hhjPhK#hjPubah}(h]h ]h"]h$]h&]uh1js hjPubeh}(h]h ]h"]h$]h&]uh1jQ hjPhK#hj[PubjR )}(hr``vmap_use_count`` Reference count on the virtual address. The address are un-mapped when the count reaches zero. h](jX )}(h``vmap_use_count``h]j^ )}(hjPh]hvmap_use_count}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjPubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK:hjPubjt )}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK9hjPubah}(h]h ]h"]h$]h&]uh1js hjPubeh}(h]h ]h"]h$]h&]uh1jQ hjPhK:hj[PubjR )}(hh``placement`` TTM placement information. Supported placements are ``TTM_PL_VRAM`` and ``TTM_PL_SYSTEM`` h](jX )}(h ``placement``h]j^ )}(hjQh]h placement}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK%hjQubjt )}(hhh]h)}(hYTTM placement information. Supported placements are ``TTM_PL_VRAM`` and ``TTM_PL_SYSTEM``h](h4TTM placement information. Supported placements are }(hj7QhhhNhNubj^ )}(h``TTM_PL_VRAM``h]h TTM_PL_VRAM}(hj?QhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj7Qubh and }(hj7QhhhNhNubj^ )}(h``TTM_PL_SYSTEM``h]h TTM_PL_SYSTEM}(hjQQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj7Qubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK$hj4Qubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hj3QhK%hj[PubjR )}(h)``placements`` TTM placement information.h](jX )}(h``placements``h]j^ )}(hjxQh]h placements}(hjzQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjvQubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK%hjrQubjt )}(hhh]h)}(hTTM placement information.h]hTTM placement information.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK&hjQubah}(h]h ]h"]h$]h&]uh1js hjrQubeh}(h]h ]h"]h$]h&]uh1jQ hjQhK%hj[Pubeh}(h]h ]h"]h$]h&]uh1jL hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubh)}(h**Description**h]j7 )}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjQubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK)hjMhhubh)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK&hjMhhubh)}(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().}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK+hjMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_vram_of_bo (C function)c.drm_gem_vram_of_bohNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKEubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhKEubh)}(hhh]j)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hj'RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Rubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj)RmodnameN classnameNjj)}j]j)}j}drm_gem_vram_of_bosbc.drm_gem_vram_of_boasbuh1hhjRhhhjRhKEubj)}(h h]h }(hjHRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhKEubj)}(hjh]h*}(hjVRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhKEubj)}(hdrm_gem_vram_of_boh]j)}(hjERh]hdrm_gem_vram_of_bo}(hjgRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcRubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRhhhjRhKEubj>)}(h(struct ttm_buffer_object *bo)h]jD)}(hstruct ttm_buffer_object *boh](j)}(hj? h]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Rubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Rubh)}(hhh]j)}(httm_buffer_objecth]httm_buffer_object}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjRmodnameN classnameNjj)}j]jCRc.drm_gem_vram_of_boasbuh1hhj~Rubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Rubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Rubj)}(hboh]hbo}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Rubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzRubah}(h]h ]h"]h$]h&]jjuh1j=hjRhhhjRhKEubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRhhhjRhKEubah}(h]jQah ](jjeh"]h$]h&]j j )j huh1jhjRhKEhjQhhubj )}(hhh]h)}(hfReturns the container of type :c:type:`struct drm_gem_vram_object ` for field bo.h](hReturns the container of type }(hjShhhNhNubh)}(h::c:type:`struct drm_gem_vram_object `h]j^ )}(hj Sh]hstruct drm_gem_vram_object}(hjShhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj Subah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jCRc.drm_gem_vram_of_boasbj drm_gem_vram_objectuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjSubh for field bo.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKEhjShhubah}(h]h ]h"]h$]h&]uh1j hjQhhhjRhKEubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jDSj( jDSj) j* j+ uh1jhhhjMhNhNubj- )}(hu**Parameters** ``struct ttm_buffer_object *bo`` the VRAM buffer object **Return** The containing GEM VRAM objecth](h)}(h**Parameters**h]j7 )}(hjNSh]h Parameters}(hjPShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjLSubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKIhjHSubjM )}(hhh]jR )}(h8``struct ttm_buffer_object *bo`` the VRAM buffer object h](jX )}(h ``struct ttm_buffer_object *bo``h]j^ )}(hjmSh]hstruct ttm_buffer_object *bo}(hjoShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjkSubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKGhjgSubjt )}(hhh]h)}(hthe VRAM buffer objecth]hthe VRAM buffer object}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKGhjSubah}(h]h ]h"]h$]h&]uh1js hjgSubeh}(h]h ]h"]h$]h&]uh1jQ hjShKGhjdSubah}(h]h ]h"]h$]h&]uh1jL hjHSubh)}(h **Return**h]j7 )}(hjSh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjSubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKIhjHSubh)}(hThe containing GEM VRAM objecth]hThe containing GEM VRAM object}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKHhjHSubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_vram_of_gem (C function)c.drm_gem_vram_of_gemhNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKQubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShKQubh)}(hhh]j)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hj ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Tubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjTmodnameN classnameNjj)}j]j)}j}drm_gem_vram_of_gemsbc.drm_gem_vram_of_gemasbuh1hhjShhhjShKQubj)}(h h]h }(hj-ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShKQubj)}(hjh]h*}(hj;ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShKQubj)}(hdrm_gem_vram_of_gemh]j)}(hj*Th]hdrm_gem_vram_of_gem}(hjLThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShKQubj>)}(h(struct drm_gem_object *gem)h]jD)}(hstruct drm_gem_object *gemh](j)}(hj? h]hstruct}(hjgThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcTubj)}(h h]h }(hjtThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcTubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjTmodnameN classnameNjj)}j]j(Tc.drm_gem_vram_of_gemasbuh1hhjcTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcTubj)}(hgemh]hgem}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj_Tubah}(h]h ]h"]h$]h&]jjuh1j=hjShhhjShKQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjShKQubah}(h]jSah ](jjeh"]h$]h&]j j )j huh1jhjShKQhjShhubj )}(hhh]h)}(hgReturns the container of type :c:type:`struct drm_gem_vram_object ` for field gem.h](hReturns the container of type }(hjThhhNhNubh)}(h::c:type:`struct drm_gem_vram_object `h]j^ )}(hjTh]hstruct drm_gem_vram_object}(hjThhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjTubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j(Tc.drm_gem_vram_of_gemasbj drm_gem_vram_objectuh1hhj/ShKhjTubh for field gem.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKQhjThhubah}(h]h ]h"]h$]h&]uh1j hjShhhjShKQubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j(Uj( j(Uj) j* j+ uh1jhhhjMhNhNubj- )}(hk**Parameters** ``struct drm_gem_object *gem`` the GEM object **Return** The containing GEM VRAM objecth](h)}(h**Parameters**h]j7 )}(hj2Uh]h Parameters}(hj4UhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj0Uubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKUhj,UubjM )}(hhh]jR )}(h.``struct drm_gem_object *gem`` the GEM object h](jX )}(h``struct drm_gem_object *gem``h]j^ )}(hjQUh]hstruct drm_gem_object *gem}(hjSUhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjOUubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKShjKUubjt )}(hhh]h)}(hthe GEM objecth]hthe GEM object}(hjjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfUhKShjgUubah}(h]h ]h"]h$]h&]uh1js hjKUubeh}(h]h ]h"]h$]h&]uh1jQ hjfUhKShjHUubah}(h]h ]h"]h$]h&]uh1jL hj,Uubh)}(h **Return**h]j7 )}(hjUh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjUubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKUhj,Uubh)}(hThe containing GEM VRAM objecth]hThe containing GEM VRAM object}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKThj,Uubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)DRM_GEM_VRAM_PLANE_HELPER_FUNCS (C macro)!c.DRM_GEM_VRAM_PLANE_HELPER_FUNCShNtauh1jhjMhhhNhNubj)}(hhh](j)}(hDRM_GEM_VRAM_PLANE_HELPER_FUNCSh]j)}(hDRM_GEM_VRAM_PLANE_HELPER_FUNCSh]j)}(hDRM_GEM_VRAM_PLANE_HELPER_FUNCSh]j)}(hjUh]hDRM_GEM_VRAM_PLANE_HELPER_FUNCS}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhK~ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjUhK~ubah}(h]jUah ](jjeh"]h$]h&]j j )j huh1jhjUhK~hjUhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjUhhhjUhK~ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jVj( jVj) j* j+ uh1jhhhjMhNhNubh)}(h#``DRM_GEM_VRAM_PLANE_HELPER_FUNCS``h]j^ )}(hjVh]hDRM_GEM_VRAM_PLANE_HELPER_FUNCS}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjMhhubj )}(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 )}(hVhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:Vubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjVubh)}(hDrivers 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]hDrivers 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.}(hjRVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjVubeh}(h]h ]h"]h$]h&]uh1jhj3VhK~hjMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_GEM_VRAM_DRIVER (C macro)c.DRM_GEM_VRAM_DRIVERhNtauh1jhjMhhhNhNubj)}(hhh](j)}(hDRM_GEM_VRAM_DRIVERh]j)}(hDRM_GEM_VRAM_DRIVERh]j)}(hDRM_GEM_VRAM_DRIVERh]j)}(hjzVh]hDRM_GEM_VRAM_DRIVER}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|Vhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjxVhhhjVhKubah}(h]jsVah ](jjeh"]h$]h&]j j )j huh1jhjVhKhjuVhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjuVhhhjVhKubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jVj( jVj) j* j+ uh1jhhhjMhNhNubh)}(h``DRM_GEM_VRAM_DRIVER``h]j^ )}(hjVh]hDRM_GEM_VRAM_DRIVER}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjMhhubj )}(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 }(hjVhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hjVh]hstruct drm_driver}(hjVhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjVubeh}(h]h ]h"]h$]h&]uh1hhjVhKhjVubah}(h]h ]h"]h$]h&]uh1jhjVhKhjVubh)}(h**Description**h]j7 )}(hj Wh]h Description}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjWubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjVubh)}(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 }(hj WhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hj*Wh]hstruct drm_driver}(hj,WhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj(Wubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhj Wubh with default functions.}(hj WhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGWhKhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhKhjMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_vram_mm (C struct) c.drm_vram_mmhNtauh1jhjMhhhNhNubj)}(hhh](j)}(h drm_vram_mmh]j)}(hstruct drm_vram_mmh](j)}(hj? h]hstruct}(hjqWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmWhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmWhhhj~WhKubj)}(h drm_vram_mmh]j)}(hjkWh]h drm_vram_mm}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmWhhhj~WhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjiWhhhj~WhKubah}(h]jdWah ](jjeh"]h$]h&]j j )j huh1jhj~WhKhjfWhhubj )}(hhh]h)}(hAn instance of VRAM MMh]hAn instance of VRAM MM}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjWhhubah}(h]h ]h"]h$]h&]uh1j hjfWhhhj~WhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jWj( jWj) j* j+ uh1jhhhjMhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjWubh:}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjWubj )}(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; };}hjWsbah}(h]h ]h"]h$]h&]jjuh1j h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjWubh)}(h **Members**h]j7 )}(hjXh]hMembers}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjWubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjWubjM )}(hhh](jR )}(h7``vram_base`` Base address of the managed video memory h](jX )}(h ``vram_base``h]j^ )}(hj Xh]h vram_base}(hj"XhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjXubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjXubjt )}(hhh]h)}(h(Base address of the managed video memoryh]h(Base address of the managed video memory}(hj9XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5XhKhj6Xubah}(h]h ]h"]h$]h&]uh1js hjXubeh}(h]h ]h"]h$]h&]uh1jQ hj5XhKhjXubjR )}(h8``vram_size`` Size of the managed video memory in bytes h](jX )}(h ``vram_size``h]j^ )}(hjYXh]h vram_size}(hj[XhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjWXubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjSXubjt )}(hhh]h)}(h)Size of the managed video memory in bytesh]h)Size of the managed video memory in bytes}(hjrXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnXhKhjoXubah}(h]h ]h"]h$]h&]uh1js hjSXubeh}(h]h ]h"]h$]h&]uh1jQ hjnXhKhjXubjR )}(h``bdev`` The TTM BO device.h](jX )}(h``bdev``h]j^ )}(hjXh]hbdev}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjXubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjXubjt )}(hhh]h)}(hThe TTM BO device.h]hThe TTM BO device.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjXubah}(h]h ]h"]h$]h&]uh1js hjXubeh}(h]h ]h"]h$]h&]uh1jQ hjXhKhjXubeh}(h]h ]h"]h$]h&]uh1jL hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubh)}(h**Description**h]j7 )}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjXubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjMhhubh)}(hXThe fields :c:type:`struct drm_vram_mm `.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 }(hjXhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hjXh]hstruct drm_vram_mm}(hjXhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjXubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_vram_mmuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjXubh.vram_base and }(hjXhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hjYh]hstruct drm_vram_mm}(hjYhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_vram_mmuh1hhjYhKhjXubhZ.vrm_size are managed by VRAM MM, but are available for public read access. Use the field }(hjXhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hjYhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj:Yubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_vram_mmuh1hhjYhKhjXubh".bdev to access the TTM BO device.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYhKhjMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_vram_mm_of_bdev (C function)c.drm_vram_mm_of_bdevhNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj|YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxYhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxYhhhjYhKubh)}(hhh]j)}(h drm_vram_mmh]h drm_vram_mm}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjYmodnameN classnameNjj)}j]j)}j}drm_vram_mm_of_bdevsbc.drm_vram_mm_of_bdevasbuh1hhjxYhhhjYhKubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxYhhhjYhKubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxYhhhjYhKubj)}(hdrm_vram_mm_of_bdevh]j)}(hjYh]hdrm_vram_mm_of_bdev}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxYhhhjYhKubj>)}(h(struct ttm_device *bdev)h]jD)}(hstruct ttm_device *bdevh](j)}(hj? h]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(h ttm_deviceh]h ttm_device}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjZmodnameN classnameNjj)}j]jYc.drm_vram_mm_of_bdevasbuh1hhjYubj)}(h h]h }(hj2ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]h*}(hj@ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hbdevh]hbdev}(hjMZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjYubah}(h]h ]h"]h$]h&]jjuh1j=hjxYhhhjYhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjtYhhhjYhKubah}(h]joYah ](jjeh"]h$]h&]j j )j huh1jhjYhKhjqYhhubj )}(hhh]h)}(hVReturns the container of type :c:type:`struct ttm_device ` for field bdev.h](hReturns the container of type }(hjwZhhhNhNubh)}(h(:c:type:`struct ttm_device `h]j^ )}(hjZh]hstruct ttm_device}(hjZhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jYc.drm_vram_mm_of_bdevasbj ttm_deviceuh1hhj/ShKhjwZubh for field bdev.}(hjwZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjtZhhubah}(h]h ]h"]h$]h&]uh1j hjqYhhhjYhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jZj( jZj) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjZubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjZubjM )}(hhh]jR )}(h.``struct ttm_device *bdev`` the TTM BO device h](jX )}(h``struct ttm_device *bdev``h]j^ )}(hjZh]hstruct ttm_device *bdev}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjZubjt )}(hhh]h)}(hthe TTM BO deviceh]hthe TTM BO device}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhKhjZubah}(h]h ]h"]h$]h&]uh1js hjZubeh}(h]h ]h"]h$]h&]uh1jQ hjZhKhjZubah}(h]h ]h"]h$]h&]uh1jL hjZubh)}(h **Return**h]j7 )}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj[ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhjZubh)}(hEThe containing instance of :c:type:`struct drm_vram_mm `h](hThe containing instance of }(hj1[hhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hj;[h]hstruct drm_vram_mm}(hj=[hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj9[ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_vram_mmuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:407: ./include/drm/drm_gem_vram_helper.hhKhj1[ubeh}(h]h ]h"]h$]h&]uh1hhjX[hKhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_vram_create (C function)c.drm_gem_vram_createhNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{[hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{[hhhj[hKubh)}(hhh]j)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj[modnameN classnameNjj)}j]j)}j}drm_gem_vram_createsbc.drm_gem_vram_createasbuh1hhj{[hhhj[hKubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{[hhhj[hKubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{[hhhj[hKubj)}(hdrm_gem_vram_createh]j)}(hj[h]hdrm_gem_vram_create}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{[hhhj[hKubj>)}(h=(struct drm_device *dev, size_t size, unsigned long pg_align)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj\modnameN classnameNjj)}j]j[c.drm_gem_vram_createasbuh1hhj[ubj)}(h h]h }(hj5\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hjh]h*}(hjC\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hdevh]hdev}(hjP\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj[ubjD)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjl\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji\ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjn\modnameN classnameNjj)}j]j[c.drm_gem_vram_createasbuh1hhje\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje\ubj)}(hsizeh]hsize}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj[ubjD)}(hunsigned long pg_alignh](j)}(hunsignedh]hunsigned}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hlongh]hlong}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hpg_alignh]hpg_align}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj[ubeh}(h]h ]h"]h$]h&]jjuh1j=hj{[hhhj[hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjw[hhhj[hKubah}(h]jr[ah ](jjeh"]h$]h&]j j )j huh1jhj[hKhjt[hhubj )}(hhh]h)}(h Creates a VRAM-backed GEM objecth]h Creates a VRAM-backed GEM object}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj]hhubah}(h]h ]h"]h$]h&]uh1j hjt[hhhj[hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j+]j( j+]j) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hj5]h]h Parameters}(hj7]hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3]ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj/]ubjM )}(hhh](jR )}(h*``struct drm_device *dev`` the DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hjT]h]hstruct drm_device *dev}(hjV]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjR]ubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjN]ubjt )}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hjm]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji]hKhjj]ubah}(h]h ]h"]h$]h&]uh1js hjN]ubeh}(h]h ]h"]h$]h&]uh1jQ hji]hKhjK]ubjR )}(h)``size_t size`` the buffer size in bytes h](jX )}(h``size_t size``h]j^ )}(hj]h]h size_t size}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj]ubjt )}(hhh]h)}(hthe buffer size in bytesh]hthe buffer size in bytes}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hj]hKhjK]ubjR )}(hP``unsigned long pg_align`` the buffer's alignment in multiples of the page size h](jX )}(h``unsigned long pg_align``h]j^ )}(hj]h]hunsigned long pg_align}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj]ubjt )}(hhh]h)}(h4the buffer's alignment in multiples of the page sizeh]h6the buffer’s alignment in multiples of the page size}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hj]hKhjK]ubeh}(h]h ]h"]h$]h&]uh1jL hj/]ubh)}(h**Description**h]j7 )}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj/]ubh)}(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.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj/]ubh)}(h **Return**h]j7 )}(hj(^h]hReturn}(hj*^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&^ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj/]ubh)}(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 }(hj>^hhhNhNubh)}(h::c:type:`struct drm_gem_vram_object `h]j^ )}(hjH^h]hstruct drm_gem_vram_object}(hjJ^hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjF^ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_vram_objectuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj>^ubh: on success, or an ERR_PTR()-encoded error code otherwise.}(hj>^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhje^hKhj/]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_vram_put (C function)c.drm_gem_vram_puthNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hKubj)}(hdrm_gem_vram_puth]j)}(hdrm_gem_vram_puth]hdrm_gem_vram_put}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj^hKubj>)}(h!(struct drm_gem_vram_object *gbo)h]jD)}(hstruct drm_gem_vram_object *gboh](j)}(hj? h]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj^modnameN classnameNjj)}j]j)}j}j^sbc.drm_gem_vram_putasbuh1hhj^ubj)}(h h]h }(hj _hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hgboh]hgbo}(hj&_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj^ubah}(h]h ]h"]h$]h&]jjuh1j=hj^hhhj^hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhj^hKubah}(h]j^ah ](jjeh"]h$]h&]j j )j huh1jhj^hKhj^hhubj )}(hhh]h)}(h0Releases a reference to a VRAM-backed GEM objecth]h0Releases a reference to a VRAM-backed GEM object}(hjP_hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjM_hhubah}(h]h ]h"]h$]h&]uh1j hj^hhhj^hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jh_j( jh_j) j* j+ uh1jhhhjMhNhNubj- )}(h**Parameters** ``struct drm_gem_vram_object *gbo`` the GEM VRAM object **Description** See ttm_bo_fini() for more information.h](h)}(h**Parameters**h]j7 )}(hjr_h]h Parameters}(hjt_hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjp_ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjl_ubjM )}(hhh]jR )}(h8``struct drm_gem_vram_object *gbo`` the GEM VRAM object h](jX )}(h#``struct drm_gem_vram_object *gbo``h]j^ )}(hj_h]hstruct drm_gem_vram_object *gbo}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj_ubjt )}(hhh]h)}(hthe GEM VRAM objecth]hthe GEM VRAM object}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hKhj_ubah}(h]h ]h"]h$]h&]uh1js hj_ubeh}(h]h ]h"]h$]h&]uh1jQ hj_hKhj_ubah}(h]h ]h"]h$]h&]uh1jL hjl_ubh)}(h**Description**h]j7 )}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj_ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjl_ubh)}(h'See ttm_bo_fini() for more information.h]h'See ttm_bo_fini() for more information.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjl_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_vram_offset (C function)c.drm_gem_vram_offsethNtauh1jhjMhhhNhNubj)}(hhh](j)}(h9s64 drm_gem_vram_offset (struct drm_gem_vram_object *gbo)h]j)}(h8s64 drm_gem_vram_offset(struct drm_gem_vram_object *gbo)h](h)}(hhh]j)}(hs64h]hs64}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj`modnameN classnameNjj)}j]j)}j}drm_gem_vram_offsetsbc.drm_gem_vram_offsetasbuh1hhj `hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKubj)}(h h]h }(hj6`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj `hhhj5`hKubj)}(hdrm_gem_vram_offseth]j)}(hj2`h]hdrm_gem_vram_offset}(hjH`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj `hhhj5`hKubj>)}(h!(struct drm_gem_vram_object *gbo)h]jD)}(hstruct drm_gem_vram_object *gboh](j)}(hj? h]hstruct}(hjc`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_`ubj)}(h h]h }(hjp`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_`ubh)}(hhh]j)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~`ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj`modnameN classnameNjj)}j]j0`c.drm_gem_vram_offsetasbuh1hhj_`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_`ubj)}(hgboh]hgbo}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj[`ubah}(h]h ]h"]h$]h&]jjuh1j=hj `hhhj5`hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj `hhhj5`hKubah}(h]j`ah ](jjeh"]h$]h&]j j )j huh1jhj5`hKhj`hhubj )}(hhh]h)}(h2Returns a GEM VRAM object's offset in video memoryh]h4Returns a GEM VRAM object’s offset in video memory}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhj`hhubah}(h]h ]h"]h$]h&]uh1j hj`hhhj5`hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j`j( j`j) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjaubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjaubjM )}(hhh]jR )}(h8``struct drm_gem_vram_object *gbo`` the GEM VRAM object h](jX )}(h#``struct drm_gem_vram_object *gbo``h]j^ )}(hj%ah]hstruct drm_gem_vram_object *gbo}(hj'ahhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj#aubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chKhjaubjt )}(hhh]h)}(hthe GEM VRAM objecth]hthe GEM VRAM object}(hj>ahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ahKhj;aubah}(h]h ]h"]h$]h&]uh1js hjaubeh}(h]h ]h"]h$]h&]uh1jQ hj:ahKhjaubah}(h]h ]h"]h$]h&]uh1jL hjaubh)}(h**Description**h]j7 )}(hj`ah]h Description}(hjbahhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj^aubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjaubh)}(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 }(hjvahhhNhNubj^ )}(h``TTM_PL_VRAM``h]h TTM_PL_VRAM}(hj~ahhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjvaubh.}(hjvahhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjaubh)}(h **Return**h]j7 )}(hjah]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjaubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjaubh)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_vram_vmap (C function)c.drm_gem_vram_vmaphNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMKubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjahMKubj)}(hdrm_gem_vram_vmaph]j)}(hdrm_gem_vram_vmaph]hdrm_gem_vram_vmap}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjahMKubj>)}(h8(struct drm_gem_vram_object *gbo, struct iosys_map *map)h](jD)}(hstruct drm_gem_vram_object *gboh](j)}(hj? h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hj(bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hj9bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6bubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj;bmodnameN classnameNjj)}j]j)}j}jbsbc.drm_gem_vram_vmapasbuh1hhjbubj)}(h h]h }(hjYbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]h*}(hjgbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hgboh]hgbo}(hjtbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjbubjD)}(hstruct iosys_map *maph](j)}(hj? h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjbmodnameN classnameNjj)}j]jUbc.drm_gem_vram_vmapasbuh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hmaph]hmap}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjbubeh}(h]h ]h"]h$]h&]jjuh1j=hjahhhjahMKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjahMKubah}(h]jaah ](jjeh"]h$]h&]j j )j huh1jhjahMKhjahhubj )}(hhh]h)}(h9Pins and maps a GEM VRAM object into kernel address spaceh]h9Pins and maps a GEM VRAM object into kernel address space}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMKhj chhubah}(h]h ]h"]h$]h&]uh1j hjahhhjahMKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j&cj( j&cj) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hj0ch]h Parameters}(hj2chhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj.cubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMOhj*cubjM )}(hhh](jR )}(h?``struct drm_gem_vram_object *gbo`` The GEM VRAM object to map h](jX )}(h#``struct drm_gem_vram_object *gbo``h]j^ )}(hjOch]hstruct drm_gem_vram_object *gbo}(hjQchhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjMcubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMMhjIcubjt )}(hhh]h)}(hThe GEM VRAM object to maph]hThe GEM VRAM object to map}(hjhchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdchMMhjecubah}(h]h ]h"]h$]h&]uh1js hjIcubeh}(h]h ]h"]h$]h&]uh1jQ hjdchMMhjFcubjR )}(he``struct iosys_map *map`` Returns the kernel virtual address of the VRAM GEM object's backing store. h](jX )}(h``struct iosys_map *map``h]j^ )}(hjch]hstruct iosys_map *map}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjcubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMOhjcubjt )}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMNhjcubah}(h]h ]h"]h$]h&]uh1js hjcubeh}(h]h ]h"]h$]h&]uh1jQ hjchMOhjFcubeh}(h]h ]h"]h$]h&]uh1jL hj*cubh)}(h**Description**h]j7 )}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjcubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMQhj*cubh)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMPhj*cubh)}(h **Return**h]j7 )}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjcubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMVhj*cubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMWhj*cubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_vram_vunmap (C function)c.drm_gem_vram_vunmaphNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj0dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,dhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMwubj)}(h h]h }(hj?dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,dhhhj>dhMwubj)}(hdrm_gem_vram_vunmaph]j)}(hdrm_gem_vram_vunmaph]hdrm_gem_vram_vunmap}(hjQdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMdubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,dhhhj>dhMwubj>)}(h8(struct drm_gem_vram_object *gbo, struct iosys_map *map)h](jD)}(hstruct drm_gem_vram_object *gboh](j)}(hj? h]hstruct}(hjmdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjidubj)}(h h]h }(hjzdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjidubh)}(hhh]j)}(hdrm_gem_vram_objecth]hdrm_gem_vram_object}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjdmodnameN classnameNjj)}j]j)}j}jSdsbc.drm_gem_vram_vunmapasbuh1hhjidubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjidubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjidubj)}(hgboh]hgbo}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjidubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjedubjD)}(hstruct iosys_map *maph](j)}(hj? h]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjdmodnameN classnameNjj)}j]jdc.drm_gem_vram_vunmapasbuh1hhjdubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]h*}(hj)ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hmaph]hmap}(hj6ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjedubeh}(h]h ]h"]h$]h&]jjuh1j=hj,dhhhj>dhMwubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj(dhhhj>dhMwubah}(h]j#dah ](jjeh"]h$]h&]j j )j huh1jhj>dhMwhj%dhhubj )}(hhh]h)}(h#Unmaps and unpins a GEM VRAM objecth]h#Unmaps and unpins a GEM VRAM object}(hj`ehhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMwhj]ehhubah}(h]h ]h"]h$]h&]uh1j hj%dhhhj>dhMwubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jxej( jxej) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjeubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chM{hj|eubjM )}(hhh](jR )}(hA``struct drm_gem_vram_object *gbo`` The GEM VRAM object to unmap h](jX )}(h#``struct drm_gem_vram_object *gbo``h]j^ )}(hjeh]hstruct drm_gem_vram_object *gbo}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjeubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMxhjeubjt )}(hhh]h)}(hThe GEM VRAM object to unmaph]hThe GEM VRAM object to unmap}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMxhjeubah}(h]h ]h"]h$]h&]uh1js hjeubeh}(h]h ]h"]h$]h&]uh1jQ hjehMxhjeubjR )}(hV``struct iosys_map *map`` Kernel virtual address where the VRAM GEM object was mapped h](jX )}(h``struct iosys_map *map``h]j^ )}(hjeh]hstruct iosys_map *map}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjeubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMyhjeubjt )}(hhh]h)}(h;Kernel virtual address where the VRAM GEM object was mappedh]h;Kernel virtual address where the VRAM GEM object was mapped}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMyhjeubah}(h]h ]h"]h$]h&]uh1js hjeubeh}(h]h ]h"]h$]h&]uh1jQ hjehMyhjeubeh}(h]h ]h"]h$]h&]uh1jL hj|eubh)}(h**Description**h]j7 )}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjfubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chM{hj|eubh)}(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.}(hj+fhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMzhj|eubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gem_vram_fill_create_dumb (C function)c.drm_gem_vram_fill_create_dumbhNtauh1jhjMhhhNhNubj)}(hhh](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]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](j)}(hinth]hint}(hjZfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVfhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMubj)}(h h]h }(hjifhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVfhhhjhfhMubj)}(hdrm_gem_vram_fill_create_dumbh]j)}(hdrm_gem_vram_fill_create_dumbh]hdrm_gem_vram_fill_create_dumb}(hj{fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwfubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVfhhhjhfhMubj>)}(h(struct drm_file *file, struct drm_device *dev, unsigned long pg_align, unsigned long pitch_align, struct drm_mode_create_dumb *args)h](jD)}(hstruct drm_file *fileh](j)}(hj? h]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjfmodnameN classnameNjj)}j]j)}j}j}fsbc.drm_gem_vram_fill_create_dumbasbuh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hfileh]hfile}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjfubjD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hj ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj'ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$gubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj)gmodnameN classnameNjj)}j]jfc.drm_gem_vram_fill_create_dumbasbuh1hhjgubj)}(h h]h }(hjEghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjSghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hdevh]hdev}(hj`ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjfubjD)}(hunsigned long pg_alignh](j)}(hunsignedh]hunsigned}(hjyghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjugubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjugubj)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjugubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjugubj)}(hpg_alignh]hpg_align}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjugubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjfubjD)}(hunsigned long pitch_alignh](j)}(hunsignedh]hunsigned}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h pitch_alignh]h pitch_align}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjfubjD)}(h!struct drm_mode_create_dumb *argsh](j)}(hj? h]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hj(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]j)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hj9hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj;hmodnameN classnameNjj)}j]jfc.drm_gem_vram_fill_create_dumbasbuh1hhjhubj)}(h h]h }(hjWhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hjh]h*}(hjehhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hargsh]hargs}(hjrhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjfubeh}(h]h ]h"]h$]h&]jjuh1j=hjVfhhhjhfhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRfhhhjhfhMubah}(h]jMfah ](jjeh"]h$]h&]j j )j huh1jhjhfhMhjOfhhubj )}(hhh]h)}(hLHelper for implementing :c:type:`struct drm_driver `.dumb_createh](hHelper for implementing }(hjhhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hjhh]hstruct drm_driver}(hjhhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjhubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jfc.drm_gem_vram_fill_create_dumbasbj drm_driveruh1hhj[hKhjhubh .dumb_create}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjhhhubah}(h]h ]h"]h$]h&]uh1j hjOfhhhjhfhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jhj( jhj) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjhubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjhubjM )}(hhh](jR )}(h'``struct drm_file *file`` the DRM file h](jX )}(h``struct drm_file *file``h]j^ )}(hjih]hstruct drm_file *file}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjhubjt )}(hhh]h)}(h the DRM fileh]h the DRM file}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1js hjhubeh}(h]h ]h"]h$]h&]uh1jQ hjihMhjhubjR )}(h*``struct drm_device *dev`` the DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hj>ih]hstruct drm_device *dev}(hj@ihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj`.dumb_create h](jX )}(h%``struct drm_mode_create_dumb *args``h]j^ )}(hjih]h!struct drm_mode_create_dumb *args}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjiubjt )}(hhh]h)}(hQthe arguments as provided to :c:type:`struct drm_driver `.dumb_createh](hthe arguments as provided to }(hjjhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hj jh]hstruct drm_driver}(hjjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj jubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjjubh .dumb_create}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)jhMhjiubah}(h]h ]h"]h$]h&]uh1js hjiubeh}(h]h ]h"]h$]h&]uh1jQ hjihMhjhubeh}(h]h ]h"]h$]h&]uh1jL hjhubh)}(h**Description**h]j7 )}(hjHjh]h Description}(hjJjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjFjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjhubh)}(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^jhhhNhNubh)}(h<:c:type:`struct drm_mode_create_dumb `h]j^ )}(hjhjh]hstruct drm_mode_create_dumb}(hjjjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjfjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mode_create_dumbuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj^jubh, which is used by }(hj^jhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hjjh]hstruct drm_driver}(hjjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhjjhMhj^jubh.dumb_create. Implementations of this interface should forwards their arguments to this helper, plus the driver-specific parameters.}(hj^jhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjjhMhjhubh)}(h **Return**h]j7 )}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjhubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_gem_vram_driver_dumb_create (C function)!c.drm_gem_vram_driver_dumb_createhNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMubj)}(h h]h }(hj khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjkhMubj)}(hdrm_gem_vram_driver_dumb_createh]j)}(hdrm_gem_vram_driver_dumb_createh]hdrm_gem_vram_driver_dumb_create}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhjkhMubj>)}(hR(struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args)h](jD)}(hstruct drm_file *fileh](j)}(hj? h]hstruct}(hj7khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubj)}(h h]h }(hjDkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjUkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRkubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjWkmodnameN classnameNjj)}j]j)}j}jksb!c.drm_gem_vram_driver_dumb_createasbuh1hhj3kubj)}(h h]h }(hjukhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubj)}(hfileh]hfile}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj/kubjD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkmodnameN classnameNjj)}j]jqk!c.drm_gem_vram_driver_dumb_createasbuh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hdevh]hdev}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj/kubjD)}(h!struct drm_mode_create_dumb *argsh](j)}(hj? h]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj&lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hdrm_mode_create_dumbh]hdrm_mode_create_dumb}(hj7lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4lubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj9lmodnameN classnameNjj)}j]jqk!c.drm_gem_vram_driver_dumb_createasbuh1hhjlubj)}(h h]h }(hjUlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjh]h*}(hjclhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hargsh]hargs}(hjplhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj/kubeh}(h]h ]h"]h$]h&]jjuh1j=hjjhhhjkhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjkhMubah}(h]jjah ](jjeh"]h$]h&]j j )j huh1jhjkhMhjjhhubj )}(hhh]h)}(h?Implements :c:type:`struct drm_driver `.dumb_createh](h Implements }(hjlhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hjlh]hstruct drm_driver}(hjlhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjlubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jqk!c.drm_gem_vram_driver_dumb_createasbj drm_driveruh1hhj[hKhjlubh .dumb_create}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjlhhubah}(h]h ]h"]h$]h&]uh1j hjjhhhjkhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jlj( jlj) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjlubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjlubjM )}(hhh](jR )}(h'``struct drm_file *file`` the DRM file h](jX )}(h``struct drm_file *file``h]j^ )}(hjmh]hstruct drm_file *file}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjlubjt )}(hhh]h)}(h the DRM fileh]h the DRM file}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjmubah}(h]h ]h"]h$]h&]uh1js hjlubeh}(h]h ]h"]h$]h&]uh1jQ hjmhMhjlubjR )}(h*``struct drm_device *dev`` the DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj:mubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj6mubjt )}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hjUmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQmhMhjRmubah}(h]h ]h"]h$]h&]uh1js hj6mubeh}(h]h ]h"]h$]h&]uh1jQ hjQmhMhjlubjR )}(hx``struct drm_mode_create_dumb *args`` the arguments as provided to :c:type:`struct drm_driver `.dumb_create h](jX )}(h%``struct drm_mode_create_dumb *args``h]j^ )}(hjumh]h!struct drm_mode_create_dumb *args}(hjwmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjsmubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjomubjt )}(hhh]h)}(hQthe arguments as provided to :c:type:`struct drm_driver `.dumb_createh](hthe arguments as provided to }(hjmhhhNhNubh)}(h(:c:type:`struct drm_driver `h]j^ )}(hjmh]hstruct drm_driver}(hjmhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjmubh .dumb_create}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjmubah}(h]h ]h"]h$]h&]uh1js hjomubeh}(h]h ]h"]h$]h&]uh1jQ hjmhMhjlubeh}(h]h ]h"]h$]h&]uh1jL hjlubh)}(h**Description**h]j7 )}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjmubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjlubh)}(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 }(hjmhhhNhNubj7 )}(h**drm_device.vram_mm**h]hdrm_device.vram_mm}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjmubh for its instance of VRAM MM.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjlubh)}(h **Return**h]j7 )}(hj nh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj nubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjlubh)}(h10 on success, or a negative error code otherwise.h]h10 on success, or a negative error code otherwise.}(hj#nhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_gem_vram_plane_helper_prepare_fb (C function)&c.drm_gem_vram_plane_helper_prepare_fbhNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjRnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNnhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chM@ubj)}(h h]h }(hjanhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNnhhhj`nhM@ubj)}(h$drm_gem_vram_plane_helper_prepare_fbh]j)}(h$drm_gem_vram_plane_helper_prepare_fbh]h$drm_gem_vram_plane_helper_prepare_fb}(hjsnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjonubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNnhhhj`nhM@ubj>)}(h<(struct drm_plane *plane, struct drm_plane_state *new_state)h](jD)}(hstruct drm_plane *planeh](j)}(hj? h]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjnmodnameN classnameNjj)}j]j)}j}junsb&c.drm_gem_vram_plane_helper_prepare_fbasbuh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hplaneh]hplane}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjnubjD)}(h!struct drm_plane_state *new_stateh](j)}(hj? h]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj!omodnameN classnameNjj)}j]jn&c.drm_gem_vram_plane_helper_prepare_fbasbuh1hhjnubj)}(h h]h }(hj=ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]h*}(hjKohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h new_stateh]h new_state}(hjXohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjnubeh}(h]h ]h"]h$]h&]jjuh1j=hjNnhhhj`nhM@ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjJnhhhj`nhM@ubah}(h]jEnah ](jjeh"]h$]h&]j j )j huh1jhj`nhM@hjGnhhubj )}(hhh]h)}(hVImplements :c:type:`struct drm_plane_helper_funcs `.prepare_fbh](h Implements }(hjohhhNhNubh)}(h@:c:type:`struct drm_plane_helper_funcs `h]j^ )}(hjoh]hstruct drm_plane_helper_funcs}(hjohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jn&c.drm_gem_vram_plane_helper_prepare_fbasbj drm_plane_helper_funcsuh1hhj[hKhjoubh .prepare_fb}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chM@hjohhubah}(h]h ]h"]h$]h&]uh1j hjGnhhhj`nhM@ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' joj( joj) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjoubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMDhjoubjM )}(hhh](jR )}(h(``struct drm_plane *plane`` a DRM plane h](jX )}(h``struct drm_plane *plane``h]j^ )}(hjoh]hstruct drm_plane *plane}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMBhjoubjt )}(hhh]h)}(h a DRM planeh]h a DRM plane}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMBhjpubah}(h]h ]h"]h$]h&]uh1js hjoubeh}(h]h ]h"]h$]h&]uh1jQ hjphMBhjoubjR )}(h<``struct drm_plane_state *new_state`` the plane's new state h](jX )}(h%``struct drm_plane_state *new_state``h]j^ )}(hj$ph]h!struct drm_plane_state *new_state}(hj&phhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"pubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMChjpubjt )}(hhh]h)}(hthe plane's new stateh]hthe plane’s new state}(hj=phhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9phMChj:pubah}(h]h ]h"]h$]h&]uh1js hjpubeh}(h]h ]h"]h$]h&]uh1jQ hj9phMChjoubeh}(h]h ]h"]h$]h&]uh1jL hjoubh)}(h**Description**h]j7 )}(hj_ph]h Description}(hjaphhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]pubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMEhjoubh)}(hDuring 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.h]hDuring 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.}(hjuphhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMDhjoubh)}(h **Return**h]j7 )}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjpubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMHhjoubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMIhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_gem_vram_plane_helper_cleanup_fb (C function)&c.drm_gem_vram_plane_helper_cleanup_fbhNtauh1jhjMhhhNhNubj)}(hhh](j)}(hfvoid drm_gem_vram_plane_helper_cleanup_fb (struct drm_plane *plane, struct drm_plane_state *old_state)h]j)}(hevoid drm_gem_vram_plane_helper_cleanup_fb(struct drm_plane *plane, struct drm_plane_state *old_state)h](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMsubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjphMsubj)}(h$drm_gem_vram_plane_helper_cleanup_fbh]j)}(h$drm_gem_vram_plane_helper_cleanup_fbh]h$drm_gem_vram_plane_helper_cleanup_fb}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjphhhjphMsubj>)}(h<(struct drm_plane *plane, struct drm_plane_state *old_state)h](jD)}(hstruct drm_plane *planeh](j)}(hj? h]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj&qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#qubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj(qmodnameN classnameNjj)}j]j)}j}jpsb&c.drm_gem_vram_plane_helper_cleanup_fbasbuh1hhjqubj)}(h h]h }(hjFqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hjh]h*}(hjTqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hplaneh]hplane}(hjaqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjqubjD)}(h!struct drm_plane_state *old_stateh](j)}(hj? h]hstruct}(hjzqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvqubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjqmodnameN classnameNjj)}j]jBq&c.drm_gem_vram_plane_helper_cleanup_fbasbuh1hhjvqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvqubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvqubj)}(h old_stateh]h old_state}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvqubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjqubeh}(h]h ]h"]h$]h&]jjuh1j=hjphhhjphMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjphhhjphMsubah}(h]jpah ](jjeh"]h$]h&]j j )j huh1jhjphMshjphhubj )}(hhh]h)}(hVImplements :c:type:`struct drm_plane_helper_funcs `.cleanup_fbh](h Implements }(hjqhhhNhNubh)}(h@:c:type:`struct drm_plane_helper_funcs `h]j^ )}(hjrh]hstruct drm_plane_helper_funcs}(hjrhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jBq&c.drm_gem_vram_plane_helper_cleanup_fbasbj drm_plane_helper_funcsuh1hhj[hKhjqubh .cleanup_fb}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMshjqhhubah}(h]h ]h"]h$]h&]uh1j hjphhhjphMsubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j;rj( j;rj) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hjErh]h Parameters}(hjGrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjCrubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMwhj?rubjM )}(hhh](jR )}(h(``struct drm_plane *plane`` a DRM plane h](jX )}(h``struct drm_plane *plane``h]j^ )}(hjdrh]hstruct drm_plane *plane}(hjfrhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbrubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMuhj^rubjt )}(hhh]h)}(h a DRM planeh]h a DRM plane}(hj}rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyrhMuhjzrubah}(h]h ]h"]h$]h&]uh1js hj^rubeh}(h]h ]h"]h$]h&]uh1jQ hjyrhMuhj[rubjR )}(h<``struct drm_plane_state *old_state`` the plane's old state h](jX )}(h%``struct drm_plane_state *old_state``h]j^ )}(hjrh]h!struct drm_plane_state *old_state}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMvhjrubjt )}(hhh]h)}(hthe plane's old stateh]hthe plane’s old state}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMvhjrubah}(h]h ]h"]h$]h&]uh1js hjrubeh}(h]h ]h"]h$]h&]uh1jQ hjrhMvhj[rubeh}(h]h ]h"]h$]h&]uh1jL hj?rubh)}(h**Description**h]j7 )}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjrubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMxhj?rubh)}(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().}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMwhj?rubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_vram_mm_debugfs_init (C function)c.drm_vram_mm_debugfs_inithNtauh1jhjMhhhNhNubj)}(hhh](j)}(h7void drm_vram_mm_debugfs_init (struct drm_minor *minor)h]j)}(h6void drm_vram_mm_debugfs_init(struct drm_minor *minor)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMEubj)}(h h]h }(hj,shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhj+shMEubj)}(hdrm_vram_mm_debugfs_inith]j)}(hdrm_vram_mm_debugfs_inith]hdrm_vram_mm_debugfs_init}(hj>shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:subah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhj+shMEubj>)}(h(struct drm_minor *minor)h]jD)}(hstruct drm_minor *minorh](j)}(hj? h]hstruct}(hjZshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVsubj)}(h h]h }(hjgshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVsubh)}(hhh]j)}(h drm_minorh]h drm_minor}(hjxshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjusubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjzsmodnameN classnameNjj)}j]j)}j}j@ssbc.drm_vram_mm_debugfs_initasbuh1hhjVsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVsubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVsubj)}(hminorh]hminor}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVsubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjRsubah}(h]h ]h"]h$]h&]jjuh1j=hjshhhj+shMEubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhj+shMEubah}(h]jsah ](jjeh"]h$]h&]j j )j huh1jhj+shMEhjshhubj )}(hhh]h)}(hRegister VRAM MM debugfs file.h]hRegister VRAM MM debugfs file.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMEhjshhubah}(h]h ]h"]h$]h&]uh1j hjshhhj+shMEubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jsj( jsj) j* j+ uh1jhhhjMhNhNubj- )}(h?**Parameters** ``struct drm_minor *minor`` drm minor device.h](h)}(h**Parameters**h]j7 )}(hjsh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjsubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMIhjsubjM )}(hhh]jR )}(h-``struct drm_minor *minor`` drm minor device.h](jX )}(h``struct drm_minor *minor``h]j^ )}(hjth]hstruct drm_minor *minor}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjtubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMKhjtubjt )}(hhh]h)}(hdrm minor device.h]hdrm minor device.}(hj7thhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMGhj4tubah}(h]h ]h"]h$]h&]uh1js hjtubeh}(h]h ]h"]h$]h&]uh1jQ hj3thMKhjtubah}(h]h ]h"]h$]h&]uh1jL hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drmm_vram_helper_init (C function)c.drmm_vram_helper_inithNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjxthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtthhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtthhhjthMubj)}(hdrmm_vram_helper_inith]j)}(hdrmm_vram_helper_inith]hdrmm_vram_helper_init}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1jhjtthhhjthMubj>)}(h>(struct drm_device *dev, uint64_t vram_base, size_t vram_size)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjtmodnameN classnameNjj)}j]j)}j}jtsbc.drmm_vram_helper_initasbuh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hdevh]hdev}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubjD)}(huint64_t vram_baseh](h)}(hhh]j)}(huint64_th]huint64_t}(hj*uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'uubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj,umodnameN classnameNjj)}j]jtc.drmm_vram_helper_initasbuh1hhj#uubj)}(h h]h }(hjHuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#uubj)}(h vram_baseh]h vram_base}(hjVuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#uubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubjD)}(hsize_t vram_sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjruhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjouubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjtumodnameN classnameNjj)}j]jtc.drmm_vram_helper_initasbuh1hhjkuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkuubj)}(h vram_sizeh]h vram_size}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkuubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjtubeh}(h]h ]h"]h$]h&]jjuh1j=hjtthhhjthMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjpthhhjthMubah}(h]jktah ](jjeh"]h$]h&]j j )j huh1jhjthMhjmthhubj )}(hhh]h)}(hMInitializes a device's instance of :c:type:`struct drm_vram_mm `h](h%Initializes a device’s instance of }(hjuhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hjuh]hstruct drm_vram_mm}(hjuhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjuubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jtc.drmm_vram_helper_initasbj drm_vram_mmuh1hhj[hKhjuubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjuhhubah}(h]h ]h"]h$]h&]uh1j hjmthhhjthMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jvj( jvj) j* j+ uh1jhhhjMhNhNubj- )}(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]j7 )}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj vubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjvubjM )}(hhh](jR )}(h*``struct drm_device *dev`` the DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hj-vh]hstruct drm_device *dev}(hj/vhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj+vubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj'vubjt )}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hjFvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBvhMhjCvubah}(h]h ]h"]h$]h&]uh1js hj'vubeh}(h]h ]h"]h$]h&]uh1jQ hjBvhMhj$vubjR )}(h<``uint64_t vram_base`` the base address of the video memory h](jX )}(h``uint64_t vram_base``h]j^ )}(hjfvh]huint64_t vram_base}(hjhvhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjdvubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj`vubjt )}(hhh]h)}(h$the base address of the video memoryh]h$the base address of the video memory}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{vhMhj|vubah}(h]h ]h"]h$]h&]uh1js hj`vubeh}(h]h ]h"]h$]h&]uh1jQ hj{vhMhj$vubjR )}(h;``size_t vram_size`` the size of the video memory in bytes h](jX )}(h``size_t vram_size``h]j^ )}(hjvh]hsize_t vram_size}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjvubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjvubjt )}(hhh]h)}(h%the size of the video memory in bytesh]h%the size of the video memory in bytes}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjvubah}(h]h ]h"]h$]h&]uh1js hjvubeh}(h]h ]h"]h$]h&]uh1jQ hjvhMhj$vubeh}(h]h ]h"]h$]h&]uh1jL hjvubh)}(h**Description**h]j7 )}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjvubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjvubh)}(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 }(hjvhhhNhNubh)}(h*:c:type:`struct drm_vram_mm `h]j^ )}(hjvh]hstruct drm_vram_mm}(hjvhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjvubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_vram_mmuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjvubh and stores it in struct }(hjvhhhNhNubh)}(h):c:type:`drm_device.vram_mm `h]j^ )}(hjwh]hdrm_device.vram_mm}(hj whhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhjwhMhjvubh. The instance is auto-managed and cleaned up as part of device cleanup. Calling this function multiple times will generate an error message.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhMhjvubh)}(h **Return**h]j7 )}(hjGwh]hReturn}(hjIwhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjEwubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjvubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hj]whhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_vram_helper_mode_valid (C function)c.drm_vram_helper_mode_validhNtauh1jhjMhhhNhNubj)}(hhh](j)}(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](j)}(hjh]henum}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjwhMubh)}(hhh]j)}(hdrm_mode_statush]hdrm_mode_status}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjwmodnameN classnameNjj)}j]j)}j}drm_vram_helper_mode_validsbc.drm_vram_helper_mode_validasbuh1hhjwhhhjwhMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjwhMubj)}(hdrm_vram_helper_mode_validh]j)}(hjwh]hdrm_vram_helper_mode_valid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwhhhjwhMubj>)}(h=(struct drm_device *dev, const struct drm_display_mode *mode)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjxmodnameN classnameNjj)}j]jwc.drm_vram_helper_mode_validasbuh1hhjwubj)}(h h]h }(hj5xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]h*}(hjCxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hdevh]hdev}(hjPxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjwubjD)}(h#const struct drm_display_mode *modeh](j)}(hjJh]hconst}(hjixhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj)}(h h]h }(hjvxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj)}(hj? h]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjxmodnameN classnameNjj)}j]jwc.drm_vram_helper_mode_validasbuh1hhjexubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj)}(hmodeh]hmode}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjwubeh}(h]h ]h"]h$]h&]jjuh1j=hjwhhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjwhhhjwhMubah}(h]jwah ](jjeh"]h$]h&]j j )j huh1jhjwhMhjwhhubj )}(hhh]h)}(hKTests if a display mode's framebuffer fits into the available video memory.h]hMTests if a display mode’s framebuffer fits into the available video memory.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjyhhubah}(h]h ]h"]h$]h&]uh1j hjwhhhjwhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jyj( jyj) j* j+ uh1jhhhjMhNhNubj- )}(hX**Parameters** ``struct drm_device *dev`` the DRM device ``const struct drm_display_mode *mode`` the mode to test **Description** This function tests if enough video memory is available for using the specified display mode. Atomic modesetting requires importing the designated framebuffer into video memory before evicting the active one. Hence, any framebuffer may consume at most half of the available VRAM. Display modes that require a larger framebuffer can not be used, even if the CRTC does support them. Each framebuffer is assumed to have 32-bit color depth. **Note** The function can only test if the display mode is supported in general. If there are too many framebuffers pinned to video memory, a display mode may still not be usable in practice. The color depth of 32-bit fits all current use case. A more flexible test can be added when necessary. **Return** MODE_OK if the display mode is supported, or an error code of type enum drm_mode_status otherwise.h](h)}(h**Parameters**h]j7 )}(hj'yh]h Parameters}(hj)yhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj%yubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj!yubjM )}(hhh](jR )}(h*``struct drm_device *dev`` the DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hjFyh]hstruct drm_device *dev}(hjHyhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjDyubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj@yubjt )}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hj_yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[yhMhj\yubah}(h]h ]h"]h$]h&]uh1js hj@yubeh}(h]h ]h"]h$]h&]uh1jQ hj[yhMhj=yubjR )}(h9``const struct drm_display_mode *mode`` the mode to test h](jX )}(h'``const struct drm_display_mode *mode``h]j^ )}(hjyh]h#const struct drm_display_mode *mode}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}yubah}(h]h ]h"]h$]h&]uh1jW ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhjyyubjt )}(hhh]h)}(hthe mode to testh]hthe mode to test}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1js hjyyubeh}(h]h ]h"]h$]h&]uh1jQ hjyhMhj=yubeh}(h]h ]h"]h$]h&]uh1jL hj!yubh)}(h**Description**h]j7 )}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjyubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj!yubh)}(hXThis function tests if enough video memory is available for using the specified display mode. Atomic modesetting requires importing the designated framebuffer into video memory before evicting the active one. Hence, any framebuffer may consume at most half of the available VRAM. Display modes that require a larger framebuffer can not be used, even if the CRTC does support them. Each framebuffer is assumed to have 32-bit color depth.h]hXThis function tests if enough video memory is available for using the specified display mode. Atomic modesetting requires importing the designated framebuffer into video memory before evicting the active one. Hence, any framebuffer may consume at most half of the available VRAM. Display modes that require a larger framebuffer can not be used, even if the CRTC does support them. Each framebuffer is assumed to have 32-bit color depth.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj!yubh)}(h**Note**h]j7 )}(hjyh]hNote}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjyubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj!yubh)}(hXThe function can only test if the display mode is supported in general. If there are too many framebuffers pinned to video memory, a display mode may still not be usable in practice. The color depth of 32-bit fits all current use case. A more flexible test can be added when necessary.h]hXThe function can only test if the display mode is supported in general. If there are too many framebuffers pinned to video memory, a display mode may still not be usable in practice. The color depth of 32-bit fits all current use case. A more flexible test can be added when necessary.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj!yubh)}(h **Return**h]j7 )}(hjzh]hReturn}(hj zhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjzubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj!yubh)}(hbMODE_OK if the display mode is supported, or an error code of type enum drm_mode_status otherwise.h]hbMODE_OK if the display mode is supported, or an error code of type enum drm_mode_status otherwise.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:410: ./drivers/gpu/drm/drm_gem_vram_helper.chMhj!yubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjMhhhNhNubeh}(h]jah ]h"]#gem vram helper functions referenceah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h"GEM TTM Helper Functions Referenceh]h"GEM TTM Helper Functions Reference}(hj>zhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj;zhhhhhMubh)}(hEThis library provides helper functions for gem objects backed by ttm.h]hEThis library provides helper functions for gem objects backed by ttm.}(hjLzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:416: ./drivers/gpu/drm/drm_gem_ttm_helper.chK hj;zhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_gem_ttm_print_info (C function)c.drm_gem_ttm_print_infohNtauh1jhj;zhhhNhNubj)}(hhh](j)}(hjvoid drm_gem_ttm_print_info (struct drm_printer *p, unsigned int indent, const struct drm_gem_object *gem)h]j)}(hivoid drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *gem)h](j)}(hvoidh]hvoid}(hjtzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpzhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpzhhhjzhKubj)}(hdrm_gem_ttm_print_infoh]j)}(hdrm_gem_ttm_print_infoh]hdrm_gem_ttm_print_info}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjpzhhhjzhKubj>)}(hN(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *gem)h](jD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjzmodnameN classnameNjj)}j]j)}j}jzsbc.drm_gem_ttm_print_infoasbuh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]hp}(hj {hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubjD)}(hunsigned int indenth](j)}(hunsignedh]hunsigned}(hj"{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj0{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hinth]hint}(hj>{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjL{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hindenth]hindent}(hjZ{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubjD)}(h const struct drm_gem_object *gemh](j)}(hjJh]hconst}(hjs{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo{ubj)}(hj? h]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo{ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj{modnameN classnameNjj)}j]jzc.drm_gem_ttm_print_infoasbuh1hhjo{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo{ubj)}(hgemh]hgem}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubeh}(h]h ]h"]h$]h&]jjuh1j=hjpzhhhjzhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjlzhhhjzhKubah}(h]jgzah ](jjeh"]h$]h&]j j )j huh1jhjzhKhjizhhubj )}(hhh]h)}(h2Print :c:type:`ttm_buffer_object` info for debugfsh](hPrint }(hj|hhhNhNubh)}(h:c:type:`ttm_buffer_object`h]j^ )}(hj|h]httm_buffer_object}(hj|hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jzc.drm_gem_ttm_print_infoasbj ttm_buffer_objectuh1hhjzhKhj|ubh info for debugfs}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhj |hhubah}(h]h ]h"]h$]h&]uh1j hjizhhhjzhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jO|j( jO|j) j* j+ uh1jhhhj;zhNhNubj- )}(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]j7 )}(hjY|h]h Parameters}(hj[|hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjW|ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjS|ubjM )}(hhh](jR )}(h&``struct drm_printer *p`` DRM printer h](jX )}(h``struct drm_printer *p``h]j^ )}(hjx|h]hstruct drm_printer *p}(hjz|hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjv|ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjr|ubjt )}(hhh]h)}(h DRM printerh]h DRM printer}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj|ubah}(h]h ]h"]h$]h&]uh1js hjr|ubeh}(h]h ]h"]h$]h&]uh1jQ hj|hKhjo|ubjR )}(h.``unsigned int indent`` Tab indentation level h](jX )}(h``unsigned int indent``h]j^ )}(hj|h]hunsigned int indent}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhj|ubjt )}(hhh]h)}(hTab indentation levelh]hTab indentation level}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj|ubah}(h]h ]h"]h$]h&]uh1js hj|ubeh}(h]h ]h"]h$]h&]uh1jQ hj|hKhjo|ubjR )}(h0``const struct drm_gem_object *gem`` GEM object h](jX )}(h$``const struct drm_gem_object *gem``h]j^ )}(hj|h]h const struct drm_gem_object *gem}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhj|ubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj}ubah}(h]h ]h"]h$]h&]uh1js hj|ubeh}(h]h ]h"]h$]h&]uh1jQ hj|hKhjo|ubeh}(h]h ]h"]h$]h&]uh1jL hjS|ubh)}(h**Description**h]j7 )}(hj%}h]h Description}(hj'}hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj#}ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjS|ubh)}(hgThis function can be used as :c:type:`drm_gem_object_funcs.print_info ` callback.h](hThis function can be used as }(hj;}hhhNhNubh)}(h@:c:type:`drm_gem_object_funcs.print_info `h]j^ )}(hjE}h]hdrm_gem_object_funcs.print_info}(hjG}hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjC}ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhj;}ubh callback.}(hj;}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb}hKhjS|ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj;zhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_ttm_vmap (C function)c.drm_gem_ttm_vmaphNtauh1jhj;zhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK9ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj}hK9ubj)}(hdrm_gem_ttm_vmaph]j)}(hdrm_gem_ttm_vmaph]hdrm_gem_ttm_vmap}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj}hhhj}hK9ubj>)}(h3(struct drm_gem_object *gem, struct iosys_map *map)h](jD)}(hstruct drm_gem_object *gemh](j)}(hj? h]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj}modnameN classnameNjj)}j]j)}j}j}sbc.drm_gem_ttm_vmapasbuh1hhj}ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hgemh]hgem}(hj#~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubjD)}(hstruct iosys_map *maph](j)}(hj? h]hstruct}(hj<~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8~ubj)}(h h]h }(hjI~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8~ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjZ~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW~ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj\~modnameN classnameNjj)}j]j~c.drm_gem_ttm_vmapasbuh1hhj8~ubj)}(h h]h }(hjx~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8~ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8~ubj)}(hmaph]hmap}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubeh}(h]h ]h"]h$]h&]jjuh1j=hj}hhhj}hK9ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}hhhj}hK9ubah}(h]j}ah ](jjeh"]h$]h&]j j )j huh1jhj}hK9hj}hhubj )}(hhh]h)}(h vmap :c:type:`ttm_buffer_object`h](hvmap }(hj~hhhNhNubh)}(h:c:type:`ttm_buffer_object`h]j^ )}(hj~h]httm_buffer_object}(hj~hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj~ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j~c.drm_gem_ttm_vmapasbj ttm_buffer_objectuh1hhjzhKhj~ubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK9hj~hhubah}(h]h ]h"]h$]h&]uh1j hj}hhhj}hK9ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j~j( j~j) j* j+ uh1jhhhj;zhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK=hj~ubjM )}(hhh](jR )}(h+``struct drm_gem_object *gem`` GEM object. h](jX )}(h``struct drm_gem_object *gem``h]j^ )}(hj"h]hstruct drm_gem_object *gem}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK:hjubjt )}(hhh]h)}(h GEM object.h]h GEM object.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hK:hj8ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj7hK:hjubjR )}(h=``struct iosys_map *map`` [out] returns the dma-buf mapping. h](jX )}(h``struct iosys_map *map``h]j^ )}(hj[h]hstruct iosys_map *map}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK;hjUubjt )}(hhh]h)}(h"[out] returns the dma-buf mapping.h]h"[out] returns the dma-buf mapping.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK;hjqubah}(h]h ]h"]h$]h&]uh1js hjUubeh}(h]h ]h"]h$]h&]uh1jQ hjphK;hjubeh}(h]h ]h"]h$]h&]uh1jL hj~ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK=hj~ubh)}(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 }(hjhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.vmap `h]j^ )}(hjh]hdrm_gem_object_funcs.vmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK)}(h3(struct drm_gem_object *gem, struct iosys_map *map)h](jD)}(hstruct drm_gem_object *gemh](j)}(hj? h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jHsbc.drm_gem_ttm_vunmapasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hgemh]hgem}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubjD)}(hstruct iosys_map *maph](j)}(hj? h]hstruct}(hjԀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЀubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЀubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_ttm_vunmapasbuh1hhjЀubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЀubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЀubj)}(hmaph]hmap}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЀubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubeh}(h]h ]h"]h$]h&]jjuh1j=hj!hhhj3hKMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj3hKMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj3hKMhjhhubj )}(hhh]h)}(h"vunmap :c:type:`ttm_buffer_object`h](hvunmap }(hjUhhhNhNubh)}(h:c:type:`ttm_buffer_object`h]j^ )}(hj_h]httm_buffer_object}(hjahhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gem_ttm_vunmapasbj ttm_buffer_objectuh1hhjzhKhjUubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKMhjRhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj3hKMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj;zhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKQhjubjM )}(hhh](jR )}(h+``struct drm_gem_object *gem`` GEM object. h](jX )}(h``struct drm_gem_object *gem``h]j^ )}(hjh]hstruct drm_gem_object *gem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKNhjubjt )}(hhh]h)}(h GEM object.h]h GEM object.}(hjӁhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjρhKNhjЁubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjρhKNhjubjR )}(h+``struct iosys_map *map`` dma-buf mapping. h](jX )}(h``struct iosys_map *map``h]j^ )}(hjh]hstruct iosys_map *map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKOhjubjt )}(hhh]h)}(hdma-buf mapping.h]hdma-buf mapping.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKOhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKOhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKQhjubh)}(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 }(hjDhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.vmap `h]j^ )}(hjNh]hdrm_gem_object_funcs.vmap}(hjPhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKPhjDubh callback.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhKPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj;zhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_ttm_mmap (C function)c.drm_gem_ttm_mmaphNtauh1jhj;zhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK^ubj)}(hdrm_gem_ttm_mmaph]j)}(hdrm_gem_ttm_mmaph]hdrm_gem_ttm_mmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK^ubj>)}(h8(struct drm_gem_object *gem, struct vm_area_struct *vma)h](jD)}(hstruct drm_gem_object *gemh](j)}(hj? h]hstruct}(hjӂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_ttm_mmapasbuh1hhjςubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubj)}(hgemh]hgem}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj˂ubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjemodnameN classnameNjj)}j]j c.drm_gem_ttm_mmapasbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj˂ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhK^ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK^ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhK^hjhhubj )}(hhh]h)}(h mmap :c:type:`ttm_buffer_object`h](hmmap }(hjƃhhhNhNubh)}(h:c:type:`ttm_buffer_object`h]j^ )}(hjЃh]httm_buffer_object}(hj҃hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj΃ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j c.drm_gem_ttm_mmapasbj ttm_buffer_objectuh1hhjzhKhjƃubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK^hjÃhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhK^ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj;zhNhNubj- )}(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]j7 )}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKbhjubjM )}(hhh](jR )}(h+``struct drm_gem_object *gem`` GEM object. h](jX )}(h``struct drm_gem_object *gem``h]j^ )}(hj+h]hstruct drm_gem_object *gem}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK_hj%ubjt )}(hhh]h)}(h GEM object.h]h GEM object.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hK_hjAubah}(h]h ]h"]h$]h&]uh1js hj%ubeh}(h]h ]h"]h$]h&]uh1jQ hj@hK_hj"ubjR )}(h(``struct vm_area_struct *vma`` vm area. h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hjdh]hstruct vm_area_struct *vma}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK`hj^ubjt )}(hhh]h)}(hvm area.h]hvm area.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhK`hjzubah}(h]h ]h"]h$]h&]uh1js hj^ubeh}(h]h ]h"]h$]h&]uh1jQ hjyhK`hj"ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKbhjubh)}(haThis function can be used as :c:type:`drm_gem_object_funcs.mmap ` callback.h](hThis function can be used as }(hjhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.mmap `h]j^ )}(hjh]hdrm_gem_object_funcs.mmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKahjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj܄hKahjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj;zhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_gem_ttm_dumb_map_offset (C function)c.drm_gem_ttm_dumb_map_offsethNtauh1jhj;zhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKzubj)}(hdrm_gem_ttm_dumb_map_offseth]j)}(hdrm_gem_ttm_dumb_map_offseth]hdrm_gem_ttm_dumb_map_offset}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKzubj>)}(hR(struct drm_file *file, struct drm_device *dev, uint32_t handle, uint64_t *offset)h](jD)}(hstruct drm_file *fileh](j)}(hj? h]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjdmodnameN classnameNjj)}j]j)}j}j*sbc.drm_gem_ttm_dumb_map_offsetasbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj<ubjD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjÅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjԅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjхubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjօmodnameN classnameNjj)}j]j~c.drm_gem_ttm_dumb_map_offsetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj<ubjD)}(huint32_t handleh](h)}(hhh]j)}(huint32_th]huint32_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj+modnameN classnameNjj)}j]j~c.drm_gem_ttm_dumb_map_offsetasbuh1hhj"ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hhandleh]hhandle}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj<ubjD)}(huint64_t *offseth](h)}(hhh]j)}(huint64_th]huint64_t}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjsmodnameN classnameNjj)}j]j~c.drm_gem_ttm_dumb_map_offsetasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj<ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKzubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKzubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKzhjhhubj )}(hhh]h)}(hCImplements struct :c:type:`drm_driver.dumb_map_offset `h](hImplements struct }(hjԆhhhNhNubh)}(h1:c:type:`drm_driver.dumb_map_offset `h]j^ )}(hjކh]hdrm_driver.dumb_map_offset}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj܆ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j~c.drm_gem_ttm_dumb_map_offsetasbj drm_driveruh1hhjzhKhjԆubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKzhjцhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKzubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj;zhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK~hjubjM )}(hhh](jR )}(h,``struct drm_file *file`` DRM file pointer. h](jX )}(h``struct drm_file *file``h]j^ )}(hj9h]hstruct drm_file *file}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK{hj3ubjt )}(hhh]h)}(hDRM file pointer.h]hDRM file pointer.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhK{hjOubah}(h]h ]h"]h$]h&]uh1js hj3ubeh}(h]h ]h"]h$]h&]uh1jQ hjNhK{hj0ubjR )}(h'``struct drm_device *dev`` DRM device. h](jX )}(h``struct drm_device *dev``h]j^ )}(hjrh]hstruct drm_device *dev}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK|hjlubjt )}(hhh]h)}(h DRM device.h]h DRM device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK|hjubah}(h]h ]h"]h$]h&]uh1js hjlubeh}(h]h ]h"]h$]h&]uh1jQ hjhK|hj0ubjR )}(h``uint32_t handle`` GEM handle h](jX )}(h``uint32_t handle``h]j^ )}(hjh]huint32_t handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK}hjubjt )}(hhh]h)}(h GEM handleh]h GEM handle}(hjćhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK}hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhK}hj0ubjR )}(hD``uint64_t *offset`` Returns the mapping's memory offset on success h](jX )}(h``uint64_t *offset``h]j^ )}(hjh]huint64_t *offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chK~hjއubjt )}(hhh]h)}(h.Returns the mapping's memory offset on successh]h0Returns the mapping’s memory offset on success}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK~hjubah}(h]h ]h"]h$]h&]uh1js hjއubeh}(h]h ]h"]h$]h&]uh1jQ hjhK~hj0ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjubh)}(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 }(hj5hhhNhNubh)}(h1:c:type:`drm_driver.dumb_map_offset `h]j^ )}(hj?h]hdrm_driver.dumb_map_offset}(hjAhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhj5ubh for TTM-based GEM drivers. TTM allocates the offset internally and drm_gem_ttm_dumb_map_offset() returns it for dumb-buffer implementations.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\hKhjubh)}(h=See struct :c:type:`drm_driver.dumb_map_offset `.h](h See struct }(hjghhhNhNubh)}(h1:c:type:`drm_driver.dumb_map_offset `h]j^ )}(hjqh]hdrm_driver.dumb_map_offset}(hjshhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjgubh.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:419: ./drivers/gpu/drm/drm_gem_ttm_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj;zhhhNhNubeh}(h]jah ]h"]"gem ttm helper functions referenceah$]h&]uh1hhjhhhhhMubeh}(h]jah ]h"]$the graphics execution manager (gem)ah$]h&]uh1hhhhhhhhKRubh)}(hhh](h)}(hVMA Offset Managerh]hVMA Offset Manager}(hj؈hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjՈhhhhhMubh)}(hXThe vma-manager is responsible to map arbitrary driver-dependent memory regions into the linear user address-space. It provides offsets to the caller which can then be used on the address_space of the drm-device. It takes care to not overlap regions, size them appropriately and to not confuse mm-core by inconsistent fake vm_pgoff fields. Drivers shouldn't use this for object placement in VMEM. This manager should only be used to manage mappings into linear user-space VMs.h]hXThe vma-manager is responsible to map arbitrary driver-dependent memory regions into the linear user address-space. It provides offsets to the caller which can then be used on the address_space of the drm-device. It takes care to not overlap regions, size them appropriately and to not confuse mm-core by inconsistent fake vm_pgoff fields. Drivers shouldn’t use this for object placement in VMEM. This manager should only be used to manage mappings into linear user-space VMs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:425: ./drivers/gpu/drm/drm_vma_manager.chK&hjՈhhubh)}(hWe use drm_mm as backend to manage object allocations. But it is highly optimized for alloc/free calls, not lookups. Hence, we use an rb-tree to speed up offset lookups.h]hWe use drm_mm as backend to manage object allocations. But it is highly optimized for alloc/free calls, not lookups. Hence, we use an rb-tree to speed up offset lookups.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:425: ./drivers/gpu/drm/drm_vma_manager.chK.hjՈhhubh)}(hYou must not use multiple offset managers on a single address_space. Otherwise, mm-core will be unable to tear down memory mappings as the VM will no longer be linear.h]hYou must not use multiple offset managers on a single address_space. Otherwise, mm-core will be unable to tear down memory mappings as the VM will no longer be linear.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:425: ./drivers/gpu/drm/drm_vma_manager.chK2hjՈhhubh)}(hXThis offset manager works on page-based addresses. That is, every argument and return code (with the exception of drm_vma_node_offset_addr()) is given in number of pages, not number of bytes. That means, object sizes and offsets must always be page-aligned (as usual). If you want to get a valid byte-based user-space address for a given offset, please see drm_vma_node_offset_addr().h]hXThis offset manager works on page-based addresses. That is, every argument and return code (with the exception of drm_vma_node_offset_addr()) is given in number of pages, not number of bytes. That means, object sizes and offsets must always be page-aligned (as usual). If you want to get a valid byte-based user-space address for a given offset, please see drm_vma_node_offset_addr().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:425: ./drivers/gpu/drm/drm_vma_manager.chK6hjՈhhubh)}(hXAdditionally to offset management, the vma offset manager also handles access management. For every open-file context that is allowed to access a given node, you must call drm_vma_node_allow(). Otherwise, an mmap() call on this open-file with the offset of the node will fail with -EACCES. To revoke access again, use drm_vma_node_revoke(). However, the caller is responsible for destroying already existing mappings, if required.h]hXAdditionally to offset management, the vma offset manager also handles access management. For every open-file context that is allowed to access a given node, you must call drm_vma_node_allow(). Otherwise, an mmap() call on this open-file with the offset of the node will fail with -EACCES. To revoke access again, use drm_vma_node_revoke(). However, the caller is responsible for destroying already existing mappings, if required.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:425: ./drivers/gpu/drm/drm_vma_manager.chK=hjՈhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_vma_offset_exact_lookup_locked (C function)$c.drm_vma_offset_exact_lookup_lockedhNtauh1jhjՈhhhNhNubj)}(hhh](j)}(hstruct drm_vma_offset_node * drm_vma_offset_exact_lookup_locked (struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h]j)}(hstruct drm_vma_offset_node *drm_vma_offset_exact_lookup_locked(struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h](j)}(hj? h]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKTubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhKTubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkmodnameN classnameNjj)}j]j)}j}"drm_vma_offset_exact_lookup_lockedsb$c.drm_vma_offset_exact_lookup_lockedasbuh1hhjFhhhjWhKTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhKTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhKTubj)}(h"drm_vma_offset_exact_lookup_lockedh]j)}(hjh]h"drm_vma_offset_exact_lookup_locked}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjWhKTubj>)}(hN(struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h](jD)}(h"struct drm_vma_offset_manager *mgrh](j)}(hj? h]hstruct}(hjĉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjщhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߉ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j$c.drm_vma_offset_exact_lookup_lockedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hlongh]hlong}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hstarth]hstart}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long pagesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjFhhhjWhKTubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjWhKTubah}(h]j=ah ](jjeh"]h$]h&]j j )j huh1jhjWhKThj?hhubj )}(hhh]h)}(hLook up node by exact addressh]hLook up node by exact address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKThjhhubah}(h]h ]h"]h$]h&]uh1j hj?hhhjWhKTubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKXhjubjM )}(hhh](jR )}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](jX )}(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&]uh1j] hj&ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKUhj"ubjt )}(hhh]h)}(hManager objecth]hManager object}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hKUhj>ubah}(h]h ]h"]h$]h&]uh1js hj"ubeh}(h]h ]h"]h$]h&]uh1jQ hj=hKUhjubjR )}(hC``unsigned long start`` Start address (page-based, not byte-based) h](jX )}(h``unsigned long start``h]j^ )}(hjah]hunsigned long start}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKVhj[ubjt )}(hhh]h)}(h*Start address (page-based, not byte-based)h]h*Start address (page-based, not byte-based)}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhKVhjwubah}(h]h ]h"]h$]h&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hjvhKVhjubjR )}(h4``unsigned long pages`` Size of object (page-based) h](jX )}(h``unsigned long pages``h]j^ )}(hjh]hunsigned long pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKWhjubjt )}(hhh]h)}(hSize of object (page-based)h]hSize of object (page-based)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKWhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjՋh]h Description}(hj׋hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjӋubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKYhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKXhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhK[hjubh)}(h&Node at exact start address **start**.h](hNode at exact start address }(hjhhhNhNubj7 )}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhK\hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_vma_offset_lock_lookup (C function)c.drm_vma_offset_lock_lookuphNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKkubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjahKkubj)}(hdrm_vma_offset_lock_lookuph]j)}(hdrm_vma_offset_lock_lookuph]hdrm_vma_offset_lock_lookup}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjahKkubj>)}(h$(struct drm_vma_offset_manager *mgr)h]jD)}(h"struct drm_vma_offset_manager *mgrh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jvsbc.drm_vma_offset_lock_lookupasbuh1hhjubj)}(h h]h }(hjΌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj܌hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjOhhhjahKkubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhjahKkubah}(h]jFah ](jjeh"]h$]h&]j j )j huh1jhjahKkhjHhhubj )}(hhh]h)}(h$Lock lookup for extended private useh]h$Lock lookup for extended private use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKkhjhhubah}(h]h ]h"]h$]h&]uh1j hjHhhhjahKkubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j+j( j+j) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKohj/ubjM )}(hhh]jR )}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](jX )}(h&``struct drm_vma_offset_manager *mgr``h]j^ )}(hjTh]h"struct drm_vma_offset_manager *mgr}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjRubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKlhjNubjt )}(hhh]h)}(hManager objecth]hManager object}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKlhjjubah}(h]h ]h"]h$]h&]uh1js hjNubeh}(h]h ]h"]h$]h&]uh1jQ hjihKlhjKubah}(h]h ]h"]h$]h&]uh1jL hj/ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKmhj/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:428: ./include/drm/drm_vma_manager.hhKqhj/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:428: ./include/drm/drm_vma_manager.hhKthj/ubh)}(h**Note**h]j7 )}(hjԍh]hNote}(hj֍hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjҍubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKwhj/ubh)}(h1You're in atomic-context while holding this lock!h]h3You’re in atomic-context while holding this lock!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKxhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_vma_offset_unlock_lookup (C function)c.drm_vma_offset_unlock_lookuphNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hKubj)}(hdrm_vma_offset_unlock_lookuph]j)}(hdrm_vma_offset_unlock_lookuph]hdrm_vma_offset_unlock_lookup}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj'hKubj>)}(h$(struct drm_vma_offset_manager *mgr)h]jD)}(h"struct drm_vma_offset_manager *mgrh](j)}(hj? h]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjvmodnameN classnameNjj)}j]j)}j}j<sbc.drm_vma_offset_unlock_lookupasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjNubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj'hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj'hKubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj'hKhjhhubj )}(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:428: ./include/drm/drm_vma_manager.hhKhj֎hhubah}(h]h ]h"]h$]h&]uh1j hjhhhj'hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubjM )}(hhh]jR )}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](jX )}(h&``struct drm_vma_offset_manager *mgr``h]j^ )}(hjh]h"struct drm_vma_offset_manager *mgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubjt )}(hhh]h)}(hManager objecth]hManager object}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj0ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj/hKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjSubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubh)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_vma_node_reset (C function)c.drm_vma_node_resethNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_vma_node_reseth]j)}(hdrm_vma_node_reseth]hdrm_vma_node_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj>)}(h"(struct drm_vma_offset_node *node)h]jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hj׏hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӏubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӏubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_vma_node_resetasbuh1hhjӏubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӏubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӏubj)}(hnodeh]hnode}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӏubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjϏubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h)}(hInitialize or reset node objecth]hInitialize or reset node object}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjWhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jrj( jrj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjzubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjvubjM )}(hhh]jR )}(hA``struct drm_vma_offset_node *node`` Node to initialize or reset h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubjt )}(hhh]h)}(hNode to initialize or reseth]hNode to initialize or reset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjvubh)}(h**Description**h]j7 )}(hj֐h]h Description}(hjؐhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjԐubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjvubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjvubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_vma_node_start (C function)c.drm_vma_node_starthNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hunsignedh]hunsigned}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hKubj)}(hlongh]hlong}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hKubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hKubj)}(hdrm_vma_node_starth]j)}(hdrm_vma_node_starth]hdrm_vma_node_start}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj8hKubj>)}(h((const struct drm_vma_offset_node *node)h]jD)}(h&const struct drm_vma_offset_node *nodeh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jisbc.drm_vma_node_startasbuh1hhjubj)}(h h]h }(hjܑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj{ubah}(h]h ]h"]h$]h&]jjuh1j=hj&hhhj8hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj8hKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj8hKhjhhubj )}(hhh]h)}(h.Return start address for page-based addressingh]h.Return start address for page-based addressing}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj8hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j9j( j9j) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjAubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj=ubjM )}(hhh]jR )}(h;``const struct drm_vma_offset_node *node`` Node to inspect h](jX )}(h*``const struct drm_vma_offset_node *node``h]j^ )}(hjbh]h&const struct drm_vma_offset_node *node}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj`ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj\ubjt )}(hhh]h)}(hNode to inspecth]hNode to inspect}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhKhjxubah}(h]h ]h"]h$]h&]uh1js hj\ubeh}(h]h ]h"]h$]h&]uh1jQ hjwhKhjYubah}(h]h ]h"]h$]h&]uh1jL hj=ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj=ubh)}(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:428: ./include/drm/drm_vma_manager.hhKhj=ubh)}(h **Return**h]j7 )}(hjĒh]hReturn}(hjƒhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj’ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj=ubh)}(heStart address of **node** for page-based addressing. 0 if the node does not have an offset allocated.h](hStart address of }(hjڒhhhNhNubj7 )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjڒ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:428: ./include/drm/drm_vma_manager.hhKhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_vma_node_size (C function)c.drm_vma_node_sizehNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hKubj)}(hlongh]hlong}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hKubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hKubj)}(hdrm_vma_node_sizeh]j)}(hdrm_vma_node_sizeh]hdrm_vma_node_size}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj)hKubj>)}(h"(struct drm_vma_offset_node *node)h]jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jZsbc.drm_vma_node_sizeasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hnodeh]hnode}(hj͓hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjlubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj)hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj)hKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj)hKhjhhubj )}(hhh]h)}(hReturn size (page-based)h]hReturn size (page-based)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj)hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubjM )}(hhh]jR )}(h5``struct drm_vma_offset_node *node`` Node to inspect h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hj8h]h struct drm_vma_offset_node *node}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj2ubjt )}(hhh]h)}(hNode to inspecth]hNode to inspect}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhKhjNubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hjMhKhj/ubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubh)}(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:428: ./include/drm/drm_vma_manager.hhKhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubh)}(hUSize of **node** as number of pages. 0 if the node does not have an offset allocated.h](hSize of }(hjhhhNhNubj7 )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubhE 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:428: ./include/drm/drm_vma_manager.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_vma_node_offset_addr (C function)c.drm_vma_node_offset_addrhNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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]j)}(h__u64h]h__u64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_vma_node_offset_addrsbc.drm_vma_node_offset_addrasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_vma_node_offset_addrh]j)}(hjh]hdrm_vma_node_offset_addr}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj>)}(h"(struct drm_vma_offset_node *node)h]jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]jc.drm_vma_node_offset_addrasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(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:428: ./include/drm/drm_vma_manager.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jܕj( jܕj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubjM )}(hhh]jR )}(h8``struct drm_vma_offset_node *node`` Linked offset node h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubjt )}(hhh]h)}(hLinked offset nodeh]hLinked offset node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj>ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubh)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubh)}(h **Return**h]j7 )}(hjgh]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjeubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubh)}(h^Offset of **node** for byte-based addressing. 0 if the node does not have an object allocated.h](h Offset of }(hj}hhhNhNubj7 )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj}ubhL for byte-based addressing. 0 if the node does not have an object allocated.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_vma_node_unmap (C function)c.drm_vma_node_unmaphNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKubj)}(h h]h }(hj͖hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj̖hKubj)}(hdrm_vma_node_unmaph]j)}(hdrm_vma_node_unmaph]hdrm_vma_node_unmap}(hjߖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۖubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj̖hKubj>)}(hF(struct drm_vma_offset_node *node, struct address_space *file_mapping)h](jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_vma_node_unmapasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h"struct address_space *file_mappingh](j)}(hj? h]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j5c.drm_vma_node_unmapasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h file_mappingh]h file_mapping}(hjėhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj̖hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj̖hKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj̖hKhjhhubj )}(hhh]h)}(hUnmap offset nodeh]hUnmap offset node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj̖hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj ubjM )}(hhh](jR )}(h1``struct drm_vma_offset_node *node`` Offset node h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hj/h]h struct drm_vma_offset_node *node}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj-ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj)ubjt )}(hhh]h)}(h Offset nodeh]h Offset node}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKhjEubah}(h]h ]h"]h$]h&]uh1js hj)ubeh}(h]h ]h"]h$]h&]uh1jQ hjDhKhj&ubjR )}(hL``struct address_space *file_mapping`` Address space to unmap **node** from h](jX )}(h&``struct address_space *file_mapping``h]j^ )}(hjhh]h"struct address_space *file_mapping}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjfubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjbubjt )}(hhh]h)}(h$Address space to unmap **node** fromh](hAddress space to unmap }(hjhhhNhNubj7 )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh from}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}hKhj~ubah}(h]h ]h"]h$]h&]uh1js hjbubeh}(h]h ]h"]h$]h&]uh1jQ hj}hKhj&ubeh}(h]h ]h"]h$]h&]uh1jL hj ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj ubh)}(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˘hhhNhNubj7 )}(h**file_mapping**h]h file_mapping}(hjӘhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj˘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:428: ./include/drm/drm_vma_manager.hhKhj ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_vma_node_verify_access (C function)c.drm_vma_node_verify_accesshNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hKubj)}(hdrm_vma_node_verify_accessh]j)}(hdrm_vma_node_verify_accessh]hdrm_vma_node_verify_access}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj)hKubj>)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjxmodnameN classnameNjj)}j]j)}j}j>sbc.drm_vma_node_verify_accessasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjPubjD)}(hstruct drm_file *tagh](j)}(hj? h]hstruct}(hjʙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƙubj)}(h h]h }(hjיhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƙubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_vma_node_verify_accessasbuh1hhjƙubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƙubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƙubj)}(htagh]htag}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƙubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjPubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj)hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj)hKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj)hKhjhhubj )}(hhh]h)}(h"Access verification helper for TTMh]h"Access verification helper for TTM}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjHhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj)hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jcj( jcj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjkubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjgubjM )}(hhh](jR )}(h1``struct drm_vma_offset_node *node`` Offset node h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubjt )}(hhh]h)}(h Offset nodeh]h Offset node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h.``struct drm_file *tag`` Tag of file to check h](jX )}(h``struct drm_file *tag``h]j^ )}(hjŚh]hstruct drm_file *tag}(hjǚhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjÚubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjubjt )}(hhh]h)}(hTag of file to checkh]hTag of file to check}(hjޚhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjښhKhjۚubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjښhKhjubeh}(h]h ]h"]h$]h&]uh1jL hjgubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjgubh)}(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 }(hjhhhNhNubj7 )}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh is granted access to }(hjhhhNhNubj7 )}(h**node**h]hnode}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubho. It is the same as drm_vma_node_is_allowed() but suitable as drop-in helper for TTM verify_access() callbacks.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjgubh)}(h **Return**h]j7 )}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjIubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjgubh)}(h*0 if access is granted, -EACCES otherwise.h]h*0 if access is granted, -EACCES otherwise.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:428: ./include/drm/drm_vma_manager.hhKhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_vma_offset_manager_init (C function)c.drm_vma_offset_manager_inithNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKHubj)}(hdrm_vma_offset_manager_inith]j)}(hdrm_vma_offset_manager_inith]hdrm_vma_offset_manager_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKHubj>)}(hS(struct drm_vma_offset_manager *mgr, unsigned long page_offset, unsigned long size)h](jD)}(h"struct drm_vma_offset_manager *mgrh](j)}(hj? h]hstruct}(hj͛hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɛubj)}(h h]h }(hjڛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɛubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_vma_offset_manager_initasbuh1hhjɛubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɛubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɛubj)}(hmgrh]hmgr}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɛubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjśubjD)}(hunsigned long page_offseth](j)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hlongh]hlong}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h page_offseth]h page_offset}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjśubjD)}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjȜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjśubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKHubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKHubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKHhjhhubj )}(hhh]h)}(hInitialize new offset-managerh]hInitialize new offset-manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKHhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKHubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKLhjubjM )}(hhh](jR )}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](jX )}(h&``struct drm_vma_offset_manager *mgr``h]j^ )}(hj3h]h"struct drm_vma_offset_manager *mgr}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj1ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKIhj-ubjt )}(hhh]h)}(hManager objecth]hManager object}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhKIhjIubah}(h]h ]h"]h$]h&]uh1js hj-ubeh}(h]h ]h"]h$]h&]uh1jQ hjHhKIhj*ubjR )}(hK``unsigned long page_offset`` Offset of available memory area (page-based) h](jX )}(h``unsigned long page_offset``h]j^ )}(hjlh]hunsigned long page_offset}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKJhjfubjt )}(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&]uh1hhjhKJhjubah}(h]h ]h"]h$]h&]uh1js hjfubeh}(h]h ]h"]h$]h&]uh1jQ hjhKJhj*ubjR )}(hJ``unsigned long size`` Size of available address space range (page-based) h](jX )}(h``unsigned long size``h]j^ )}(hjh]hunsigned long size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKKhjubjt )}(hhh]h)}(h2Size of available address space range (page-based)h]h2Size of available address space range (page-based)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKKhj*ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjޝubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKMhjubh)}(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 }(hjhhhNhNubj7 )}(h**page_offset**h]h page_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh and }(hjhhhNhNubj7 )}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh2. Both are interpreted as page-numbers, not bytes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKLhjubh)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_vma_offset_manager_destroy (C function) c.drm_vma_offset_manager_destroyhNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chK_ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjfhK_ubj)}(hdrm_vma_offset_manager_destroyh]j)}(hdrm_vma_offset_manager_destroyh]hdrm_vma_offset_manager_destroy}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjfhK_ubj>)}(h$(struct drm_vma_offset_manager *mgr)h]jD)}(h"struct drm_vma_offset_manager *mgrh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}j{sb c.drm_vma_offset_manager_destroyasbuh1hhjubj)}(h h]h }(hjӞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjThhhjfhK_ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjPhhhjfhK_ubah}(h]jKah ](jjeh"]h$]h&]j j )j huh1jhjfhK_hjMhhubj )}(hhh]h)}(hDestroy offset managerh]hDestroy offset manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chK_hjhhubah}(h]h ]h"]h$]h&]uh1j hjMhhhjfhK_ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j0j( j0j) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj8ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKchj4ubjM )}(hhh]jR )}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](jX )}(h&``struct drm_vma_offset_manager *mgr``h]j^ )}(hjYh]h"struct drm_vma_offset_manager *mgr}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjWubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chK`hjSubjt )}(hhh]h)}(hManager objecth]hManager object}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhK`hjoubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjnhK`hjPubah}(h]h ]h"]h$]h&]uh1jL hj4ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKbhj4ubh)}(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:431: ./drivers/gpu/drm/drm_vma_manager.chKahj4ubh)}(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:431: ./drivers/gpu/drm/drm_vma_manager.chKfhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_vma_offset_lookup_locked (C function)c.drm_vma_offset_lookup_lockedhNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKpubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j)}j}drm_vma_offset_lookup_lockedsbc.drm_vma_offset_lookup_lockedasbuh1hhjhhhjhKpubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKpubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKpubj)}(hdrm_vma_offset_lookup_lockedh]j)}(hj%h]hdrm_vma_offset_lookup_locked}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKpubj>)}(hN(struct drm_vma_offset_manager *mgr, unsigned long start, unsigned long pages)h](jD)}(h"struct drm_vma_offset_manager *mgrh](j)}(hj? h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j#c.drm_vma_offset_lookup_lockedasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubjD)}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hjҠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΠubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΠubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΠubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΠubj)}(hstarth]hstart}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΠubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubjD)}(hunsigned long pagesh](j)}(hunsignedh]hunsigned}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpagesh]hpages}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjZubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKpubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKpubah}(h]j۟ah ](jjeh"]h$]h&]j j )j huh1jhjhKphjݟhhubj )}(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:431: ./drivers/gpu/drm/drm_vma_manager.chKphjhhubah}(h]h ]h"]h$]h&]uh1j hjݟhhhjhKpubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjՈhNhNubj- )}(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(). **Example** :: 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); **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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKthjubjM )}(hhh](jR )}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](jX )}(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&]uh1j] hjġubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKqhjubjt )}(hhh]h)}(hManager objecth]hManager object}(hjߡhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjۡhKqhjܡubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjۡhKqhjubjR )}(h>``unsigned long start`` Start address for object (page-based) h](jX )}(h``unsigned long start``h]j^ )}(hjh]hunsigned long start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKrhjubjt )}(hhh]h)}(h%Start address for object (page-based)h]h%Start address for object (page-based)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKrhjubjR )}(h4``unsigned long pages`` Size of object (page-based) h](jX )}(h``unsigned long pages``h]j^ )}(hj8h]hunsigned long pages}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKshj2ubjt )}(hhh]h)}(hSize of object (page-based)h]hSize of object (page-based)}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhKshjNubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hjMhKshjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKuhjubh)}(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, }(hjhhhNhNubj7 )}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh 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 }(hjhhhNhNubj7 )}(h **pages**h]hpages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKyhjubh)}(h **Example**h]j7 )}(hj͢h]hExample}(hjϢhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjˢubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chK}hjubj )}(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);}hjsbah}(h]h ]h"]h$]h&]jjuh1j h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_vma_offset_add (C function)c.drm_vma_offset_addhNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhjGhKubj)}(hdrm_vma_offset_addh]j)}(hdrm_vma_offset_addh]hdrm_vma_offset_add}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhjGhKubj>)}(h[(struct drm_vma_offset_manager *mgr, struct drm_vma_offset_node *node, unsigned long pages)h](jD)}(h"struct drm_vma_offset_manager *mgrh](j)}(hj? h]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}j\sbc.drm_vma_offset_addasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hjh]h*}(hj£hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hmgrh]hmgr}(hjϣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjnubjD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_vma_offset_addasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjnubjD)}(hunsigned long pagesh](j)}(hunsignedh]hunsigned}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hlongh]hlong}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjnubeh}(h]h ]h"]h$]h&]jjuh1j=hj5hhhjGhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1hhhjGhKubah}(h]j,ah ](jjeh"]h$]h&]j j )j huh1jhjGhKhj.hhubj )}(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:431: ./drivers/gpu/drm/drm_vma_manager.chKhjhhubah}(h]h ]h"]h$]h&]uh1j hj.hhhjGhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jҤj( jҤj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjܤh]h Parameters}(hjޤhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjڤubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhj֤ubjM )}(hhh](jR )}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](jX )}(h&``struct drm_vma_offset_manager *mgr``h]j^ )}(hjh]h"struct drm_vma_offset_manager *mgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjubjt )}(hhh]h)}(hManager objecth]hManager object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h6``struct drm_vma_offset_node *node`` Node to be added h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hj4h]h struct drm_vma_offset_node *node}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhj.ubjt )}(hhh]h)}(hNode to be addedh]hNode to be added}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKhjJubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hjIhKhjubjR )}(hS``unsigned long pages`` Allocation size visible to user-space (in number of pages) h](jX )}(h``unsigned long pages``h]j^ )}(hjmh]hunsigned long pages}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjgubjt )}(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&]uh1js hjgubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubeh}(h]h ]h"]h$]h&]uh1jL hj֤ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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. }(hjhhhNhNubj7 )}(h **pages**h]hpages}(hjƥhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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.}(hjߥhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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](j7 )}(h **pages**h]hpages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhj֤ubh)}(h **Return**h]j7 )}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhj֤ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_vma_offset_remove (C function)c.drm_vma_offset_removehNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj`hKubj)}(hdrm_vma_offset_removeh]j)}(hdrm_vma_offset_removeh]hdrm_vma_offset_remove}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNhhhj`hKubj>)}(hF(struct drm_vma_offset_manager *mgr, struct drm_vma_offset_node *node)h](jD)}(h"struct drm_vma_offset_manager *mgrh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_managerh]hdrm_vma_offset_manager}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jusbc.drm_vma_offset_removeasbuh1hhjubj)}(h h]h }(hjͦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjۦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj!modnameN classnameNjj)}j]jɦc.drm_vma_offset_removeasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjNhhhj`hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjJhhhj`hKubah}(h]jEah ](jjeh"]h$]h&]j j )j huh1jhj`hKhjGhhubj )}(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:431: ./drivers/gpu/drm/drm_vma_manager.chKhjhhubah}(h]h ]h"]h$]h&]uh1j hjGhhhj`hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjubjM )}(hhh](jR )}(h6``struct drm_vma_offset_manager *mgr`` Manager object h](jX )}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjubjt )}(hhh]h)}(hManager objecth]hManager object}(hjܧhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjاhKhj٧ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjاhKhjubjR )}(h8``struct drm_vma_offset_node *node`` Node to be removed h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjubjt )}(hhh]h)}(hNode to be removedh]hNode to be removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj5ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_vma_node_allow (C function)c.drm_vma_node_allowhNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhM'ubj)}(hdrm_vma_node_allowh]j)}(hdrm_vma_node_allowh]hdrm_vma_node_allow}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjhM'ubj>)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjƨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjרhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԨubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj٨modnameN classnameNjj)}j]j)}j}jsbc.drm_vma_node_allowasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_file *tagh](j)}(hj? h]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjKmodnameN classnameNjj)}j]jc.drm_vma_node_allowasbuh1hhj'ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(htagh]htag}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjxhhhjhM'ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhM'ubah}(h]joah ](jjeh"]h$]h&]j j )j huh1jhjhM'hjqhhubj )}(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:431: ./drivers/gpu/drm/drm_vma_manager.chM'hjhhubah}(h]h ]h"]h$]h&]uh1j hjqhhhjhM'ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jĩj( jĩj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjΩh]h Parameters}(hjЩhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj̩ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM+hjȩubjM )}(hhh](jR )}(h4``struct drm_vma_offset_node *node`` Node to modify h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM(hjubjt )}(hhh]h)}(hNode to modifyh]hNode to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM(hjubjR )}(h/``struct drm_file *tag`` Tag of file to remove h](jX )}(h``struct drm_file *tag``h]j^ )}(hj&h]hstruct drm_file *tag}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM)hj ubjt )}(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&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj;hM)hjubeh}(h]h ]h"]h$]h&]uh1jL hjȩubh)}(h**Description**h]j7 )}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj_ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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 }(hjwhhhNhNubj7 )}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjwubh5 to the list of allowed open-files for this node. If }(hjwhhhNhNubj7 )}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjwubh7 is already on this list, the ref-count is incremented.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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:431: ./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:431: ./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:431: ./drivers/gpu/drm/drm_vma_manager.chM4hjȩubh)}(h **Return**h]j7 )}(hj٪h]hReturn}(hj۪hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjתubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM7hjȩubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_vma_node_allow_once (C function)c.drm_vma_node_allow_oncehNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMAubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj,hMAubj)}(hdrm_vma_node_allow_onceh]j)}(hdrm_vma_node_allow_onceh]hdrm_vma_node_allow_once}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj,hMAubj>)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj{modnameN classnameNjj)}j]j)}j}jAsbc.drm_vma_node_allow_onceasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjSubjD)}(hstruct drm_file *tagh](j)}(hj? h]hstruct}(hjͫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɫubj)}(h h]h }(hjګhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɫubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_vma_node_allow_onceasbuh1hhjɫubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɫubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɫubj)}(htagh]htag}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɫubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjSubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj,hMAubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj,hMAubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj,hMAhjhhubj )}(hhh]h)}(h&Add open-file to list of allowed usersh]h&Add open-file to list of allowed users}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMAhjKhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj,hMAubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jfj( jfj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjph]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMEhjjubjM )}(hhh](jR )}(h4``struct drm_vma_offset_node *node`` Node to modify h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hjh]h struct drm_vma_offset_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMBhjubjt )}(hhh]h)}(hNode to modifyh]hNode to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMBhjubjR )}(h/``struct drm_file *tag`` Tag of file to remove h](jX )}(h``struct drm_file *tag``h]j^ )}(hjȬh]hstruct drm_file *tag}(hjʬhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjƬubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMChj¬ubjt )}(hhh]h)}(hTag of file to removeh]hTag of file to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjݬhMChjެubah}(h]h ]h"]h$]h&]uh1js hj¬ubeh}(h]h ]h"]h$]h&]uh1jQ hjݬhMChjubeh}(h]h ]h"]h$]h&]uh1jL hjjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMEhjjubh)}(h)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j)}j}jѭsbc.drm_vma_node_revokeasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_file *tagh](j)}(hj? h]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj}modnameN classnameNjj)}j]j%c.drm_vma_node_revokeasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(htagh]htag}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMZubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMZubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMZhjhhubj )}(hhh]h)}(h+Remove open-file from list of allowed usersh]h+Remove open-file from list of allowed users}(hjޮhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMZhjۮhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMZubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM^hjubjM )}(hhh](jR )}(h4``struct drm_vma_offset_node *node`` Node to modify h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hjh]h struct drm_vma_offset_node *node}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM[hjubjt )}(hhh]h)}(hNode to modifyh]hNode to modify}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM[hj5ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj4hM[hjubjR )}(h/``struct drm_file *tag`` Tag of file to remove h](jX )}(h``struct drm_file *tag``h]j^ )}(hjXh]hstruct drm_file *tag}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM\hjRubjt )}(hhh]h)}(hTag of file to removeh]hTag of file to remove}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM\hjnubah}(h]h ]h"]h$]h&]uh1js hjRubeh}(h]h ]h"]h$]h&]uh1jQ hjmhM\hjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM^hjubh)}(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 }(hjhhhNhNubj7 )}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh& in the list of allowed open-files on }(hjhhhNhNubj7 )}(h**node**h]hnode}(hjïhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh). If the ref-count drops to zero, remove }(hjhhhNhNubj7 )}(h**tag**h]htag}(hjկhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubhJ from the list. You must call this once for every drm_vma_node_allow() on }(hjhhhNhNubj7 )}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chM]hjubh)}(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:431: ./drivers/gpu/drm/drm_vma_manager.chMahjubh)}(h/If **tag** is not on the list, nothing is done.h](hIf }(hjhhhNhNubj7 )}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh% is not on the list, nothing is done.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMchjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_vma_node_is_allowed (C function)c.drm_vma_node_is_allowedhNtauh1jhjՈhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj]hMubj)}(hdrm_vma_node_is_allowedh]j)}(hdrm_vma_node_is_allowedh]hdrm_vma_node_is_allowed}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhj]hMubj>)}(h8(struct drm_vma_offset_node *node, struct drm_file *tag)h](jD)}(h struct drm_vma_offset_node *nodeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_vma_offset_nodeh]hdrm_vma_offset_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jrsbc.drm_vma_node_is_allowedasbuh1hhjubj)}(h h]h }(hjʰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjذhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_file *tagh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jưc.drm_vma_node_is_allowedasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htagh]htag}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjLhhhj]hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHhhhj]hMubah}(h]jCah ](jjeh"]h$]h&]j j )j huh1jhj]hMhjEhhubj )}(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:431: ./drivers/gpu/drm/drm_vma_manager.chMhj|hhubah}(h]h ]h"]h$]h&]uh1j hjEhhhj]hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjՈhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMhjubjM )}(hhh](jR )}(h3``struct drm_vma_offset_node *node`` Node to check h](jX )}(h$``struct drm_vma_offset_node *node``h]j^ )}(hjh]h struct drm_vma_offset_node *node}(hj±hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMhjubjt )}(hhh]h)}(h Node to checkh]h Node to check}(hjٱhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjձhMhjֱubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjձhMhjubjR )}(h/``struct drm_file *tag`` Tag of file to remove h](jX )}(h``struct drm_file *tag``h]j^ )}(hjh]hstruct drm_file *tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMhjubjt )}(hhh]h)}(hTag of file to removeh]hTag of file to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./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 }(hjJhhhNhNubj7 )}(h**node**h]hnode}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjJubh whether }(hjJhhhNhNubj7 )}(h**tag**h]htag}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjJubhK is currently on the list of allowed open-files (see drm_vma_node_allow()).}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMhjubh)}(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:431: ./drivers/gpu/drm/drm_vma_manager.chMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMhjubh)}(htrue if **filp** is on the listh](htrue if }(hjhhhNhNubj7 )}(h**filp**h]hfilp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh is on the list}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:431: ./drivers/gpu/drm/drm_vma_manager.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjՈhhhNhNubhtarget)}(h.. _prime_buffer_sharing:h]h}(h]h ]h"]h$]h&]hjuh1j̲hMhjՈhhhhubeh}(h]jah ]h"]vma offset managerah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hPRIME Buffer Sharingh]hPRIME Buffer Sharing}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj߲hhhhhMubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj߲hhubh)}(hhh](h)}(hOverview and Lifetime Rulesh]hOverview and Lifetime Rules}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhMubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:446: ./drivers/gpu/drm/drm_prime.chK/hjhhubh)}(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^ )}(hj(h]hdrm_driver.gem_prime_import}(hj*hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:446: ./drivers/gpu/drm/drm_prime.chK5hjubh hooks. }(hjhhhNhNubh)}(h:c:type:`dma_buf_ops`h]j^ )}(hjLh]h dma_buf_ops}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhjEhK5hjubh{ implementations for drivers are all individually exported for drivers which need to overwrite or reimplement some of them.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjEhK5hjhhubh)}(hhh](h)}(h"Reference Counting for GEM Driversh]h"Reference Counting for GEM Drivers}(hjvhhhNhNubah}(h]h ]h"]h$]h&]hj;uh1hhjshNhNubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_bufuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:446: ./drivers/gpu/drm/drm_prime.chK=hjubh< holds a reference to the exported buffer object, usually a }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhK=hjubhO. It takes this reference in the PRIME_HANDLE_TO_FD IOCTL, when it first calls }(hjhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j^ )}(hjճh]hdrm_gem_object_funcs.export}(hj׳hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjӳubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhjhK=hjubh, and stores the exporting GEM object in the }(hjhhhNhNubh)}(h :c:type:`dma_buf.priv `h]j^ )}(hjh]h dma_buf.priv}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_bufuh1hhjhK=hjubhL field. This reference needs to be released when the final reference to the }(hjhhhNhNubh)}(h:c:type:`dma_buf`h]j^ )}(hjh]hdma_buf}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_bufuh1hhjhK=hjubh itself is dropped and its }(hjhhhNhNubh)}(h+:c:type:`dma_buf_ops.release `h]j^ )}(hj>h]hdma_buf_ops.release}(hj@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhjhK=hjubh1 function is called. For GEM-based drivers, the }(hjhhhNhNubh)}(h:c:type:`dma_buf`h]j^ )}(hjah]hdma_buf}(hjchhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_bufuh1hhjhK=hjubh` should be exported using drm_gem_dmabuf_export() and then released by drm_gem_dmabuf_release().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK=hjsubh)}(hXtThus 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 :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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_prime_file_privateuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:446: ./drivers/gpu/drm/drm_prime.chKFhjubh] only retain a weak reference, which is cleaned up when the corresponding object is released.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKFhjsubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:446: ./drivers/gpu/drm/drm_prime.chKPhjsubeh}(h]jAah ]h"]"reference counting for gem driversah$]h&]uh1hhjhhhNhNubeh}(h]j"ah ]h"]overview and lifetime rulesah$]h&]uh1hhj߲hhhhhMubh)}(hhh](h)}(hPRIME Helper Functionsh]hPRIME Helper Functions}(hjڴhhhNhNubah}(h]h ]h"]h$]h&]hjiuh1hhj״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 }(hjhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j^ )}(hjh]hdrm_gem_object_funcs.export}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:452: ./drivers/gpu/drm/drm_prime.chM(hjubh and }(hjhhhNhNubh)}(h2:c:type:`drm_driver.gem_prime_import `h]j^ )}(hjh]hdrm_driver.gem_prime_import}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhjhM(hjubh 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:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM(hj״hhubh)}(hhh](h)}(hExporting buffersh]hExporting buffers}(hj@hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj=hNhNubh)}(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 }(hjNhhhNhNubh)}(hB:c:type:`drm_gem_object_funcs.get_sg_table `h]j^ )}(hjXh]h!drm_gem_object_funcs.get_sg_table}(hjZhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:452: ./drivers/gpu/drm/drm_prime.chM1hjNubh. If }(hjNhhhNhNubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjzubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhjuhM1hjNubh< is unimplemented, exports into another device are rejected.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhM1hj=ubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:452: ./drivers/gpu/drm/drm_prime.chM7hj=ubh)}(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:452: ./drivers/gpu/drm/drm_prime.chM;hj=ubh)}(hGFIXME: The underlying helper functions are named rather inconsistently.h]hGFIXME: The underlying helper functions are named rather inconsistently.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:452: ./drivers/gpu/drm/drm_prime.chM?hj=ubeh}(h]jah ]h"]exporting buffersah$]h&]uh1hhj״hhhNhNubh)}(hhh](h)}(hImporting buffersh]hImporting buffers}(hjڵhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj׵hNhNubh)}(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 }(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:452: ./drivers/gpu/drm/drm_prime.chMDhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMDhj׵ubh)}(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:452: ./drivers/gpu/drm/drm_prime.chMGhj׵ubeh}(h]jah ]h"]importing buffersah$]h&]uh1hhj״hhhNhNubeh}(h]joah ]h"]prime helper functionsah$]h&]uh1hhj߲hhhhhMubh)}(hhh](h)}(hPRIME Function Referencesh]hPRIME Function References}(hj:hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj7hhhhhMubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_prime_file_private (C struct)c.drm_prime_file_privatehNtauh1jhj7hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:458: ./include/drm/drm_prime.hhNubj)}(hhh](j)}(hdrm_prime_file_privateh]j)}(hstruct drm_prime_file_privateh](j)}(hj? h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:458: ./include/drm/drm_prime.hhKubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjohKubj)}(hdrm_prime_file_privateh]j)}(hj\h]hdrm_prime_file_private}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhjohKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjohKubah}(h]jTah ](jjeh"]h$]h&]j j )j huh1jhjohKhjWhhubj )}(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:458: ./include/drm/drm_prime.hhK(hjhhubah}(h]h ]h"]h$]h&]uh1j hjWhhhjohKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hjVhNubj- )}(hE**Definition**:: struct drm_prime_file_private { }; **Members**h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjȶhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjĶubh:}(hjĶhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:458: ./include/drm/drm_prime.hhK,hjubj )}(h"struct drm_prime_file_private { };h]h"struct drm_prime_file_private { };}hjsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:458: ./include/drm/drm_prime.hhK.hjubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:458: ./include/drm/drm_prime.hhK1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhjVhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:458: ./include/drm/drm_prime.hhK4hj7hhubh)}(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 }(hj'hhhNhNubh)}(h":c:type:`struct dma_buf `h]j^ )}(hj1h]hstruct dma_buf}(hj3hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj/ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_bufuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:458: ./include/drm/drm_prime.hhK)hj'ubh and handle caches for each }(hj'hhhNhNubh)}(h$:c:type:`struct drm_file `h]j^ )}(hjUh]hstruct drm_file}(hjWhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_fileuh1hhjNhK)hj'ubh used by the PRIME core code.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhK)hj7hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_dmabuf_export (C function)c.drm_gem_dmabuf_exporthNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gem_dmabuf_exportsbc.drm_gem_dmabuf_exportasbuh1hhjhhhjhKubj)}(h h]h }(hjշhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_gem_dmabuf_exporth]j)}(hjҷh]hdrm_gem_dmabuf_export}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj>)}(h>(struct drm_device *dev, struct dma_buf_export_info *exp_info)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj/modnameN classnameNjj)}j]jзc.drm_gem_dmabuf_exportasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdevh]hdev}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h$struct dma_buf_export_info *exp_infoh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(hdma_buf_export_infoh]hdma_buf_export_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jзc.drm_gem_dmabuf_exportasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hjh]h*}(hjɸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hexp_infoh]hexp_info}(hjָhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h)}(h/:c:type:`dma_buf` export implementation for GEMh](h)}(h:c:type:`dma_buf`h]j^ )}(hjh]hdma_buf}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jзc.drm_gem_dmabuf_exportasbj dma_bufuh1hhjhKhjubh export implementation for GEM}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j<j( j<j) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjDubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chKhj@ubjM )}(hhh](jR )}(hA``struct drm_device *dev`` parent device for the exported dmabuf h](jX )}(h``struct drm_device *dev``h]j^ )}(hjeh]hstruct drm_device *dev}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjcubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chKhj_ubjt )}(hhh]h)}(h%parent device for the exported dmabufh]h%parent device for the exported dmabuf}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1js hj_ubeh}(h]h ]h"]h$]h&]uh1jQ hjzhKhj\ubjR )}(hY``struct dma_buf_export_info *exp_info`` the export information used by dma_buf_export() h](jX )}(h(``struct dma_buf_export_info *exp_info``h]j^ )}(hjh]h$struct dma_buf_export_info *exp_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chKhjubjt )}(hhh]h)}(h/the export information used by dma_buf_export()h]h/the export information used by dma_buf_export()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhj\ubeh}(h]h ]h"]h$]h&]uh1jL hj@ubh)}(h**Description**h]j7 )}(hjٹh]h Description}(hj۹hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj׹ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chKhj@ubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_device`h]j^ )}(hjh]h drm_device}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chKhjubh and the exported }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhKhjubh (stored in }(hjhhhNhNubh)}(h8:c:type:`dma_buf_export_info.priv `h]j^ )}(hj@h]hdma_buf_export_info.priv}(hjBhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_export_infouh1hhjhKhjubh0) which is released by drm_gem_dmabuf_release().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj@ubh)}(hReturns the new dmabuf.h]hReturns the new dmabuf.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chKhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_gem_dmabuf_release (C function)c.drm_gem_dmabuf_releasehNtauh1jhj7hhhNhNubj)}(hhh](j)}(h5void drm_gem_dmabuf_release (struct dma_buf *dma_buf)h]j)}(h4void drm_gem_dmabuf_release(struct dma_buf *dma_buf)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_dmabuf_releaseh]j)}(hdrm_gem_dmabuf_releaseh]hdrm_gem_dmabuf_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h(struct dma_buf *dma_buf)h]jD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjӺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϺubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϺubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_dmabuf_releaseasbuh1hhjϺubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϺubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϺubj)}(hdma_bufh]hdma_buf}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϺubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj˺ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j c.drm_gem_dmabuf_releaseasbj dma_bufuh1hhjhKhjVubh release implementation for GEM}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjShhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh]jR )}(h2``struct dma_buf *dma_buf`` buffer to be released h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hjh]hstruct dma_buf *dma_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjлhMhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./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 }(hj hhhNhNubh)}(h:c:type:`dma_buf_ops`h]j^ )}(hjh]h dma_buf_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj ubhx structure as the release callback. drm_gem_dmabuf_release() should be used in conjunction with drm_gem_dmabuf_export().}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gem_prime_fd_to_handle (C function)c.drm_gem_prime_fd_to_handlehNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjlhMubj)}(hdrm_gem_prime_fd_to_handleh]j)}(hdrm_gem_prime_fd_to_handleh]hdrm_gem_prime_fd_to_handle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjlhMubj>)}(hT(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_prime_fd_to_handleasbuh1hhjubj)}(h h]h }(hjټhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_file *file_privh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj-modnameN classnameNjj)}j]jռc.drm_gem_prime_fd_to_handleasbuh1hhj ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h file_privh]h file_priv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h int prime_fdh](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hprime_fdh]hprime_fd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(huint32_t *handleh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jռc.drm_gem_prime_fd_to_handleasbuh1hhjubj)}(h h]h }(hjӽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjZhhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]j j )j huh1jhjlhMhjShhubj )}(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:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjShhhjlhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j0j( j0j) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj4ubjM )}(hhh](jR )}(h5``struct drm_device *dev`` drm_device to import into h](jX )}(h``struct drm_device *dev``h]j^ )}(hjYh]hstruct drm_device *dev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjWubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjSubjt )}(hhh]h)}(hdrm_device to import intoh]hdrm_device to import into}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjnhMhjPubjR )}(h:``struct drm_file *file_priv`` drm file-private structure h](jX )}(h``struct drm_file *file_priv``h]j^ )}(hjh]hstruct drm_file *file_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hdrm file-private structureh]hdrm file-private structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjPubjR )}(h?``int prime_fd`` fd id of the dma-buf which should be imported h](jX )}(h``int prime_fd``h]j^ )}(hj˾h]h int prime_fd}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjɾubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjžubjt )}(hhh]h)}(h-fd id of the dma-buf which should be importedh]h-fd id of the dma-buf which should be imported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjžubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjPubjR )}(hU``uint32_t *handle`` pointer to storage for the handle of the imported buffer object h](jX )}(h``uint32_t *handle``h]j^ )}(hjh]huint32_t *handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjPubeh}(h]h ]h"]h$]h&]uh1jL hj4ubh)}(h**Description**h]j7 )}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj=ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj4ubh)}(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 }(hjUhhhNhNubh)}(h2:c:type:`drm_driver.gem_prime_import `h]j^ )}(hj_h]hdrm_driver.gem_prime_import}(hjahhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjUubh driver callback.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|hMhj4ubh)}(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:461: ./drivers/gpu/drm/drm_prime.chM!hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_gem_prime_handle_to_dmabuf (C function) c.drm_gem_prime_handle_to_dmabufhNtauh1jhj7hhhNhNubj)}(hhh](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]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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjĿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjÿhMubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjտhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҿubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj׿modnameN classnameNjj)}j]j)}j}drm_gem_prime_handle_to_dmabufsb c.drm_gem_prime_handle_to_dmabufasbuh1hhjhhhjÿhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjÿhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjÿhMubj)}(hdrm_gem_prime_handle_to_dmabufh]j)}(hjh]hdrm_gem_prime_handle_to_dmabuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjÿhMubj>)}(hU(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjPmodnameN classnameNjj)}j]j c.drm_gem_prime_handle_to_dmabufasbuh1hhj,ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(ubjD)}(hstruct drm_file *file_privh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j c.drm_gem_prime_handle_to_dmabufasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h file_privh]h file_priv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(ubjD)}(huint32_t handleh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j c.drm_gem_prime_handle_to_dmabufasbuh1hhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hhandleh]hhandle}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(ubjD)}(huint32_t flagsh](h)}(hhh]j)}(huint32_th]huint32_t}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj]modnameN classnameNjj)}j]j c.drm_gem_prime_handle_to_dmabufasbuh1hhjTubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjÿhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjÿhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjÿ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:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjÿhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(h9``struct drm_device *dev`` dev to export the buffer from h](jX )}(h``struct drm_device *dev``h]j^ )}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hdev to export the buffer fromh]hdev to export the buffer from}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h:``struct drm_file *file_priv`` drm file-private structure h](jX )}(h``struct drm_file *file_priv``h]j^ )}(hj+h]hstruct drm_file *file_priv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj%ubjt )}(hhh]h)}(hdrm file-private structureh]hdrm file-private structure}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1js hj%ubeh}(h]h ]h"]h$]h&]uh1jQ hj@hMhjubjR )}(h,``uint32_t handle`` buffer handle to export h](jX )}(h``uint32_t handle``h]j^ )}(hjdh]huint32_t handle}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj^ubjt )}(hhh]h)}(hbuffer handle to exporth]hbuffer handle to export}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1js hj^ubeh}(h]h ]h"]h$]h&]uh1jQ hjyhMhjubjR )}(h*``uint32_t flags`` flags like DRM_CLOEXEC h](jX )}(h``uint32_t flags``h]j^ )}(hjh]huint32_t flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hflags like DRM_CLOEXECh]hflags like DRM_CLOEXEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh)}(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 }(hjhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j^ )}(hjh]hdrm_gem_object_funcs.export}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gem_prime_handle_to_fd (C function)c.drm_gem_prime_handle_to_fdhNtauh1jhj7hhhNhNubj)}(hhh](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]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](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj]hMubj)}(hdrm_gem_prime_handle_to_fdh]j)}(hdrm_gem_prime_handle_to_fdh]hdrm_gem_prime_handle_to_fd}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhj]hMubj>)}(hd(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jrsbc.drm_gem_prime_handle_to_fdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_file *file_privh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_prime_handle_to_fdasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h file_privh]h file_priv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(huint32_t handleh](h)}(hhh]j)}(huint32_th]huint32_t}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjsmodnameN classnameNjj)}j]jc.drm_gem_prime_handle_to_fdasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(huint32_t flagsh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_prime_handle_to_fdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h int *prime_fdh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hprime_fdh]hprime_fd}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjKhhhj]hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhj]hMubah}(h]jBah ](jjeh"]h$]h&]j j )j huh1jhj]hMhjDhhubj )}(hhh]h)}(h%PRIME export function for GEM driversh]h%PRIME export function for GEM drivers}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjNhhubah}(h]h ]h"]h$]h&]uh1j hjDhhhj]hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jij( jij) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjmubjM )}(hhh](jR )}(h9``struct drm_device *dev`` dev to export the buffer from h](jX )}(h``struct drm_device *dev``h]j^ )}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h:``struct drm_file *file_priv`` drm file-private structure h](jX )}(h``struct drm_file *file_priv``h]j^ )}(hjh]hstruct drm_file *file_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hdrm file-private structureh]hdrm file-private structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h,``uint32_t handle`` buffer handle to export h](jX )}(h``uint32_t handle``h]j^ )}(hjh]huint32_t handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hbuffer handle to exporth]hbuffer handle to export}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h*``uint32_t flags`` flags like DRM_CLOEXEC h](jX )}(h``uint32_t flags``h]j^ )}(hj=h]huint32_t flags}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj7ubjt )}(hhh]h)}(hflags like DRM_CLOEXECh]hflags like DRM_CLOEXEC}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1js hj7ubeh}(h]h ]h"]h$]h&]uh1jQ hjRhMhjubjR )}(hI``int *prime_fd`` pointer to storage for the fd id of the create dma-buf h](jX )}(h``int *prime_fd``h]j^ )}(hjvh]h int *prime_fd}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjtubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjpubjt )}(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&]uh1js hjpubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjmubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjmubh)}(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 }(hjhhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j^ )}(hjh]hdrm_gem_object_funcs.export}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_map_attach (C function)c.drm_gem_map_attachhNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMOubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hMOubj)}(hdrm_gem_map_attachh]j)}(hdrm_gem_map_attachh]hdrm_gem_map_attach}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj'hMOubj>)}(h<(struct dma_buf *dma_buf, struct dma_buf_attachment *attach)h](jD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjvmodnameN classnameNjj)}j]j)}j}j<sbc.drm_gem_map_attachasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjNubjD)}(h!struct dma_buf_attachment *attachh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_map_attachasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjNubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj'hMOubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj'hMOubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj'hMOhjhhubj )}(hhh]h)}(h%dma_buf attach implementation for GEMh]h%dma_buf attach implementation for GEM}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMOhjFhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj'hMOubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jaj( jaj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjiubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMShjeubjM )}(hhh](jR )}(h7``struct dma_buf *dma_buf`` buffer to attach device to h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hjh]hstruct dma_buf *dma_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMPhjubjt )}(hhh]h)}(hbuffer to attach device toh]hbuffer to attach device to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMPhjubjR )}(h=``struct dma_buf_attachment *attach`` buffer attachment data h](jX )}(h%``struct dma_buf_attachment *attach``h]j^ )}(hjh]h!struct dma_buf_attachment *attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] h jubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMQhjubjt )}(hhh]h)}(hbuffer attachment datah]hbuffer attachment data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMQhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMQhjubeh}(h]h ]h"]h$]h&]uh1jL hjeubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMShjeubh)}(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}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMRhjubh7 for device specific handling. This can be used as the }(hjhhhNhNubh)}(h*:c:type:`dma_buf_ops.attach `h]j^ )}(hjBh]hdma_buf_ops.attach}(hjDhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhj;hMRhjubh; callback. Must be used together with drm_gem_map_detach().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMRhjeubh)}(h5Returns 0 on success, negative error code on failure.h]h5Returns 0 on success, negative error code on failure.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMVhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_map_detach (C function)c.drm_gem_map_detachhNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMuubj)}(hdrm_gem_map_detachh]j)}(hdrm_gem_map_detachh]hdrm_gem_map_detach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMuubj>)}(h<(struct dma_buf *dma_buf, struct dma_buf_attachment *attach)h](jD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_map_detachasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdma_bufh]hdma_buf}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h!struct dma_buf_attachment *attachh](j)}(hj? h]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hhh]j)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjgmodnameN classnameNjj)}j]jc.drm_gem_map_detachasbuh1hhjCubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMuubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMuubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMuhjhhubj )}(hhh]h)}(h%dma_buf detach implementation for GEMh]h%dma_buf detach implementation for GEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMuhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMuubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMyhjubjM )}(hhh](jR )}(h2``struct dma_buf *dma_buf`` buffer to detach from h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hj h]hstruct dma_buf *dma_buf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMvhjubjt )}(hhh]h)}(hbuffer to detach fromh]hbuffer to detach from}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMvhjubjR )}(h@``struct dma_buf_attachment *attach`` attachment to be detached h](jX )}(h%``struct dma_buf_attachment *attach``h]j^ )}(hjBh]h!struct dma_buf_attachment *attach}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMwhj<ubjt )}(hhh]h)}(hattachment to be detachedh]hattachment to be detached}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMwhjXubah}(h]h ]h"]h$]h&]uh1js hj<ubeh}(h]h ]h"]h$]h&]uh1jQ hjWhMwhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMyhjubh)}(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^ )}(hjh]hdrm_gem_object_funcs.pin}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMxhjubh* for device specific handling. Cleans up }(hjhhhNhNubh)}(h:c:type:`dma_buf_attachment`h]j^ )}(hjh]hdma_buf_attachment}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_attachmentuh1hhjhMxhjubh4 from drm_gem_map_attach(). This can be used as the }(hjhhhNhNubh)}(h*:c:type:`dma_buf_ops.detach `h]j^ )}(hjh]hdma_buf_ops.detach}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhjhMxhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_map_dma_buf (C function)c.drm_gem_map_dma_bufhNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj8hMubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjLmodnameN classnameNjj)}j]j)}j}drm_gem_map_dma_bufsbc.drm_gem_map_dma_bufasbuh1hhj'hhhj8hMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj8hMubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj8hMubj)}(hdrm_gem_map_dma_bufh]j)}(hjhh]hdrm_gem_map_dma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj8hMubj>)}(h@(struct dma_buf_attachment *attach, enum dma_data_direction dir)h](jD)}(h!struct dma_buf_attachment *attachh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jfc.drm_gem_map_dma_bufasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(henum dma_data_direction dirh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_data_directionh]hdma_data_direction}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj5modnameN classnameNjj)}j]jfc.drm_gem_map_dma_bufasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdirh]hdir}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hj'hhhj8hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj8hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj8hMhj hhubj )}(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:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj hhhj8hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(hU``struct dma_buf_attachment *attach`` attachment whose scatterlist is to be returned h](jX )}(h%``struct dma_buf_attachment *attach``h]j^ )}(hjh]h!struct dma_buf_attachment *attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(h.attachment whose scatterlist is to be returnedh]h.attachment whose scatterlist is to be returned}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h:``enum dma_data_direction dir`` direction of DMA transfer h](jX )}(h``enum dma_data_direction dir``h]j^ )}(hjh]henum dma_data_direction dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hdirection of DMA transferh]hdirection of DMA transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj<ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh)}(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 }(hjThhhNhNubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj\ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjTubh8 and then maps the scatterlist. This can be used as the }(hjThhhNhNubh)}(h/:c:type:`dma_buf_ops.map_dma_buf `h]j^ )}(hjh]hdma_buf_ops.map_dma_buf}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhj{hMhjTubh@ callback. Should be used together with drm_gem_unmap_dma_buf().}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_unmap_dma_buf (C function)c.drm_gem_unmap_dma_bufhNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_unmap_dma_bufh]j)}(hdrm_gem_unmap_dma_bufh]hdrm_gem_unmap_dma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(hV(struct dma_buf_attachment *attach, struct sg_table *sgt, enum dma_data_direction dir)h](jD)}(h!struct dma_buf_attachment *attachh](j)}(hj? h]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(hdma_buf_attachmenth]hdma_buf_attachment}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjMmodnameN classnameNjj)}j]j)}j}jsbc.drm_gem_unmap_dma_bufasbuh1hhj)ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hattachh]hattach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(hstruct sg_table *sgth](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jgc.drm_gem_unmap_dma_bufasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(henum dma_data_direction dirh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdma_data_directionh]hdma_data_direction}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj/modnameN classnameNjj)}j]jgc.drm_gem_unmap_dma_bufasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdirh]hdir}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(hF``struct dma_buf_attachment *attach`` attachment to unmap buffer from h](jX )}(h%``struct dma_buf_attachment *attach``h]j^ )}(hjh]h!struct dma_buf_attachment *attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hattachment to unmap buffer fromh]hattachment to unmap buffer from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hA``struct sg_table *sgt`` scatterlist info of the buffer to unmap h](jX )}(h``struct sg_table *sgt``h]j^ )}(hjh]hstruct sg_table *sgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(h'scatterlist info of the buffer to unmaph]h'scatterlist info of the buffer to unmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h:``enum dma_data_direction dir`` direction of DMA transfer h](jX )}(h``enum dma_data_direction dir``h]j^ )}(hj6h]henum dma_data_direction dir}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj4ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj0ubjt )}(hhh]h)}(hdirection of DMA transferh]hdirection of DMA transfer}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1js hj0ubeh}(h]h ]h"]h$]h&]uh1jQ hjKhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjoubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_dmabuf_vmap (C function)c.drm_gem_dmabuf_vmaphNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_dmabuf_vmaph]j)}(hdrm_gem_dmabuf_vmaph]hdrm_gem_dmabuf_vmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h0(struct dma_buf *dma_buf, struct iosys_map *map)h](jD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj6modnameN classnameNjj)}j]j)}j}jsbc.drm_gem_dmabuf_vmapasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdma_bufh]hdma_buf}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct iosys_map *maph](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jPc.drm_gem_dmabuf_vmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmaph]hmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h#dma_buf vmap implementation for GEMh]h#dma_buf vmap implementation for GEM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j!j( j!j) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj%ubjM )}(hhh](jR )}(h0``struct dma_buf *dma_buf`` buffer to be mapped h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hjJh]hstruct dma_buf *dma_buf}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjDubjt )}(hhh]h)}(hbuffer to be mappedh]hbuffer to be mapped}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1js hjDubeh}(h]h ]h"]h$]h&]uh1jQ hj_hMhjAubjR )}(h<``struct iosys_map *map`` the virtual address of the buffer h](jX )}(h``struct iosys_map *map``h]j^ )}(hjh]hstruct iosys_map *map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj}ubjt )}(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&]uh1js hj}ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjAubeh}(h]h ]h"]h$]h&]uh1jL hj%ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj%ubh)}(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 }(hjhhhNhNubh)}(h(:c:type:`dma_buf_ops.vmap `h]j^ )}(hjh]hdma_buf_ops.vmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh callback. Calls into }(hjhhhNhNubh)}(h::c:type:`drm_gem_object_funcs.vmap `h]j^ )}(hjh]hdrm_gem_object_funcs.vmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhjhMhjubhM for device specific handling. The kernel virtual address is returned in map.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj%ubh)}(h8Returns 0 on success or a negative errno code otherwise.h]h8Returns 0 on success or a negative errno code otherwise.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gem_dmabuf_vunmap (C function)c.drm_gem_dmabuf_vunmaphNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjfhMubj)}(hdrm_gem_dmabuf_vunmaph]j)}(hdrm_gem_dmabuf_vunmaph]hdrm_gem_dmabuf_vunmap}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjfhMubj>)}(h0(struct dma_buf *dma_buf, struct iosys_map *map)h](jD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}j{sbc.drm_gem_dmabuf_vunmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct iosys_map *maph](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj'modnameN classnameNjj)}j]jc.drm_gem_dmabuf_vunmapasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmaph]hmap}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjThhhjfhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjPhhhjfhMubah}(h]jKah ](jjeh"]h$]h&]j j )j huh1jhjfhMhjMhhubj )}(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:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjMhhhjfhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(h2``struct dma_buf *dma_buf`` buffer to be unmapped h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hjh]hstruct dma_buf *dma_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hbuffer to be unmappedh]hbuffer to be unmapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h<``struct iosys_map *map`` the virtual address of the buffer h](jX )}(h``struct iosys_map *map``h]j^ )}(hjh]hstruct iosys_map *map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./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 }(hjShhhNhNubh)}(h*:c:type:`dma_buf_ops.vunmap `h]j^ )}(hj]h]hdma_buf_ops.vunmap}(hj_hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjSubh callback. Calls into }(hjShhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.vunmap `h]j^ )}(hjh]hdrm_gem_object_funcs.vunmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhjzhMhjSubh for device specific handling.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_prime_mmap (C function)c.drm_gem_prime_mmaphNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_prime_mmaph]j)}(hdrm_gem_prime_mmaph]hdrm_gem_prime_mmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h8(struct drm_gem_object *obj, struct vm_area_struct *vma)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj%modnameN classnameNjj)}j]j)}j}jsbc.drm_gem_prime_mmapasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j?c.drm_gem_prime_mmapasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h#PRIME mmap function for GEM driversh]h#PRIME mmap function for GEM drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(h*``struct drm_gem_object *obj`` GEM object h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj9h]hstruct drm_gem_object *obj}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj3ubjt )}(hhh]h)}(h GEM objecth]h GEM object}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1js hj3ubeh}(h]h ]h"]h$]h&]uh1jQ hjNhMhj0ubjR )}(h5``struct vm_area_struct *vma`` Virtual address range h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hjrh]hstruct vm_area_struct *vma}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjlubjt )}(hhh]h)}(hVirtual address rangeh]hVirtual address range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjlubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj0ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./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 }(hjhhhNhNubh)}(h':c:type:`drm_driver->fops `h]j^ )}(hjh]hdrm_driver->fops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh'->mmap is called to set up the mapping.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gem_dmabuf_mmap (C function)c.drm_gem_dmabuf_mmaphNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM*ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hM*ubj)}(hdrm_gem_dmabuf_mmaph]j)}(hdrm_gem_dmabuf_mmaph]hdrm_gem_dmabuf_mmap}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj#hM*ubj>)}(h5(struct dma_buf *dma_buf, struct vm_area_struct *vma)h](jD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjrmodnameN classnameNjj)}j]j)}j}j8sbc.drm_gem_dmabuf_mmapasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjJubjD)}(hstruct vm_area_struct *vmah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_dmabuf_mmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjJubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj#hM*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj#hM*ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj#hM*hj hhubj )}(hhh]h)}(h#dma_buf mmap implementation for GEMh]h#dma_buf mmap implementation for GEM}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM*hjBhhubah}(h]h ]h"]h$]h&]uh1j hj hhhj#hM*ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j]j( j]j) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjeubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM.hjaubjM )}(hhh](jR )}(h0``struct dma_buf *dma_buf`` buffer to be mapped h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hjh]hstruct dma_buf *dma_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM+hjubjt )}(hhh]h)}(hbuffer to be mappedh]hbuffer to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM+hj}ubjR )}(h5``struct vm_area_struct *vma`` virtual address range h](jX )}(h``struct vm_area_struct *vma``h]j^ )}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM,hjubjt )}(hhh]h)}(hvirtual address rangeh]hvirtual address range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM,hj}ubeh}(h]h ]h"]h$]h&]uh1jL hjaubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM.hjaubh)}(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 }(hjhhhNhNubh)}(h(:c:type:`dma_buf_ops.mmap `h]j^ )}(hjh]hdma_buf_ops.mmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_buf_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM-hjubh4 callback. It just forwards to drm_gem_prime_mmap().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hM-hjaubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM0hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_prime_pages_to_sg (C function)c.drm_prime_pages_to_sghNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMGubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhj~hMGubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_prime_pages_to_sgsbc.drm_prime_pages_to_sgasbuh1hhjmhhhj~hMGubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhj~hMGubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhj~hMGubj)}(hdrm_prime_pages_to_sgh]j)}(hjh]hdrm_prime_pages_to_sg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhj~hMGubj>)}(hD(struct drm_device *dev, struct page **pages, unsigned int nr_pages)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]jc.drm_prime_pages_to_sgasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct page **pagesh](j)}(hj? h]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(hpageh]hpage}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj{modnameN classnameNjj)}j]jc.drm_prime_pages_to_sgasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned int nr_pagesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnr_pagesh]hnr_pages}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjmhhhj~hMGubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhj~hMGubah}(h]jdah ](jjeh"]h$]h&]j j )j huh1jhj~hMGhjfhhubj )}(hhh]h)}(h%converts a page array into an sg listh]h%converts a page array into an sg list}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMGhj7hhubah}(h]h ]h"]h$]h&]uh1j hjfhhhj~hMGubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jRj( jRj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjZubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMKhjVubjM )}(hhh](jR )}(h&``struct drm_device *dev`` DRM device h](jX )}(h``struct drm_device *dev``h]j^ )}(hj{h]hstruct drm_device *dev}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjyubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMHhjuubjt )}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1js hjuubeh}(h]h ]h"]h$]h&]uh1jQ hjhMHhjrubjR )}(hI``struct page **pages`` pointer to the array of page pointers to convert h](jX )}(h``struct page **pages``h]j^ )}(hjh]hstruct page **pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMIhjubjt )}(hhh]h)}(h0pointer to the array of page pointers to converth]h0pointer to the array of page pointers to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMIhjrubjR )}(h4``unsigned int nr_pages`` length of the page vector h](jX )}(h``unsigned int nr_pages``h]j^ )}(hjh]hunsigned int nr_pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMJhjubjt )}(hhh]h)}(hlength of the page vectorh]hlength of the page vector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMJhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMJhjrubeh}(h]h ]h"]h$]h&]uh1jL hjVubh)}(h**Description**h]j7 )}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMLhjVubh)}(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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMKhjVubh)}(hcThis is useful for implementing :c:type:`drm_gem_object_funcs.get_sg_table `.h](h This is useful for implementing }(hjMhhhNhNubh)}(hB:c:type:`drm_gem_object_funcs.get_sg_table ` h]j^ )}(hjWh]h!drm_gem_object_funcs.get_sg_table}(hjYhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjUubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMOhjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthMOhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_prime_get_contiguous_size (C function)c.drm_prime_get_contiguous_sizehNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMmubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMmubj)}(hdrm_prime_get_contiguous_sizeh]j)}(hdrm_prime_get_contiguous_sizeh]hdrm_prime_get_contiguous_size}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMmubj>)}(h(struct sg_table *sgt)h]jD)}(hstruct sg_table *sgth](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_prime_get_contiguous_sizeasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsgth]hsgt}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMmubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMmubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMmhjhhubj )}(hhh]h)}(h)returns the contiguous size of the bufferh]h)returns the contiguous size of the buffer}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMmhjxhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMmubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMqhjubjM )}(hhh]jR )}(hA``struct sg_table *sgt`` sg_table describing the buffer to check h](jX )}(h``struct sg_table *sgt``h]j^ )}(hjh]hstruct sg_table *sgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMnhjubjt )}(hhh]h)}(h'sg_table describing the buffer to checkh]h'sg_table describing the buffer to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMnhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMphjubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMohjubh)}(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^ )}(hj&h]h.drm_gem_object_funcs.gem_prime_import_sg_table}(hj(hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMrhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChMrhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gem_prime_export (C function)c.drm_gem_prime_exporthNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj{hMubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gem_prime_exportsbc.drm_gem_prime_exportasbuh1hhjjhhhj{hMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj{hMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj{hMubj)}(hdrm_gem_prime_exporth]j)}(hjh]hdrm_gem_prime_export}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhj{hMubj>)}(h'(struct drm_gem_object *obj, int flags)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_prime_exportasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h int flagsh](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hflagsh]hflags}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjjhhhj{hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjfhhhj{hMubah}(h]jaah ](jjeh"]h$]h&]j j )j huh1jhj{hMhjchhubj )}(hhh]h)}(h4helper library implementation of the export callbackh]h4helper library implementation of the export callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjchhhj{hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(h4``struct drm_gem_object *obj`` GEM object to export h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hGEM object to exporth]hGEM object to export}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h2``int flags`` flags like DRM_CLOEXEC and DRM_RDWR h](jX )}(h ``int flags``h]j^ )}(hjh]h int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(h#flags like DRM_CLOEXEC and DRM_RDWRh]h#flags like DRM_CLOEXEC and DRM_RDWR}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj-hMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjQubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh)}(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 }(hjihhhNhNubh)}(h<:c:type:`drm_gem_object_funcs.export `h]j^ )}(hjsh]hdrm_gem_object_funcs.export}(hjuhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjiubhn functions for GEM drivers using the PRIME helpers. It is used as the default in drm_gem_prime_handle_to_fd().}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_gem_is_prime_exported_dma_buf (C function)#c.drm_gem_is_prime_exported_dma_bufhNtauh1jhj7hhhNhNubj)}(hhh](j)}(hXbool drm_gem_is_prime_exported_dma_buf (struct drm_device *dev, struct dma_buf *dma_buf)h]j)}(hWbool drm_gem_is_prime_exported_dma_buf(struct drm_device *dev, struct dma_buf *dma_buf)h](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h!drm_gem_is_prime_exported_dma_bufh]j)}(h!drm_gem_is_prime_exported_dma_bufh]h!drm_gem_is_prime_exported_dma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h1(struct drm_device *dev, struct dma_buf *dma_buf)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsb#c.drm_gem_is_prime_exported_dma_bufasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j1#c.drm_gem_is_prime_exported_dma_bufasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hJchecks if the DMA-BUF was exported from a GEM object belonging to **dev**.h](hBchecks if the DMA-BUF was exported from a GEM object belonging to }(hjhhhNhNubj7 )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(h**Parameters** ``struct drm_device *dev`` drm_device to check against ``struct dma_buf *dma_buf`` dma-buf object to import **Return** true if the DMA-BUF was exported from a GEM object belonging to **dev**, false otherwise.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(h7``struct drm_device *dev`` drm_device to check against h](jX )}(h``struct drm_device *dev``h]j^ )}(hj=h]hstruct drm_device *dev}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj7ubjt )}(hhh]h)}(hdrm_device to check againsth]hdrm_device to check against}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1js hj7ubeh}(h]h ]h"]h$]h&]uh1jQ hjRhMhj4ubjR )}(h5``struct dma_buf *dma_buf`` dma-buf object to import h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hjvh]hstruct dma_buf *dma_buf}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjtubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjpubjt )}(hhh]h)}(hdma-buf object to importh]hdma-buf object to import}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjpubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj4ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh)}(hYtrue if the DMA-BUF was exported from a GEM object belonging to **dev**, false otherwise.h](h@true if the DMA-BUF was exported from a GEM object belonging to }(hjhhhNhNubj7 )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh, false otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gem_prime_import_dev (C function)c.drm_gem_prime_import_devhNtauh1jhj7hhhNhNubj)}(hhh](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]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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj)modnameN classnameNjj)}j]j)}j}drm_gem_prime_import_devsbc.drm_gem_prime_import_devasbuh1hhjhhhjhMubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_prime_import_devh]j)}(hjEh]hdrm_gem_prime_import_dev}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(hL(struct drm_device *dev, struct dma_buf *dma_buf, struct device *attach_dev)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jCc.drm_gem_prime_import_devasbuh1hhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubjD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jCc.drm_gem_prime_import_devasbuh1hhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdma_bufh]hdma_buf}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubjD)}(hstruct device *attach_devh](j)}(hj? h]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jCc.drm_gem_prime_import_devasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h attach_devh]h attach_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(h5``struct drm_device *dev`` drm_device to import into h](jX )}(h``struct drm_device *dev``h]j^ )}(hj$h]hstruct drm_device *dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hdrm_device to import intoh]hdrm_device to import into}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj9hMhjubjR )}(h5``struct dma_buf *dma_buf`` dma-buf object to import h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hj]h]hstruct dma_buf *dma_buf}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjWubjt )}(hhh]h)}(hdma-buf object to importh]hdma-buf object to import}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1js hjWubeh}(h]h ]h"]h$]h&]uh1jQ hjrhMhjubjR )}(h>``struct device *attach_dev`` struct device to dma_buf attach h](jX )}(h``struct device *attach_dev``h]j^ )}(hjh]hstruct device *attach_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./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^ )}(hjh]h$drm_driver.gem_prime_import_sg_table}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhjhMhjubh internally.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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^ )}(hjFh]hdrm_gem_object_funcs.free}(hjHhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj<ubh hook when using this function.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gem_prime_import (C function)c.drm_gem_prime_importhNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gem_prime_importsbc.drm_gem_prime_importasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_prime_importh]j)}(hjh]hdrm_gem_prime_import}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h1(struct drm_device *dev, struct dma_buf *dma_buf)h](jD)}(hstruct drm_device *devh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj(modnameN classnameNjj)}j]jc.drm_gem_prime_importasbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct dma_buf *dma_bufh](j)}(hj? h]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gem_prime_importasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hdma_bufh]hdma_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(h5``struct drm_device *dev`` drm_device to import into h](jX )}(h``struct drm_device *dev``h]j^ )}(hj:h]hstruct drm_device *dev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj4ubjt )}(hhh]h)}(hdrm_device to import intoh]hdrm_device to import into}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1js hj4ubeh}(h]h ]h"]h$]h&]uh1jQ hjOhMhj1ubjR )}(h5``struct dma_buf *dma_buf`` dma-buf object to import h](jX )}(h``struct dma_buf *dma_buf``h]j^ )}(hjsh]hstruct dma_buf *dma_buf}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjmubjt )}(hhh]h)}(hdma-buf object to importh]hdma-buf object to import}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj1ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./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&]uh1hhjhMhjubh)}(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}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_object_funcsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubh hook when using this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_prime_sg_to_page_array (C function)c.drm_prime_sg_to_page_arrayhNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjVhMubj)}(hdrm_prime_sg_to_page_arrayh]j)}(hdrm_prime_sg_to_page_arrayh]hdrm_prime_sg_to_page_array}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjVhMubj>)}(h<(struct sg_table *sgt, struct page **pages, int max_entries)h](jD)}(hstruct sg_table *sgth](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jksbc.drm_prime_sg_to_page_arrayasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubjD)}(hstruct page **pagesh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_prime_sg_to_page_arrayasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpagesh]hpages}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubjD)}(hint max_entriesh](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h max_entriesh]h max_entries}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubeh}(h]h ]h"]h$]h&]jjuh1j=hjDhhhjVhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@hhhjVhMubah}(h]j;ah ](jjeh"]h$]h&]j j )j huh1jhjVhMhj=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:461: ./drivers/gpu/drm/drm_prime.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj=hhhjVhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjM )}(hhh](jR )}(h9``struct sg_table *sgt`` scatter-gather table to convert h](jX )}(h``struct sg_table *sgt``h]j^ )}(hjh]hstruct sg_table *sgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjubjt )}(hhh]h)}(hscatter-gather table to converth]hscatter-gather table to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hE``struct page **pages`` array of page pointers to store the pages in h](jX )}(h``struct page **pages``h]j^ )}(hj4h]hstruct page **pages}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhj.ubjt )}(hhh]h)}(h,array of page pointers to store the pages inh]h,array of page pointers to store the pages in}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hjIhMhjubjR )}(h0``int max_entries`` size of the passed-in array h](jX )}(h``int max_entries``h]j^ )}(hjmh]hint max_entries}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMhjgubjt )}(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&]uh1js hjgubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./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:461: ./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:461: ./drivers/gpu/drm/drm_prime.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(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_arrayhNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM0ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM0ubj)}(hdrm_prime_sg_to_dma_addr_arrayh]j)}(hdrm_prime_sg_to_dma_addr_arrayh]hdrm_prime_sg_to_dma_addr_array}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hM0ubj>)}(h:(struct sg_table *sgt, dma_addr_t *addrs, int max_entries)h](jD)}(hstruct sg_table *sgth](j)}(hj? h]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjYmodnameN classnameNjj)}j]j)}j}jsb c.drm_prime_sg_to_dma_addr_arrayasbuh1hhj5ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hsgth]hsgt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubjD)}(hdma_addr_t *addrsh](h)}(hhh]j)}(h dma_addr_th]h dma_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]js c.drm_prime_sg_to_dma_addr_arrayasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(haddrsh]haddrs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubjD)}(hint max_entriesh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h max_entriesh]h max_entries}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj hM0ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hM0ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj hM0hjhhubj )}(hhh]h)}(h)convert an sg table into a dma addr arrayh]h)convert an sg table into a dma addr array}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM0hjChhubah}(h]h ]h"]h$]h&]uh1j hjhhhj hM0ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j^j( j^j) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjfubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM4hjbubjM )}(hhh](jR )}(h9``struct sg_table *sgt`` scatter-gather table to convert h](jX )}(h``struct sg_table *sgt``h]j^ )}(hjh]hstruct sg_table *sgt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM1hjubjt )}(hhh]h)}(hscatter-gather table to converth]hscatter-gather table to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM1hj~ubjR )}(hF``dma_addr_t *addrs`` array to store the dma bus address of each page h](jX )}(h``dma_addr_t *addrs``h]j^ )}(hjh]hdma_addr_t *addrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM2hjubjt )}(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&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM2hj~ubjR )}(h6``int max_entries`` size of both the passed-in arrays h](jX )}(h``int max_entries``h]j^ )}(hjh]hint max_entries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM3hjubjt )}(hhh]h)}(h!size of both the passed-in arraysh]h!size of both the passed-in arrays}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM3hj~ubeh}(h]h ]h"]h$]h&]uh1jL hjbubh)}(h**Description**h]j7 )}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM5hjbubh)}(h/Exports an sg table into an array of addresses.h]h/Exports an sg table into an array of addresses.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM4hjbubh)}(hlDrivers should use this in their :c:type:`drm_driver.gem_prime_import_sg_table ` implementation.h](h!Drivers should use this in their }(hjYhhhNhNubh)}(h;:c:type:`drm_driver.gem_prime_import_sg_table `h]j^ )}(hjch]h$drm_driver.gem_prime_import_sg_table}(hjehhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjaubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_driveruh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chM6hjYubh implementation.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM6hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_prime_gem_destroy (C function)c.drm_prime_gem_destroyhNtauh1jhj7hhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMJubj)}(hdrm_prime_gem_destroyh]j)}(hdrm_prime_gem_destroyh]hdrm_prime_gem_destroy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMJubj>)}(h1(struct drm_gem_object *obj, struct sg_table *sg)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_prime_gem_destroyasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct sg_table *sgh](j)}(hj? h]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjzmodnameN classnameNjj)}j]j"c.drm_prime_gem_destroyasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hsgh]hsg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMJubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMJubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMJhjhhubj )}(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:461: ./drivers/gpu/drm/drm_prime.chMJhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMJubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhj7hNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMNhjubjM )}(hhh](jR )}(hK``struct drm_gem_object *obj`` GEM object which was created from a dma-buf h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMKhjubjt )}(hhh]h)}(h+GEM object which was created from a dma-bufh]h+GEM object which was created from a dma-buf}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMKhj2ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj1hMKhjubjR )}(hE``struct sg_table *sg`` the sg-table which was pinned at import time h](jX )}(h``struct sg_table *sg``h]j^ )}(hjUh]hstruct sg_table *sg}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMLhjOubjt )}(hhh]h)}(h,the sg-table which was pinned at import timeh]h,the sg-table which was pinned at import time}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMLhjkubah}(h]h ]h"]h$]h&]uh1js hjOubeh}(h]h ]h"]h$]h&]uh1jQ hjjhMLhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:461: ./drivers/gpu/drm/drm_prime.chMNhjubh)}(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:461: ./drivers/gpu/drm/drm_prime.chMMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj7hhhNhNubeh}(h]jah ]h"]prime function referencesah$]h&]uh1hhj߲hhhhhMubeh}(h](jid1eh ]h"](prime buffer sharingprime_buffer_sharingeh$]h&]uh1hhhhhhhhMexpect_referenced_by_name}jjβsexpect_referenced_by_id}jjβsubh)}(hhh](h)}(hDRM MM Range Allocatorh]hDRM MM Range Allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhMubh)}(hhh](h)}(hOverviewh]hOverview}(hjhhhNhNubah}(h]h ]h"]h$]h&]hj%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:470: ./drivers/gpu/drm/drm_mm.chK7hjhhubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_mm`h]j^ )}(hj h]hdrm_mm}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mmuh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:470: ./drivers/gpu/drm/drm_mm.chK`.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^ )}(hjh]hstruct drm_mm_scan}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_scanuh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:476: ./drivers/gpu/drm/drm_mm.chMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hMhjhhubh)}(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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:476: ./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:476: ./drivers/gpu/drm/drm_mm.chMhjhhubeh}(h]jMah ]h"]lru scan/eviction supportah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h*DRM MM Range Allocator Function Referencesh]h*DRM MM Range Allocator Function References}(hjUhhhNhNubah}(h]h ]h"]h$]h&]hjiuh1hhjRhhhhhMubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_insert_mode (C enum)c.drm_mm_insert_modehNtauh1jhjRhhhNhNubj)}(hhh](j)}(hdrm_mm_insert_modeh]j)}(henum drm_mm_insert_modeh](j)}(hjh]henum}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhKubj)}(hdrm_mm_insert_modeh]j)}(hjvh]hdrm_mm_insert_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhKubah}(h]joah ](jjeh"]h$]h&]j j )j huh1jhjhKhjqhhubj )}(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:482: ./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]j7 )}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhK@hjubjM )}(hhh](jR )}(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](jX )}(h``DRM_MM_INSERT_BEST``h]j^ )}(hjh]hDRM_MM_INSERT_BEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKFhjubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKChjubh)}(h5Allocates the node from the bottom of the found hole.h]h5Allocates the node from the bottom of the found hole.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKFhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKFhjubjR )}(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](jX )}(h``DRM_MM_INSERT_LOW``h]j^ )}(hjGh]hDRM_MM_INSERT_LOW}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKLhjAubjt )}(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.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKIhj]ubh)}(h5Allocates the node from the bottom of the found hole.h]h5Allocates the node from the bottom of the found hole.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKLhj]ubeh}(h]h ]h"]h$]h&]uh1js hjAubeh}(h]h ]h"]h$]h&]uh1jQ hj\hKLhjubjR )}(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](jX )}(h``DRM_MM_INSERT_HIGH``h]j^ )}(hjh]hDRM_MM_INSERT_HIGH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKThjubjt )}(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:482: ./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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_nodeuh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKRhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKRhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKThjubjR )}(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](jX )}(h``DRM_MM_INSERT_EVICT``h]j^ )}(hjh]hDRM_MM_INSERT_EVICT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhK\hj ubjt )}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKWhj%ubh)}(h5Allocates the node from the bottom of the found hole.h]h5Allocates the node from the bottom of the found hole.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hK\hj%ubeh}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj$hK\hjubjR )}(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](jX )}(h``DRM_MM_INSERT_ONCE``h]j^ )}(hjWh]hDRM_MM_INSERT_ONCE}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjUubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKbhjQubjt )}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhK_hjmubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hjlhKbhjubjR )}(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](jX )}(h``DRM_MM_INSERT_HIGHEST``h]j^ )}(hjh]hDRM_MM_INSERT_HIGHEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKihjubjt )}(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:482: ./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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKihjubjR )}(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](jX )}(h``DRM_MM_INSERT_LOWEST``h]j^ )}(hjh]hDRM_MM_INSERT_LOWEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKohjubjt )}(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:482: ./include/drm/drm_mm.hhKlhjubh)}(hDoes not search all holes.h]hDoes not search all holes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKphjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKohjubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubh)}(h**Description**h]j7 )}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKrhjRhhubh)}(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 }(hjAhhhNhNubh)}(h :c:type:`struct drm_mm `h]j^ )}(hjKh]h struct drm_mm}(hjMhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjIubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mmuh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhK=hjAubhXQ 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 }(hjAhhhNhNubh)}(h:c:type:`drm_mm_node`h]j^ )}(hjoh]h drm_mm_node}(hjqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_nodeuh1hhjhhK=hjAubh from within the hole, the }(hjAhhhNhNubh)}(h:c:type:`drm_mm_insert_mode`h]j^ )}(hjh]hdrm_mm_insert_mode}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_insert_modeuh1hhjhhK=hjAubhM also dictate whether to allocate the lowest matching address or the highest.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhhK=hjRhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_node (C struct) c.drm_mm_nodehNtauh1jhjRhhhNhNubj)}(hhh](j)}(h drm_mm_nodeh]j)}(hstruct drm_mm_nodeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKHubj)}(h drm_mm_nodeh]j)}(hjh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKHubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKHubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKHhjhhubj )}(hhh]h)}(h$allocated block in the DRM allocatorh]h$allocated block in the DRM allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKHubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j,j( j,j) j* j+ uh1jhhhjRhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4ubh:}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj0ubj )}(hMstruct drm_mm_node { unsigned long color; u64 start; u64 size; };h]hMstruct drm_mm_node { unsigned long color; u64 start; u64 size; };}hjQsbah}(h]h ]h"]h$]h&]jjuh1j hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj0ubh)}(h **Members**h]j7 )}(hjbh]hMembers}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj`ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj0ubjM )}(hhh](jR )}(h%``color`` Opaque driver-private tag. h](jX )}(h ``color``h]j^ )}(hjh]hcolor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj{ubjt )}(hhh]h)}(hOpaque driver-private tag.h]hOpaque driver-private tag.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hj{ubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjxubjR )}(h0``start`` Start address of the allocated block. h](jX )}(h ``start``h]j^ )}(hjh]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjxubjR )}(h%``size`` Size of the allocated block.h](jX )}(h``size``h]j^ )}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubjt )}(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:482: ./include/drm/drm_mm.hhKhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjxubeh}(h]h ]h"]h$]h&]uh1jL hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubh)}(h**Description**h]j7 )}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjRhhubh)}(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 }(hjLhhhNhNubh)}(h:c:type:`drm_mm`h]j^ )}(hjVh]hdrm_mm}(hjXhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjTubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mmuh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjLubhX 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.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjshKhjRhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm (C struct)c.drm_mmhNtauh1jhjRhhhNhNubj)}(hhh](j)}(hdrm_mmh]j)}(h struct drm_mmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_mmh]j)}(hjh]hdrm_mm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h)}(h DRM allocatorh]h DRM allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjRhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubj )}(hwstruct drm_mm { void (*color_adjust)(const struct drm_mm_node *node, unsigned long color, u64 *start, u64 *end); };h]hwstruct drm_mm { void (*color_adjust)(const struct drm_mm_node *node, unsigned long color, u64 *start, u64 *end); };}hjsbah}(h]h ]h"]h$]h&]jjuh1j hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubh)}(h **Members**h]j7 )}(hj'h]hMembers}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj%ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubjM )}(hhh]jR )}(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](jX )}(h``color_adjust``h]j^ )}(hjFh]h color_adjust}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj@ubjt )}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj\ubah}(h]h ]h"]h$]h&]uh1js hj@ubeh}(h]h ]h"]h$]h&]uh1jQ hj[hKhj=ubah}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjRhhubh)}(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 }(hjhhhNhNubj7 )}(h**color_adjust**h]h color_adjust}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh 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:482: ./include/drm/drm_mm.hhKhjRhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_scan (C struct) c.drm_mm_scanhNtauh1jhjRhhhNhNubj)}(hhh](j)}(h drm_mm_scanh]j)}(hstruct drm_mm_scanh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h drm_mm_scanh]j)}(hjh]h drm_mm_scan}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h)}(h#DRM allocator eviction roaster datah]h#DRM allocator eviction roaster data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j3j( j3j) j* j+ uh1jhhhjRhNhNubj- )}(h:**Definition**:: struct drm_mm_scan { }; **Members**h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;ubh:}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj7ubj )}(hstruct drm_mm_scan { };h]hstruct drm_mm_scan { };}hjXsbah}(h]h ]h"]h$]h&]jjuh1j hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj7ubh)}(h **Members**h]j7 )}(hjih]hMembers}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjgubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjRhhubh)}(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:482: ./include/drm/drm_mm.hhKhjRhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_mm_node_allocated (C function)c.drm_mm_node_allocatedhNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_mm_node_allocatedh]j)}(hdrm_mm_node_allocatedh]hdrm_mm_node_allocated}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj>)}(h (const struct drm_mm_node *node)h]jD)}(hconst struct drm_mm_node *nodeh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj=modnameN classnameNjj)}j]j)}j}jsbc.drm_mm_node_allocatedasbuh1hhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(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:482: ./include/drm/drm_mm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubjM )}(hhh]jR )}(h8``const struct drm_mm_node *node`` drm_mm_node to check h](jX )}(h"``const struct drm_mm_node *node``h]j^ )}(hjh]hconst struct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubjt )}(hhh]h)}(hdrm_mm_node to checkh]hdrm_mm_node to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubh)}(h **Return**h]j7 )}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjPubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubh)}(h"True if the **node** is allocated.h](h True if the }(hjhhhhNhNubj7 )}(h**node**h]hnode}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjhubh is allocated.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_initialized (C function)c.drm_mm_initializedhNtauh1jhjRhhhNhNubj)}(hhh](j)}(h1bool drm_mm_initialized (const struct drm_mm *mm)h]j)}(h0bool drm_mm_initialized(const struct drm_mm *mm)h](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_mm_initializedh]j)}(hdrm_mm_initializedh]hdrm_mm_initialized}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h(const struct drm_mm *mm)h]jD)}(hconst struct drm_mm *mmh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j)}j}jsbc.drm_mm_initializedasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmmh]hmm}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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:482: ./include/drm/drm_mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM hjubjM )}(hhh]jR )}(h,``const struct drm_mm *mm`` drm_mm to check h](jX )}(h``const struct drm_mm *mm``h]j^ )}(hjh]hconst struct drm_mm *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM hjubjt )}(hhh]h)}(hdrm_mm to checkh]hdrm_mm to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM hjubh)}(h **Return**h]j7 )}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubh)}(h"True if the **mm** is initialized.h](h True if the }(hjKhhhNhNubj7 )}(h**mm**h]hmm}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjKubh is initialized.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_mm_hole_follows (C function)c.drm_mm_hole_followshNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_mm_hole_followsh]j)}(hdrm_mm_hole_followsh]hdrm_mm_hole_follows}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h (const struct drm_mm_node *node)h]jD)}(hconst struct drm_mm_node *nodeh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_mm_hole_followsasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h'checks whether a hole follows this nodeh]h'checks whether a hole follows this node}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjchhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j~j( j~j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjM )}(hhh]jR )}(h8``const struct drm_mm_node *node`` drm_mm_node to check h](jX )}(h"``const struct drm_mm_node *node``h]j^ )}(hjh]hconst struct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(hdrm_mm_node to checkh]hdrm_mm_node to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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:482: ./include/drm/drm_mm.hhMhjubh)}(h **Return**h]j7 )}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM!hjubh)}(h$True if a hole follows the **node**.h](hTrue if a hole follows the }(hjhhhNhNubj7 )}(h**node**h]hnode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_mm_hole_node_start (C function)c.drm_mm_hole_node_starthNtauh1jhjRhhhNhNubj)}(hhh](j)}(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]j)}(hu64h]hu64}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjemodnameN classnameNjj)}j]j)}j}drm_mm_hole_node_startsbc.drm_mm_hole_node_startasbuh1hhj\hhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjhM0ubj)}(hdrm_mm_hole_node_starth]j)}(hjh]hdrm_mm_hole_node_start}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhjhM0ubj>)}(h%(const struct drm_mm_node *hole_node)h]jD)}(h#const struct drm_mm_node *hole_nodeh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_mm_hole_node_startasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h hole_nodeh]h hole_node}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hj\hhhjhM0ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjXhhhjhM0ubah}(h]jSah ](jjeh"]h$]h&]j j )j huh1jhjhM0hjUhhubj )}(hhh]h)}(h1computes the start of the hole following **node**h](h)computes the start of the hole following }(hjNhhhNhNubj7 )}(h**node**h]hnode}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM0hjKhhubah}(h]h ]h"]h$]h&]uh1j hjUhhhjhM0ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jtj( jtj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj|ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM4hjxubjM )}(hhh]jR )}(h_``const struct drm_mm_node *hole_node`` drm_mm_node which implicitly tracks the following hole h](jX )}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM1hjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM1hjubah}(h]h ]h"]h$]h&]uh1jL hjxubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM3hjxubh)}(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:482: ./include/drm/drm_mm.hhM2hjxubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM6hjxubh)}(hStart of the subsequent hole.h]hStart of the subsequent hole.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM7hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_mm_hole_node_end (C function)c.drm_mm_hole_node_endhNtauh1jhjRhhhNhNubj)}(hhh](j)}(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]j)}(hu64h]hu64}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjImodnameN classnameNjj)}j]j)}j}drm_mm_hole_node_endsbc.drm_mm_hole_node_endasbuh1hhj@hhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMFubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhjhhMFubj)}(hdrm_mm_hole_node_endh]j)}(hjeh]hdrm_mm_hole_node_end}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhjhhMFubj>)}(h%(const struct drm_mm_node *hole_node)h]jD)}(h#const struct drm_mm_node *hole_nodeh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jcc.drm_mm_hole_node_endasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h hole_nodeh]h hole_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hj@hhhjhhMFubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj<hhhjhhMFubah}(h]j7ah ](jjeh"]h$]h&]j j )j huh1jhjhhMFhj9hhubj )}(hhh]h)}(h/computes the end of the hole following **node**h](h'computes the end of the hole following }(hj2hhhNhNubj7 )}(h**node**h]hnode}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2ubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMFhj/hhubah}(h]h ]h"]h$]h&]uh1j hj9hhhjhhMFubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jXj( jXj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj`ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMJhj\ubjM )}(hhh]jR )}(h_``const struct drm_mm_node *hole_node`` drm_mm_node which implicitly tracks the following hole h](jX )}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMGhj{ubjt )}(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&]uh1js hj{ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMGhjxubah}(h]h ]h"]h$]h&]uh1jL hj\ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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:482: ./include/drm/drm_mm.hhMHhj\ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMLhj\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:482: ./include/drm/drm_mm.hhMMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_nodes (C macro)c.drm_mm_nodeshNtauh1jhjRhhhNhNubj)}(hhh](j)}(h drm_mm_nodesh]j)}(h drm_mm_nodesh]j)}(h drm_mm_nodesh]j)}(hj"h]h drm_mm_nodes}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMVubah}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj?hMVubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj?hMVhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhj?hMVubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jXj( jXj) j* j+ uh1jhhhjRhNhNubh)}(h``drm_mm_nodes (mm)``h]j^ )}(hj^h]hdrm_mm_nodes (mm)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj\ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMXhjRhhubj )}(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}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMVhjtubah}(h]h ]h"]h$]h&]uh1jhjhMVhjRhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMZhjubjM )}(hhh]jR )}(h'``mm`` the struct drm_mm range manager h](jX )}(h``mm``h]j^ )}(hjh]hmm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMWhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMWhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMXhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM]hjubh)}(hThe node list, may be empty.h]hThe node list, may be empty.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_for_each_node (C macro)c.drm_mm_for_each_nodehNtauh1jhjRhhhNhNubj)}(hhh](j)}(hdrm_mm_for_each_nodeh]j)}(hdrm_mm_for_each_nodeh]j)}(hdrm_mm_for_each_nodeh]j)}(hjSh]hdrm_mm_for_each_node}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMdubah}(h]h ]h"]h$]h&]jjjuh1jjjhjQhhhjphMdubah}(h]jLah ](jjeh"]h$]h&]j j )j huh1jhjphMdhjNhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjNhhhjphMdubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjRhNhNubh)}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMfhjRhhubj )}(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:482: ./include/drm/drm_mm.hhMdhjubah}(h]h ]h"]h$]h&]uh1jhjhMdhjRhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhhjubjM )}(hhh](jR )}(hY``entry`` :c:type:`struct drm_mm_node ` to assign to in each iteration step h](jX )}(h ``entry``h]j^ )}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMehjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_nodeuh1hhjhMehjubh$ to assign to in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMehjubjR )}(h*``mm`` :c:type:`drm_mm` allocator to walk h](jX )}(h``mm``h]j^ )}(hj;h]hmm}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMfhj5ubjt )}(hhh]h)}(h":c:type:`drm_mm` allocator to walkh](h)}(h:c:type:`drm_mm`h]j^ )}(hjZh]hdrm_mm}(hj\hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjXubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mmuh1hhjPhMfhjTubh allocator to walk}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjPhMfhjQubah}(h]h ]h"]h$]h&]uh1js hj5ubeh}(h]h ]h"]h$]h&]uh1jQ hjPhMfhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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:482: ./include/drm/drm_mm.hhMghjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_mm_for_each_node_safe (C macro)c.drm_mm_for_each_node_safehNtauh1jhjRhhhNhNubj)}(hhh](j)}(hdrm_mm_for_each_node_safeh]j)}(hdrm_mm_for_each_node_safeh]j)}(hdrm_mm_for_each_node_safeh]j)}(hjh]hdrm_mm_for_each_node_safe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMoubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMoubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMohjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhMoubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhjRhNhNubh)}(h/``drm_mm_for_each_node_safe (entry, next, mm)``h]j^ )}(hjh]h+drm_mm_for_each_node_safe (entry, next, mm)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMqhjRhhubj )}(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}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMohj&ubah}(h]h ]h"]h$]h&]uh1jhj8hMohjRhhubj- )}(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]j7 )}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjCubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMshj?ubjM )}(hhh](jR )}(hY``entry`` :c:type:`struct drm_mm_node ` to assign to in each iteration step h](jX )}(h ``entry``h]j^ )}(hjdh]hentry}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMphj^ubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_nodeuh1hhjyhMphj}ubh$ to assign to in each iteration step}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMphjzubah}(h]h ]h"]h$]h&]uh1js hj^ubeh}(h]h ]h"]h$]h&]uh1jQ hjyhMphj[ubjR )}(hK``next`` :c:type:`struct drm_mm_node ` to store the next step h](jX )}(h``next``h]j^ )}(hjh]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMqhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_nodeuh1hhjhMqhjubh to store the next step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMqhj[ubjR )}(h*``mm`` :c:type:`drm_mm` allocator to walk h](jX )}(h``mm``h]j^ )}(hj h]hmm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMrhj ubjt )}(hhh]h)}(h":c:type:`drm_mm` allocator to walkh](h)}(h:c:type:`drm_mm`h]j^ )}(hj3 h]hdrm_mm}(hj5 hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj1 ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mmuh1hhj) hMrhj- ubh allocator to walk}(hj- hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj) hMrhj* ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj) hMrhj[ubeh}(h]h ]h"]h$]h&]uh1jL hj?ubh)}(h**Description**h]j7 )}(hjn h]h Description}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjl ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMthj?ubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMshj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_for_each_hole (C macro)c.drm_mm_for_each_holehNtauh1jhjRhhhNhNubj)}(hhh](j)}(hdrm_mm_for_each_holeh]j)}(hdrm_mm_for_each_holeh]j)}(hdrm_mm_for_each_holeh]j)}(hj h]hdrm_mm_for_each_hole}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM{ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hM{ubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj hM{hj hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj hhhj hM{ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhjRhNhNubh)}(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&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM}hjRhhubj )}(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:482: ./include/drm/drm_mm.hhM{hj ubah}(h]h ]h"]h$]h&]uh1jhj hM{hjRhhubj- )}(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]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhj ubjM )}(hhh](jR )}(h@``pos`` :c:type:`drm_mm_node` used internally to track progress h](jX )}(h``pos``h]j^ )}(hj= h]hpos}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj; ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM|hj7 ubjt )}(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}(hj^ hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjZ ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_nodeuh1hhjR hM|hjV ubh" used internally to track progress}(hjV hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjR hM|hjS ubah}(h]h ]h"]h$]h&]uh1js hj7 ubeh}(h]h ]h"]h$]h&]uh1jQ hjR hM|hj4 ubjR )}(h*``mm`` :c:type:`drm_mm` allocator to walk h](jX )}(h``mm``h]j^ )}(hj h]hmm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM}hj ubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mmuh1hhj hM}hj ubh allocator to walk}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM}hj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hM}hj4 ubjR )}(hL``hole_start`` ulong variable to assign the hole start to on each iteration h](jX )}(h``hole_start``h]j^ )}(hj h]h hole_start}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhM~hj ubjt )}(hhh]h)}(h)}(hy(struct drm_mm *mm, struct drm_mm_node *node, u64 size, u64 alignment, unsigned long color, enum drm_mm_insert_mode mode)h](jD)}(hstruct drm_mm *mmh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hj" hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj$ modnameN classnameNjj)}j]j)}j}j sbc.drm_mm_insert_node_genericasbuh1hhj ubj)}(h h]h }(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hmmh]hmm}(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hstruct drm_mm_node *nodeh](j)}(hj? h]hstruct}(hjv hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j> c.drm_mm_insert_node_genericasbuh1hhjr ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubj)}(hnodeh]hnode}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hu64 sizeh](h)}(hhh]j)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j> c.drm_mm_insert_node_genericasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(h u64 alignmenth](h)}(hhh]j)}(hu64h]hu64}(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj. ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj3 modnameN classnameNjj)}j]j> c.drm_mm_insert_node_genericasbuh1hhj* ubj)}(h h]h }(hjO hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj* ubj)}(h alignmenth]h alignment}(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj* ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hunsigned long colorh](j)}(hunsignedh]hunsigned}(hjv hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubj)}(hcolorh]hcolor}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(henum drm_mm_insert_mode modeh](j)}(hjh]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_mm_insert_modeh]hdrm_mm_insert_mode}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j> c.drm_mm_insert_node_genericasbuh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubeh}(h]h ]h"]h$]h&]jjuh1j=hj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj hMhj hhubj )}(hhh]h)}(h$search for space and insert **node**h](hsearch for space and insert }(hj;hhhNhNubj7 )}(h**node**h]hnode}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;ubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jaj( jaj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjiubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjeubjM )}(hhh](jR )}(h.``struct drm_mm *mm`` drm_mm to allocate from h](jX )}(h``struct drm_mm *mm``h]j^ )}(hjh]hstruct drm_mm *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(hdrm_mm to allocate fromh]hdrm_mm to allocate from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h8``struct drm_mm_node *node`` preallocate node to insert h](jX )}(h``struct drm_mm_node *node``h]j^ )}(hjh]hstruct drm_mm_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(hpreallocate node to inserth]hpreallocate node to insert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h$``u64 size`` size of the allocation h](jX )}(h ``u64 size``h]j^ )}(hjh]hu64 size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h.``u64 alignment`` alignment of the allocation h](jX )}(h``u64 alignment``h]j^ )}(hj5h]h u64 alignment}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj3ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhj/ubjt )}(hhh]h)}(halignment of the allocationh]halignment of the allocation}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1js hj/ubeh}(h]h ]h"]h$]h&]uh1jQ hjJhMhjubjR )}(h>``unsigned long color`` opaque tag value to use for this node h](jX )}(h``unsigned long color``h]j^ )}(hjnh]hunsigned long color}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjlubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjhubjt )}(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&]uh1js hjhubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hO``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement h](jX )}(h ``enum drm_mm_insert_mode mode``h]j^ )}(hjh]henum drm_mm_insert_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjeubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjeubh)}(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:482: ./include/drm/drm_mm.hhMhjeubh)}(h+The preallocated node must be cleared to 0.h]h+The preallocated node must be cleared to 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjeubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjeubh)}(h20 on success, -ENOSPC if there's no suitable hole.h]h40 on success, -ENOSPC if there’s no suitable hole.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_insert_node (C function)c.drm_mm_insert_nodehNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjkhMubj)}(hdrm_mm_insert_nodeh]j)}(hdrm_mm_insert_nodeh]hdrm_mm_insert_node}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjkhMubj>)}(h7(struct drm_mm *mm, struct drm_mm_node *node, u64 size)h](jD)}(hstruct drm_mm *mmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_mm_insert_nodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_mm_node *nodeh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj,modnameN classnameNjj)}j]jc.drm_mm_insert_nodeasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 sizeh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_mm_insert_nodeasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjYhhhjkhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjkhMubah}(h]jPah ](jjeh"]h$]h&]j j )j huh1jhjkhMhjRhhubj )}(hhh]h)}(h$search for space and insert **node**h](hsearch for space and insert }(hjhhhNhNubj7 )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjRhhhjkhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjM )}(hhh](jR )}(h.``struct drm_mm *mm`` drm_mm to allocate from h](jX )}(h``struct drm_mm *mm``h]j^ )}(hj$h]hstruct drm_mm *mm}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(hdrm_mm to allocate fromh]hdrm_mm to allocate from}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj9hMhjubjR )}(h8``struct drm_mm_node *node`` preallocate node to insert h](jX )}(h``struct drm_mm_node *node``h]j^ )}(hj]h]hstruct drm_mm_node *node}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjWubjt )}(hhh]h)}(hpreallocate node to inserth]hpreallocate node to insert}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1js hjWubeh}(h]h ]h"]h$]h&]uh1jQ hjrhMhjubjR )}(h$``u64 size`` size of the allocation h](jX )}(h ``u64 size``h]j^ )}(hjh]hu64 size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubh)}(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 }(hjhhhNhNubj7 )}(h **color**h]hcolor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh set to 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubh)}(h+The preallocated node must be cleared to 0.h]h+The preallocated node must be cleared to 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_clean (C function)c.drm_mm_cleanhNtauh1jhjRhhhNhNubj)}(hhh](j)}(h+bool drm_mm_clean (const struct drm_mm *mm)h]j)}(h*bool drm_mm_clean(const struct drm_mm *mm)h](j)}(hj=2h]hbool}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjkhMubj)}(h drm_mm_cleanh]j)}(h drm_mm_cleanh]h drm_mm_clean}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjkhMubj>)}(h(const struct drm_mm *mm)h]jD)}(hconst struct drm_mm *mmh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_mm_cleanasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjZhhhjkhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjVhhhjkhMubah}(h]jQah ](jjeh"]h$]h&]j j )j huh1jhjkhMhjShhubj )}(hhh]h)}(h$checks whether an allocator is cleanh]h$checks whether an allocator is clean}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1j hjShhhjkhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jPj( jPj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjXubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjTubjM )}(hhh]jR )}(h6``const struct drm_mm *mm`` drm_mm allocator to check h](jX )}(h``const struct drm_mm *mm``h]j^ )}(hjyh]hconst struct drm_mm *mm}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjsubjt )}(hhh]h)}(hdrm_mm allocator to checkh]hdrm_mm allocator to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjpubah}(h]h ]h"]h$]h&]uh1jL hjTubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjTubh)}(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:482: ./include/drm/drm_mm.hhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(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_rangehNtauh1jhjRhhhNhNubj)}(hhh](j)}(hdrm_mm_for_each_node_in_rangeh]j)}(hdrm_mm_for_each_node_in_rangeh]j)}(hdrm_mm_for_each_node_in_rangeh]j)}(hjh]hdrm_mm_for_each_node_in_range}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' j)j( j)j) j* j+ uh1jhhhjRhNhNubh)}(h@``drm_mm_for_each_node_in_range (node__, mm__, start__, end__)``h]j^ )}(hj/h]h`, and may even continue indefinitely.h](h)}(h**Parameters**h]j7 )}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjbubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhj^ubjM )}(hhh](jR )}(hE``node__`` drm_mm_node structure to assign to in each iteration step h](jX )}(h ``node__``h]j^ )}(hjh]hnode__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhj}ubjt )}(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&]uh1js hj}ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjzubjR )}(h"``mm__`` drm_mm allocator to walk h](jX )}(h``mm__``h]j^ )}(hjh]hmm__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(hdrm_mm allocator to walkh]hdrm_mm allocator to walk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjzubjR )}(h>``start__`` starting offset, the first node will overlap this h](jX )}(h ``start__``h]j^ )}(hjh]hstart__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(h1starting offset, the first node will overlap thish]h1starting offset, the first node will overlap this}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjzubjR )}(hP``end__`` ending offset, the last node will start before this (but may overlap) h](jX )}(h ``end__``h]j^ )}(hj.h]hend__}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj,ubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhj(ubjt )}(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)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjDubah}(h]h ]h"]h$]h&]uh1js hj(ubeh}(h]h ]h"]h$]h&]uh1jQ hjChMhjzubeh}(h]h ]h"]h$]h&]uh1jL hj^ubh)}(h**Description**h]j7 )}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjgubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhj^ubh)}(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 }(hjhhhNhNubj7 )}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh and }(hjhhhNhNubj7 )}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh. 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 }(hjhhhNhNubj7 )}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh@ is within (or is the upper limit of) the drm_mm allocator. If [}(hjhhhNhNubj7 )}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh, }(hjhhhNhNubj7 )}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh[] 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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mmuh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubh%, and may even continue indefinitely.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_scan_init (C function)c.drm_mm_scan_inithNtauh1jhjRhhhNhNubj)}(hhh](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]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](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hMubj)}(hdrm_mm_scan_inith]j)}(hdrm_mm_scan_inith]hdrm_mm_scan_init}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj9hMubj>)}(hy(struct drm_mm_scan *scan, struct drm_mm *mm, u64 size, u64 alignment, unsigned long color, enum drm_mm_insert_mode mode)h](jD)}(hstruct drm_mm_scan *scanh](j)}(hj? h]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(h drm_mm_scanh]h drm_mm_scan}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jNsbc.drm_mm_scan_initasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hscanh]hscan}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(hstruct drm_mm *mmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmmh]hmm}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(hu64 sizeh](h)}(hhh]j)}(hu64h]hu64}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjOmodnameN classnameNjj)}j]jc.drm_mm_scan_initasbuh1hhjFubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hsizeh]hsize}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(h u64 alignmenth](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_mm_scan_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h alignmenth]h alignment}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(hunsigned long colorh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcolorh]hcolor}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(henum drm_mm_insert_mode modeh](j)}(hjh]henum}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(hdrm_mm_insert_modeh]hdrm_mm_insert_mode}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjKmodnameN classnameNjj)}j]jc.drm_mm_scan_initasbuh1hhj'ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hmodeh]hmode}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubeh}(h]h ]h"]h$]h&]jjuh1j=hj'hhhj9hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj9hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj9hMhj hhubj )}(hhh]h)}(hinitialize lru scanningh]hinitialize lru scanning}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hj hhhj9hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjM )}(hhh](jR )}(h(``struct drm_mm_scan *scan`` scan state h](jX )}(h``struct drm_mm_scan *scan``h]j^ )}(hjh]hstruct drm_mm_scan *scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(h scan stateh]h scan state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h%``struct drm_mm *mm`` drm_mm to scan h](jX )}(h``struct drm_mm *mm``h]j^ )}(hjh]hstruct drm_mm *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(hdrm_mm to scanh]hdrm_mm to scan}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj.hMhjubjR )}(h$``u64 size`` size of the allocation h](jX )}(h ``u64 size``h]j^ )}(hjRh]hu64 size}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjPubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjLubjt )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1js hjLubeh}(h]h ]h"]h$]h&]uh1jQ hjghMhjubjR )}(h.``u64 alignment`` alignment of the allocation h](jX )}(h``u64 alignment``h]j^ )}(hjh]h u64 alignment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(hhh]h)}(halignment of the allocationh]halignment of the allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hC``unsigned long color`` opaque tag value to use for the allocation h](jX )}(h``unsigned long color``h]j^ )}(hjh]hunsigned long color}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hO``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement h](jX )}(h ``enum drm_mm_insert_mode mode``h]j^ )}(hjh]henum drm_mm_insert_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj6ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./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:482: ./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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:482: ./include/drm/drm_mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_mm_reserve_node (C function)c.drm_mm_reserve_nodehNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_mm_reserve_nodeh]j)}(hdrm_mm_reserve_nodeh]hdrm_mm_reserve_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h-(struct drm_mm *mm, struct drm_mm_node *node)h](jD)}(hstruct drm_mm *mmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_mm_reserve_nodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmmh]hmm}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_mm_node *nodeh](j)}(hj? h]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjjmodnameN classnameNjj)}j]jc.drm_mm_reserve_nodeasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hinsert an pre-initialized nodeh]hinsert an pre-initialized node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjubjM )}(hhh](jR )}(h?``struct drm_mm *mm`` drm_mm allocator to insert **node** into h](jX )}(h``struct drm_mm *mm``h]j^ )}(hj h]hstruct drm_mm *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjubjt )}(hhh]h)}(h(drm_mm allocator to insert **node** intoh](hdrm_mm allocator to insert }(hj%hhhNhNubj7 )}(h**node**h]hnode}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj%ubh into}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj!hMhjubjR )}(h3``struct drm_mm_node *node`` drm_mm_node to insert h](jX )}(h``struct drm_mm_node *node``h]j^ )}(hjWh]hstruct drm_mm_node *node}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjUubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjQubjt )}(hhh]h)}(hdrm_mm_node to inserth]hdrm_mm_node to insert}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hjlhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_mm_node`h]j^ )}(hjh]h drm_mm_node}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_mm_nodeuh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjubhX+ 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjubh)}(h;0 on success, -ENOSPC if there's no hole where **node** is.h](h10 on success, -ENOSPC if there’s no hole where }(hjhhhNhNubj7 )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh is.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_mm_insert_node_in_range (C function)c.drm_mm_insert_node_in_rangehNtauh1jhjRhhhNhNubj)}(hhh](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]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](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhMubj)}(hdrm_mm_insert_node_in_rangeh]j)}(hdrm_mm_insert_node_in_rangeh]hdrm_mm_insert_node_in_range}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhjAhMubj>)}(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](jD)}(hstruct drm_mm *const mmh](j)}(hj? h]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jVsbc.drm_mm_insert_node_in_rangeasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(hstruct drm_mm_node *const nodeh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_mm_insert_node_in_rangeasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjJh]hconst}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnodeh]hnode}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(hu64 sizeh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_mm_insert_node_in_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(h u64 alignmenth](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_mm_insert_node_in_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h alignmenth]h alignment}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(hunsigned long colorh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj& hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hcolorh]hcolor}(hjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(hu64 range_starth](h)}(hhh]j)}(hu64h]hu64}(hjl hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjn modnameN classnameNjj)}j]jc.drm_mm_insert_node_in_rangeasbuh1hhje ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje ubj)}(h range_starth]h range_start}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(h u64 range_endh](h)}(hhh]j)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]jc.drm_mm_insert_node_in_rangeasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h range_endh]h range_end}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(henum drm_mm_insert_mode modeh](j)}(hjh]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_mm_insert_modeh]hdrm_mm_insert_mode}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj!modnameN classnameNjj)}j]jc.drm_mm_insert_node_in_rangeasbuh1hhj ubj)}(h h]h }(hj5!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hmodeh]hmode}(hjC!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubeh}(h]h ]h"]h$]h&]jjuh1j=hj/hhhjAhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhjAhMubah}(h]j&ah ](jjeh"]h$]h&]j j )j huh1jhjAhMhj(hhubj )}(hhh]h)}(h+ranged search for space and insert **node**h](h#ranged search for space and insert }(hjm!hhhNhNubj7 )}(h**node**h]hnode}(hju!hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjm!ubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjj!hhubah}(h]h ]h"]h$]h&]uh1j hj(hhhjAhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j!j( j!j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj!ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj!ubjM )}(hhh](jR )}(h5``struct drm_mm * const mm`` drm_mm to allocate from h](jX )}(h``struct drm_mm * const mm``h]j^ )}(hj!h]hstruct drm_mm * const mm}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj!ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj!ubjt )}(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&]uh1js hj!ubeh}(h]h ]h"]h$]h&]uh1jQ hj!hMhj!ubjR )}(h?``struct drm_mm_node * const node`` preallocate node to insert h](jX )}(h#``struct drm_mm_node * const node``h]j^ )}(hj!h]hstruct drm_mm_node * const node}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj!ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj!ubjt )}(hhh]h)}(hpreallocate node to inserth]hpreallocate node to insert}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj "hMhj "ubah}(h]h ]h"]h$]h&]uh1js hj!ubeh}(h]h ]h"]h$]h&]uh1jQ hj "hMhj!ubjR )}(h$``u64 size`` size of the allocation h](jX )}(h ``u64 size``h]j^ )}(hj."h]hu64 size}(hj0"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj,"ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj("ubjt )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hjG"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC"hMhjD"ubah}(h]h ]h"]h$]h&]uh1js hj("ubeh}(h]h ]h"]h$]h&]uh1jQ hjC"hMhj!ubjR )}(h.``u64 alignment`` alignment of the allocation h](jX )}(h``u64 alignment``h]j^ )}(hjg"h]h u64 alignment}(hji"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hje"ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhja"ubjt )}(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&]uh1js hja"ubeh}(h]h ]h"]h$]h&]uh1jQ hj|"hMhj!ubjR )}(h>``unsigned long color`` opaque tag value to use for this node h](jX )}(h``unsigned long color``h]j^ )}(hj"h]hunsigned long color}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj"ubjt )}(hhh]h)}(h%opaque tag value to use for this nodeh]h%opaque tag value to use for this node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1js hj"ubeh}(h]h ]h"]h$]h&]uh1jQ hj"hMhj!ubjR )}(h=``u64 range_start`` start of the allowed range for this node h](jX )}(h``u64 range_start``h]j^ )}(hj"h]hu64 range_start}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj"ubjt )}(hhh]h)}(h(start of the allowed range for this nodeh]h(start of the allowed range for this node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1js hj"ubeh}(h]h ]h"]h$]h&]uh1jQ hj"hMhj!ubjR )}(h9``u64 range_end`` end of the allowed range for this node h](jX )}(h``u64 range_end``h]j^ )}(hj#h]h u64 range_end}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj #ubjt )}(hhh]h)}(h&end of the allowed range for this nodeh]h&end of the allowed range for this node}(hj+#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'#hMhj(#ubah}(h]h ]h"]h$]h&]uh1js hj #ubeh}(h]h ]h"]h$]h&]uh1jQ hj'#hMhj!ubjR )}(hO``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement h](jX )}(h ``enum drm_mm_insert_mode mode``h]j^ )}(hjK#h]henum drm_mm_insert_mode mode}(hjM#hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjI#ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjE#ubjt )}(hhh]h)}(h-fine-tune the allocation search and placementh]h-fine-tune the allocation search and placement}(hjd#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`#hMhja#ubah}(h]h ]h"]h$]h&]uh1js hjE#ubeh}(h]h ]h"]h$]h&]uh1jQ hj`#hMhj!ubeh}(h]h ]h"]h$]h&]uh1jL hj!ubh)}(h**Description**h]j7 )}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj#ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj!ubh)}(h/The preallocated **node** must be cleared to 0.h](hThe preallocated }(hj#hhhNhNubj7 )}(h**node**h]hnode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj#ubh must be cleared to 0.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj!ubh)}(h **Return**h]j7 )}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj#ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj!ubh)}(h20 on success, -ENOSPC if there's no suitable hole.h]h40 on success, -ENOSPC if there’s no suitable hole.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_remove_node (C function)c.drm_mm_remove_nodehNtauh1jhjRhhhNhNubj)}(hhh](j)}(h2void drm_mm_remove_node (struct drm_mm_node *node)h]j)}(h1void drm_mm_remove_node(struct drm_mm_node *node)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMmubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj$hMmubj)}(hdrm_mm_remove_nodeh]j)}(hdrm_mm_remove_nodeh]hdrm_mm_remove_node}(hj%$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj$hMmubj>)}(h(struct drm_mm_node *node)h]jD)}(hstruct drm_mm_node *nodeh](j)}(hj? h]hstruct}(hjA$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=$ubj)}(h h]h }(hjN$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=$ubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hj_$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\$ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetja$modnameN classnameNjj)}j]j)}j}j'$sbc.drm_mm_remove_nodeasbuh1hhj=$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=$ubj)}(hnodeh]hnode}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj9$ubah}(h]h ]h"]h$]h&]jjuh1j=hj$hhhj$hMmubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj$hMmubah}(h]j#ah ](jjeh"]h$]h&]j j )j huh1jhj$hMmhj#hhubj )}(hhh]h)}(h(Remove a memory node from the allocator.h]h(Remove a memory node from the allocator.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMmhj$hhubah}(h]h ]h"]h$]h&]uh1j hj#hhhj$hMmubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j$j( j$j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj$ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMqhj$ubjM )}(hhh]jR )}(h3``struct drm_mm_node *node`` drm_mm_node to remove h](jX )}(h``struct drm_mm_node *node``h]j^ )}(hj%h]hstruct drm_mm_node *node}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj%ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMnhj$ubjt )}(hhh]h)}(hdrm_mm_node to removeh]hdrm_mm_node to remove}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMnhj%ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj%hMnhj$ubah}(h]h ]h"]h$]h&]uh1jL hj$ubh)}(h**Description**h]j7 )}(hj@%h]h Description}(hjB%hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj>%ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMphj$ubh)}(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.}(hjV%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMohj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_mm_scan_init_with_range (C function)c.drm_mm_scan_init_with_rangehNtauh1jhjRhhhNhNubj)}(hhh](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]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](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMubj)}(hdrm_mm_scan_init_with_rangeh]j)}(hdrm_mm_scan_init_with_rangeh]hdrm_mm_scan_init_with_range}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj%hMubj>)}(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](jD)}(hstruct drm_mm_scan *scanh](j)}(hj? h]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hhh]j)}(h drm_mm_scanh]h drm_mm_scan}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj%modnameN classnameNjj)}j]j)}j}j%sbc.drm_mm_scan_init_with_rangeasbuh1hhj%ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hscanh]hscan}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(hstruct drm_mm *mmh](j)}(hj? h]hstruct}(hj4&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0&ubj)}(h h]h }(hjA&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0&ubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hjR&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO&ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjT&modnameN classnameNjj)}j]j%c.drm_mm_scan_init_with_rangeasbuh1hhj0&ubj)}(h h]h }(hjp&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0&ubj)}(hjh]h*}(hj~&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0&ubj)}(hmmh]hmm}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(hu64 sizeh](h)}(hhh]j)}(hu64h]hu64}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj&modnameN classnameNjj)}j]j%c.drm_mm_scan_init_with_rangeasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hsizeh]hsize}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(h u64 alignmenth](h)}(hhh]j)}(hu64h]hu64}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj&modnameN classnameNjj)}j]j%c.drm_mm_scan_init_with_rangeasbuh1hhj&ubj)}(h h]h }(hj 'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h alignmenth]h alignment}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(hunsigned long colorh](j)}(hunsignedh]hunsigned}(hj4'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0'ubj)}(h h]h }(hjB'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0'ubj)}(hlongh]hlong}(hjP'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0'ubj)}(h h]h }(hj^'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0'ubj)}(hcolorh]hcolor}(hjl'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(h u64 starth](h)}(hhh]j)}(hu64h]hu64}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj'modnameN classnameNjj)}j]j%c.drm_mm_scan_init_with_rangeasbuh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hstarth]hstart}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(hu64 endh](h)}(hhh]j)}(hu64h]hu64}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj'modnameN classnameNjj)}j]j%c.drm_mm_scan_init_with_rangeasbuh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hendh]hend}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(henum drm_mm_insert_mode modeh](j)}(hjh]henum}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj"(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(hdrm_mm_insert_modeh]hdrm_mm_insert_mode}(hj3(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0(ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj5(modnameN classnameNjj)}j]j%c.drm_mm_scan_init_with_rangeasbuh1hhj(ubj)}(h h]h }(hjQ(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hmodeh]hmode}(hj_(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubeh}(h]h ]h"]h$]h&]jjuh1j=hj%hhhj%hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}%hhhj%hMubah}(h]jx%ah ](jjeh"]h$]h&]j j )j huh1jhj%hMhjz%hhubj )}(hhh]h)}(h(initialize range-restricted lru scanningh]h(initialize range-restricted lru scanning}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj(hhubah}(h]h ]h"]h$]h&]uh1j hjz%hhhj%hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j(j( j(j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj(ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj(ubjM )}(hhh](jR )}(h(``struct drm_mm_scan *scan`` scan state h](jX )}(h``struct drm_mm_scan *scan``h]j^ )}(hj(h]hstruct drm_mm_scan *scan}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj(ubjt )}(hhh]h)}(h scan stateh]h scan state}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1js hj(ubeh}(h]h ]h"]h$]h&]uh1jQ hj(hMhj(ubjR )}(h%``struct drm_mm *mm`` drm_mm to scan h](jX )}(h``struct drm_mm *mm``h]j^ )}(hj)h]hstruct drm_mm *mm}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj(ubjt )}(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&]uh1js hj(ubeh}(h]h ]h"]h$]h&]uh1jQ hj)hMhj(ubjR )}(h$``u64 size`` size of the allocation h](jX )}(h ``u64 size``h]j^ )}(hj<)h]hu64 size}(hj>)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj:)ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj6)ubjt )}(hhh]h)}(hsize of the allocationh]hsize of the allocation}(hjU)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ)hMhjR)ubah}(h]h ]h"]h$]h&]uh1js hj6)ubeh}(h]h ]h"]h$]h&]uh1jQ hjQ)hMhj(ubjR )}(h.``u64 alignment`` alignment of the allocation h](jX )}(h``u64 alignment``h]j^ )}(hju)h]h u64 alignment}(hjw)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjs)ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjo)ubjt )}(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&]uh1js hjo)ubeh}(h]h ]h"]h$]h&]uh1jQ hj)hMhj(ubjR )}(hC``unsigned long color`` opaque tag value to use for the allocation h](jX )}(h``unsigned long color``h]j^ )}(hj)h]hunsigned long color}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj)ubjt )}(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&]uh1js hj)ubeh}(h]h ]h"]h$]h&]uh1jQ hj)hMhj(ubjR )}(h<``u64 start`` start of the allowed range for the allocation h](jX )}(h ``u64 start``h]j^ )}(hj)h]h u64 start}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj)ubjt )}(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&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1js hj)ubeh}(h]h ]h"]h$]h&]uh1jQ hj)hMhj(ubjR )}(h8``u64 end`` end of the allowed range for the allocation h](jX )}(h ``u64 end``h]j^ )}(hj *h]hu64 end}(hj"*hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj*ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj*ubjt )}(hhh]h)}(h+end of the allowed range for the allocationh]h+end of the allowed range for the allocation}(hj9*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5*hMhj6*ubah}(h]h ]h"]h$]h&]uh1js hj*ubeh}(h]h ]h"]h$]h&]uh1jQ hj5*hMhj(ubjR )}(hO``enum drm_mm_insert_mode mode`` fine-tune the allocation search and placement h](jX )}(h ``enum drm_mm_insert_mode mode``h]j^ )}(hjY*h]henum drm_mm_insert_mode mode}(hj[*hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjW*ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjS*ubjt )}(hhh]h)}(h-fine-tune the allocation search and placementh]h-fine-tune the allocation search and placement}(hjr*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn*hMhjo*ubah}(h]h ]h"]h$]h&]uh1js hjS*ubeh}(h]h ]h"]h$]h&]uh1jQ hjn*hMhj(ubeh}(h]h ]h"]h$]h&]uh1jL hj(ubh)}(h**Description**h]j7 )}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj*ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj(ubh)}(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&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj(ubh)}(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&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_mm_scan_add_block (C function)c.drm_mm_scan_add_blockhNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hMubj)}(hdrm_mm_scan_add_blockh]j)}(hdrm_mm_scan_add_blockh]hdrm_mm_scan_add_block}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*hhhj*hMubj>)}(h4(struct drm_mm_scan *scan, struct drm_mm_node *node)h](jD)}(hstruct drm_mm_scan *scanh](j)}(hj? h]hstruct}(hj$+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubj)}(h h]h }(hj1+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubh)}(hhh]j)}(h drm_mm_scanh]h drm_mm_scan}(hjB+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?+ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjD+modnameN classnameNjj)}j]j)}j}j +sbc.drm_mm_scan_add_blockasbuh1hhj +ubj)}(h h]h }(hjb+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubj)}(hjh]h*}(hjp+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubj)}(hscanh]hscan}(hj}+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj+ubjD)}(hstruct drm_mm_node *nodeh](j)}(hj? h]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj+modnameN classnameNjj)}j]j^+c.drm_mm_scan_add_blockasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hnodeh]hnode}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj+ubeh}(h]h ]h"]h$]h&]jjuh1j=hj*hhhj*hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj*hhhj*hMubah}(h]j*ah ](jjeh"]h$]h&]j j )j huh1jhj*hMhj*hhubj )}(hhh]h)}(hadd a node to the scan listh]hadd a node to the scan list}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj,hhubah}(h]h ]h"]h$]h&]uh1j hj*hhhj*hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j/,j( j/,j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj9,h]h Parameters}(hj;,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj7,ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj3,ubjM )}(hhh](jR )}(h7``struct drm_mm_scan *scan`` the active drm_mm scanner h](jX )}(h``struct drm_mm_scan *scan``h]j^ )}(hjX,h]hstruct drm_mm_scan *scan}(hjZ,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjV,ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjR,ubjt )}(hhh]h)}(hthe active drm_mm scannerh]hthe active drm_mm scanner}(hjq,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm,hMhjn,ubah}(h]h ]h"]h$]h&]uh1js hjR,ubeh}(h]h ]h"]h$]h&]uh1jQ hjm,hMhjO,ubjR )}(h0``struct drm_mm_node *node`` drm_mm_node to add h](jX )}(h``struct drm_mm_node *node``h]j^ )}(hj,h]hstruct drm_mm_node *node}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj,ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj,ubjt )}(hhh]h)}(hdrm_mm_node to addh]hdrm_mm_node to add}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1js hj,ubeh}(h]h ]h"]h$]h&]uh1jQ hj,hMhjO,ubeh}(h]h ]h"]h$]h&]uh1jL hj3,ubh)}(h**Description**h]j7 )}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj3,ubh)}(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.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj3,ubh)}(h **Return**h]j7 )}(hj,h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj3,ubh)}(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:485: ./drivers/gpu/drm/drm_mm.chMhj3,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_mm_scan_remove_block (C function)c.drm_mm_scan_remove_blockhNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hj8-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4-hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM3ubj)}(h h]h }(hjF-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4-hhhjE-hM3ubj)}(hdrm_mm_scan_remove_blockh]j)}(hdrm_mm_scan_remove_blockh]hdrm_mm_scan_remove_block}(hjX-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4-hhhjE-hM3ubj>)}(h4(struct drm_mm_scan *scan, struct drm_mm_node *node)h](jD)}(hstruct drm_mm_scan *scanh](j)}(hj? h]hstruct}(hjt-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-ubh)}(hhh]j)}(h drm_mm_scanh]h drm_mm_scan}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj-modnameN classnameNjj)}j]j)}j}jZ-sbc.drm_mm_scan_remove_blockasbuh1hhjp-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-ubj)}(hscanh]hscan}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjl-ubjD)}(hstruct drm_mm_node *nodeh](j)}(hj? h]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj.modnameN classnameNjj)}j]j-c.drm_mm_scan_remove_blockasbuh1hhj-ubj)}(h h]h }(hj".hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]h*}(hj0.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hnodeh]hnode}(hj=.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjl-ubeh}(h]h ]h"]h$]h&]jjuh1j=hj4-hhhjE-hM3ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0-hhhjE-hM3ubah}(h]j+-ah ](jjeh"]h$]h&]j j )j huh1jhjE-hM3hj--hhubj )}(hhh]h)}(h remove a node from the scan listh]h remove a node from the scan list}(hjg.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM3hjd.hhubah}(h]h ]h"]h$]h&]uh1j hj--hhhjE-hM3ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j.j( j.j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj.ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM7hj.ubjM )}(hhh](jR )}(h7``struct drm_mm_scan *scan`` the active drm_mm scanner h](jX )}(h``struct drm_mm_scan *scan``h]j^ )}(hj.h]hstruct drm_mm_scan *scan}(hj.ihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM4hj.ubjt )}(hhh]h)}(hthe active drm_mm scannerh]hthe active drm_mm scanner}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hM4hj.ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj.hM4hj.ubjR )}(h3``struct drm_mm_node *node`` drm_mm_node to remove h](jX )}(h``struct drm_mm_node *node``h]j^ )}(hj.h]hstruct drm_mm_node *node}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM5hj.ubjt )}(hhh]h)}(hdrm_mm_node to removeh]hdrm_mm_node to remove}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hM5hj.ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj.hM5hj.ubeh}(h]h ]h"]h$]h&]uh1jL hj.ubh)}(h**Description**h]j7 )}(hj/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM7hj.ubh)}(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 }(hj2/hhhNhNubj7 )}(h**must**h]hmust}(hj:/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2/ubh 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.}(hj2/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM6hj.ubh)}(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).}(hjS/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM;hj.ubh)}(h **Return**h]j7 )}(hjd/h]hReturn}(hjf/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjb/ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chM@hj.ubh)}(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.}(hjz/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMAhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_mm_scan_color_evict (C function)c.drm_mm_scan_color_evicthNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMdubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hMdubh)}(hhh]j)}(h drm_mm_nodeh]h drm_mm_node}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj/modnameN classnameNjj)}j]j)}j}drm_mm_scan_color_evictsbc.drm_mm_scan_color_evictasbuh1hhj/hhhj/hMdubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hMdubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hMdubj)}(hdrm_mm_scan_color_evicth]j)}(hj/h]hdrm_mm_scan_color_evict}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhj/hMdubj>)}(h(struct drm_mm_scan *scan)h]jD)}(hstruct drm_mm_scan *scanh](j)}(hj? h]hstruct}(hj#0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj00hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(h drm_mm_scanh]h drm_mm_scan}(hjA0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>0ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjC0modnameN classnameNjj)}j]j/c.drm_mm_scan_color_evictasbuh1hhj0ubj)}(h h]h }(hj_0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hjm0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hscanh]hscan}(hjz0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj0ubah}(h]h ]h"]h$]h&]jjuh1j=hj/hhhj/hMdubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj/hhhj/hMdubah}(h]j/ah ](jjeh"]h$]h&]j j )j huh1jhj/hMdhj/hhubj )}(hhh]h)}(h.evict overlapping nodes on either side of holeh]h.evict overlapping nodes on either side of hole}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMdhj0hhubah}(h]h ]h"]h$]h&]uh1j hj/hhhj/hMdubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j0j( j0j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj0ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhhj0ubjM )}(hhh]jR )}(h:``struct drm_mm_scan *scan`` drm_mm scan with target hole h](jX )}(h``struct drm_mm_scan *scan``h]j^ )}(hj0h]hstruct drm_mm_scan *scan}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj0ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMehj0ubjt )}(hhh]h)}(hdrm_mm scan with target holeh]hdrm_mm scan with target hole}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMehj0ubah}(h]h ]h"]h$]h&]uh1js hj0ubeh}(h]h ]h"]h$]h&]uh1jQ hj0hMehj0ubah}(h]h ]h"]h$]h&]uh1jL hj0ubh)}(h**Description**h]j7 )}(hj 1h]h Description}(hj"1hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj1ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMghj0ubh)}(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.}(hj61hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMfhj0ubh)}(h **Return**h]j7 )}(hjG1h]hReturn}(hjI1hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjE1ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMjhj0ubh)}(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]1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMkhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_init (C function) c.drm_mm_inithNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hMubj)}(h drm_mm_inith]j)}(h drm_mm_inith]h drm_mm_init}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhj1hMubj>)}(h((struct drm_mm *mm, u64 start, u64 size)h](jD)}(hstruct drm_mm *mmh](j)}(hj? h]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj1modnameN classnameNjj)}j]j)}j}j1sb c.drm_mm_initasbuh1hhj1ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hmmh]hmm}(hj"2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubjD)}(h u64 starth](h)}(hhh]j)}(hu64h]hu64}(hj>2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;2ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj@2modnameN classnameNjj)}j]j2 c.drm_mm_initasbuh1hhj72ubj)}(h h]h }(hj\2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj72ubj)}(hstarth]hstart}(hjj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj72ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubjD)}(hu64 sizeh](h)}(hhh]j)}(hu64h]hu64}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj2modnameN classnameNjj)}j]j2 c.drm_mm_initasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hsizeh]hsize}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubeh}(h]h ]h"]h$]h&]jjuh1j=hj1hhhj1hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1hhhj1hMubah}(h]j1ah ](jjeh"]h$]h&]j j )j huh1jhj1hMhj1hhubj )}(hhh]h)}(hinitialize a drm-mm allocatorh]hinitialize a drm-mm allocator}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj2hhubah}(h]h ]h"]h$]h&]uh1j hj1hhhj1hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j2j( j2j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj2h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj2ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj2ubjM )}(hhh](jR )}(h9``struct drm_mm *mm`` the drm_mm structure to initialize h](jX )}(h``struct drm_mm *mm``h]j^ )}(hj3h]hstruct drm_mm *mm}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj3ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj3ubjt )}(hhh]h)}(h"the drm_mm structure to initializeh]h"the drm_mm structure to initialize}(hj63hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj23hMhj33ubah}(h]h ]h"]h$]h&]uh1js hj3ubeh}(h]h ]h"]h$]h&]uh1jQ hj23hMhj3ubjR )}(h3``u64 start`` start of the range managed by **mm** h](jX )}(h ``u64 start``h]j^ )}(hjV3h]h u64 start}(hjX3hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjT3ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjP3ubjt )}(hhh]h)}(h$start of the range managed by **mm**h](hstart of the range managed by }(hjo3hhhNhNubj7 )}(h**mm**h]hmm}(hjw3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjo3ubeh}(h]h ]h"]h$]h&]uh1hhjk3hMhjl3ubah}(h]h ]h"]h$]h&]uh1js hjP3ubeh}(h]h ]h"]h$]h&]uh1jQ hjk3hMhj3ubjR )}(h0``u64 size`` end of the range managed by **mm** h](jX )}(h ``u64 size``h]j^ )}(hj3h]hu64 size}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj3ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj3ubjt )}(hhh]h)}(h"end of the range managed by **mm**h](hend of the range managed by }(hj3hhhNhNubj7 )}(h**mm**h]hmm}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3ubeh}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1js hj3ubeh}(h]h ]h"]h$]h&]uh1jQ hj3hMhj3ubeh}(h]h ]h"]h$]h&]uh1jL hj2ubh)}(h**Description**h]j7 )}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj2ubh)}(hCNote that **mm** must be cleared to 0 before calling this function.h](h Note that }(hj3hhhNhNubj7 )}(h**mm**h]hmm}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3ubh3 must be cleared to 0 before calling this function.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_takedown (C function)c.drm_mm_takedownhNtauh1jhjRhhhNhNubj)}(hhh](j)}(h(void drm_mm_takedown (struct drm_mm *mm)h]j)}(h'void drm_mm_takedown(struct drm_mm *mm)h](j)}(hvoidh]hvoid}(hj=4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj94hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMubj)}(h h]h }(hjL4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj94hhhjK4hMubj)}(hdrm_mm_takedownh]j)}(hdrm_mm_takedownh]hdrm_mm_takedown}(hj^4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj94hhhjK4hMubj>)}(h(struct drm_mm *mm)h]jD)}(hstruct drm_mm *mmh](j)}(hj? h]hstruct}(hjz4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv4ubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj4modnameN classnameNjj)}j]j)}j}j`4sbc.drm_mm_takedownasbuh1hhjv4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv4ubj)}(hmmh]hmm}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjr4ubah}(h]h ]h"]h$]h&]jjuh1j=hj94hhhjK4hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj54hhhjK4hMubah}(h]j04ah ](jjeh"]h$]h&]j j )j huh1jhjK4hMhj24hhubj )}(hhh]h)}(hclean up a drm_mm allocatorh]hclean up a drm_mm allocator}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj4hhubah}(h]h ]h"]h$]h&]uh1j hj24hhhjK4hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j5j( j5j) j* j+ uh1jhhhjRhNhNubj- )}(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]j7 )}(hj5h]h Parameters}(hj!5hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj5ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj5ubjM )}(hhh]jR )}(h3``struct drm_mm *mm`` drm_mm allocator to clean up h](jX )}(h``struct drm_mm *mm``h]j^ )}(hj>5h]hstruct drm_mm *mm}(hj@5hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj<5ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj85ubjt )}(hhh]h)}(hdrm_mm allocator to clean uph]hdrm_mm allocator to clean up}(hjW5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS5hMhjT5ubah}(h]h ]h"]h$]h&]uh1js hj85ubeh}(h]h ]h"]h$]h&]uh1jQ hjS5hMhj55ubah}(h]h ]h"]h$]h&]uh1jL hj5ubh)}(h**Description**h]j7 )}(hjy5h]h Description}(hj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjw5ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj5ubh)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_mm_print (C function)c.drm_mm_printhNtauh1jhjRhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hMubj)}(h drm_mm_printh]j)}(h drm_mm_printh]h drm_mm_print}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhj5hMubj>)}(h0(const struct drm_mm *mm, struct drm_printer *p)h](jD)}(hconst struct drm_mm *mmh](j)}(hjJh]hconst}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hj? h]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj#6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hdrm_mmh]hdrm_mm}(hj46hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj16ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj66modnameN classnameNjj)}j]j)}j}j5sbc.drm_mm_printasbuh1hhj5ubj)}(h h]h }(hjT6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hjb6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hmmh]hmm}(hjo6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj5ubjD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj6modnameN classnameNjj)}j]jP6c.drm_mm_printasbuh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hp}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj5ubeh}(h]h ]h"]h$]h&]jjuh1j=hj5hhhj5hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5hhhj5hMubah}(h]j5ah ](jjeh"]h$]h&]j j )j huh1jhj5hMhj5hhubj )}(hhh]h)}(hprint allocator stateh]hprint allocator state}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj7hhubah}(h]h ]h"]h$]h&]uh1j hj5hhhj5hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j 7j( j 7j) j* j+ uh1jhhhjRhNhNubj- )}(hw**Parameters** ``const struct drm_mm *mm`` drm_mm allocator to print ``struct drm_printer *p`` DRM printer to useh](h)}(h**Parameters**h]j7 )}(hj*7h]h Parameters}(hj,7hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj(7ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj$7ubjM )}(hhh](jR )}(h6``const struct drm_mm *mm`` drm_mm allocator to print h](jX )}(h``const struct drm_mm *mm``h]j^ )}(hjI7h]hconst struct drm_mm *mm}(hjK7hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjG7ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhjC7ubjt )}(hhh]h)}(hdrm_mm allocator to printh]hdrm_mm allocator to print}(hjb7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^7hMhj_7ubah}(h]h ]h"]h$]h&]uh1js hjC7ubeh}(h]h ]h"]h$]h&]uh1jQ hj^7hMhj@7ubjR )}(h,``struct drm_printer *p`` DRM printer to useh](jX )}(h``struct drm_printer *p``h]j^ )}(hj7h]hstruct drm_printer *p}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]uh1jW hT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj|7ubjt )}(hhh]h)}(hDRM printer to useh]hDRM printer to use}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:485: ./drivers/gpu/drm/drm_mm.chMhj7ubah}(h]h ]h"]h$]h&]uh1js hj|7ubeh}(h]h ]h"]h$]h&]uh1jQ hj7hMhj@7ubeh}(h]h ]h"]h$]h&]uh1jL hj$7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjRhhhNhNubjͲ)}(h.. _drm_gpuvm:h]h}(h]h ]h"]h$]h&]hjuh1j̲hMhjRhhhhubeh}(h]joah ]h"]*drm mm range allocator function referencesah$]h&]uh1hhjhhhhhMubeh}(h]j ah ]h"]drm mm range allocatorah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h DRM GPUVMh]h DRM GPUVM}(hj7hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj7hhhhhMubh)}(hhh](h)}(hOverviewh]hOverview}(hj7hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj7hhhhhMubh)}(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 }(hj7hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj8h]h drm_gpuva}(hj 8hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chK%hj7ubh9 objects. It also keeps track of the mapping’s backing }(hj7hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj+8h]hdrm_gem_object}(hj-8hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj)8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhj$8hK%hj7ubh buffers.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$8hK%hj7hhubh)}(h:c:type:`drm_gem_object` buffers maintain a list of :c:type:`drm_gpuva` objects representing all existing GPU VA mappings using this :c:type:`drm_gem_object` as backing buffer.h](h)}(h:c:type:`drm_gem_object`h]j^ )}(hjX8h]hdrm_gem_object}(hjZ8hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjV8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chK*hjR8ubh buffers maintain a list of }(hjR8hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj|8h]h drm_gpuva}(hj~8hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjz8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhju8hK*hjR8ubh> objects representing all existing GPU VA mappings using this }(hjR8hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj8h]hdrm_gem_object}(hj8hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhju8hK*hjR8ubh as backing buffer.}(hjR8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhju8hK*hj7hhubh)}(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’.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chK-hj7hhubh)}(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 }(hj8hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj8h]h drm_gpuva}(hj8hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chK0hj8ubh1 mappings within a GPU’s virtual address space.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hK0hj7hhubh)}(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 }(hj9hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj9h]h drm_gpuvm}(hj9hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chK3hj9ubh structure contains a special }(hj9hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj59h]h drm_gpuva}(hj79hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj39ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj.9hK3hj9ubh 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.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.9hK3hj7hhubh)}(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\9hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjf9h]h drm_gpuva}(hjh9hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjd9ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chK8hj\9ubh entries.}(hj\9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hK8hj7hhubh)}(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 }(hj9hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hj9h]h drm_gpuvas}(hj9hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chK=hj9ubh within the }(hj9hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj9h]h drm_gpuvm}(hj9hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj9hK=hj9ubhE are contained within struct drm_gpuva already. Hence, for inserting }(hj9hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj9h]h drm_gpuva}(hj9hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj9hK=hj9ubh] entries from within dma-fence signalling critical sections it is enough to pre-allocate the }(hj9hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj:h]h drm_gpuva}(hj:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj9hK=hj9ubh structures.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hK=hj7hhubh)}(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^ )}(hj/:h]hdrm_gem_objects}(hj1:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj-:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chKBhj):ubh5 which are private to a single VM can share a common }(hj):hhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjS:h]hdma_resv}(hjU:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjQ:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjL:hKBhj):ubh3 in order to improve locking efficiency (e.g. with }(hj):hhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hjv:h]hdrm_exec}(hjx:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjt:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhjL:hKBhj):ubh(). For this purpose drivers must pass a }(hj):hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj:h]hdrm_gem_object}(hj:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjL:hKBhj):ubhw to drm_gpuvm_init(), in the following called ‘resv object’, which serves as the container of the GPUVM’s shared }(hj):hhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hj:h]hdma_resv}(hj:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjL:hKBhj):ubh,. This resv object can be a driver specific }(hj):hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj:h]hdrm_gem_object}(hj:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjL:hKBhj):ubh, such as the }(hj):hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj;h]hdrm_gem_object}(hj;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjL:hKBhj):ubh containing the root page table, but it can also be a ‘dummy’ object, which can be allocated with drm_gpuvm_resv_object_alloc().}(hj):hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjL:hKBhj7hhubh)}(hIn order to connect a struct drm_gpuva to 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](h6In order to connect a struct drm_gpuva to its backing }(hj);hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj3;h]hdrm_gem_object}(hj5;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj1;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chKKhj);ubh each }(hj);hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjW;h]hdrm_gem_object}(hjY;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjU;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjP;hKKhj);ubh maintains a list of }(hj);hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjz;h]h drm_gpuvm_bo}(hj|;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjx;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjP;hKKhj);ubh structures, and each }(hj);hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hj;h]h drm_gpuvm_bo}(hj;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjP;hKKhj);ubh contains a list of }(hj);hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj;h]h drm_gpuva}(hj;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjP;hKKhj);ubh structures.}(hj);hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjP;hKKhj7hhubh)}(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 present, 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 ](j j! c-typeeh"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chKOhj;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 ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj<hKOhj;ubh and a }(hj;hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj8<h]hdrm_gem_object}(hj:<hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj6<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhj<hKOhj;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 ](j j! c-typeeh"]h$]h&]uh1j] hjY<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhj<hKOhj;ubh list of }(hj;hhhNhNubh)}(h:c:type:`drm_gpuvm_bos`h]j^ )}(hj~<h]h drm_gpuvm_bos}(hj<hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bosuh1hhj<hKOhj;ubhv for an existing instance of this particular combination. If not present, 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 ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhj<hKOhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hKOhj7hhubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chKWhj<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 ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj<hKWhj<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 ](j j! c-typeeh"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj<hKWhj<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^ )}(hj8=h]h drm_gpuvm}(hj:=hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj6=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj<hKWhj<ubh. For instance, all }(hj<hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj[=h]hdrm_gem_object}(hj]=hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjY=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhj<hKWhj<ubh’s }(hj<hhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hj~=h]hdma_resv}(hj=hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhj<hKWhj<ubh of a given }(hj<hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj=h]h drm_gpuvm}(hj=hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj<hKWhj<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 ](j j! c-typeeh"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhj<hKWhj<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 ](j j! c-typeeh"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhj<hKWhj<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}(hj >hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhj<hKWhj<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<hKWhj7hhubh)}(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 }(hj1>hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj;>h]hdrm_gem_object}(hj=>hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj9>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:496: ./drivers/gpu/drm/drm_gpuvm.chKchj1>ubh( is treated as external object when its }(hj1>hhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hj_>h]hdma_resv}(hja>hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj]>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjX>hKchj1>ubh! structure is different than the }(hj1>hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj>h]h drm_gpuvm}(hj>hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjX>hKchj1>ubh ’s common }(hj1>hhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hj>h]hdma_resv}(hj>hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjX>hKchj1>ubh structure.}(hj1>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjX>hKchj7hhubeh}(h]jah ]h"]h$]jah&]uh1hhj7hhhhhMjKubh)}(hhh](h)}(hSplit and Mergeh]hSplit and Merge}(hj>hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj>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 ](j j! c-typeeh"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKjhj>ubhL calculate a sequence of operations to satisfy a given map or unmap request.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj ?hKjhj>hhubh)}(hX8Therefore the DRM GPU VA manager provides an algorithm implementing splitting and merging of existing 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 existing 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:502: ./drivers/gpu/drm/drm_gpuvm.chKnhj>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.}(hj$?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKthj>hhubh)}(hXDepending on how the new GPU VA mapping intersects with the existing 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 existing mappings of the GPU VA space the }(hj3?hhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j^ )}(hj=?h]h drm_gpuvm_ops}(hj??hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj;?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKzhj3?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.}(hj3?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZ?hKzhj>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.}(hje?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhj>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^ )}(hjz?h]hdrm_gpuva_op_unmap}(hj|?hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjx?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_op_unmapuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjt?ubh: contains a ‘keep’ field, which indicates whether the }(hjt?hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj?h]h drm_gpuva}(hj?hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj?hKhjt?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 }(hjt?hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj?h]h drm_gpuva}(hj?hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj?hKhjt?ubh<, adding the missing page table entries only and update the }(hjt?hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj?h]h drm_gpuvm}(hj?hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj?hKhjt?ubh ’s view of things accordingly.}(hjt?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 }(hj @hhhNhNubh)}(h:c:type:`drm_gpuva_op_remap`h]j^ )}(hj@h]hdrm_gpuva_op_remap}(hj@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_op_remapuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhj @ubh consists of one unmap operation and one or two map operations, such that drivers can derive the page table update delta accordingly.}(hj @hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2@hKhj>hhubh)}(hNote that there can't be more than two existing 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 existing 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.}(hj=@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./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 existing mappings enclosed by the given range unmap operations are created. For mappings which are only partially located within the given range, remap operations are created such that those mappings are split up and re-mapped partially.h](h:Analogous to drm_gpuvm_sm_map() drm_gpuvm_sm_unmap() uses }(hjL@hhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j^ )}(hjV@h]h drm_gpuvm_ops}(hjX@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjT@ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjL@ubhXt 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 existing mappings enclosed by the given range unmap operations are created. For mappings which are only partially located within the given range, remap operations are created such that those mappings are split up and re-mapped partially.}(hjL@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjs@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 ](j j! c-typeeh"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./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 ](j j! c-typeeh"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j 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 ](j j! c-typeeh"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhj@hKhj~@ubh,), it provides drivers a way to iterate the }(hj~@hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hj@h]h drm_gpuva_op}(hj@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j 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 }(hjAhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj#Ah]h drm_gpuvm}(hj%AhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj!Aubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubh}’s view of the GPU VA space drm_gpuva_insert() and drm_gpuva_remove() may be used. These functions can safely be used from }(hjAhhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j^ )}(hjGAh]h drm_gpuvm_ops}(hjIAhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjEAubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhj@AhKhjAubh 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.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@AhKhj>hhubh)}(hThe following diagram depicts the basic relationships of existing 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 existing 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.}(hjnAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhj>hhubhenumerated_list)}(hhh](j)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubj )}(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)}hjAsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubj )}(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)}hjAsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubj )}(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)}hjAsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(hXExistent mapping is a left aligned subset of the requested one, hence replace the existing 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 existing one.h]h_Existent mapping is a left aligned subset of the requested one, hence replace the existing one.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubj )}(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)}hj Bsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjAubhnote)}(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"BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhjBubah}(h]h ]h"]h$]h&]uh1jBhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(hXRequested mapping's range is a left aligned subset of the existing one, but backed by a different BO. Hence, map the requested mapping and split the existing 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 existing one, but backed by a different BO. Hence, map the requested mapping and split the existing one adjusting its BO offset.h]hRequested mapping’s range is a left aligned subset of the existing one, but backed by a different BO. Hence, map the requested mapping and split the existing one adjusting its BO offset.}(hjABhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhj=Bubj )}(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)}hjPBsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhj=BubjB)}(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.}(hjcBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chKhj_Bubah}(h]h ]h"]h$]h&]uh1jBhj=Bubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhj~Bubj )}(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)}hjBsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhj~Bubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(hXRequested mapping's range is a right aligned subset of the existing one, but backed by a different BO. Hence, map the requested mapping and split the existing 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 existing one, but backed by a different BO. Hence, map the requested mapping and split the existing one, without adjusting the BO offset.h]hRequested mapping’s range is a right aligned subset of the existing one, but backed by a different BO. Hence, map the requested mapping and split the existing one, without adjusting the BO offset.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhjBubj )}(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)}hjBsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhjBubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chM"hjBubj )}(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)}hjBsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chM'hjBubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(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 existing 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 existing 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 existing one, without adjusting the BO offset.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chM1hjBubj )}(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 Csbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chM7hjBubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(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.}(hj"ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMAhjCubj )}(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)}hj1Csbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMGhjCubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(hXRequested mapping's range is a centered subset of the existing one having a different backing BO. Hence, map the requested mapping and split up the existing 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 existing one having a different backing BO. Hence, map the requested mapping and split up the existing one in two mappings, adjusting the BO offset of the right one accordingly.h]hRequested mapping’s range is a centered subset of the existing one having a different backing BO. Hence, map the requested mapping and split up the existing one in two mappings, adjusting the BO offset of the right one accordingly.}(hjJChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMQhjFCubj )}(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)}hjYCsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMXhjFCubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(hXtRequested mapping is a contiguous subset of the existing 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 existing one. Split it up, but indicate that the backing PTEs could be kept.h]h|Requested mapping is a contiguous subset of the existing one. Split it up, but indicate that the backing PTEs could be kept.}(hjrChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMbhjnCubj )}(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)}hjCsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMghjnCubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(hXExistent mapping is a right aligned subset of the requested one, hence replace the existing 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 existing one.h]h`Existent mapping is a right aligned subset of the requested one, hence replace the existing one.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMqhjCubj )}(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)}hjCsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMvhjCubjB)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhjCubah}(h]h ]h"]h$]h&]uh1jBhjCubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(hXExistent mapping is a centered subset of the requested one, hence replace the existing 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 existing one.h]h[Existent mapping is a centered subset of the requested one, hence replace the existing one.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhjCubj )}(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)}hjCsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhjCubjB)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhjCubah}(h]h ]h"]h$]h&]uh1jBhjCubeh}(h]h ]h"]h$]h&]uh1jhjAubj)}(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 existing 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 existing 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 existing one, adjusting its BO offset accordingly.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhjDubj )}(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)}hj+Dsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:502: ./drivers/gpu/drm/drm_gpuvm.chMhjDubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffixjuh1j}Ahj>hhhNhNubjͲ)}(h.. _drm_gpuvm_locking:h]h}(h]h ]h"]h$]h&]hʌdrm-gpuvm-lockinguh1j̲hMhj>hhhhubeh}(h]jah ]h"]split and mergeah$]h&]uh1hhj7hhhhhMubh)}(hhh](h)}(hLockingh]hLocking}(hj_DhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj\DhhhhhMubh)}(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 }(hjmDhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjwDh]h drm_gpuva}(hjyDhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjuDubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:510: ./drivers/gpu/drm/drm_gpuvm.chMhjmDubh 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 }(hjmDhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjDh]h drm_gpuva}(hjDhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjDhMhjmDubhZ objects as well as generating all kinds of operations, such as split / merge or prefetch.}(hjmDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMhj\Dhhubh)}(hXDRM 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 the GEMs gpuva.lock mutex.h](h@DRM GPUVM also does not take care of the locking of the backing }(hjDhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjDh]hdrm_gem_object}(hjDhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:510: ./drivers/gpu/drm/drm_gpuvm.chMhjDubh buffers GPU VA lists and }(hjDhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjDh]h drm_gpuvm_bo}(hjDhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjDhMhjDubh abstractions by itself; drivers are responsible to enforce mutual exclusion using either the GEMs dma_resv lock or the GEMs gpuva.lock mutex.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMhj\Dhhubh)}(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 }(hjEhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j^ )}(hj!Eh]hdrm_gem_objects}(hj#EhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:510: ./drivers/gpu/drm/drm_gpuvm.chMhjEubh 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().}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>EhMhj\Dhhubh)}(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 }(hjIEhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjSEh]h drm_gpuvm_bo}(hjUEhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjQEubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:510: ./drivers/gpu/drm/drm_gpuvm.chMhjIEubh the }(hjIEhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjwEh]h drm_gpuvm_bo}(hjyEhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjuEubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjpEhMhjIEubh is attached / removed from the }(hjIEhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j^ )}(hjEh]hdrm_gem_objects}(hjEhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhjpEhMhjIEubhD gpuva list. Subsequent calls to drm_gpuvm_bo_obtain() for the same }(hjIEhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjEh]h drm_gpuvm}(hjEhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjpEhMhjIEubh and }(hjIEhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjEh]hdrm_gem_object}(hjEhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjpEhMhjIEubh@ must be able to observe previous creations and destructions of }(hjIEhhhNhNubh)}(h:c:type:`drm_gpuvm_bos`h]j^ )}(hjFh]h drm_gpuvm_bos}(hjFhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjFubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bosuh1hhjpEhMhjIEubh# in order to keep instances unique.}(hjIEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjpEhMhj\Dhhubh)}(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 }(hj*FhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj4Fh]h drm_gpuvm}(hj6FhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj2Fubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:510: ./drivers/gpu/drm/drm_gpuvm.chMhj*Fubh’s lists for keeping track of external and evicted objects are protected against concurrent insertion / removal and iteration internally.}(hj*FhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQFhMhj\Dhhubh)}(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().}(hj\FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:510: ./drivers/gpu/drm/drm_gpuvm.chMhj\Dhhubh)}(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 }(hjkFhhhNhNubh)}(h":c:type:`DRM_GPUVM_RESV_PROTECTED`h]j^ )}(hjuFh]hDRM_GPUVM_RESV_PROTECTED}(hjwFhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjsFubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_GPUVM_RESV_PROTECTEDuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:510: ./drivers/gpu/drm/drm_gpuvm.chMhjkFubh) flag to indicate that the corresponding }(hjkFhhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjFh]hdma_resv}(hjFhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjFubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjFhMhjkFubh2 locks are held in order to protect the lists. If }(hjkFhhhNhNubh)}(h":c:type:`DRM_GPUVM_RESV_PROTECTED`h]j^ )}(hjFh]hDRM_GPUVM_RESV_PROTECTED}(hjFhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjFubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_GPUVM_RESV_PROTECTEDuh1hhjFhMhjkFubh 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 }(hjkFhhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjFh]hdma_resv}(hjFhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjFubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjFhMhjkFubh1 locks and hence do not require internal locking.}(hjkFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhMhj\Dhhubeh}(h](jjTDeh ]h"](lockingdrm_gpuvm_lockingeh$]h&]uh1hhj7hhhhhMj}j GjJDsj}jTDjJDsubh)}(hhh](h)}(hExamplesh]hExamples}(hjGhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjGhhhhhMubh)}(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 }(hj!GhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hj+Gh]h drm_gpuva_op}(hj-GhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj)Gubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:516: ./drivers/gpu/drm/drm_gpuvm.chMhj!GubhN in order to satisfy a given map or unmap request and how to make use of them.}(hj!GhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHGhMhjGhhubh)}(hXFThe below code is strictly limited to illustrate the generic usage pattern. To maintain simplicity, it doesn't make use of any abstractions for common code, different (asynchronous) 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 simplicity, it doesn’t make use of any abstractions for common code, different (asynchronous) stages with fence signalling critical paths, any other helpers or error handling in terms of freeing memory and dropping previously taken locks.}(hjSGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:516: ./drivers/gpu/drm/drm_gpuvm.chMhjGhhubj~A)}(hhh](j)}(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 embed 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_gpuvm_map_req map_req = { .map.va.addr = addr, .map.va.range = range, .map.gem.obj = obj, .map.gem.offset = 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, &map_req); 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 }(hjiGhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjsGh]h drm_gpuva_op}(hjuGhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqGubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:516: ./drivers/gpu/drm/drm_gpuvm.chMhjiGubh to create a new mapping:}(hjiGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjeGubj )}(hX // Allocates a new &drm_gpuva. struct drm_gpuva * driver_gpuva_alloc(void); // Typically drivers would embed 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_gpuvm_map_req map_req = { .map.va.addr = addr, .map.va.range = range, .map.gem.obj = obj, .map.gem.offset = 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, &map_req); 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 embed 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_gpuvm_map_req map_req = { .map.va.addr = addr, .map.va.range = range, .map.gem.obj = obj, .map.gem.offset = 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, &map_req); 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; }}hjGsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:516: ./drivers/gpu/drm/drm_gpuvm.chMhjeGubeh}(h]h ]h"]h$]h&]uh1jhjbGubj)}(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 embed 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 }(hjGhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjGh]h drm_gpuva_op}(hjGhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjGubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:516: ./drivers/gpu/drm/drm_gpuvm.chM}hjGubh to create a new mapping:}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhM}hjGubj )}(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 embed 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 embed 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; }}hjGsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:516: ./drivers/gpu/drm/drm_gpuvm.chMhjGubeh}(h]h ]h"]h$]h&]uh1jhjbGubeh}(h]h ]h"]h$]h&]jFDjGDjHDhjIDjuh1j}AhjGhhhNhNubeh}(h]j"ah ]h"]examplesah$]h&]uh1hhj7hhhhhMubh)}(hhh](h)}(hDRM GPUVM Function Referencesh]hDRM GPUVM Function References}(hj HhhhNhNubah}(h]h ]h"]h$]h&]hj>uh1hhjHhhhhhMubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_flags (C enum)c.drm_gpuva_flagshNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_flagsh]j)}(henum drm_gpuva_flagsh](j)}(hjh]henum}(hj2HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.HhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKubj)}(h h]h }(hj@HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Hhhhj?HhKubj)}(hdrm_gpuva_flagsh]j)}(hj,Hh]hdrm_gpuva_flags}(hjRHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.Hhhhj?HhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj*Hhhhj?HhKubah}(h]j%Hah ](jjeh"]h$]h&]j j )j huh1jhj?HhKhj'Hhhubj )}(hhh]h)}(hflags for struct drm_gpuvah]hflags for struct drm_gpuva}(hjtHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK+hjqHhhubah}(h]h ]h"]h$]h&]uh1j hj'Hhhhj?HhKubeh}(h]h ](j! enumeh"]h$]h&]j& j! j' jHj( jHj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjHh]h Constants}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjHubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK/hjHubjM )}(hhh](jR )}(he``DRM_GPUVA_INVALIDATED`` Flag indicating that the :c:type:`drm_gpuva`'s backing GEM is invalidated. h](jX )}(h``DRM_GPUVA_INVALIDATED``h]j^ )}(hjHh]hDRM_GPUVA_INVALIDATED}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK2hjHubjt )}(hhh]h)}(hJFlag indicating that the :c:type:`drm_gpuva`'s backing GEM is invalidated.h](hFlag indicating that the }(hjHhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjHh]h drm_gpuva}(hjHhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjHhK2hjHubh ’s backing GEM is invalidated.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhK2hjHubah}(h]h ]h"]h$]h&]uh1js hjHubeh}(h]h ]h"]h$]h&]uh1jQ hjHhK2hjHubjR )}(hW``DRM_GPUVA_SPARSE`` Flag indicating that the :c:type:`drm_gpuva` is a sparse mapping. h](jX )}(h``DRM_GPUVA_SPARSE``h]j^ )}(hjIh]hDRM_GPUVA_SPARSE}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjIubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK5hj Iubjt )}(hhh]h)}(hAFlag indicating that the :c:type:`drm_gpuva` is a sparse mapping.h](hFlag indicating that the }(hj*IhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj4Ih]h drm_gpuva}(hj6IhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj2Iubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj&IhK5hj*Iubh is a sparse mapping.}(hj*IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&IhK5hj'Iubah}(h]h ]h"]h$]h&]uh1js hj Iubeh}(h]h ]h"]h$]h&]uh1jQ hj&IhK5hjHubjR )}(h(``DRM_GPUVA_USERBITS`` user defined bitsh](jX )}(h``DRM_GPUVA_USERBITS``h]j^ )}(hjmIh]hDRM_GPUVA_USERBITS}(hjoIhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjkIubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK7hjgIubjt )}(hhh]h)}(huser defined bitsh]huser defined bits}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK8hjIubah}(h]h ]h"]h$]h&]uh1js hjgIubeh}(h]h ]h"]h$]h&]uh1jQ hjIhK7hjHubeh}(h]h ]h"]h$]h&]uh1jL hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva (C struct) c.drm_gpuvahNtauh1jhjHhhhNhNubj)}(hhh](j)}(h drm_gpuvah]j)}(hstruct drm_gpuvah](j)}(hj? h]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK=ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhK=ubj)}(h drm_gpuvah]j)}(hjIh]h drm_gpuva}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjIhK=ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhjIhK=ubah}(h]jIah ](jjeh"]h$]h&]j j )j huh1jhjIhK=hjIhhubj )}(hhh]h)}(h#structure to track a GPU VA mappingh]h#structure to track a GPU VA mapping}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKChjJhhubah}(h]h ]h"]h$]h&]uh1j hjIhhhjIhK=ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j!Jj( j!Jj) j* j+ uh1jhhhjHhNhNubj- )}(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 its 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](j7 )}(h**Definition**h]h Definition}(hj-JhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)Jubh:}(hj)JhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKGhj%Jubj )}(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; };}hjFJsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKIhj%Jubh)}(h **Members**h]j7 )}(hjWJh]hMembers}(hjYJhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjUJubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK]hj%JubjM )}(hhh](jR )}(h>``vm`` the :c:type:`drm_gpuvm` this object is associated with h](jX )}(h``vm``h]j^ )}(hjvJh]hvm}(hjxJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjtJubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKMhjpJubjt )}(hhh]h)}(h6the :c:type:`drm_gpuvm` this object is associated withh](hthe }(hjJhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjJh]h drm_gpuvm}(hjJhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjJhKMhjJubh this object is associated with}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhKMhjJubah}(h]h ]h"]h$]h&]uh1js hjpJubeh}(h]h ]h"]h$]h&]uh1jQ hjJhKMhjmJubjR )}(hY``vm_bo`` the :c:type:`drm_gpuvm_bo` abstraction for the mapped :c:type:`drm_gem_object` h](jX )}(h ``vm_bo``h]j^ )}(hjJh]hvm_bo}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKShjJubjt )}(hhh]h)}(hNthe :c:type:`drm_gpuvm_bo` abstraction for the mapped :c:type:`drm_gem_object`h](hthe }(hjJhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjJh]h drm_gpuvm_bo}(hjJhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKRhjJubh abstraction for the mapped }(hjJhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjKh]hdrm_gem_object}(hjKhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjKhKRhjJubeh}(h]h ]h"]h$]h&]uh1hhjKhKRhjJubah}(h]h ]h"]h$]h&]uh1js hjJubeh}(h]h ]h"]h$]h&]uh1jQ hjJhKShjmJubjR )}(h9``flags`` the :c:type:`drm_gpuva_flags` for this mapping h](jX )}(h ``flags``h]j^ )}(hjNKh]hflags}(hjPKhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLKubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKXhjHKubjt )}(hhh]h)}(h.the :c:type:`drm_gpuva_flags` for this mappingh](hthe }(hjgKhhhNhNubh)}(h:c:type:`drm_gpuva_flags`h]j^ )}(hjqKh]hdrm_gpuva_flags}(hjsKhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoKubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_flagsuh1hhjcKhKXhjgKubh for this mapping}(hjgKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjcKhKXhjdKubah}(h]h ]h"]h$]h&]uh1js hjHKubeh}(h]h ]h"]h$]h&]uh1jQ hjcKhKXhjmJubjR )}(hM``va`` structure containing the address and range of the :c:type:`drm_gpuva` h](jX )}(h``va``h]j^ )}(hjKh]hva}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhK]hjKubjt )}(hhh]h)}(hEstructure containing the address and range of the :c:type:`drm_gpuva`h](h2structure containing the address and range of the }(hjKhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjKh]h drm_gpuva}(hjKhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjKhK]hjKubeh}(h]h ]h"]h$]h&]uh1hhjKhK]hjKubah}(h]h ]h"]h$]h&]uh1js hjKubeh}(h]h ]h"]h$]h&]uh1jQ hjKhK]hjmJubjR )}(h``va.addr`` the start address h](jX )}(h ``va.addr``h]j^ )}(hjLh]hva.addr}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKahjKubjt )}(hhh]h)}(hthe start addressh]hthe start address}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhKahjLubah}(h]h ]h"]h$]h&]uh1js hjKubeh}(h]h ]h"]h$]h&]uh1jQ hjLhKahjmJubjR )}(hI``gem`` structure containing the :c:type:`drm_gem_object` and its offset h](jX )}(h``gem``h]j^ )}(hj;Lh]hgem}(hj=LhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj9Lubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKlhj5Lubjt )}(hhh]h)}(h@structure containing the :c:type:`drm_gem_object` and its offseth](hstructure containing the }(hjTLhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj^Lh]hdrm_gem_object}(hj`LhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj\Lubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjPLhKlhjTLubh and its offset}(hjTLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjPLhKlhjQLubah}(h]h ]h"]h$]h&]uh1js hj5Lubeh}(h]h ]h"]h$]h&]uh1jQ hjPLhKlhjmJubjR )}(h>``gem.offset`` the offset within the :c:type:`drm_gem_object` h](jX )}(h``gem.offset``h]j^ )}(hjLh]h gem.offset}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKphjLubjt )}(hhh]h)}(h.the offset within the :c:type:`drm_gem_object`h](hthe offset within the }(hjLhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjLh]hdrm_gem_object}(hjLhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjLhKphjLubeh}(h]h ]h"]h$]h&]uh1hhjLhKphjLubah}(h]h ]h"]h$]h&]uh1js hjLubeh}(h]h ]h"]h$]h&]uh1jQ hjLhKphjmJubjR )}(h0``gem.obj`` the mapped :c:type:`drm_gem_object` h](jX )}(h ``gem.obj``h]j^ )}(hjLh]hgem.obj}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKuhjLubjt )}(hhh]h)}(h#the mapped :c:type:`drm_gem_object`h](h the mapped }(hjMhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjMh]hdrm_gem_object}(hjMhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjMhKuhjMubeh}(h]h ]h"]h$]h&]uh1hhjMhKuhjMubah}(h]h ]h"]h$]h&]uh1js hjLubeh}(h]h ]h"]h$]h&]uh1jQ hjMhKuhjmJubjR )}(hX``gem.entry`` the :c:type:`list_head` to attach this object to a :c:type:`drm_gpuvm_bo` h](jX )}(h ``gem.entry``h]j^ )}(hjGMh]h gem.entry}(hjIMhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjEMubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKzhjAMubjt )}(hhh]h)}(hIthe :c:type:`list_head` to attach this object to a :c:type:`drm_gpuvm_bo`h](hthe }(hj`MhhhNhNubh)}(h:c:type:`list_head`h]j^ )}(hjjMh]h list_head}(hjlMhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjhMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j list_headuh1hhj\MhKzhj`Mubh to attach this object to a }(hj`MhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjMh]h drm_gpuvm_bo}(hjMhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhj\MhKzhj`Mubeh}(h]h ]h"]h$]h&]uh1hhj\MhKzhj]Mubah}(h]h ]h"]h$]h&]uh1js hjAMubeh}(h]h ]h"]h$]h&]uh1jQ hj\MhKzhjmJubjR )}(hL``rb`` structure containing data to store :c:type:`drm_gpuvas` in a rb-tree h](jX )}(h``rb``h]j^ )}(hjMh]hrb}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjMubjt )}(hhh]h)}(hDstructure containing data to store :c:type:`drm_gpuvas` in a rb-treeh](h#structure containing data to store }(hjMhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjMh]h drm_gpuvas}(hjMhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhjMhKhjMubh in a rb-tree}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhKhjMubah}(h]h ]h"]h$]h&]uh1js hjMubeh}(h]h ]h"]h$]h&]uh1jQ hjMhKhjmJubjR )}(h``rb.node`` the rb-tree node h](jX )}(h ``rb.node``h]j^ )}(hjNh]hrb.node}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjNubjt )}(hhh]h)}(hthe rb-tree nodeh]hthe rb-tree node}(hj7NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3NhKhj4Nubah}(h]h ]h"]h$]h&]uh1js hjNubeh}(h]h ]h"]h$]h&]uh1jQ hj3NhKhjmJubjR )}(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](jX )}(h ``rb.entry``h]j^ )}(hjWNh]hrb.entry}(hjYNhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjUNubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjQNubjt )}(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 }(hjpNhhhNhNubh)}(h:c:type:`list_head`h]j^ )}(hjzNh]h list_head}(hj|NhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjxNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjpNubh to additionally connect }(hjpNhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjNh]h drm_gpuvas}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhjNhKhjpNubhV in the same order they appear in the interval tree. This is useful to keep iterating }(hjpNhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjNh]h drm_gpuvas}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhjNhKhjpNubh] from a start node found through the rb-tree while doing modifications on the rb-tree itself.}(hjpNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhKhjmNubah}(h]h ]h"]h$]h&]uh1js hjQNubeh}(h]h ]h"]h$]h&]uh1jQ hjlNhKhjmJubjR )}(hJ``rb.__subtree_last`` needed by the interval tree, holding last-in-subtreeh](jX )}(h``rb.__subtree_last``h]j^ )}(hjNh]hrb.__subtree_last}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjNubjt )}(hhh]h)}(h4needed by the interval tree, holding last-in-subtreeh]h4needed by the interval tree, holding last-in-subtree}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjOubah}(h]h ]h"]h$]h&]uh1js hjNubeh}(h]h ]h"]h$]h&]uh1jQ hjOhKhjmJubeh}(h]h ]h"]h$]h&]uh1jL hj%Jubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hj=Oh]h Description}(hj?OhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;Oubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjHhhubh)}(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 }(hjSOhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj]Oh]h drm_gpuvm}(hj_OhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj[Oubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKDhjSOubh.}(hjSOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzOhKDhjHhhubh)}(hBTypically, this structure is embedded in bigger driver structures.h]hBTypically, this structure is embedded in bigger driver structures.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKGhjHhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gpuva_invalidate (C function)c.drm_gpuva_invalidatehNtauh1jhjHhhhNhNubj)}(hhh](j)}(hAvoid drm_gpuva_invalidate (struct drm_gpuva *va, bool invalidate)h]j)}(h@void drm_gpuva_invalidate(struct drm_gpuva *va, bool invalidate)h](j)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjOhKubj)}(hdrm_gpuva_invalidateh]j)}(hdrm_gpuva_invalidateh]hdrm_gpuva_invalidate}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjOhKubj>)}(h'(struct drm_gpuva *va, bool invalidate)h](jD)}(hstruct drm_gpuva *vah](j)}(hj? h]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj PmodnameN classnameNjj)}j]j)}j}jOsbc.drm_gpuva_invalidateasbuh1hhjOubj)}(h h]h }(hj(PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hjh]h*}(hj6PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hvah]hva}(hjCPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjOubjD)}(hbool invalidateh](j)}(hj=2h]hbool}(hj\PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXPubj)}(h h]h }(hjiPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXPubj)}(h invalidateh]h invalidate}(hjwPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXPubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjOubeh}(h]h ]h"]h$]h&]jjuh1j=hjOhhhjOhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOhhhjOhKubah}(h]jOah ](jjeh"]h$]h&]j j )j huh1jhjOhKhjOhhubj )}(hhh]h)}(hGsets whether the backing GEM of this :c:type:`drm_gpuva` is invalidatedh](h%sets whether the backing GEM of this }(hjPhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjPh]h drm_gpuva}(hjPhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjPubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j$Pc.drm_gpuva_invalidateasbj drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjPubh is invalidated}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjPhhubah}(h]h ]h"]h$]h&]uh1j hjOhhhjOhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jPj( jPj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjPubjM )}(hhh](jR )}(hP``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to set the invalidate flag for h](jX )}(h``struct drm_gpuva *va``h]j^ )}(hj Qh]hstruct drm_gpuva *va}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj Qubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjQubjt )}(hhh]h)}(h6the :c:type:`drm_gpuva` to set the invalidate flag forh](hthe }(hj$QhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj.Qh]h drm_gpuva}(hj0QhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj,Qubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj QhKhj$Qubh to set the invalidate flag for}(hj$QhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj QhKhj!Qubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hj QhKhjQubjR )}(hL``bool invalidate`` indicates whether the :c:type:`drm_gpuva` is invalidatedh](jX )}(h``bool invalidate``h]j^ )}(hjgQh]hbool invalidate}(hjiQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjeQubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjaQubjt )}(hhh]h)}(h8indicates whether the :c:type:`drm_gpuva` is invalidatedh](hindicates whether the }(hjQhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjQh]h drm_gpuva}(hjQhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjQubh is invalidated}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhKhj}Qubah}(h]h ]h"]h$]h&]uh1js hjaQubeh}(h]h ]h"]h$]h&]uh1jQ hj|QhKhjQubeh}(h]h ]h"]h$]h&]uh1jL hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gpuva_invalidated (C function)c.drm_gpuva_invalidatedhNtauh1jhjHhhhNhNubj)}(hhh](j)}(h1bool drm_gpuva_invalidated (struct drm_gpuva *va)h]j)}(h0bool drm_gpuva_invalidated(struct drm_gpuva *va)h](j)}(hj=2h]hbool}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjQhKubj)}(hdrm_gpuva_invalidatedh]j)}(hdrm_gpuva_invalidatedh]hdrm_gpuva_invalidated}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhjQhKubj>)}(h(struct drm_gpuva *va)h]jD)}(hstruct drm_gpuva *vah](j)}(hj? h]hstruct}(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hj-RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hj>RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Rubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj@RmodnameN classnameNjj)}j]j)}j}jRsbc.drm_gpuva_invalidatedasbuh1hhjRubj)}(h h]h }(hj^RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjlRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hvah]hva}(hjyRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjRubah}(h]h ]h"]h$]h&]jjuh1j=hjQhhhjQhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQhhhjQhKubah}(h]jQah ](jjeh"]h$]h&]j j )j huh1jhjQhKhjQhhubj )}(hhh]h)}(hKindicates whether the backing BO of this :c:type:`drm_gpuva` is invalidatedh](h)indicates whether the backing BO of this }(hjRhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjRh]h drm_gpuva}(hjRhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjRubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jZRc.drm_gpuva_invalidatedasbj drm_gpuvauh1hhjPhKhjRubh is invalidated}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjRhhubah}(h]h ]h"]h$]h&]uh1j hjQhhhjQhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jRj( jRj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjRubjM )}(hhh]jR )}(h:``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to check h](jX )}(h``struct drm_gpuva *va``h]j^ )}(hj Sh]hstruct drm_gpuva *va}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj Subah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjSubjt )}(hhh]h)}(h the :c:type:`drm_gpuva` to checkh](hthe }(hj%ShhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj/Sh]h drm_gpuva}(hj1ShhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj-Subah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj!ShKhj%Subh to check}(hj%ShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!ShKhj"Subah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hj!ShKhjSubah}(h]h ]h"]h$]h&]uh1jL hjRubh)}(h **Return**h]j7 )}(hjjSh]hReturn}(hjlShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjhSubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjRubh)}(h:``true`` if the GPU VA is invalidated, ``false`` otherwiseh](j^ )}(h``true``h]htrue}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubh if the GPU VA is invalidated, }(hjShhhNhNubj^ )}(h ``false``h]hfalse}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubh otherwise}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_flags (C enum)c.drm_gpuvm_flagshNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_flagsh]j)}(henum drm_gpuvm_flagsh](j)}(hjh]henum}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShKubj)}(hdrm_gpuvm_flagsh]j)}(hjSh]hdrm_gpuvm_flags}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjShKubah}(h]jSah ](jjeh"]h$]h&]j j )j huh1jhjShKhjShhubj )}(hhh]h)}(hflags for struct drm_gpuvmh]hflags for struct drm_gpuvm}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjThhubah}(h]h ]h"]h$]h&]uh1j hjShhhjShKubeh}(h]h ](j! enumeh"]h$]h&]j& j! j' j)Tj( j)Tj) j* j+ uh1jhhhjHhNhNubj- )}(hX**Constants** ``DRM_GPUVM_RESV_PROTECTED`` GPUVM is protected externally by the GPUVM's :c:type:`dma_resv` lock ``DRM_GPUVM_IMMEDIATE_MODE`` use the locking scheme for GEMs designed for modifying the GPUVM during the fence signalling path When set, gpuva.lock is used to protect gpuva.list in all GEM objects associated with this GPUVM. Otherwise, the GEMs dma-resv is used. ``DRM_GPUVM_USERBITS`` user defined bitsh](h)}(h **Constants**h]j7 )}(hj3Th]h Constants}(hj5ThhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj1Tubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhj-TubjM )}(hhh](jR )}(hb``DRM_GPUVM_RESV_PROTECTED`` GPUVM is protected externally by the GPUVM's :c:type:`dma_resv` lock h](jX )}(h``DRM_GPUVM_RESV_PROTECTED``h]j^ )}(hjRTh]hDRM_GPUVM_RESV_PROTECTED}(hjTThhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjPTubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjLTubjt )}(hhh]h)}(hDGPUVM is protected externally by the GPUVM's :c:type:`dma_resv` lockh](h/GPUVM is protected externally by the GPUVM’s }(hjkThhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjuTh]hdma_resv}(hjwThhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjsTubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjkTubh lock}(hjkThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjThKhjhTubah}(h]h ]h"]h$]h&]uh1js hjLTubeh}(h]h ]h"]h$]h&]uh1jQ hjgThKhjITubjR )}(hX``DRM_GPUVM_IMMEDIATE_MODE`` use the locking scheme for GEMs designed for modifying the GPUVM during the fence signalling path When set, gpuva.lock is used to protect gpuva.list in all GEM objects associated with this GPUVM. Otherwise, the GEMs dma-resv is used. h](jX )}(h``DRM_GPUVM_IMMEDIATE_MODE``h]j^ )}(hjTh]hDRM_GPUVM_IMMEDIATE_MODE}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjTubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjTubjt )}(hhh](h)}(hause the locking scheme for GEMs designed for modifying the GPUVM during the fence signalling pathh]hause the locking scheme for GEMs designed for modifying the GPUVM during the fence signalling path}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjTubh)}(hWhen set, gpuva.lock is used to protect gpuva.list in all GEM objects associated with this GPUVM. Otherwise, the GEMs dma-resv is used.h]hWhen set, gpuva.lock is used to protect gpuva.list in all GEM objects associated with this GPUVM. Otherwise, the GEMs dma-resv is used.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjTubeh}(h]h ]h"]h$]h&]uh1js hjTubeh}(h]h ]h"]h$]h&]uh1jQ hjThKhjITubjR )}(h(``DRM_GPUVM_USERBITS`` user defined bitsh](jX )}(h``DRM_GPUVM_USERBITS``h]j^ )}(hjTh]hDRM_GPUVM_USERBITS}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjTubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjTubjt )}(hhh]h)}(huser defined bitsh]huser defined bits}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjUubah}(h]h ]h"]h$]h&]uh1js hjTubeh}(h]h ]h"]h$]h&]uh1jQ hj UhKhjITubeh}(h]h ]h"]h$]h&]uh1jL hj-Tubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm (C struct) c.drm_gpuvmhNtauh1jhjHhhhNhNubj)}(hhh](j)}(h drm_gpuvmh]j)}(hstruct drm_gpuvmh](j)}(hj? h]hstruct}(hjRUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNUhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKubj)}(h h]h }(hj`UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNUhhhj_UhKubj)}(h drm_gpuvmh]j)}(hjLUh]h drm_gpuvm}(hjrUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNUhhhj_UhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjJUhhhj_UhKubah}(h]jEUah ](jjeh"]h$]h&]j j )j huh1jhj_UhKhjGUhhubj )}(hhh]h)}(hDRM GPU VA Managerh]hDRM GPU VA Manager}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjUhhubah}(h]h ]h"]h$]h&]uh1j hjGUhhhj_UhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jUj( jUj) j* j+ uh1jhhhjHhNhNubj- )}(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; struct llist_head bo_defer; }; **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 list ``bo_defer`` structure holding vm_bos that need to be destroyedh](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjUubh:}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjUubj )}(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; struct llist_head bo_defer; };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; struct llist_head bo_defer; };}hjUsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjUubh)}(h **Members**h]j7 )}(hjUh]hMembers}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjUubjM )}(hhh](jR )}(h*``name`` the name of the DRM GPU VA space h](jX )}(h``name``h]j^ )}(hjVh]hname}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjUubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjUubjt )}(hhh]h)}(h the name of the DRM GPU VA spaceh]h the name of the DRM GPU VA space}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKhjVubah}(h]h ]h"]h$]h&]uh1js hjUubeh}(h]h ]h"]h$]h&]uh1jQ hjVhKhjUubjR )}(h6``flags`` the :c:type:`drm_gpuvm_flags` of this GPUVM h](jX )}(h ``flags``h]j^ )}(hj:Vh]hflags}(hj representing the address space cutout reserved for the kernel}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjXhMhjXubah}(h]h ]h"]h$]h&]uh1js hjXubeh}(h]h ]h"]h$]h&]uh1jQ hjXhMhjUubjR )}(hK``ops`` :c:type:`drm_gpuvm_ops` providing the split/merge steps to drivers h](jX )}(h``ops``h]j^ )}(hjXh]hops}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjXubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjXubjt )}(hhh]h)}(hB:c:type:`drm_gpuvm_ops` providing the split/merge steps to driversh](h)}(h:c:type:`drm_gpuvm_ops`h]j^ )}(hjYh]h drm_gpuvm_ops}(hjYhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhjXhMhjYubh+ providing the split/merge steps to drivers}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjXhMhjXubah}(h]h ]h"]h$]h&]uh1js hjXubeh}(h]h ]h"]h$]h&]uh1jQ hjXhMhjUubjR )}(hO``r_obj`` Resv GEM object; representing the GPUVM's common :c:type:`dma_resv`. h](jX )}(h ``r_obj``h]j^ )}(hj?Yh]hr_obj}(hjAYhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj=Yubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM"hj9Yubjt )}(hhh]h)}(hDResv GEM object; representing the GPUVM's common :c:type:`dma_resv`.h](h3Resv GEM object; representing the GPUVM’s common }(hjXYhhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjbYh]hdma_resv}(hjdYhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj`Yubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjTYhM"hjXYubh.}(hjXYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjTYhM"hjUYubah}(h]h ]h"]h$]h&]uh1js hj9Yubeh}(h]h ]h"]h$]h&]uh1jQ hjTYhM"hjUubjR )}(h-``extobj`` structure holding the extobj list h](jX )}(h ``extobj``h]j^ )}(hjYh]hextobj}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM'hjYubjt )}(hhh]h)}(h!structure holding the extobj listh]h!structure holding the extobj list}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhM'hjYubah}(h]h ]h"]h$]h&]uh1js hjYubeh}(h]h ]h"]h$]h&]uh1jQ hjYhM'hjUubjR )}(h_``extobj.list`` :c:type:`list_head` storing :c:type:`drm_gpuvm_bos` serving as external object h](jX )}(h``extobj.list``h]j^ )}(hjYh]h extobj.list}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM,hjYubjt )}(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^ )}(hjYh]h list_head}(hjYhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM+hjYubh storing }(hjYhhhNhNubh)}(h:c:type:`drm_gpuvm_bos`h]j^ )}(hjZh]h drm_gpuvm_bos}(hjZhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bosuh1hhjZhM+hjYubh serving as external object}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhM+hjYubah}(h]h ]h"]h$]h&]uh1js hjYubeh}(h]h ]h"]h$]h&]uh1jQ hjYhM,hjUubjR )}(hj``extobj.local_list`` pointer to the local list temporarily storing entries from the external object list h](jX )}(h``extobj.local_list``h]j^ )}(hjPZh]hextobj.local_list}(hjRZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjNZubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM2hjJZubjt )}(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}(hjiZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM1hjfZubah}(h]h ]h"]h$]h&]uh1js hjJZubeh}(h]h ]h"]h$]h&]uh1jQ hjeZhM2hjUubjR )}(h4``extobj.lock`` spinlock to protect the extobj list h](jX )}(h``extobj.lock``h]j^ )}(hjZh]h extobj.lock}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM7hjZubjt )}(hhh]h)}(h#spinlock to protect the extobj listh]h#spinlock to protect the extobj list}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM7hjZubah}(h]h ]h"]h$]h&]uh1js hjZubeh}(h]h ]h"]h$]h&]uh1jQ hjZhM7hjUubjR )}(h?``evict`` structure holding the evict list and evict list lock h](jX )}(h ``evict``h]j^ )}(hjZh]hevict}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM=hjZubjt )}(hhh]h)}(h4structure holding the evict list and evict list lockh]h4structure holding the evict list and evict list lock}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM=hjZubah}(h]h ]h"]h$]h&]uh1js hjZubeh}(h]h ]h"]h$]h&]uh1jQ hjZhM=hjUubjR )}(h[``evict.list`` :c:type:`list_head` storing :c:type:`drm_gpuvm_bos` currently being evicted h](jX )}(h``evict.list``h]j^ )}(hjZh]h evict.list}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMBhjZubjt )}(hhh]h)}(hK:c:type:`list_head` storing :c:type:`drm_gpuvm_bos` currently being evictedh](h)}(h:c:type:`list_head`h]j^ )}(hj[h]h list_head}(hj[hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMAhj[ubh storing }(hj[hhhNhNubh)}(h:c:type:`drm_gpuvm_bos`h]j^ )}(hj?[h]h drm_gpuvm_bos}(hjA[hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj=[ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bosuh1hhj8[hMAhj[ubh currently being evicted}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8[hMAhj[ubah}(h]h ]h"]h$]h&]uh1js hjZubeh}(h]h ]h"]h$]h&]uh1jQ hj[hMBhjUubjR )}(hh``evict.local_list`` pointer to the local list temporarily storing entries from the evicted object list h](jX )}(h``evict.local_list``h]j^ )}(hjx[h]hevict.local_list}(hjz[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjv[ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMHhjr[ubjt )}(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}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMGhj[ubah}(h]h ]h"]h$]h&]uh1js hjr[ubeh}(h]h ]h"]h$]h&]uh1jQ hj[hMHhjUubjR )}(h2``evict.lock`` spinlock to protect the evict list h](jX )}(h``evict.lock``h]j^ )}(hj[h]h evict.lock}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMMhj[ubjt )}(hhh]h)}(h"spinlock to protect the evict listh]h"spinlock to protect the evict list}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMMhj[ubah}(h]h ]h"]h$]h&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hj[hMMhjUubjR )}(h?``bo_defer`` structure holding vm_bos that need to be destroyedh](jX )}(h ``bo_defer``h]j^ )}(hj[h]hbo_defer}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMRhj[ubjt )}(hhh]h)}(h2structure holding vm_bos that need to be destroyedh]h2structure holding vm_bos that need to be destroyed}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMShj\ubah}(h]h ]h"]h$]h&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hj\hMRhjUubeh}(h]h ]h"]h$]h&]uh1jL hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hj.\h]h Description}(hj0\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,\ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMVhjHhhubh)}(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 }(hjD\hhhNhNubh)}(h:c:type:`maple_tree`h]j^ )}(hjN\h]h maple_tree}(hjP\hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjL\ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j maple_treeuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjD\ubhO structures. Typically, this structure is embedded in bigger driver structures.}(hjD\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjk\hKhjHhhubh)}(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.}(hjv\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjHhhubh)}(hCThere should be one manager instance per GPU virtual address space.h]hCThere should be one manager instance per GPU virtual address space.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjHhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_get (C function)c.drm_gpuvm_gethNtauh1jhjHhhhNhNubj)}(hhh](j)}(h:struct drm_gpuvm * drm_gpuvm_get (struct drm_gpuvm *gpuvm)h]j)}(h8struct drm_gpuvm *drm_gpuvm_get(struct drm_gpuvm *gpuvm)h](j)}(hj? h]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM`ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj\hM`ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj\modnameN classnameNjj)}j]j)}j} drm_gpuvm_getsbc.drm_gpuvm_getasbuh1hhj\hhhj\hM`ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj\hM`ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj\hM`ubj)}(h drm_gpuvm_geth]j)}(hj\h]h drm_gpuvm_get}(hj ]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhj\hM`ubj>)}(h(struct drm_gpuvm *gpuvm)h]jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj']hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#]ubj)}(h h]h }(hj4]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#]ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjE]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB]ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjG]modnameN classnameNjj)}j]j\c.drm_gpuvm_getasbuh1hhj#]ubj)}(h h]h }(hjc]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#]ubj)}(hjh]h*}(hjq]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#]ubj)}(hgpuvmh]hgpuvm}(hj~]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj]ubah}(h]h ]h"]h$]h&]ljjuh1j=hj\hhhj\hM`ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhj\hM`ubah}(h]j\ah ](jjeh"]h$]h&]j j )j huh1jhj\hM`hj\hhubj )}(hhh]h)}(h$acquire a struct drm_gpuvm referenceh]h$acquire a struct drm_gpuvm reference}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM`hj]hhubah}(h]h ]h"]h$]h&]uh1j hj\hhhj\hM`ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j]j( j]j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMdhj]ubjM )}(hhh]jR )}(hP``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to acquire the reference of h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj]h]hstruct drm_gpuvm *gpuvm}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMahj]ubjt )}(hhh]h)}(h3the :c:type:`drm_gpuvm` to acquire the reference ofh](hthe }(hj^hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj ^h]h drm_gpuvm}(hj^hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ^ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj]hMahj^ubh to acquire the reference of}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hMahj]ubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hj]hMahj]ubah}(h]h ]h"]h$]h&]uh1jL hj]ubh)}(h**Description**h]j7 )}(hjG^h]h Description}(hjI^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjE^ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMchj]ubh)}(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 }(hj]^hhhNhNubj7 )}(h **gpuvm**h]hgpuvm}(hje^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]^ubhT. It is illegal to call this without already holding a reference. No locks required.}(hj]^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMbhj]ubh)}(h **Return**h]j7 )}(hj^h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj~^ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMehj]ubh)}(h2the :c:type:`struct drm_gpuvm ` pointerh](hthe }(hj^hhhNhNubh)}(h&:c:type:`struct drm_gpuvm `h]j^ )}(hj^h]hstruct drm_gpuvm}(hj^hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj^ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMfhj^ubh pointer}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hMfhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gpuvm_resv_protected (C function)c.drm_gpuvm_resv_protectedhNtauh1jhjHhhhNhNubj)}(hhh](j)}(h7bool drm_gpuvm_resv_protected (struct drm_gpuvm *gpuvm)h]j)}(h6bool drm_gpuvm_resv_protected(struct drm_gpuvm *gpuvm)h](j)}(hj=2h]hbool}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMyubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hMyubj)}(hdrm_gpuvm_resv_protectedh]j)}(hdrm_gpuvm_resv_protectedh]hdrm_gpuvm_resv_protected}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj^hMyubj>)}(h(struct drm_gpuvm *gpuvm)h]jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj$_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _ubj)}(h h]h }(hj1_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjB_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?_ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjD_modnameN classnameNjj)}j]j)}j}j _sbc.drm_gpuvm_resv_protectedasbuh1hhj _ubj)}(h h]h }(hjb_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _ubj)}(hjh]h*}(hjp_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _ubj)}(hgpuvmh]hgpuvm}(hj}_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj_ubah}(h]h ]h"]h$]h&]jjuh1j=hj^hhhj^hMyubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhj^hMyubah}(h]j^ah ](jjeh"]h$]h&]j j )j huh1jhj^hMyhj^hhubj )}(hhh]h)}(h;indicates whether :c:type:`DRM_GPUVM_RESV_PROTECTED` is seth](hindicates whether }(hj_hhhNhNubh)}(h":c:type:`DRM_GPUVM_RESV_PROTECTED`h]j^ )}(hj_h]hDRM_GPUVM_RESV_PROTECTED}(hj_hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j^_c.drm_gpuvm_resv_protectedasbj DRM_GPUVM_RESV_PROTECTEDuh1hhjPhKhj_ubh is set}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMyhj_hhubah}(h]h ]h"]h$]h&]uh1j hj^hhhj^hMyubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j_j( j_j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj_ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM}hj_ubjM )}(hhh]jR )}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj`h]hstruct drm_gpuvm *gpuvm}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj`ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM{hj `ubjt )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hj)`hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj3`h]h drm_gpuvm}(hj5`hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj1`ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj%`hM{hj)`ubeh}(h]h ]h"]h$]h&]uh1hhj%`hM{hj&`ubah}(h]h ]h"]h$]h&]uh1js hj `ubeh}(h]h ]h"]h$]h&]uh1jQ hj%`hM{hj`ubah}(h]h ]h"]h$]h&]uh1jL hj_ubh)}(h **Return**h]j7 )}(hjj`h]hReturn}(hjl`hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjh`ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM}hj_ubh)}(hCtrue if :c:type:`DRM_GPUVM_RESV_PROTECTED` is set, false otherwise.h](htrue if }(hj`hhhNhNubh)}(h":c:type:`DRM_GPUVM_RESV_PROTECTED`h]j^ )}(hj`h]hDRM_GPUVM_RESV_PROTECTED}(hj`hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj`ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_GPUVM_RESV_PROTECTEDuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM}hj`ubh is set, false otherwise.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hM}hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gpuvm_immediate_mode (C function)c.drm_gpuvm_immediate_modehNtauh1jhjHhhhNhNubj)}(hhh](j)}(h7bool drm_gpuvm_immediate_mode (struct drm_gpuvm *gpuvm)h]j)}(h6bool drm_gpuvm_immediate_mode(struct drm_gpuvm *gpuvm)h](j)}(hj=2h]hbool}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMubj)}(hdrm_gpuvm_immediate_modeh]j)}(hdrm_gpuvm_immediate_modeh]hdrm_gpuvm_immediate_mode}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj`hMubj>)}(h(struct drm_gpuvm *gpuvm)h]jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj,ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)aubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj.amodnameN classnameNjj)}j]j)}j}j`sbc.drm_gpuvm_immediate_modeasbuh1hhj aubj)}(h h]h }(hjLahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubj)}(hjh]h*}(hjZahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubj)}(hgpuvmh]hgpuvm}(hjgahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjaubah}(h]h ]h"]h$]h&]jjuh1j=hj`hhhj`hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`hhhj`hMubah}(h]j`ah ](jjeh"]h$]h&]j j )j huh1jhj`hMhj`hhubj )}(hhh]h)}(h;indicates whether :c:type:`DRM_GPUVM_IMMEDIATE_MODE` is seth](hindicates whether }(hjahhhNhNubh)}(h":c:type:`DRM_GPUVM_IMMEDIATE_MODE`h]j^ )}(hjah]hDRM_GPUVM_IMMEDIATE_MODE}(hjahhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjaubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jHac.drm_gpuvm_immediate_modeasbj DRM_GPUVM_IMMEDIATE_MODEuh1hhjPhKhjaubh is set}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjahhubah}(h]h ]h"]h$]h&]uh1j hj`hhhj`hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jaj( jaj) j* j+ uh1jhhhjHhNhNubj- )}(h**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` **Return** true if :c:type:`DRM_GPUVM_IMMEDIATE_MODE` is set, false otherwise.h](h)}(h**Parameters**h]j7 )}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjaubjM )}(hhh]jR )}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjah]hstruct drm_gpuvm *gpuvm}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjaubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjaubjt )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hjbhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjbh]h drm_gpuvm}(hjbhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjbhMhjbubeh}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1js hjaubeh}(h]h ]h"]h$]h&]uh1jQ hjbhMhjaubah}(h]h ]h"]h$]h&]uh1jL hjaubh)}(h **Return**h]j7 )}(hjTbh]hReturn}(hjVbhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRbubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjaubh)}(hCtrue if :c:type:`DRM_GPUVM_IMMEDIATE_MODE` is set, false otherwise.h](htrue if }(hjjbhhhNhNubh)}(h":c:type:`DRM_GPUVM_IMMEDIATE_MODE`h]j^ )}(hjtbh]hDRM_GPUVM_IMMEDIATE_MODE}(hjvbhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjrbubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_GPUVM_IMMEDIATE_MODEuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjjbubh is set, false otherwise.}(hjjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjbhMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_resv (C macro)c.drm_gpuvm_resvhNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_resvh]j)}(hdrm_gpuvm_resvh]j)}(hdrm_gpuvm_resvh]j)}(hjbh]hdrm_gpuvm_resv}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjbhhhjbhMubah}(h]jbah ](jjeh"]h$]h&]j j )j huh1jhjbhMhjbhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjbhhhjbhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jbj( jbj) j* j+ uh1jhhhjHhNhNubh)}(h``drm_gpuvm_resv (gpuvm__)``h]j^ )}(hjbh]hdrm_gpuvm_resv (gpuvm__)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj )}(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 }(hj chhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjch]h drm_gpuvm}(hjchhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjcubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj cubh’s }(hj chhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hj:ch]hdma_resv}(hj)}(h5(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjfmodnameN classnameNjj)}j]j)}j}j~fsbc.drm_gpuvm_is_extobjasbuh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hgpuvmh]hgpuvm}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjfubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj(ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%gubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj*gmodnameN classnameNjj)}j]jfc.drm_gpuvm_is_extobjasbuh1hhjgubj)}(h h]h }(hjFghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjTghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hobjh]hobj}(hjaghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjfubeh}(h]h ]h"]h$]h&]jjuh1j=hjXfhhhjifhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjTfhhhjifhMubah}(h]jOfah ](jjeh"]h$]h&]j j )j huh1jhjifhMhjQfhhubj )}(hhh]h)}(hJindicates whether the given :c:type:`drm_gem_object` is an external objecth](hindicates whether the given }(hjghhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjgh]hdrm_gem_object}(hjghhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjgubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jfc.drm_gpuvm_is_extobjasbj drm_gem_objectuh1hhjPhKhjgubh is an external object}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjghhubah}(h]h ]h"]h$]h&]uh1j hjQfhhhjifhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jgj( jgj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjgubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjgubjM )}(hhh](jR )}(h=``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to check h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjgh]hstruct drm_gpuvm *gpuvm}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjgubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjgubjt )}(hhh]h)}(h the :c:type:`drm_gpuvm` to checkh](hthe }(hj hhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjhh]h drm_gpuvm}(hjhhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjhubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj hhMhj hubh to check}(hj hhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hhMhj hubah}(h]h ]h"]h$]h&]uh1js hjgubeh}(h]h ]h"]h$]h&]uh1jQ hj hhMhjgubjR )}(hE``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` to check h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjPhh]hstruct drm_gem_object *obj}(hjRhhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjNhubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjJhubjt )}(hhh]h)}(h%the :c:type:`drm_gem_object` to checkh](hthe }(hjihhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjshh]hdrm_gem_object}(hjuhhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqhubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjehhMhjihubh to check}(hjihhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehhMhjfhubah}(h]h ]h"]h$]h&]uh1js hjJhubeh}(h]h ]h"]h$]h&]uh1jQ hjehhMhjgubeh}(h]h ]h"]h$]h&]uh1jL hjgubh)}(h **Return**h]j7 )}(hjhh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjhubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjgubh)}(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 }(hjhhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjhh]hdrm_gem_object}(hjhhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjhubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjhubh }(hjhhhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjhh]hdma_resv}(hjhhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjhubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjhhMhjhubh differs from the }(hjhhhhNhNubh)}(h:c:type:`drm_gpuvms`h]j^ )}(hjih]h drm_gpuvms}(hjihhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmsuh1hhjhhMhjhubh }hjhsbh)}(h:c:type:`dma_resv`h]j^ )}(hj8ih]hdma_resv}(hj:ihhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj6iubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjhhMhjhubh, false otherwise}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhhMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gpuvm_for_each_va_range (C macro)c.drm_gpuvm_for_each_va_rangehNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_for_each_va_rangeh]j)}(hdrm_gpuvm_for_each_va_rangeh]j)}(hdrm_gpuvm_for_each_va_rangeh]j)}(hjyih]hdrm_gpuvm_for_each_va_range}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{ihhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjwihhhjihMubah}(h]jriah ](jjeh"]h$]h&]j j )j huh1jhjihMhjtihhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjtihhhjihMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jij( jij) j* j+ uh1jhhhjHhNhNubh)}(h?``drm_gpuvm_for_each_va_range (va__, gpuvm__, start__, end__)``h]j^ )}(hjih]h;drm_gpuvm_for_each_va_range (va__, gpuvm__, start__, end__)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj )}(h-iterate over a range of :c:type:`drm_gpuvas` h]h)}(h,iterate over a range of :c:type:`drm_gpuvas`h](hiterate over a range of }(hjihhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjih]h drm_gpuvas}(hjihhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjiubeh}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjihMhjHhhubj- )}(hX8**Parameters** ``va__`` :c:type:`drm_gpuva` structure to assign to in each iteration step ``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(), 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 isn't 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]j7 )}(hj jh]h Parameters}(hj jhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjjubjM )}(hhh](jR )}(hK``va__`` :c:type:`drm_gpuva` structure to assign to in each iteration step h](jX )}(h``va__``h]j^ )}(hj(jh]hva__}(hj*jhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj&jubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj"jubjt )}(hhh]h)}(hA:c:type:`drm_gpuva` structure to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j^ )}(hjGjh]h drm_gpuva}(hjIjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjEjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj=jhMhjAjubh. structure to assign to in each iteration step}(hjAjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=jhMhj>jubah}(h]h ]h"]h$]h&]uh1js hj"jubeh}(h]h ]h"]h$]h&]uh1jQ hj=jhMhjjubjR )}(h-``gpuvm__`` :c:type:`drm_gpuvm` to walk over h](jX )}(h ``gpuvm__``h]j^ )}(hjjh]hgpuvm__}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj~jubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjzjubjt )}(hhh]h)}(h :c:type:`drm_gpuvm` to walk overh](h)}(h:c:type:`drm_gpuvm`h]j^ )}(hjjh]h drm_gpuvm}(hjjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjjhMhjjubh to walk over}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1js hjzjubeh}(h]h ]h"]h$]h&]uh1jQ hjjhMhjjubjR )}(h?``start__`` starting offset, the first gpuva will overlap this h](jX )}(h ``start__``h]j^ )}(hjjh]hstart__}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjjubjt )}(hhh]h)}(h2starting offset, the first gpuva will overlap thish]h2starting offset, the first gpuva will overlap this}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1js hjjubeh}(h]h ]h"]h$]h&]uh1jQ hjjhMhjjubjR )}(hQ``end__`` ending offset, the last gpuva will start before this (but may overlap) h](jX )}(h ``end__``h]j^ )}(hjkh]hend__}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj kubjt )}(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)}(hj*khhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj'kubah}(h]h ]h"]h$]h&]uh1js hj kubeh}(h]h ]h"]h$]h&]uh1jQ hj&khMhjjubeh}(h]h ]h"]h$]h&]uh1jL hjjubh)}(h**Description**h]j7 )}(hjMkh]h Description}(hjOkhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjKkubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjjubh)}(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(), 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 isn't 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 }(hjckhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjmkh]h drm_gpuvas}(hjokhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjkkubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjckubh in the }(hjckhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjkh]h drm_gpuvm}(hjkhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjkhMhjckubh that lie between }(hjckhhhNhNubj7 )}(h **start__**h]hstart__}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjckubh and }(hjckhhhNhNubj7 )}(h **end__**h]hend__}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjckubhC. It is implemented similarly to list_for_each(), but is using the }(hjckhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjkh]h drm_gpuvm}(hjkhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjkhMhjckubhF’s internal interval tree to accelerate the search for the starting }(hjckhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjkh]h drm_gpuva}(hjkhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjkubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjkhMhjckubhF, and hence isn’t safe against removal of elements. It assumes that }(hjckhhhNhNubj7 )}(h **end__**h]hend__}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjckubh* is within (or is the upper limit of) the }(hjckhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj0lh]h drm_gpuvm}(hj2lhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj.lubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjkhMhjckubh'. This iterator does not skip over the }(hjckhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjSlh]h drm_gpuvm}(hjUlhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjQlubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjkhMhjckubh’s }(hjckhhhNhNubj7 )}(h**kernel_alloc_node**h]hkernel_alloc_node}(hjtlhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjckubh.}(hjckhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gpuvm_for_each_va_range_safe (C macro)"c.drm_gpuvm_for_each_va_range_safehNtauh1jhjHhhhNhNubj)}(hhh](j)}(h drm_gpuvm_for_each_va_range_safeh]j)}(h drm_gpuvm_for_each_va_range_safeh]j)}(h drm_gpuvm_for_each_va_range_safeh]j)}(hjlh]h drm_gpuvm_for_each_va_range_safe}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjlhhhjlhMubah}(h]jlah ](jjeh"]h$]h&]j j )j huh1jhjlhMhjlhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjlhhhjlhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jlj( jlj) j* j+ uh1jhhhjHhNhNubh)}(hL``drm_gpuvm_for_each_va_range_safe (va__, next__, gpuvm__, start__, end__)``h]j^ )}(hjlh]hHdrm_gpuvm_for_each_va_range_safe (va__, next__, gpuvm__, start__, end__)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjlubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj )}(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 }(hjlhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjmh]h drm_gpuvas}(hjmhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjlubeh}(h]h ]h"]h$]h&]uh1hhj#mhMhjlubah}(h]h ]h"]h$]h&]uh1jhj#mhMhjHhhubj- )}(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]j7 )}(hj6mh]h Parameters}(hj8mhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4mubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj0mubjM )}(hhh](jR )}(hA``va__`` :c:type:`drm_gpuva` to assign to in each iteration step h](jX )}(h``va__``h]j^ )}(hjUmh]hva__}(hjWmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSmubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjOmubjt )}(hhh]h)}(h7:c:type:`drm_gpuva` to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j^ )}(hjtmh]h drm_gpuva}(hjvmhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjrmubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjjmhMhjnmubh$ to assign to in each iteration step}(hjnmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjjmhMhjkmubah}(h]h ]h"]h$]h&]uh1js hjOmubeh}(h]h ]h"]h$]h&]uh1jQ hjjmhMhjLmubjR )}(hC``next__`` another :c:type:`drm_gpuva` to use as temporary storage h](jX )}(h ``next__``h]j^ )}(hjmh]hnext__}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjmubjt )}(hhh]h)}(h7another :c:type:`drm_gpuva` to use as temporary storageh](hanother }(hjmhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjmh]h drm_gpuva}(hjmhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjmhMhjmubh to use as temporary storage}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjmubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjmhMhjLmubjR )}(h-``gpuvm__`` :c:type:`drm_gpuvm` to walk over h](jX )}(h ``gpuvm__``h]j^ )}(hj nh]hgpuvm__}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjnubjt )}(hhh]h)}(h :c:type:`drm_gpuvm` to walk overh](h)}(h:c:type:`drm_gpuvm`h]j^ )}(hj(nh]h drm_gpuvm}(hj*nhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj&nubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjnhMhj"nubh to walk over}(hj"nhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1js hjnubeh}(h]h ]h"]h$]h&]uh1jQ hjnhMhjLmubjR )}(h?``start__`` starting offset, the first gpuva will overlap this h](jX )}(h ``start__``h]j^ )}(hjanh]hstart__}(hjcnhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj_nubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj[nubjt )}(hhh]h)}(h2starting offset, the first gpuva will overlap thish]h2starting offset, the first gpuva will overlap this}(hjznhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvnhMhjwnubah}(h]h ]h"]h$]h&]uh1js hj[nubeh}(h]h ]h"]h$]h&]uh1jQ hjvnhMhjLmubjR )}(hQ``end__`` ending offset, the last gpuva will start before this (but may overlap) h](jX )}(h ``end__``h]j^ )}(hjnh]hend__}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjnubjt )}(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)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjnubah}(h]h ]h"]h$]h&]uh1js hjnubeh}(h]h ]h"]h$]h&]uh1jQ hjnhMhjLmubeh}(h]h ]h"]h$]h&]uh1jL hj0mubh)}(h**Description**h]j7 )}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj0mubh)}(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 }(hjnhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjnh]h drm_gpuvas}(hjnhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjnubh in the }(hjnhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjoh]h drm_gpuvm}(hjohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjohMhjnubh that lie between }(hjnhhhNhNubj7 )}(h **start__**h]hstart__}(hj;ohhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubh and }(hjnhhhNhNubj7 )}(h **end__**h]hend__}(hjMohhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubhH. It is implemented similarly to list_for_each_safe(), but is using the }(hjnhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjaoh]h drm_gpuvm}(hjcohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj_oubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjohMhjnubhF’s internal interval tree to accelerate the search for the starting }(hjnhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjoh]h drm_gpuva}(hjohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjohMhjnubhA, and hence is safe against removal of elements. It assumes that }(hjnhhhNhNubj7 )}(h **end__**h]hend__}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubh* is within (or is the upper limit of) the }(hjnhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjoh]h drm_gpuvm}(hjohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjohMhjnubh'. This iterator does not skip over the }(hjnhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjoh]h drm_gpuvm}(hjohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjohMhjnubh’s }(hjnhhhNhNubj7 )}(h**kernel_alloc_node**h]hkernel_alloc_node}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohMhj0mubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_for_each_va (C macro)c.drm_gpuvm_for_each_vahNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_for_each_vah]j)}(hdrm_gpuvm_for_each_vah]j)}(hdrm_gpuvm_for_each_vah]j)}(hj/ph]hdrm_gpuvm_for_each_va}(hj9phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5pubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1phhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhj-phhhjLphMubah}(h]j(pah ](jjeh"]h$]h&]j j )j huh1jhjLphMhj*phhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj*phhhjLphMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jepj( jepj) j* j+ uh1jhhhjHhNhNubh)}(h)``drm_gpuvm_for_each_va (va__, gpuvm__)``h]j^ )}(hjkph]h%drm_gpuvm_for_each_va (va__, gpuvm__)}(hjmphhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjipubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj )}(h&iterate over all :c:type:`drm_gpuvas` h]h)}(h%iterate over all :c:type:`drm_gpuvas`h](hiterate over all }(hjphhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjph]h drm_gpuvas}(hjphhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjpubeh}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjphMhjHhhubj- )}(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]j7 )}(hjph]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjpubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjpubjM )}(hhh](jR )}(hA``va__`` :c:type:`drm_gpuva` to assign to in each iteration step h](jX )}(h``va__``h]j^ )}(hjph]hva__}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjpubjt )}(hhh]h)}(h7:c:type:`drm_gpuva` to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j^ )}(hjph]h drm_gpuva}(hjphhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjphMhjpubh$ to assign to in each iteration step}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1js hjpubeh}(h]h ]h"]h$]h&]uh1jQ hjphMhjpubjR )}(h-``gpuvm__`` :c:type:`drm_gpuvm` to walk over h](jX )}(h ``gpuvm__``h]j^ )}(hj6qh]hgpuvm__}(hj8qhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj4qubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj0qubjt )}(hhh]h)}(h :c:type:`drm_gpuvm` to walk overh](h)}(h:c:type:`drm_gpuvm`h]j^ )}(hjUqh]h drm_gpuvm}(hjWqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjSqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjKqhMhjOqubh to walk over}(hjOqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKqhMhjLqubah}(h]h ]h"]h$]h&]uh1js hj0qubeh}(h]h ]h"]h$]h&]uh1jQ hjKqhMhjpubeh}(h]h ]h"]h$]h&]uh1jL hjpubh)}(h**Description**h]j7 )}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjpubh)}(hjThis iterator walks over all :c:type:`drm_gpuva` structures associated with the given :c:type:`drm_gpuvm`.h](hThis iterator walks over all }(hjqhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjqh]h drm_gpuva}(hjqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjqubh& structures associated with the given }(hjqhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjqh]h drm_gpuvm}(hjqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjqhMhjqubh.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjqhMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gpuvm_for_each_va_safe (C macro)c.drm_gpuvm_for_each_va_safehNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_for_each_va_safeh]j)}(hdrm_gpuvm_for_each_va_safeh]j)}(hdrm_gpuvm_for_each_va_safeh]j)}(hjrh]hdrm_gpuvm_for_each_va_safe}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjrhhhj2rhMubah}(h]jrah ](jjeh"]h$]h&]j j )j huh1jhj2rhMhjrhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjrhhhj2rhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jKrj( jKrj) j* j+ uh1jhhhjHhNhNubh)}(h6``drm_gpuvm_for_each_va_safe (va__, next__, gpuvm__)``h]j^ )}(hjQrh]h2drm_gpuvm_for_each_va_safe (va__, next__, gpuvm__)}(hjSrhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjOrubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj )}(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 }(hjkrhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjurh]h drm_gpuvas}(hjwrhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjsrubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjkrubeh}(h]h ]h"]h$]h&]uh1hhjrhMhjgrubah}(h]h ]h"]h$]h&]uh1jhjrhMhjHhhubj- )}(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]j7 )}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjrubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjrubjM )}(hhh](jR )}(hA``va__`` :c:type:`drm_gpuva` to assign to in each iteration step h](jX )}(h``va__``h]j^ )}(hjrh]hva__}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjrubjt )}(hhh]h)}(h7:c:type:`drm_gpuva` to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j^ )}(hjrh]h drm_gpuva}(hjrhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjrhMhjrubh$ to assign to in each iteration step}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1js hjrubeh}(h]h ]h"]h$]h&]uh1jQ hjrhMhjrubjR )}(hC``next__`` another :c:type:`drm_gpuva` to use as temporary storage h](jX )}(h ``next__``h]j^ )}(hjsh]hnext__}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjsubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjsubjt )}(hhh]h)}(h7another :c:type:`drm_gpuva` to use as temporary storageh](hanother }(hj5shhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj?sh]h drm_gpuva}(hjAshhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj=subah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj1shMhj5subh to use as temporary storage}(hj5shhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1shMhj2subah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hj1shMhjrubjR )}(h-``gpuvm__`` :c:type:`drm_gpuvm` to walk over h](jX )}(h ``gpuvm__``h]j^ )}(hjxsh]hgpuvm__}(hjzshhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjvsubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjrsubjt )}(hhh]h)}(h :c:type:`drm_gpuvm` to walk overh](h)}(h:c:type:`drm_gpuvm`h]j^ )}(hjsh]h drm_gpuvm}(hjshhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjsubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjshMhjsubh to walk over}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1js hjrsubeh}(h]h ]h"]h$]h&]uh1jQ hjshMhjrubeh}(h]h ]h"]h$]h&]uh1jL hjrubh)}(h**Description**h]j7 )}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjsubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjrubh)}(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 }(hjshhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjsh]h drm_gpuva}(hjshhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjsubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjsubh& structures associated with the given }(hjshhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjth]h drm_gpuvm}(hjthhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjtubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjthMhjsubhd. It is implemented with list_for_each_entry_safe(), and hence safe against the removal of elements.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_exec (C struct)c.drm_gpuvm_exechNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_exech]j)}(hstruct drm_gpuvm_exech](j)}(hj? h]hstruct}(hj]thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYthhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM ubj)}(h h]h }(hjkthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYthhhjjthM ubj)}(hdrm_gpuvm_exech]j)}(hjWth]hdrm_gpuvm_exec}(hj}thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjytubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYthhhjjthM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUthhhjjthM ubah}(h]jPtah ](jjeh"]h$]h&]j j )j huh1jhjjthM hjRthhubj )}(hhh]h)}(h5:c:type:`drm_gpuvm` abstraction of :c:type:`drm_exec`h](h)}(h:c:type:`drm_gpuvm`h]j^ )}(hjth]h drm_gpuvm}(hjthhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjtubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j)}j}jWtsbc.drm_gpuvm_execasbj drm_gpuvmuh1hhjPhKhjtubh abstraction of }(hjthhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hjth]hdrm_exec}(hjthhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjtubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjtj drm_execuh1hhjPhKhjtubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjthhubah}(h]h ]h"]h$]h&]uh1j hjRthhhjjthM ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jtj( jtj) j* j+ uh1jhhhjHhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjuubh:}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjuubj )}(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; };}hj!usbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjuubh)}(h **Members**h]j7 )}(hj2uh]hMembers}(hj4uhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj0uubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM hjuubjM )}(hhh](jR )}(h*``exec`` the :c:type:`drm_exec` structure h](jX )}(h``exec``h]j^ )}(hjQuh]hexec}(hjSuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjOuubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjKuubjt )}(hhh]h)}(h the :c:type:`drm_exec` structureh](hthe }(hjjuhhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hjtuh]hdrm_exec}(hjvuhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjruubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhjfuhMhjjuubh structure}(hjjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfuhMhjguubah}(h]h ]h"]h$]h&]uh1js hjKuubeh}(h]h ]h"]h$]h&]uh1jQ hjfuhMhjHuubjR )}(h,``flags`` the flags for the struct drm_exec h](jX )}(h ``flags``h]j^ )}(hjuh]hflags}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjuubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjuubjt )}(hhh]h)}(h!the flags for the struct drm_exech]h!the flags for the struct drm_exec}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1js hjuubeh}(h]h ]h"]h$]h&]uh1jQ hjuhMhjHuubjR )}(h<``vm`` the :c:type:`drm_gpuvm` to lock its DMA reservations h](jX )}(h``vm``h]j^ )}(hjuh]hvm}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjuubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM"hjuubjt )}(hhh]h)}(h4the :c:type:`drm_gpuvm` to lock its DMA reservationsh](hthe }(hjuhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj vh]h drm_gpuvm}(hj vhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjvubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjuhM"hjuubh to lock its DMA reservations}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhM"hjuubah}(h]h ]h"]h$]h&]uh1js hjuubeh}(h]h ]h"]h$]h&]uh1jQ hjuhM"hjHuubjR )}(hr``num_fences`` the number of fences to reserve for the :c:type:`dma_resv` of the locked :c:type:`drm_gem_objects` h](jX )}(h``num_fences``h]j^ )}(hjBvh]h num_fences}(hjDvhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj@vubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM(hjwh]hdrm_gem_objects}(hj@whhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj)}(h (struct drm_gpuvm_exec *vm_exec)h]jD)}(hstruct drm_gpuvm_exec *vm_exech](j)}(hj? h]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjxmodnameN classnameNjj)}j]j)}j}jxsbc.drm_gpuvm_exec_unlockasbuh1hhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hvm_exech]hvm_exec}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjxubah}(h]h ]h"]h$]h&]jjuh1j=hjnxhhhjxhMTubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjxhhhjxhMTubah}(h]jexah ](jjeh"]h$]h&]j j )j huh1jhjxhMThjgxhhubj )}(hhh]h)}(h(lock all dma-resv of all assoiciated BOsh]h(lock all dma-resv of all assoiciated BOs}(hj2yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMThj/yhhubah}(h]h ]h"]h$]h&]uh1j hjgxhhhjxhMTubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jJyj( jJyj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjTyh]h Parameters}(hjVyhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRyubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMXhjNyubjM )}(hhh]jR )}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](jX )}(h"``struct drm_gpuvm_exec *vm_exec``h]j^ )}(hjsyh]hstruct drm_gpuvm_exec *vm_exec}(hjuyhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjqyubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMUhjmyubjt )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hjyhhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j^ )}(hjyh]hdrm_gpuvm_exec}(hjyhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjyubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_execuh1hhjyhMUhjyubh wrapper}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMUhjyubah}(h]h ]h"]h$]h&]uh1js hjmyubeh}(h]h ]h"]h$]h&]uh1jQ hjyhMUhjjyubah}(h]h ]h"]h$]h&]uh1jL hjNyubh)}(h**Description**h]j7 )}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjyubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMWhjNyubh)}(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 }(hjyhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j^ )}(hjyh]hdrm_gem_objects}(hjyhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjyubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMVhjyubhC previously acquired through drm_gpuvm_exec_lock() or its variants.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzhMVhjNyubh)}(h **Return**h]j7 )}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjzubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMYhjNyubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hj1zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMZhjNyubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gpuvm_exec_resv_add_fence (C function)c.drm_gpuvm_exec_resv_add_fencehNtauh1jhjHhhhNhNubj)}(hhh](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]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](j)}(hvoidh]hvoid}(hj`zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\zhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMjubj)}(h h]h }(hjozhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\zhhhjnzhMjubj)}(hdrm_gpuvm_exec_resv_add_fenceh]j)}(hdrm_gpuvm_exec_resv_add_fenceh]hdrm_gpuvm_exec_resv_add_fence}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}zubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\zhhhjnzhMjubj>)}(h~(struct drm_gpuvm_exec *vm_exec, struct dma_fence *fence, enum dma_resv_usage private_usage, enum dma_resv_usage extobj_usage)h](jD)}(hstruct drm_gpuvm_exec *vm_exech](j)}(hj? h]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjzmodnameN classnameNjj)}j]j)}j}jzsbc.drm_gpuvm_exec_resv_add_fenceasbuh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hvm_exech]hvm_exec}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubjD)}(hstruct dma_fence *fenceh](j)}(hj? h]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj {ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj {ubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hj-{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*{ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj/{modnameN classnameNjj)}j]jzc.drm_gpuvm_exec_resv_add_fenceasbuh1hhj {ubj)}(h h]h }(hjK{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj {ubj)}(hjh]h*}(hjY{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj {ubj)}(hfenceh]hfence}(hjf{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj {ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubjD)}(h!enum dma_resv_usage private_usageh](j)}(hjh]henum}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{{ubh)}(hhh]j)}(hdma_resv_usageh]hdma_resv_usage}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj{modnameN classnameNjj)}j]jzc.drm_gpuvm_exec_resv_add_fenceasbuh1hhj{{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{{ubj)}(h private_usageh]h private_usage}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubjD)}(h enum dma_resv_usage extobj_usageh](j)}(hjh]henum}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(hdma_resv_usageh]hdma_resv_usage}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj|modnameN classnameNjj)}j]jzc.drm_gpuvm_exec_resv_add_fenceasbuh1hhj{ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h extobj_usageh]h extobj_usage}(hj,|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubeh}(h]h ]h"]h$]h&]jjuh1j=hj\zhhhjnzhMjubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjXzhhhjnzhMjubah}(h]jSzah ](jjeh"]h$]h&]j j )j huh1jhjnzhMjhjUzhhubj )}(hhh]h)}(h#add fence to private and all extobjh]h#add fence to private and all extobj}(hjV|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMjhjS|hhubah}(h]h ]h"]h$]h&]uh1j hjUzhhhjnzhMjubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jn|j( jn|j) j* j+ uh1jhhhjHhNhNubj- )}(hX5**Parameters** ``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper ``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 usage **Description** See drm_gpuvm_resv_add_fence().h](h)}(h**Parameters**h]j7 )}(hjx|h]h Parameters}(hjz|hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjv|ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMnhjr|ubjM )}(hhh](jR )}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](jX )}(h"``struct drm_gpuvm_exec *vm_exec``h]j^ )}(hj|h]hstruct drm_gpuvm_exec *vm_exec}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMkhj|ubjt )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hj|hhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j^ )}(hj|h]hdrm_gpuvm_exec}(hj|hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_execuh1hhj|hMkhj|ubh wrapper}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|hMkhj|ubah}(h]h ]h"]h$]h&]uh1js hj|ubeh}(h]h ]h"]h$]h&]uh1jQ hj|hMkhj|ubjR )}(h)``struct dma_fence *fence`` fence to add h](jX )}(h``struct dma_fence *fence``h]j^ )}(hj|h]hstruct dma_fence *fence}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMlhj|ubjt )}(hhh]h)}(h fence to addh]h fence to add}(hj }hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMlhj }ubah}(h]h ]h"]h$]h&]uh1js hj|ubeh}(h]h ]h"]h$]h&]uh1jQ hj}hMlhj|ubjR )}(h=``enum dma_resv_usage private_usage`` private dma-resv usage h](jX )}(h%``enum dma_resv_usage private_usage``h]j^ )}(hj,}h]h!enum dma_resv_usage private_usage}(hj.}hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj*}ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMmhj&}ubjt )}(hhh]h)}(hprivate dma-resv usageh]hprivate dma-resv usage}(hjE}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA}hMmhjB}ubah}(h]h ]h"]h$]h&]uh1js hj&}ubeh}(h]h ]h"]h$]h&]uh1jQ hjA}hMmhj|ubjR )}(h;``enum dma_resv_usage extobj_usage`` extobj dma-resv usage h](jX )}(h$``enum dma_resv_usage extobj_usage``h]j^ )}(hje}h]h enum dma_resv_usage extobj_usage}(hjg}hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjc}ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMnhj_}ubjt )}(hhh]h)}(hextobj dma-resv usageh]hextobj dma-resv usage}(hj~}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz}hMnhj{}ubah}(h]h ]h"]h$]h&]uh1js hj_}ubeh}(h]h ]h"]h$]h&]uh1jQ hjz}hMnhj|ubeh}(h]h ]h"]h$]h&]uh1jL hjr|ubh)}(h**Description**h]j7 )}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj}ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMphjr|ubh)}(hSee drm_gpuvm_resv_add_fence().h]hSee drm_gpuvm_resv_add_fence().}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMohjr|ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gpuvm_exec_validate (C function)c.drm_gpuvm_exec_validatehNtauh1jhjHhhhNhNubj)}(hhh](j)}(h)}(h (struct drm_gpuvm_exec *vm_exec)h]jD)}(hstruct drm_gpuvm_exec *vm_exech](j)}(hj? h]hstruct}(hj"~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj/~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hhh]j)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hj@~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=~ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjB~modnameN classnameNjj)}j]j)}j}j~sbc.drm_gpuvm_exec_validateasbuh1hhj~ubj)}(h h]h }(hj`~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjh]h*}(hjn~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hvm_exech]hvm_exec}(hj{~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj~ubah}(h]h ]h"]h$]h&]jjuh1j=hj}hhhj}hM}ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}hhhj}hM}ubah}(h]j}ah ](jjeh"]h$]h&]j j )j huh1jhj}hM}hj}hhubj )}(hhh]h)}(h"validate all BOs marked as evictedh]h"validate all BOs marked as evicted}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM}hj~hhubah}(h]h ]h"]h$]h&]uh1j hj}hhhj}hM}ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j~j( j~j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj~ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj~ubjM )}(hhh]jR )}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](jX )}(h"``struct drm_gpuvm_exec *vm_exec``h]j^ )}(hj~h]hstruct drm_gpuvm_exec *vm_exec}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj~ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM~hj~ubjt )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hj~hhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j^ )}(hj h]hdrm_gpuvm_exec}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_execuh1hhj~hM~hj~ubh wrapper}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~hM~hj~ubah}(h]h ]h"]h$]h&]uh1js hj~ubeh}(h]h ]h"]h$]h&]uh1jQ hj~hM~hj~ubah}(h]h ]h"]h$]h&]uh1jL hj~ubh)}(h**Description**h]j7 )}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjBubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj~ubh)}(hSee drm_gpuvm_validate().h]hSee drm_gpuvm_validate().}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj~ubh)}(h **Return**h]j7 )}(hjkh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjiubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj~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&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_bo (C struct)c.drm_gpuvm_bohNtauh1jhjHhhhNhNubj)}(hhh](j)}(h drm_gpuvm_boh]j)}(hstruct drm_gpuvm_boh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h drm_gpuvm_boh]j)}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hUstructure representing a :c:type:`drm_gpuvm` and :c:type:`drm_gem_object` combinationh](hstructure representing a }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j)}j}jsbc.drm_gpuvm_boasbj drm_gpuvmuh1hhjPhKhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj&h]hdrm_gem_object}(hj(hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjj drm_gem_objectuh1hhjPhKhjubh combination}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jWj( jWj) j* j+ uh1jhhhjHhNhNubj- )}(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; struct llist_node bo_defer; } 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. ``list.entry.bo_defer`` List entry to attach to the :c:type:`drm_gpuvms` bo_defer list.h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj_ubh:}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj[ubj )}(hXhstruct 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; struct llist_node bo_defer; } entry; } list; };h]hXhstruct 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; struct llist_node bo_defer; } entry; } list; };}hj|sbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj[ubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj[ubjM )}(hhh](jR )}(h^``vm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. This is a reference counted pointer. h](jX )}(h``vm``h]j^ )}(hjh]hvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(hVThe :c:type:`drm_gpuvm` the **obj** is mapped in. This is a reference counted pointer.h](hThe }(hjŀhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjπh]h drm_gpuvm}(hjрhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj̀ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjŀubh the }(hjŀhhhNhNubj7 )}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjŀubh3 is mapped in. This is a reference counted pointer.}(hjŀhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj€ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hb``obj`` The :c:type:`drm_gem_object` being mapped in **vm**. This is a reference counted pointer. h](jX )}(h``obj``h]j^ )}(hjh]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(hYThe :c:type:`drm_gem_object` being mapped in **vm**. This is a reference counted pointer.h](hThe }(hj4hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj>h]hdrm_gem_object}(hj@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj4ubh being mapped in }(hj4hhhNhNubj7 )}(h**vm**h]hvm}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj4ubh&. This is a reference counted pointer.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hMhj1ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj0hMhjubjR )}(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](jX )}(h ``evicted``h]j^ )}(hjh]hevicted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh$ is evicted; field protected by the }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjсh]hdrm_gem_object}(hjӁhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjρubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjʁhMhjubh’s dma-resv lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjʁhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h>``kref`` The reference count for this :c:type:`drm_gpuvm_bo`. h](jX )}(h``kref``h]j^ )}(hj h]hkref}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(h4The reference count for this :c:type:`drm_gpuvm_bo`.h](hThe reference count for this }(hj#hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hj-h]h drm_gpuvm_bo}(hj/hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj+ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h8``list`` Structure containing all :c:type:`list_heads`. h](jX )}(h``list``h]j^ )}(hjfh]hlist}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjdubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj`ubjt )}(hhh]h)}(h.Structure containing all :c:type:`list_heads`.h](hStructure containing all }(hjhhhNhNubh)}(h:c:type:`list_heads`h]j^ )}(hjh]h list_heads}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j list_headsuh1hhj{hMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1js hj`ubeh}(h]h ]h"]h$]h&]uh1jQ hj{hMhjubjR )}(h``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. h](jX )}(h``list.gpuva``h]j^ )}(hj‚h]h list.gpuva}(hjĂhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh](h)}(h(The list of linked :c:type:`drm_gpuvas`.h](hThe list of linked }(hjۂhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjh]h drm_gpuvas}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjۂubh.}(hjۂhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj؂ubh)}(htIt is safe to access entries from this list as long as the GEM's gpuva lock is held. See also struct drm_gem_object.h]hvIt is safe to access entries from this list as long as the GEM’s gpuva lock is held. See also struct drm_gem_object.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj؂ubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjׂhMhjubjR )}(hO``list.entry`` Structure containing all :c:type:`list_heads` serving as entry. h](jX )}(h``list.entry``h]j^ )}(hj.h]h list.entry}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj,ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj(ubjt )}(hhh]h)}(h?Structure containing all :c:type:`list_heads` serving as entry.h](hStructure containing all }(hjGhhhNhNubh)}(h:c:type:`list_heads`h]j^ )}(hjQh]h list_heads}(hjShhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjOubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j list_headsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjGubh serving as entry.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhjDubah}(h]h ]h"]h$]h&]uh1js hj(ubeh}(h]h ]h"]h$]h&]uh1jQ hjChMhjubjR )}(hU``list.entry.gem`` List entry to attach to the :c:type:`drm_gem_objects` gpuva list. h](jX )}(h``list.entry.gem``h]j^ )}(hjh]hlist.entry.gem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(hAList entry to attach to the :c:type:`drm_gem_objects` gpuva list.h](hList entry to attach to the }(hjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j^ )}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh gpuva list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj˃hMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hR``list.entry.evict`` List entry to attach to the :c:type:`drm_gpuvms` evict list. h](jX )}(h``list.entry.evict``h]j^ )}(hjh]hlist.entry.evict}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(h)}(h(struct drm_gpuvm_bo *vm_bo)h]jD)}(hstruct drm_gpuvm_bo *vm_boh](j)}(hj? h]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjOmodnameN classnameNjj)}j]jc.drm_gpuvm_bo_getasbuh1hhj+ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hvm_boh]hvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj'ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj…hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj…hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj…hMhjhhubj )}(hhh]h)}(h'acquire a struct drm_gpuvm_bo referenceh]h'acquire a struct drm_gpuvm_bo reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj…hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jȆj( jȆj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj҆h]h Parameters}(hjԆhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjІubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj̆ubjM )}(hhh]jR )}(hV``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to acquire the reference of h](jX )}(h``struct drm_gpuvm_bo *vm_bo``h]j^ )}(hjh]hstruct drm_gpuvm_bo *vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(h6the :c:type:`drm_gpuvm_bo` to acquire the reference ofh](hthe }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMhj ubh to acquire the reference of}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hj̆ubh)}(h**Description**h]j7 )}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjMubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj̆ubh)}(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 }(hjehhhNhNubj7 )}(h **vm_bo**h]hvm_bo}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjeubhT. It is illegal to call this without already holding a reference. No locks required.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj̆ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj̆ubh)}(h*the :c:type:`struct vm_bo ` pointerh](hthe }(hjhhhNhNubh)}(h:c:type:`struct vm_bo `h]j^ )}(hjh]h struct vm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j vm_bouh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh pointer}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjŇhMhj̆ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_gpuvm_bo_gem_evict (C function)c.drm_gpuvm_bo_gem_evicthNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gpuvm_bo_gem_evicth]j)}(hdrm_gpuvm_bo_gem_evicth]hdrm_gpuvm_bo_gem_evict}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h((struct drm_gem_object *obj, bool evict)h](jD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjMmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_bo_gem_evictasbuh1hhj)ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubjD)}(h bool evicth](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hevicth]hevict}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj%ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jgc.drm_gpuvm_bo_gem_evictasbj drm_gpuvm_bouh1hhjPhKhjubh’s in the list to/from the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvms`h]j^ )}(hjh]h drm_gpuvms}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmsuh1hhjPhKhjubh evicted list}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jGj( jGj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjOubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjKubjM )}(hhh](jR )}(h<``struct drm_gem_object *obj`` the :c:type:`drm_gem_object` h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjph]hstruct drm_gem_object *obj}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjgubjR )}(h4``bool evict`` indicates whether **obj** is evicted h](jX )}(h``bool evict``h]j^ )}(hjȉh]h bool evict}(hjʉhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjƉubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj‰ubjt )}(hhh]h)}(h$indicates whether **obj** is evictedh](hindicates whether }(hjhhhNhNubj7 )}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh is evicted}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj݉hMhjމubah}(h]h ]h"]h$]h&]uh1js hj‰ubeh}(h]h ]h"]h$]h&]uh1jQ hj݉hMhjgubeh}(h]h ]h"]h$]h&]uh1jL hjKubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM hjKubh)}(hSee drm_gpuvm_bo_evict().h]hSee drm_gpuvm_bo_evict().}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gpuvm_bo_for_each_va (C macro)c.drm_gpuvm_bo_for_each_vahNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_bo_for_each_vah]j)}(hdrm_gpuvm_bo_for_each_vah]j)}(hdrm_gpuvm_bo_for_each_vah]j)}(hjTh]hdrm_gpuvm_bo_for_each_va}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjRhhhjqhMubah}(h]jMah ](jjeh"]h$]h&]j j )j huh1jhjqhMhjOhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjOhhhjqhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubh)}(h,``drm_gpuvm_bo_for_each_va (va__, vm_bo__)``h]j^ )}(hjh]h(drm_gpuvm_bo_for_each_va (va__, vm_bo__)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj )}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubeh}(h]h ]h"]h$]h&]uh1hhjъhMhjubah}(h]h ]h"]h$]h&]uh1jhjъhMhjHhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjފubjM )}(hhh](jR )}(hK``va__`` :c:type:`drm_gpuva` structure to assign to in each iteration step h](jX )}(h``va__``h]j^ )}(hjh]hva__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(hA:c:type:`drm_gpuva` structure to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j^ )}(hj"h]h drm_gpuva}(hj$hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjhMhjubh. structure to assign to in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h[``vm_bo__`` the :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated with h](jX )}(h ``vm_bo__``h]j^ )}(hj[h]hvm_bo__}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjUubjt )}(hhh]h)}(hNthe :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated withh](hthe }(hjthhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hj~h]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjphMhjtubh the }(hjthhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjphMhjtubh to walk are associated with}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1js hjUubeh}(h]h ]h"]h$]h&]uh1jQ hjphMhjubeh}(h]h ]h"]h$]h&]uh1jL hjފubh)}(h**Description**h]j7 )}(hj܋h]h Description}(hjދhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjڋubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjފubh)}(hgThis iterator walks over all :c:type:`drm_gpuva` structures associated with the :c:type:`drm_gpuvm_bo`.h](hThis iterator walks over all }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh structures associated with the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hj h]h drm_gpuvm_bo}(hj"hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjފubh)}(h*The caller must hold the GEM's gpuva lock.h]h,The caller must hold the GEM’s gpuva lock.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjފubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(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_safehNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_bo_for_each_va_safeh]j)}(hdrm_gpuvm_bo_for_each_va_safeh]j)}(hdrm_gpuvm_bo_for_each_va_safeh]j)}(hjph]hdrm_gpuvm_bo_for_each_va_safe}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM&ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjnhhhjhM&ubah}(h]jiah ](jjeh"]h$]h&]j j )j huh1jhjhM&hjkhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjkhhhjhM&ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubh)}(h9``drm_gpuvm_bo_for_each_va_safe (va__, next__, vm_bo__)``h]j^ )}(hjh]h5drm_gpuvm_bo_for_each_va_safe (va__, next__, vm_bo__)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM(hjHhhubj )}(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ƌhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjЌh]h drm_gpuva}(hjҌhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjΌubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM&hjƌubeh}(h]h ]h"]h$]h&]uh1hhjhM&hjŒubah}(h]h ]h"]h$]h&]uh1jhjhM&hjHhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM*hjubjM )}(hhh](jR )}(hK``va__`` :c:type:`drm_gpuva` structure to assign to in each iteration step h](jX )}(h``va__``h]j^ )}(hjh]hva__}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM(hjubjt )}(hhh]h)}(hA:c:type:`drm_gpuva` structure to assign to in each iteration steph](h)}(h:c:type:`drm_gpuva`h]j^ )}(hj>h]h drm_gpuva}(hj@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj4hM(hj8ubh. structure to assign to in each iteration step}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hM(hj5ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj4hM(hjubjR )}(hE``next__`` :c:type:`next` :c:type:`drm_gpuva` to store the next step h](jX )}(h ``next__``h]j^ )}(hjwh]hnext__}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjuubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM)hjqubjt )}(hhh]h)}(h9:c:type:`next` :c:type:`drm_gpuva` to store the next steph](h)}(h:c:type:`next`h]j^ )}(hjh]hnext}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j nextuh1hhjhM)hjubh }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjhM)hjubh to store the next step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM)hjubah}(h]h ]h"]h$]h&]uh1js hjqubeh}(h]h ]h"]h$]h&]uh1jQ hjhM)hjubjR )}(h[``vm_bo__`` the :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated with h](jX )}(h ``vm_bo__``h]j^ )}(hjh]hvm_bo__}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM*hjubjt )}(hhh]h)}(hNthe :c:type:`drm_gpuvm_bo` the :c:type:`drm_gpuva` to walk are associated withh](hthe }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhM*hj ubh the }(hj hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj8h]h drm_gpuva}(hj:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjhM*hj ubh to walk are associated with}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM*hjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjqubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM,hjubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM+hjubh structures associated with the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhM+hjubhb. It is implemented with list_for_each_entry_safe(), hence it is save against removal of elements.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM+hjubh)}(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:522: ./include/drm/drm_gpuvm.hhM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_op_type (C enum)c.drm_gpuva_op_typehNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_op_typeh]j)}(henum drm_gpuva_op_typeh](j)}(hjh]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM4ubj)}(hdrm_gpuva_op_typeh]j)}(hjh]hdrm_gpuva_op_type}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhM4ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM4ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM4hjhhubj )}(hhh]h)}(hGPU VA operation typeh]hGPU VA operation type}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM6hjLhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM4ubeh}(h]h ](j! enumeh"]h$]h&]j& j! j' jgj( jgj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjqh]h Constants}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjoubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM:hjkubjM )}(hhh](jR )}(h%``DRM_GPUVA_OP_MAP`` the map op type h](jX )}(h``DRM_GPUVA_OP_MAP``h]j^ )}(hjh]hDRM_GPUVA_OP_MAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM=hjubjt )}(hhh]h)}(hthe map op typeh]hthe map op type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM=hjubjR )}(h)``DRM_GPUVA_OP_REMAP`` the remap op type h](jX )}(h``DRM_GPUVA_OP_REMAP``h]j^ )}(hjɏh]hDRM_GPUVA_OP_REMAP}(hjˏhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjǏubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM@hjÏubjt )}(hhh]h)}(hthe remap op typeh]hthe remap op type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjޏhM@hjߏubah}(h]h ]h"]h$]h&]uh1js hjÏubeh}(h]h ]h"]h$]h&]uh1jQ hjޏhM@hjubjR )}(h)``DRM_GPUVA_OP_UNMAP`` the unmap op type h](jX )}(h``DRM_GPUVA_OP_UNMAP``h]j^ )}(hjh]hDRM_GPUVA_OP_UNMAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMChjubjt )}(hhh]h)}(hthe unmap op typeh]hthe unmap op type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMChjubjR )}(h/``DRM_GPUVA_OP_PREFETCH`` the prefetch op type h](jX )}(h``DRM_GPUVA_OP_PREFETCH``h]j^ )}(hj;h]hDRM_GPUVA_OP_PREFETCH}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMFhj5ubjt )}(hhh]h)}(hthe prefetch op typeh]hthe prefetch op type}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMFhjQubah}(h]h ]h"]h$]h&]uh1js hj5ubeh}(h]h ]h"]h$]h&]uh1jQ hjPhMFhjubjR )}(h2``DRM_GPUVA_OP_DRIVER`` the driver defined op typeh](jX )}(h``DRM_GPUVA_OP_DRIVER``h]j^ )}(hjth]hDRM_GPUVA_OP_DRIVER}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMHhjnubjt )}(hhh]h)}(hthe driver defined op typeh]hthe driver defined op type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMIhjubah}(h]h ]h"]h$]h&]uh1js hjnubeh}(h]h ]h"]h$]h&]uh1jQ hjhMHhjubeh}(h]h ]h"]h$]h&]uh1jL hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMKhjHhhubh)}(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^ )}(hjאh]h drm_gpuvm}(hjِhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjՐubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM7hj͐ubh.}(hj͐hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM7hjHhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_op_map (C struct)c.drm_gpuva_op_maphNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_op_maph]j)}(hstruct drm_gpuva_op_maph](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM<ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj%hM<ubj)}(hdrm_gpuva_op_maph]j)}(hjh]hdrm_gpuva_op_map}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj%hM<ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj%hM<ubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj%hM<hj hhubj )}(hhh]h)}(hGPU VA map operationh]hGPU VA map operation}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMVhjWhhubah}(h]h ]h"]h$]h&]uh1j hj hhhj%hM<ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jrj( jrj) j* j+ uh1jhhhjHhNhNubj- )}(hXA**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 its 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](j7 )}(h**Definition**h]h Definition}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjzubh:}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMZhjvubj )}(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; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM\hjvubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMghjvubjM )}(hhh](jR )}(hA``va`` structure containing address and range of a map operation h](jX )}(h``va``h]j^ )}(hjǑh]hva}(hjɑhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjőubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM_hjubjt )}(hhh]h)}(h9structure containing address and range of a map operationh]h9structure containing address and range of a map operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM^hjݑubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjܑhM_hjubjR )}(h0``va.addr`` the base address of the new mapping h](jX )}(h ``va.addr``h]j^ )}(hjh]hva.addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMchjubjt )}(hhh]h)}(h#the base address of the new mappingh]h#the base address of the new mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMchjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMchjubjR )}(h*``va.range`` the range of the new mapping h](jX )}(h ``va.range``h]j^ )}(hj:h]hva.range}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhhj4ubjt )}(hhh]h)}(hthe range of the new mappingh]hthe range of the new mapping}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhhjPubah}(h]h ]h"]h$]h&]uh1js hj4ubeh}(h]h ]h"]h$]h&]uh1jQ hjOhMhhjubjR )}(hI``gem`` structure containing the :c:type:`drm_gem_object` and its offset h](jX )}(h``gem``h]j^ )}(hjsh]hgem}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMnhjmubjt )}(hhh]h)}(h@structure containing the :c:type:`drm_gem_object` and its offseth](hstructure containing the }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhMnhjubh and its offset}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjhMnhjubjR )}(h>``gem.offset`` the offset within the :c:type:`drm_gem_object` h](jX )}(h``gem.offset``h]j^ )}(hjϒh]h gem.offset}(hjђhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj͒ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMrhjɒubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhMrhjubeh}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1js hjɒubeh}(h]h ]h"]h$]h&]uh1jQ hjhMrhjubjR )}(h/``gem.obj`` the :c:type:`drm_gem_object` to maph](jX )}(h ``gem.obj``h]j^ )}(hj'h]hgem.obj}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj%ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMvhj!ubjt )}(hhh]h)}(h#the :c:type:`drm_gem_object` to maph](hthe }(hj@hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjJh]hdrm_gem_object}(hjLhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMwhj@ubh to map}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjghMwhj=ubah}(h]h ]h"]h$]h&]uh1js hj!ubeh}(h]h ]h"]h$]h&]uh1jQ hj<hMvhjubeh}(h]h ]h"]h$]h&]uh1jL hjvubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMzhjHhhubh)}(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:522: ./include/drm/drm_gpuvm.hhMWhjHhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_op_unmap (C struct)c.drm_gpuva_op_unmaphNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_op_unmaph]j)}(hstruct drm_gpuva_op_unmaph](j)}(hj? h]hstruct}(hj˓hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǓhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM]ubj)}(h h]h }(hjٓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǓhhhjؓhM]ubj)}(hdrm_gpuva_op_unmaph]j)}(hjœh]hdrm_gpuva_op_unmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjǓhhhjؓhM]ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjÓhhhjؓhM]ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjؓhM]hjhhubj )}(hhh]h)}(hGPU VA unmap operationh]hGPU VA unmap operation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM}hj hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjؓhM]ubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j%j( j%j) j* j+ uh1jhhhjHhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj-ubh:}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj)ubj )}(hGstruct drm_gpuva_op_unmap { struct drm_gpuva *va; bool keep; };h]hGstruct drm_gpuva_op_unmap { struct drm_gpuva *va; bool keep; };}hjJsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj)ubh)}(h **Members**h]j7 )}(hj[h]hMembers}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjYubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj)ubjM )}(hhh](jR )}(h(``va`` the :c:type:`drm_gpuva` to unmap h](jX )}(h``va``h]j^ )}(hjzh]hva}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjxubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjtubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjhMhjubh to unmap}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjtubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjqubjR )}(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](jX )}(h``keep``h]j^ )}(hj֔h]hkeep}(hjؔhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjԔubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjДubjt )}(hhh](h)}(hfIndicates whether this :c:type:`drm_gpuva` is physically contiguous with the original mapping request.h](hIndicates whether this }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh< is physically contiguous with the original mapping request.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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 }(hj!hhhNhNubh)}(h:c:type:`keep`h]j^ )}(hj+h]hkeep}(hj-hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j keepuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj!ubhB is set, drivers may keep the actual page table mappings for this }(hj!hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjOh]h drm_gpuva}(hjQhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjHhMhj!ubh<, adding the missing page table entries only and update the }(hj!hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjrh]h drm_gpuvm}(hjthhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjHhMhj!ubh accordingly.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhMhjubeh}(h]h ]h"]h$]h&]uh1js hjДubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjqubeh}(h]h ]h"]h$]h&]uh1jL hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(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:522: ./include/drm/drm_gpuvm.hhM~hjHhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_op_remap (C struct)c.drm_gpuva_op_remaphNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_op_remaph]j)}(hstruct drm_gpuva_op_remaph](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gpuva_op_remaph]j)}(hjh]hdrm_gpuva_op_remap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hGPU VA remap operationh]hGPU VA remap operation}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jLj( jLj) j* j+ uh1jhhhjHhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjTubh:}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjPubj )}(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; };}hjqsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjPubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjPubjM )}(hhh](jR )}(h/``prev`` the preceding part of a split mapping h](jX )}(h``prev``h]j^ )}(hjh]hprev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h0``next`` the subsequent part of a split mapping h](jX )}(h``next``h]j^ )}(hjږh]hnext}(hjܖhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjؖubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjԖubjt )}(hhh]h)}(h&the subsequent part of a split mappingh]h&the subsequent part of a split mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjԖubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h?``unmap`` the unmap operation for the original existing mappingh](jX )}(h ``unmap``h]j^ )}(hjh]hunmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj ubjt )}(hhh]h)}(h5the unmap operation for the original existing mappingh]h5the unmap operation for the original existing mapping}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj)ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj(hMhjubeh}(h]h ]h"]h$]h&]uh1jL hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjTubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(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:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(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 }(hjhhhNhNubj7 )}(h **unmap**h]hunmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubhA operation takes care of removing the original existing mapping. }(hjhhhNhNubj7 )}(h**prev**h]hprev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh& is used to remap the preceding part, }(hjhhhNhNubj7 )}(h**next**h]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh the subsequent part.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(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ϗhhhNhNubj7 )}(h**prev**h]hprev}(hjחhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjϗubh or }(hjϗhhhNhNubj7 )}(h**next**h]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjϗubh is NULL.}(hjϗhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj h]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubhL structure which typically is embedded in larger driver specific structures.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hMhjHhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gpuva_op_prefetch (C struct)c.drm_gpuva_op_prefetchhNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_op_prefetchh]j)}(hstruct drm_gpuva_op_prefetchh](j)}(hj? h]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjZhMubj)}(hdrm_gpuva_op_prefetchh]j)}(hjGh]hdrm_gpuva_op_prefetch}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjZhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjEhhhjZhMubah}(h]j@ah ](jjeh"]h$]h&]j j )j huh1jhjZhMhjBhhubj )}(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:522: ./include/drm/drm_gpuvm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjBhhhjZhMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(h**Definition**:: struct drm_gpuva_op_prefetch { struct drm_gpuva *va; }; **Members** ``va`` the :c:type:`drm_gpuva` to prefetchh](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubj )}(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&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh)}(h **Members**h]j7 )}(hjݘh]hMembers}(hjߘhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjۘubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjM )}(hhh]jR )}(h*``va`` the :c:type:`drm_gpuva` to prefetchh](jX )}(h``va``h]j^ )}(hjh]hva}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(h#the :c:type:`drm_gpuva` to prefetchh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hj!hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh to prefetch}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj`ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_op (C struct)c.drm_gpuva_ophNtauh1jhjHhhhNhNubj)}(hhh](j)}(h drm_gpuva_oph]j)}(hstruct drm_gpuva_oph](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h drm_gpuva_oph]j)}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hGPU VA operationh]hGPU VA operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjߙhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubj )}(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&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh)}(h **Members**h]j7 )}(hj0h]hMembers}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj.ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjM )}(hhh](jR )}(hn``entry`` The :c:type:`list_head` used to distribute instances of this struct within :c:type:`drm_gpuva_ops`. h](jX )}(h ``entry``h]j^ )}(hjOh]hentry}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjIubjt )}(hhh]h)}(hcThe :c:type:`list_head` used to distribute instances of this struct within :c:type:`drm_gpuva_ops`.h](hThe }(hjhhhhNhNubh)}(h:c:type:`list_head`h]j^ )}(hjrh]h list_head}(hjthhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjhubh4 used to distribute instances of this struct within }(hjhhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhjhMhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjeubah}(h]h ]h"]h$]h&]uh1js hjIubeh}(h]h ]h"]h$]h&]uh1jQ hjdhMhjFubjR )}(h!``op`` the type of the operation h](jX )}(h``op``h]j^ )}(hjϚh]hop}(hjњhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj͚ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjɚubjt )}(hhh]h)}(hthe type of the operationh]hthe type of the operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjɚubeh}(h]h ]>h"]h$]h&]uh1jQ hjhMhjFubjR )}(h``{unnamed_union}`` anonymous h](jX )}(h``{unnamed_union}``h]j^ )}(hjh]h{unnamed_union}}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhKhjubjt )}(hhh]h)}(h anonymoush]h anonymous}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjFubjR )}(h``map`` the map operation h](jX )}(h``map``h]j^ )}(hjAh]hmap}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj;ubjt )}(hhh]h)}(hthe map operationh]hthe map operation}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1js hj;ubeh}(h]h ]h"]h$]h&]uh1jQ hjVhMhjFubjR )}(h``remap`` the remap operation h](jX )}(h ``remap``h]j^ )}(hjzh]hremap}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjxubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjtubjt )}(hhh]h)}(hthe remap operationh]hthe remap operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjtubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjFubjR )}(h``unmap`` the unmap operation h](jX )}(h ``unmap``h]j^ )}(hjh]hunmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(hthe unmap operationh]hthe unmap operation}(hj̛hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjțhMhjɛubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjțhMhjFubjR )}(h#``prefetch`` the prefetch operationh](jX )}(h ``prefetch``h]j^ )}(hjh]hprefetch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(hthe prefetch operationh]hthe prefetch operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjFubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj-ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(h5This structure represents a single generic operation.h]h5This structure represents a single generic operation.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(h:The particular type of the operation is defined by **op**.h](h3The particular type of the operation is defined by }(hjThhhNhNubj7 )}(h**op**h]hop}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_ops (C struct)c.drm_gpuva_opshNtauh1jhjHhhhNhNubj)}(hhh](j)}(h drm_gpuva_opsh]j)}(hstruct drm_gpuva_opsh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h drm_gpuva_opsh]j)}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h&wraps a list of :c:type:`drm_gpuva_op`h](hwraps a list of }(hjМhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjڜh]h drm_gpuva_op}(hjܜhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj؜ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j)}j}jsbc.drm_gpuva_opsasbj drm_gpuva_opuh1hhjPhKhjМubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj͜hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(h}**Definition**:: struct drm_gpuva_ops { struct list_head list; }; **Members** ``list`` the :c:type:`list_head`h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubj )}(h4struct drm_gpuva_ops { struct list_head list; };h]h4struct drm_gpuva_ops { struct list_head list; };}hj3sbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh)}(h **Members**h]j7 )}(hjDh]hMembers}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjBubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjM )}(hhh]jR )}(h ``list`` the :c:type:`list_head`h](jX )}(h``list``h]j^ )}(hjch]hlist}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjaubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj]ubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj|ubeh}(h]h ]h"]h$]h&]uh1hhjhMhjyubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hjxhMhjZubah}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_for_each_op (C macro)c.drm_gpuva_for_each_ophNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_for_each_oph]j)}(hdrm_gpuva_for_each_oph]j)}(hdrm_gpuva_for_each_oph]j)}(hj֝h]hdrm_gpuva_for_each_op}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܝubah}(h]h ](jjeh"]h$]h&]jjuh1jhj؝hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjԝhhhjhMubah}(h]jϝah ](jjeh"]h$]h&]j j )j huh1jhjhMhjѝhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjѝhhhjhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhjHhNhNubh)}(h#``drm_gpuva_for_each_op (op, ops)``h]j^ )}(hjh]hdrm_gpuva_for_each_op (op, ops)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj )}(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 }(hj,hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hj6h]h drm_gpuva_ops}(hj8hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj4ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj,ubeh}(h]h ]h"]h$]h&]uh1hhjShMhj(ubah}(h]h ]h"]h$]h&]uh1jhjShMhjHhhubj- )}(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]j7 )}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjdubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj`ubjM )}(hhh](jR )}(h?``op`` :c:type:`drm_gpuva_op` to assign in each iteration step h](jX )}(h``op``h]j^ )}(hjh]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhjhMhjubh! to assign in each iteration step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj|ubjR )}(h(``ops`` :c:type:`drm_gpuva_ops` to walk h](jX )}(h``ops``h]j^ )}(hjݞh]hops}(hjߞhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj۞ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjמubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhjhMhjubh to walk}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjמubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj|ubeh}(h]h ]h"]h$]h&]uh1jL hj`ubh)}(h**Description**h]j7 )}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj5ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj`ubh)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gpuva_for_each_op_safe (C macro)c.drm_gpuva_for_each_op_safehNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_for_each_op_safeh]j)}(hdrm_gpuva_for_each_op_safeh]j)}(hdrm_gpuva_for_each_op_safeh]j)}(hjvh]hdrm_gpuva_for_each_op_safe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhM ubah}(h]joah ](jjeh"]h$]h&]j j )j huh1jhjhM hjqhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjqhhhjhM ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubh)}(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&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM hjHhhubj )}(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^ )}(hj֟h]h drm_gpuva_ops}(hj؟hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjԟubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM hj̟ubeh}(h]h ]h"]h$]h&]uh1hhjhM hjȟubah}(h]h ]h"]h$]h&]uh1jhjhM hjHhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjM )}(hhh](jR )}(h?``op`` :c:type:`drm_gpuva_op` to assign in each iteration step h](jX )}(h``op``h]j^ )}(hj%h]hop}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM hjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjBubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhj:hM hj>ubh! to assign in each iteration step}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hM hj;ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj:hM hjubjR )}(hF``next`` :c:type:`next` :c:type:`drm_gpuva_op` to store the next step h](jX )}(h``next``h]j^ )}(hj}h]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj{ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM hjwubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j nextuh1hhjhM hjubh }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhjhM hjubh to store the next step}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjwubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubjR )}(h(``ops`` :c:type:`drm_gpuva_ops` to walk h](jX )}(h``ops``h]j^ )}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM hjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhj hM hjubh to walk}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hM hjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(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_reversehNtauh1jhjHhhhNhNubj)}(hhh](j)}(h"drm_gpuva_for_each_op_from_reverseh]j)}(h"drm_gpuva_for_each_op_from_reverseh]j)}(h"drm_gpuva_for_each_op_from_reverseh]j)}(hjh]h"drm_gpuva_for_each_op_from_reverse}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jǡj( jǡj) j* j+ uh1jhhhjHhNhNubh)}(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&]uh1j] hjˡubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubj )}(h'iterate backwards from the given point h]h)}(h&iterate backwards from the given pointh]h&iterate backwards from the given point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjhMhjHhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjM )}(hhh](jR )}(h?``op`` :c:type:`drm_gpuva_op` to assign in each iteration step h](jX )}(h``op``h]j^ )}(hj!h]hop}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(h7:c:type:`drm_gpuva_op` to assign in each iteration steph](h)}(h:c:type:`drm_gpuva_op`h]j^ )}(hj@h]h drm_gpuva_op}(hjBhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhj6hMhj:ubh! to assign in each iteration step}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj6hMhjubjR )}(h(``ops`` :c:type:`drm_gpuva_ops` to walk h](jX )}(h``ops``h]j^ )}(hjyh]hops}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjsubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhjhMhjubh to walk}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjӢh]h Description}(hjբhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjѢubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gpuva_for_each_op_reverse (C macro)c.drm_gpuva_for_each_op_reversehNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_for_each_op_reverseh]j)}(hdrm_gpuva_for_each_op_reverseh]j)}(hdrm_gpuva_for_each_op_reverseh]j)}(hjh]hdrm_gpuva_for_each_op_reverse}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM!ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj/hM!ubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj/hM!hj hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj hhhj/hM!ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jHj( jHj) j* j+ uh1jhhhjHhNhNubh)}(h+``drm_gpuva_for_each_op_reverse (op, ops)``h]j^ )}(hjNh]h'drm_gpuva_for_each_op_reverse (op, ops)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM#hjHhhubj )}(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 }(hjhhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjrh]h drm_gpuva_ops}(hjthhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM!hjhubh in reverse}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM!hjdubah}(h]h ]h"]h$]h&]uh1jhjhM!hjHhhubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM%hjubjM )}(hhh](jR )}(h?``op`` :c:type:`drm_gpuva_op` to assign in each iteration step h](jX )}(h``op``h]j^ )}(hjţh]hop}(hjǣhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjãubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM"hjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhjڣhM"hjޣubh! to assign in each iteration step}(hjޣhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjڣhM"hjۣubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjڣhM"hjubjR )}(h(``ops`` :c:type:`drm_gpuva_ops` to walk h](jX )}(h``ops``h]j^ )}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM#hjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhj2hM#hj6ubh to walk}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hM#hj3ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj2hM#hjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjuubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM%hjubh)}(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:522: ./include/drm/drm_gpuvm.hhM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_first_op (C macro)c.drm_gpuva_first_ophNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_first_oph]j)}(hdrm_gpuva_first_oph]j)}(hdrm_gpuva_first_oph]j)}(hjh]hdrm_gpuva_first_op}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM+ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjӤhM+ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjӤhM+hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjӤhM+ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubh)}(h``drm_gpuva_first_op (ops)``h]j^ )}(hjh]hdrm_gpuva_first_op (ops)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM-hjHhhubj )}(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 }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM+hj ubh from }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hj:h]h drm_gpuva_ops}(hj<hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhj3hM+hj ubeh}(h]h ]h"]h$]h&]uh1hhj3hM+hjubah}(h]h ]h"]h$]h&]uh1jhj3hM+hjHhhubj- )}(ha**Parameters** ``ops`` the :c:type:`drm_gpuva_ops` to get the fist :c:type:`drm_gpuva_op` fromh](h)}(h**Parameters**h]j7 )}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjgubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM/hjcubjM )}(hhh]jR )}(hO``ops`` the :c:type:`drm_gpuva_ops` to get the fist :c:type:`drm_gpuva_op` fromh](jX )}(h``ops``h]j^ )}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM1hjubjt )}(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^ )}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./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}(hjѥhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjͥubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhjȥhM,hjubh from}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjȥhM,hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM1hjubah}(h]h ]h"]h$]h&]uh1jL hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_last_op (C macro)c.drm_gpuva_last_ophNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_last_oph]j)}(hdrm_gpuva_last_oph]j)}(hdrm_gpuva_last_oph]j)}(hj"h]hdrm_gpuva_last_op}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM2ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj?hM2ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj?hM2hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhj?hM2ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jXj( jXj) j* j+ uh1jhhhjHhNhNubh)}(h``drm_gpuva_last_op (ops)``h]j^ )}(hj^h]hdrm_gpuva_last_op (ops)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj\ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM4hjHhhubj )}(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 }(hjxhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM2hjxubh from }(hjxhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhjhM2hjxubeh}(h]h ]h"]h$]h&]uh1hhjhM2hjtubah}(h]h ]h"]h$]h&]uh1jhjhM2hjHhhubj- )}(ha**Parameters** ``ops`` the :c:type:`drm_gpuva_ops` to get the last :c:type:`drm_gpuva_op` fromh](h)}(h**Parameters**h]j7 )}(hjզh]h Parameters}(hjצhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjӦubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM6hjϦubjM )}(hhh]jR )}(hO``ops`` the :c:type:`drm_gpuva_ops` to get the last :c:type:`drm_gpuva_op` fromh](jX )}(h``ops``h]j^ )}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM8hjubjt )}(hhh]h)}(hGthe :c:type:`drm_gpuva_ops` to get the last :c:type:`drm_gpuva_op` fromh](hthe }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjh]h drm_gpuva_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM3hj ubh to get the last }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hj;h]h drm_gpuva_op}(hj=hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhj4hM3hj ubh from}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hM3hj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hM8hjubah}(h]h ]h"]h$]h&]uh1jL hjϦubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_prev_op (C macro)c.drm_gpuva_prev_ophNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_prev_oph]j)}(hdrm_gpuva_prev_oph]j)}(hdrm_gpuva_prev_oph]j)}(hjh]hdrm_gpuva_prev_op}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM9ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM9ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM9hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhM9ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jħj( jħj) j* j+ uh1jhhhjHhNhNubh)}(h``drm_gpuva_prev_op (op)``h]j^ )}(hjʧh]hdrm_gpuva_prev_op (op)}(hj̧hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjȧubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM;hjHhhubj )}(h,previous :c:type:`drm_gpuva_op` in the list h]h)}(h+previous :c:type:`drm_gpuva_op` in the listh](h previous }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM9hjubh in the list}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM9hjubah}(h]h ]h"]h$]h&]uh1jhj hM9hjHhhubj- )}(h;**Parameters** ``op`` the current :c:type:`drm_gpuva_op`h](h)}(h**Parameters**h]j7 )}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM=hjubjM )}(hhh]jR )}(h)``op`` the current :c:type:`drm_gpuva_op`h](jX )}(h``op``h]j^ )}(hjAh]hop}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM?hj;ubjt )}(hhh]h)}(h"the current :c:type:`drm_gpuva_op`h](h the current }(hjZhhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjdh]h drm_gpuva_op}(hjfhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM:hjZubeh}(h]h ]h"]h$]h&]uh1hhjhM:hjWubah}(h]h ]h"]h$]h&]uh1js hj;ubeh}(h]h ]h"]h$]h&]uh1jQ hjVhM?hj8ubah}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_next_op (C macro)c.drm_gpuva_next_ophNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuva_next_oph]j)}(hdrm_gpuva_next_oph]j)}(hdrm_gpuva_next_oph]j)}(hjh]hdrm_gpuva_next_op}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM?ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjѨhM?ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjѨhM?hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjѨhM?ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubh)}(h``drm_gpuva_next_op (op)``h]j^ )}(hjh]hdrm_gpuva_next_op (op)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMAhjHhhubj )}(h(next :c:type:`drm_gpuva_op` in the list h]h)}(h'next :c:type:`drm_gpuva_op` in the listh](hnext }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hjh]h drm_gpuva_op}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM?hj ubh in the list}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hM?hjubah}(h]h ]h"]h$]h&]uh1jhj1hM?hjHhhubj- )}(h;**Parameters** ``op`` the current :c:type:`drm_gpuva_op`h](h)}(h**Parameters**h]j7 )}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjFubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMChjBubjM )}(hhh]jR )}(h)``op`` the current :c:type:`drm_gpuva_op`h](jX )}(h``op``h]j^ )}(hjgh]hop}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjeubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMEhjaubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM@hjubeh}(h]h ]h"]h$]h&]uh1hhjhM@hj}ubah}(h]h ]h"]h$]h&]uh1js hjaubeh}(h]h ]h"]h$]h&]uh1jQ hj|hMEhj^ubah}(h]h ]h"]h$]h&]uh1jL hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_map_req (C struct)c.drm_gpuvm_map_reqhNtauh1jhjHhhhNhNubj)}(hhh](j)}(hdrm_gpuvm_map_reqh]j)}(hstruct drm_gpuvm_map_reqh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܩhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܩhhhjhMEubj)}(hdrm_gpuvm_map_reqh]j)}(hjکh]hdrm_gpuvm_map_req}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjܩhhhjhMEubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjةhhhjhMEubah}(h]jөah ](jjeh"]h$]h&]j j )j huh1jhjhMEhjթhhubj )}(hhh]h)}(h3arguments passed to drm_gpuvm_sm_map[_ops_create]()h]h3arguments passed to drm_gpuvm_sm_map[_ops_create]()}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMEhjhhubah}(h]h ]h"]h$]h&]uh1j hjթhhhjhMEubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j:j( j:j) j* j+ uh1jhhhjHhNhNubj- )}(h**Definition**:: struct drm_gpuvm_map_req { struct drm_gpuva_op_map map; }; **Members** ``map`` struct drm_gpuva_op_maph](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjBubh:}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMIhj>ubj )}(h>struct drm_gpuvm_map_req { struct drm_gpuva_op_map map; };h]h>struct drm_gpuvm_map_req { struct drm_gpuva_op_map map; };}hj_sbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMKhj>ubh)}(h **Members**h]j7 )}(hjph]hMembers}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMOhj>ubjM )}(hhh]jR )}(h``map`` struct drm_gpuva_op_maph](jX )}(h``map``h]j^ )}(hjh]hmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMIhjubjt )}(hhh]h)}(hstruct drm_gpuva_op_maph]hstruct drm_gpuva_op_map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMJhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMIhjubah}(h]h ]h"]h$]h&]uh1jL hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_ops (C struct)c.drm_gpuvm_opshNtauh1jhjHhhhNhNubj)}(hhh](j)}(h drm_gpuvm_opsh]j)}(hstruct drm_gpuvm_opsh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMPubj)}(h drm_gpuvm_opsh]j)}(hjh]h drm_gpuvm_ops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMPubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMPubah}(h]jܪah ](jjeh"]h$]h&]j j )j huh1jhjhMPhjުhhubj )}(hhh]h)}(hcallbacks for split/merge stepsh]hcallbacks for split/merge steps}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMmhj(hhubah}(h]h ]h"]h$]h&]uh1j hjުhhhjhMPubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jCj( jCj) j* j+ uh1jhhhjHhNhNubj- )}(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 existing mapping This callback is called when existing mapping needs to be unmapped. This is the case when either a newly requested mapping encloses an existing mapping or an unmap of an existing 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](j7 )}(h**Definition**h]h Definition}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjKubh:}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMqhjGubj )}(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); };}hjhsbah}(h]h ]h"]h$]h&]jjuh1j hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMshjGubh)}(h **Members**h]j7 )}(hjyh]hMembers}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjwubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjGubjM )}(hhh](jR )}(hi``vm_free`` called when the last reference of a struct drm_gpuvm is dropped This callback is mandatory. h](jX )}(h ``vm_free``h]j^ )}(hjh]hvm_free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMyhjubjt )}(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:522: ./include/drm/drm_gpuvm.hhMvhjubh)}(hThis callback is mandatory.h]hThis callback is mandatory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMyhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMyhjubjR )}(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](jX )}(h ``op_alloc``h]j^ )}(hjh]hop_alloc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjޫubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjګubjt )}(hhh](h)}(hCcalled when the :c:type:`drm_gpuvm` allocates a struct drm_gpuva_oph](hcalled when the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhM~hjubh allocates a struct drm_gpuva_op}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM~hjubh)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1js hjګubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(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](jX )}(h ``op_free``h]j^ )}(hjZh]hop_free}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjXubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjTubjt )}(hhh](h)}(h?called when the :c:type:`drm_gpuvm` frees a struct drm_gpuva_oph](hcalled when the }(hjshhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj}h]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj{ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjsubh frees a struct drm_gpuva_op}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjpubh)}(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:522: ./include/drm/drm_gpuvm.hhMhjpubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjpubeh}(h]h ]h"]h$]h&]uh1js hjTubeh}(h]h ]h"]h$]h&]uh1jQ hjohMhjubjR )}(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](jX )}(h``vm_bo_alloc``h]j^ )}(hjԬh]h vm_bo_alloc}(hj֬hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjҬubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjάubjt )}(hhh](h)}(hCcalled when the :c:type:`drm_gpuvm` allocates a struct drm_gpuvm_boh](hcalled when the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh allocates a struct drm_gpuvm_bo}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1js hjάubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(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](jX )}(h``vm_bo_free``h]j^ )}(hjNh]h vm_bo_free}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHubjt )}(hhh](h)}(h?called when the :c:type:`drm_gpuvm` frees a struct drm_gpuvm_boh](hcalled when the }(hjghhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjqh]h drm_gpuvm}(hjshhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjgubh frees a struct drm_gpuvm_bo}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjdubh)}(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:522: ./include/drm/drm_gpuvm.hhMhjdubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubeh}(h]h ]h"]h$]h&]uh1js hjHubeh}(h]h ]h"]h$]h&]uh1jQ hjchMhjubjR )}(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](jX )}(h``vm_bo_validate``h]j^ )}(hjȭh]hvm_bo_validate}(hjʭhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjƭubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj­ubjt )}(hhh](h)}(h called from drm_gpuvm_validate()h]h called from drm_gpuvm_validate()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjޭubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh# being mapped in the corresponding }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjޭubh)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjޭubeh}(h]h ]h"]h$]h&]uh1js hj­ubeh}(h]h ]h"]h$]h&]uh1jQ hjݭhMhjubjR )}(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](jX )}(h``sm_step_map``h]j^ )}(hjfh]h sm_step_map}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjdubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj`ubjt )}(hhh](h)}(hkcalled from :c:type:`drm_gpuvm_sm_map` to finally insert the mapping once all previous steps were completedh](h called from }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubhE to finally insert the mapping once all previous steps were completed}(hjhhhNhNubeh}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j privuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./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}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjݮubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhjخhMhjubh or }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_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 }(hj)hhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hj3h]hdrm_gpuvm_sm_map}(hj5hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj1ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhj{hMhj)ubh is used.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubeh}(h]h ]h"]h$]h&]uh1js hj`ubeh}(h]h ]h"]h$]h&]uh1jQ hj{hMhjubjR )}(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](jX )}(h``sm_step_remap``h]j^ )}(hjlh]h sm_step_remap}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjfubjt )}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhjhMhjubh to split up an existent mapping}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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.}(hjگhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j privuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh. pointer matches the one the driver passed to }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhjhMhjubh or }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hj:h]hdrm_gpuvm_sm_unmap}(hj<hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhjhMhjubh, respectively.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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 }(hjahhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hjkh]hdrm_gpuvm_sm_map}(hjmhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjaubh nor }(hjahhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhjhMhjaubh is used.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1js hjfubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hX(``sm_step_unmap`` called from :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to unmap an existing mapping This callback is called when existing mapping needs to be unmapped. This is the case when either a newly requested mapping encloses an existing mapping or an unmap of an existing 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](jX )}(h``sm_step_unmap``h]j^ )}(hjȰh]h sm_step_unmap}(hjʰhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjưubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj°ubjt )}(hhh](h)}(hdcalled from :c:type:`drm_gpuvm_sm_map` and :c:type:`drm_gpuvm_sm_unmap` to unmap an existing mappingh](h called from }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hjh]hdrm_gpuvm_sm_map}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhjhMhjubh to unmap an existing mapping}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjްubh)}(hThis callback is called when existing mapping needs to be unmapped. This is the case when either a newly requested mapping encloses an existing mapping or an unmap of an existing mapping is requested.h]hThis callback is called when existing mapping needs to be unmapped. This is the case when either a newly requested mapping encloses an existing mapping or an unmap of an existing mapping is requested.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./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 }(hjEhhhNhNubh)}(h:c:type:`priv`h]j^ )}(hjOh]hpriv}(hjQhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j privuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjEubh. pointer matches the one the driver passed to }(hjEhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hjsh]hdrm_gpuvm_sm_map}(hjuhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhjlhMhjEubh or }(hjEhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhjlhMhjEubh, respectively.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjlhMhjް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^ )}(hjDZh]hdrm_gpuvm_sm_map}(hjɱhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjűubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhjݰhMhjubh nor }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hjh]hdrm_gpuvm_sm_unmap}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhjݰhMhjubh is used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjݰhMhjްubeh}(h]h ]h"]h$]h&]uh1js hj°ubeh}(h]h ]h"]h$]h&]uh1jQ hjݰhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubh)}(h**Description**h]j7 )}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj*ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjHhhubh)}(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 }(hjBhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hjLh]hdrm_gpuvm_sm_map}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMnhjBubh and }(hjBhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hjph]hdrm_gpuvm_sm_unmap}(hjrhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhjihMnhjBubhJ to provide the split/merge steps for map and unmap operations to drivers.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjihMnhjHhhubj)}(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_rangehNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h!drm_gpuva_op_remap_to_unmap_rangeh]j)}(h!drm_gpuva_op_remap_to_unmap_rangeh]h!drm_gpuva_op_remap_to_unmap_range}(hjѲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͲubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(hB(const struct drm_gpuva_op_remap *op, u64 *start_addr, u64 *range)h](jD)}(h#const struct drm_gpuva_op_remap *oph](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpuva_op_remaph]hdrm_gpuva_op_remap}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj(modnameN classnameNjj)}j]j)}j}jӲsb#c.drm_gpuva_op_remap_to_unmap_rangeasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hoph]hop}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 *start_addrh](h)}(hhh]j)}(hu64h]hu64}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jB#c.drm_gpuva_op_remap_to_unmap_rangeasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h start_addrh]h start_addr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u64 *rangeh](h)}(hhh]j)}(hu64h]hu64}(hjҳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϳubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjԳmodnameN classnameNjj)}j]jB#c.drm_gpuva_op_remap_to_unmap_rangeasbuh1hhj˳ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˳ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˳ubj)}(hrangeh]hrange}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˳ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jMj( jMj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjQubjM )}(hhh](jR )}(h2``const struct drm_gpuva_op_remap *op`` Remap op. h](jX )}(h'``const struct drm_gpuva_op_remap *op``h]j^ )}(hjvh]h#const struct drm_gpuva_op_remap *op}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjtubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjpubjt )}(hhh]h)}(h Remap op.h]h Remap op.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjpubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjmubjR )}(hH``u64 *start_addr`` Output pointer for the start of the required unmap. h](jX )}(h``u64 *start_addr``h]j^ )}(hjh]hu64 *start_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(h3Output pointer for the start of the required unmap.h]h3Output pointer for the start of the required unmap.}(hjȴhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĴhMhjŴubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjĴhMhjmubjR )}(hD``u64 *range`` Output pointer for the length of the required unmap. h](jX )}(h``u64 *range``h]j^ )}(hjh]h u64 *range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjubjt )}(hhh]h)}(h4Output pointer for the length of the required unmap.h]h4Output pointer for the length of the required unmap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjmubeh}(h]h ]h"]h$]h&]uh1jL hjQubh)}(h**Description**h]j7 )}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj!ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjQubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:522: ./include/drm/drm_gpuvm.hhMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_gpuvm_range_valid (C function)c.drm_gpuvm_range_validhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjuhMubj)}(hdrm_gpuvm_range_validh]j)}(hdrm_gpuvm_range_validh]hdrm_gpuvm_range_valid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjuhMubj>)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjµhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjĵmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_range_validasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 addrh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j޵c.drm_gpuvm_range_validasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(haddrh]haddr}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u64 rangeh](h)}(hhh]j)}(hu64h]hu64}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]j޵c.drm_gpuvm_range_validasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjdhhhjuhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`hhhjuhMubah}(h]j[ah ](jjeh"]h$]h&]j j )j huh1jhjuhMhj]hhubj )}(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}(hjöhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j޵c.drm_gpuvm_range_validasbj drm_gpuvmuh1hhjuhMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj]hhhjuhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(h=``struct drm_gpuvm *gpuvm`` the GPUVM to check the range for h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h the GPUVM to check the range forh]h the GPUVM to check the range for}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj1hMhjubjR )}(h``u64 addr`` the base address h](jX )}(h ``u64 addr``h]j^ )}(hjUh]hu64 addr}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjOubjt )}(hhh]h)}(hthe base addressh]hthe base address}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1js hjOubeh}(h]h ]h"]h$]h&]uh1jQ hjjhMhjubjR )}(h7``u64 range`` the range starting from the base address h](jX )}(h ``u64 range``h]j^ )}(hjh]h u64 range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjɷh]h Description}(hj˷hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjǷubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hBChecks whether the range is within the GPUVM's managed boundaries.h]hDChecks whether the range is within the GPUVM’s managed boundaries.}(hj߷hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h'true for a valid range, false otherwiseh]h'true for a valid range, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_gpuvm_resv_object_alloc (C function)c.drm_gpuvm_resv_object_allochNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhMubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjVmodnameN classnameNjj)}j]j)}j}drm_gpuvm_resv_object_allocsbc.drm_gpuvm_resv_object_allocasbuh1hhj1hhhjBhMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhMubj)}(hdrm_gpuvm_resv_object_alloch]j)}(hjrh]hdrm_gpuvm_resv_object_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhjBhMubj>)}(h(struct drm_device *drm)h]jD)}(hstruct drm_device *drmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj͸hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʸubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjϸmodnameN classnameNjj)}j]jpc.drm_gpuvm_resv_object_allocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hj1hhhjBhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-hhhjBhMubah}(h]j(ah ](jjeh"]h$]h&]j j )j huh1jhjBhMhj*hhubj )}(hhh]h)}(h)allocate a dummy :c:type:`drm_gem_object`h](hallocate a dummy }(hj0hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hj:h]hdrm_gem_object}(hj<hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jpc.drm_gpuvm_resv_object_allocasbj drm_gem_objectuh1hhjuhMhj0ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj-hhubah}(h]h ]h"]h$]h&]uh1j hj*hhhjBhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jlj( jlj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjtubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjpubjM )}(hhh]jR )}(h<``struct drm_device *drm`` the drivers :c:type:`drm_device` h](jX )}(h``struct drm_device *drm``h]j^ )}(hjh]hstruct drm_device *drm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjpubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjpubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh\ which can be passed to drm_gpuvm_init() in order to serve as root GEM object providing the }(hjhhhNhNubh)}(h:c:type:`drm_resv`h]j^ )}(hj3h]hdrm_resv}(hj5hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj1ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_resvuh1hhj,hMhjubh shared across }(hjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j^ )}(hjVh]hdrm_gem_objects}(hjXhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjTubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhj,hMhjubh local to a single GPUVM.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMhjpubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj}ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjpubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM!hjubh on success, NULL on failure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM!hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_init (C function)c.drm_gpuvm_inithNtauh1jhjHhhhNhNubj)}(hhh](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]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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM4ubj)}(hdrm_gpuvm_inith]j)}(hdrm_gpuvm_inith]hdrm_gpuvm_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM4ubj>)}(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](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjDmodnameN classnameNjj)}j]j)}j}j sbc.drm_gpuvm_initasbuh1hhj ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hgpuvmh]hgpuvm}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hconst char *nameh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjͻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnameh]hname}(hjڻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(henum drm_gpuvm_flags flagsh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpuvm_flagsh]hdrm_gpuvm_flags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j^c.drm_gpuvm_initasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_device *drmh](j)}(hj? h]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjvmodnameN classnameNjj)}j]j^c.drm_gpuvm_initasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object *r_objh](j)}(hj? h]hstruct}(hjƼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¼ubj)}(h h]h }(hjӼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¼ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j^c.drm_gpuvm_initasbuh1hhj¼ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¼ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¼ubj)}(hr_objh]hr_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¼ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 start_offseth](h)}(hhh]j)}(hu64h]hu64}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj;modnameN classnameNjj)}j]j^c.drm_gpuvm_initasbuh1hhj2ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h start_offseth]h start_offset}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u64 rangeh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j^c.drm_gpuvm_initasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 reserve_offseth](h)}(hhh]j)}(hu64h]hu64}(hjɽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƽubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj˽modnameN classnameNjj)}j]j^c.drm_gpuvm_initasbuh1hhj½ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj½ubj)}(hreserve_offseth]hreserve_offset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj½ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 reserve_rangeh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j^c.drm_gpuvm_initasbuh1hhj ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h reserve_rangeh]h reserve_range}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hconst struct drm_gpuvm_ops *opsh](j)}(hjJh]hconst}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hj? h]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(h drm_gpuvm_opsh]h drm_gpuvm_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j^c.drm_gpuvm_initasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hopsh]hops}(hjȾhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM4ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjߺhhhjhM4ubah}(h]jںah ](jjeh"]h$]h&]j j )j huh1jhjhM4hjܺhhubj )}(hhh]h)}(h initialize a :c:type:`drm_gpuvm`h](h initialize a }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j^c.drm_gpuvm_initasbj drm_gpuvmuh1hhjuhMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM4hjhhubah}(h]h ]h"]h$]h&]uh1j hjܺhhhjhM4ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j.j( j.j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM8hj2ubjM )}(hhh](jR )}(hM``struct drm_gpuvm *gpuvm`` pointer to the :c:type:`drm_gpuvm` to initialize h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjWh]hstruct drm_gpuvm *gpuvm}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjUubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM5hjQubjt )}(hhh]h)}(h0pointer to the :c:type:`drm_gpuvm` to initializeh](hpointer to the }(hjphhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjzh]h drm_gpuvm}(hj|hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjxubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjlhM5hjpubh to initialize}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjlhM5hjmubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hjlhM5hjNubjR )}(h2``const char *name`` the name of the GPU VA space h](jX )}(h``const char *name``h]j^ )}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM6hjubjt )}(hhh]h)}(hthe name of the GPU VA spaceh]hthe name of the GPU VA space}(hj̿hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjȿhM6hjɿubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjȿhM6hjNubjR )}(hL``enum drm_gpuvm_flags flags`` the :c:type:`drm_gpuvm_flags` for this GPUVM h](jX )}(h``enum drm_gpuvm_flags flags``h]j^ )}(hjh]henum drm_gpuvm_flags flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM7hjubjt )}(hhh]h)}(h,the :c:type:`drm_gpuvm_flags` for this GPUVMh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_flags`h]j^ )}(hjh]hdrm_gpuvm_flags}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_flagsuh1hhjhM7hjubh for this GPUVM}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM7hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM7hjNubjR )}(hG``struct drm_device *drm`` the :c:type:`drm_device` this VM resides in h](jX )}(h``struct drm_device *drm``h]j^ )}(hjHh]hstruct drm_device *drm}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjFubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM8hjBubjt )}(hhh]h)}(h+the :c:type:`drm_device` this VM resides inh](hthe }(hjahhhNhNubh)}(h:c:type:`drm_device`h]j^ )}(hjkh]h drm_device}(hjmhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_deviceuh1hhj]hM8hjaubh this VM resides in}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hM8hj^ubah}(h]h ]h"]h$]h&]uh1js hjBubeh}(h]h ]h"]h$]h&]uh1jQ hj]hM8hjNubjR )}(hs``struct drm_gem_object *r_obj`` the resv :c:type:`drm_gem_object` providing the GPUVM's common :c:type:`dma_resv` h](jX )}(h ``struct drm_gem_object *r_obj``h]j^ )}(hjh]hstruct drm_gem_object *r_obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM9hjubjt )}(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}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhM9hjubh providing the GPUVM’s common }(hjhhhNhNubh)}(h:c:type:`dma_resv`h]j^ )}(hjh]hdma_resv}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_resvuh1hhjhM9hjubeh}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM9hjNubjR )}(h:``u64 start_offset`` the start offset of the GPU VA space h](jX )}(h``u64 start_offset``h]j^ )}(hjh]hu64 start_offset}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM:hjubjt )}(hhh]h)}(h$the start offset of the GPU VA spaceh]h$the start offset of the GPU VA space}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM:hj5ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj4hM:hjNubjR )}(h+``u64 range`` the size of the GPU VA space h](jX )}(h ``u64 range``h]j^ )}(hjXh]h u64 range}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM;hjRubjt )}(hhh]h)}(hthe size of the GPU VA spaceh]hthe size of the GPU VA space}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM;hjnubah}(h]h ]h"]h$]h&]uh1js hjRubeh}(h]h ]h"]h$]h&]uh1jQ hjmhM;hjNubjR )}(hD``u64 reserve_offset`` the start of the kernel reserved GPU VA area h](jX )}(h``u64 reserve_offset``h]j^ )}(hjh]hu64 reserve_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM<hjubjt )}(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&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM<hjNubjR )}(hB``u64 reserve_range`` the size of the kernel reserved GPU VA area h](jX )}(h``u64 reserve_range``h]j^ )}(hjh]hu64 reserve_range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM=hjubjt )}(hhh]h)}(h+the size of the kernel reserved GPU VA areah]h+the size of the kernel reserved GPU VA area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM=hjNubjR )}(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](jX )}(h#``const struct drm_gpuvm_ops *ops``h]j^ )}(hjh]hconst struct drm_gpuvm_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM>hjubjt )}(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^ )}(hj"h]h drm_gpuvm_ops}(hj$hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhjhM>hjubh called on }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_map`h]j^ )}(hjEh]hdrm_gpuvm_sm_map}(hjGhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjCubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhjhM>hjubh / }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_sm_unmap`h]j^ )}(hjhh]hdrm_gpuvm_sm_unmap}(hjjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjfubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhjhM>hjubeh}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM>hjNubeh}(h]h ]h"]h$]h&]uh1jL hj2ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM@hj2ubh)}(hJThe :c:type:`drm_gpuvm` must be initialized with this function before use.h](hThe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM?hjubh3 must be initialized with this function before use.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM?hj2ubh)}(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 }(hjhhhNhNubj7 )}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh> must be cleared to 0 before calling this function. The given }(hjhhhNhNubh)}(h:c:type:`name`h]j^ )}(hjh]hname}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j nameuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMAhjubh@ is expected to be managed by the surrounding driver structures.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMAhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_put (C function)c.drm_gpuvm_puthNtauh1jhjHhhhNhNubj)}(hhh](j)}(h,void drm_gpuvm_put (struct drm_gpuvm *gpuvm)h]j)}(h+void drm_gpuvm_put(struct drm_gpuvm *gpuvm)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjYhMubj)}(h drm_gpuvm_puth]j)}(h drm_gpuvm_puth]h drm_gpuvm_put}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjYhMubj>)}(h(struct drm_gpuvm *gpuvm)h]jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jnsbc.drm_gpuvm_putasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjGhhhjYhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjChhhjYhMubah}(h]j>ah ](jjeh"]h$]h&]j j )j huh1jhjYhMhj@hhubj )}(hhh]h)}(h!drop a struct drm_gpuvm referenceh]h!drop a struct drm_gpuvm reference}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj@hhhjYhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j#j( j#j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj'ubjM )}(hhh]jR )}(hP``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to release the reference of h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjLh]hstruct drm_gpuvm *gpuvm}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjFubjt )}(hhh]h)}(h3the :c:type:`drm_gpuvm` to release the reference ofh](hthe }(hjehhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjoh]h drm_gpuvm}(hjqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjahMhjeubh to release the reference of}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1js hjFubeh}(h]h ]h"]h$]h&]uh1jQ hjahMhjCubah}(h]h ]h"]h$]h&]uh1jL hj'ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj'ubh)}(h'This releases a reference to **gpuvm**.h](hThis releases a reference to }(hjhhhNhNubj7 )}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj'ubh)}(h0This function may be called from atomic context.h]h0This function may be called from atomic context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gpuvm_prepare_vm (C function)c.drm_gpuvm_prepare_vmhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(hdrm_gpuvm_prepare_vmh]j)}(hdrm_gpuvm_prepare_vmh]hdrm_gpuvm_prepare_vm}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubj>)}(hI(struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmmodnameN classnameNjj)}j]j)}j}j3sbc.drm_gpuvm_prepare_vmasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjEubjD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_prepare_vmasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjEubjD)}(hunsigned int num_fencesh](j)}(hunsignedh]hunsigned}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h num_fencesh]h num_fences}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjEubeh}(h]h ]h"]h$]h&]jjuh1j=hj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h9``struct drm_exec *exec`` the :c:type:`drm_exec` context h](jX )}(h``struct drm_exec *exec``h]j^ )}(hj*h]hstruct drm_exec *exec}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj$ubjt )}(hhh]h)}(hthe :c:type:`drm_exec` contexth](hthe }(hjChhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hjMh]hdrm_exec}(hjOhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhj?hMhjCubh context}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj?hMhjubjR )}(hJ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve h](jX )}(h``unsigned int num_fences``h]j^ )}(hjh]hunsigned int num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fencesuh1hhjhMhjubh to reserve}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh; if }(hjhhhNhNubj7 )}(h**num_fences**h]h num_fences}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh/ is zero drm_exec_lock_obj() is called instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hMhjubh)}(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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h **Return**h]j7 )}(hjOh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjMubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gpuvm_prepare_objects (C function)c.drm_gpuvm_prepare_objectshNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gpuvm_prepare_objectsh]j)}(hdrm_gpuvm_prepare_objectsh]hdrm_gpuvm_prepare_objects}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(hI(struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_prepare_objectsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]j c.drm_gpuvm_prepare_objectsasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned int num_fencesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h num_fencesh]h num_fences}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hprepare all associated BOsh]hprepare all associated BOs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j-j( j-j) j* j+ uh1jhhhjHhNhNubj- )}(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. **Note** This function is safe against concurrent insertion and removal of external objects, however it is not safe against concurrent usage itself. 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. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j7 )}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubjM )}(hhh](jR )}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjVh]hstruct drm_gpuvm *gpuvm}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjTubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjPubjt )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hjohhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjyh]h drm_gpuvm}(hj{hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjkhMhjoubeh}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1js hjPubeh}(h]h ]h"]h$]h&]uh1jQ hjkhMhjMubjR )}(hA``struct drm_exec *exec`` the :c:type:`drm_exec` locking context h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhjhMhjubh locking context}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjMubjR )}(hJ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve h](jX )}(h``unsigned int num_fences``h]j^ )}(hj h]hunsigned int num_fences}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h-the amount of :c:type:`dma_fences` to reserveh](hthe amount of }(hj#hhhNhNubh)}(h:c:type:`dma_fences`h]j^ )}(hj-h]h dma_fences}(hj/hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj+ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fencesuh1hhjhMhj#ubh to reserve}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjMubeh}(h]h ]h"]h$]h&]uh1jL hj1ubh)}(h**Description**h]j7 )}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjfubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubh)}(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^ )}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhj~ubh contains mappings of; if }(hj~hhhNhNubj7 )}(h**num_fences**h]h num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj~ubh/ is zero drm_exec_lock_obj() is called instead.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj1ubh)}(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:525: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubh)}(h**Note**h]j7 )}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj1ubh)}(h **Return**h]j7 )}(hj,h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj*ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1ubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gpuvm_prepare_range (C function)c.drm_gpuvm_prepare_rangehNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjhMubj)}(hdrm_gpuvm_prepare_rangeh]j)}(hdrm_gpuvm_prepare_rangeh]hdrm_gpuvm_prepare_range}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjhMubj>)}(h^(struct drm_gpuvm *gpuvm, struct drm_exec *exec, u64 addr, u64 range, unsigned int num_fences)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_prepare_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj@modnameN classnameNjj)}j]jc.drm_gpuvm_prepare_rangeasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 addrh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_prepare_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u64 rangeh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_prepare_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned int num_fencesh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h num_fencesh]h num_fences}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjmhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjhMubah}(h]jdah ](jjeh"]h$]h&]j j )j huh1jhjhMhjfhhubj )}(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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjfhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hA``struct drm_exec *exec`` the :c:type:`drm_exec` locking context h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h&the :c:type:`drm_exec` locking contexth](hthe }(hj4hhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hj>h]hdrm_exec}(hj@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhj0hMhj4ubh locking context}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj0hMhjubjR )}(h3``u64 addr`` the start address within the VA space h](jX )}(h ``u64 addr``h]j^ )}(hjwh]hu64 addr}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjuubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjqubjt )}(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&]uh1js hjqubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h7``u64 range`` the range to iterate within the VA space h](jX )}(h ``u64 range``h]j^ )}(hjh]h u64 range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hJ``unsigned int num_fences`` the amount of :c:type:`dma_fences` to reserve h](jX )}(h``unsigned int num_fences``h]j^ )}(hjh]hunsigned int num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h-the amount of :c:type:`dma_fences` to reserveh](hthe amount of }(hjhhhNhNubh)}(h:c:type:`dma_fences`h]j^ )}(hj h]h dma_fences}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fencesuh1hhjhMhjubh to reserve}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjEubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubh)}(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 }(hj]hhhNhNubh)}(h:c:type:`drm_gem_objects`h]j^ )}(hjgh]hdrm_gem_objects}(hjihhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjeubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj]ubh mapped between }(hj]hhhNhNubj7 )}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]ubh and }(hj]hhhNhNubj7 )}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]ubh + }(hj]hhhNhNubj7 )}(h **range**h]hrange}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]ubh; if }(hj]hhhNhNubj7 )}(h**num_fences**h]h num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj]ubh/ is zero drm_exec_lock_obj() is called instead.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM#hjubh)}(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:525: ./drivers/gpu/drm/drm_gpuvm.chM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gpuvm_exec_lock (C function)c.drm_gpuvm_exec_lockhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM>ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj,hM>ubj)}(hdrm_gpuvm_exec_lockh]j)}(hdrm_gpuvm_exec_lockh]hdrm_gpuvm_exec_lock}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj,hM>ubj>)}(h (struct drm_gpuvm_exec *vm_exec)h]jD)}(hstruct drm_gpuvm_exec *vm_exech](j)}(hj? h]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj{modnameN classnameNjj)}j]j)}j}jAsbc.drm_gpuvm_exec_lockasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hvm_exech]hvm_exec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjSubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj,hM>ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj,hM>ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj,hM>hjhhubj )}(hhh]h)}(h'lock all dma-resv of all associated BOsh]h'lock all dma-resv of all associated BOs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM>hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj,hM>ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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. Additionally, 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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMBhjubjM )}(hhh]jR )}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](jX )}(h"``struct drm_gpuvm_exec *vm_exec``h]j^ )}(hjh]hstruct drm_gpuvm_exec *vm_exec}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM?hjubjt )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hj8hhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j^ )}(hjBh]hdrm_gpuvm_exec}(hjDhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_execuh1hhj4hM?hj8ubh wrapper}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hM?hj5ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj4hM?hjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMAhjubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM@hjubh the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhM@hjubh contains mappings of.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM@hjubh)}(hX'Additionally, 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](hsAdditionally, when calling this function with struct drm_gpuvm_exec::extra being set the driver receives the given }(hjhhhNhNubj7 )}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh< callback to lock additional dma-resv in the context of the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j^ )}(hjh]hdrm_gpuvm_exec}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_execuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMChjubhZ instance. Typically, drivers would call drm_exec_prepare_obj() from within this callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hMChjubh)}(h **Return**h]j7 )}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMHhjubh)}(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:525: ./drivers/gpu/drm/drm_gpuvm.chMIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gpuvm_exec_lock_array (C function)c.drm_gpuvm_exec_lock_arrayhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjhM}ubj)}(hdrm_gpuvm_exec_lock_arrayh]j)}(hdrm_gpuvm_exec_lock_arrayh]hdrm_gpuvm_exec_lock_array}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjohhhjhM}ubj>)}(hU(struct drm_gpuvm_exec *vm_exec, struct drm_gem_object **objs, unsigned int num_objs)h](jD)}(hstruct drm_gpuvm_exec *vm_exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_exec_lock_arrayasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvm_exech]hvm_exec}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object **objsh](j)}(hj? h]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjBmodnameN classnameNjj)}j]jc.drm_gpuvm_exec_lock_arrayasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjsh]hobjs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned int num_objsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnum_objsh]hnum_objs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjohhhjhM}ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjkhhhjhM}ubah}(h]jfah ](jjeh"]h$]h&]j j )j huh1jhjhM}hjhhhubj )}(hhh]h)}(h'lock all dma-resv of all associated BOsh]h'lock all dma-resv of all associated BOs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM}hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhhjhM}ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj!ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](jX )}(h"``struct drm_gpuvm_exec *vm_exec``h]j^ )}(hjBh]hstruct drm_gpuvm_exec *vm_exec}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM~hj<ubjt )}(hhh]h)}(h$the :c:type:`drm_gpuvm_exec` wrapperh](hthe }(hj[hhhNhNubh)}(h:c:type:`drm_gpuvm_exec`h]j^ )}(hjeh]hdrm_gpuvm_exec}(hjghhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjcubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_execuh1hhjWhM~hj[ubh wrapper}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhM~hjXubah}(h]h ]h"]h$]h&]uh1js hj<ubeh}(h]h ]h"]h$]h&]uh1jQ hjWhM~hj9ubjR )}(hN``struct drm_gem_object **objs`` additional :c:type:`drm_gem_objects` to lock h](jX )}(h ``struct drm_gem_object **objs``h]j^ )}(hjh]hstruct drm_gem_object **objs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhjhMhjubh to lock}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj9ubjR )}(hU``unsigned int num_objs`` the number of additional :c:type:`drm_gem_objects` to lock h](jX )}(h``unsigned int num_objs``h]j^ )}(hjh]hunsigned int num_objs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h:the number of additional :c:type:`drm_gem_objects` to lockh](hthe number of additional }(hjhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j^ )}(hjh]hdrm_gem_objects}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhjhMhjubh to lock}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj9ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjVubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(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 }(hjnhhhNhNubh)}(h:c:type:`drm_gem_objects`h]j^ )}(hjxh]hdrm_gem_objects}(hjzhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjvubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjnubh the given }(hjnhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjnubh3 contains mappings of, plus the ones given through }(hjnhhhNhNubj7 )}(h**objs**h]hobjs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gpuvm_exec_lock_range (C function)c.drm_gpuvm_exec_lock_rangehNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj*hMubj)}(hdrm_gpuvm_exec_lock_rangeh]j)}(hdrm_gpuvm_exec_lock_rangeh]hdrm_gpuvm_exec_lock_range}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj*hMubj>)}(h5(struct drm_gpuvm_exec *vm_exec, u64 addr, u64 range)h](jD)}(hstruct drm_gpuvm_exec *vm_exech](j)}(hj? h]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(hdrm_gpuvm_exech]hdrm_gpuvm_exec}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjymodnameN classnameNjj)}j]j)}j}j?sbc.drm_gpuvm_exec_lock_rangeasbuh1hhjUubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hvm_exech]hvm_exec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjQubjD)}(hu64 addrh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_exec_lock_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjQubjD)}(h u64 rangeh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_exec_lock_rangeasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrangeh]hrange}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjQubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj*hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj*hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj*hMhjhhubj )}(hhh]h)}(h+prepare all BOs mapped within a given rangeh]h+prepare all BOs mapped within a given range}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjihhubah}(h]h ]h"]h$]h&]uh1j hjhhhj*hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(hH``struct drm_gpuvm_exec *vm_exec`` the :c:type:`drm_gpuvm_exec` wrapper h](jX )}(h"``struct drm_gpuvm_exec *vm_exec``h]j^ )}(hjh]hstruct drm_gpuvm_exec *vm_exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_execuh1hhjhMhjubh wrapper}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h3``u64 addr`` the start address within the VA space h](jX )}(h ``u64 addr``h]j^ )}(hj h]hu64 addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h%the start address within the VA spaceh]h%the start address within the VA space}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h7``u64 range`` the range to iterate within the VA space h](jX )}(h ``u64 range``h]j^ )}(hjBh]h u64 range}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj@ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj<ubjt )}(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&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1js hj<ubeh}(h]h ]h"]h$]h&]uh1jQ hjWhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh mapped between }(hjhhhNhNubj7 )}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh and }(hjhhhNhNubj7 )}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh + }(hjhhhNhNubj7 )}(h **range**h]hrange}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_validate (C function)c.drm_gpuvm_validatehNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjPhMubj)}(hdrm_gpuvm_validateh]j)}(hdrm_gpuvm_validateh]hdrm_gpuvm_validate}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjPhMubj>)}(h0(struct drm_gpuvm *gpuvm, struct drm_exec *exec)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jesbc.drm_gpuvm_validateasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjwubjD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_validateasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjwubeh}(h]h ]h"]h$]h&]jjuh1j=hj>hhhjPhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj:hhhjPhMubah}(h]j5ah ](jjeh"]h$]h&]j j )j huh1jhjPhMhj7hhubj )}(hhh]h)}(h"validate all BOs marked as evictedh]h"validate all BOs marked as evicted}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjohhubah}(h]h ]h"]h$]h&]uh1j hj7hhhjPhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(hL``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to validate evicted BOs h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h/the :c:type:`drm_gpuvm` to validate evicted BOsh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubh to validate evicted BOs}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hU``struct drm_exec *exec`` the :c:type:`drm_exec` instance used for locking the GPUVM h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj ubjt )}(hhh]h)}(h:the :c:type:`drm_exec` instance used for locking the GPUVMh](hthe }(hj(hhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hj2h]hdrm_exec}(hj4hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj0ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhj$hMhj(ubh$ instance used for locking the GPUVM}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj$hMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjkubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gpuvm_resv_add_fence (C function)c.drm_gpuvm_resv_add_fencehNtauh1jhjHhhhNhNubj)}(hhh](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]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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj-hMubj)}(hdrm_gpuvm_resv_add_fenceh]j)}(hdrm_gpuvm_resv_add_fenceh]hdrm_gpuvm_resv_add_fence}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj-hMubj>)}(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](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj|modnameN classnameNjj)}j]j)}j}jBsbc.drm_gpuvm_resv_add_fenceasbuh1hhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubjD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_resv_add_fenceasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubjD)}(hstruct dma_fence *fenceh](j)}(hj? h]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj^modnameN classnameNjj)}j]jc.drm_gpuvm_resv_add_fenceasbuh1hhj:ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hfenceh]hfence}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubjD)}(h!enum dma_resv_usage private_usageh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_resv_usageh]hdma_resv_usage}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_resv_add_fenceasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h private_usageh]h private_usage}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubjD)}(h enum dma_resv_usage extobj_usageh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdma_resv_usageh]hdma_resv_usage}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj1modnameN classnameNjj)}j]jc.drm_gpuvm_resv_add_fenceasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h extobj_usageh]h extobj_usage}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj-hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj-hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj-hMhjhhubj )}(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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj-hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubjM )}(hhh](jR )}(hF``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to add a fence to h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubjt )}(hhh]h)}(h)the :c:type:`drm_gpuvm` to add a fence toh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhM hjubh to add a fence to}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubjR )}(hA``struct drm_exec *exec`` the :c:type:`drm_exec` locking context h](jX )}(h``struct drm_exec *exec``h]j^ )}(hj"h]hstruct drm_exec *exec}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubjt )}(hhh]h)}(h&the :c:type:`drm_exec` locking contexth](hthe }(hj;hhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hjEh]hdrm_exec}(hjGhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjCubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhj7hM hj;ubh locking context}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hM hj8ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj7hM hjubjR )}(h)``struct dma_fence *fence`` fence to add h](jX )}(h``struct dma_fence *fence``h]j^ )}(hj~h]hstruct dma_fence *fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjxubjt )}(hhh]h)}(h fence to addh]h fence to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjxubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubjR )}(h=``enum dma_resv_usage private_usage`` private dma-resv usage h](jX )}(h%``enum dma_resv_usage private_usage``h]j^ )}(hjh]h!enum dma_resv_usage private_usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubjt )}(hhh]h)}(hprivate dma-resv usageh]hprivate dma-resv usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubjR )}(h:``enum dma_resv_usage extobj_usage`` extobj dma-resv usageh](jX )}(h$``enum dma_resv_usage extobj_usage``h]j^ )}(hjh]h enum dma_resv_usage extobj_usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gpuvm_bo_create (C function)c.drm_gpuvm_bo_createhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM#ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhM#ubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkmodnameN classnameNjj)}j]j)}j}drm_gpuvm_bo_createsbc.drm_gpuvm_bo_createasbuh1hhjFhhhjWhM#ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhM#ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhM#ubj)}(hdrm_gpuvm_bo_createh]j)}(hjh]hdrm_gpuvm_bo_create}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjWhM#ubj>)}(h5(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuvm_bo_createasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjTmodnameN classnameNjj)}j]jc.drm_gpuvm_bo_createasbuh1hhj0ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjFhhhjWhM#ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjWhM#ubah}(h]j=ah ](jjeh"]h$]h&]j j )j huh1jhjWhM#hj?hhubj )}(hhh]h)}(h,create a new instance of struct drm_gpuvm_boh]h,create a new instance of struct drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM#hjhhubah}(h]h ]h"]h$]h&]uh1j hj?hhhjWhM#ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM'hjubjM )}(hhh](jR )}(hN``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM$hjubjt )}(hhh]h)}(h1The :c:type:`drm_gpuvm` the **obj** is mapped in.h](hThe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj hM$hjubh the }(hjhhhNhNubj7 )}(h**obj**h]hobj}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh is mapped in.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM$hj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hM$hjubjR )}(h[``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjdh]hstruct drm_gem_object *obj}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM%hj^ubjt )}(hhh]h)}(h;The :c:type:`drm_gem_object` being mapped in the **gpuvm**.h](hThe }(hj}hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjyhM%hj}ubh being mapped in the }(hj}hhhNhNubj7 )}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj}ubh.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhM%hjzubah}(h]h ]h"]h$]h&]uh1js hj^ubeh}(h]h ]h"]h$]h&]uh1jQ hjyhM%hjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM'hjubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_ops`h]j^ )}(hjh]h drm_gpuvm_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM&hjubh$ vm_bo_alloc() callback to allocate.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM&hjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 }(hj4hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hj>h]h drm_gpuvm_bo}(hj@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM*hj4ubh on success, NULL on failure}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hM*hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_bo_put (C function)c.drm_gpuvm_bo_puthNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gpuvm_bo_puth]j)}(hdrm_gpuvm_bo_puth]hdrm_gpuvm_bo_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h(struct drm_gpuvm_bo *vm_bo)h]jD)}(hstruct drm_gpuvm_bo *vm_boh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_bo_putasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvm_boh]hvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj~hhhjhMubah}(h]jyah ](jjeh"]h$]h&]j j )j huh1jhjhMhj{hhubj )}(hhh]h)}(h$drop a struct drm_gpuvm_bo referenceh]h$drop a struct drm_gpuvm_bo reference}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjBhhubah}(h]h ]h"]h$]h&]uh1j hj{hhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j]j( j]j) j* j+ uh1jhhhjHhNhNubj- )}(hXc**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 lock that the GEM uses for its gpuva list (either the GEM's dma-resv or gpuva.lock mutex). This function may only be called from non-atomic context. **Return** true if vm_bo was destroyed, false otherwise.h](h)}(h**Parameters**h]j7 )}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjeubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjaubjM )}(hhh]jR )}(hV``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to release the reference of h](jX )}(h``struct drm_gpuvm_bo *vm_bo``h]j^ )}(hjh]hstruct drm_gpuvm_bo *vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMhjubh to release the reference of}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj}ubah}(h]h ]h"]h$]h&]uh1jL hjaubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjaubh)}(h'This releases a reference to **vm_bo**.h](hThis releases a reference to }(hjhhhNhNubj7 )}(h **vm_bo**h]hvm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjaubh)}(hXJIf 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 lock that the GEM uses for its gpuva list (either the GEM's dma-resv or gpuva.lock mutex).h](h*If the reference count drops to zero, the }(hjhhhNhNubh)}(h:c:type:`gpuvm_bo`h]j^ )}(hj%h]hgpuvm_bo}(hj'hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubhX 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 lock that the GEM uses for its gpuva list (either the GEM’s dma-resv or gpuva.lock mutex).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhMhjaubh)}(h9This function may only be called from non-atomic context.h]h9This function may only be called from non-atomic context.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjaubh)}(h **Return**h]j7 )}(hj^h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj\ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjaubh)}(h-true if vm_bo was destroyed, false otherwise.h]h-true if vm_bo was destroyed, false otherwise.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gpuvm_bo_put_deferred (C function)c.drm_gpuvm_bo_put_deferredhNtauh1jhjHhhhNhNubj)}(hhh](j)}(h;bool drm_gpuvm_bo_put_deferred (struct drm_gpuvm_bo *vm_bo)h]j)}(h:bool drm_gpuvm_bo_put_deferred(struct drm_gpuvm_bo *vm_bo)h](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gpuvm_bo_put_deferredh]j)}(hdrm_gpuvm_bo_put_deferredh]hdrm_gpuvm_bo_put_deferred}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h(struct drm_gpuvm_bo *vm_bo)h]jD)}(hstruct drm_gpuvm_bo *vm_boh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_bo_put_deferredasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvm_boh]hvm_bo}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h:drop a struct drm_gpuvm_bo reference with deferred cleanuph]h:drop a struct drm_gpuvm_bo reference with deferred cleanup}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj_hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jzj( jzj) j* j+ uh1jhhhjHhNhNubj- )}(hXj**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**. This might take and release the GEMs GPUVA lock. You should call drm_gpuvm_bo_deferred_cleanup() later to complete the cleanup process. **Return** true if vm_bo is being destroyed, false otherwise.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj~ubjM )}(hhh]jR )}(hV``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to release the reference of h](jX )}(h``struct drm_gpuvm_bo *vm_bo``h]j^ )}(hjh]hstruct drm_gpuvm_bo *vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMhjubh to release the reference of}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hj~ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj~ubh)}(h'This releases a reference to **vm_bo**.h](hThis releases a reference to }(hjhhhNhNubj7 )}(h **vm_bo**h]hvm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj~ubh)}(hThis might take and release the GEMs GPUVA lock. You should call drm_gpuvm_bo_deferred_cleanup() later to complete the cleanup process.h]hThis might take and release the GEMs GPUVA lock. You should call drm_gpuvm_bo_deferred_cleanup() later to complete the cleanup process.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj~ubh)}(h **Return**h]j7 )}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjGubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj~ubh)}(h2true if vm_bo is being destroyed, false otherwise.h]h2true if vm_bo is being destroyed, false otherwise.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gpuvm_bo_deferred_cleanup (C function)c.drm_gpuvm_bo_deferred_cleanuphNtauh1jhjHhhhNhNubj)}(hhh](j)}(h)}(h(struct drm_gpuvm *gpuvm)h]jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_bo_deferred_cleanupasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h2clean up BOs in the deferred list deferred cleanuph]h2clean up BOs in the deferred list deferred cleanup}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjKhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jfj( jfj) j* j+ uh1jhhhjHhNhNubj- )}(h**Parameters** ``struct drm_gpuvm *gpuvm`` the VM to clean up **Description** Cleans up :c:type:`drm_gpuvm_bo` instances in the deferred cleanup list.h](h)}(h**Parameters**h]j7 )}(hjph]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjnubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjjubjM )}(hhh]jR )}(h/``struct drm_gpuvm *gpuvm`` the VM to clean up h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(hthe VM to clean uph]hthe VM to clean up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjjubh)}(hHCleans up :c:type:`drm_gpuvm_bo` instances in the deferred cleanup list.h](h Cleans up }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh( instances in the deferred cleanup list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_bo_find (C function)c.drm_gpuvm_bo_findhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj?hMubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjSmodnameN classnameNjj)}j]j)}j}drm_gpuvm_bo_findsbc.drm_gpuvm_bo_findasbuh1hhj.hhhj?hMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj?hMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj?hMubj)}(hdrm_gpuvm_bo_findh]j)}(hjoh]hdrm_gpuvm_bo_find}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhj?hMubj>)}(h5(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jmc.drm_gpuvm_bo_findasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj<modnameN classnameNjj)}j]jmc.drm_gpuvm_bo_findasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hj.hhhj?hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj*hhhj?hMubah}(h]j%ah ](jjeh"]h$]h&]j j )j huh1jhj?hMhj'hhubj )}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jmc.drm_gpuvm_bo_findasbj drm_gpuvm_bouh1hhjuhMhjubh for the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjj drm_gpuvmuh1hhjuhMhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjj drm_gem_objectuh1hhjuhMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj'hhhj?hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj'ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM!hj#ubjM )}(hhh](jR )}(hN``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjHh]hstruct drm_gpuvm *gpuvm}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjFubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjBubjt )}(hhh]h)}(h1The :c:type:`drm_gpuvm` the **obj** is mapped in.h](hThe }(hjahhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjkh]h drm_gpuvm}(hjmhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj]hMhjaubh the }(hjahhhNhNubj7 )}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjaubh is mapped in.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1js hjBubeh}(h]h ]h"]h$]h&]uh1jQ hj]hMhj?ubjR )}(h[``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhM hjubh being mapped in the }(hjhhhNhNubj7 )}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hj?ubeh}(h]h ]h"]h$]h&]uh1jL hj#ubh)}(h**Description**h]j7 )}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj$ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM"hj#ubh)}(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 }(hj<hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjFh]h drm_gpuvm_bo}(hjHhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM!hj<ubh+ representing the combination of the given }(hj<hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjjh]h drm_gpuvm}(hjlhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjhubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjchM!hj<ubh and }(hj<hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjchM!hj<ubh1. If found, increases the reference count of the }(hj<hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjchM!hj<ubh accordingly.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchM!hj#ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM%hj#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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM&hjubh on success, NULL on failure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM&hj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gpuvm_bo_obtain_locked (C function)c.drm_gpuvm_bo_obtain_lockedhNtauh1jhjHhhhNhNubj)}(hhh](j)}(hfstruct drm_gpuvm_bo * drm_gpuvm_bo_obtain_locked (struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h]j)}(hdstruct drm_gpuvm_bo *drm_gpuvm_bo_obtain_locked(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](j)}(hj? h]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM3ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjNhM3ubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjbmodnameN classnameNjj)}j]j)}j}drm_gpuvm_bo_obtain_lockedsbc.drm_gpuvm_bo_obtain_lockedasbuh1hhj=hhhjNhM3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjNhM3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjNhM3ubj)}(hdrm_gpuvm_bo_obtain_lockedh]j)}(hj~h]hdrm_gpuvm_bo_obtain_locked}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjNhM3ubj>)}(h5(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j|c.drm_gpuvm_bo_obtain_lockedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjKmodnameN classnameNjj)}j]j|c.drm_gpuvm_bo_obtain_lockedasbuh1hhj'ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hj=hhhjNhM3ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhjNhM3ubah}(h]j4ah ](jjeh"]h$]h&]j j )j huh1jhjNhM3hj6hhubj )}(hhh]h)}(hpobtains an instance of the :c:type:`drm_gpuvm_bo` for the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`h](hobtains an instance of the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j|c.drm_gpuvm_bo_obtain_lockedasbj drm_gpuvm_bouh1hhjuhMhjubh for the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjj drm_gpuvmuh1hhjuhMhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjj drm_gem_objectuh1hhjuhMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM3hjhhubah}(h]h ]h"]h$]h&]uh1j hj6hhhjNhM3ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j.j( j.j) j* j+ uh1jhhhjHhNhNubj- )}(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. If not found, allocates a new :c:type:`drm_gpuvm_bo`. Requires the lock for the GEMs gpuva list. 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]j7 )}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM7hj2ubjM )}(hhh](jR )}(hN``struct drm_gpuvm *gpuvm`` The :c:type:`drm_gpuvm` the **obj** is mapped in. h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjWh]hstruct drm_gpuvm *gpuvm}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjUubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM5hjQubjt )}(hhh]h)}(h1The :c:type:`drm_gpuvm` the **obj** is mapped in.h](hThe }(hjphhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjzh]h drm_gpuvm}(hj|hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjxubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjlhM5hjpubh the }(hjphhhNhNubj7 )}(h**obj**h]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjpubh is mapped in.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjlhM5hjmubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hjlhM5hjNubjR )}(h[``struct drm_gem_object *obj`` The :c:type:`drm_gem_object` being mapped in the **gpuvm**. h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM6hjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhM6hjubh being mapped in the }(hjhhhNhNubj7 )}(h **gpuvm**h]hgpuvm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM6hjNubeh}(h]h ]h"]h$]h&]uh1jL hj2ubh)}(h**Description**h]j7 )}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj3ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM8hj2ubh)}(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 }(hjKhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjUh]h drm_gpuvm_bo}(hjWhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM7hjKubh+ representing the combination of the given }(hjKhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjyh]h drm_gpuvm}(hj{hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjrhM7hjKubh and }(hjKhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjrhM7hjKubh1. If found, increases the reference count of the }(hjKhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjrhM7hjKubh, accordingly. If not found, allocates a new }(hjKhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjrhM7hjKubh.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhM7hj2ubh)}(h*Requires the lock for the GEMs gpuva list.h]h*Requires the lock for the GEMs gpuva list.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM<hj2ubh)}(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^ )}(hj"h]h drm_gpuvm_bo}(hj$hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM>hjubh! is added to the GEMs gpuva list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hM>hj2ubh)}(h **Return**h]j7 )}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjJubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM@hj2ubh)}(hIa pointer to the :c:type:`drm_gpuvm_bo` on success, an ERR_PTR on failureh](ha pointer to the }(hjbhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjlh]h drm_gpuvm_bo}(hjnhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMAhjbubh" on success, an ERR_PTR on failure}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMAhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_gpuvm_bo_obtain_prealloc (C function)c.drm_gpuvm_bo_obtain_preallochNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMaubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gpuvm_bo_obtain_preallocsbc.drm_gpuvm_bo_obtain_preallocasbuh1hhjhhhjhMaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMaubj)}(hdrm_gpuvm_bo_obtain_prealloch]j)}(hjh]hdrm_gpuvm_bo_obtain_prealloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMaubj>)}(h(struct drm_gpuvm_bo *__vm_bo)h]jD)}(hstruct drm_gpuvm_bo *__vm_boh](j)}(hj? h]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjNmodnameN classnameNjj)}j]jc.drm_gpuvm_bo_obtain_preallocasbuh1hhj*ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h__vm_boh]h__vm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj&ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMaubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMaubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMahjhhubj )}(hhh]h)}(hpobtains an instance of the :c:type:`drm_gpuvm_bo` for the given :c:type:`drm_gpuvm` and :c:type:`drm_gem_object`h](hobtains an instance of the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuvm_bo_obtain_preallocasbj drm_gpuvm_bouh1hhjuhMhjubh for the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjj drm_gpuvmuh1hhjuhMhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjj drm_gem_objectuh1hhjuhMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMahjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMaubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j1j( j1j) j* j+ uh1jhhhjHhNhNubj- )}(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. The provided **__vm_bo** must not already be in the gpuva, evict, or extobj lists prior to calling this method. 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]j7 )}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMehj5ubjM )}(hhh]jR )}(hF``struct drm_gpuvm_bo *__vm_bo`` A pre-allocated struct drm_gpuvm_bo. h](jX )}(h ``struct drm_gpuvm_bo *__vm_bo``h]j^ )}(hjZh]hstruct drm_gpuvm_bo *__vm_bo}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjXubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMchjTubjt )}(hhh]h)}(h$A pre-allocated struct drm_gpuvm_bo.h]h$A pre-allocated struct drm_gpuvm_bo.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMchjpubah}(h]h ]h"]h$]h&]uh1js hjTubeh}(h]h ]h"]h$]h&]uh1jQ hjohMchjQubah}(h]h ]h"]h$]h&]uh1jL hj5ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMehj5ubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMdhjubh+ representing the combination of the given }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMdhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhMdhjubh7. If found, increases the reference count of the found }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hj!hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMdhjubh accordingly, while the }(hjhhhNhNubj7 )}(h **__vm_bo**h]h__vm_bo}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh, reference count is decreased. If not found }(hjhhhNhNubj7 )}(h **__vm_bo**h]h__vm_bo}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh= is returned without further increase of the reference count.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMdhj5ubh)}(hoThe provided **__vm_bo** must not already be in the gpuva, evict, or extobj lists prior to calling this method.h](h The provided }(hjjhhhNhNubj7 )}(h **__vm_bo**h]h__vm_bo}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjjubhW must not already be in the gpuva, evict, or extobj lists prior to calling this method.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMjhj5ubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMmhjubh! is added to the GEMs gpuva list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMmhj5ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMohj5ubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMphjubh or }(hjhhhNhNubj7 )}(h **__vm_bo**h]h__vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh if no existing }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMphjubh was found}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMphj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_gpuvm_bo_extobj_add (C function)c.drm_gpuvm_bo_extobj_addhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjjhMubj)}(hdrm_gpuvm_bo_extobj_addh]j)}(hdrm_gpuvm_bo_extobj_addh]hdrm_gpuvm_bo_extobj_add}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jhjXhhhjjhMubj>)}(h(struct drm_gpuvm_bo *vm_bo)h]jD)}(hstruct drm_gpuvm_bo *vm_boh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_bo_extobj_addasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvm_boh]hvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjXhhhjjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjThhhjjhMubah}(h]jOah ](jjeh"]h$]h&]j j )j huh1jhjjhMhjQhhubj )}(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^ )}(hj&h]h drm_gpuvm_bo}(hj(hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuvm_bo_extobj_addasbj drm_gpuvm_bouh1hhjuhMhjubh to its }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjNh]h drm_gpuvm}(hjPhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjLubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjBj drm_gpuvmuh1hhjuhMhjubh’s extobj list}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjQhhhjjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh]jR )}(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](jX )}(h``struct drm_gpuvm_bo *vm_bo``h]j^ )}(hjh]hstruct drm_gpuvm_bo *vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(hOThe :c:type:`drm_gpuvm_bo` to add to its :c:type:`drm_gpuvm`'s the extobj list.h](hThe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjhMhjubh to add to its }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubh’s the extobj list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj'ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 }(hj?hhhNhNubj7 )}(h **vm_bo**h]hvm_bo}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj?ubh to its }(hj?hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj[h]h drm_gpuvm}(hj]hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj?ubhE’s extobj list if not on the list already and if the corresponding }(hj?hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj}ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjxhMhj?ubh! is an external object, actually.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_bo_evict (C function)c.drm_gpuvm_bo_evicthNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gpuvm_bo_evicth]j)}(hdrm_gpuvm_bo_evicth]hdrm_gpuvm_bo_evict}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h((struct drm_gpuvm_bo *vm_bo, bool evict)h](jD)}(hstruct drm_gpuvm_bo *vm_boh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj#modnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_bo_evictasbuh1hhjubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvm_boh]hvm_bo}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h bool evicth](j)}(hj=2h]hbool}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hevicth]hevict}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hUadd / remove a :c:type:`drm_gpuvm_bo` to / from the :c:type:`drm_gpuvms` evicted listh](hadd / remove a }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j=c.drm_gpuvm_bo_evictasbj drm_gpuvm_bouh1hhjuhMhjubh to / from the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvms`h]j^ )}(hjh]h drm_gpuvms}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjj drm_gpuvmsuh1hhjuhMhjubh evicted list}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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_gpuvm`'s evicted list.h](h)}(h**Parameters**h]j7 )}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj%ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj!ubjM )}(hhh](jR )}(hK``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to add or remove h](jX )}(h``struct drm_gpuvm_bo *vm_bo``h]j^ )}(hjFh]hstruct drm_gpuvm_bo *vm_bo}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj@ubjt )}(hhh]h)}(h+the :c:type:`drm_gpuvm_bo` to add or removeh](hthe }(hj_hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjih]h drm_gpuvm_bo}(hjkhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjgubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhj[hMhj_ubh to add or remove}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1js hj@ubeh}(h]h ]h"]h$]h&]uh1jQ hj[hMhj=ubjR )}(h7``bool evict`` indicates whether the object is evicted h](jX )}(h``bool evict``h]j^ )}(hjh]h bool evict}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h'indicates whether the object is evictedh]h'indicates whether the object is evicted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj=ubeh}(h]h ]h"]h$]h&]uh1jL hj!ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj!ubh)}(h[Adds a :c:type:`drm_gpuvm_bo` to or removes it from the :c:type:`drm_gpuvm`'s evicted list.h](hAdds a }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh to or removes it from the }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj!h]h drm_gpuvm}(hj#hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubh’s evicted list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_insert (C function)c.drm_gpuva_inserthNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjvhMubj)}(hdrm_gpuva_inserth]j)}(hdrm_gpuva_inserth]hdrm_gpuva_insert}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjvhMubj>)}(h/(struct drm_gpuvm *gpuvm, struct drm_gpuva *va)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuva_insertasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gpuva *vah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj7modnameN classnameNjj)}j]jc.drm_gpuva_insertasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvah]hva}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjdhhhjvhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`hhhjvhMubah}(h]j[ah ](jjeh"]h$]h&]j j )j huh1jhjvhMhj]hhubj )}(hhh]h)}(hinsert a :c:type:`drm_gpuva`h](h insert a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_insertasbj drm_gpuvauh1hhjuhMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj]hhhjvhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(hY``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to insert the :c:type:`drm_gpuva` in h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h)}(h(struct drm_gpuva *va)h]jD)}(hstruct drm_gpuva *vah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuva_removeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvah]hva}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM hjhhubj )}(hhh]h)}(hremove a :c:type:`drm_gpuva`h](h remove a }(hj[hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjeh]h drm_gpuva}(hjghhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjcubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_removeasbj drm_gpuvauh1hhjuhMhj[ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjXhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(hXA**Parameters** ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to remove **Description** This removes the given :c:type:`va` from the underlying 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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh]jR )}(h;``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to remove h](jX )}(h``struct drm_gpuva *va``h]j^ )}(hjh]hstruct drm_gpuva *va}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubjt )}(hhh]h)}(h!the :c:type:`drm_gpuva` to removeh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjhM hjubh to remove}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h=This removes the given :c:type:`va` from the underlying tree.h](hThis removes the given }(hj4hhhNhNubh)}(h :c:type:`va`h]j^ )}(hj>h]hva}(hj@hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j vauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj4ubh from the underlying tree.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hMhjubh)}(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().}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_link (C function)c.drm_gpuva_linkhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM&ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM&ubj)}(hdrm_gpuva_linkh]j)}(hdrm_gpuva_linkh]hdrm_gpuva_link}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM&ubj>)}(h2(struct drm_gpuva *va, struct drm_gpuvm_bo *vm_bo)h](jD)}(hstruct drm_gpuva *vah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuva_linkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvah]hva}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gpuvm_bo *vm_boh](j)}(hj? h]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjdmodnameN classnameNjj)}j]j c.drm_gpuva_linkasbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hvm_boh]hvm_bo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM&ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM&ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM&hjhhubj )}(hhh]h)}(hlink a :c:type:`drm_gpuva`h](hlink a }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j c.drm_gpuva_linkasbj drm_gpuvauh1hhjuhMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM&hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM&ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(hXm**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 GEM's dma-resv or gpuva.lock mutex.h](h)}(h**Parameters**h]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM*hjubjM )}(hhh](jR )}(h9``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to link h](jX )}(h``struct drm_gpuva *va``h]j^ )}(hj*h]hstruct drm_gpuva *va}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM'hj$ubjt )}(hhh]h)}(hthe :c:type:`drm_gpuva` to linkh](hthe }(hjChhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjMh]h drm_gpuva}(hjOhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj?hM'hjCubh to link}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hM'hj@ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj?hM'hj!ubjR )}(h\``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` to add the :c:type:`drm_gpuva` to h](jX )}(h``struct drm_gpuvm_bo *vm_bo``h]j^ )}(hjh]hstruct drm_gpuvm_bo *vm_bo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM(hjubjt )}(hhh]h)}(h)}(h(struct drm_gpuva *va)h]jD)}(hstruct drm_gpuva *vah](j)}(hj? h]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}j_sbc.drm_gpuva_unlinkasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah" ]h$]h&]uh1jhjuubj)}(hvah]hva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjqubah}(h]h ]h"]h$]h&]jjuh1j=hj8hhhjJhMFubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhjJhMFubah}(h]j/ah ](jjeh"]h$]h&]j j )j huh1jhjJhMFhj1hhubj )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_unlinkasbj drm_gpuvauh1hhjuhMhjubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMFhjhhubah}(h]h ]h"]h$]h&]uh1j hj1hhhjJhMFubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j8j( j8j) j* j+ uh1jhhhjHhNhNubj- )}(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 GEM's dma-resv or gpuva.lock mutex.h](h)}(h**Parameters**h]j7 )}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj@ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMJhj<ubjM )}(hhh]jR )}(h;``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to unlink h](jX )}(h``struct drm_gpuva *va``h]j^ )}(hjah]hstruct drm_gpuva *va}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMGhj[ubjt )}(hhh]h)}(h!the :c:type:`drm_gpuva` to unlinkh](hthe }(hjzhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjvhMGhjzubh to unlink}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMGhjwubah}(h]h ]h"]h$]h&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hjvhMGhjXubah}(h]h ]h"]h$]h&]uh1jL hj<ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMIhj<ubh)}(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 }(hjhhhNhNubh)}(h :c:type:`va`h]j^ )}(hjh]hva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j vauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMHhjubh from the GPU VA list of the }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjhMHhjubh it is associated with.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMHhj<ubh)}(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 }(hj*hhhNhNubh)}(h :c:type:`va`h]j^ )}(hj4h]hva}(hj6hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j vauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMKhj*ubh from the GPU VA list of the }(hj*hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjXh]h drm_gpuvm_bo}(hjZhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjQhMKhj*ubh and the }(hj*hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hj{h]h drm_gpuvm_bo}(hj}hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjyubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjQhMKhj*ubh from the }(hj*hhhNhNubh)}(h:c:type:`drm_gem_object`h]j^ )}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gem_objectuh1hhjQhMKhj*ubh: it is associated with in case this call unlinks the last }(hj*hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjQhMKhj*ubh from the }hj*sbh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjh]h drm_gpuvm_bo}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjQhMKhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhMKhj<ubh)}(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 }(hj hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMOhj ubh entry removed from the }(hj hhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hj9h]h drm_gpuvm_bo}(hj;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhj2hMOhj ubh& a reference of the latter is dropped.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hMOhj<ubh)}(hThis function expects the caller to protect the GEM's GPUVA list against concurrent access using either the GEM's dma-resv or gpuva.lock mutex.h]hThis function expects the caller to protect the GEM’s GPUVA list against concurrent access using either the GEM’s dma-resv or gpuva.lock mutex.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMRhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_gpuva_unlink_defer (C function)c.drm_gpuva_unlink_deferhNtauh1jhjHhhhNhNubj)}(hhh](j)}(h2void drm_gpuva_unlink_defer (struct drm_gpuva *va)h]j)}(h1void drm_gpuva_unlink_defer(struct drm_gpuva *va)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMhubj)}(hdrm_gpuva_unlink_deferh]j)}(hdrm_gpuva_unlink_deferh]hdrm_gpuva_unlink_defer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMhubj>)}(h(struct drm_gpuva *va)h]jD)}(hstruct drm_gpuva *vah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuva_unlink_deferasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvah]hva}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMhubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMhubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhhjhhubj )}(hhh]h)}(h8unlink a :c:type:`drm_gpuva` with deferred vm_bo cleanuph](h unlink a }(hjOhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjYh]h drm_gpuva}(hj[hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjWubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_unlink_deferasbj drm_gpuvauh1hhjuhMhjOubh with deferred vm_bo cleanup}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhhjLhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMhubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(h**Parameters** ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to unlink **Description** Similar to drm_gpuva_unlink(), but uses drm_gpuvm_bo_put_deferred() and takes the lock for the caller.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMlhjubjM )}(hhh]jR )}(h;``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to unlink h](jX )}(h``struct drm_gpuva *va``h]j^ )}(hjh]hstruct drm_gpuva *va}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMihjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjhMihjubh to unlink}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMihjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMkhjubh)}(hfSimilar to drm_gpuva_unlink(), but uses drm_gpuvm_bo_put_deferred() and takes the lock for the caller.h]hfSimilar to drm_gpuva_unlink(), but uses drm_gpuvm_bo_put_deferred() and takes the lock for the caller.}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gpuva_find_first (C function)c.drm_gpuva_find_firsthNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW hhhjh hMubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj| modnameN classnameNjj)}j]j)}j}drm_gpuva_find_firstsbc.drm_gpuva_find_firstasbuh1hhjW hhhjh hMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW hhhjh hMubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW hhhjh hMubj)}(hdrm_gpuva_find_firsth]j)}(hj h]hdrm_gpuva_find_first}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjW hhhjh hMubj>)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j c.drm_gpuva_find_firstasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hgpuvmh]hgpuvm}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hu64 addrh](h)}(hhh]j)}(hu64h]hu64}(hjH hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjJ modnameN classnameNjj)}j]j c.drm_gpuva_find_firstasbuh1hhjA ubj)}(h h]h }(hjf hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA ubj)}(haddrh]haddr}(hjt hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(h u64 rangeh](h)}(hhh]j)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j c.drm_gpuva_find_firstasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hrangeh]hrange}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubeh}(h]h ]h"]h$]h&]jjuh1j=hjW hhhjh hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjS hhhjh hMubah}(h]jN ah ](jjeh"]h$]h&]j j )j huh1jhjh hMhjP hhubj )}(hhh]h)}(h5find the first :c:type:`drm_gpuva` in the given rangeh](hfind the first }(hj hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj h]h drm_gpuva}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j c.drm_gpuva_find_firstasbj drm_gpuvauh1hhjuhMhj ubh in the given range}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj hhubah}(h]h ]h"]h$]h&]uh1j hjP hhhjh hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j& j( j& j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj0 h]h Parameters}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj. ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj* ubjM )}(hhh](jR )}(hA``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjO h]hstruct drm_gpuvm *gpuvm}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjM ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjI ubjt )}(hhh]h)}(h$the :c:type:`drm_gpuvm` to search inh](hthe }(hjh hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjr h]h drm_gpuvm}(hjt hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjp ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjd hMhjh ubh to search in}(hjh hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjd hMhje ubah}(h]h ]h"]h$]h&]uh1js hjI ubeh}(h]h ]h"]h$]h&]uh1jQ hjd hMhjF ubjR )}(h.``u64 addr`` the :c:type:`drm_gpuvas` address h](jX )}(h ``u64 addr``h]j^ )}(hj h]hu64 addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj ubjt )}(hhh]h)}(h the :c:type:`drm_gpuvas` addressh](hthe }(hj hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hj h]h drm_gpuvas}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhj hMhj ubh address}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjF ubjR )}(h-``u64 range`` the :c:type:`drm_gpuvas` range h](jX )}(h ``u64 range``h]j^ )}(hj h]h u64 range}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj ubjt )}(hhh]h)}(hthe :c:type:`drm_gpuvas` rangeh](hthe }(hj hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hj* h]h drm_gpuvas}(hj, hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj( ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhj hMhj ubh range}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjF ubeh}(h]h ]h"]h$]h&]uh1jL hj* ubh)}(h **Return**h]j7 )}(hje h]hReturn}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjc ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj* ubh)}(h4the first :c:type:`drm_gpuva` within the given rangeh](h the first }(hj{ hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj h]h drm_gpuva}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj{ ubh within the given range}(hj{ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj* ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_find (C function)c.drm_gpuva_findhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j)}j}drm_gpuva_findsbc.drm_gpuva_findasbuh1hhj hhhj hMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hdrm_gpuva_findh]j)}(hj h]hdrm_gpuva_find}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj( ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj>)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubj)}(h h]h }(hjT hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjg modnameN classnameNjj)}j]j c.drm_gpuva_findasbuh1hhjC ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubj)}(hgpuvmh]hgpuvm}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj? ubjD)}(hu64 addrh](h)}(hhh]j)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j c.drm_gpuva_findasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(haddrh]haddr}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj? ubjD)}(h u64 rangeh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j c.drm_gpuva_findasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hrangeh]hrange}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj? ubeh}(h]h ]h"]h$]h&]jjuh1j=hj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj hMhj hhubj )}(hhh]h)}(hfind a :c:type:`drm_gpuva`h](hfind a }(hjXhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjbh]h drm_gpuva}(hjdhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj`ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j c.drm_gpuva_findasbj drm_gpuvauh1hhjuhMhjXubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjUhhubah}(h]h ]h"]h$]h&]uh1j hj hhhj hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(hA``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubh to search in}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h.``u64 addr`` the :c:type:`drm_gpuvas` address h](jX )}(h ``u64 addr``h]j^ )}(hjh]hu64 addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h the :c:type:`drm_gpuvas` addressh](hthe }(hj2hhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hj<h]h drm_gpuvas}(hj>hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhj.hMhj2ubh address}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj.hMhjubjR )}(h-``u64 range`` the :c:type:`drm_gpuvas` range h](jX )}(h ``u64 range``h]j^ )}(hjuh]h u64 range}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjsubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjoubjt )}(hhh]h)}(hthe :c:type:`drm_gpuvas` rangeh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvas`h]j^ )}(hjh]h drm_gpuvas}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvasuh1hhjhMhjubh range}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjoubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh at a given }(hjhhhNhNubh)}(h:c:type:`addr`h]j^ )}(hjh]haddr}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j addruh1hhjhMhjubh and with a given }(hjhhhNhNubh)}(h:c:type:`range`h]j^ )}(hj:h]hrange}(hj<hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j rangeuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gpuva_find_prev (C function)c.drm_gpuva_find_prevhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhMubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gpuva_find_prevsbc.drm_gpuva_find_prevasbuh1hhjyhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhMubj)}(hdrm_gpuva_find_prevh]j)}(hjh]hdrm_gpuva_find_prev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjhMubj>)}(h$(struct drm_gpuvm *gpuvm, u64 start)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuva_find_prevasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u64 starth](h)}(hhh]j)}(hu64h]hu64}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjlmodnameN classnameNjj)}j]jc.drm_gpuva_find_prevasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjyhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjhMubah}(h]jpah ](jjeh"]h$]h&]j j )j huh1jhjhMhjrhhubj )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_find_prevasbj drm_gpuvauh1hhjuhMhjubh before the given address}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjrhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(hA``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj)h]hstruct drm_gpuvm *gpuvm}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj'ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj#ubjt )}(hhh]h)}(h$the :c:type:`drm_gpuvm` to search inh](hthe }(hjBhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjLh]h drm_gpuvm}(hjNhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjJubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj>hMhjBubh to search in}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1js hj#ubeh}(h]h ]h"]h$]h&]uh1jQ hj>hMhj ubjR )}(h/``u64 start`` the given GPU VA's start address h](jX )}(h ``u64 start``h]j^ )}(hjh]h u64 start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h the given GPU VA's start addressh]h"the given GPU VA’s start address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh before the GPU VA with given }(hjhhhNhNubh)}(h:c:type:`start`h]j^ )}(hjh]hstart}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j startuh1hhjhMhjubh 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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(h **Return**h]j7 )}(hj<h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 }(hjRhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj\h]h drm_gpuva}(hj^hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjRubh or NULL if none was found}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_gpuva_find_next (C function)c.drm_gpuva_find_nexthNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_gpuva_find_nextsbc.drm_gpuva_find_nextasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gpuva_find_nexth]j)}(hjh]hdrm_gpuva_find_next}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h"(struct drm_gpuvm *gpuvm, u64 end)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj>modnameN classnameNjj)}j]jc.drm_gpuva_find_nextasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 endh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuva_find_nextasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hendh]hend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_find_nextasbj drm_gpuvauh1hhjuhMhjubh after the given address}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j'j( j'j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj+ubjM )}(hhh](jR )}(hA``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to search in h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjPh]hstruct drm_gpuvm *gpuvm}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjNubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjJubjt )}(hhh]h)}(h$the :c:type:`drm_gpuvm` to search inh](hthe }(hjihhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjsh]h drm_gpuvm}(hjuhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjehMhjiubh to search in}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1js hjJubeh}(h]h ]h"]h$]h&]uh1jQ hjehMhjGubjR )}(h+``u64 end`` the given GPU VA's end address h](jX )}(h ``u64 end``h]j^ )}(hjh]hu64 end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjGubeh}(h]h ]h"]h$]h&]uh1jL hj+ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj+ubh)}(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}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh after the GPU VA with given }(hjhhhNhNubh)}(h :c:type:`end`h]j^ )}(hj+h]hend}(hj-hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j enduh1hhj$hMhjubh address.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hMhj+ubh)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj+ubh)}(h **Return**h]j7 )}(hjch]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjaubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj+ubh)}(hDa pointer to the found :c:type:`drm_gpuva` or NULL if none was foundh](ha pointer to the found }(hjyhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjyubh or NULL if none was found}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gpuvm_interval_empty (C function)c.drm_gpuvm_interval_emptyhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gpuvm_interval_emptyh]j)}(hdrm_gpuvm_interval_emptyh]hdrm_gpuvm_interval_empty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj'modnameN classnameNjj)}j]j)}j}jsbc.drm_gpuvm_interval_emptyasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hu64 addrh](h)}(hhh]j)}(hu64h]hu64}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj~modnameN classnameNjj)}j]jAc.drm_gpuvm_interval_emptyasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u64 rangeh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jAc.drm_gpuvm_interval_emptyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrangeh]hrange}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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:525: ./drivers/gpu/drm/drm_gpuvm.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j2j( j2j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj6ubjM )}(hhh](jR )}(hK``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` to check the range for h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj[h]hstruct drm_gpuvm *gpuvm}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjUubjt )}(hhh]h)}(h.the :c:type:`drm_gpuvm` to check the range forh](hthe }(hjthhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj~h]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjphMhjtubh to check the range for}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1js hjUubeh}(h]h ]h"]h$]h&]uh1jQ hjphMhjRubjR )}(h,``u64 addr`` the start address of the range h](jX )}(h ``u64 addr``h]j^ )}(hjh]hu64 addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjRubjR )}(h(``u64 range`` the range of the interval h](jX )}(h ``u64 range``h]j^ )}(hjh]h u64 range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(hthe range of the intervalh]hthe range of the interval}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjRubeh}(h]h ]h"]h$]h&]uh1jL hj6ubh)}(h **Return**h]j7 )}(hj+h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj6ubh)}(h.true if the interval is empty, false otherwiseh]h.true if the interval is empty, false otherwise}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_map (C function)c.drm_gpuva_maphNtauh1jhjHhhhNhNubj)}(hhh](j)}(hevoid drm_gpuva_map (struct drm_gpuvm *gpuvm, struct drm_gpuva *va, const struct drm_gpuva_op_map *op)h]j)}(hdvoid drm_gpuva_map(struct drm_gpuvm *gpuvm, struct drm_gpuva *va, const struct drm_gpuva_op_map *op)h](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMubj)}(h drm_gpuva_maph]j)}(h drm_gpuva_maph]h drm_gpuva_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhj~hMubj>)}(hR(struct drm_gpuvm *gpuvm, struct drm_gpuva *va, const struct drm_gpuva_op_map *op)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_gpuva_mapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgpuvmh]hgpuvm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gpuva *vah](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj?modnameN classnameNjj)}j]jc.drm_gpuva_mapasbuh1hhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvah]hva}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h!const struct drm_gpuva_op_map *oph](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpuva_op_maph]hdrm_gpuva_op_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuva_mapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hoph]hop}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjlhhhj~hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhj~hMubah}(h]jcah ](jjeh"]h$]h&]j j )j huh1jhj~hMhjehhubj )}(hhh]h)}(hPhelper to insert a :c:type:`drm_gpuva` according to a :c:type:`drm_gpuva_op_map`h](hhelper to insert a }(hj+hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj5h]h drm_gpuva}(hj7hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj3ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_mapasbj drm_gpuvauh1hhjuhMhj+ubh according to a }(hj+hhhNhNubh)}(h:c:type:`drm_gpuva_op_map`h]j^ )}(hj]h]hdrm_gpuva_op_map}(hj_hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjjQj drm_gpuva_op_mapuh1hhjuhMhj+ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhj(hhubah}(h]h ]h"]h$]h&]uh1j hjehhhj~hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjHhNhNubj- )}(hXG**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` ``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to insert ``const 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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjM )}(hhh](jR )}(h4``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjh]hstruct drm_gpuvm *gpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(hthe :c:type:`drm_gpuvm`h](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hjh]h drm_gpuvm}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h;``struct drm_gpuva *va`` the :c:type:`drm_gpuva` to insert h](jX )}(h``struct drm_gpuva *va``h]j^ )}(hj h]hstruct drm_gpuva *va}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubjt )}(hhh]h)}(h!the :c:type:`drm_gpuva` to inserth](hthe }(hj$hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj.h]h drm_gpuva}(hj0hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj,ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj hMhj$ubh to insert}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj!ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjubjR )}(h_``const struct drm_gpuva_op_map *op`` the :c:type:`drm_gpuva_op_map` to initialize **va** with h](jX )}(h%``const struct drm_gpuva_op_map *op``h]j^ )}(hjgh]h!const struct drm_gpuva_op_map *op}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjeubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjaubjt )}(hhh]h)}(h8the :c:type:`drm_gpuva_op_map` to initialize **va** withh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva_op_map`h]j^ )}(hjh]hdrm_gpuva_op_map}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_op_mapuh1hhj|hMhjubh to initialize }(hjhhhNhNubj7 )}(h**va**h]hva}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh with}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1js hjaubeh}(h]h ]h"]h$]h&]uh1jQ hj|hMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubh)}(hOInitializes the **va** from the **op** and inserts it into the given **gpuvm**.h](hInitializes the }(hjhhhNhNubj7 )}(h**va**h]hva}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh from the }(hjhhhNhNubj7 )}(h**op**h]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh and inserts it into the given }(hjhhhNhNubj7 )}(h **gpuvm**h]hgpuvm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_remap (C function)c.drm_gpuva_remaphNtauh1jhjHhhhNhNubj)}(hhh](j)}(hjvoid drm_gpuva_remap (struct drm_gpuva *prev, struct drm_gpuva *next, const struct drm_gpuva_op_remap *op)h]j)}(hivoid drm_gpuva_remap(struct drm_gpuva *prev, struct drm_gpuva *next, const struct drm_gpuva_op_remap *op)h](j)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj`hM ubj)}(hdrm_gpuva_remaph]j)}(hdrm_gpuva_remaph]hdrm_gpuva_remap}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNhhhj`hM ubj>)}(hU(struct drm_gpuva *prev, struct drm_gpuva *next, const struct drm_gpuva_op_remap *op)h](jD)}(hstruct drm_gpuva *prevh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jusbc.drm_gpuva_remapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hprevh]hprev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gpuva *nexth](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_gpuvah]h drm_gpuva}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj!modnameN classnameNjj)}j]jc.drm_gpuva_remapasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnexth]hnext}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h#const struct drm_gpuva_op_remap *oph](j)}(hjJh]hconst}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(hdrm_gpuva_op_remaph]hdrm_gpuva_op_remap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_gpuva_remapasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hoph]hop}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjNhhhj`hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjJhhhj`hM ubah}(h]jEah ](jjeh"]h$]h&]j j )j huh1jhj`hM hjGhhubj )}(hhh]h)}(hQhelper to remap a :c:type:`drm_gpuva` according to a :c:type:`drm_gpuva_op_remap`h](hhelper to remap a }(hj hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jc.drm_gpuva_remapasbj drm_gpuvauh1hhjuhMhj ubh according to a }(hj hhhNhNubh)}(h:c:type:`drm_gpuva_op_remap`h]j^ )}(hj?h]hdrm_gpuva_op_remap}(hjAhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj3j drm_gpuva_op_remapuh1hhjuhMhj ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj hhubah}(h]h ]h"]h$]h&]uh1j hjGhhhj`hM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jlj( jlj) j* j+ uh1jhhhjHhNhNubj- )}(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 ``const 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]j7 )}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjtubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjpubjM )}(hhh](jR )}(h```struct drm_gpuva *prev`` the :c:type:`drm_gpuva` to remap when keeping the start of a mapping h](jX )}(h``struct drm_gpuva *prev``h]j^ )}(hjh]hstruct drm_gpuva *prev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubjt )}(hhh]h)}(hDthe :c:type:`drm_gpuva` to remap when keeping the start of a mappingh](hthe }(hjhhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hjh]h drm_gpuva}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhjhM hjubh- to remap when keeping the start of a mapping}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubjR )}(h^``struct drm_gpuva *next`` the :c:type:`drm_gpuva` to remap when keeping the end of a mapping h](jX )}(h``struct drm_gpuva *next``h]j^ )}(hjh]hstruct drm_gpuva *next}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjubjt )}(hhh]h)}(hBthe :c:type:`drm_gpuva` to remap when keeping the end of a mappingh](hthe }(hj hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj h]h drm_gpuva}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj hM hj ubh+ to remap when keeping the end of a mapping}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hM hjubjR )}(hr``const struct drm_gpuva_op_remap *op`` the :c:type:`drm_gpuva_op_remap` to initialize **prev** and **next** with h](jX )}(h'``const struct drm_gpuva_op_remap *op``h]j^ )}(hjM h]h#const struct drm_gpuva_op_remap *op}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjK ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjG ubjt )}(hhh]h)}(hIthe :c:type:`drm_gpuva_op_remap` to initialize **prev** and **next** withh](hthe }(hjf hhhNhNubh)}(h:c:type:`drm_gpuva_op_remap`h]j^ )}(hjp h]hdrm_gpuva_op_remap}(hjr hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjn ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_op_remapuh1hhjb hM hjf ubh to initialize }(hjf hhhNhNubj7 )}(h**prev**h]hprev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjf ubh and }(hjf hhhNhNubj7 )}(h**next**h]hnext}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjf ubh with}(hjf hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb hM hjc ubah}(h]h ]h"]h$]h&]uh1js hjG ubeh}(h]h ]h"]h$]h&]uh1jQ hjb hM hjubeh}(h]h ]h"]h$]h&]uh1jL hjpubh)}(h**Description**h]j7 )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjpubh)}(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^ )}(hj h]h drm_gpuva}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj ubh and remaps it using }(hj hhhNhNubj7 )}(h**prev**h]hprev}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubh and/or }(hj hhhNhNubj7 )}(h**next**h]hnext}(hj#!hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj !hM hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_unmap (C function)c.drm_gpuva_unmaphNtauh1jhjHhhhNhNubj)}(hhh](j)}(h:void drm_gpuva_unmap (const struct drm_gpuva_op_unmap *op)h]j)}(h9void drm_gpuva_unmap(const struct drm_gpuva_op_unmap *op)h](j)}(hvoidh]hvoid}(hj[!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW!hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM( ubj)}(h h]h }(hjj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW!hhhji!hM( ubj)}(hdrm_gpuva_unmaph]j)}(hdrm_gpuva_unmaph]hdrm_gpuva_unmap}(hj|!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjW!hhhji!hM( ubj>)}(h%(const struct drm_gpuva_op_unmap *op)h]jD)}(h#const struct drm_gpuva_op_unmap *oph](j)}(hjJh]hconst}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hj? h]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(hdrm_gpuva_op_unmaph]hdrm_gpuva_op_unmap}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj!modnameN classnameNjj)}j]j)}j}j~!sbc.drm_gpuva_unmapasbuh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hoph]hop}(hj "hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj!ubah}(h]h ]h"]h$]h&]jjuh1j=hjW!hhhji!hM( ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjS!hhhji!hM( ubah}(h]jN!ah ](jjeh"]h$]h&]j j )j huh1jhji!hM( hjP!hhubj )}(hhh]h)}(hRhelper to remove a :c:type:`drm_gpuva` according to a :c:type:`drm_gpuva_op_unmap`h](hhelper to remove a }(hj6"hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj@"h]h drm_gpuva}(hjB"hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj>"ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j!c.drm_gpuva_unmapasbj drm_gpuvauh1hhjuhMhj6"ubh according to a }(hj6"hhhNhNubh)}(h:c:type:`drm_gpuva_op_unmap`h]j^ )}(hjh"h]hdrm_gpuva_op_unmap}(hjj"hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjf"ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj\"j drm_gpuva_op_unmapuh1hhjuhMhj6"ubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM( hj3"hhubah}(h]h ]h"]h$]h&]uh1j hjP!hhhji!hM( ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j"j( j"j) j* j+ uh1jhhhjHhNhNubj- )}(h**Parameters** ``const 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]j7 )}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj"ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM, hj"ubjM )}(hhh]jR )}(hv``const struct drm_gpuva_op_unmap *op`` the :c:type:`drm_gpuva_op_unmap` specifying the :c:type:`drm_gpuva` to remove h](jX )}(h'``const struct drm_gpuva_op_unmap *op``h]j^ )}(hj"h]h#const struct drm_gpuva_op_unmap *op}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM* hj"ubjt )}(hhh]h)}(hMthe :c:type:`drm_gpuva_op_unmap` specifying the :c:type:`drm_gpuva` to removeh](hthe }(hj"hhhNhNubh)}(h:c:type:`drm_gpuva_op_unmap`h]j^ )}(hj"h]hdrm_gpuva_op_unmap}(hj"hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj"ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_op_unmapuh1hhj"hM* hj"ubh specifying the }(hj"hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj#h]h drm_gpuva}(hj#hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhj"hM* hj"ubh to remove}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hM* hj"ubah}(h]h ]h"]h$]h&]uh1js hj"ubeh}(h]h ]h"]h$]h&]uh1jQ hj"hM* hj"ubah}(h]h ]h"]h$]h&]uh1jL hj"ubh)}(h**Description**h]j7 )}(hj?#h]h Description}(hjA#hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj=#ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM, hj"ubh)}(hQRemoves the :c:type:`drm_gpuva` associated with the :c:type:`drm_gpuva_op_unmap`.h](h Removes the }(hjU#hhhNhNubh)}(h:c:type:`drm_gpuva`h]j^ )}(hj_#h]h drm_gpuva}(hja#hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj]#ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvauh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM+ hjU#ubh associated with the }(hjU#hhhNhNubh)}(h:c:type:`drm_gpuva_op_unmap`h]j^ )}(hj#h]hdrm_gpuva_op_unmap}(hj#hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj#ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_op_unmapuh1hhj|#hM+ hjU#ubh.}(hjU#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|#hM+ hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_sm_map (C function)c.drm_gpuvm_sm_maphNtauh1jhjHhhhNhNubj)}(hhh](j)}(h_int drm_gpuvm_sm_map (struct drm_gpuvm *gpuvm, void *priv, const struct drm_gpuvm_map_req *req)h]j)}(h^int drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, void *priv, const struct drm_gpuvm_map_req *req)h](j)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMW ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMW ubj)}(hdrm_gpuvm_sm_maph]j)}(hdrm_gpuvm_sm_maph]hdrm_gpuvm_sm_map}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj#hMW ubj>)}(hJ(struct drm_gpuvm *gpuvm, void *priv, const struct drm_gpuvm_map_req *req)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj%$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"$ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj'$modnameN classnameNjj)}j]j)}j}j#sbc.drm_gpuvm_sm_mapasbuh1hhj$ubj)}(h h]h }(hjE$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hjS$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hgpuvmh]hgpuvm}(hj`$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj#ubjD)}(h void *privh](j)}(hvoidh]hvoid}(hjy$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju$ubj)}(hprivh]hpriv}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj#ubjD)}(h#const struct drm_gpuvm_map_req *reqh](j)}(hjJh]hconst}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hj? h]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(hdrm_gpuvm_map_reqh]hdrm_gpuvm_map_req}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj$modnameN classnameNjj)}j]jA$c.drm_gpuvm_sm_mapasbuh1hhj$ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hreqh]hreq}(hj-%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj#ubeh}(h]h ]h"]h$]h&]jjuh1j=hj#hhhj#hMW ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj#hMW ubah}(h]j#ah ](jjeh"]h$]h&]j j )j huh1jhj#hMW hj#hhubj )}(hhh]h)}(h2calls the :c:type:`drm_gpuva_op` split/merge stepsh](h calls the }(hjW%hhhNhNubh)}(h:c:type:`drm_gpuva_op`h]j^ )}(hja%h]h drm_gpuva_op}(hjc%hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj_%ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jA$c.drm_gpuvm_sm_mapasbj drm_gpuva_opuh1hhjuhMhjW%ubh split/merge steps}(hjW%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMW hjT%hhubah}(h]h ]h"]h$]h&]uh1j hj#hhhj#hMW ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j%j( j%j) j* j+ uh1jhhhjHhNhNubj- )}(hXy**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``void *priv`` pointer to a driver private data structure ``const struct drm_gpuvm_map_req *req`` ptr to struct drm_gpuvm_map_req **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]j7 )}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj%ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM[ hj%ubjM )}(hhh](jR )}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj%h]hstruct drm_gpuvm *gpuvm}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj%ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMX hj%ubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj%ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj%hMX hj%ubh representing the GPU VA space}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hMX hj%ubah}(h]h ]h"]h$]h&]uh1js hj%ubeh}(h]h ]h"]h$]h&]uh1jQ hj%hMX hj%ubjR )}(h:``void *priv`` pointer to a driver private data structure h](jX )}(h``void *priv``h]j^ )}(hj&h]h void *priv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMY hj&ubjt )}(hhh]h)}(h*pointer to a driver private data structureh]h*pointer to a driver private data structure}(hj5&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1&hMY hj2&ubah}(h]h ]h"]h$]h&]uh1js hj&ubeh}(h]h ]h"]h$]h&]uh1jQ hj1&hMY hj%ubjR )}(hH``const struct drm_gpuvm_map_req *req`` ptr to struct drm_gpuvm_map_req h](jX )}(h'``const struct drm_gpuvm_map_req *req``h]j^ )}(hjU&h]h#const struct drm_gpuvm_map_req *req}(hjW&hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjS&ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMZ hjO&ubjt )}(hhh]h)}(hptr to struct drm_gpuvm_map_reqh]hptr to struct drm_gpuvm_map_req}(hjn&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj&hMZ hjk&ubah}(h]h ]h"]h$]h&]uh1js hjO&ubeh}(h]h ]h"]h$]h&]uh1jQ hjj&hMZ hj%ubeh}(h]h ]h"]h$]h&]uh1jL hj%ubh)}(h**Description**h]j7 )}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 ](j j! c-typeeh"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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^ )}(hj&h]hdrm_gpuvm_sm_unmap}(hj&hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_unmapuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 ](j j! c-typeeh"]h$]h&]uh1j] hj'ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j 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^ )}(hj)'h]h drm_gpuvm}(hj+'hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj''ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j 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.}(hjP'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMh 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.}(hj_'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMl hj%ubh)}(h **Return**h]j7 )}(hjp'h]hReturn}(hjr'hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjn'ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMp hj%ubh)}(h%0 on success or a negative error codeh]h%0 on success or a negative error code}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMq hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuvm_sm_unmap (C function)c.drm_gpuvm_sm_unmaphNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hM ubj)}(hdrm_gpuvm_sm_unmaph]j)}(hdrm_gpuvm_sm_unmaph]hdrm_gpuvm_sm_unmap}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj'hM ubj>)}(hB(struct drm_gpuvm *gpuvm, void *priv, u64 req_addr, u64 req_range)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj(modnameN classnameNjj)}j]j)}j}j'sbc.drm_gpuvm_sm_unmapasbuh1hhj'ubj)}(h h]h }(hj0(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]h*}(hj>(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hgpuvmh]hgpuvm}(hjK(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj'ubjD)}(h void *privh](j)}(hvoidh]hvoid}(hjd(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`(ubj)}(h h]h }(hjr(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`(ubj)}(hprivh]hpriv}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj'ubjD)}(h u64 req_addrh](h)}(hhh]j)}(hu64h]hu64}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj(modnameN classnameNjj)}j]j,(c.drm_gpuvm_sm_unmapasbuh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hreq_addrh]hreq_addr}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj'ubjD)}(h u64 req_rangeh](h)}(hhh]j)}(hu64h]hu64}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj(modnameN classnameNjj)}j]j,(c.drm_gpuvm_sm_unmapasbuh1hhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h req_rangeh]h req_range}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj'ubeh}(h]h ]h"]h$]h&]jjuh1j=hj'hhhj'hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj'hhhj'hM ubah}(h]j'ah ](jjeh"]h$]h&]j j )j huh1jhj'hM hj'hhubj )}(hhh]h)}(h3calls the :c:type:`drm_gpuva_ops` to split on unmaph](h calls the }(hjG)hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjQ)h]h drm_gpuva_ops}(hjS)hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjO)ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j,(c.drm_gpuvm_sm_unmapasbj drm_gpuva_opsuh1hhjuhMhjG)ubh to split on unmap}(hjG)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjD)hhubah}(h]h ]h"]h$]h&]uh1j hj'hhhj'hM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j)j( j)j) j* j+ uh1jhhhjHhNhNubj- )}(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 existing 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]j7 )}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj)ubjM )}(hhh](jR )}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj)h]hstruct drm_gpuvm *gpuvm}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj)ubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj)hM hj)ubh representing the GPU VA space}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hM hj)ubah}(h]h ]h"]h$]h&]uh1js hj)ubeh}(h]h ]h"]h$]h&]uh1jQ hj)hM hj)ubjR )}(h:``void *priv`` pointer to a driver private data structure h](jX )}(h``void *priv``h]j^ )}(hj *h]h void *priv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj *ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj*ubjt )}(hhh]h)}(h*pointer to a driver private data structureh]h*pointer to a driver private data structure}(hj%*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!*hM hj"*ubah}(h]h ]h"]h$]h&]uh1js hj*ubeh}(h]h ]h"]h$]h&]uh1jQ hj!*hM hj)ubjR )}(h9``u64 req_addr`` the start address of the range to unmap h](jX )}(h``u64 req_addr``h]j^ )}(hjE*h]h u64 req_addr}(hjG*hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjC*ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj?*ubjt )}(hhh]h)}(h'the start address of the range to unmaph]h'the start address of the range to unmap}(hj^*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ*hM hj[*ubah}(h]h ]h"]h$]h&]uh1js hj?*ubeh}(h]h ]h"]h$]h&]uh1jQ hjZ*hM hj)ubjR )}(h5``u64 req_range`` the range of the mappings to unmap h](jX )}(h``u64 req_range``h]j^ )}(hj~*h]h u64 req_range}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj|*ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjx*ubjt )}(hhh]h)}(h"the range of the mappings to unmaph]h"the range of the mappings to unmap}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM hj*ubah}(h]h ]h"]h$]h&]uh1js hjx*ubeh}(h]h ]h"]h$]h&]uh1jQ hj*hM hj)ubeh}(h]h ]h"]h$]h&]uh1jL hj)ubh)}(h**Description**h]j7 )}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj*ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 operations to unmap and, if required, split existing mappings.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 ](j j! c-typeeh"]h$]h&]uh1j] hj*ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj*ubhj to call back into the driver providing the operations to unmap and, if required, split existing mappings.}(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_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^ )}(hj +h]hdrm_gpuvm_sm_map}(hj +hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj +ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_sm_mapuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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}(hj1+hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj-+ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j 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^ )}(hjR+h]h drm_gpuvm}(hjT+hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjP+ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j 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 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.}(hjy+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM 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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj)ubh)}(h **Return**h]j7 )}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gpuvm_sm_map_exec_lock (C function)c.drm_gpuvm_sm_map_exec_lockhNtauh1jhjHhhhNhNubj)}(hhh](j)}(hint drm_gpuvm_sm_map_exec_lock (struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences, struct drm_gpuvm_map_req *req)h]j)}(hint drm_gpuvm_sm_map_exec_lock(struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences, struct drm_gpuvm_map_req *req)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj+hM ubj)}(hdrm_gpuvm_sm_map_exec_lockh]j)}(hdrm_gpuvm_sm_map_exec_lockh]hdrm_gpuvm_sm_map_exec_lock}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hM ubj>)}(hh(struct drm_gpuvm *gpuvm, struct drm_exec *exec, unsigned int num_fences, struct drm_gpuvm_map_req *req)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj(,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj9,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj;,modnameN classnameNjj)}j]j)}j}j,sbc.drm_gpuvm_sm_map_exec_lockasbuh1hhj,ubj)}(h h]h }(hjY,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hjg,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hgpuvmh]hgpuvm}(hjt,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj,ubjD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj,modnameN classnameNjj)}j]jU,c.drm_gpuvm_sm_map_exec_lockasbuh1hhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hexech]hexec}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj,ubjD)}(hunsigned int num_fencesh](j)}(hunsignedh]hunsigned}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj -hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj'-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h num_fencesh]h num_fences}(hj5-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj,ubjD)}(hstruct drm_gpuvm_map_req *reqh](j)}(hj? h]hstruct}(hjN-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ-ubj)}(h h]h }(hj[-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ-ubh)}(hhh]j)}(hdrm_gpuvm_map_reqh]hdrm_gpuvm_map_req}(hjl-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji-ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjn-modnameN classnameNjj)}j]jU,c.drm_gpuvm_sm_map_exec_lockasbuh1hhjJ-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ-ubj)}(hreqh]hreq}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj,ubeh}(h]h ]h"]h$]h&]jjuh1j=hj+hhhj+hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhj+hM ubah}(h]j+ah ](jjeh"]h$]h&]j j )j huh1jhj+hM hj+hhubj )}(hhh]h)}(h1locks the objects touched by a drm_gpuvm_sm_map()h]h1locks the objects touched by a drm_gpuvm_sm_map()}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj-hhubah}(h]h ]h"]h$]h&]uh1j hj+hhhj+hM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j-j( j-j) j* j+ uh1jhhhjHhNhNubj- )}(hX}**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``struct drm_exec *exec`` the :c:type:`drm_exec` locking context ``unsigned int num_fences`` for newly mapped objects, the # of fences to reserve ``struct drm_gpuvm_map_req *req`` ptr to drm_gpuvm_map_req struct **Description** This function locks (drm_exec_lock_obj()) objects that will be unmapped/ remapped, and locks+prepares (drm_exec_prepare_object()) objects that will be newly mapped. The expected usage is:: vm_bind { struct drm_exec exec; // IGNORE_DUPLICATES is required, INTERRUPTIBLE_WAIT is recommended: drm_exec_init(&exec, IGNORE_DUPLICATES | INTERRUPTIBLE_WAIT, 0); drm_exec_until_all_locked (&exec) { for_each_vm_bind_operation { switch (op->op) { case DRIVER_OP_UNMAP: ret = drm_gpuvm_sm_unmap_exec_lock(gpuvm, &exec, op->addr, op->range); break; case DRIVER_OP_MAP: ret = drm_gpuvm_sm_map_exec_lock(gpuvm, &exec, num_fences, &req); break; } drm_exec_retry_on_contention(&exec); if (ret) return ret; } } } This enables all locking to be performed before the driver begins modifying the VM. This is safe to do in the case of overlapping DRIVER_VM_BIND_OPs, where an earlier op can alter the sequence of steps generated for a later op, because the later altered step will involve the same GEM object(s) already seen in the earlier locking step. For example: 1) An earlier driver DRIVER_OP_UNMAP op removes the need for a DRM_GPUVA_OP_REMAP/UNMAP step. This is safe because we've already locked the GEM object in the earlier DRIVER_OP_UNMAP op. 2) An earlier DRIVER_OP_MAP op overlaps with a later DRIVER_OP_MAP/UNMAP op, introducing a DRM_GPUVA_OP_REMAP/UNMAP that wouldn't have been required without the earlier DRIVER_OP_MAP. This is safe because we've already locked the GEM object in the earlier DRIVER_OP_MAP step. **Return** 0 on success or a negative error codeh](h)}(h**Parameters**h]j7 )}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj-ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj-ubjM )}(hhh](jR )}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj.h]hstruct drm_gpuvm *gpuvm}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj .ubjt )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hj).hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj3.h]h drm_gpuvm}(hj5.hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj1.ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj%.hM hj).ubh representing the GPU VA space}(hj).hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%.hM hj&.ubah}(h]h ]h"]h$]h&]uh1js hj .ubeh}(h]h ]h"]h$]h&]uh1jQ hj%.hM hj.ubjR )}(hA``struct drm_exec *exec`` the :c:type:`drm_exec` locking context h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjl.h]hstruct drm_exec *exec}(hjn.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjj.ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjf.ubjt )}(hhh]h)}(h&the :c:type:`drm_exec` locking contexth](hthe }(hj.hhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hj.h]hdrm_exec}(hj.hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhj.hM hj.ubh locking context}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hM hj.ubah}(h]h ]h"]h$]h&]uh1js hjf.ubeh}(h]h ]h"]h$]h&]uh1jQ hj.hM hj.ubjR )}(hQ``unsigned int num_fences`` for newly mapped objects, the # of fences to reserve h](jX )}(h``unsigned int num_fences``h]j^ )}(hj.h]hunsigned int num_fences}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj.ubjt )}(hhh]h)}(h4for newly mapped objects, the # of fences to reserveh]h4for newly mapped objects, the # of fences to reserve}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hM hj.ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj.hM hj.ubjR )}(hB``struct drm_gpuvm_map_req *req`` ptr to drm_gpuvm_map_req struct h](jX )}(h!``struct drm_gpuvm_map_req *req``h]j^ )}(hj/h]hstruct drm_gpuvm_map_req *req}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj.ubjt )}(hhh]h)}(hptr to drm_gpuvm_map_req structh]hptr to drm_gpuvm_map_req struct}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM hj/ubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hj/hM hj.ubeh}(h]h ]h"]h$]h&]uh1jL hj-ubh)}(h**Description**h]j7 )}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:/ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj-ubh)}(hThis function locks (drm_exec_lock_obj()) objects that will be unmapped/ remapped, and locks+prepares (drm_exec_prepare_object()) objects that will be newly mapped.h]hThis function locks (drm_exec_lock_obj()) objects that will be unmapped/ remapped, and locks+prepares (drm_exec_prepare_object()) objects that will be newly mapped.}(hjR/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj-ubh)}(hThe expected usage is::h]hThe expected usage is:}(hja/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj-ubj )}(hXvm_bind { struct drm_exec exec; // IGNORE_DUPLICATES is required, INTERRUPTIBLE_WAIT is recommended: drm_exec_init(&exec, IGNORE_DUPLICATES | INTERRUPTIBLE_WAIT, 0); drm_exec_until_all_locked (&exec) { for_each_vm_bind_operation { switch (op->op) { case DRIVER_OP_UNMAP: ret = drm_gpuvm_sm_unmap_exec_lock(gpuvm, &exec, op->addr, op->range); break; case DRIVER_OP_MAP: ret = drm_gpuvm_sm_map_exec_lock(gpuvm, &exec, num_fences, &req); break; } drm_exec_retry_on_contention(&exec); if (ret) return ret; } } }h]hXvm_bind { struct drm_exec exec; // IGNORE_DUPLICATES is required, INTERRUPTIBLE_WAIT is recommended: drm_exec_init(&exec, IGNORE_DUPLICATES | INTERRUPTIBLE_WAIT, 0); drm_exec_until_all_locked (&exec) { for_each_vm_bind_operation { switch (op->op) { case DRIVER_OP_UNMAP: ret = drm_gpuvm_sm_unmap_exec_lock(gpuvm, &exec, op->addr, op->range); break; case DRIVER_OP_MAP: ret = drm_gpuvm_sm_map_exec_lock(gpuvm, &exec, num_fences, &req); break; } drm_exec_retry_on_contention(&exec); if (ret) return ret; } } }}hjp/sbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj-ubh)}(hX_This enables all locking to be performed before the driver begins modifying the VM. This is safe to do in the case of overlapping DRIVER_VM_BIND_OPs, where an earlier op can alter the sequence of steps generated for a later op, because the later altered step will involve the same GEM object(s) already seen in the earlier locking step. For example:h]hX_This enables all locking to be performed before the driver begins modifying the VM. This is safe to do in the case of overlapping DRIVER_VM_BIND_OPs, where an earlier op can alter the sequence of steps generated for a later op, because the later altered step will involve the same GEM object(s) already seen in the earlier locking step. For example:}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj-ubj~A)}(hhh](j)}(hAn earlier driver DRIVER_OP_UNMAP op removes the need for a DRM_GPUVA_OP_REMAP/UNMAP step. This is safe because we've already locked the GEM object in the earlier DRIVER_OP_UNMAP op. h]h)}(hAn earlier driver DRIVER_OP_UNMAP op removes the need for a DRM_GPUVA_OP_REMAP/UNMAP step. This is safe because we've already locked the GEM object in the earlier DRIVER_OP_UNMAP op.h]hAn earlier driver DRIVER_OP_UNMAP op removes the need for a DRM_GPUVA_OP_REMAP/UNMAP step. This is safe because we’ve already locked the GEM object in the earlier DRIVER_OP_UNMAP op.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubj)}(hXAn earlier DRIVER_OP_MAP op overlaps with a later DRIVER_OP_MAP/UNMAP op, introducing a DRM_GPUVA_OP_REMAP/UNMAP that wouldn't have been required without the earlier DRIVER_OP_MAP. This is safe because we've already locked the GEM object in the earlier DRIVER_OP_MAP step. h]h)}(hXAn earlier DRIVER_OP_MAP op overlaps with a later DRIVER_OP_MAP/UNMAP op, introducing a DRM_GPUVA_OP_REMAP/UNMAP that wouldn't have been required without the earlier DRIVER_OP_MAP. This is safe because we've already locked the GEM object in the earlier DRIVER_OP_MAP step.h]hXAn earlier DRIVER_OP_MAP op overlaps with a later DRIVER_OP_MAP/UNMAP op, introducing a DRM_GPUVA_OP_REMAP/UNMAP that wouldn’t have been required without the earlier DRIVER_OP_MAP. This is safe because we’ve already locked the GEM object in the earlier DRIVER_OP_MAP step.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]jFDjGDjHDhjIDjuh1j}Ahj-ubh)}(h **Return**h]j7 )}(hj/h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj/ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_gpuvm_sm_unmap_exec_lock (C function)c.drm_gpuvm_sm_unmap_exec_lockhNtauh1jhjHhhhNhNubj)}(hhh](j)}(hnint drm_gpuvm_sm_unmap_exec_lock (struct drm_gpuvm *gpuvm, struct drm_exec *exec, u64 req_addr, u64 req_range)h]j)}(hmint drm_gpuvm_sm_unmap_exec_lock(struct drm_gpuvm *gpuvm, struct drm_exec *exec, u64 req_addr, u64 req_range)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 0hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 0hhhj0hM ubj)}(hdrm_gpuvm_sm_unmap_exec_lockh]j)}(hdrm_gpuvm_sm_unmap_exec_lockh]hdrm_gpuvm_sm_unmap_exec_lock}(hj10hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj 0hhhj0hM ubj>)}(hM(struct drm_gpuvm *gpuvm, struct drm_exec *exec, u64 req_addr, u64 req_range)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjM0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI0ubj)}(h h]h }(hjZ0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI0ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjk0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh0ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjm0modnameN classnameNjj)}j]j)}j}j30sbc.drm_gpuvm_sm_unmap_exec_lockasbuh1hhjI0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI0ubj)}(hgpuvmh]hgpuvm}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjE0ubjD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj0modnameN classnameNjj)}j]j0c.drm_gpuvm_sm_unmap_exec_lockasbuh1hhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hexech]hexec}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjE0ubjD)}(h u64 req_addrh](h)}(hhh]j)}(hu64h]hu64}(hj21hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/1ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj41modnameN classnameNjj)}j]j0c.drm_gpuvm_sm_unmap_exec_lockasbuh1hhj+1ubj)}(h h]h }(hjP1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+1ubj)}(hreq_addrh]hreq_addr}(hj^1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjE0ubjD)}(h u64 req_rangeh](h)}(hhh]j)}(hu64h]hu64}(hjz1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw1ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj|1modnameN classnameNjj)}j]j0c.drm_gpuvm_sm_unmap_exec_lockasbuh1hhjs1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs1ubj)}(h req_rangeh]h req_range}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjE0ubeh}(h]h ]h"]h$]h&]jjuh1j=hj 0hhhj0hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhj0hM ubah}(h]j0ah ](jjeh"]h$]h&]j j )j huh1jhj0hM hj0hhubj )}(hhh]h)}(h1locks the objects touched by drm_gpuvm_sm_unmap()h]h1locks the objects touched by drm_gpuvm_sm_unmap()}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1hhubah}(h]h ]h"]h$]h&]uh1j hj0hhhj0hM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j1j( j1j) j* j+ uh1jhhhjHhNhNubj- )}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``struct drm_exec *exec`` the :c:type:`drm_exec` locking context ``u64 req_addr`` the start address of the range to unmap ``u64 req_range`` the range of the mappings to unmap **Description** This function locks (drm_exec_lock_obj()) objects that will be unmapped/ remapped by drm_gpuvm_sm_unmap(). See drm_gpuvm_sm_map_exec_lock() for expected usage. **Return** 0 on success or a negative error codeh](h)}(h**Parameters**h]j7 )}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1ubjM )}(hhh](jR )}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj2h]hstruct drm_gpuvm *gpuvm}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj 2ubjt )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hj*2hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj42h]h drm_gpuvm}(hj62hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj22ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj&2hM hj*2ubh representing the GPU VA space}(hj*2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&2hM hj'2ubah}(h]h ]h"]h$]h&]uh1js hj 2ubeh}(h]h ]h"]h$]h&]uh1jQ hj&2hM hj2ubjR )}(hA``struct drm_exec *exec`` the :c:type:`drm_exec` locking context h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjm2h]hstruct drm_exec *exec}(hjo2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjk2ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjg2ubjt )}(hhh]h)}(h&the :c:type:`drm_exec` locking contexth](hthe }(hj2hhhNhNubh)}(h:c:type:`drm_exec`h]j^ )}(hj2h]hdrm_exec}(hj2hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_execuh1hhj2hM hj2ubh locking context}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hM hj2ubah}(h]h ]h"]h$]h&]uh1js hjg2ubeh}(h]h ]h"]h$]h&]uh1jQ hj2hM hj2ubjR )}(h9``u64 req_addr`` the start address of the range to unmap h](jX )}(h``u64 req_addr``h]j^ )}(hj2h]h u64 req_addr}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj2ubjt )}(hhh]h)}(h'the start address of the range to unmaph]h'the start address of the range to unmap}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM hj2ubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hj2hM hj2ubjR )}(h5``u64 req_range`` the range of the mappings to unmap h](jX )}(h``u64 req_range``h]j^ )}(hj3h]h u64 req_range}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj3ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj2ubjt )}(hhh]h)}(h"the range of the mappings to unmaph]h"the range of the mappings to unmap}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM hj3ubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hj3hM hj2ubeh}(h]h ]h"]h$]h&]uh1jL hj1ubh)}(h**Description**h]j7 )}(hj=3h]h Description}(hj?3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;3ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1ubh)}(hjThis function locks (drm_exec_lock_obj()) objects that will be unmapped/ remapped by drm_gpuvm_sm_unmap().h]hjThis function locks (drm_exec_lock_obj()) objects that will be unmapped/ remapped by drm_gpuvm_sm_unmap().}(hjS3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1ubh)}(h4See drm_gpuvm_sm_map_exec_lock() for expected usage.h]h4See drm_gpuvm_sm_map_exec_lock() for expected usage.}(hjb3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1ubh)}(h **Return**h]j7 )}(hjs3h]hReturn}(hju3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjq3ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1ubh)}(h%0 on success or a negative error codeh]h%0 on success or a negative error code}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_gpuvm_sm_map_ops_create (C function)c.drm_gpuvm_sm_map_ops_createhNtauh1jhjHhhhNhNubj)}(hhh](j)}(hqstruct drm_gpuva_ops * drm_gpuvm_sm_map_ops_create (struct drm_gpuvm *gpuvm, const struct drm_gpuvm_map_req *req)h]j)}(hostruct drm_gpuva_ops *drm_gpuvm_sm_map_ops_create(struct drm_gpuvm *gpuvm, const struct drm_gpuvm_map_req *req)h](j)}(hj? h]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hM ubh)}(hhh]j)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj3modnameN classnameNjj)}j]j)}j}drm_gpuvm_sm_map_ops_createsbc.drm_gpuvm_sm_map_ops_createasbuh1hhj3hhhj3hM ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hM ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hM ubj)}(hdrm_gpuvm_sm_map_ops_createh]j)}(hj3h]hdrm_gpuvm_sm_map_ops_create}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhj3hM ubj>)}(h>(struct drm_gpuvm *gpuvm, const struct drm_gpuvm_map_req *req)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj24hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.4ubj)}(h h]h }(hj?4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.4ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjP4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM4ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjR4modnameN classnameNjj)}j]j3c.drm_gpuvm_sm_map_ops_createasbuh1hhj.4ubj)}(h h]h }(hjn4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.4ubj)}(hjh]h*}(hj|4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.4ubj)}(hgpuvmh]hgpuvm}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*4ubjD)}(h#const struct drm_gpuvm_map_req *reqh](j)}(hjJh]hconst}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hj? h]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j)}(hdrm_gpuvm_map_reqh]hdrm_gpuvm_map_req}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj4modnameN classnameNjj)}j]j3c.drm_gpuvm_sm_map_ops_createasbuh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hreqh]hreq}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*4ubeh}(h]h ]h"]h$]h&]jjuh1j=hj3hhhj3hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj3hhhj3hM ubah}(h]j3ah ](jjeh"]h$]h&]j j )j huh1jhj3hM hj3hhubj )}(hhh]h)}(h6creates the :c:type:`drm_gpuva_ops` to split and mergeh](h creates the }(hj>5hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjH5h]h drm_gpuva_ops}(hjJ5hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjF5ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j3c.drm_gpuvm_sm_map_ops_createasbj drm_gpuva_opsuh1hhjuhMhj>5ubh to split and merge}(hj>5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj;5hhubah}(h]h ]h"]h$]h&]uh1j hj3hhhj3hM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j~5j( j~5j) j* j+ uh1jhhhjHhNhNubj- )}(hXj**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``const struct drm_gpuvm_map_req *req`` map request arguments **Description** This function creates a list of operations to perform splitting and merging of existing 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 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. 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]j7 )}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj5ubjM )}(hhh](jR )}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj5h]hstruct drm_gpuvm *gpuvm}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj5ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj5ubjt )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hj5hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj5h]h drm_gpuvm}(hj5hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj5ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj5hM hj5ubh representing the GPU VA space}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hM hj5ubah}(h]h ]h"]h$]h&]uh1js hj5ubeh}(h]h ]h"]h$]h&]uh1jQ hj5hM hj5ubjR )}(h>``const struct drm_gpuvm_map_req *req`` map request arguments h](jX )}(h'``const struct drm_gpuvm_map_req *req``h]j^ )}(hj6h]h#const struct drm_gpuvm_map_req *req}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj5ubjt )}(hhh]h)}(hmap request argumentsh]hmap request arguments}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM hj6ubah}(h]h ]h"]h$]h&]uh1js hj5ubeh}(h]h ]h"]h$]h&]uh1jQ hj6hM hj5ubeh}(h]h ]h"]h$]h&]uh1jL hj5ubh)}(h**Description**h]j7 )}(hj>6h]h Description}(hj@6hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj<6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj5ubh)}(hThis function creates a list of operations to perform splitting and merging of existing mapping(s) with the newly requested one.h]hThis function creates a list of operations to perform splitting and merging of existing mapping(s) with the newly requested one.}(hjT6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj5ubh)}(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 in the exact same way.h](hThe list can be iterated with }(hjc6hhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j^ )}(hjm6h]hdrm_gpuva_for_each_op}(hjo6hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjk6ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjc6ubh 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 in the exact same way.}(hjc6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hM hj5ubh)}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj5ubh)}(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 }(hj6hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj6h]h drm_gpuvm}(hj6hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj6ubhw’s view of the GPU VA space. The previously obtained operations must be either processed or abandoned. To update the }(hj6hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj6h]h drm_gpuvm}(hj6hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj6hM hj6ubh’s view of the GPU VA space drm_gpuva_insert(), drm_gpuva_destroy_locked() and/or drm_gpuva_destroy_unlocked() should be used.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hM hj5ubh)}(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 }(hj6hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hj7h]h drm_gpuva_ops}(hj7hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj6ubh, they must be freed with }(hj6hhhNhNubh)}(h:c:type:`drm_gpuva_ops_free`h]j^ )}(hj'7h]hdrm_gpuva_ops_free}(hj)7hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj%7ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_ops_freeuh1hhj 7hM hj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj 7hM hj5ubh)}(h **Return**h]j7 )}(hjP7h]hReturn}(hjR7hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjN7ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj5ubh)}(hJa pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](ha pointer to the }(hjf7hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjp7h]h drm_gpuva_ops}(hjr7hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjn7ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjf7ubh" on success, an ERR_PTR on failure}(hjf7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hM hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_gpuvm_madvise_ops_create (C function)c.drm_gpuvm_madvise_ops_createhNtauh1jhjHhhhNhNubj)}(hhh](j)}(hrstruct drm_gpuva_ops * drm_gpuvm_madvise_ops_create (struct drm_gpuvm *gpuvm, const struct drm_gpuvm_map_req *req)h]j)}(hpstruct drm_gpuva_ops *drm_gpuvm_madvise_ops_create(struct drm_gpuvm *gpuvm, const struct drm_gpuvm_map_req *req)h](j)}(hj? h]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hM ubh)}(hhh]j)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj7modnameN classnameNjj)}j]j)}j}drm_gpuvm_madvise_ops_createsbc.drm_gpuvm_madvise_ops_createasbuh1hhj7hhhj7hM ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hM ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hM ubj)}(hdrm_gpuvm_madvise_ops_createh]j)}(hj7h]hdrm_gpuvm_madvise_ops_create}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhj7hM ubj>)}(h>(struct drm_gpuvm *gpuvm, const struct drm_gpuvm_map_req *req)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj28hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.8ubj)}(h h]h }(hj?8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.8ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjP8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM8ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjR8modnameN classnameNjj)}j]j7c.drm_gpuvm_madvise_ops_createasbuh1hhj.8ubj)}(h h]h }(hjn8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.8ubj)}(hjh]h*}(hj|8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.8ubj)}(hgpuvmh]hgpuvm}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*8ubjD)}(h#const struct drm_gpuvm_map_req *reqh](j)}(hjJh]hconst}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hj? h]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(hdrm_gpuvm_map_reqh]hdrm_gpuvm_map_req}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj8modnameN classnameNjj)}j]j7c.drm_gpuvm_madvise_ops_createasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hreqh]hreq}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*8ubeh}(h]h ]h"]h$]h&]jjuh1j=hj7hhhj7hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhj7hM ubah}(h]j7ah ](jjeh"]h$]h&]j j )j huh1jhj7hM hj7hhubj )}(hhh]h)}(h,creates the :c:type:`drm_gpuva_ops` to splith](h creates the }(hj>9hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjH9h]h drm_gpuva_ops}(hjJ9hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjF9ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j7c.drm_gpuvm_madvise_ops_createasbj drm_gpuva_opsuh1hhjuhMhj>9ubh to split}(hj>9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj;9hhubah}(h]h ]h"]h$]h&]uh1j hj7hhhj7hM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j~9j( j~9j) j* j+ uh1jhhhjHhNhNubj- )}(hX**Parameters** ``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space ``const struct drm_gpuvm_map_req *req`` map request arguments **Description** This function creates a list of operations to perform splitting of existent mapping(s) at start or end, based on the request map. 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 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 will be no unmap operations, a maximum of two remap operations and two map operations. The two map operations correspond to: one from start to the end of drm_gpuvaX, and another from the start of drm_gpuvaY to end. 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]j7 )}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj9ubjM )}(hhh](jR )}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj9h]hstruct drm_gpuvm *gpuvm}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj9ubjt )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hj9hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj9h]h drm_gpuvm}(hj9hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj9hM hj9ubh representing the GPU VA space}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hM hj9ubah}(h]h ]h"]h$]h&]uh1js hj9ubeh}(h]h ]h"]h$]h&]uh1jQ hj9hM hj9ubjR )}(h>``const struct drm_gpuvm_map_req *req`` map request arguments h](jX )}(h'``const struct drm_gpuvm_map_req *req``h]j^ )}(hj:h]h#const struct drm_gpuvm_map_req *req}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj9ubjt )}(hhh]h)}(hmap request argumentsh]hmap request arguments}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM hj:ubah}(h]h ]h"]h$]h&]uh1js hj9ubeh}(h]h ]h"]h$]h&]uh1jQ hj:hM hj9ubeh}(h]h ]h"]h$]h&]uh1jL hj9ubh)}(h**Description**h]j7 )}(hj>:h]h Description}(hj@:hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj<:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj9ubh)}(hThis function creates a list of operations to perform splitting of existent mapping(s) at start or end, based on the request map.h]hThis function creates a list of operations to perform splitting of existent mapping(s) at start or end, based on the request map.}(hjT:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj9ubh)}(hX 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 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 }(hjc:hhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j^ )}(hjm:h]hdrm_gpuva_for_each_op}(hjo:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjk:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjc:ubh and must be processed in the given order. It can contain map 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.}(hjc:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hM hj9ubh)}(hThere will be no unmap operations, a maximum of two remap operations and two map operations. The two map operations correspond to: one from start to the end of drm_gpuvaX, and another from the start of drm_gpuvaY to end.h]hThere will be no unmap operations, a maximum of two remap operations and two map operations. The two map operations correspond to: one from start to the end of drm_gpuvaX, and another from the start of drm_gpuvaY to end.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj9ubh)}(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 }(hj:hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj:h]h drm_gpuvm}(hj:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj:ubhw’s view of the GPU VA space. The previously obtained operations must be either processed or abandoned. To update the }(hj:hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj:h]h drm_gpuvm}(hj:hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j 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 hj9ubh)}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM 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 ](j j! c-typeeh"]h$]h&]uh1j] hj%;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_ops_freeuh1hhj ;hM hj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj ;hM hj9ubh)}(h **Return**h]j7 )}(hjP;h]hReturn}(hjR;hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjN;ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj9ubh)}(hJa pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](ha pointer to the }(hjf;hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjp;h]h drm_gpuva_ops}(hjr;hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjn;ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjf;ubh" on success, an ERR_PTR on failure}(hjf;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hM hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gpuvm_sm_unmap_ops_create (C function)c.drm_gpuvm_sm_unmap_ops_createhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhj;hM ubh)}(hhh]j)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj;modnameN classnameNjj)}j]j)}j}drm_gpuvm_sm_unmap_ops_createsbc.drm_gpuvm_sm_unmap_ops_createasbuh1hhj;hhhj;hM ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhj;hM ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhj;hM ubj)}(hdrm_gpuvm_sm_unmap_ops_createh]j)}(hj;h]hdrm_gpuvm_sm_unmap_ops_create}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhj;hM ubj>)}(h6(struct drm_gpuvm *gpuvm, u64 req_addr, u64 req_range)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hj2<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.<ubj)}(h h]h }(hj?<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.<ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hjP<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM<ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjR<modnameN classnameNjj)}j]j;c.drm_gpuvm_sm_unmap_ops_createasbuh1hhj.<ubj)}(h h]h }(hjn<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.<ubj)}(hjh]h*}(hj|<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.<ubj)}(hgpuvmh]hgpuvm}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*<ubjD)}(h u64 req_addrh](h)}(hhh]j)}(hu64h]hu64}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj<modnameN classnameNjj)}j]j;c.drm_gpuvm_sm_unmap_ops_createasbuh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hreq_addrh]hreq_addr}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*<ubjD)}(h u64 req_rangeh](h)}(hhh]j)}(hu64h]hu64}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj<modnameN classnameNjj)}j]j;c.drm_gpuvm_sm_unmap_ops_createasbuh1hhj<ubj)}(h h]h }(hj =hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h req_rangeh]h req_range}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj*<ubeh}(h]h ]h"]h$]h&]jjuh1j=hj;hhhj;hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj;hhhj;hM ubah}(h]j;ah ](jjeh"]h$]h&]j j )j huh1jhj;hM hj;hhubj )}(hhh]h)}(h5creates the :c:type:`drm_gpuva_ops` to split on unmaph](h creates the }(hjC=hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjM=h]h drm_gpuva_ops}(hjO=hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjK=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j;c.drm_gpuvm_sm_unmap_ops_createasbj drm_gpuva_opsuh1hhjuhMhjC=ubh to split on unmap}(hjC=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj@=hhubah}(h]h ]h"]h$]h&]uh1j hj;hhhj;hM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j=j( j=j) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj=ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj=ubjM )}(hhh](jR )}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj=h]hstruct drm_gpuvm *gpuvm}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj=ubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hj=ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhj=hM hj=ubh representing the GPU VA space}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hM hj=ubah}(h]h ]h"]h$]h&]uh1js hj=ubeh}(h]h ]h"]h$]h&]uh1jQ hj=hM hj=ubjR )}(h9``u64 req_addr`` the start address of the range to unmap h](jX )}(h``u64 req_addr``h]j^ )}(hj>h]h u64 req_addr}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj>ubjt )}(hhh]h)}(h'the start address of the range to unmaph]h'the start address of the range to unmap}(hj!>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM hj>ubah}(h]h ]h"]h$]h&]uh1js hj>ubeh}(h]h ]h"]h$]h&]uh1jQ hj>hM hj=ubjR )}(h5``u64 req_range`` the range of the mappings to unmap h](jX )}(h``u64 req_range``h]j^ )}(hjA>h]h u64 req_range}(hjC>hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj?>ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj;>ubjt )}(hhh]h)}(h"the range of the mappings to unmaph]h"the range of the mappings to unmap}(hjZ>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV>hM hjW>ubah}(h]h ]h"]h$]h&]uh1js hj;>ubeh}(h]h ]h"]h$]h&]uh1jQ hjV>hM hj=ubeh}(h]h ]h"]h$]h&]uh1jL hj=ubh)}(h**Description**h]j7 )}(hj|>h]h Description}(hj~>hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjz>ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 }(hj>hhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j^ )}(hj>h]hdrm_gpuva_for_each_op}(hj>hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj>ubh 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.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>hM 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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 }(hj>hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj>h]h drm_gpuvm}(hj>hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj>ubhp’s view of the GPU VA space. The previously obtained operations must be processed or abandoned. To update the }(hj>hhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj?h]h drm_gpuvm}(hj?hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j 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)}(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 }(hj7?hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjA?h]h drm_gpuva_ops}(hjC?hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj??ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj7?ubh, they must be freed with }(hj7?hhhNhNubh)}(h:c:type:`drm_gpuva_ops_free`h]j^ )}(hje?h]hdrm_gpuva_ops_free}(hjg?hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjc?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_ops_freeuh1hhj^?hM hj7?ubh.}(hj7?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^?hM hj=ubh)}(h **Return**h]j7 )}(hj?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj?ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./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 }(hj?hhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hj?h]h drm_gpuva_ops}(hj?hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj?ubh" on success, an ERR_PTR on failure}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hM hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gpuvm_prefetch_ops_create (C function)c.drm_gpuvm_prefetch_ops_createhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM( ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj@hM( ubh)}(hhh]j)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj@modnameN classnameNjj)}j]j)}j}drm_gpuvm_prefetch_ops_createsbc.drm_gpuvm_prefetch_ops_createasbuh1hhj?hhhj@hM( ubj)}(h h]h }(hj6@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj@hM( ubj)}(hjh]h*}(hjD@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj@hM( ubj)}(hdrm_gpuvm_prefetch_ops_createh]j)}(hj3@h]hdrm_gpuvm_prefetch_ops_create}(hjU@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhj@hM( ubj>)}(h.(struct drm_gpuvm *gpuvm, u64 addr, u64 range)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjp@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl@ubj)}(h h]h }(hj}@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl@ubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj@modnameN classnameNjj)}j]j1@c.drm_gpuvm_prefetch_ops_createasbuh1hhjl@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl@ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl@ubj)}(hgpuvmh]hgpuvm}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjh@ubjD)}(hu64 addrh](h)}(hhh]j)}(hu64h]hu64}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj@modnameN classnameNjj)}j]j1@c.drm_gpuvm_prefetch_ops_createasbuh1hhj@ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(haddrh]haddr}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjh@ubjD)}(h u64 rangeh](h)}(hhh]j)}(hu64h]hu64}(hj+AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Aubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj-AmodnameN classnameNjj)}j]j1@c.drm_gpuvm_prefetch_ops_createasbuh1hhj$Aubj)}(h h]h }(hjIAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Aubj)}(hrangeh]hrange}(hjWAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Aubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjh@ubeh}(h]h ]h"]h$]h&]jjuh1j=hj?hhhj@hM( ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhj@hM( ubah}(h]j?ah ](jjeh"]h$]h&]j j )j huh1jhj@hM( hj?hhubj )}(hhh]h)}(h/creates the :c:type:`drm_gpuva_ops` to prefetchh](h creates the }(hjAhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjAh]h drm_gpuva_ops}(hjAhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjAubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j1@c.drm_gpuvm_prefetch_ops_createasbj drm_gpuva_opsuh1hhjuhMhjAubh to prefetch}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM( hj~Ahhubah}(h]h ]h"]h$]h&]uh1j hj?hhhj@hM( ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jAj( jAj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjAubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM, hjAubjM )}(hhh](jR )}(hR``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` representing the GPU VA space h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hjAh]hstruct drm_gpuvm *gpuvm}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjAubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM) hjAubjt )}(hhh]h)}(h5the :c:type:`drm_gpuvm` representing the GPU VA spaceh](hthe }(hjBhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj Bh]h drm_gpuvm}(hjBhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj Bubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjAhM) hjBubh representing the GPU VA space}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhM) hjBubah}(h]h ]h"]h$]h&]uh1js hjAubeh}(h]h ]h"]h$]h&]uh1jQ hjAhM) hjAubjR )}(h8``u64 addr`` the start address of the range to prefetch h](jX )}(h ``u64 addr``h]j^ )}(hjFBh]hu64 addr}(hjHBhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjDBubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM* hj@Bubjt )}(hhh]h)}(h*the start address of the range to prefetchh]h*the start address of the range to prefetch}(hj_BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[BhM* hj\Bubah}(h]h ]h"]h$]h&]uh1js hj@Bubeh}(h]h ]h"]h$]h&]uh1jQ hj[BhM* hjAubjR )}(h4``u64 range`` the range of the mappings to prefetch h](jX )}(h ``u64 range``h]j^ )}(hjBh]h u64 range}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}Bubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM+ hjyBubjt )}(hhh]h)}(h%the range of the mappings to prefetchh]h%the range of the mappings to prefetch}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM+ hjBubah}(h]h ]h"]h$]h&]uh1js hjyBubeh}(h]h ]h"]h$]h&]uh1jQ hjBhM+ hjAubeh}(h]h ]h"]h$]h&]uh1jL hjAubh)}(h**Description**h]j7 )}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM- hjAubh)}(hBThis function creates a list of operations to perform prefetching.h]hBThis function creates a list of operations to perform prefetching.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM, hjAubh)}(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 }(hjBhhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j^ )}(hjBh]hdrm_gpuva_for_each_op}(hjBhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjBubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM. hjBubhN and must be processed in the given order. It can contain prefetch operations.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChM. hjAubh)}(h8There can be an arbitrary amount of prefetch operations.h]h8There can be an arbitrary amount of prefetch operations.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM1 hjAubh)}(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 ChhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hj*Ch]h drm_gpuva_ops}(hj,ChhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj(Cubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM3 hj Cubh, they must be freed with }(hj ChhhNhNubh)}(h:c:type:`drm_gpuva_ops_free`h]j^ )}(hjNCh]hdrm_gpuva_ops_free}(hjPChhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjLCubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_ops_freeuh1hhjGChM3 hj Cubh.}(hj ChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGChM3 hjAubh)}(h **Return**h]j7 )}(hjwCh]hReturn}(hjyChhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjuCubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM6 hjAubh)}(hJa pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](ha pointer to the }(hjChhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjCh]h drm_gpuva_ops}(hjChhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjCubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM7 hjCubh" on success, an ERR_PTR on failure}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChM7 hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_gpuvm_bo_unmap_ops_create (C function)c.drm_gpuvm_bo_unmap_ops_createhNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM^ ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChM^ ubh)}(hhh]j)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjDmodnameN classnameNjj)}j]j)}j}drm_gpuvm_bo_unmap_ops_createsbc.drm_gpuvm_bo_unmap_ops_createasbuh1hhjChhhjChM^ ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChM^ ubj)}(hjh]h*}(hj-DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChM^ ubj)}(hdrm_gpuvm_bo_unmap_ops_createh]j)}(hjDh]hdrm_gpuvm_bo_unmap_ops_create}(hj>DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Dubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjChM^ ubj>)}(h(struct drm_gpuvm_bo *vm_bo)h]jD)}(hstruct drm_gpuvm_bo *vm_boh](j)}(hj? h]hstruct}(hjYDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUDubj)}(h h]h }(hjfDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUDubh)}(hhh]j)}(h drm_gpuvm_boh]h drm_gpuvm_bo}(hjwDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtDubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjyDmodnameN classnameNjj)}j]jDc.drm_gpuvm_bo_unmap_ops_createasbuh1hhjUDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUDubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUDubj)}(hvm_boh]hvm_bo}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUDubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjQDubah}(h]h ]h"]h$]h&]jjuh1j=hjChhhjChM^ ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjChhhjChM^ ubah}(h]jCah ](jjeh"]h$]h&]j j )j huh1jhjChM^ hjChhubj )}(hhh]h)}(h2creates the :c:type:`drm_gpuva_ops` to unmap a GEMh](h creates the }(hjDhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjDh]h drm_gpuva_ops}(hjDhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjDubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]jDc.drm_gpuvm_bo_unmap_ops_createasbj drm_gpuva_opsuh1hhjuhMhjDubh to unmap a GEM}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM^ hjDhhubah}(h]h ]h"]h$]h&]uh1j hjChhhjChM^ ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jEj( jEj) j* j+ uh1jhhhjHhNhNubj- )}(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`. This function expects the caller to protect the GEM's GPUVA list against concurrent access using either the GEM's dma-resv or gpuva.lock mutex. **Return** a pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](h)}(h**Parameters**h]j7 )}(hj$Eh]h Parameters}(hj&EhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj"Eubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMb hjEubjM )}(hhh]jR )}(hF``struct drm_gpuvm_bo *vm_bo`` the :c:type:`drm_gpuvm_bo` abstraction h](jX )}(h``struct drm_gpuvm_bo *vm_bo``h]j^ )}(hjCEh]hstruct drm_gpuvm_bo *vm_bo}(hjEEhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjAEubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM_ hj=Eubjt )}(hhh]h)}(h&the :c:type:`drm_gpuvm_bo` abstractionh](hthe }(hj\EhhhNhNubh)}(h:c:type:`drm_gpuvm_bo`h]j^ )}(hjfEh]h drm_gpuvm_bo}(hjhEhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjdEubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvm_bouh1hhjXEhM_ hj\Eubh abstraction}(hj\EhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjXEhM_ hjYEubah}(h]h ]h"]h$]h&]uh1js hj=Eubeh}(h]h ]h"]h$]h&]uh1jQ hjXEhM_ hj:Eubah}(h]h ]h"]h$]h&]uh1jL hjEubh)}(h**Description**h]j7 )}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjEubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMa hjEubh)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM` hjEubh)}(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 }(hjEhhhNhNubh)}(h:c:type:`drm_gpuva_for_each_op`h]j^ )}(hjEh]hdrm_gpuva_for_each_op}(hjEhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_for_each_opuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMc hjEubh= and consists out of an arbitrary amount of unmap operations.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjEhMc hjEubh)}(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 }(hjEhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjFh]h drm_gpuva_ops}(hjFhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjFubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMf hjEubh, they must be freed with }(hjEhhhNhNubh)}(h:c:type:`drm_gpuva_ops_free`h]j^ )}(hj&Fh]hdrm_gpuva_ops_free}(hj(FhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj$Fubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_ops_freeuh1hhjFhMf hjEubh.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhMf hjEubh)}(hThis function expects the caller to protect the GEM's GPUVA list against concurrent access using either the GEM's dma-resv or gpuva.lock mutex.h]hThis function expects the caller to protect the GEM’s GPUVA list against concurrent access using either the GEM’s dma-resv or gpuva.lock mutex.}(hjMFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMi hjEubh)}(h **Return**h]j7 )}(hj^Fh]hReturn}(hj`FhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj\Fubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMl hjEubh)}(hJa pointer to the :c:type:`drm_gpuva_ops` on success, an ERR_PTR on failureh](ha pointer to the }(hjtFhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hj~Fh]h drm_gpuva_ops}(hjFhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|Fubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chMm hjtFubh" on success, an ERR_PTR on failure}(hjtFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhMm hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpuva_ops_free (C function)c.drm_gpuva_ops_freehNtauh1jhjHhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjFhM ubj)}(hdrm_gpuva_ops_freeh]j)}(hdrm_gpuva_ops_freeh]hdrm_gpuva_ops_free}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjFhM ubj>)}(h4(struct drm_gpuvm *gpuvm, struct drm_gpuva_ops *ops)h](jD)}(hstruct drm_gpuvm *gpuvmh](j)}(hj? h]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(h drm_gpuvmh]h drm_gpuvm}(hj!GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj#GmodnameN classnameNjj)}j]j)}j}jFsbc.drm_gpuva_ops_freeasbuh1hhjFubj)}(h h]h }(hjAGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]h*}(hjOGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hgpuvmh]hgpuvm}(hj\GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjFubjD)}(hstruct drm_gpuva_ops *opsh](j)}(hj? h]hstruct}(hjuGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqGubh)}(hhh]j)}(h drm_gpuva_opsh]h drm_gpuva_ops}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjGmodnameN classnameNjj)}j]j=Gc.drm_gpuva_ops_freeasbuh1hhjqGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqGubj)}(hopsh]hops}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqGubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjFubeh}(h]h ]h"]h$]h&]jjuh1j=hjFhhhjFhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjFhhhjFhM ubah}(h]jFah ](jjeh"]h$]h&]j j )j huh1jhjFhM hjFhhubj )}(hhh]h)}(h&free the given :c:type:`drm_gpuva_ops`h](hfree the given }(hjGhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjHh]h drm_gpuva_ops}(hjHhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjGubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj)}j]j=Gc.drm_gpuva_ops_freeasbj drm_gpuva_opsuh1hhjuhMhjGubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjGhhubah}(h]h ]h"]h$]h&]uh1j hjFhhhjFhM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j2Hj( j2Hj) j* j+ uh1jhhhjHhNhNubj- )}(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]j7 )}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:Hubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj6HubjM )}(hhh](jR )}(hM``struct drm_gpuvm *gpuvm`` the :c:type:`drm_gpuvm` the ops were created for h](jX )}(h``struct drm_gpuvm *gpuvm``h]j^ )}(hj[Hh]hstruct drm_gpuvm *gpuvm}(hj]HhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjYHubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjUHubjt )}(hhh]h)}(h0the :c:type:`drm_gpuvm` the ops were created forh](hthe }(hjtHhhhNhNubh)}(h:c:type:`drm_gpuvm`h]j^ )}(hj~Hh]h drm_gpuvm}(hjHhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj|Hubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuvmuh1hhjpHhM hjtHubh the ops were created for}(hjtHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjpHhM hjqHubah}(h]h ]h"]h$]h&]uh1js hjUHubeh}(h]h ]h"]h$]h&]uh1jQ hjpHhM hjRHubjR )}(hB``struct drm_gpuva_ops *ops`` the :c:type:`drm_gpuva_ops` to free h](jX )}(h``struct drm_gpuva_ops *ops``h]j^ )}(hjHh]hstruct drm_gpuva_ops *ops}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hjHubjt )}(hhh]h)}(h#the :c:type:`drm_gpuva_ops` to freeh](hthe }(hjHhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hjHh]h drm_gpuva_ops}(hjHhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhjHhM hjHubh to free}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhM hjHubah}(h]h ]h"]h$]h&]uh1js hjHubeh}(h]h ]h"]h$]h&]uh1jQ hjHhM hjRHubeh}(h]h ]h"]h$]h&]uh1jL hj6Hubh)}(h**Description**h]j7 )}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj6Hubh)}(h[Frees the given :c:type:`drm_gpuva_ops` structure including all the ops associated with it.h](hFrees the given }(hj+IhhhNhNubh)}(h:c:type:`drm_gpuva_ops`h]j^ )}(hj5Ih]h drm_gpuva_ops}(hj7IhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj3Iubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpuva_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:525: ./drivers/gpu/drm/drm_gpuvm.chM hj+Iubh4 structure including all the ops associated with it.}(hj+IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjRIhM hj6Hubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjHhhhNhNubeh}(h]jDah ]h"]drm gpuvm function referencesah$]h&]uh1hhj7hhhhhMubeh}(h](jid2eh ]h"]( drm gpuvm drm_gpuvmeh$]h&]uh1hhhhhhhhMj}jqIj7sj}jj7subh)}(hhh](h)}(hDRM Buddy Allocatorh]hDRM Buddy Allocator}(hjyIhhhNhNubah}(h]h ]h"]h$]h&]hjluh1hhjvIhhhhhMubh)}(hhh](h)}(h/Buddy Allocator Function References (GPU buddy)h]h/Buddy Allocator Function References (GPU buddy)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjIhhhhhMubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jgpu_buddy_init (C function)c.gpu_buddy_inithNtauh1jhjIhhhNhNubj)}(hhh](j)}(hCint gpu_buddy_init (struct gpu_buddy *mm, u64 size, u64 chunk_size)h]j)}(hBint gpu_buddy_init(struct gpu_buddy *mm, u64 size, u64 chunk_size)h](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chM`ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhM`ubj)}(hgpu_buddy_inith]j)}(hgpu_buddy_inith]hgpu_buddy_init}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjIhM`ubj>)}(h0(struct gpu_buddy *mm, u64 size, u64 chunk_size)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hj JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjJmodnameN classnameNjj)}j]j)}j}jIsbc.gpu_buddy_initasbuh1hhjIubj)}(h h]h }(hj,JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]h*}(hj:JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hmmh]hmm}(hjGJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjIubjD)}(hu64 sizeh](h)}(hhh]j)}(hu64h]hu64}(hjcJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Jubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjeJmodnameN classnameNjj)}j]j(Jc.gpu_buddy_initasbuh1hhj\Jubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Jubj)}(hsizeh]hsize}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Jubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjIubjD)}(hu64 chunk_sizeh](h)}(hhh]j)}(hu64h]hu64}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjJmodnameN classnameNjj)}j]j(Jc.gpu_buddy_initasbuh1hhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h chunk_sizeh]h chunk_size}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjIubeh}(h]h ]h"]h$]h&]jjuh1j=hjIhhhjIhM`ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhjIhM`ubah}(h]jIah ](jjeh"]h$]h&]j j )j huh1jhjIhM`hjIhhubj )}(hhh]h)}(hinit memory managerh]hinit memory manager}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chM`hjJhhubah}(h]h ]h"]h$]h&]uh1j hjIhhhjIhM`ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jKj( jKj) j* j+ uh1jhhhjIhNhNubj- )}(hX-**Parameters** ``struct gpu_buddy *mm`` GPU 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]j7 )}(hj#Kh]h Parameters}(hj%KhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj!Kubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMdhjKubjM )}(hhh](jR )}(h9``struct gpu_buddy *mm`` GPU buddy manager to initialize h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hjBKh]hstruct gpu_buddy *mm}(hjDKhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj@Kubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMbhj)}(h(struct gpu_buddy *mm)h]jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjLmodnameN classnameNjj)}j]j)}j}j~Lsbc.gpu_buddy_finiasbuh1hhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hmmh]hmm}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjLubah}(h]h ]h"]h$]h&]jjuh1j=hjWLhhhjiLhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjSLhhhjiLhMubah}(h]jNLah ](jjeh"]h$]h&]j j )j huh1jhjiLhMhjPLhhubj )}(hhh]h)}(htear down the memory managerh]htear down the memory manager}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjMhhubah}(h]h ]h"]h$]h&]uh1j hjPLhhhjiLhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j3Mj( j3Mj) j* j+ uh1jhhhjIhNhNubj- )}(h**Parameters** ``struct gpu_buddy *mm`` GPU buddy manager to free **Description** Cleanup memory manager resources and the freetreeh](h)}(h**Parameters**h]j7 )}(hj=Mh]h Parameters}(hj?MhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj;Mubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj7MubjM )}(hhh]jR )}(h3``struct gpu_buddy *mm`` GPU buddy manager to free h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hj\Mh]hstruct gpu_buddy *mm}(hj^MhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjZMubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjVMubjt )}(hhh]h)}(hGPU buddy manager to freeh]hGPU buddy manager to free}(hjuMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqMhMhjrMubah}(h]h ]h"]h$]h&]uh1js hjVMubeh}(h]h ]h"]h$]h&]uh1jQ hjqMhMhjSMubah}(h]h ]h"]h$]h&]uh1jL hj7Mubh)}(h**Description**h]j7 )}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjMubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj7Mubh)}(h1Cleanup memory manager resources and the freetreeh]h1Cleanup memory manager resources and the freetree}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj7Mubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjIhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"gpu_buddy_reset_clear (C function)c.gpu_buddy_reset_clearhNtauh1jhjIhhhNhNubj)}(hhh](j)}(h@void gpu_buddy_reset_clear (struct gpu_buddy *mm, bool is_clear)h]j)}(h?void gpu_buddy_reset_clear(struct gpu_buddy *mm, bool is_clear)h](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhjMhMubj)}(hgpu_buddy_reset_clearh]j)}(hgpu_buddy_reset_clearh]hgpu_buddy_reset_clear}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMhhhjMhMubj>)}(h%(struct gpu_buddy *mm, bool is_clear)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj&NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hj7NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Nubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj9NmodnameN classnameNjj)}j]j)}j}jMsbc.gpu_buddy_reset_clearasbuh1hhjNubj)}(h h]h }(hjWNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]h*}(hjeNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hmmh]hmm}(hjrNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjNubjD)}(h bool is_clearh](j)}(hj=2h]hbool}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(his_clearh]his_clear}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjNubeh}(h]h ]h"]h$]h&]jjuh1j=hjMhhhjMhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjMhhhjMhMubah}(h]jMah ](jjeh"]h$]h&]j j )j huh1jhjMhMhjMhhubj )}(hhh]h)}(hreset blocks clear stateh]hreset blocks clear state}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjNhhubah}(h]h ]h"]h$]h&]uh1j hjMhhhjMhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jNj( jNj) j* j+ uh1jhhhjIhNhNubj- )}(h**Parameters** ``struct gpu_buddy *mm`` GPU buddy manager ``bool is_clear`` blocks clear state **Description** Reset the clear state based on **is_clear** value for each block in the freetree.h](h)}(h**Parameters**h]j7 )}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjNubjM )}(hhh](jR )}(h+``struct gpu_buddy *mm`` GPU buddy manager h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hjOh]hstruct gpu_buddy *mm}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjOubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj Oubjt )}(hhh]h)}(hGPU buddy managerh]hGPU buddy manager}(hj*OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&OhMhj'Oubah}(h]h ]h"]h$]h&]uh1js hj Oubeh}(h]h ]h"]h$]h&]uh1jQ hj&OhMhjOubjR )}(h%``bool is_clear`` blocks clear state h](jX )}(h``bool is_clear``h]j^ )}(hjJOh]h bool is_clear}(hjLOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHOubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjDOubjt )}(hhh]h)}(hblocks clear stateh]hblocks clear state}(hjcOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_OhMhj`Oubah}(h]h ]h"]h$]h&]uh1js hjDOubeh}(h]h ]h"]h$]h&]uh1jQ hj_OhMhjOubeh}(h]h ]h"]h$]h&]uh1jL hjNubh)}(h**Description**h]j7 )}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjOubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjNubh)}(hQReset the clear state based on **is_clear** value for each block in the freetree.h](hReset the clear state based on }(hjOhhhNhNubj7 )}(h **is_clear**h]his_clear}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjOubh& value for each block in the freetree.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjIhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!gpu_buddy_free_block (C function)c.gpu_buddy_free_blockhNtauh1jhjIhhhNhNubj)}(hhh](j)}(hOvoid gpu_buddy_free_block (struct gpu_buddy *mm, struct gpu_buddy_block *block)h]j)}(hNvoid gpu_buddy_free_block(struct gpu_buddy *mm, struct gpu_buddy_block *block)h](j)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMCubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjOhMCubj)}(hgpu_buddy_free_blockh]j)}(hgpu_buddy_free_blockh]hgpu_buddy_free_block}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjOhMCubj>)}(h5(struct gpu_buddy *mm, struct gpu_buddy_block *block)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hj&PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hj7PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Pubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj9PmodnameN classnameNjj)}j]j)}j}jOsbc.gpu_buddy_free_blockasbuh1hhjPubj)}(h h]h }(hjWPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hjh]h*}(hjePhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hmmh]hmm}(hjrPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjPubjD)}(hstruct gpu_buddy_block *blockh](j)}(hj? h]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j)}(hgpu_buddy_blockh]hgpu_buddy_block}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjPmodnameN classnameNjj)}j]jSPc.gpu_buddy_free_blockasbuh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hblockh]hblock}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjPubeh}(h]h ]h"]h$]h&]jjuh1j=hjOhhhjOhMCubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOhhhjOhMCubah}(h]jOah ](jjeh"]h$]h&]j j )j huh1jhjOhMChjOhhubj )}(hhh]h)}(h free a blockh]h free a block}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMChj Qhhubah}(h]h ]h"]h$]h&]uh1j hjOhhhjOhMCubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j$Qj( j$Qj) j* j+ uh1jhhhjIhNhNubj- )}(hs**Parameters** ``struct gpu_buddy *mm`` GPU buddy manager ``struct gpu_buddy_block *block`` block to be freedh](h)}(h**Parameters**h]j7 )}(hj.Qh]h Parameters}(hj0QhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj,Qubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMGhj(QubjM )}(hhh](jR )}(h+``struct gpu_buddy *mm`` GPU buddy manager h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hjMQh]hstruct gpu_buddy *mm}(hjOQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjKQubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMEhjGQubjt )}(hhh]h)}(hGPU buddy managerh]hGPU buddy manager}(hjfQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbQhMEhjcQubah}(h]h ]h"]h$]h&]uh1js hjGQubeh}(h]h ]h"]h$]h&]uh1jQ hjbQhMEhjDQubjR )}(h3``struct gpu_buddy_block *block`` block to be freedh](jX )}(h!``struct gpu_buddy_block *block``h]j^ )}(hjQh]hstruct gpu_buddy_block *block}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjQubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMGhjQubjt )}(hhh]h)}(hblock to be freedh]hblock to be freed}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMFhjQubah}(h]h ]h"]h$]h&]uh1js hjQubeh}(h]h ]h"]h$]h&]uh1jQ hjQhMGhjDQubeh}(h]h ]h"]h$]h&]uh1jL hj(Qubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjIhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j gpu_buddy_free_list (C function)c.gpu_buddy_free_listhNtauh1jhjIhhhNhNubj)}(hhh](j)}(h^void gpu_buddy_free_list (struct gpu_buddy *mm, struct list_head *objects, unsigned int flags)h]j)}(h]void gpu_buddy_free_list(struct gpu_buddy *mm, struct list_head *objects, unsigned int flags)h](j)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMuubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjQhMuubj)}(hgpu_buddy_free_listh]j)}(hgpu_buddy_free_listh]hgpu_buddy_free_list}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhjQhMuubj>)}(hE(struct gpu_buddy *mm, struct list_head *objects, unsigned int flags)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hj*RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hj;RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8Rubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj=RmodnameN classnameNjj)}j]j)}j}jRsbc.gpu_buddy_free_listasbuh1hhjRubj)}(h h]h }(hj[RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjiRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hmmh]hmm}(hjvRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjRubjD)}(hstruct list_head *objectsh](j)}(hj? h]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(h list_headh]h list_head}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjRmodnameN classnameNjj)}j]jWRc.gpu_buddy_free_listasbuh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hobjectsh]hobjects}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjRubjD)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hj ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hj)ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hflagsh]hflags}(hj7ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjRubeh}(h]h ]h"]h$]h&]jjuh1j=hjQhhhjQhMuubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQhhhjQhMuubah}(h]jQah ](jjeh"]h$]h&]j j )j huh1jhjQhMuhjQhhubj )}(hhh]h)}(h free blocksh]h free blocks}(hjaShhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMuhj^Shhubah}(h]h ]h"]h$]h&]uh1j hjQhhhjQhMuubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jySj( jySj) j* j+ uh1jhhhjIhNhNubj- )}(h**Parameters** ``struct gpu_buddy *mm`` GPU buddy manager ``struct list_head *objects`` input list head to free blocks ``unsigned int flags`` optional flags like GPU_BUDDY_CLEAREDh](h)}(h**Parameters**h]j7 )}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjSubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMyhj}SubjM )}(hhh](jR )}(h+``struct gpu_buddy *mm`` GPU buddy manager h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hjSh]hstruct gpu_buddy *mm}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMwhjSubjt )}(hhh]h)}(hGPU buddy managerh]hGPU buddy manager}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMwhjSubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjShMwhjSubjR )}(h=``struct list_head *objects`` input list head to free blocks h](jX )}(h``struct list_head *objects``h]j^ )}(hjSh]hstruct list_head *objects}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMxhjSubjt )}(hhh]h)}(hinput list head to free blocksh]hinput list head to free blocks}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMxhjSubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjShMxhjSubjR )}(h<``unsigned int flags`` optional flags like GPU_BUDDY_CLEAREDh](jX )}(h``unsigned int flags``h]j^ )}(hjTh]hunsigned int flags}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjTubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMzhjTubjt )}(hhh]h)}(h%optional flags like GPU_BUDDY_CLEAREDh]h%optional flags like GPU_BUDDY_CLEARED}(hj-ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMyhj*Tubah}(h]h ]h"]h$]h&]uh1js hjTubeh}(h]h ]h"]h$]h&]uh1jQ hj)ThMzhjSubeh}(h]h ]h"]h$]h&]uh1jL hj}Subeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjIhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!gpu_buddy_block_trim (C function)c.gpu_buddy_block_trimhNtauh1jhjIhhhNhNubj)}(hhh](j)}(hcint gpu_buddy_block_trim (struct gpu_buddy *mm, u64 *start, u64 new_size, struct list_head *blocks)h]j)}(hbint gpu_buddy_block_trim(struct gpu_buddy *mm, u64 *start, u64 new_size, struct list_head *blocks)h](j)}(hinth]hint}(hjnThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjThhhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMubj)}(h h]h }(hj}ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjThhhj|ThMubj)}(hgpu_buddy_block_trimh]j)}(hgpu_buddy_block_trimh]hgpu_buddy_block_trim}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjThhhj|ThMubj>)}(hJ(struct gpu_buddy *mm, u64 *start, u64 new_size, struct list_head *blocks)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjTmodnameN classnameNjj)}j]j)}j}jTsbc.gpu_buddy_block_trimasbuh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hmmh]hmm}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubjD)}(h u64 *starth](h)}(hhh]j)}(hu64h]hu64}(hj UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj"UmodnameN classnameNjj)}j]jTc.gpu_buddy_block_trimasbuh1hhjUubj)}(h h]h }(hj>UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hjh]h*}(hjLUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hstarth]hstart}(hjYUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubjD)}(h u64 new_sizeh](h)}(hhh]j)}(hu64h]hu64}(hjuUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrUubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjwUmodnameN classnameNjj)}j]jTc.gpu_buddy_block_trimasbuh1hhjnUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnUubj)}(hnew_sizeh]hnew_size}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnUubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubjD)}(hstruct list_head *blocksh](j)}(hj? h]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(h list_headh]h list_head}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjUmodnameN classnameNjj)}j]jTc.gpu_buddy_block_trimasbuh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hblocksh]hblocks}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjTubeh}(h]h ]h"]h$]h&]jjuh1j=hjjThhhj|ThMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjfThhhj|ThMubah}(h]jaTah ](jjeh"]h$]h&]j j )j huh1jhj|ThMhjcThhubj )}(hhh]h)}(hfree unused pagesh]hfree unused pages}(hj;VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj8Vhhubah}(h]h ]h"]h$]h&]uh1j hjcThhhj|ThMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jSVj( jSVj) j* j+ uh1jhhhjIhNhNubj- )}(hX**Parameters** ``struct gpu_buddy *mm`` GPU 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]j7 )}(hj]Vh]h Parameters}(hj_VhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj[Vubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjWVubjM )}(hhh](jR )}(h+``struct gpu_buddy *mm`` GPU buddy manager h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hj|Vh]hstruct gpu_buddy *mm}(hj~VhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjzVubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjvVubjt )}(hhh]h)}(hGPU buddy managerh]hGPU buddy manager}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1js hjvVubeh}(h]h ]h"]h$]h&]uh1jQ hjVhMhjsVubjR )}(h4``u64 *start`` start address to begin the trimming. h](jX )}(h``u64 *start``h]j^ )}(hjVh]h u64 *start}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjVubjt )}(hhh]h)}(h$start address to begin the trimming.h]h$start address to begin the trimming.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1js hjVubeh}(h]h ]h"]h$]h&]uh1jQ hjVhMhjsVubjR )}(h)``u64 new_size`` original size requested h](jX )}(h``u64 new_size``h]j^ )}(hjVh]h u64 new_size}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjVubjt )}(hhh]h)}(horiginal size requestedh]horiginal size requested}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjWubah}(h]h ]h"]h$]h&]uh1js hjVubeh}(h]h ]h"]h$]h&]uh1jQ hjWhMhjsVubjR )}(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](jX )}(h``struct list_head *blocks``h]j^ )}(hj'Wh]hstruct list_head *blocks}(hj)WhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj%Wubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj!Wubjt )}(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 }(hj@WhhhNhNubj7 )}(h **new_size**h]hnew_size}(hjHWhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj@Wubh). Blocks always appear in ascending order}(hj@WhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj=Wubah}(h]h ]h"]h$]h&]uh1js hj!Wubeh}(h]h ]h"]h$]h&]uh1jQ hj)}(hw(struct gpu_buddy *mm, u64 start, u64 end, u64 size, u64 min_block_size, struct list_head *blocks, unsigned long flags)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hj0XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Xubj)}(h h]h }(hj=XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Xubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hjNXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKXubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjPXmodnameN classnameNjj)}j]j)}j}jXsbc.gpu_buddy_alloc_blocksasbuh1hhj,Xubj)}(h h]h }(hjnXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Xubj)}(hjh]h*}(hj|XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Xubj)}(hmmh]hmm}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Xubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(XubjD)}(h u64 starth](h)}(hhh]j)}(hu64h]hu64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjXmodnameN classnameNjj)}j]jjXc.gpu_buddy_alloc_blocksasbuh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hstarth]hstart}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(XubjD)}(hu64 endh](h)}(hhh]j)}(hu64h]hu64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjXmodnameN classnameNjj)}j]jjXc.gpu_buddy_alloc_blocksasbuh1hhjXubj)}(h h]h }(hj YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hendh]hend}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(XubjD)}(hu64 sizeh](h)}(hhh]j)}(hu64h]hu64}(hj5YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Yubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj7YmodnameN classnameNjj)}j]jjXc.gpu_buddy_alloc_blocksasbuh1hhj.Yubj)}(h h]h }(hjSYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Yubj)}(hsizeh]hsize}(hjaYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Yubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(XubjD)}(hu64 min_block_sizeh](h)}(hhh]j)}(hu64h]hu64}(hj}YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzYubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjYmodnameN classnameNjj)}j]jjXc.gpu_buddy_alloc_blocksasbuh1hhjvYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvYubj)}(hmin_block_sizeh]hmin_block_size}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvYubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(XubjD)}(hstruct list_head *blocksh](j)}(hj? h]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(h list_headh]h list_head}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjYmodnameN classnameNjj)}j]jjXc.gpu_buddy_alloc_blocksasbuh1hhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]h*}(hj ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hblocksh]hblocks}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(XubjD)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hj2ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Zubj)}(h h]h }(hj@ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Zubj)}(hlongh]hlong}(hjNZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Zubj)}(h h]h }(hj\ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Zubj)}(hflagsh]hflags}(hjjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Zubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(Xubeh}(h]h ]h"]h$]h&]jjuh1j=hjWhhhjXhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjXhM ubah}(h]jWah ](jjeh"]h$]h&]j j )j huh1jhjXhM hjWhhubj )}(hhh]h)}(hallocate power-of-two blocksh]hallocate power-of-two blocks}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chM hjZhhubah}(h]h ]h"]h$]h&]uh1j hjWhhhjXhM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jZj( jZj) j* j+ uh1jhhhjIhNhNubj- )}(hX**Parameters** ``struct gpu_buddy *mm`` GPU 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`` GPU_BUDDY_*_ALLOCATION flags **Description** alloc_range_bias() called on range limitations, which traverses the tree and returns the desired block. alloc_from_freetree() called when *no* range restrictions are enforced, which picks the block from the freetree. **Return** 0 on success, error code on failure.h](h)}(h**Parameters**h]j7 )}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjZubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjZubjM )}(hhh](jR )}(h<``struct gpu_buddy *mm`` GPU buddy manager to allocate from h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hjZh]hstruct gpu_buddy *mm}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjZubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chM hjZubjt )}(hhh]h)}(h"GPU buddy manager to allocate fromh]h"GPU buddy manager to allocate from}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM hjZubah}(h]h ]h"]h$]h&]uh1js hjZubeh}(h]h ]h"]h$]h&]uh1jQ hjZhM hjZubjR )}(h8``u64 start`` start of the allowed range for this block h](jX )}(h ``u64 start``h]j^ )}(hj[h]h u64 start}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj [ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj[ubjt )}(hhh]h)}(h)start of the allowed range for this blockh]h)start of the allowed range for this block}(hj'[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#[hMhj$[ubah}(h]h ]h"]h$]h&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hj#[hMhjZubjR )}(h4``u64 end`` end of the allowed range for this block h](jX )}(h ``u64 end``h]j^ )}(hjG[h]hu64 end}(hjI[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjE[ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjA[ubjt )}(hhh]h)}(h'end of the allowed range for this blockh]h'end of the allowed range for this block}(hj`[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\[hMhj][ubah}(h]h ]h"]h$]h&]uh1js hjA[ubeh}(h]h ]h"]h$]h&]uh1jQ hj\[hMhjZubjR )}(h-``u64 size`` size of the allocation in bytes h](jX )}(h ``u64 size``h]j^ )}(hj[h]hu64 size}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj~[ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjz[ubjt )}(hhh]h)}(hsize of the allocation in bytesh]hsize of the allocation in bytes}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1js hjz[ubeh}(h]h ]h"]h$]h&]uh1jQ hj[hMhjZubjR )}(h3``u64 min_block_size`` alignment of the allocation h](jX )}(h``u64 min_block_size``h]j^ )}(hj[h]hu64 min_block_size}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj[ubjt )}(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&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hj[hMhjZubjR )}(hF``struct list_head *blocks`` output list head to add allocated blocks h](jX )}(h``struct list_head *blocks``h]j^ )}(hj[h]hstruct list_head *blocks}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj[ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj[ubjt )}(hhh]h)}(h(output list head to add allocated blocksh]h(output list head to add allocated blocks}(hj \hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hj\hMhjZubjR )}(h5``unsigned long flags`` GPU_BUDDY_*_ALLOCATION flags h](jX )}(h``unsigned long flags``h]j^ )}(hj+\h]hunsigned long flags}(hj-\hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)\ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj%\ubjt )}(hhh]h)}(hGPU_BUDDY_*_ALLOCATION flagsh]hGPU_BUDDY_*_ALLOCATION flags}(hjD\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@\hMhjA\ubah}(h]h ]h"]h$]h&]uh1js hj%\ubeh}(h]h ]h"]h$]h&]uh1jQ hj@\hMhjZubeh}(h]h ]h"]h$]h&]uh1jL hjZubh)}(h**Description**h]j7 )}(hjf\h]h Description}(hjh\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjd\ubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjZubh)}(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|\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjZubh)}(hpalloc_from_freetree() called when *no* range restrictions are enforced, which picks the block from the freetree.h](h"alloc_from_freetree() called when }(hj\hhhNhNubj)}(h*no*h]hno}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubhJ range restrictions are enforced, which picks the block from the freetree.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjZubh)}(h **Return**h]j7 )}(hj\h]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj\ubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjZubh)}(h$0 on success, error code on failure.h]h$0 on success, error code on failure.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjIhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"gpu_buddy_block_print (C function)c.gpu_buddy_block_printhNtauh1jhjIhhhNhNubj)}(hhh](j)}(hPvoid gpu_buddy_block_print (struct gpu_buddy *mm, struct gpu_buddy_block *block)h]j)}(hOvoid gpu_buddy_block_print(struct gpu_buddy *mm, struct gpu_buddy_block *block)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj]hMubj)}(hgpu_buddy_block_printh]j)}(hgpu_buddy_block_printh]hgpu_buddy_block_print}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhj]hMubj>)}(h5(struct gpu_buddy *mm, struct gpu_buddy_block *block)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hj0]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,]ubj)}(h h]h }(hj=]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,]ubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hjN]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK]ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjP]modnameN classnameNjj)}j]j)}j}j]sbc.gpu_buddy_block_printasbuh1hhj,]ubj)}(h h]h }(hjn]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,]ubj)}(hjh]h*}(hj|]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,]ubj)}(hmmh]hmm}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(]ubjD)}(hstruct gpu_buddy_block *blockh](j)}(hj? h]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hgpu_buddy_blockh]hgpu_buddy_block}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj]modnameN classnameNjj)}j]jj]c.gpu_buddy_block_printasbuh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hblockh]hblock}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(]ubeh}(h]h ]h"]h$]h&]jjuh1j=hj\hhhj]hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhj]hMubah}(h]j\ah ](jjeh"]h$]h&]j j )j huh1jhj]hMhj\hhubj )}(hhh]h)}(hprint block informationh]hprint block information}(hj#^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj ^hhubah}(h]h ]h"]h$]h&]uh1j hj\hhhj]hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j;^j( j;^j) j* j+ uh1jhhhjIhNhNubj- )}(hq**Parameters** ``struct gpu_buddy *mm`` GPU buddy manager ``struct gpu_buddy_block *block`` GPU buddy blockh](h)}(h**Parameters**h]j7 )}(hjE^h]h Parameters}(hjG^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjC^ubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj?^ubjM )}(hhh](jR )}(h+``struct gpu_buddy *mm`` GPU buddy manager h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hjd^h]hstruct gpu_buddy *mm}(hjf^hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjb^ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj^^ubjt )}(hhh]h)}(hGPU buddy managerh]hGPU buddy manager}(hj}^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy^hMhjz^ubah}(h]h ]h"]h$]h&]uh1js hj^^ubeh}(h]h ]h"]h$]h&]uh1jQ hjy^hMhj[^ubjR )}(h1``struct gpu_buddy_block *block`` GPU buddy blockh](jX )}(h!``struct gpu_buddy_block *block``h]j^ )}(hj^h]hstruct gpu_buddy_block *block}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj^ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj^ubjt )}(hhh]h)}(hGPU buddy blockh]hGPU buddy block}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj^ubah}(h]h ]h"]h$]h&]uh1js hj^ubeh}(h]h ]h"]h$]h&]uh1jQ hj^hMhj[^ubeh}(h]h ]h"]h$]h&]uh1jL hj?^ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjIhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jgpu_buddy_print (C function)c.gpu_buddy_printhNtauh1jhjIhhhNhNubj)}(hhh](j)}(h+void gpu_buddy_print (struct gpu_buddy *mm)h]j)}(h*void gpu_buddy_print(struct gpu_buddy *mm)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj_hMubj)}(hgpu_buddy_printh]j)}(hgpu_buddy_printh]hgpu_buddy_print}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj_hMubj>)}(h(struct gpu_buddy *mm)h]jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hj4_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0_ubj)}(h h]h }(hjA_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0_ubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hjR_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO_ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjT_modnameN classnameNjj)}j]j)}j}j_sbc.gpu_buddy_printasbuh1hhj0_ubj)}(h h]h }(hjr_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0_ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0_ubj)}(hmmh]hmm}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj,_ubah}(h]h ]h"]h$]h&]jjuh1j=hj^hhhj_hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhj_hMubah}(h]j^ah ](jjeh"]h$]h&]j j )j huh1jhj_hMhj^hhubj )}(hhh]h)}(hprint allocator stateh]hprint allocator state}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj_hhubah}(h]h ]h"]h$]h&]uh1j hj^hhhj_hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j_j( j_j) j* j+ uh1jhhhjIhNhNubj- )}(h<**Parameters** ``struct gpu_buddy *mm`` GPU buddy managerh](h)}(h**Parameters**h]j7 )}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj_ubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj_ubjM )}(hhh]jR )}(h*``struct gpu_buddy *mm`` GPU buddy managerh](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hj_h]hstruct gpu_buddy *mm}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]uh1jW hO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj_ubjt )}(hhh]h)}(hGPU buddy managerh]hGPU buddy manager}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhO/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:534: ./drivers/gpu/buddy.chMhj`ubah}(h]h ]h"]h$]h&]uh1js hj_ubeh}(h]h ]h"]h$]h&]uh1jQ hj `hMhj_ubah}(h]h ]h"]h$]h&]uh1jL hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjIhhhNhNubeh}(h]jah ]h"]/buddy allocator function references (gpu buddy)ah$]h&]uh1hhjvIhhhhhMubh)}(hhh](h)}(h.DRM Buddy Specific Logging Function Referencesh]h.DRM Buddy Specific Logging Function References}(hjC`hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj@`hhhhhMubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_buddy_block_print (C function)c.drm_buddy_block_printhNtauh1jhj@`hhhNhNubj)}(hhh](j)}(hgvoid drm_buddy_block_print (struct gpu_buddy *mm, struct gpu_buddy_block *block, struct drm_printer *p)h]j)}(hfvoid drm_buddy_block_print(struct gpu_buddy *mm, struct gpu_buddy_block *block, struct drm_printer *p)h](j)}(hvoidh]hvoid}(hjj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf`hhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chKubj)}(h h]h }(hjy`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf`hhhjx`hKubj)}(hdrm_buddy_block_printh]j)}(hdrm_buddy_block_printh]hdrm_buddy_block_print}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjf`hhhjx`hKubj>)}(hL(struct gpu_buddy *mm, struct gpu_buddy_block *block, struct drm_printer *p)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj`modnameN classnameNjj)}j]j)}j}j`sbc.drm_buddy_block_printasbuh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hmmh]hmm}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(hstruct gpu_buddy_block *blockh](j)}(hj? h]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hj&ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(hgpu_buddy_blockh]hgpu_buddy_block}(hj7ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4aubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj9amodnameN classnameNjj)}j]j`c.drm_buddy_block_printasbuh1hhjaubj)}(h h]h }(hjUahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]h*}(hjcahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hblockh]hblock}(hjpahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubjD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjamodnameN classnameNjj)}j]j`c.drm_buddy_block_printasbuh1hhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]hp}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj`ubeh}(h]h ]h"]h$]h&]jjuh1j=hjf`hhhjx`hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjb`hhhjx`hKubah}(h]j]`ah ](jjeh"]h$]h&]j j )j huh1jhjx`hKhj_`hhubj )}(hhh]h)}(hprint block informationh]hprint block information}(hj bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chKhjbhhubah}(h]h ]h"]h$]h&]uh1j hj_`hhhjx`hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j!bj( j!bj) j* j+ uh1jhhhj@`hNhNubj- )}(h**Parameters** ``struct gpu_buddy *mm`` DRM buddy manager ``struct gpu_buddy_block *block`` DRM buddy block ``struct drm_printer *p`` DRM printer to useh](h)}(h**Parameters**h]j7 )}(hj+bh]h Parameters}(hj-bhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)bubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chKhj%bubjM )}(hhh](jR )}(h+``struct gpu_buddy *mm`` DRM buddy manager h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hjJbh]hstruct gpu_buddy *mm}(hjLbhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHbubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chKhjDbubjt )}(hhh]h)}(hDRM buddy managerh]hDRM buddy manager}(hjcbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_bhKhj`bubah}(h]h ]h"]h$]h&]uh1js hjDbubeh}(h]h ]h"]h$]h&]uh1jQ hj_bhKhjAbubjR )}(h2``struct gpu_buddy_block *block`` DRM buddy block h](jX )}(h!``struct gpu_buddy_block *block``h]j^ )}(hjbh]hstruct gpu_buddy_block *block}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chKhj}bubjt )}(hhh]h)}(hDRM buddy blockh]hDRM buddy block}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjbubah}(h]h ]h"]h$]h&]uh1js hj}bubeh}(h]h ]h"]h$]h&]uh1jQ hjbhKhjAbubjR )}(h,``struct drm_printer *p`` DRM printer to useh](jX )}(h``struct drm_printer *p``h]j^ )}(hjbh]hstruct drm_printer *p}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chKhjbubjt )}(hhh]h)}(hDRM printer to useh]hDRM printer to use}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chKhjbubah}(h]h ]h"]h$]h&]uh1js hjbubeh}(h]h ]h"]h$]h&]uh1jQ hjbhKhjAbubeh}(h]h ]h"]h$]h&]uh1jL hj%bubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj@`hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_buddy_print (C function)c.drm_buddy_printhNtauh1jhj@`hhhNhNubj)}(hhh](j)}(hBvoid drm_buddy_print (struct gpu_buddy *mm, struct drm_printer *p)h]j)}(hAvoid drm_buddy_print(struct gpu_buddy *mm, struct drm_printer *p)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chK$ubj)}(h h]h }(hj%chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhj$chK$ubj)}(hdrm_buddy_printh]j)}(hdrm_buddy_printh]hdrm_buddy_print}(hj7chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3cubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhj$chK$ubj>)}(h-(struct gpu_buddy *mm, struct drm_printer *p)h](jD)}(hstruct gpu_buddy *mmh](j)}(hj? h]hstruct}(hjSchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOcubj)}(h h]h }(hj`chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOcubh)}(hhh]j)}(h gpu_buddyh]h gpu_buddy}(hjqchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjncubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjscmodnameN classnameNjj)}j]j)}j}j9csbc.drm_buddy_printasbuh1hhjOcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOcubj)}(hmmh]hmm}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOcubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjKcubjD)}(hstruct drm_printer *ph](j)}(hj? h]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]jcc.drm_buddy_printasbuh1hhjcubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hp}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjKcubeh}(h]h ]h"]h$]h&]jjuh1j=hjchhhj$chK$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjchhhj$chK$ubah}(h]j cah ](jjeh"]h$]h&]j j )j huh1jhj$chK$hj chhubj )}(hhh]h)}(hprint allocator stateh]hprint allocator state}(hjEdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chK$hjBdhhubah}(h]h ]h"]h$]h&]uh1j hj chhhj$chK$ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j]dj( j]dj) j* j+ uh1jhhhj@`hNhNubj- )}(hl**Parameters** ``struct gpu_buddy *mm`` DRM buddy manager ``struct drm_printer *p`` DRM printer to useh](h)}(h**Parameters**h]j7 )}(hjgdh]h Parameters}(hjidhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjedubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chK(hjadubjM )}(hhh](jR )}(h+``struct gpu_buddy *mm`` DRM buddy manager h](jX )}(h``struct gpu_buddy *mm``h]j^ )}(hjdh]hstruct gpu_buddy *mm}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjdubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chK&hjdubjt )}(hhh]h)}(hDRM buddy managerh]hDRM buddy manager}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhK&hjdubah}(h]h ]h"]h$]h&]uh1js hjdubeh}(h]h ]h"]h$]h&]uh1jQ hjdhK&hj}dubjR )}(h,``struct drm_printer *p`` DRM printer to useh](jX )}(h``struct drm_printer *p``h]j^ )}(hjdh]hstruct drm_printer *p}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjdubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chK(hjdubjt )}(hhh]h)}(hDRM printer to useh]hDRM printer to use}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:540: ./drivers/gpu/drm/drm_buddy.chK'hjdubah}(h]h ]h"]h$]h&]uh1js hjdubeh}(h]h ]h"]h$]h&]uh1jQ hjdhK(hj}dubeh}(h]h ]h"]h$]h&]uh1jL hjadubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hj@`hhhNhNubeh}(h]jah ]h"].drm buddy specific logging function referencesah$]h&]uh1hhjvIhhhhhMubeh}(h]jrah ]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()}(hjehhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjehhhhhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_clflush_pages (C function)c.drm_clflush_pageshNtauh1jhjehhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj8ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ehhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKOubj)}(h h]h }(hjGehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ehhhjFehKOubj)}(hdrm_clflush_pagesh]j)}(hdrm_clflush_pagesh]hdrm_clflush_pages}(hjYehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUeubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4ehhhjFehKOubj>)}(h/(struct page *pages[], unsigned long num_pages)h](jD)}(hstruct page *pages[]h](j)}(hj? h]hstruct}(hjuehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqeubh)}(hhh]j)}(hpageh]hpage}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjemodnameN classnameNjj)}j]j)}j}j[esbc.drm_clflush_pagesasbuh1hhjqeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqeubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqeubj)}(hpagesh]hpages}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqeubj)}(h[h]h[}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqeubj)}(h]h]h]}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqeubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjmeubjD)}(hunsigned long num_pagesh](j)}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hlongh]hlong}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hj-fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h num_pagesh]h num_pages}(hj;fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjmeubeh}(h]h ]h"]h$]h&]jjuh1j=hj4ehhhjFehKOubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0ehhhjFehKOubah}(h]j+eah ](jjeh"]h$]h&]j j )j huh1jhjFehKOhj-ehhubj )}(hhh]h)}(h%Flush dcache lines of a set of pages.h]h%Flush dcache lines of a set of pages.}(hjefhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKOhjbfhhubah}(h]h ]h"]h$]h&]uh1j hj-ehhhjFehKOubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j}fj( j}fj) j* j+ uh1jhhhjehNhNubj- )}(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]j7 )}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjfubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKShjfubjM )}(hhh](jR )}(h6``struct page *pages[]`` List of pages to be flushed. h](jX )}(h``struct page *pages[]``h]j^ )}(hjfh]hstruct page *pages[]}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjfubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKPhjfubjt )}(hhh]h)}(hList of pages to be flushed.h]hList of pages to be flushed.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKPhjfubah}(h]h ]h"]h$]h&]uh1js hjfubeh}(h]h ]h"]h$]h&]uh1jQ hjfhKPhjfubjR )}(h:``unsigned long num_pages`` Number of pages in the array. h](jX )}(h``unsigned long num_pages``h]j^ )}(hjfh]hunsigned long num_pages}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjfubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKQhjfubjt )}(hhh]h)}(hNumber of pages in the array.h]hNumber of pages in the array.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKQhjfubah}(h]h ]h"]h$]h&]uh1js hjfubeh}(h]h ]h"]h$]h&]uh1jQ hjfhKQhjfubeh}(h]h ]h"]h$]h&]uh1jL hjfubh)}(h**Description**h]j7 )}(hjgh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjgubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKShjfubh)}(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.}(hj0ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKRhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjehhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_clflush_sg (C function)c.drm_clflush_sghNtauh1jhjehhhNhNubj)}(hhh](j)}(h)void drm_clflush_sg (struct sg_table *st)h]j)}(h(void drm_clflush_sg(struct sg_table *st)h](j)}(hvoidh]hvoid}(hj_ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ghhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKxubj)}(h h]h }(hjnghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ghhhjmghKxubj)}(hdrm_clflush_sgh]j)}(hdrm_clflush_sgh]hdrm_clflush_sg}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|gubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[ghhhjmghKxubj>)}(h(struct sg_table *st)h]jD)}(hstruct sg_table *sth](j)}(hj? h]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j)}(hsg_tableh]hsg_table}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjgmodnameN classnameNjj)}j]j)}j}jgsbc.drm_clflush_sgasbuh1hhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hsth]hst}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjgubah}(h]h ]h"]h$]h&]jjuh1j=hj[ghhhjmghKxubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWghhhjmghKxubah}(h]jRgah ](jjeh"]h$]h&]j j )j huh1jhjmghKxhjTghhubj )}(hhh]h)}(h0Flush dcache lines pointing to a scather-gather.h]h0Flush dcache lines pointing to a scather-gather.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKxhjhhhubah}(h]h ]h"]h$]h&]uh1j hjTghhhjmghKxubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j7hj( j7hj) j* j+ uh1jhhhjehNhNubj- )}(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]j7 )}(hjAhh]h Parameters}(hjChhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj?hubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chK|hj;hubjM )}(hhh]jR )}(h)``struct sg_table *st`` struct sg_table. h](jX )}(h``struct sg_table *st``h]j^ )}(hj`hh]hstruct sg_table *st}(hjbhhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj^hubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKyhjZhubjt )}(hhh]h)}(hstruct sg_table.h]hstruct sg_table.}(hjyhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhhKyhjvhubah}(h]h ]h"]h$]h&]uh1js hjZhubeh}(h]h ]h"]h$]h&]uh1jQ hjuhhKyhjWhubah}(h]h ]h"]h$]h&]uh1jL hj;hubh)}(h**Description**h]j7 )}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjhubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chK{hj;hubh)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKzhj;hubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjehhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_clflush_virt_range (C function)c.drm_clflush_virt_rangehNtauh1jhjehhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhKubj)}(hdrm_clflush_virt_rangeh]j)}(hdrm_clflush_virt_rangeh]hdrm_clflush_virt_range}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjhhKubj>)}(h"(void *addr, unsigned long length)h](jD)}(h void *addrh](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hj+ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]h*}(hj9ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(haddrh]haddr}(hjFihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjiubjD)}(hunsigned long lengthh](j)}(hunsignedh]hunsigned}(hj_ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[iubj)}(h h]h }(hjmihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[iubj)}(hlongh]hlong}(hj{ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[iubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[iubj)}(hlengthh]hlength}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[iubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjiubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhhjhhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhjhhKubah}(h]jhah ](jjeh"]h$]h&]j j )j huh1jhjhhKhjhhhubj )}(hhh]h)}(hFlush dcache lines of a regionh]hFlush dcache lines of a region}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKhjihhubah}(h]h ]h"]h$]h&]uh1j hjhhhhjhhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jij( jij) j* j+ uh1jhhhjehNhNubj- )}(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]j7 )}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjiubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKhjiubjM )}(hhh](jR )}(h.``void *addr`` Initial kernel memory address. h](jX )}(h``void *addr``h]j^ )}(hjjh]h void *addr}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKhjiubjt )}(hhh]h)}(hInitial kernel memory address.h]hInitial kernel memory address.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKhjjubah}(h]h ]h"]h$]h&]uh1js hjiubeh}(h]h ]h"]h$]h&]uh1jQ hjjhKhjiubjR )}(h&``unsigned long length`` Region size. h](jX )}(h``unsigned long length``h]j^ )}(hj;jh]hunsigned long length}(hj=jhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj9jubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKhj5jubjt )}(hhh]h)}(h Region size.h]h Region size.}(hjTjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPjhKhjQjubah}(h]h ]h"]h$]h&]uh1js hj5jubeh}(h]h ]h"]h$]h&]uh1jQ hjPjhKhjiubeh}(h]h ]h"]h$]h&]uh1jL hjiubh)}(h**Description**h]j7 )}(hjvjh]h Description}(hjxjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjtjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKhjiubh)}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chKhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjehhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_memcpy_from_wc (C function)c.drm_memcpy_from_wchNtauh1jhjehhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chM%ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhM%ubj)}(hdrm_memcpy_from_wch]j)}(hdrm_memcpy_from_wch]hdrm_memcpy_from_wc}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhjjhM%ubj>)}(hG(struct iosys_map *dst, const struct iosys_map *src, unsigned long len)h](jD)}(hstruct iosys_map *dsth](j)}(hj? h]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkmodnameN classnameNjj)}j]j)}j}jjsbc.drm_memcpy_from_wcasbuh1hhjjubj)}(h h]h }(hj6khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]h*}(hjDkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hdsth]hdst}(hjQkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjjubjD)}(hconst struct iosys_map *srch](j)}(hjJh]hconst}(hjjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfkubj)}(h h]h }(hjwkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfkubj)}(hj? h]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfkubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkmodnameN classnameNjj)}j]j2kc.drm_memcpy_from_wcasbuh1hhjfkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfkubj)}(hsrch]hsrc}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfkubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjjubjD)}(hunsigned long lenh](j)}(hunsignedh]hunsigned}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hlongh]hlong}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hlenh]hlen}(hj-lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjjubeh}(h]h ]h"]h$]h&]jjuh1j=hjjhhhjjhM%ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjjhM%ubah}(h]jjah ](jjeh"]h$]h&]j j )j huh1jhjjhM%hjjhhubj )}(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.}(hjWlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chM%hjTlhhubah}(h]h ]h"]h$]h&]uh1j hjjhhhjjhM%ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jolj( jolj) j* j+ uh1jhhhjehNhNubj- )}(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]j7 )}(hjylh]h Parameters}(hj{lhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjwlubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chM)hjslubjM )}(hhh](jR )}(h2``struct iosys_map *dst`` The destination pointer h](jX )}(h``struct iosys_map *dst``h]j^ )}(hjlh]hstruct iosys_map *dst}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjlubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chM'hjlubjt )}(hhh]h)}(hThe destination pointerh]hThe destination pointer}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM'hjlubah}(h]h ]h"]h$]h&]uh1js hjlubeh}(h]h ]h"]h$]h&]uh1jQ hjlhM'hjlubjR )}(h3``const struct iosys_map *src`` The source pointer h](jX )}(h``const struct iosys_map *src``h]j^ )}(hjlh]hconst struct iosys_map *src}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjlubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chM(hjlubjt )}(hhh]h)}(hThe source pointerh]hThe source pointer}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM(hjlubah}(h]h ]h"]h$]h&]uh1js hjlubeh}(h]h ]h"]h$]h&]uh1jQ hjlhM(hjlubjR )}(h?``unsigned long len`` The size of the area o transfer in bytes h](jX )}(h``unsigned long len``h]j^ )}(hj mh]hunsigned long len}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chM)hjmubjt )}(hhh]h)}(h(The size of the area o transfer in bytesh]h(The size of the area o transfer in bytes}(hj#mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM)hj mubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjmhM)hjlubeh}(h]h ]h"]h$]h&]uh1jL hjslubh)}(h**Description**h]j7 )}(hjEmh]h Description}(hjGmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjCmubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chM+hjslubh)}(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.}(hj[mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:546: ./drivers/gpu/drm/drm_cache.chM*hjslubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjehhhNhNubjͲ)}(h.. _drm_sync_objects:h]h}(h]h ]h"]h$]h&]hjuh1j̲hM%hjehhhhubeh}(h]jah ]h"]'drm cache handling and fast wc memcpy()ah$]h&]uh1hhhhhhhhM ubh)}(hhh](h)}(hDRM Sync Objectsh]hDRM Sync Objects}(hjmhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjmhhhhhM(ubh)}(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 }(hjmhhhNhNubh)}(h:c:type:`drm_syncobj`h]j^ )}(hjmh]h drm_syncobj}(hjmhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_syncobjuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKhjmubhX_) 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:}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhKhjmhhubj )}(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]j)}(hhh](j)}(h$Creation and destruction of syncobjsh]h)}(hjmh]h$Creation and destruction of syncobjs}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK%hjmubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(h?Import and export of syncobjs to/from a syncobj file descriptorh]h)}(hjmh]h?Import and export of syncobjs to/from a syncobj file descriptor}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK&hjmubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(hBImport and export a syncobj's underlying fence to/from a sync fileh]h)}(hjmh]hDImport and export a syncobj’s underlying fence to/from a sync file}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK'hjmubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(h'Reset a syncobj (set its fence to NULL)h]h)}(hjnh]h'Reset a syncobj (set its fence to NULL)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK(hjnubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(h1Signal a syncobj (set a trivially signaled fence)h]h)}(hj.nh]h1Signal a syncobj (set a trivially signaled fence)}(hj0nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK)hj,nubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(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}(hjHnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK*hjDnubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]jjuh1j hjmhK%hjmubah}(h]h ]h"]h$]h&]uh1jhjmhK%hjmhhubh)}(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 }(hjinhhhNhNubh)}(h:c:type:`dma_fence_chain`h]j^ )}(hjsnh]hdma_fence_chain}(hjunhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqnubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fence_chainuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK,hjinubh rather than a single struct }(hjinhhhNhNubh)}(h:c:type:`dma_fence`h]j^ )}(hjnh]h dma_fence}(hjnhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fenceuh1hhjnhK,hjinubh#, through the following operations:}(hjinhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhK,hjmhhubj )}(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]j)}(hhh](j)}(h$Signal a given point on the timelineh]h)}(hjnh]h$Signal a given point on the timeline}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK0hjnubah}(h]h ]h"]h$]h&]uh1jhjnubj)}(h3Wait for a given point to appear and/or be signaledh]h)}(hjnh]h3Wait for a given point to appear and/or be signaled}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK1hjnubah}(h]h ]h"]h$]h&]uh1jhjnubj)}(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}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK2hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]jjuh1j hjnhK0hjnubah}(h]h ]h"]h$]h&]uh1jhjnhK0hjmhhubh)}(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 }(hjohhhNhNubh)}(h:c:type:`dma_fence`h]j^ )}(hj$oh]h dma_fence}(hj&ohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj"oubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fenceuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK4hjoubh 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 }(hjohhhNhNubh)}(h%:c:type:`DRM_SYNCOBJ_CREATE_SIGNALED`h]j^ )}(hjHoh]hDRM_SYNCOBJ_CREATE_SIGNALED}(hjJohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjFoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_SYNCOBJ_CREATE_SIGNALEDuh1hhjAohK4hjoubh flag is passed to }(hjohhhNhNubh)}(h":c:type:`DRM_IOCTL_SYNCOBJ_CREATE`h]j^ )}(hjkoh]hDRM_IOCTL_SYNCOBJ_CREATE}(hjmohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjioubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_CREATEuh1hhjAohK4hjoubh.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAohK4hjmhhubh)}(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 }(hjohhhNhNubh)}(h:c:type:`dma_fence_chain`h]j^ )}(hjoh]hdma_fence_chain}(hjohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fence_chainuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK;hjoubhv pointing to the DRM driver’s fence and also pointing to the previous fence that was in the syncobj. The new struct }(hjohhhNhNubh)}(h:c:type:`dma_fence_chain`h]j^ )}(hjoh]hdma_fence_chain}(hjohhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fence_chainuh1hhjohK;hjoubh 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.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohK;hjmhhubh)}(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 :}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKGhjmhhubj )}(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]j)}(hhh](j)}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKKhjoubah}(h]h ]h"]h$]h&]uh1jhjoubj)}(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 }(hjphhhNhNubh)}(h:c:type:`dma_fence`h]j^ )}(hj$ph]h dma_fence}(hj&phhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj"pubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j dma_fenceuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKMhjpubhT associated with a given point if the syncobj is considered as a timeline primitive.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAphKMhjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]jjuh1j hjphKKhjoubah}(h]h ]h"]h$]h&]uh1jhjphKKhjmhhubh)}(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.}(hj^phhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKPhjmhhubh)}(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. }(hjmphhhNhNubh)}(h!:c:type:`DRM_IOCTL_SYNCOBJ_RESET`h]j^ )}(hjwph]hDRM_IOCTL_SYNCOBJ_RESET}(hjyphhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjupubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_RESETuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKShjmpubh and }(hjmphhhNhNubh)}(h":c:type:`DRM_IOCTL_SYNCOBJ_SIGNAL`h]j^ )}(hjph]hDRM_IOCTL_SYNCOBJ_SIGNAL}(hjphhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_SIGNALuh1hhjphKShjmpubh 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.}(hjmphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphKShjmhhubh)}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK[hjmhhubh)}(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).}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chK`hjmhhubh)}(hhh](h)}(hHost-side wait on syncobjsh]hHost-side wait on syncobjs}(hjphhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjphNhNubh)}(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^ )}(hjph]hDRM_IOCTL_SYNCOBJ_WAIT}(hjphhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_WAITuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKlhjpubhm takes an array of syncobj handles and does a host-side wait on all of the syncobj fences simultaneously. If }(hjphhhNhNubh)}(h):c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL`h]j^ )}(hjqh]hDRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL}(hjqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALLuh1hhjqhKlhjpubh 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.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjqhKlhjpubh)}(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 }(hjBqhhhNhNubh)}(h0:c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT`h]j^ )}(hjLqh]h&DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT}(hjNqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjJqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMITuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKshjBqubhx 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 }(hjBqhhhNhNubh)}(h0:c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT`h]j^ )}(hjpqh]h&DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT}(hjrqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjnqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMITuh1hhjiqhKshjBqubhX 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.}(hjBqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjiqhKshjpubh)}(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 }(hjqhhhNhNubh)}(h.:c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE`h]j^ )}(hjqh]h$DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE}(hjqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j $DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKhjqubh 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 }(hjqhhhNhNubh)}(h:c:type:`CLOCK_MONOTONIC`h]j^ )}(hjqh]hCLOCK_MONOTONIC}(hjqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j CLOCK_MONOTONICuh1hhjqhKhjqubh value in units of ns.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjqhKhjpubh)}(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, }(hjqhhhNhNubh)}(h):c:type:`DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT`h]j^ )}(hjqh]hDRM_IOCTL_SYNCOBJ_TIMELINE_WAIT}(hjqhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_TIMELINE_WAITuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKhjqubh 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.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhKhjpubh)}(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^ )}(hj$rh]hDRM_IOCTL_SYNCOBJ_TIMELINE_WAIT}(hj&rhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj"rubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_TIMELINE_WAITuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKhjrubh 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 }(hjrhhhNhNubh)}(h/:c:type:`DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE`h]j^ )}(hjHrh]h%DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE}(hjJrhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjFrubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j %DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLEuh1hhjArhKhjrubhx flag. This requirement is inherited from the wait-before-signal behavior required by the Vulkan timeline semaphore API.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjArhKhjpubh)}(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, }(hjorhhhNhNubh)}(h#:c:type:`DRM_IOCTL_SYNCOBJ_EVENTFD`h]j^ )}(hjyrh]hDRM_IOCTL_SYNCOBJ_EVENTFD}(hj{rhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjwrubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_EVENTFDuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKhjorubh 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.}(hjorhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhKhjpubeh}(h]j"ah ]h"]host-side wait on syncobjsah$]h&]uh1hhjmhhhNhNubh)}(hhh](h)}(hImport/export of syncobjsh]hImport/export of syncobjs}(hjrhhhNhNubah}(h]h ]h"]h$]h&]hj>uh1hhjrhNhNubh)}(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^ )}(hjrh]hDRM_IOCTL_SYNCOBJ_FD_TO_HANDLE}(hjrhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_FD_TO_HANDLEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKhjrubh and }(hjrhhhNhNubh)}(h(:c:type:`DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD`h]j^ )}(hjrh]hDRM_IOCTL_SYNCOBJ_HANDLE_TO_FD}(hjrhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j DRM_IOCTL_SYNCOBJ_HANDLE_TO_FDuh1hhjrhKhjrubh6 provide two mechanisms for import/export of syncobjs.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhKhjrubh)}(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 shhhNhNubh)}(h:c:type:`drm_syncobj`h]j^ )}(hjsh]h drm_syncobj}(hjshhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjsubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_syncobjuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:554: ./drivers/gpu/drm/drm_syncobj.chKhj subhXy 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 shhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1shKhjrubh)}(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 }(hjhj/vubjt )}(hhh]h)}(hUProtects :c:type:`cb_list` and :c:type:`ev_fd_list`, and write-locks :c:type:`fence`.h](h Protects }(hjNvhhhNhNubh)}(h:c:type:`cb_list`h]j^ )}(hjXvh]hcb_list}(hjZvhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjVvubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j cb_listuh1hhjJvhK>hjNvubh and }(hjNvhhhNhNubh)}(h:c:type:`ev_fd_list`h]j^ )}(hj{vh]h ev_fd_list}(hj}vhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjyvubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j ev_fd_listuh1hhjJvhK>hjNvubh, and write-locks }(hjNvhhhNhNubh)}(h:c:type:`fence`h]j^ )}(hjvh]hfence}(hjvhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjvubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j fenceuh1hhjJvhK>hjNvubh.}(hjNvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJvhK>hjKvubah}(h]h ]h"]h$]h&]uh1js hj/vubeh}(h]h ]h"]h$]h&]uh1jQ hjJvhK>hjuubjR )}(h)``file`` A file backing for this syncobj.h](jX )}(h``file``h]j^ )}(hjvh]hfile}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjvubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKAhjvubjt )}(hhh]h)}(h A file backing for this syncobj.h]h A file backing for this syncobj.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKBhjvubah}(h]h ]h"]h$]h&]uh1js hjvubeh}(h]h ]h"]h$]h&]uh1jQ hjvhKAhjuubeh}(h]h ]h"]h$]h&]uh1jL hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubh)}(h**Description**h]j7 )}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjwubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKEhjmhhubh)}(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 }(hj0whhhNhNubh)}(h:c:type:`dma_fence`h]j^ )}(hj:wh]h dma_fence}(hj)}(h(struct drm_syncobj *obj)h]jD)}(hstruct drm_syncobj *objh](j)}(hj? h]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjwmodnameN classnameNjj)}j]j)}j}jwsbc.drm_syncobj_getasbuh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hobjh]hobj}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjwubah}(h]h ]h"]h$]h&]jjuh1j=hjwwhhhjwhKIubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjswhhhjwhKIubah}(h]jnwah ](jjeh"]h$]h&]j j )j huh1jhjwhKIhjpwhhubj )}(hhh]h)}(hacquire a syncobj referenceh]hacquire a syncobj reference}(hj;xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKIhj8xhhubah}(h]h ]h"]h$]h&]uh1j hjpwhhhjwhKIubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jSxj( jSxj) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hj]xh]h Parameters}(hj_xhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj[xubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKMhjWxubjM )}(hhh]jR )}(h(``struct drm_syncobj *obj`` sync object h](jX )}(h``struct drm_syncobj *obj``h]j^ )}(hj|xh]hstruct drm_syncobj *obj}(hj~xhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjzxubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKJhjvxubjt )}(hhh]h)}(h sync objecth]h sync object}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKJhjxubah}(h]h ]h"]h$]h&]uh1js hjvxubeh}(h]h ]h"]h$]h&]uh1jQ hjxhKJhjsxubah}(h]h ]h"]h$]h&]uh1jL hjWxubh)}(h**Description**h]j7 )}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjxubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKLhjWxubh)}(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 }(hjxhhhNhNubj7 )}(h**obj**h]hobj}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjxubhT. It is illegal to call this without already holding a reference. No locks required.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKKhjWxubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_syncobj_put (C function)c.drm_syncobj_puthNtauh1jhjmhhhNhNubj)}(hhh](j)}(h.void drm_syncobj_put (struct drm_syncobj *obj)h]j)}(h-void drm_syncobj_put(struct drm_syncobj *obj)h](j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj yhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKVubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj yhhhjyhKVubj)}(hdrm_syncobj_puth]j)}(hdrm_syncobj_puth]hdrm_syncobj_put}(hj/yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+yubah}(h]h ](jjeh"]h$]h&]jjuh1jhj yhhhjyhKVubj>)}(h(struct drm_syncobj *obj)h]jD)}(hstruct drm_syncobj *objh](j)}(hj? h]hstruct}(hjKyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGyubj)}(h h]h }(hjXyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGyubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hjiyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfyubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkymodnameN classnameNjj)}j]j)}j}j1ysbc.drm_syncobj_putasbuh1hhjGyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGyubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGyubj)}(hobjh]hobj}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGyubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjCyubah}(h]h ]h"]h$]h&]jjuh1j=hj yhhhjyhKVubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjyhhhjyhKVubah}(h]jyah ](jjeh"]h$]h&]j j )j huh1jhjyhKVhjyhhubj )}(hhh]h)}(h%release a reference to a sync object.h]h%release a reference to a sync object.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKVhjyhhubah}(h]h ]h"]h$]h&]uh1j hjyhhhjyhKVubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jyj( jyj) j* j+ uh1jhhhjmhNhNubj- )}(h:**Parameters** ``struct drm_syncobj *obj`` sync object.h](h)}(h**Parameters**h]j7 )}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjyubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKZhjyubjM )}(hhh]jR )}(h(``struct drm_syncobj *obj`` sync object.h](jX )}(h``struct drm_syncobj *obj``h]j^ )}(hjzh]hstruct drm_syncobj *obj}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj zubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhK\hj zubjt )}(hhh]h)}(h sync object.h]h sync object.}(hj(zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKWhj%zubah}(h]h ]h"]h$]h&]uh1js hj zubeh}(h]h ]h"]h$]h&]uh1jQ hj$zhK\hjzubah}(h]h ]h"]h$]h&]uh1jL hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_syncobj_fence_get (C function)c.drm_syncobj_fence_gethNtauh1jhjmhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjizhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjezhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhK`ubj)}(h h]h }(hjwzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjezhhhjvzhK`ubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjzmodnameN classnameNjj)}j]j)}j}drm_syncobj_fence_getsbc.drm_syncobj_fence_getasbuh1hhjezhhhjvzhK`ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjezhhhjvzhK`ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjezhhhjvzhK`ubj)}(hdrm_syncobj_fence_geth]j)}(hjzh]hdrm_syncobj_fence_get}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjezhhhjvzhK`ubj>)}(h(struct drm_syncobj *syncobj)h]jD)}(hstruct drm_syncobj *syncobjh](j)}(hj? h]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj{modnameN classnameNjj)}j]jzc.drm_syncobj_fence_getasbuh1hhjzubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]h*}(hj-{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hsyncobjh]hsyncobj}(hj:{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjzubah}(h]h ]h"]h$]h&]jjuh1j=hjezhhhjvzhK`ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjazhhhjvzhK`ubah}(h]j\zah ](jjeh"]h$]h&]j j )j huh1jhjvzhK`hj^zhhubj )}(hhh]h)}(h+get a reference to a fence in a sync objecth]h+get a reference to a fence in a sync object}(hjd{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhK`hja{hhubah}(h]h ]h"]h$]h&]uh1j hj^zhhhjvzhK`ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j|{j( j|{j) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKdhj{ubjM )}(hhh]jR )}(h-``struct drm_syncobj *syncobj`` sync object. h](jX )}(h``struct drm_syncobj *syncobj``h]j^ )}(hj{h]hstruct drm_syncobj *syncobj}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj{ubah}(h]h ]h"]h$]h&]uh1jW hU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKahj{ubjt )}(hhh]h)}(h sync object.h]h sync object.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hKahj{ubah}(h]h ]h"]h$]h&]uh1js hj{ubeh}(h]h ]h"]h$]h&]uh1jQ hj{hKahj{ubah}(h]h ]h"]h$]h&]uh1jL hj{ubh)}(h**Description**h]j7 )}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKchj{ubh)}(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 }(hj{hhhNhNubh)}(h):c:type:`drm_syncobj.fence `h]j^ )}(hj|h]hdrm_syncobj.fence}(hj|hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj{ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_syncobjuh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKbhj{ubh contained in }(hj{hhhNhNubj7 )}(h**obj**h]hobj}(hj"|hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj{ubha, if not NULL. It is illegal to call this without already holding a reference. No locks required.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|hKbhj{ubh)}(h **Return**h]j7 )}(hj<|h]hReturn}(hj>|hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:|ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKfhj{ubh)}(h4Either the fence of **obj** or NULL if there's none.h](hEither the fence of }(hjR|hhhNhNubj7 )}(h**obj**h]hobj}(hjZ|hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjR|ubh or NULL if there’s none.}(hjR|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:557: ./include/drm/drm_syncobj.hhKghj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_syncobj_find (C function)c.drm_syncobj_findhNtauh1jhjmhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chKubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj|hKubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj|modnameN classnameNjj)}j]j)}j}drm_syncobj_findsbc.drm_syncobj_findasbuh1hhj|hhhj|hKubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj|hKubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj|hKubj)}(hdrm_syncobj_findh]j)}(hj|h]hdrm_syncobj_find}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhj|hKubj>)}(h+(struct drm_file *file_private, u32 handle)h](jD)}(hstruct drm_file *file_privateh](j)}(hj? h]hstruct}(hj }hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj }ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj }ubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hj+}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(}ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj-}modnameN classnameNjj)}j]j|c.drm_syncobj_findasbuh1hhj }ubj)}(h h]h }(hjI}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj }ubj)}(hjh]h*}(hjW}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj }ubj)}(h file_privateh]h file_private}(hjd}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj }ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubjD)}(h u32 handleh](h)}(hhh]j)}(hu32h]hu32}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}}ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj}modnameN classnameNjj)}j]j|c.drm_syncobj_findasbuh1hhjy}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy}ubj)}(hhandleh]hhandle}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj}ubeh}(h]h ]h"]h$]h&]jjuh1j=hj|hhhj|hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj|hhhj|hKubah}(h]j|ah ](jjeh"]h$]h&]j j )j huh1jhj|hKhj|hhubj )}(hhh]h)}(h#lookup and reference a sync object.h]h#lookup and reference a sync object.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chKhj}hhubah}(h]h ]h"]h$]h&]uh1j hj|hhhj|hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j}j( j}j) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj}ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chKhj}ubjM )}(hhh](jR )}(h;``struct drm_file *file_private`` drm file private pointer h](jX )}(h!``struct drm_file *file_private``h]j^ )}(hj~h]hstruct drm_file *file_private}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj~ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chKhj~ubjt )}(hhh]h)}(hdrm file private pointerh]hdrm file private pointer}(hj0~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,~hKhj-~ubah}(h]h ]h"]h$]h&]uh1js hj~ubeh}(h]h ]h"]h$]h&]uh1jQ hj,~hKhj~ubjR )}(h-``u32 handle`` sync object handle to lookup. h](jX )}(h``u32 handle``h]j^ )}(hjP~h]h u32 handle}(hjR~hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjN~ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chKhjJ~ubjt )}(hhh]h)}(hsync object handle to lookup.h]hsync object handle to lookup.}(hji~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje~hKhjf~ubah}(h]h ]h"]h$]h&]uh1js hjJ~ubeh}(h]h ]h"]h$]h&]uh1jQ hje~hKhj~ubeh}(h]h ]h"]h$]h&]uh1jL hj}ubh)}(h**Description**h]j7 )}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj~ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chKhj}ubh)}(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().}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chKhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_syncobj_add_point (C function)c.drm_syncobj_add_pointhNtauh1jhjmhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMEubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhj~hMEubj)}(hdrm_syncobj_add_pointh]j)}(hdrm_syncobj_add_pointh]hdrm_syncobj_add_point}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhj~hMEubj>)}(he(struct drm_syncobj *syncobj, struct dma_fence_chain *chain, struct dma_fence *fence, uint64_t point)h](jD)}(hstruct drm_syncobj *syncobjh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj-modnameN classnameNjj)}j]j)}j}j~sbc.drm_syncobj_add_pointasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hsyncobjh]hsyncobj}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct dma_fence_chain *chainh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(hdma_fence_chainh]hdma_fence_chain}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jGc.drm_syncobj_add_pointasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hchainh]hchain}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct dma_fence *fenceh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jGc.drm_syncobj_add_pointasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfenceh]hfence}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(huint64_t pointh](h)}(hhh]j)}(huint64_th]huint64_t}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjdmodnameN classnameNjj)}j]jGc.drm_syncobj_add_pointasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hpointh]hpoint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hj~hhhj~hMEubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj~hhhj~hMEubah}(h]j~ah ](jjeh"]h$]h&]j j )j huh1jhj~hMEhj~hhubj )}(hhh]h)}(h%add new timeline point to the syncobjh]h%add new timeline point to the syncobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMEhjhhubah}(h]h ]h"]h$]h&]uh1j hj~hhhj~hMEubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jЀj( jЀj) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hjڀh]h Parameters}(hj܀hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj؀ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMIhjԀubjM )}(hhh](jR )}(hE``struct drm_syncobj *syncobj`` sync object to add timeline point do h](jX )}(h``struct drm_syncobj *syncobj``h]j^ )}(hjh]hstruct drm_syncobj *syncobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMFhjubjt )}(hhh]h)}(h$sync object to add timeline point doh]h$sync object to add timeline point do}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMFhjubjR )}(hE``struct dma_fence_chain *chain`` chain node to use to add the point h](jX )}(h!``struct dma_fence_chain *chain``h]j^ )}(hj2h]hstruct dma_fence_chain *chain}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj0ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMGhj,ubjt )}(hhh]h)}(h"chain node to use to add the pointh]h"chain node to use to add the point}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMGhjHubah}(h]h ]h"]h$]h&]uh1js hj,ubeh}(h]h ]h"]h$]h&]uh1jQ hjGhMGhjubjR )}(hC``struct dma_fence *fence`` fence to encapsulate in the chain node h](jX )}(h``struct dma_fence *fence``h]j^ )}(hjkh]hstruct dma_fence *fence}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMHhjeubjt )}(hhh]h)}(h&fence to encapsulate in the chain nodeh]h&fence to encapsulate in the chain node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1js hjeubeh}(h]h ]h"]h$]h&]uh1jQ hjhMHhjubjR )}(h8``uint64_t point`` sequence number to use for the point h](jX )}(h``uint64_t point``h]j^ )}(hjh]huint64_t point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMIhjubjt )}(hhh]h)}(h$sequence number to use for the pointh]h$sequence number to use for the point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMIhjubeh}(h]h ]h"]h$]h&]uh1jL hjԀubh)}(h**Description**h]j7 )}(hj߁h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj݁ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMKhjԀubh)}(h8Add the chain node as new timeline point to the syncobj.h]h8Add the chain node as new timeline point to the syncobj.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMJhjԀubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_syncobj_replace_fence (C function)c.drm_syncobj_replace_fencehNtauh1jhjmhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMnubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj2hMnubj)}(hdrm_syncobj_replace_fenceh]j)}(hdrm_syncobj_replace_fenceh]hdrm_syncobj_replace_fence}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj2hMnubj>)}(h6(struct drm_syncobj *syncobj, struct dma_fence *fence)h](jD)}(hstruct drm_syncobj *syncobjh](j)}(hj? h]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jGsbc.drm_syncobj_replace_fenceasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hsyncobjh]hsyncobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjYubjD)}(hstruct dma_fence *fenceh](j)}(hj? h]hstruct}(hjӂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_syncobj_replace_fenceasbuh1hhjςubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubj)}(hfenceh]hfence}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjςubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjYubeh}(h]h ]h"]h$]h&]jjuh1j=hj hhhj2hMnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj2hMnubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj2hMnhjhhubj )}(hhh]h)}(hreplace fence in a sync object.h]hreplace fence in a sync object.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMnhjQhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj2hMnubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jlj( jlj) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjtubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMrhjpubjM )}(hhh](jR )}(h@``struct drm_syncobj *syncobj`` Sync object to replace fence in h](jX )}(h``struct drm_syncobj *syncobj``h]j^ )}(hjh]hstruct drm_syncobj *syncobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMohjubjt )}(hhh]h)}(hSync object to replace fence inh]hSync object to replace fence in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMohjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMohjubjR )}(h;``struct dma_fence *fence`` fence to install in sync file. h](jX )}(h``struct dma_fence *fence``h]j^ )}(hj΃h]hstruct dma_fence *fence}(hjЃhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj̃ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMphjȃubjt )}(hhh]h)}(hfence to install in sync file.h]hfence to install in sync file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1js hjȃubeh}(h]h ]h"]h$]h&]uh1jQ hjhMphjubeh}(h]h ]h"]h$]h&]uh1jL hjpubh)}(h**Description**h]j7 )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMrhjpubh)}(h)This replaces the fence on a sync object.h]h)This replaces the fence on a sync object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMqhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_syncobj_find_fence (C function)c.drm_syncobj_find_fencehNtauh1jhjmhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj\hMubj)}(hdrm_syncobj_find_fenceh]j)}(hdrm_syncobj_find_fenceh]hdrm_syncobj_find_fence}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJhhhj\hMubj>)}(h[(struct drm_file *file_private, u32 handle, u64 point, u64 flags, struct dma_fence **fence)h](jD)}(hstruct drm_file *file_privateh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jqsbc.drm_syncobj_find_fenceasbuh1hhjubj)}(h h]h }(hjɄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjׄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h file_privateh]h file_private}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u32 handleh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jńc.drm_syncobj_find_fenceasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhandleh]hhandle}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u64 pointh](h)}(hhh]j)}(hu64h]hu64}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjJmodnameN classnameNjj)}j]jńc.drm_syncobj_find_fenceasbuh1hhjAubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hpointh]hpoint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u64 flagsh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jńc.drm_syncobj_find_fenceasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct dma_fence **fenceh](j)}(hj? h]hstruct}(hjՅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjхubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjхubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jńc.drm_syncobj_find_fenceasbuh1hhjхubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjхubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjхubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjхubj)}(hfenceh]hfence}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjхubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjJhhhj\hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjFhhhj\hMubah}(h]jAah ](jjeh"]h$]h&]j j )j huh1jhj\hMhjChhubj )}(hhh]h)}(h/lookup and reference the fence in a sync objecth]h/lookup and reference the fence in a sync object}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhj`hhubah}(h]h ]h"]h$]h&]uh1j hjChhhj\hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j{j( j{j) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubjM )}(hhh](jR )}(h;``struct drm_file *file_private`` drm file private pointer h](jX )}(h!``struct drm_file *file_private``h]j^ )}(hjh]hstruct drm_file *file_private}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubjt )}(hhh]h)}(hdrm file private pointerh]hdrm file private pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h-``u32 handle`` sync object handle to lookup. h](jX )}(h``u32 handle``h]j^ )}(hj݆h]h u32 handle}(hj߆hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjۆubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhj׆ubjt )}(hhh]h)}(hsync object handle to lookup.h]hsync object handle to lookup.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hj׆ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h``u64 point`` timeline point h](jX )}(h ``u64 point``h]j^ )}(hjh]h u64 point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubjt )}(hhh]h)}(htimeline pointh]htimeline point}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj+hMhjubjR )}(h<``u64 flags`` DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not h](jX )}(h ``u64 flags``h]j^ )}(hjOh]h u64 flags}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjIubjt )}(hhh]h)}(h-DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or noth]h-DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1js hjIubeh}(h]h ]h"]h$]h&]uh1jQ hjdhMhjubjR )}(h9``struct dma_fence **fence`` out parameter for the fence h](jX )}(h``struct dma_fence **fence``h]j^ )}(hjh]hstruct dma_fence **fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubjt )}(hhh]h)}(hout parameter for the fenceh]hout parameter for the fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjÇh]h Description}(hjŇhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubh)}(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هhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubh)}(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 }(hjhhhNhNubj7 )}(h **fence**h]hfence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubhV contains a reference to the fence, which must be released by calling dma_fence_put().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_syncobj_free (C function)c.drm_syncobj_freehNtauh1jhjmhhhNhNubj)}(hhh](j)}(h)void drm_syncobj_free (struct kref *kref)h]j)}(h(void drm_syncobj_free(struct kref *kref)h](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj7hM ubj)}(hdrm_syncobj_freeh]j)}(hdrm_syncobj_freeh]hdrm_syncobj_free}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj7hM ubj>)}(h(struct kref *kref)h]jD)}(hstruct kref *krefh](j)}(hj? h]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j)}(hkrefh]hkref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jLsbc.drm_syncobj_freeasbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hkrefh]hkref}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj^ubah}(h]h ]h"]h$]h&]jjuh1j=hj%hhhj7hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!hhhj7hM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj7hM hjhhubj )}(hhh]h)}(hfree a sync object.h]hfree a sync object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj7hM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubjM )}(hhh]jR )}(h$``struct kref *kref`` kref to free. h](jX )}(h``struct kref *kref``h]j^ )}(hj*h]hstruct kref *kref}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM hj$ubjt )}(hhh]h)}(h kref to free.h]h kref to free.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hM hj@ubah}(h]h ]h"]h$]h&]uh1js hj$ubeh}(h]h ]h"]h$]h&]uh1jQ hj?hM hj!ubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjcubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubh)}(h3Only to be called from kref_put in drm_syncobj_put.h]h3Only to be called from kref_put in drm_syncobj_put.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_syncobj_create (C function)c.drm_syncobj_createhNtauh1jhjmhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM!ubj)}(hdrm_syncobj_createh]j)}(hdrm_syncobj_createh]hdrm_syncobj_create}(hjˉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjljubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM!ubj>)}(hK(struct drm_syncobj **out_syncobj, uint32_t flags, struct dma_fence *fence)h](jD)}(h struct drm_syncobj **out_syncobjh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}j͉sbc.drm_syncobj_createasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h out_syncobjh]h out_syncobj}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj߉ubjD)}(huint32_t flagsh](h)}(hhh]j)}(huint32_th]huint32_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjkmodnameN classnameNjj)}j]j!c.drm_syncobj_createasbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj߉ubjD)}(hstruct dma_fence *fenceh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hj̊hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɊubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjΊmodnameN classnameNjj)}j]j!c.drm_syncobj_createasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfenceh]hfence}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj߉ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM!ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM!hjhhubj )}(hhh]h)}(hcreate a new syncobjh]hcreate a new syncobj}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM!hj,hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM!ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jGj( jGj) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjOubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM%hjKubjM )}(hhh](jR )}(h6``struct drm_syncobj **out_syncobj`` returned syncobj h](jX )}(h$``struct drm_syncobj **out_syncobj``h]j^ )}(hjph]h struct drm_syncobj **out_syncobj}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM"hjjubjt )}(hhh]h)}(hreturned syncobjh]hreturned syncobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1js hjjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM"hjgubjR )}(h'``uint32_t flags`` DRM_SYNCOBJ_* flags h](jX )}(h``uint32_t flags``h]j^ )}(hjh]huint32_t flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM#hjubjt )}(hhh]h)}(hDRM_SYNCOBJ_* flagsh]hDRM_SYNCOBJ_* flags}(hj‹hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM#hjgubjR )}(hO``struct dma_fence *fence`` if non-NULL, the syncobj will represent this fence h](jX )}(h``struct dma_fence *fence``h]j^ )}(hjh]hstruct dma_fence *fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM$hj܋ubjt )}(hhh]h)}(h2if non-NULL, the syncobj will represent this fenceh]h2if non-NULL, the syncobj will represent this fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1js hj܋ubeh}(h]h ]h"]h$]h&]uh1jQ hjhM$hjgubeh}(h]h ]h"]h$]h&]uh1jL hjKubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM&hjKubh)}(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().}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM%hjKubh)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chM)hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_syncobj_get_handle (C function)c.drm_syncobj_get_handlehNtauh1jhjmhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjhMLubj)}(hdrm_syncobj_get_handleh]j)}(hdrm_syncobj_get_handleh]hdrm_syncobj_get_handle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjhMLubj>)}(hI(struct drm_file *file_private, struct drm_syncobj *syncobj, u32 *handle)h](jD)}(hstruct drm_file *file_privateh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hǰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɌubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjΌmodnameN classnameNjj)}j]j)}j}jsbc.drm_syncobj_get_handleasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h file_privateh]h file_private}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_syncobj *syncobjh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj@modnameN classnameNjj)}j]jc.drm_syncobj_get_handleasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsyncobjh]hsyncobj}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u32 *handleh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_syncobj_get_handleasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhandleh]hhandle}(hj̍hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjmhhhjhMLubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjhMLubah}(h]jdah ](jjeh"]h$]h&]j j )j huh1jhjhMLhjfhhubj )}(hhh]h)}(hget a handle from a syncobjh]hget a handle from a syncobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMLhjhhubah}(h]h ]h"]h$]h&]uh1j hjfhhhjhMLubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjmhNhNubj- )}(hXn**Parameters** ``struct drm_file *file_private`` drm file private pointer ``struct drm_syncobj *syncobj`` Sync object to export ``u32 *handle`` out parameter with the new handle **Description** Exports a sync object created with drm_syncobj_create() as a handle on **file_private** to userspace. Returns 0 on success or a negative error value on failure.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMPhjubjM )}(hhh](jR )}(h;``struct drm_file *file_private`` drm file private pointer h](jX )}(h!``struct drm_file *file_private``h]j^ )}(hj7h]hstruct drm_file *file_private}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj5ubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMMhj1ubjt )}(hhh]h)}(hdrm file private pointerh]hdrm file private pointer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMMhjMubah}(h]h ]h"]h$]h&]uh1js hj1ubeh}(h]h ]h"]h$]h&]uh1jQ hjLhMMhj.ubjR )}(h6``struct drm_syncobj *syncobj`` Sync object to export h](jX )}(h``struct drm_syncobj *syncobj``h]j^ )}(hjph]hstruct drm_syncobj *syncobj}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMNhjjubjt )}(hhh]h)}(hSync object to exporth]hSync object to export}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1js hjjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMNhj.ubjR )}(h2``u32 *handle`` out parameter with the new handle h](jX )}(h``u32 *handle``h]j^ )}(hjh]h u32 *handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMOhjubjt )}(hhh]h)}(h!out parameter with the new handleh]h!out parameter with the new handle}(hjŽhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMOhj.ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMQhjubh)}(heExports a sync object created with drm_syncobj_create() as a handle on **file_private** to userspace.h](hGExports a sync object created with drm_syncobj_create() as a handle on }(hjhhhNhNubj7 )}(h**file_private**h]h file_private}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh to userspace.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMPhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_syncobj_get_fd (C function)c.drm_syncobj_get_fdhNtauh1jhjmhhhNhNubj)}(hhh](j)}(h?int drm_syncobj_get_fd (struct drm_syncobj *syncobj, int *p_fd)h]j)}(h>int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd)h](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMubj)}(hdrm_syncobj_get_fdh]j)}(hdrm_syncobj_get_fdh]hdrm_syncobj_get_fd}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjXhMubj>)}(h((struct drm_syncobj *syncobj, int *p_fd)h](jD)}(hstruct drm_syncobj *syncobjh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_syncobjh]h drm_syncobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jmsbc.drm_syncobj_get_fdasbuh1hhjubj)}(h h]h }(hjŏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjӏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsyncobjh]hsyncobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h int *p_fdh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hp_fdh]hp_fd}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjFhhhjXhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjXhMubah}(h]j=ah ](jjeh"]h$]h&]j j )j huh1jhjXhMhj?hhubj )}(hhh]h)}(h$get a file descriptor from a syncobjh]h$get a file descriptor from a syncobj}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjIhhubah}(h]h ]h"]h$]h&]uh1j hj?hhhjXhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jdj( jdj) j* j+ uh1jhhhjmhNhNubj- )}(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]j7 )}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjlubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjhubjM )}(hhh](jR )}(h6``struct drm_syncobj *syncobj`` Sync object to export h](jX )}(h``struct drm_syncobj *syncobj``h]j^ )}(hjh]hstruct drm_syncobj *syncobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubjt )}(hhh]h)}(hSync object to exporth]hSync object to export}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h9``int *p_fd`` out parameter with the new file descriptor h](jX )}(h ``int *p_fd``h]j^ )}(hjƐh]h int *p_fd}(hjȐhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjĐubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjubjt )}(hhh]h)}(h*out parameter with the new file descriptorh]h*out parameter with the new file descriptor}(hjߐhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjېhMhjܐubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjېhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjhubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjhubh)}(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.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_timeout_abs_to_jiffies (C function)c.drm_timeout_abs_to_jiffieshNtauh1jhjmhhhNhNubj)}(hhh](j)}(h=signed long drm_timeout_abs_to_jiffies (int64_t timeout_nsec)h]j)}(h)}(h(int64_t timeout_nsec)h]jD)}(hint64_t timeout_nsech](h)}(hhh]j)}(hint64_th]hint64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_timeout_abs_to_jiffiesasbuh1hhjubj)}(h h]h }(hjёhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h timeout_nsech]h timeout_nsec}(hjߑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjQhhhjchMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjMhhhjchMubah}(h]jHah ](jjeh"]h$]h&]j j )j huh1jhjchMhjJhhubj )}(hhh]h)}(h-calculate jiffies timeout from absolute valueh]h-calculate jiffies timeout from absolute value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjJhhhjchMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j!j( j!j) j* j+ uh1jhhhjmhNhNubj- )}(h**Parameters** ``int64_t timeout_nsec`` timeout nsec component in ns, 0 for poll **Description** Calculate the timeout in jiffies from an absolute time in sec/nsec.h](h)}(h**Parameters**h]j7 )}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj)ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhj%ubjM )}(hhh]jR )}(hB``int64_t timeout_nsec`` timeout nsec component in ns, 0 for poll h](jX )}(h``int64_t timeout_nsec``h]j^ )}(hjJh]hint64_t timeout_nsec}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjHubah}(h]h ]h"]h$]h&]uh1jW hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhjDubjt )}(hhh]h)}(h(timeout nsec component in ns, 0 for pollh]h(timeout nsec component in ns, 0 for poll}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1js hjDubeh}(h]h ]h"]h$]h&]uh1jQ hj_hMhjAubah}(h]h ]h"]h$]h&]uh1jL hj%ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhj%ubh)}(hCCalculate the timeout in jiffies from an absolute time in sec/nsec.h]hCCalculate the timeout in jiffies from an absolute time in sec/nsec.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:560: ./drivers/gpu/drm/drm_syncobj.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjmhhhNhNubeh}(h](jid4eh ]h"](drm sync objectsdrm_sync_objectseh$]h&]uh1hhhhhhhhM(j}jjqmsj}jjqmsubh)}(hhh](h)}(hDRM Execution contexth]hDRM Execution context}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhM4ubh)}(hThis component mainly abstracts the retry loop necessary for locking multiple GEM objects while preparing hardware operations (e.g. command submissions, page table updates etc..).h]hThis component mainly abstracts the retry loop necessary for locking multiple GEM objects while preparing hardware operations (e.g. command submissions, page table updates etc..).}(hj͒hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:566: ./drivers/gpu/drm/drm_exec.chK hjhhubh)}(hIf a contention is detected while locking a GEM object the cleanup procedure unlocks all previously locked GEM objects and locks the contended one first before locking any further objects.h]hIf a contention is detected while locking a GEM object the cleanup procedure unlocks all previously locked GEM objects and locks the contended one first before locking any further objects.}(hjܒhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:566: ./drivers/gpu/drm/drm_exec.chKhjhhubh)}(hoAfter an object is locked fences slots can optionally be reserved on the dma_resv object inside the GEM object.h]hoAfter an object is locked fences slots can optionally be reserved on the dma_resv object inside the GEM object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:566: ./drivers/gpu/drm/drm_exec.chKhjhhubh)}(h/A typical usage pattern should look like this::h]h.A typical usage pattern should look like this:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:566: ./drivers/gpu/drm/drm_exec.chKhjhhubj )}(hXDstruct drm_gem_object *obj; struct drm_exec exec; 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, obj) { dma_resv_add_fence(obj->resv, fence, DMA_RESV_USAGE_READ); ... } drm_exec_fini(&exec);h]hXDstruct drm_gem_object *obj; struct drm_exec exec; 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, obj) { dma_resv_add_fence(obj->resv, fence, DMA_RESV_USAGE_READ); ... } drm_exec_fini(&exec);}hj sbah}(h]h ]h"]h$]h&]jjuh1j hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:566: ./drivers/gpu/drm/drm_exec.chKhjhhubh)}(h%See struct dma_exec for more details.h]h%See struct dma_exec for more details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:566: ./drivers/gpu/drm/drm_exec.chK.hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_exec (C struct) c.drm_exechNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_exech]j)}(hstruct drm_exech](j)}(hj? h]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhKubj)}(hdrm_exech]j)}(hj:h]hdrm_exec}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<hhhjMhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhjMhKubah}(h]j3ah ](jjeh"]h$]h&]j j )j huh1jhjMhKhj5hhubj )}(hhh]h)}(hExecution contexth]hExecution context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hj5hhhjMhKubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjubj )}(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; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjubh)}(h **Members**h]j7 )}(hjГh]hMembers}(hjғhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjΓubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK%hjubjM )}(hhh](jR )}(h,``flags`` Flags to control locking behavior h](jX )}(h ``flags``h]j^ )}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjubjt )}(hhh]h)}(h!Flags to control locking behaviorh]h!Flags to control locking behavior}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h.``ticket`` WW ticket used for acquiring locks h](jX )}(h ``ticket``h]j^ )}(hj(h]hticket}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj&ubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhj"ubjt )}(hhh]h)}(h"WW ticket used for acquiring locksh]h"WW ticket used for acquiring locks}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hKhj>ubah}(h]h ]h"]h$]h&]uh1js hj"ubeh}(h]h ]h"]h$]h&]uh1jQ hj=hKhjubjR )}(h)``num_objects`` number of objects locked h](jX )}(h``num_objects``h]j^ )}(hjah]h num_objects}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj_ubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK$hj[ubjt )}(hhh]h)}(hnumber of objects lockedh]hnumber of objects locked}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhK$hjwubah}(h]h ]h"]h$]h&]uh1js hj[ubeh}(h]h ]h"]h$]h&]uh1jQ hjvhK$hjubjR )}(h)``max_objects`` maximum objects in array h](jX )}(h``max_objects``h]j^ )}(hjh]h max_objects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK)hjubjt )}(hhh]h)}(hmaximum objects in arrayh]hmaximum objects in array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK)hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhK)hjubjR )}(h(``objects`` array of the locked objects h](jX )}(h ``objects``h]j^ )}(hjӔh]hobjects}(hjՔhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjєubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK.hj͔ubjt )}(hhh]h)}(harray of the locked objectsh]harray of the locked objects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK.hjubah}(h]h ]h"]h$]h&]uh1js hj͔ubeh}(h]h ]h"]h$]h&]uh1jQ hjhK.hjubjR )}(h5``contended`` contended GEM object we backed off for h](jX )}(h ``contended``h]j^ )}(hj h]h contended}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK3hjubjt )}(hhh]h)}(h&contended GEM object we backed off forh]h&contended GEM object we backed off for}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hK3hj"ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj!hK3hjubjR )}(h9``prelocked`` already locked GEM object due to contentionh](jX )}(h ``prelocked``h]j^ )}(hjEh]h prelocked}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjCubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK7hj?ubjt )}(hhh]h)}(h+already locked GEM object due to contentionh]h+already locked GEM object due to contention}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK8hj[ubah}(h]h ]h"]h$]h&]uh1js hj?ubeh}(h]h ]h"]h$]h&]uh1jQ hjZhK7hjubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_exec_obj (C function)c.drm_exec_objhNtauh1jhjhhhNhNubj)}(hhh](j)}(hQstruct drm_gem_object * drm_exec_obj (struct drm_exec *exec, unsigned long index)h]j)}(hOstruct drm_gem_object *drm_exec_obj(struct drm_exec *exec, unsigned long index)h](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK=ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j} drm_exec_objsbc.drm_exec_objasbuh1hhjhhhjhK=ubj)}(h h]h }(hjߕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK=ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK=ubjE)}(h drm_exec_objh]j)}(hjܕh]h drm_exec_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK=ubj>)}(h,(struct drm_exec *exec, unsigned long index)h](jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj9modnameN classnameNjj)}j]jڕc.drm_exec_objasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hunsigned long indexh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hindexh]hindex}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhK=ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK=ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhK=hjhhubj )}(hhh]h)}(h+Return the object for a give drm_exec indexh]h+Return the object for a give drm_exec index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK=hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhK=ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKAhjubjM )}(hhh](jR )}(h:``struct drm_exec *exec`` Pointer to the drm_exec context h](jX )}(h``struct drm_exec *exec``h]j^ )}(hj,h]hstruct drm_exec *exec}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj*ubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK>hj&ubjt )}(hhh]h)}(hPointer to the drm_exec contexth]hPointer to the drm_exec context}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhK>hjBubah}(h]h ]h"]h$]h&]uh1js hj&ubeh}(h]h ]h"]h$]h&]uh1jQ hjAhK>hj#ubjR )}(h#``unsigned long index`` The index. h](jX )}(h``unsigned long index``h]j^ )}(hjeh]hunsigned long index}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjcubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK?hj_ubjt )}(hhh]h)}(h The index.h]h The index.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhK?hj{ubah}(h]h ]h"]h$]h&]uh1js hj_ubeh}(h]h ]h"]h$]h&]uh1jQ hjzhK?hj#ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKAhjubh)}(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 }(hjhhhNhNubj7 )}(h **index**h]hindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubhA if index is within the number of locked objects. NULL otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_exec_for_each_locked_object (C macro)!c.drm_exec_for_each_locked_objecthNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_exec_for_each_locked_objecth]j)}(hdrm_exec_for_each_locked_objecth]j)}(hdrm_exec_for_each_locked_objecth]j)}(hjh]hdrm_exec_for_each_locked_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKNubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKNubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKNhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhKNubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' j'j( j'j) j* j+ uh1jhhhjhNhNubh)}(h/``drm_exec_for_each_locked_object (exec, obj)``h]j^ )}(hj-h]h+drm_exec_for_each_locked_object (exec, obj)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj+ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKPhjhhubj )}(h$iterate over all the locked objects h]h)}(h#iterate over all the locked objectsh]h#iterate over all the locked objects}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKNhjCubah}(h]h ]h"]h$]h&]uh1jhjUhKNhjhhubj- )}(h**Parameters** ``exec`` drm_exec object ``obj`` the current GEM object **Description** Iterate over all the locked GEM objects inside the drm_exec object.h](h)}(h**Parameters**h]j7 )}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj`ubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKRhj\ubjM )}(hhh](jR )}(h``exec`` drm_exec object h](jX )}(h``exec``h]j^ )}(hjh]hexec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKOhj{ubjt )}(hhh]h)}(hdrm_exec objecth]hdrm_exec object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKOhjubah}(h]h ]h"]h$]h&]uh1js hj{ubeh}(h]h ]h"]h$]h&]uh1jQ hjhKOhjxubjR )}(h``obj`` the current GEM object h](jX )}(h``obj``h]j^ )}(hjh]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKPhjubjt )}(hhh]h)}(hthe current GEM objecth]hthe current GEM object}(hjӘhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϘhKPhjИubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjϘhKPhjxubeh}(h]h ]h"]h$]h&]uh1jL hj\ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKRhj\ubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKQhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_exec_for_each_locked_object_reverse (C macro))c.drm_exec_for_each_locked_object_reversehNtauh1jhjhhhNhNubj)}(hhh](j)}(h'drm_exec_for_each_locked_object_reverseh]j)}(h'drm_exec_for_each_locked_object_reverseh]j)}(h'drm_exec_for_each_locked_object_reverseh]j)}(hj4h]h'drm_exec_for_each_locked_object_reverse}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK\ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj2hhhjQhK\ubah}(h]j-ah ](jjeh"]h$]h&]j j )j huh1jhjQhK\hj/hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj/hhhjQhK\ubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jjj( jjj) j* j+ uh1jhhhjhNhNubh)}(h7``drm_exec_for_each_locked_object_reverse (exec, obj)``h]j^ )}(hjph]h3drm_exec_for_each_locked_object_reverse (exec, obj)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjnubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhK^hjhhubj )}(h=iterate over all the locked objects in reverse locking order h]h)}(h)}(h(struct drm_exec *exec)h]jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjܜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؜ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؜ubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jœsbc.drm_exec_is_contendedasbuh1hhj؜ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؜ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؜ubj)}(hexech]hexec}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؜ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjԜubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h)}(hcheck for contentionh]hcheck for contention}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhj\hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jwj( jwj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhj{ubjM )}(hhh]jR )}(h*``struct drm_exec *exec`` drm_exec object h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjubjt )}(hhh]h)}(hdrm_exec objecth]hdrm_exec object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hj{ubh)}(h**Description**h]j7 )}(hj۝h]h Description}(hjݝhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjٝubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhj{ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_exec_retry (C macro)c.drm_exec_retryhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_exec_retryh]j)}(hdrm_exec_retryh]j)}(hdrm_exec_retryh]j)}(hjh]hdrm_exec_retry}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj7hKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj7hKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhj7hKubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jPj( jPj) j* j+ uh1jhhhjhNhNubh)}(h``drm_exec_retry (_exec)``h]j^ )}(hjVh]hdrm_exec_retry (_exec)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjTubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjhhubj )}(h4Unconditionally restart the loop to grab all locks. h]h)}(h3Unconditionally restart the loop to grab all locks.h]h3Unconditionally restart the loop to grab all locks.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjlubah}(h]h ]h"]h$]h&]uh1jhj~hKhjhhubj- )}(hX**Parameters** ``_exec`` *undescribed* **Description** Unconditionally retry the loop to lock all objects. For consistency, the exec object needs to be newly initialized. The __drm_exec_loop check exists to prevent usage outside of an drm_exec_until_all_locked() loop.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjubjM )}(hhh]jR )}(h``_exec`` *undescribed* h](jX )}(h ``_exec``h]j^ )}(hjh]h_exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjubjt )}(hhh]h)}(h *undescribed*h]j)}(hjŞh]h undescribed}(hjǞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÞubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjubh)}(hUnconditionally retry the loop to lock all objects. For consistency, the exec object needs to be newly initialized. The __drm_exec_loop check exists to prevent usage outside of an drm_exec_until_all_locked() loop.h]hUnconditionally retry the loop to lock all objects. For consistency, the exec object needs to be newly initialized. The __drm_exec_loop check exists to prevent usage outside of an drm_exec_until_all_locked() loop.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_exec_ticket (C function)c.drm_exec_tickethNtauh1jhjhhhNhNubj)}(hhh](j)}(h?struct ww_acquire_ctx * drm_exec_ticket (struct drm_exec *exec)h]j)}(h=struct ww_acquire_ctx *drm_exec_ticket(struct drm_exec *exec)h](j)}(hj? h]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj@hKubh)}(hhh]j)}(hww_acquire_ctxh]hww_acquire_ctx}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjTmodnameN classnameNjj)}j]j)}j}drm_exec_ticketsbc.drm_exec_ticketasbuh1hhj/hhhj@hKubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj@hKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj@hKubj)}(hdrm_exec_ticketh]j)}(hjph]hdrm_exec_ticket}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhj@hKubj>)}(h(struct drm_exec *exec)h]jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj˟hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȟubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj͟modnameN classnameNjj)}j]jnc.drm_exec_ticketasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hj/hhhj@hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhj@hKubah}(h]j&ah ](jjeh"]h$]h&]j j )j huh1jhj@hKhj(hhubj )}(hhh]h)}(h/return the ww_acquire_ctx for this exec contexth]h/return the ww_acquire_ctx for this exec context}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhj+hhubah}(h]h ]h"]h$]h&]uh1j hj(hhhj@hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jFj( jFj) j* j+ uh1jhhhjhNhNubj- )}(h|**Parameters** ``struct drm_exec *exec`` drm_exec object **Return** Pointer to the ww_acquire_ctx embedded in **exec**.h](h)}(h**Parameters**h]j7 )}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjNubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjJubjM )}(hhh]jR )}(h*``struct drm_exec *exec`` drm_exec object h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjoh]hstruct drm_exec *exec}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]uh1jW hR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjiubjt )}(hhh]h)}(hdrm_exec objecth]hdrm_exec object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjiubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjfubah}(h]h ]h"]h$]h&]uh1jL hjJubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjJubh)}(h3Pointer to the ww_acquire_ctx embedded in **exec**.h](h*Pointer to the ww_acquire_ctx embedded in }(hjhhhNhNubj7 )}(h**exec**h]hexec}(hjȠhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhR/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:569: ./include/drm/drm_exec.hhKhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_exec_init (C function)c.drm_exec_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKBubj)}(h drm_exec_inith]j)}(h drm_exec_inith]h drm_exec_init}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKBubj>)}(h/(struct drm_exec *exec, u32 flags, unsigned nr)h](jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj^modnameN classnameNjj)}j]j)}j}j$sbc.drm_exec_initasbuh1hhj:ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj6ubjD)}(h u32 flagsh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jxc.drm_exec_initasbuh1hhjubj)}(h h]h }(hjѡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjߡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj6ubjD)}(h unsigned nrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnrh]hnr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj6ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKBubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKBhjhhubj )}(hhh]h)}(hinitialize a drm_exec objecth]hinitialize a drm_exec object}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKBhj;hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKBubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jVj( jVj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj^ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKFhjZubjM )}(hhh](jR )}(h<``struct drm_exec *exec`` the drm_exec object to initialize h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj}ubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKChjyubjt )}(hhh]h)}(h!the drm_exec object to initializeh]h!the drm_exec object to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1js hjyubeh}(h]h ]h"]h$]h&]uh1jQ hjhKChjvubjR )}(h@``u32 flags`` controls locking behavior, see DRM_EXEC_* defines h](jX )}(h ``u32 flags``h]j^ )}(hjh]h u32 flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKDhjubjt )}(hhh]h)}(h1controls locking behavior, see DRM_EXEC_* definesh]h1controls locking behavior, see DRM_EXEC_* defines}(hjѢhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj͢hKDhj΢ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj͢hKDhjvubjR )}(h)``unsigned nr`` the initial # of objects h](jX )}(h``unsigned nr``h]j^ )}(hjh]h unsigned nr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKEhjubjt )}(hhh]h)}(hthe initial # of objectsh]hthe initial # of objects}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKEhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKEhjvubeh}(h]h ]h"]h$]h&]uh1jL hjZubh)}(h**Description**h]j7 )}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj*ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKGhjZubh)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKFhjZubh)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKHhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_exec_fini (C function)c.drm_exec_finihNtauh1jhjhhhNhNubj)}(hhh](j)}(h*void drm_exec_fini (struct drm_exec *exec)h]j)}(h)void drm_exec_fini(struct drm_exec *exec)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chK]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhK]ubj)}(h drm_exec_finih]j)}(h drm_exec_finih]h drm_exec_fini}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhK]ubj>)}(h(struct drm_exec *exec)h]jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjʣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hjۣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjأubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjݣmodnameN classnameNjj)}j]j)}j}jsbc.drm_exec_finiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hj|hhhjhK]ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhK]ubah}(h]jsah ](jjeh"]h$]h&]j j )j huh1jhjhK]hjuhhubj )}(hhh]h)}(hfinalize a drm_exec objecth]hfinalize a drm_exec object}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chK]hj=hhubah}(h]h ]h"]h$]h&]uh1j hjuhhhjhK]ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jXj( jXj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj`ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKahj\ubjM )}(hhh]jR )}(h:``struct drm_exec *exec`` the drm_exec object to finalize h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chK^hj{ubjt )}(hhh]h)}(hthe drm_exec object to finalizeh]hthe drm_exec object to finalize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK^hjubah}(h]h ]h"]h$]h&]uh1js hj{ubeh}(h]h ]h"]h$]h&]uh1jQ hjhK^hjxubah}(h]h ]h"]h$]h&]uh1jL hj\ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chK`hj\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:572: ./drivers/gpu/drm/drm_exec.chK_hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_exec_cleanup (C function)c.drm_exec_cleanuphNtauh1jhjhhhNhNubj)}(hhh](j)}(h-bool drm_exec_cleanup (struct drm_exec *exec)h]j)}(h,bool drm_exec_cleanup(struct drm_exec *exec)h](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKoubj)}(hdrm_exec_cleanuph]j)}(hdrm_exec_cleanuph]hdrm_exec_cleanup}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKoubj>)}(h(struct drm_exec *exec)h]jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj]modnameN classnameNjj)}j]j)}j}j#sbc.drm_exec_cleanupasbuh1hhj9ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj5ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKoubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKoubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKohjhhubj )}(hhh]h)}(h#cleanup when contention is detectedh]h#cleanup when contention is detected}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKohjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKoubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jإj( jإj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKshjܥubjM )}(hhh]jR )}(h9``struct drm_exec *exec`` the drm_exec object to cleanup h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKphjubjt )}(hhh]h)}(hthe drm_exec object to cleanuph]hthe drm_exec object to cleanup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKphjubah}(h]h ]h"]h$]h&]uh1jL hjܥubh)}(h**Description**h]j7 )}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKrhjܥ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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKqhjܥubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_exec_lock_obj (C function)c.drm_exec_lock_objhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhjhKubj)}(hdrm_exec_lock_objh]j)}(hdrm_exec_lock_objh]hdrm_exec_lock_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj}hhhjhKubj>)}(h3(struct drm_exec *exec, struct drm_gem_object *obj)h](jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj˦hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hjܦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٦ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjަmodnameN classnameNjj)}j]j)}j}jsbc.drm_exec_lock_objasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjPmodnameN classnameNjj)}j]jc.drm_exec_lock_objasbuh1hhj,ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hj}hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjyhhhjhKubah}(h]jtah ](jjeh"]h$]h&]j j )j huh1jhjhKhjvhhubj )}(hhh]h)}(hlock a GEM object for useh]hlock a GEM object for use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhjhhubah}(h]h ]h"]h$]h&]uh1j hjvhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jɧj( jɧj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjӧh]h Parameters}(hjէhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjѧubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhjͧubjM )}(hhh](jR )}(h=``struct drm_exec *exec`` the drm_exec object with the state h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhjubjt )}(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&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h6``struct drm_gem_object *obj`` the GEM object to lock h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj+h]hstruct drm_gem_object *obj}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhj%ubjt )}(hhh]h)}(hthe GEM object to lockh]hthe GEM object to lock}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKhjAubah}(h]h ]h"]h$]h&]uh1js hj%ubeh}(h]h ]h"]h$]h&]uh1jQ hj@hKhjubeh}(h]h ]h"]h$]h&]uh1jL hjͧubh)}(h**Description**h]j7 )}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjdubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./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.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhjͧubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./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:572: ./drivers/gpu/drm/drm_exec.chKhjͧubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_exec_unlock_obj (C function)c.drm_exec_unlock_objhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjҨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΨhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΨhhhjhKubj)}(hdrm_exec_unlock_objh]j)}(hdrm_exec_unlock_objh]hdrm_exec_unlock_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjΨhhhjhKubj>)}(h3(struct drm_exec *exec, struct drm_gem_object *obj)h](jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj/modnameN classnameNjj)}j]j)}j}jsbc.drm_exec_unlock_objasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hexech]hexec}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jIc.drm_exec_unlock_objasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjh]h*}(hj˩hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hobjh]hobj}(hjةhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjΨhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjʨhhhjhKubah}(h]jŨah ](jjeh"]h$]h&]j j )j huh1jhjhKhjǨhhubj )}(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:572: ./drivers/gpu/drm/drm_exec.chKhjhhubah}(h]h ]h"]h$]h&]uh1j hjǨhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj"ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhjubjM )}(hhh](jR )}(h=``struct drm_exec *exec`` the drm_exec object with the state h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjCh]hstruct drm_exec *exec}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjAubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhj=ubjt )}(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&]uh1hhjXhKhjYubah}(h]h ]h"]h$]h&]uh1js hj=ubeh}(h]h ]h"]h$]h&]uh1jQ hjXhKhj:ubjR )}(h8``struct drm_gem_object *obj`` the GEM object to unlock h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hj|h]hstruct drm_gem_object *obj}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjzubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhjvubjt )}(hhh]h)}(hthe GEM object to unlockh]hthe GEM object to unlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjvubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhj:ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chKhjubh)}(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:572: ./drivers/gpu/drm/drm_exec.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_exec_prepare_obj (C function)c.drm_exec_prepare_objhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(hdrm_exec_prepare_objh]j)}(hdrm_exec_prepare_objh]hdrm_exec_prepare_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj>)}(hL(struct drm_exec *exec, struct drm_gem_object *obj, unsigned int num_fences)h](jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjYmodnameN classnameNjj)}j]j)}j}jsbc.drm_exec_prepare_objasbuh1hhj5ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hexech]hexec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjɫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƫubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj˫modnameN classnameNjj)}j]jsc.drm_exec_prepare_objasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubjD)}(hunsigned int num_fencesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h num_fencesh]h num_fences}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj1ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj hMhjhhubj )}(hhh]h)}(hprepare a GEM object for useh]hprepare a GEM object for use}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chMhjzhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chMhjubjM )}(hhh](jR )}(h=``struct drm_exec *exec`` the drm_exec object with the state h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjӬhMhjubjR )}(h9``struct drm_gem_object *obj`` the GEM object to prepare h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chMhjubjt )}(hhh]h)}(hthe GEM object to prepareh]hthe GEM object to prepare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjubjR )}(h7``unsigned int num_fences`` how many fences to reserve h](jX )}(h``unsigned int num_fences``h]j^ )}(hj0h]hunsigned int num_fences}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chMhj*ubjt )}(hhh]h)}(hhow many fences to reserveh]hhow many fences to reserve}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1js hj*ubeh}(h]h ]h"]h$]h&]uh1jQ hjEhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjkh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjiubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chMhjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./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:572: ./drivers/gpu/drm/drm_exec.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_exec_prepare_array (C function)c.drm_exec_prepare_arrayhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj׭hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӭhhhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chM2ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӭhhhjhM2ubj)}(hdrm_exec_prepare_arrayh]j)}(hdrm_exec_prepare_arrayh]hdrm_exec_prepare_array}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjӭhhhjhM2ubj>)}(hk(struct drm_exec *exec, struct drm_gem_object **objects, unsigned int num_objects, unsigned int num_fences)h](jD)}(hstruct drm_exec *exech](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_exech]hdrm_exec}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj4modnameN classnameNjj)}j]j)}j}jsbc.drm_exec_prepare_arrayasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hexech]hexec}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hstruct drm_gem_object **objectsh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jNc.drm_exec_prepare_arrayasbuh1hhjubj)}(h h]h }(hj®hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjЮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjݮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjectsh]hobjects}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hunsigned int num_objectsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h num_objectsh]h num_objects}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hunsigned int num_fencesh](j)}(hunsignedh]hunsigned}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h num_fencesh]h num_fences}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubeh}(h]h ]h"]h$]h&]jjuh1j=hjӭhhhjhM2ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjϭhhhjhM2ubah}(h]jʭah ](jjeh"]h$]h&]j j )j huh1jhjhM2hj̭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:572: ./drivers/gpu/drm/drm_exec.chM2hjhhubah}(h]h ]h"]h$]h&]uh1j hj̭hhhjhM2ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jίj( jίj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjدh]h Parameters}(hjگhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj֯ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chM6hjүubjM )}(hhh](jR )}(h=``struct drm_exec *exec`` the drm_exec object with the state h](jX )}(h``struct drm_exec *exec``h]j^ )}(hjh]hstruct drm_exec *exec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chM3hjubjt )}(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 hM3hj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hM3hjubjR )}(hC``struct drm_gem_object **objects`` array of GEM object to prepare h](jX )}(h#``struct drm_gem_object **objects``h]j^ )}(hj0h]hstruct drm_gem_object **objects}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chM4hj*ubjt )}(hhh]h)}(harray of GEM object to prepareh]harray of GEM object to prepare}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM4hjFubah}(h]h ]h"]h$]h&]uh1js hj*ubeh}(h]h ]h"]h$]h&]uh1jQ hjEhM4hjubjR )}(h@``unsigned int num_objects`` number of GEM objects in the array h](jX )}(h``unsigned int num_objects``h]j^ )}(hjih]hunsigned int num_objects}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjgubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chM5hjcubjt )}(hhh]h)}(h"number of GEM objects in the arrayh]h"number of GEM objects in the array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM5hjubah}(h]h ]h"]h$]h&]uh1js hjcubeh}(h]h ]h"]h$]h&]uh1jQ hj~hM5hjubjR )}(hK``unsigned int num_fences`` number of fences to reserve on each GEM object h](jX )}(h``unsigned int num_fences``h]j^ )}(hjh]hunsigned int num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chM6hjubjt )}(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&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM6hjubeh}(h]h ]h"]h$]h&]uh1jL hjүubh)}(h**Description**h]j7 )}(hjݰh]h Description}(hj߰hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj۰ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chM8hjү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 }(hjhhhNhNubj7 )}(h**num_fences**h]h num_fences}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh% on each GEM object after locking it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./drivers/gpu/drm/drm_exec.chM7hjүubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:572: ./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:572: ./drivers/gpu/drm/drm_exec.chM;hjүubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubeh}(h]jah ]h"]drm execution contextah$]h&]uh1hhhhhhhhM4ubh)}(hhh](h)}(h GPU Schedulerh]h GPU Scheduler}(hjLhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjIhhhhhM@ubh)}(hhh](h)}(hOverviewh]hOverview}(hj]hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjZhhhhhMCubh)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:581: ./drivers/gpu/drm/scheduler/sched_main.chKhjZhhubh)}(h3The organisation of the scheduler is the following:h]h3The organisation of the scheduler is the following:}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:581: ./drivers/gpu/drm/scheduler/sched_main.chK!hjZhhubj~A)}(hhh](j)}(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:581: ./drivers/gpu/drm/scheduler/sched_main.chK#hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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:581: ./drivers/gpu/drm/scheduler/sched_main.chK$hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h`. 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. ``stats`` Stats object reference held by the entity and jobs. ``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 drm_sched_entity_pop_job(). 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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKUhjubj )}(hXstruct drm_sched_entity { struct list_head list; spinlock_t lock; struct drm_sched_rq *rq; struct drm_sched_entity_stats *stats; 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 *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_sched_entity_stats *stats; 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 *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&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKWhjubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKmhjubjM )}(hhh](jR )}(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](jX )}(h``list``h]j^ )}(hjݴh]hlist}(hjߴhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj۴ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhK^hj״ubjt )}(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 }(hjhhhNhNubj7 )}(h**rq**h]hrq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh under }(hjhhhNhNubh)}(h.:c:type:`drm_sched_rq.entities `h]j^ )}(hjh]hdrm_sched_rq.entities}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_rquh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhK[hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hK[hjubh)}(hBProtected by :c:type:`drm_sched_rq.lock ` of **rq**.h](h Protected by }(hj:hhhNhNubh)}(h*:c:type:`drm_sched_rq.lock `h]j^ )}(hjDh]hdrm_sched_rq.lock}(hjFhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjBubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_rquh1hhjhK^hj:ubh of }(hj:hhhNhNubj7 )}(h**rq**h]hrq}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK^hjubeh}(h]h ]h"]h$]h&]uh1js hj״ubeh}(h]h ]h"]h$]h&]uh1jQ hjhK^hjԴubjR )}(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](jX )}(h``lock``h]j^ )}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKfhjubjt )}(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 (}(hjhhhNhNubj7 )}(h**rq**h]hrq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh ) to which this entity belongs, }(hjhhhNhNubj7 )}(h **priority**h]hpriority}(hjµhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh and the list of schedulers (}(hjhhhNhNubj7 )}(h**sched_list**h]h sched_list}(hjԵhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh, }(hjhhhNhNubj7 )}(h**num_sched_list**h]hnum_sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKehjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKfhjԴubjR )}(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](jX )}(h``rq``h]j^ )}(hjh]hrq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKqhj ubjt )}(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:593: ./include/drm/gpu_scheduler.hhKmhj'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 }(hj9hhhNhNubj7 )}(h**lock**h]hlock}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj9ubhU, but readers are generally lockless and seem to just race with not even a READ_ONCE.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKohj'ubeh}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj&hKqhjԴubjR )}(h>``stats`` Stats object reference held by the entity and jobs. h](jX )}(h ``stats``h]j^ )}(hjlh]hstats}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKxhjfubjt )}(hhh]h)}(h3Stats object reference held by the entity and jobs.h]h3Stats object reference held by the entity and jobs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKxhjubah}(h]h ]h"]h$]h&]uh1js hjfubeh}(h]h ]h"]h$]h&]uh1jQ hjhKxhjԴubjR )}(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](jX )}(h``sched_list``h]j^ )}(hjh]h sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(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:593: ./include/drm/gpu_scheduler.hhK}hjubh)}(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.}(hjͶhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubh)}(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 }(hjܶhhhNhNubh)}(h:c:type:`num_sched_list`h]j^ )}(hjh]hnum_sched_list}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j num_sched_listuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjܶubh equals 1 and }(hjܶhhhNhNubj7 )}(h**rq**h]hrq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjܶubh has been set already.}(hjܶhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubeh}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(hG``num_sched_list`` Number of drm_gpu_schedulers in the **sched_list**. h](jX )}(h``num_sched_list``h]j^ )}(hjAh]hnum_sched_list}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhj;ubjt )}(hhh]h)}(h3Number of drm_gpu_schedulers in the **sched_list**.h](h$Number of drm_gpu_schedulers in the }(hjZhhhNhNubj7 )}(h**sched_list**h]h sched_list}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjZubh.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhKhjWubah}(h]h ]h"]h$]h&]uh1js hj;ubeh}(h]h ]h"]h$]h&]uh1jQ hjVhKhjԴubjR )}(h}``priority`` Priority of the entity. This can be modified by calling drm_sched_entity_set_priority(). Protected by **lock**. h](jX )}(h ``priority``h]j^ )}(hjh]hpriority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(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 }(hjhhhNhNubj7 )}(h**lock**h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(h/``job_queue`` the list of jobs of this entity. h](jX )}(h ``job_queue``h]j^ )}(hjطh]h job_queue}(hjڷhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjַubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjҷubjt )}(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&]uh1js hjҷubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(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](jX )}(h ``fence_seq``h]j^ )}(hjh]h fence_seq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhj ubjt )}(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 }(hj*hhhNhNubh)}(h:c:type:`drm_sched_fence`h]j^ )}(hj4h]hdrm_sched_fence}(hj6hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_fenceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhj*ubh which is part of the entity.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhKhj'ubh)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhj'ubeh}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj&hKhjԴubjR )}(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](jX )}(h``fence_context``h]j^ )}(hj}h]h fence_context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj{ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjwubjt )}(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 }(hjhhhNhNubh)}(h5:c:type:`drm_sched_fence.scheduled `h]j^ )}(hjh]hdrm_sched_fence.scheduled}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_fenceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubh uses the fence_context but }(hjhhhNhNubh)}(h4:c:type:`drm_sched_fence.finished `h]j^ )}(hjĸh]hdrm_sched_fence.finished}(hjƸhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj¸ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_fenceuh1hhjhKhjubh uses fence_context + 1.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjwubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(hU``dependency`` The dependency fence of the job which is on the top of the job queue. h](jX )}(h``dependency``h]j^ )}(hjh]h dependency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(h0``cb`` Callback for the dependency fence above. h](jX )}(h``cb``h]j^ )}(hj6h]hcb}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj4ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhj0ubjt )}(hhh]h)}(h(Callback for the dependency fence above.h]h(Callback for the dependency fence above.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhKhjLubah}(h]h ]h"]h$]h&]uh1js hj0ubeh}(h]h ]h"]h$]h&]uh1jQ hjKhKhjԴubjR )}(h'``guilty`` Points to entities' guilty. h](jX )}(h ``guilty``h]j^ )}(hjoh]hguilty}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjiubjt )}(hhh]h)}(hPoints to entities' guilty.h]hPoints to entities’ guilty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjiubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(h``last_scheduled`` Points to the finished fence of the last scheduled job. Only written by drm_sched_entity_pop_job(). Can be accessed locklessly from drm_sched_job_arm() if the queue is empty. h](jX )}(h``last_scheduled``h]j^ )}(hjh]hlast_scheduled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(hhh]h)}(hPoints to the finished fence of the last scheduled job. Only written by drm_sched_entity_pop_job(). 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 drm_sched_entity_pop_job(). 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:593: ./include/drm/gpu_scheduler.hhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(h?``last_user`` last group leader pushing a job into the entity. h](jX )}(h ``last_user``h]j^ )}(hjh]h last_user}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjܹubjt )}(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&]uh1js hjܹubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(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](jX )}(h ``stopped``h]j^ )}(hjh]hstopped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(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().}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhj1ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj0hKhjԴubjR )}(ho``entity_idle`` Signals when entity is not in use, used to sequence entity cleanup in drm_sched_entity_fini(). h](jX )}(h``entity_idle``h]j^ )}(hjUh]h entity_idle}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjSubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjOubjt )}(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().}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjkubah}(h]h ]h"]h$]h&]uh1js hjOubeh}(h]h ]h"]h$]h&]uh1jQ hjjhKhjԴubjR )}(h>``oldest_job_waiting`` Marks earliest job waiting in SW queue h](jX )}(h``oldest_job_waiting``h]j^ )}(hjh]holdest_job_waiting}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(hhh]h)}(h&Marks earliest job waiting in SW queueh]h&Marks earliest job waiting in SW queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjԴubjR )}(hS``rb_tree_node`` The node used to insert this entity into time based priority queueh](jX )}(h``rb_tree_node``h]j^ )}(hjȺh]h rb_tree_node}(hjʺhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjƺubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjºubjt )}(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:593: ./include/drm/gpu_scheduler.hhKhj޺ubah}(h]h ]h"]h$]h&]uh1js hjºubeh}(h]h ]h"]h$]h&]uh1jQ hjݺhKhjԴubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./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.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKRhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_rq (C struct)c.drm_sched_rqhNtauh1jhjhhhNhNubj)}(hhh](j)}(h drm_sched_rqh]j)}(hstruct drm_sched_rqh](j)}(hj? h]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKYubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjVhKYubj)}(h drm_sched_rqh]j)}(hjCh]h drm_sched_rq}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjVhKYubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjVhKYubah}(h]j<ah ](jjeh"]h$]h&]j j )j huh1jhjVhKYhj>hhubj )}(hhh]h)}(h"queue of entities to be scheduled.h]h"queue of entities to be scheduled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hj>hhhjVhKYubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hX**Definition**:: struct drm_sched_rq { spinlock_t lock; struct list_head entities; struct rb_root_cached rb_tree_root; enum drm_sched_priority head_prio; }; **Members** ``lock`` protects **entities**, **rb_tree_root** and **head_prio**. ``entities`` list of the entities to be scheduled. ``rb_tree_root`` root of time based priority queue of entities for FIFO scheduling ``head_prio`` priority of the top tree element.h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubj )}(hstruct drm_sched_rq { spinlock_t lock; struct list_head entities; struct rb_root_cached rb_tree_root; enum drm_sched_priority head_prio; };h]hstruct drm_sched_rq { spinlock_t lock; struct list_head entities; struct rb_root_cached rb_tree_root; enum drm_sched_priority head_prio; };}hjȻsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh)}(h **Members**h]j7 )}(hjٻh]hMembers}(hjۻhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj׻ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjM )}(hhh](jR )}(hD``lock`` protects **entities**, **rb_tree_root** and **head_prio**. h](jX )}(h``lock``h]j^ )}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(hhh]h)}(h:protects **entities**, **rb_tree_root** and **head_prio**.h](h protects }(hjhhhNhNubj7 )}(h **entities**h]hentities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh, }(hjhhhNhNubj7 )}(h**rb_tree_root**h]h rb_tree_root}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh and }(hjhhhNhNubj7 )}(h **head_prio**h]h head_prio}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hKhjubjR )}(h3``entities`` list of the entities to be scheduled. h](jX )}(h ``entities``h]j^ )}(hjgh]hentities}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjeubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjaubjt )}(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&]uh1hhj|hKhj}ubah}(h]h ]h"]h$]h&]uh1js hjaubeh}(h]h ]h"]h$]h&]uh1jQ hj|hKhjubjR )}(hS``rb_tree_root`` root of time based priority queue of entities for FIFO scheduling h](jX )}(h``rb_tree_root``h]j^ )}(hjh]h rb_tree_root}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(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&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(h/``head_prio`` priority of the top tree element.h](jX )}(h ``head_prio``h]j^ )}(hjټh]h head_prio}(hjۼhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj׼ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjӼubjt )}(hhh]h)}(h!priority of the top tree element.h]h!priority of the top tree element.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1js hjӼubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjhhubh)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_fence (C struct)c.drm_sched_fencehNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_sched_fenceh]j)}(hstruct drm_sched_fenceh](j)}(hj? h]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjghMubj)}(hdrm_sched_fenceh]j)}(hjTh]hdrm_sched_fence}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVhhhjghMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRhhhjghMubah}(h]jMah ](jjeh"]h$]h&]j j )j huh1jhjghMhjOhhubj )}(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:593: ./include/drm/gpu_scheduler.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjOhhhjghMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hX**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; uint64_t drm_client_id; }; **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 debugging ``drm_client_id`` The client_id of the drm_file which owns the job.h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubj )}(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; uint64_t drm_client_id; };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; uint64_t drm_client_id; };}hjٽsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjM )}(hhh](jR )}(h^``scheduled`` this fence is what will be signaled by the scheduler when the job is scheduled. h](jX )}(h ``scheduled``h]j^ )}(hj h]h scheduled}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjt )}(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.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(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](jX )}(h ``finished``h]j^ )}(hjCh]hfinished}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjAubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM hj=ubjt )}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjYubh)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjYubeh}(h]h ]h"]h$]h&]uh1js hj=ubeh}(h]h ]h"]h$]h&]uh1jQ hjXhM hjubjR )}(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](jX )}(h ``deadline``h]j^ )}(hjh]hdeadline}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM&hjubjt )}(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 ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_fenceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM%hjubh- 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 ](j j! c-typeeh"]h$]h&]uh1j] hjѾubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_fenceuh1hhj̾hM%hjubeh}(h]h ]h"]h$]h&]uh1hhj̾hM%hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM&hjubjR )}(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](jX )}(h ``parent``h]j^ )}(hjh]hparent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM-hjubjt )}(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 }(hj!hhhNhNubh)}(h?:c:type:`drm_sched_backend_ops.run_job `h]j^ )}(hj+h]hdrm_sched_backend_ops.run_job}(hj-hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj)ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM+hj!ubh4 when scheduling the job on hardware. We signal the }(hj!hhhNhNubh)}(h4:c:type:`drm_sched_fence.finished `h]j^ )}(hjOh]hdrm_sched_fence.finished}(hjQhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjMubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_fenceuh1hhjHhM+hj!ubh fence once parent is signalled.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhM+hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM-hjubjR )}(hQ``sched`` the scheduler instance to which the job having this struct belongs to. h](jX )}(h ``sched``h]j^ )}(hjh]hsched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM2hjubjt )}(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:593: ./include/drm/gpu_scheduler.hhM1hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM2hjubjR )}(hA``lock`` the lock used by the scheduled and the finished fences. h](jX )}(h``lock``h]j^ )}(hj¿h]hlock}(hjĿhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM6hjubjt )}(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׿hM6hjؿubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj׿hM6hjubjR )}(h"``owner`` job owner for debugging h](jX )}(h ``owner``h]j^ )}(hjh]howner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM:hjubjt )}(hhh]h)}(hjob owner for debuggingh]hjob owner for debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM:hjubjR )}(hC``drm_client_id`` The client_id of the drm_file which owns the job.h](jX )}(h``drm_client_id``h]j^ )}(hj4h]h drm_client_id}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM>hj.ubjt )}(hhh]h)}(h1The client_id of the drm_file which owns the job.h]h1The client_id of the drm_file which owns the job.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM?hjJubah}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hjIhM>hjubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_job (C struct)c.drm_sched_jobhNtauh1jhjhhhNhNubj)}(hhh](j)}(h drm_sched_jobh]j)}(hstruct drm_sched_jobh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMEubj)}(h drm_sched_jobh]j)}(hjh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMEubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMEubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMEhjhhubj )}(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:593: ./include/drm/gpu_scheduler.hhMHhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMEubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hXx**Definition**:: struct drm_sched_job { struct drm_gpu_scheduler *sched; struct drm_sched_fence *s_fence; struct drm_sched_entity *entity; struct drm_sched_entity_stats *entity_stats; 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** ``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. ``entity_stats`` Stats object reference held by the job and entity. ``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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMLhjubj )}(hXustruct drm_sched_job { struct drm_gpu_scheduler *sched; struct drm_sched_fence *s_fence; struct drm_sched_entity *entity; struct drm_sched_entity_stats *entity_stats; 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]hXustruct drm_sched_job { struct drm_gpu_scheduler *sched; struct drm_sched_fence *s_fence; struct drm_sched_entity *entity; struct drm_sched_entity_stats *entity_stats; 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&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMNhjubh)}(h **Members**h]j7 )}(hjh]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMahjubjM )}(hhh](jR )}(h``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. h](jX )}(h ``sched``h]j^ )}(hj=h]hsched}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj;ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMahj7ubjt )}(hhh]h)}(hThe 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.h]hThe 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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM_hjSubah}(h]h ]h"]h$]h&]uh1js hj7ubeh}(h]h ]h"]h$]h&]uh1jQ hjRhMahj4ubjR )}(h;``s_fence`` contains the fences for the scheduling of job. h](jX )}(h ``s_fence``h]j^ )}(hjwh]hs_fence}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjuubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMNhjqubjt )}(hhh]h)}(h.contains the fences for the scheduling of job.h]h.contains the fences for the scheduling of job.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1js hjqubeh}(h]h ]h"]h$]h&]uh1jQ hjhMNhj4ubjR )}(h1``entity`` the entity to which this job belongs. h](jX )}(h ``entity``h]j^ )}(hjh]hentity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMVhjubjt )}(hhh]h)}(h%the entity to which this job belongs.h]h%the entity to which this job belongs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMVhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMVhj4ubjR )}(hD``entity_stats`` Stats object reference held by the job and entity. h](jX )}(h``entity_stats``h]j^ )}(hjh]h entity_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMkhjubjt )}(hhh]h)}(h2Stats object reference held by the job and entity.h]h2Stats object reference held by the job and entity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMkhj4ubjR )}(h(``s_priority`` the priority of the job. h](jX )}(h``s_priority``h]j^ )}(hj"h]h s_priority}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMUhjubjt )}(hhh]h)}(hthe priority of the job.h]hthe priority of the job.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMUhj8ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj7hMUhj4ubjR )}(hH``credits`` the number of credits this job contributes to the scheduler h](jX )}(h ``credits``h]j^ )}(hj[h]hcredits}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMPhjUubjt )}(hhh]h)}(h;the number of credits this job contributes to the schedulerh]h;the number of credits this job contributes to the scheduler}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMPhjqubah}(h]h ]h"]h$]h&]uh1js hjUubeh}(h]h ]h"]h$]h&]uh1jQ hjphMPhj4ubjR )}(h;``last_dependency`` tracks **dependencies** as they signal h](jX )}(h``last_dependency``h]j^ )}(hjh]hlast_dependency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMqhjubjt )}(hhh]h)}(h&tracks **dependencies** as they signalh](htracks }(hjhhhNhNubj7 )}(h**dependencies**h]h dependencies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh as they signal}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMqhj4ubjR )}(h``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. h](jX )}(h ``karma``h]j^ )}(hjh]hkarma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMThjubjt )}(hhh]h)}(hincrement 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.h]hincrement 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMRhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMThj4ubjR )}(hM``queue_node`` used to append this struct to the queue of jobs in an entity. h](jX )}(h``queue_node``h]j^ )}(hjh]h queue_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMKhjubjt )}(hhh]h)}(h=used to append this struct to the queue of jobs in an entity.h]h=used to append this struct to the queue of jobs in an entity.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMKhj/ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj.hMKhj4ubjR )}(h=``list`` a job participates in a "pending" and "done" lists. h](jX )}(h``list``h]j^ )}(hjRh]hlist}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjPubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMLhjLubjt )}(hhh]h)}(h3a job participates in a "pending" and "done" lists.h]h;a job participates in a “pending” and “done” lists.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMLhjhubah}(h]h ]h"]h$]h&]uh1js hjLubeh}(h]h ]h"]h$]h&]uh1jQ hjghMLhj4ubjR )}(h``{unnamed_union}`` anonymous h](jX )}(h``{unnamed_union}``h]j^ )}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhKhjubjt )}(hhh]h)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhj4ubjR )}(h3``finish_cb`` the callback for the finished fence. h](jX )}(h ``finish_cb``h]j^ )}(hjh]h finish_cb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMOhjubjt )}(hhh]h)}(h$the callback for the finished fence.h]h$the callback for the finished fence.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMOhj4ubjR )}(h=``work`` Helper to reschedule job kill to different context. h](jX )}(h``work``h]j^ )}(hjh]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMQhjubjt )}(hhh]h)}(h3Helper to reschedule job kill to different context.h]h3Helper to reschedule job kill to different context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMQhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMQhj4ubjR )}(h5``cb`` the callback for the parent fence in s_fence. h](jX )}(h``cb``h]j^ )}(hj6h]hcb}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj4ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMWhj0ubjt )}(hhh]h)}(h-the callback for the parent fence in s_fence.h]h-the callback for the parent fence in s_fence.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMWhjLubah}(h]h ]h"]h$]h&]uh1js hj0ubeh}(h]h ]h"]h$]h&]uh1jQ hjKhMWhj4ubjR )}(h``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](jX )}(h``dependencies``h]j^ )}(hjoh]h dependencies}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjiubjt )}(hhh]h)}(hContains the dependencies as struct dma_fence for this job, see drm_sched_job_add_dependency() and drm_sched_job_add_implicit_dependencies().h]hContains the dependencies as struct dma_fence for this job, see drm_sched_job_add_dependency() and drm_sched_job_add_implicit_dependencies().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1js hjiubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj4ubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjhhubh)}(hA job is created by the driver using drm_sched_job_init(), and should call drm_sched_entity_push_job() once it wants the scheduler to schedule the job.h]hA job is created by the driver using drm_sched_job_init(), and should call drm_sched_entity_push_job() once it wants the scheduler to schedule the job.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMWhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpu_sched_stat (C enum)c.drm_gpu_sched_stathNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_gpu_sched_stath]j)}(henum drm_gpu_sched_stath](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM^ubj)}(hdrm_gpu_sched_stath]j)}(hjh]hdrm_gpu_sched_stat}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM^ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM^ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM^hjhhubj )}(hhh]h)}(hthe scheduler's statush]hthe scheduler’s status}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj/hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM^ubeh}(h]h ](j! enumeh"]h$]h&]j& j! j' jJj( jJj) j* j+ uh1jhhhjhNhNubj- )}(hXC**Constants** ``DRM_GPU_SCHED_STAT_NONE`` Reserved. Do not use. ``DRM_GPU_SCHED_STAT_RESET`` The GPU hung and successfully reset. ``DRM_GPU_SCHED_STAT_ENODEV`` Error: Device is not available anymore. ``DRM_GPU_SCHED_STAT_NO_HANG`` Contrary to scheduler's assumption, the GPU did not hang and is still running.h](h)}(h **Constants**h]j7 )}(hjTh]h Constants}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjNubjM )}(hhh](jR )}(h2``DRM_GPU_SCHED_STAT_NONE`` Reserved. Do not use. h](jX )}(h``DRM_GPU_SCHED_STAT_NONE``h]j^ )}(hjsh]hDRM_GPU_SCHED_STAT_NONE}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjmubjt )}(hhh]h)}(hReserved. Do not use.h]hReserved. Do not use.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjjubjR )}(hB``DRM_GPU_SCHED_STAT_RESET`` The GPU hung and successfully reset. h](jX )}(h``DRM_GPU_SCHED_STAT_RESET``h]j^ )}(hjh]hDRM_GPU_SCHED_STAT_RESET}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjt )}(hhh]h)}(h$The GPU hung and successfully reset.h]h$The GPU hung and successfully reset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjjubjR )}(hF``DRM_GPU_SCHED_STAT_ENODEV`` Error: Device is not available anymore. h](jX )}(h``DRM_GPU_SCHED_STAT_ENODEV``h]j^ )}(hjh]hDRM_GPU_SCHED_STAT_ENODEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjt )}(hhh]h)}(h'Error: Device is not available anymore.h]h'Error: Device is not available anymore.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjjubjR )}(hm``DRM_GPU_SCHED_STAT_NO_HANG`` Contrary to scheduler's assumption, the GPU did not hang and is still running.h](jX )}(h``DRM_GPU_SCHED_STAT_NO_HANG``h]j^ )}(hjh]hDRM_GPU_SCHED_STAT_NO_HANG}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjt )}(hhh]h)}(hNContrary to scheduler's assumption, the GPU did not hang and is still running.h]hPContrary to scheduler’s assumption, the GPU did not hang and is still running.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj3hMhjjubeh}(h]h ]h"]h$]h&]uh1jL hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_sched_backend_ops (C struct)c.drm_sched_backend_opshNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_sched_backend_opsh]j)}(hstruct drm_sched_backend_opsh](j)}(hj? h]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhMubj)}(hdrm_sched_backend_opsh]j)}(hjqh]hdrm_sched_backend_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjohhhjhMubah}(h]jjah ](jjeh"]h$]h&]j j )j huh1jhjhMhjlhhubj )}(hhh]h)}(h5Define the backend operations called by the schedulerh]h5Define the backend operations called by the scheduler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j hjlhhhjhMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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); void (*cancel_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. **sched_job**: the job to run The deprecated drm_sched_resubmit_jobs() (called by :c:type:`struct drm_sched_backend_ops `.timedout_job) can invoke this again with the same parameters. Using this is discouraged because it violates dma_fence rules, notably dma_fence_init() has to be called on already initialized fences for a second time. Moreover, this is dangerous because attempts to allocate memory might deadlock with memory management code waiting for the reset to complete. TODO: Document what drivers should do / use instead. This method is called in a workqueue context - either from the submit_wq the driver passed through drm_sched_init(), or, if the driver passed NULL, a separate, ordered workqueue the scheduler allocated. Note that the scheduler expects to 'inherit' its own reference to this fence from the callback. It does not invoke an extra dma_fence_get() on it. Consequently, this callback must take a reference for the scheduler, and additional ones for the driver's respective needs. Return: * On success: dma_fence the driver must signal once the hardware has completed the job ("hardware fence"). * On failure: NULL or an ERR_PTR. ``timedout_job`` Called when a job has taken too long to execute, to trigger GPU recovery. **sched_job**: The job that has timed out Drivers typically issue a reset to recover from GPU hangs. This procedure looks very different depending on whether a firmware or a hardware scheduler is being used. For a FIRMWARE SCHEDULER, each ring has one scheduler, and each scheduler has one entity. Hence, the steps taken typically look as follows: 1. Stop the scheduler using drm_sched_stop(). This will pause the scheduler workqueues and cancel the timeout work, guaranteeing that nothing is queued while the ring is being removed. 2. Remove the ring. The firmware will make sure that the corresponding parts of the hardware are resetted, and that other rings are not impacted. 3. Kill the entity and the associated scheduler. For a HARDWARE SCHEDULER, a scheduler instance schedules jobs from one or more entities to one ring. This implies that all entities associated with the affected scheduler cannot be torn down, because this would effectively also affect innocent userspace processes which did not submit faulty jobs (for example). Consequently, the procedure to recover with a hardware scheduler should look like this: 1. Stop all schedulers impacted by the reset using drm_sched_stop(). 2. Kill the entity the faulty job stems from. 3. Issue a GPU reset on all faulty rings (driver-specific). 4. Re-submit jobs on all schedulers impacted by re-submitting them to the entities which are still alive. 5. Restart all schedulers that were stopped in step #1 using drm_sched_start(). Note that some GPUs have distinct hardware queues but need to reset the GPU globally, which requires extra synchronization between the timeout handlers of different schedulers. One way to achieve this synchronization is to create an ordered workqueue (using alloc_ordered_workqueue()) at the driver level, and pass this queue as drm_sched_init()'s **timeout_wq** parameter. This will guarantee that timeout handlers are executed sequentially. Return: The scheduler's status, defined by :c:type:`enum drm_gpu_sched_stat ` ``free_job`` Called once the job's finished fence has been signaled and it's time to clean it up. ``cancel_job`` Used by the scheduler to guarantee remaining jobs' fences get signaled in drm_sched_fini(). Used by the scheduler to cancel all jobs that have not been executed with :c:type:`struct drm_sched_backend_ops `.run_job by the time drm_sched_fini() gets invoked. Drivers need to signal the passed job's hardware fence with an appropriate error code (e.g., -ECANCELED) in this callback. They must not free the job. The scheduler will only call this callback once it stopped calling all other callbacks forever, with the exception of :c:type:`struct drm_sched_backend_ops `.free_job.h](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubj )}(hXstruct 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); void (*cancel_job)(struct drm_sched_job *sched_job); };h]hXstruct 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); void (*cancel_job)(struct drm_sched_job *sched_job); };}hjsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh)}(h **Members**h]j7 )}(hjh]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjM )}(hhh](jR )}(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](jX )}(h``prepare_job``h]j^ )}(hj&h]h prepare_job}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj ubjt )}(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.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj<ubh)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj<ubeh}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj;hMhjubjR )}(hX``run_job`` Called to execute the job once all of the dependencies have been resolved. **sched_job**: the job to run The deprecated drm_sched_resubmit_jobs() (called by :c:type:`struct drm_sched_backend_ops `.timedout_job) can invoke this again with the same parameters. Using this is discouraged because it violates dma_fence rules, notably dma_fence_init() has to be called on already initialized fences for a second time. Moreover, this is dangerous because attempts to allocate memory might deadlock with memory management code waiting for the reset to complete. TODO: Document what drivers should do / use instead. This method is called in a workqueue context - either from the submit_wq the driver passed through drm_sched_init(), or, if the driver passed NULL, a separate, ordered workqueue the scheduler allocated. Note that the scheduler expects to 'inherit' its own reference to this fence from the callback. It does not invoke an extra dma_fence_get() on it. Consequently, this callback must take a reference for the scheduler, and additional ones for the driver's respective needs. Return: * On success: dma_fence the driver must signal once the hardware has completed the job ("hardware fence"). * On failure: NULL or an ERR_PTR. h](jX )}(h ``run_job``h]j^ )}(hjoh]hrun_job}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjmubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjiubjt )}(hhh](h)}(hJCalled to execute the job once all of the dependencies have been resolved.h]hJCalled to execute the job once all of the dependencies have been resolved.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh)}(h**sched_job**: the job to runh](j7 )}(h **sched_job**h]h sched_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh: the job to run}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh)}(hXThe deprecated drm_sched_resubmit_jobs() (called by :c:type:`struct drm_sched_backend_ops `.timedout_job) can invoke this again with the same parameters. Using this is discouraged because it violates dma_fence rules, notably dma_fence_init() has to be called on already initialized fences for a second time. Moreover, this is dangerous because attempts to allocate memory might deadlock with memory management code waiting for the reset to complete.h](h4The deprecated drm_sched_resubmit_jobs() (called by }(hjhhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j^ )}(hjh]hstruct drm_sched_backend_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubhXf.timedout_job) can invoke this again with the same parameters. Using this is discouraged because it violates dma_fence rules, notably dma_fence_init() has to be called on already initialized fences for a second time. Moreover, this is dangerous because attempts to allocate memory might deadlock with memory management code waiting for the reset to complete.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h4TODO: Document what drivers should do / use instead.h]h4TODO: Document what drivers should do / use instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh)}(hThis method is called in a workqueue context - either from the submit_wq the driver passed through drm_sched_init(), or, if the driver passed NULL, a separate, ordered workqueue the scheduler allocated.h]hThis method is called in a workqueue context - either from the submit_wq the driver passed through drm_sched_init(), or, if the driver passed NULL, a separate, ordered workqueue the scheduler allocated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh)}(hXNote that the scheduler expects to 'inherit' its own reference to this fence from the callback. It does not invoke an extra dma_fence_get() on it. Consequently, this callback must take a reference for the scheduler, and additional ones for the driver's respective needs.h]hXNote that the scheduler expects to ‘inherit’ its own reference to this fence from the callback. It does not invoke an extra dma_fence_get() on it. Consequently, this callback must take a reference for the scheduler, and additional ones for the driver’s respective needs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh)}(hReturn: * On success: dma_fence the driver must signal once the hardware has completed the job ("hardware fence"). * On failure: NULL or an ERR_PTR.h]hReturn: * On success: dma_fence the driver must signal once the hardware has completed the job (“hardware fence”). * On failure: NULL or an ERR_PTR.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubeh}(h]h ]h"]h$]h&]uh1js hjiubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hXe``timedout_job`` Called when a job has taken too long to execute, to trigger GPU recovery. **sched_job**: The job that has timed out Drivers typically issue a reset to recover from GPU hangs. This procedure looks very different depending on whether a firmware or a hardware scheduler is being used. For a FIRMWARE SCHEDULER, each ring has one scheduler, and each scheduler has one entity. Hence, the steps taken typically look as follows: 1. Stop the scheduler using drm_sched_stop(). This will pause the scheduler workqueues and cancel the timeout work, guaranteeing that nothing is queued while the ring is being removed. 2. Remove the ring. The firmware will make sure that the corresponding parts of the hardware are resetted, and that other rings are not impacted. 3. Kill the entity and the associated scheduler. For a HARDWARE SCHEDULER, a scheduler instance schedules jobs from one or more entities to one ring. This implies that all entities associated with the affected scheduler cannot be torn down, because this would effectively also affect innocent userspace processes which did not submit faulty jobs (for example). Consequently, the procedure to recover with a hardware scheduler should look like this: 1. Stop all schedulers impacted by the reset using drm_sched_stop(). 2. Kill the entity the faulty job stems from. 3. Issue a GPU reset on all faulty rings (driver-specific). 4. Re-submit jobs on all schedulers impacted by re-submitting them to the entities which are still alive. 5. Restart all schedulers that were stopped in step #1 using drm_sched_start(). Note that some GPUs have distinct hardware queues but need to reset the GPU globally, which requires extra synchronization between the timeout handlers of different schedulers. One way to achieve this synchronization is to create an ordered workqueue (using alloc_ordered_workqueue()) at the driver level, and pass this queue as drm_sched_init()'s **timeout_wq** parameter. This will guarantee that timeout handlers are executed sequentially. Return: The scheduler's status, defined by :c:type:`enum drm_gpu_sched_stat ` h](jX )}(h``timedout_job``h]j^ )}(hj4h]h timedout_job}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj2ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj.ubjt )}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjJubh)}(h)**sched_job**: The job that has timed outh](j7 )}(h **sched_job**h]h sched_job}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj\ubh: The job that has timed out}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjJubh)}(hDrivers typically issue a reset to recover from GPU hangs. This procedure looks very different depending on whether a firmware or a hardware scheduler is being used.h]hDrivers typically issue a reset to recover from GPU hangs. This procedure looks very different depending on whether a firmware or a hardware scheduler is being used.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjJubh)}(hFor a FIRMWARE SCHEDULER, each ring has one scheduler, and each scheduler has one entity. Hence, the steps taken typically look as follows:h]hFor a FIRMWARE SCHEDULER, each ring has one scheduler, and each scheduler has one entity. Hence, the steps taken typically look as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjJubj~A)}(hhh](j)}(hStop the scheduler using drm_sched_stop(). This will pause the scheduler workqueues and cancel the timeout work, guaranteeing that nothing is queued while the ring is being removed.h]h)}(hStop the scheduler using drm_sched_stop(). This will pause the scheduler workqueues and cancel the timeout work, guaranteeing that nothing is queued while the ring is being removed.h]hStop the scheduler using drm_sched_stop(). This will pause the scheduler workqueues and cancel the timeout work, guaranteeing that nothing is queued while the ring is being removed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hRemove the ring. The firmware will make sure that the corresponding parts of the hardware are resetted, and that other rings are not impacted.h]h)}(hRemove the ring. The firmware will make sure that the corresponding parts of the hardware are resetted, and that other rings are not impacted.h]hRemove the ring. The firmware will make sure that the corresponding parts of the hardware are resetted, and that other rings are not impacted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h/Kill the entity and the associated scheduler. h]h)}(h-Kill the entity and the associated scheduler.h]h-Kill the entity and the associated scheduler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jFDjGDjHDhjIDjuh1j}AhjJubh)}(hX7For a HARDWARE SCHEDULER, a scheduler instance schedules jobs from one or more entities to one ring. This implies that all entities associated with the affected scheduler cannot be torn down, because this would effectively also affect innocent userspace processes which did not submit faulty jobs (for example).h]hX7For a HARDWARE SCHEDULER, a scheduler instance schedules jobs from one or more entities to one ring. This implies that all entities associated with the affected scheduler cannot be torn down, because this would effectively also affect innocent userspace processes which did not submit faulty jobs (for example).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjJubh)}(hWConsequently, the procedure to recover with a hardware scheduler should look like this:h]hWConsequently, the procedure to recover with a hardware scheduler should look like this:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjJubj~A)}(hhh](j)}(hAStop all schedulers impacted by the reset using drm_sched_stop().h]h)}(hjh]hAStop 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:593: ./include/drm/gpu_scheduler.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h*Kill the entity the faulty job stems from.h]h)}(hj&h]h*Kill the entity the faulty job stems from.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h8Issue a GPU reset on all faulty rings (driver-specific).h]h)}(hj>h]h8Issue a GPU reset on all faulty rings (driver-specific).}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.h&hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hfRe-submit jobs on all schedulers impacted by re-submitting them to the entities which are still alive.h]h)}(hfRe-submit jobs on all schedulers impacted by re-submitting them to the entities which are still alive.h]hfRe-submit jobs on all schedulers impacted by re-submitting them to the entities which are still alive.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjTubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hMRestart all schedulers that were stopped in step #1 using drm_sched_start(). h]h)}(hLRestart all schedulers that were stopped in step #1 using drm_sched_start().h]hLRestart all schedulers that were stopped in step #1 using drm_sched_start().}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjmubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]jFDjGDjHDhjIDjuh1j}AhjJubh)}(hXNote that some GPUs have distinct hardware queues but need to reset the GPU globally, which requires extra synchronization between the timeout handlers of different schedulers. One way to achieve this synchronization is to create an ordered workqueue (using alloc_ordered_workqueue()) at the driver level, and pass this queue as drm_sched_init()'s **timeout_wq** parameter. This will guarantee that timeout handlers are executed sequentially.h](hX^Note that some GPUs have distinct hardware queues but need to reset the GPU globally, which requires extra synchronization between the timeout handlers of different schedulers. One way to achieve this synchronization is to create an ordered workqueue (using alloc_ordered_workqueue()) at the driver level, and pass this queue as drm_sched_init()’s }(hjhhhNhNubj7 )}(h**timeout_wq**h]h timeout_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubhP parameter. This will guarantee that timeout handlers are executed sequentially.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjJubh)}(haReturn: The scheduler's status, defined by :c:type:`enum drm_gpu_sched_stat `h](h-Return: The scheduler’s status, defined by }(hjhhhNhNubh)}(h6:c:type:`enum drm_gpu_sched_stat `h]j^ )}(hjh]henum drm_gpu_sched_stat}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpu_sched_statuh1hhjIhMhjubeh}(h]h ]h"]h$]h&]uh1hhjIhMhjJubeh}(h]h ]h"]h$]h&]uh1js hj.ubeh}(h]h ]h"]h$]h&]uh1jQ hjIhMhjubjR )}(hb``free_job`` Called once the job's finished fence has been signaled and it's time to clean it up. h](jX )}(h ``free_job``h]j^ )}(hjh]hfree_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM hjubjt )}(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&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubjR )}(hX``cancel_job`` Used by the scheduler to guarantee remaining jobs' fences get signaled in drm_sched_fini(). Used by the scheduler to cancel all jobs that have not been executed with :c:type:`struct drm_sched_backend_ops `.run_job by the time drm_sched_fini() gets invoked. Drivers need to signal the passed job's hardware fence with an appropriate error code (e.g., -ECANCELED) in this callback. They must not free the job. The scheduler will only call this callback once it stopped calling all other callbacks forever, with the exception of :c:type:`struct drm_sched_backend_ops `.free_job.h](jX )}(h``cancel_job``h]j^ )}(hj&h]h cancel_job}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj$ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj ubjt )}(hhh](h)}(h[Used by the scheduler to guarantee remaining jobs' fences get signaled in drm_sched_fini().h]h]Used by the scheduler to guarantee remaining jobs’ fences get signaled in drm_sched_fini().}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj<ubh)}(hUsed by the scheduler to cancel all jobs that have not been executed with :c:type:`struct drm_sched_backend_ops `.run_job by the time drm_sched_fini() gets invoked.h](hJUsed by the scheduler to cancel all jobs that have not been executed with }(hjNhhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j^ )}(hjXh]hstruct drm_sched_backend_ops}(hjZhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjVubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjNubh3.run_job by the time drm_sched_fini() gets invoked.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhMhj<ubh)}(hDrivers need to signal the passed job's hardware fence with an appropriate error code (e.g., -ECANCELED) in this callback. They must not free the job.h]hDrivers need to signal the passed job’s hardware fence with an appropriate error code (e.g., -ECANCELED) in this callback. They must not free the job.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj<ubh)}(hThe scheduler will only call this callback once it stopped calling all other callbacks forever, with the exception of :c:type:`struct drm_sched_backend_ops `.free_job.h](hvThe scheduler will only call this callback once it stopped calling all other callbacks forever, with the exception of }(hjhhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j^ )}(hjh]hstruct drm_sched_backend_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubh .free_job.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj<ubeh}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj;hMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjhhubh)}(h9These functions should be implemented in the driver side.h]h9These functions should be implemented in the driver side.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gpu_scheduler (C struct)c.drm_gpu_schedulerhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_gpu_schedulerh]j)}(hstruct drm_gpu_schedulerh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hMubj)}(hdrm_gpu_schedulerh]j)}(hjh]hdrm_gpu_scheduler}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj'hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj'hMubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj'hMhjhhubj )}(hhh]h)}(h scheduler instance-specific datah]h scheduler instance-specific data}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM!hjYhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj'hMubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jtj( jtj) j* j+ uh1jhhhjhNhNubj- )}(hX6 **Definition**:: struct drm_gpu_scheduler { const struct drm_sched_backend_ops *ops; u32 credit_limit; atomic_t credit_count; long timeout; const char *name; struct drm_sched_rq rq; wait_queue_head_t job_scheduled; atomic64_t job_id_count; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; struct ewma_drm_sched_avgtime avg_job_us; 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. ``rq`` Scheduler run queue. ``job_scheduled`` once drm_sched_entity_flush() 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** ``avg_job_us`` Average job duration. ``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](j7 )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj|ubh:}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM%hjxubj )}(hXXstruct drm_gpu_scheduler { const struct drm_sched_backend_ops *ops; u32 credit_limit; atomic_t credit_count; long timeout; const char *name; struct drm_sched_rq rq; wait_queue_head_t job_scheduled; atomic64_t job_id_count; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; struct ewma_drm_sched_avgtime avg_job_us; 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]hXXstruct drm_gpu_scheduler { const struct drm_sched_backend_ops *ops; u32 credit_limit; atomic_t credit_count; long timeout; const char *name; struct drm_sched_rq rq; wait_queue_head_t job_scheduled; atomic64_t job_id_count; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; struct ewma_drm_sched_avgtime avg_job_us; 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; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM'hjxubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMBhjxubjM )}(hhh](jR )}(h3``ops`` backend operations provided by the driver. h](jX )}(h``ops``h]j^ )}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM$hjubjt )}(hhh]h)}(h*backend operations provided by the driver.h]h*backend operations provided by the driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM$hjubjR )}(h4``credit_limit`` the credit limit of this scheduler h](jX )}(h``credit_limit``h]j^ )}(hjh]h credit_limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM%hjubjt )}(hhh]h)}(h"the credit limit of this schedulerh]h"the credit limit of this scheduler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM%hjubjR )}(h<``credit_count`` the current credit count of this scheduler h](jX )}(h``credit_count``h]j^ )}(hj;h]h credit_count}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj9ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM&hj5ubjt )}(hhh]h)}(h*the current credit count of this schedulerh]h*the current credit count of this scheduler}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM&hjQubah}(h]h ]h"]h$]h&]uh1js hj5ubeh}(h]h ]h"]h$]h&]uh1jQ hjPhM&hjubjR )}(hF``timeout`` the time after which a job is removed from the scheduler. h](jX )}(h ``timeout``h]j^ )}(hjth]htimeout}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjrubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM'hjnubjt )}(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&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1js hjnubeh}(h]h ]h"]h$]h&]uh1jQ hjhM'hjubjR )}(hB``name`` name of the ring for which this scheduler is being used. h](jX )}(h``name``h]j^ )}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM(hjubjt )}(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&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM(hjubjR )}(h``rq`` Scheduler run queue. h](jX )}(h``rq``h]j^ )}(hjh]hrq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM)hjubjt )}(hhh]h)}(hScheduler run queue.h]hScheduler run queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM)hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM)hjubjR )}(h``job_scheduled`` once drm_sched_entity_flush() is called the scheduler waits on this wait queue until all the scheduled jobs are finished. h](jX )}(h``job_scheduled``h]j^ )}(hjh]h job_scheduled}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM,hjubjt )}(hhh]h)}(hyonce drm_sched_entity_flush() is called the scheduler waits on this wait queue until all the scheduled jobs are finished.h]hyonce drm_sched_entity_flush() is called the scheduler waits on this wait queue until all the scheduled jobs are finished.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM*hj5ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj4hM,hjubjR )}(h;``job_id_count`` used to assign unique id to the each job. h](jX )}(h``job_id_count``h]j^ )}(hjYh]h job_id_count}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjWubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM-hjSubjt )}(hhh]h)}(h)used to assign unique id to the each job.h]h)used to assign unique id to the each job.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM-hjoubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjnhM-hjubjR )}(hM``submit_wq`` workqueue used to queue **work_run_job** and **work_free_job** h](jX )}(h ``submit_wq``h]j^ )}(hjh]h submit_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM.hjubjt )}(hhh]h)}(h>workqueue used to queue **work_run_job** and **work_free_job**h](hworkqueue used to queue }(hjhhhNhNubj7 )}(h**work_run_job**h]h work_run_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh and }(hjhhhNhNubj7 )}(h**work_free_job**h]h work_free_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubeh}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM.hjubjR )}(h4``timeout_wq`` workqueue used to queue **work_tdr** h](jX )}(h``timeout_wq``h]j^ )}(hjh]h timeout_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM/hjubjt )}(hhh]h)}(h$workqueue used to queue **work_tdr**h](hworkqueue used to queue }(hjhhhNhNubj7 )}(h **work_tdr**h]hwork_tdr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubeh}(h]h ]h"]h$]h&]uh1hhjhM/hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM/hjubjR )}(h%``avg_job_us`` Average job duration. h](jX )}(h``avg_job_us``h]j^ )}(hj2h]h avg_job_us}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj0ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM0hj,ubjt )}(hhh]h)}(hAverage job duration.h]hAverage job duration.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM0hjHubah}(h]h ]h"]h$]h&]uh1js hj,ubeh}(h]h ]h"]h$]h&]uh1jQ hjGhM0hjubjR )}(h@``work_run_job`` work which calls run_job op of each scheduler. h](jX )}(h``work_run_job``h]j^ )}(hjkh]h work_run_job}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjiubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM1hjeubjt )}(hhh]h)}(h.work which calls run_job op of each scheduler.h]h.work which calls run_job op of each scheduler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1js hjeubeh}(h]h ]h"]h$]h&]uh1jQ hjhM1hjubjR )}(hB``work_free_job`` work which calls free_job op of each scheduler. h](jX )}(h``work_free_job``h]j^ )}(hjh]h work_free_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM2hjubjt )}(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&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM2hjubjR )}(hh``work_tdr`` schedules a delayed call to **drm_sched_job_timedout** after the timeout interval is over. h](jX )}(h ``work_tdr``h]j^ )}(hjh]hwork_tdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM4hjubjt )}(hhh]h)}(hZschedules a delayed call to **drm_sched_job_timedout** after the timeout interval is over.h](hschedules a delayed call to }(hjhhhNhNubj7 )}(h**drm_sched_job_timedout**h]hdrm_sched_job_timedout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh$ after the timeout interval is over.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM3hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM4hjubjR )}(hH``pending_list`` the list of jobs which are currently in the job queue. h](jX )}(h``pending_list``h]j^ )}(hj)h]h pending_list}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj'ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM5hj#ubjt )}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM5hj?ubah}(h]h ]h"]h$]h&]uh1js hj#ubeh}(h]h ]h"]h$]h&]uh1jQ hj>hM5hjubjR )}(h4``job_list_lock`` lock to protect the pending_list. h](jX )}(h``job_list_lock``h]j^ )}(hjbh]h job_list_lock}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj`ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM6hj\ubjt )}(hhh]h)}(h!lock to protect the pending_list.h]h!lock to protect the pending_list.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM6hjxubah}(h]h ]h"]h$]h&]uh1js hj\ubeh}(h]h ]h"]h$]h&]uh1jQ hjwhM6hjubjR )}(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](jX )}(h``hang_limit``h]j^ )}(hjh]h hang_limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM8hjubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM7hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM8hjubjR )}(h7``score`` score to help loadbalancer pick a idle sched h](jX )}(h ``score``h]j^ )}(hjh]hscore}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM9hjubjt )}(hhh]h)}(h,score to help loadbalancer pick a idle schedh]h,score to help loadbalancer pick a idle sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM9hjubjR )}(h:``_score`` score used when the driver doesn't provide one h](jX )}(h ``_score``h]j^ )}(hjh]h_score}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM:hjubjt )}(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&]uh1hhj#hM:hj$ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj#hM:hjubjR )}(h6``ready`` marks if the underlying HW is ready to work h](jX )}(h ``ready``h]j^ )}(hjGh]hready}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjEubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM;hjAubjt )}(hhh]h)}(h+marks if the underlying HW is ready to workh]h+marks if the underlying HW is ready to work}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hM;hj]ubah}(h]h ]h"]h$]h&]uh1js hjAubeh}(h]h ]h"]h$]h&]uh1jQ hj\hM;hjubjR )}(hB``free_guilty`` A hit to time out handler to free the guilty job. h](jX )}(h``free_guilty``h]j^ )}(hjh]h free_guilty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj~ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM<hjzubjt )}(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&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1js hjzubeh}(h]h ]h"]h$]h&]uh1jQ hjhM<hjubjR )}(hD``pause_submit`` pause queuing of **work_run_job** on **submit_wq** h](jX )}(h``pause_submit``h]j^ )}(hjh]h pause_submit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM=hjubjt )}(hhh]h)}(h2pause queuing of **work_run_job** on **submit_wq**h](hpause queuing of }(hjhhhNhNubj7 )}(h**work_run_job**h]h work_run_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh on }(hjhhhNhNubj7 )}(h **submit_wq**h]h submit_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubeh}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM=hjubjR )}(h=``own_submit_wq`` scheduler owns allocation of **submit_wq** h](jX )}(h``own_submit_wq``h]j^ )}(hjh]h own_submit_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM>hj ubjt )}(hhh]h)}(h*scheduler owns allocation of **submit_wq**h](hscheduler owns allocation of }(hj+hhhNhNubj7 )}(h **submit_wq**h]h submit_wq}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+ubeh}(h]h ]h"]h$]h&]uh1hhj'hM>hj(ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj'hM>hjubjR )}(h/``dev`` system :c:type:`struct device `h](jX )}(h``dev``h]j^ )}(hjYh]hdev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjWubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM>hjSubjt )}(hhh]h)}(h'system :c:type:`struct device `h](hsystem }(hjrhhhNhNubh)}(h :c:type:`struct device `h]j^ )}(hj|h]h struct device}(hj~hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjzubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j deviceuh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM?hjrubeh}(h]h ]h"]h$]h&]uh1hhjhM?hjoubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjnhM>hjubeh}(h]h ]h"]h$]h&]uh1jL hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMBhjhhubh)}(h4One scheduler is implemented for each hardware ring.h]h4One scheduler is implemented for each hardware ring.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM?hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_init_args (C struct)c.drm_sched_init_argshNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_sched_init_argsh]j)}(hstruct drm_sched_init_argsh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMDubj)}(hdrm_sched_init_argsh]j)}(hjh]hdrm_sched_init_args}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMDubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMDhjhhubj )}(hhh]h)}(h/parameters for initializing a DRM GPU schedulerh]h/parameters for initializing a DRM GPU scheduler}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhM^hj8hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMDubeh}(h]h ](j! structeh"]h$]h&]j& j! j' jSj( jSj) j* j+ uh1jhhhjhNhNubj- )}(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 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. ``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](j7 )}(h**Definition**h]h Definition}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj[ubh:}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMbhjWubj )}(hX%struct drm_sched_init_args { const struct drm_sched_backend_ops *ops; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; u32 credit_limit; unsigned int hang_limit; long timeout; atomic_t *score; const char *name; struct device *dev; };h]hX%struct drm_sched_init_args { const struct drm_sched_backend_ops *ops; struct workqueue_struct *submit_wq; struct workqueue_struct *timeout_wq; u32 credit_limit; unsigned int hang_limit; long timeout; atomic_t *score; const char *name; struct device *dev; };}hjxsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMdhjWubh)}(h **Members**h]j7 )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMphjWubjM )}(hhh](jR )}(h2``ops`` backend operations provided by the driver h](jX )}(h``ops``h]j^ )}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMahjubjt )}(hhh]h)}(h)backend operations provided by the driverh]h)backend operations provided by the driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMahjubjR )}(h]``submit_wq`` workqueue to use for submission. If NULL, an ordered wq is allocated and used. h](jX )}(h ``submit_wq``h]j^ )}(hjh]h submit_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMchjubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMbhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMchjubjR )}(hR``timeout_wq`` workqueue to use for timeout work. If NULL, the system_wq is used. h](jX )}(h``timeout_wq``h]j^ )}(hjh]h timeout_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhhjubjt )}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhhj1ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj0hMhhjubjR )}(hM``credit_limit`` the number of credits this scheduler can hold from all jobs h](jX )}(h``credit_limit``h]j^ )}(hjTh]h credit_limit}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjRubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMdhjNubjt )}(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}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMdhjjubah}(h]h ]h"]h$]h&]uh1js hjNubeh}(h]h ]h"]h$]h&]uh1jQ hjihMdhjubjR )}(hu``hang_limit`` number of times to allow a job to hang before dropping it. This mechanism is DEPRECATED. Set it to 0. h](jX )}(h``hang_limit``h]j^ )}(hjh]h hang_limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMfhjubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMehjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMfhjubjR )}(h9``timeout`` timeout value in jiffies for submitted jobs. h](jX )}(h ``timeout``h]j^ )}(hjh]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMghjubjt )}(hhh]h)}(h,timeout value in jiffies for submitted jobs.h]h,timeout value in jiffies for submitted jobs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMghjubjR )}(hB``score`` score atomic shared with other schedulers. May be NULL. h](jX )}(h ``score``h]j^ )}(hjh]hscore}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMihjubjt )}(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&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMihjubjR )}(h@``name`` name (typically the driver's name). Used for debugging h](jX )}(h``name``h]j^ )}(hj9h]hname}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj7ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMjhj3ubjt )}(hhh]h)}(h6name (typically the driver's name). Used for debuggingh]h8name (typically the driver’s name). Used for debugging}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMjhjOubah}(h]h ]h"]h$]h&]uh1js hj3ubeh}(h]h ]h"]h$]h&]uh1jQ hjNhMjhjubjR )}(h-``dev`` associated device. Used for debuggingh](jX )}(h``dev``h]j^ )}(hjrh]hdev}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMjhjlubjt )}(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:593: ./include/drm/gpu_scheduler.hhMkhjubah}(h]h ]h"]h$]h&]uh1js hjlubeh}(h]h ]h"]h$]h&]uh1jQ hjhMjhjubeh}(h]h ]h"]h$]h&]uh1jL hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_sched_pending_job_iter (C struct)c.drm_sched_pending_job_iterhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_sched_pending_job_iterh]j)}(h!struct drm_sched_pending_job_iterh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMqubj)}(hdrm_sched_pending_job_iterh]j)}(hjh]hdrm_sched_pending_job_iter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMqubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMqubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMqhjhhubj )}(hhh]h)}(h(DRM scheduler pending job iterator stateh]h(DRM scheduler pending job iterator state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMqubeh}(h]h ](j! structeh"]h$]h&]j& j! j' j&j( j&j) j* j+ uh1jhhhjhNhNubj- )}(h**Definition**:: struct drm_sched_pending_job_iter { struct drm_gpu_scheduler *sched; }; **Members** ``sched`` DRM scheduler associated with pending job iteratorh](h)}(h**Definition**::h](j7 )}(h**Definition**h]h Definition}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj.ubh:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj*ubj )}(hKstruct drm_sched_pending_job_iter { struct drm_gpu_scheduler *sched; };h]hKstruct drm_sched_pending_job_iter { struct drm_gpu_scheduler *sched; };}hjKsbah}(h]h ]h"]h$]h&]jjuh1j hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj*ubh)}(h **Members**h]j7 )}(hj\h]hMembers}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjZubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj*ubjM )}(hhh]jR )}(h<``sched`` DRM scheduler associated with pending job iteratorh](jX )}(h ``sched``h]j^ )}(hj{h]hsched}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjyubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjuubjt )}(hhh]h)}(h2DRM scheduler associated with pending job iteratorh]h2DRM scheduler associated with pending job iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubah}(h]h ]h"]h$]h&]uh1js hjuubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjrubah}(h]h ]h"]h$]h&]uh1jL hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_sched_for_each_pending_job (C macro) c.drm_sched_for_each_pending_jobhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_sched_for_each_pending_jobh]j)}(hdrm_sched_for_each_pending_jobh]j)}(hdrm_sched_for_each_pending_jobh]j)}(hjh]hdrm_sched_for_each_pending_job}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! macroeh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubh)}(h=``drm_sched_for_each_pending_job (__job, __sched, __entity)``h]j^ )}(hj h]h9drm_sched_for_each_pending_job (__job, __sched, __entity)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjhhubj )}(h+Iterator for each pending job in scheduler h]h)}(h*Iterator for each pending job in schedulerh]h*Iterator for each pending job in scheduler}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj!ubah}(h]h ]h"]h$]h&]uh1jhj3hMhjhhubj- )}(hXJ**Parameters** ``__job`` Current pending job being iterated over ``__sched`` DRM scheduler to iterate over pending jobs ``__entity`` DRM scheduler entity to filter jobs, NULL indicates no filter **Description** Iterator for each pending job in scheduler, filtering on an entity, and enforcing scheduler is fully stoppedh](h)}(h**Parameters**h]j7 )}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj>ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj:ubjM )}(hhh](jR )}(h2``__job`` Current pending job being iterated over h](jX )}(h ``__job``h]j^ )}(hj_h]h__job}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj]ubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjYubjt )}(hhh]h)}(h'Current pending job being iterated overh]h'Current pending job being iterated over}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1js hjYubeh}(h]h ]h"]h$]h&]uh1jQ hjthMhjVubjR )}(h7``__sched`` DRM scheduler to iterate over pending jobs h](jX )}(h ``__sched``h]j^ )}(hjh]h__sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjt )}(hhh]h)}(h*DRM scheduler to iterate over pending jobsh]h*DRM scheduler to iterate over pending jobs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjVubjR )}(hK``__entity`` DRM scheduler entity to filter jobs, NULL indicates no filter h](jX )}(h ``__entity``h]j^ )}(hjh]h__entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhjubjt )}(hhh]h)}(h=DRM scheduler entity to filter jobs, NULL indicates no filterh]h=DRM scheduler entity to filter jobs, NULL indicates no filter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjVubeh}(h]h ]h"]h$]h&]uh1jL hj:ubh)}(h**Description**h]j7 )}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj:ubh)}(hlIterator for each pending job in scheduler, filtering on an entity, and enforcing scheduler is fully stoppedh]hlIterator for each pending job in scheduler, filtering on an entity, and enforcing scheduler is fully stopped}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:593: ./include/drm/gpu_scheduler.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_sched_tdr_queue_imm (C function)c.drm_sched_tdr_queue_immhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhj_hKubj)}(hdrm_sched_tdr_queue_immh]j)}(hdrm_sched_tdr_queue_immh]hdrm_sched_tdr_queue_imm}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMhhhj_hKubj>)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jtsbc.drm_sched_tdr_queue_immasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjMhhhj_hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhj_hKubah}(h]jDah ](jjeh"]h$]h&]j j )j huh1jhj_hKhjFhhubj )}(hhh]j)}(hhh]j)}(h%immediately start job timeout handlerh]h)}(hjh]h%immediately start job timeout handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhj%hNubah}(h]h ]h"]h$]h&]jjuh1j hj%hKhjhhubah}(h]h ]h"]h$]h&]uh1j hjFhhhj_hKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j;j( j;j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjCubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj?ubjM )}(hhh]jR )}(h```struct drm_gpu_scheduler *sched`` scheduler for which the timeout handling should be started. h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjdh]hstruct drm_gpu_scheduler *sched}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjbubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj^ubjt )}(hhh]h)}(h;scheduler for which the timeout handling should be started.h]h;scheduler for which the timeout handling should be started.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKhjzubah}(h]h ]h"]h$]h&]uh1js hj^ubeh}(h]h ]h"]h$]h&]uh1jQ hjyhKhj[ubah}(h]h ]h"]h$]h&]uh1jL hj?ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj?ubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_fault (C function)c.drm_sched_faulthNtauh1jhjhhhNhNubj)}(hhh](j)}(h6void drm_sched_fault (struct drm_gpu_scheduler *sched)h]j)}(h5void drm_sched_fault(struct drm_gpu_scheduler *sched)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_sched_faulth]j)}(hdrm_sched_faulth]hdrm_sched_fault}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj>)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjAmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_faultasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hschedh]hsched}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhjubjM )}(hhh]jR )}(h\``struct drm_gpu_scheduler *sched`` scheduler where the timeout handling should be started. h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhjubjt )}(hhh]h)}(h7scheduler where the timeout handling should be started.h]h7scheduler where the timeout handling should be started.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhjubh)}(hLStart timeout handling immediately when the driver detects a hardware fault.h]hLStart timeout handling immediately when the driver detects a hardware fault.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_sched_suspend_timeout (C function)c.drm_sched_suspend_timeouthNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hunsignedh]hunsigned}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjshKubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjshKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjshKubj)}(hdrm_sched_suspend_timeouth]j)}(hdrm_sched_suspend_timeouth]hdrm_sched_suspend_timeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjshKubj>)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_suspend_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjahhhjshKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj]hhhjshKubah}(h]jXah ](jjeh"]h$]h&]j j )j huh1jhjshKhjZhhubj )}(hhh]h)}(hSuspend scheduler job timeouth]hSuspend scheduler job timeout}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj>hhubah}(h]h ]h"]h$]h&]uh1j hjZhhhjshKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jYj( jYj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjaubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj]ubjM )}(hhh]jR )}(hX``struct drm_gpu_scheduler *sched`` scheduler instance for which to suspend the timeout h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj|ubjt )}(hhh]h)}(h3scheduler instance for which to suspend the timeouth]h3scheduler instance for which to suspend the timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hj|ubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjyubah}(h]h ]h"]h$]h&]uh1jL hj]ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj]ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj]ubh)}(hReturns the timeout remainingh]hReturns the timeout remaining}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chKhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_sched_resume_timeout (C function)c.drm_sched_resume_timeouthNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM ubj)}(hdrm_sched_resume_timeouth]j)}(hdrm_sched_resume_timeouth]hdrm_sched_resume_timeout}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhM ubj>)}(h:(struct drm_gpu_scheduler *sched, unsigned long remaining)h](jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjnmodnameN classnameNjj)}j]j)}j}j4sbc.drm_sched_resume_timeoutasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjFubjD)}(hunsigned long remainingh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h remainingh]h remaining}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjFubeh}(h]h ]h"]h$]h&]jjuh1j=hj hhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhjhM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM hjhhubj )}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chM hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j:j( j:j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjBubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj>ubjM )}(hhh](jR )}(hW``struct drm_gpu_scheduler *sched`` scheduler instance for which to resume the timeout h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjch]hstruct drm_gpu_scheduler *sched}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjaubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM hj]ubjt )}(hhh]h)}(h2scheduler instance for which to resume the timeouth]h2scheduler instance for which to resume the timeout}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhM hjyubah}(h]h ]h"]h$]h&]uh1js hj]ubeh}(h]h ]h"]h$]h&]uh1jQ hjxhM hjZubjR )}(h.``unsigned long remaining`` remaining timeout h](jX )}(h``unsigned long remaining``h]j^ )}(hjh]hunsigned long remaining}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM hjubjt )}(hhh]h)}(hremaining timeouth]hremaining timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjZubeh}(h]h ]h"]h$]h&]uh1jL hj>ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj>ubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_stop (C function)c.drm_sched_stophNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMpubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj*hMpubj)}(hdrm_sched_stoph]j)}(hdrm_sched_stoph]hdrm_sched_stop}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj*hMpubj>)}(h<(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)h](jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjymodnameN classnameNjj)}j]j)}j}j?sbc.drm_sched_stopasbuh1hhjUubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjQubjD)}(hstruct drm_sched_job *badh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_sched_stopasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbadh]hbad}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjQubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj*hMpubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj*hMpubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj*hMphjhhubj )}(hhh]h)}(hstop the schedulerh]hstop the scheduler}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMphjIhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj*hMpubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jdj( jdj) j* j+ uh1jhhhjhNhNubj- )}(hXb**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. **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. 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(). As it's only used for reset recovery, drivers must not call this function in their :c:type:`struct drm_sched_backend_ops `.timedout_job callback when they skip a reset using :c:type:`enum drm_gpu_sched_stat `.DRM_GPU_SCHED_STAT_NO_HANG.h](h)}(h**Parameters**h]j7 )}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjlubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMthjhubjM )}(hhh](jR )}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMrhjubjt )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMrhjubjR )}(h<``struct drm_sched_job *bad`` job which caused the time out h](jX )}(h``struct drm_sched_job *bad``h]j^ )}(hjh]hstruct drm_sched_job *bad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMshjubjt )}(hhh]h)}(hjob which caused the time outh]hjob which caused the time out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMshjubeh}(h]h ]h"]h$]h&]uh1jL hjhubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMuhjhubh)}(hAStop the scheduler and also removes and frees all completed jobs.h]hAStop the scheduler and also removes and frees all completed jobs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMthjhubh)}(h**Note**h]j7 )}(hj(h]hNote}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj&ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMvhjhubh)}(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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMvhjhubh)}(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 teardown, i.e., before calling drm_sched_fini().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 teardown, i.e., before calling drm_sched_fini().}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMzhjhubh)}(hXAs it's only used for reset recovery, drivers must not call this function in their :c:type:`struct drm_sched_backend_ops `.timedout_job callback when they skip a reset using :c:type:`enum drm_gpu_sched_stat `.DRM_GPU_SCHED_STAT_NO_HANG.h](hUAs it’s only used for reset recovery, drivers must not call this function in their }(hj\hhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j^ )}(hjfh]hstruct drm_sched_backend_ops}(hjhhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjdubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM~hj\ubh4.timedout_job callback when they skip a reset using }(hj\hhhNhNubh)}(h6:c:type:`enum drm_gpu_sched_stat `h]j^ )}(hjh]henum drm_gpu_sched_stat}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpu_sched_statuh1hhjhM~hj\ubh.DRM_GPU_SCHED_STAT_NO_HANG.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM~hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_start (C function)c.drm_sched_starthNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_sched_starth]j)}(hdrm_sched_starth]hdrm_sched_start}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h,(struct drm_gpu_scheduler *sched, int errno)h](jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj.modnameN classnameNjj)}j]j)}j}jsbc.drm_sched_startasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hschedh]hsched}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h int errnoh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(herrnoh]herrno}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hrecover jobs after a reseth]hrecover jobs after a reset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hX**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. As it's only used for reset recovery, drivers must not call this function in their :c:type:`struct drm_sched_backend_ops `.timedout_job callback when they skip a reset using :c:type:`enum drm_gpu_sched_stat `.DRM_GPU_SCHED_STAT_NO_HANG.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjM )}(hhh](jR )}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(h1``int errno`` error to set on the pending fences h](jX )}(h ``int errno``h]j^ )}(hj@h]h int errno}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj>ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj:ubjt )}(hhh]h)}(h"error to set on the pending fencesh]h"error to set on the pending fences}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1js hj:ubeh}(h]h ]h"]h$]h&]uh1jQ hjUhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjyubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(hXAs it's only used for reset recovery, drivers must not call this function in their :c:type:`struct drm_sched_backend_ops `.timedout_job callback when they skip a reset using :c:type:`enum drm_gpu_sched_stat `.DRM_GPU_SCHED_STAT_NO_HANG.h](hUAs it’s only used for reset recovery, drivers must not call this function in their }(hjhhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j^ )}(hjh]hstruct drm_sched_backend_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh4.timedout_job callback when they skip a reset using }(hjhhhNhNubh)}(h6:c:type:`enum drm_gpu_sched_stat `h]j^ )}(hjh]henum drm_gpu_sched_stat}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_gpu_sched_statuh1hhjhMhjubh.DRM_GPU_SCHED_STAT_NO_HANG.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_sched_resubmit_jobs (C function)c.drm_sched_resubmit_jobshNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hMubj)}(hdrm_sched_resubmit_jobsh]j)}(hdrm_sched_resubmit_jobsh]hdrm_sched_resubmit_jobs}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj#hMubj>)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjrmodnameN classnameNjj)}j]j)}j}j8sbc.drm_sched_resubmit_jobsasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjJubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj#hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj#hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj#hMhj hhubj )}(hhh]h)}(h"Deprecated, don't use in new code!h]h$Deprecated, don’t use in new code!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hj hhhj#hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hX**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. The suggested driver-side replacement is to use drm_sched_for_each_pending_job() after stopping the scheduler and implement their own recovery operations.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjM )}(hhh]jR )}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj+hMhj ubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjOubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(hX9Drivers 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. The suggested driver-side replacement is to use drm_sched_for_each_pending_job() after stopping the scheduler and implement their own recovery operations.h]hX;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. The suggested driver-side replacement is to use drm_sched_for_each_pending_job() after stopping the scheduler and implement their own recovery operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_job_init (C function)c.drm_sched_job_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(hint drm_sched_job_init (struct drm_sched_job *job, struct drm_sched_entity *entity, u32 credits, void *owner, uint64_t drm_client_id)h]j)}(hint drm_sched_job_init(struct drm_sched_job *job, struct drm_sched_entity *entity, u32 credits, void *owner, uint64_t drm_client_id)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM0ubj)}(hdrm_sched_job_inith]j)}(hdrm_sched_job_inith]hdrm_sched_job_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM0ubj>)}(hn(struct drm_sched_job *job, struct drm_sched_entity *entity, u32 credits, void *owner, uint64_t drm_client_id)h](jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_job_initasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjobh]hjob}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j+c.drm_sched_job_initasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u32 creditsh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j+c.drm_sched_job_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcreditsh]hcredits}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h void *ownerh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hownerh]howner}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(huint64_t drm_client_idh](h)}(hhh]j)}(huint64_th]huint64_t}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjbmodnameN classnameNjj)}j]j+c.drm_sched_job_initasbuh1hhjYubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h drm_client_idh]h drm_client_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM0ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM0ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM0hjhhubj )}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chM0hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM0ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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 ``uint64_t drm_client_id`` :c:type:`struct drm_file `.client_id of the owner (used by trace events) **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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM4hjubjM )}(hhh](jR )}(h4``struct drm_sched_job *job`` scheduler job to init h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM1hjubjt )}(hhh]h)}(hscheduler job to inith]hscheduler job to init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM1hj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hM1hjubjR )}(h<``struct drm_sched_entity *entity`` scheduler entity to use h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hj0h]hstruct drm_sched_entity *entity}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj.ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM2hj*ubjt )}(hhh]h)}(hscheduler entity to useh]hscheduler entity to use}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM2hjFubah}(h]h ]h"]h$]h&]uh1js hj*ubeh}(h]h ]h"]h$]h&]uh1jQ hjEhM2hjubjR )}(hZ``u32 credits`` the number of credits this job contributes to the schedulers credit limit h](jX )}(h``u32 credits``h]j^ )}(hjih]h u32 credits}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjgubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM4hjcubjt )}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chM3hjubah}(h]h ]h"]h$]h&]uh1js hjcubeh}(h]h ]h"]h$]h&]uh1jQ hj~hM4hjubjR )}(h(``void *owner`` job owner for debugging h](jX )}(h``void *owner``h]j^ )}(hjh]h void *owner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM5hjubjt )}(hhh]h)}(hjob owner for debuggingh]hjob owner for debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM5hjubjR )}(hn``uint64_t drm_client_id`` :c:type:`struct drm_file `.client_id of the owner (used by trace events) h](jX )}(h``uint64_t drm_client_id``h]j^ )}(hjh]huint64_t drm_client_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM7hjubjt )}(hhh]h)}(hR:c:type:`struct drm_file `.client_id of the owner (used by trace events)h](h)}(h$:c:type:`struct drm_file `h]j^ )}(hjh]hstruct drm_file}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_fileuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM6hjubh..client_id of the owner (used by trace events)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM7hjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj5ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM9hjubh)}(hNRefer to drm_sched_entity_push_job() documentation for locking considerations.h]hNRefer to drm_sched_entity_push_job() documentation for locking considerations.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM8hjubh)}(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\hhhNhNubj7 )}(h**job**h]hjob}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj\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:596: ./drivers/gpu/drm/scheduler/sched_main.chM;hjubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chM>hjubh)}(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 }(hjhhhNhNubh)}(h%:c:type:`drm_sched.ready `h]j^ )}(hjh]hdrm_sched.ready}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_scheduh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMBhjubh] to signal when the hardware has died, which can mean that there’s no valid runqueue for a }(hjhhhNhNubj7 )}(h **entity**h]hentity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubhn. This function returns -ENOENT in this case (which probably should be -EIO as a more meanigful return value).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMBhjubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_job_arm (C function)c.drm_sched_job_armhNtauh1jhjhhhNhNubj)}(hhh](j)}(h2void drm_sched_job_arm (struct drm_sched_job *job)h]j)}(h1void drm_sched_job_arm(struct drm_sched_job *job)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMtubj)}(hdrm_sched_job_armh]j)}(hdrm_sched_job_armh]hdrm_sched_job_arm}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMtubj>)}(h(struct drm_sched_job *job)h]jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj\modnameN classnameNjj)}j]j)}j}j"sbc.drm_sched_job_armasbuh1hhj8ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj4ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj hMtubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMtubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj hMthjhhubj )}(hhh]h)}(h!arm a scheduler job for executionh]h!arm a scheduler job for execution}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMthjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhj hMtubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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. It also initializes sequence numbers, which are fundamental for fence ordering. Refer to drm_sched_entity_push_job() documentation for locking considerations. Once this function was called, you *must* submit **job** with drm_sched_entity_push_job(). This can only be called if drm_sched_job_init() succeeded.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMxhjubjM )}(hhh]jR )}(h3``struct drm_sched_job *job`` scheduler job to arm h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMuhjubjt )}(hhh]h)}(hscheduler job to armh]hscheduler job to arm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMuhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMuhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj9ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMwhjubh)}(hXAThis 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. It also initializes sequence numbers, which are fundamental for fence ordering.h](hIThis arms a scheduler job for execution. Specifically it initializes the }(hjQhhhNhNubh)}(h/:c:type:`drm_sched_job.s_fence `h]j^ )}(hj[h]hdrm_sched_job.s_fence}(hj]hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjYubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_jobuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMvhjQubh of }(hjQhhhNhNubj7 )}(h**job**h]hjob}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjQubh, so that it can be attached to struct dma_resv or other places that need to track the completion of this job. It also initializes sequence numbers, which are fundamental for fence ordering.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMvhjubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chM{hjubh)}(hZOnce this function was called, you *must* submit **job** with drm_sched_entity_push_job().h](h#Once this function was called, you }(hjhhhNhNubj)}(h*must*h]hmust}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh submit }(hjhhhNhNubj7 )}(h**job**h]hjob}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh" with drm_sched_entity_push_job().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM~hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_sched_job_add_dependency (C function)c.drm_sched_job_add_dependencyhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_sched_job_add_dependencyh]j)}(hdrm_sched_job_add_dependencyh]hdrm_sched_job_add_dependency}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h4(struct drm_sched_job *job, struct dma_fence *fence)h](jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjcmodnameN classnameNjj)}j]j)}j}j)sbc.drm_sched_job_add_dependencyasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubjD)}(hstruct dma_fence *fenceh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j}c.drm_sched_job_add_dependencyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfenceh]hfence}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj;ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h"adds the fence as a job dependencyh]h"adds the fence as a job dependency}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj3hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jNj( jNj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjVubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjRubjM )}(hhh](jR )}(hG``struct drm_sched_job *job`` scheduler job to add the dependencies to h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hjwh]hstruct drm_sched_job *job}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjuubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjqubjt )}(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&]uh1js hjqubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjnubjR )}(hN``struct dma_fence *fence`` the dma_fence to add to the list of dependencies. h](jX )}(h``struct dma_fence *fence``h]j^ )}(hjh]hstruct dma_fence *fence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(h1the dma_fence to add to the list of dependencies.h]h1the dma_fence to add to the list of dependencies.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjnubeh}(h]h ]h"]h$]h&]uh1jL hjRubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjRubh)}(hDNote that **fence** is consumed in both the success and error cases.h](h Note that }(hjhhhNhNubj7 )}(h **fence**h]hfence}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh1 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:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjRubh)}(h **Return**h]j7 )}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj"ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjRubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_sched_job_add_syncobj_dependency (C function)&c.drm_sched_job_add_syncobj_dependencyhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjwhMubj)}(h$drm_sched_job_add_syncobj_dependencyh]j)}(h$drm_sched_job_add_syncobj_dependencyh]h$drm_sched_job_add_syncobj_dependency}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjwhMubj>)}(hI(struct drm_sched_job *job, struct drm_file *file, u32 handle, u32 point)h](jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsb&c.drm_sched_job_add_syncobj_dependencyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct drm_file *fileh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj8modnameN classnameNjj)}j]j&c.drm_sched_job_add_syncobj_dependencyasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfileh]hfile}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u32 handleh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j&c.drm_sched_job_add_syncobj_dependencyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(h u32 pointh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j&c.drm_sched_job_add_syncobj_dependencyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpointh]hpoint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjehhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjwhMubah}(h]j\ah ](jjeh"]h$]h&]j j )j huh1jhjwhMhj^hhubj )}(hhh]h)}(h*adds a syncobj's fence as a job dependencyh]h,adds a syncobj’s fence as a job dependency}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj&hhubah}(h]h ]h"]h$]h&]uh1j hj^hhhjwhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jAj( jAj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjIubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjEubjM )}(hhh](jR )}(hG``struct drm_sched_job *job`` scheduler job to add the dependencies to h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hjjh]hstruct drm_sched_job *job}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjhubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjdubjt )}(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&]uh1js hjdubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjaubjR )}(h3``struct drm_file *file`` drm file private pointer h](jX )}(h``struct drm_file *file``h]j^ )}(hjh]hstruct drm_file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(hdrm file private pointerh]hdrm file private pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjaubjR )}(h(``u32 handle`` syncobj handle to lookup h](jX )}(h``u32 handle``h]j^ )}(hjh]h u32 handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(hsyncobj handle to lookuph]hsyncobj handle to lookup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjaubjR )}(h``u32 point`` timeline point h](jX )}(h ``u32 point``h]j^ )}(hjh]h u32 point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(htimeline pointh]htimeline point}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj*hMhjaubeh}(h]h ]h"]h$]h&]uh1jL hjEubh)}(h**Description**h]j7 )}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjEubh)}(h:This adds the fence matching the given syncobj to **job**.h](h2This adds the fence matching the given syncobj to }(hjfhhhNhNubj7 )}(h**job**h]hjob}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjEubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjEubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_sched_job_add_resv_dependencies (C function)%c.drm_sched_job_add_resv_dependencieshNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h#drm_sched_job_add_resv_dependenciesh]j)}(h#drm_sched_job_add_resv_dependenciesh]h#drm_sched_job_add_resv_dependencies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(hM(struct drm_sched_job *job, struct dma_resv *resv, enum dma_resv_usage usage)h](jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj+modnameN classnameNjj)}j]j)}j}jsb%c.drm_sched_job_add_resv_dependenciesasbuh1hhjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjobh]hjob}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct dma_resv *resvh](j)}(hj? h]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]j)}(hdma_resvh]hdma_resv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jE%c.drm_sched_job_add_resv_dependenciesasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hresvh]hresv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(henum dma_resv_usage usageh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_resv_usageh]hdma_resv_usage}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]jE%c.drm_sched_job_add_resv_dependenciesasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(husageh]husage}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h'add all fences from the resv to the jobh]h'add all fences from the resv to the job}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj^hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jyj( jyj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj}ubjM )}(hhh](jR )}(hG``struct drm_sched_job *job`` scheduler job to add the dependencies to h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hE``struct dma_resv *resv`` the dma_resv object to get the fences from h](jX )}(h``struct dma_resv *resv``h]j^ )}(hjh]hstruct dma_resv *resv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(h*the dma_resv object to get the fences fromh]h*the dma_resv object to get the fences from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hM``enum dma_resv_usage usage`` the dma_resv_usage to use to filter the fences h](jX )}(h``enum dma_resv_usage usage``h]j^ )}(hjh]henum dma_resv_usage usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(h.the dma_resv_usage to use to filter the fencesh]h.the dma_resv_usage to use to filter the fences}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj)hMhjubeh}(h]h ]h"]h$]h&]uh1jL hj}ubh)}(h**Description**h]j7 )}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjMubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj}ubh)}(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 }(hjehhhNhNubj7 )}(h**resv**h]hresv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjeubh to }(hjehhhNhNubj7 )}(h**job**h]hjob}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjeubh. Must be called with the }(hjehhhNhNubj7 )}(h**resv**h]hresv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjeubh lock held.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj}ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./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:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_sched_job_add_implicit_dependencies (C function))c.drm_sched_job_add_implicit_dependencieshNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h'drm_sched_job_add_implicit_dependenciesh]j)}(h'drm_sched_job_add_implicit_dependenciesh]h'drm_sched_job_add_implicit_dependencies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(hC(struct drm_sched_job *job, struct drm_gem_object *obj, bool write)h](jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjNmodnameN classnameNjj)}j]j)}j}jsb)c.drm_sched_job_add_implicit_dependenciesasbuh1hhj*ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj&ubjD)}(hstruct drm_gem_object *objh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jh)c.drm_sched_job_add_implicit_dependenciesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj&ubjD)}(h bool writeh](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hwriteh]hwrite}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj&ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h.adds implicit dependencies as job dependenciesh]h.adds implicit dependencies as job dependencies}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjRhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jmj( jmj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjuubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjqubjM )}(hhh](jR )}(hG``struct drm_sched_job *job`` scheduler job to add the dependencies to h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(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&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hL``struct drm_gem_object *obj`` the gem object to add new dependencies from. h](jX )}(h``struct drm_gem_object *obj``h]j^ )}(hjh]hstruct drm_gem_object *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(h,the gem object to add new dependencies from.h]h,the gem object to add new dependencies from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubjR )}(hy``bool write`` whether the job might write the object (so we need to depend on shared fences in the reservation object). h](jX )}(h``bool write``h]j^ )}(hjh]h bool write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM hjubjt )}(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).}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM hjubeh}(h]h ]h"]h$]h&]uh1jL hjqubh)}(h**Description**h]j7 )}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjBubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM hjqubh)}(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.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM hjqubh)}(h **Return**h]j7 )}(hjkh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjiubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjqubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_sched_job_has_dependency (C function)c.drm_sched_job_has_dependencyhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_sched_job_has_dependencyh]j)}(hdrm_sched_job_has_dependencyh]hdrm_sched_job_has_dependency}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h4(struct drm_sched_job *job, struct dma_fence *fence)h](jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j)}j}jsbc.drm_sched_job_has_dependencyasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjobh]hjob}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubjD)}(hstruct dma_fence *fenceh](j)}(hj? h]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(h dma_fenceh]h dma_fence}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj~modnameN classnameNjj)}j]j&c.drm_sched_job_has_dependencyasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hfenceh]hfence}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h+check whether fence is the job's dependencyh]h-check whether fence is the job’s dependency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM hjubjM )}(hhh](jR )}(h5``struct drm_sched_job *job`` scheduler job to check h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hj h]hstruct drm_sched_job *job}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(hscheduler job to checkh]hscheduler job to check}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj5hMhjubjR )}(h.``struct dma_fence *fence`` fence to look for h](jX )}(h``struct dma_fence *fence``h]j^ )}(hjYh]hstruct dma_fence *fence}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjWubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjSubjt )}(hhh]h)}(hfence to look forh]hfence to look for}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1js hjSubeh}(h]h ]h"]h$]h&]uh1jQ hjnhMhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM hjubh)}(hMTrue if **fence** is found within the job's dependencies, or otherwise false.h](hTrue if }(hjhhhNhNubj7 )}(h **fence**h]hfence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh> is found within the job’s dependencies, or otherwise false.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_sched_job_cleanup (C function)c.drm_sched_job_cleanuphNtauh1jhjhhhNhNubj)}(hhh](j)}(h6void drm_sched_job_cleanup (struct drm_sched_job *job)h]j)}(h5void drm_sched_job_cleanup(struct drm_sched_job *job)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM3ubj)}(hdrm_sched_job_cleanuph]j)}(hdrm_sched_job_cleanuph]hdrm_sched_job_cleanup}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM3ubj>)}(h(struct drm_sched_job *job)h]jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjHmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_job_cleanupasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM3ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM3ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM3hjhhubj )}(hhh]h)}(h clean up scheduler job resourcesh]h clean up scheduler job resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM3hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM3ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(hX**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 drm_sched_job_arm() is called. drm_sched_job_arm() is a point of no return since it initializes the fences and their sequence number etc. Once that function has been called, you *must* submit it with drm_sched_entity_push_job() and cannot simply abort it by calling drm_sched_job_cleanup(). This function should be called in the :c:type:`drm_sched_backend_ops.free_job ` callback.h](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM7hjubjM )}(hhh]jR )}(h8``struct drm_sched_job *job`` scheduler job to clean up h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hjh]hstruct drm_sched_job *job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM4hjubjt )}(hhh]h)}(hscheduler job to clean uph]hscheduler job to clean up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM4hjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj%ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM6hjubh)}(h` callback.h](h&This function should be called in the }(hjhhhNhNubh)}(h@:c:type:`drm_sched_backend_ops.free_job `h]j^ )}(hjh]hdrm_sched_backend_ops.free_job}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM?hjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM?hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_sched_pick_best (C function)c.drm_sched_pick_besthNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}drm_sched_pick_bestsbc.drm_sched_pick_bestasbuh1hhjhhhjhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_sched_pick_besth]j)}(hjh]hdrm_sched_pick_best}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(hD(struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list)h](jD)}(h%struct drm_gpu_scheduler **sched_listh](j)}(hj? h]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjzmodnameN classnameNjj)}j]jc.drm_sched_pick_bestasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h sched_listh]h sched_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjRubjD)}(hunsigned int num_sched_listh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnum_sched_listh]hnum_sched_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjRubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(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}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj6hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jQj( jQj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjYubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjUubjM )}(hhh](jR )}(hE``struct drm_gpu_scheduler **sched_list`` list of drm_gpu_schedulers h](jX )}(h)``struct drm_gpu_scheduler **sched_list``h]j^ )}(hjzh]h%struct drm_gpu_scheduler **sched_list}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjxubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjtubjt )}(hhh]h)}(hlist of drm_gpu_schedulersh]hlist of drm_gpu_schedulers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjtubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjqubjR )}(hO``unsigned int num_sched_list`` number of drm_gpu_schedulers in the sched_list h](jX )}(h``unsigned int num_sched_list``h]j^ )}(hjh]hunsigned int num_sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(h.number of drm_gpu_schedulers in the sched_listh]h.number of drm_gpu_schedulers in the sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjqubeh}(h]h ]h"]h$]h&]uh1jL hjUubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjUubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_init (C function)c.drm_sched_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM*ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhM*ubj)}(hdrm_sched_inith]j)}(hdrm_sched_inith]hdrm_sched_init}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhjAhM*ubj>)}(hI(struct drm_gpu_scheduler *sched, const struct drm_sched_init_args *args)h](jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jVsbc.drm_sched_initasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubjD)}(h&const struct drm_sched_init_args *argsh](j)}(hjJh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_sched_init_argsh]hdrm_sched_init_args}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_sched_initasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hargsh]hargs}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjhubeh}(h]h ]h"]h$]h&]jjuh1j=hj/hhhjAhM*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhjAhM*ubah}(h]j&ah ](jjeh"]h$]h&]j j )j huh1jhjAhM*hj(hhubj )}(hhh]h)}(hInit a gpu scheduler instanceh]hInit a gpu scheduler instance}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM*hj{hhubah}(h]h ]h"]h$]h&]uh1j hj(hhhjAhM*ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM.hjubjM )}(hhh](jR )}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM,hjubjt )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhM,hjubjR )}(hN``const struct drm_sched_init_args *args`` scheduler initialization arguments h](jX )}(h*``const struct drm_sched_init_args *args``h]j^ )}(hjh]h&const struct drm_sched_init_args *args}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM-hjubjt )}(hhh]h)}(h"scheduler initialization argumentsh]h"scheduler initialization arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM-hjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hM-hjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj1ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM/hjubh)}(h*Return 0 on success, otherwise error code.h]h*Return 0 on success, otherwise error code.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chM.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_sched_fini (C function)c.drm_sched_finihNtauh1jhjhhhNhNubj)}(hhh](j)}(h5void drm_sched_fini (struct drm_gpu_scheduler *sched)h]j)}(h4void drm_sched_fini(struct drm_gpu_scheduler *sched)h](j)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhMgubj)}(hdrm_sched_finih]j)}(hdrm_sched_finih]hdrm_sched_fini}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhhjhMgubj>)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_finiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjthhhjhMgubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjphhhjhMgubah}(h]jkah ](jjeh"]h$]h&]j j )j huh1jhjhMghjmhhubj )}(hhh]h)}(hDestroy a gpu schedulerh]hDestroy a gpu scheduler}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMghj5hhubah}(h]h ]h"]h$]h&]uh1j hjmhhhjhMgubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jPj( jPj) j* j+ uh1jhhhjhNhNubj- )}(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 :c:type:`struct drm_sched_backend_ops `.run_job. If :c:type:`struct drm_sched_backend_ops `.cancel_job is implemented, all jobs will be canceled through it and afterwards cleaned up through :c:type:`struct drm_sched_backend_ops `.free_job. If cancel_job is not implemented, memory could leak.h](h)}(h**Parameters**h]j7 )}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjXubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMkhjTubjM )}(hhh]jR )}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjyh]hstruct drm_gpu_scheduler *sched}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjwubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMihjsubjt )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1js hjsubeh}(h]h ]h"]h$]h&]uh1jQ hjhMihjpubah}(h]h ]h"]h$]h&]uh1jL hjTubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMkhjTubh)}(h'Tears down and cleans up the scheduler.h]h'Tears down and cleans up the scheduler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMjhjTubh)}(hXThis stops submission of new jobs to the hardware through :c:type:`struct drm_sched_backend_ops `.run_job. If :c:type:`struct drm_sched_backend_ops `.cancel_job is implemented, all jobs will be canceled through it and afterwards cleaned up through :c:type:`struct drm_sched_backend_ops `.free_job. If cancel_job is not implemented, memory could leak.h](h:This stops submission of new jobs to the hardware through }(hjhhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j^ )}(hjh]hstruct drm_sched_backend_ops}(hjhhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMlhjubh .run_job. If }(hjhhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j^ )}(hjh]hstruct drm_sched_backend_ops}(hj hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhjhMlhjubhc.cancel_job is implemented, all jobs will be canceled through it and afterwards cleaned up through }(hjhhhNhNubh)}(h>:c:type:`struct drm_sched_backend_ops `h]j^ )}(hj*h]hstruct drm_sched_backend_ops}(hj,hhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hj(ubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j drm_sched_backend_opsuh1hhjhMlhjubh?.free_job. If cancel_job is not implemented, memory could leak.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMlhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_sched_increase_karma (C function)c.drm_sched_increase_karmahNtauh1jhjhhhNhNubj)}(hhh](j)}(h9void drm_sched_increase_karma (struct drm_sched_job *bad)h]j)}(h8void drm_sched_increase_karma(struct drm_sched_job *bad)h](j)}(hvoidh]hvoid}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjhMubj)}(hdrm_sched_increase_karmah]j)}(hdrm_sched_increase_karmah]hdrm_sched_increase_karma}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjhMubj>)}(h(struct drm_sched_job *bad)h]jD)}(hstruct drm_sched_job *badh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_increase_karmaasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbadh]hbad}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjmhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjhMubah}(h]jdah ](jjeh"]h$]h&]j j )j huh1jhjhMhjfhhubj )}(hhh]h)}(hUpdate sched_entity guilty flagh]hUpdate sched_entity guilty flag}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj.hhubah}(h]h ]h"]h$]h&]uh1j hjfhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jIj( jIj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjQubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjMubjM )}(hhh]jR )}(h9``struct drm_sched_job *bad`` The job guilty of time out h](jX )}(h``struct drm_sched_job *bad``h]j^ )}(hjrh]hstruct drm_sched_job *bad}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjlubjt )}(hhh]h)}(hThe job guilty of time outh]hThe job guilty of time out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjlubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjiubah}(h]h ]h"]h$]h&]uh1jL hjMubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjMubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_sched_wqueue_ready (C function)c.drm_sched_wqueue_readyhNtauh1jhjhhhNhNubj)}(hhh](j)}(h=bool drm_sched_wqueue_ready (struct drm_gpu_scheduler *sched)h]j)}(h)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjNmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_wqueue_readyasbuh1hhj*ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hschedh]hsched}(hjhh hNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj&ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(h%Is the scheduler ready for submissionh]h%Is the scheduler ready for submission}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(h~**Parameters** ``struct drm_gpu_scheduler *sched`` scheduler instance **Description** Returns true if submission is readyh](h)}(h**Parameters**h]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjM )}(hhh]jR )}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(h#Returns true if submission is readyh]h#Returns true if submission is ready}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_sched_wqueue_stop (C function)c.drm_sched_wqueue_stophNtauh1jhjhhhNhNubj)}(hhh](j)}(h)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_wqueue_stopasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjnhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjhMubah}(h]jeah ](jjeh"]h$]h&]j j )j huh1jhjhMhjghhubj )}(hhh]h)}(hstop scheduler submissionh]hstop scheduler submission}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj/hhubah}(h]h ]h"]h$]h&]uh1j hjghhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jJj( jJj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjNubjM )}(hhh]jR )}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjsh]hstruct drm_gpu_scheduler *sched}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjmubjt )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjjubah}(h]h ]h"]h$]h&]uh1jL hjNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjNubh)}(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:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_sched_wqueue_start (C function)c.drm_sched_wqueue_starthNtauh1jhjhhhNhNubj)}(hhh](j)}(h=void drm_sched_wqueue_start (struct drm_gpu_scheduler *sched)h]j)}(h)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjPmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_wqueue_startasbuh1hhj,ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj(ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hstart scheduler submissionh]hstart scheduler submission}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjM )}(hhh]jR )}(h7``struct drm_gpu_scheduler *sched`` scheduler instance h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubjt )}(hhh]h)}(hscheduler instanceh]hscheduler instance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj-ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(hDRestarts the scheduler after drm_sched_wqueue_stop() has stopped it.h]hDRestarts the scheduler after drm_sched_wqueue_stop() has stopped it.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubh)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_sched_is_stopped (C function)c.drm_sched_is_stoppedhNtauh1jhjhhhNhNubj)}(hhh](j)}(h;bool drm_sched_is_stopped (struct drm_gpu_scheduler *sched)h]j)}(h:bool drm_sched_is_stopped(struct drm_gpu_scheduler *sched)h](j)}(hj=2h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_sched_is_stoppedh]j)}(hdrm_sched_is_stoppedh]hdrm_sched_is_stopped}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h!(struct drm_gpu_scheduler *sched)h]jD)}(hstruct drm_gpu_scheduler *schedh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_is_stoppedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hschedh]hsched}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhjhMubah}(h]jvah ](jjeh"]h$]h&]j j )j huh1jhjhMhjxhhubj )}(hhh]h)}(h#Checks whether drm_sched is stoppedh]h#Checks whether drm_sched is stopped}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj?hhubah}(h]h ]h"]h$]h&]uh1j hjxhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jZj( jZj) j* j+ uh1jhhhjhNhNubj- )}(hz**Parameters** ``struct drm_gpu_scheduler *sched`` DRM scheduler **Return** true if sched is stopped, false otherwiseh](h)}(h**Parameters**h]j7 )}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjbubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj^ubjM )}(hhh]jR )}(h2``struct drm_gpu_scheduler *sched`` DRM scheduler h](jX )}(h#``struct drm_gpu_scheduler *sched``h]j^ )}(hjh]hstruct drm_gpu_scheduler *sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj}ubjt )}(hhh]h)}(h DRM schedulerh]h DRM scheduler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hj}ubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjzubah}(h]h ]h"]h$]h&]uh1jL hj^ubh)}(h **Return**h]j7 )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj^ubh)}(h)true if sched is stopped, false otherwiseh]h)true if sched is stopped, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_sched_job_is_signaled (C function)c.drm_sched_job_is_signaledhNtauh1jhjhhhNhNubj)}(hhh](j)}(h:bool drm_sched_job_is_signaled (struct drm_sched_job *job)h]j)}(h9bool drm_sched_job_is_signaled(struct drm_sched_job *job)h](j)}(hj=2h]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(hdrm_sched_job_is_signaledh]j)}(hdrm_sched_job_is_signaledh]hdrm_sched_job_is_signaled}(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj>)}(h(struct drm_sched_job *job)h]jD)}(hstruct drm_sched_job *jobh](j)}(hj? h]hstruct}(hj? hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj; ubj)}(h h]h }(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj; ubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj_ modnameN classnameNjj)}j]j)}j}j% sbc.drm_sched_job_is_signaledasbuh1hhj; ubj)}(h h]h }(hj} hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj; ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj; ubj)}(hjobh]hjob}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj; ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj7 ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj hMhjhhubj )}(hhh]h)}(hDRM scheduler job is signaledh]hDRM scheduler job is signaled}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj hhubah}(h]h ]h"]h$]h&]uh1j hjhhhj hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhjhNhNubj- )}(hXl**Parameters** ``struct drm_sched_job *job`` DRM scheduler job **Description** Determine if DRM scheduler job is signaled. DRM scheduler should be stopped to obtain a stable snapshot of state. Both parent fence (hardware fence) and finished fence (software fence) are checked to determine signaling state. **Return** true if job is signaled, false otherwiseh](h)}(h**Parameters**h]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj ubjM )}(hhh]jR )}(h0``struct drm_sched_job *job`` DRM scheduler job h](jX )}(h``struct drm_sched_job *job``h]j^ )}(hj h]hstruct drm_sched_job *job}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj ubjt )}(hhh]h)}(hDRM scheduler jobh]hDRM scheduler job}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hMhj ubah}(h]h ]h"]h$]h&]uh1jL hj ubh)}(h**Description**h]j7 )}(hj> h]h Description}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj< ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj ubh)}(hDetermine if DRM scheduler job is signaled. DRM scheduler should be stopped to obtain a stable snapshot of state. Both parent fence (hardware fence) and finished fence (software fence) are checked to determine signaling state.h]hDetermine if DRM scheduler job is signaled. DRM scheduler should be stopped to obtain a stable snapshot of state. Both parent fence (hardware fence) and finished fence (software fence) are checked to determine signaling state.}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj ubh)}(h **Return**h]j7 )}(hje h]hReturn}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjc ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj ubh)}(h(true if job is signaled, false otherwiseh]h(true if job is signaled, false otherwise}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:596: ./drivers/gpu/drm/scheduler/sched_main.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_sched_entity_init (C function)c.drm_sched_entity_inithNtauh1jhjhhhNhNubj)}(hhh](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]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](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chK^ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hK^ubj)}(hdrm_sched_entity_inith]j)}(hdrm_sched_entity_inith]hdrm_sched_entity_init}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hK^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](jD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j)}j}j sbc.drm_sched_entity_initasbuh1hhj ubj)}(h h]h }(hj% hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj3 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hentityh]hentity}(hj@ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(h enum drm_sched_priority priorityh](j)}(hjh]henum}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU ubj)}(h h]h }(hjf hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU ubh)}(hhh]j)}(hdrm_sched_priorityh]hdrm_sched_priority}(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjy modnameN classnameNjj)}j]j! c.drm_sched_entity_initasbuh1hhjU ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU ubj)}(hpriorityh]hpriority}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(h%struct drm_gpu_scheduler **sched_listh](j)}(hj? h]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j! c.drm_sched_entity_initasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h sched_listh]h sched_list}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hunsigned int num_sched_listh](j)}(hunsignedh]hunsigned}(hj9 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5 ubj)}(h h]h }(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5 ubj)}(hinth]hint}(hjU hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5 ubj)}(h h]h }(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5 ubj)}(hnum_sched_listh]hnum_sched_list}(hjq hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5 ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubjD)}(hatomic_t *guiltyh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj modnameN classnameNjj)}j]j! c.drm_sched_entity_initasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hguiltyh]hguilty}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj ubeh}(h]h ]h"]h$]h&]jjuh1j=hj hhhj hK^ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hK^ubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj hK^hj hhubj )}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chK^hj hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj hK^ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j j( j j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKbhj ubjM )}(hhh](jR )}(h=``struct drm_sched_entity *entity`` scheduler entity to init h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hj1 h]hstruct drm_sched_entity *entity}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj/ ubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKahj+ ubjt )}(hhh]h)}(hscheduler entity to inith]hscheduler entity to init}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF hKahjG ubah}(h]h ]h"]h$]h&]uh1js hj+ ubeh}(h]h ]h"]h$]h&]uh1jQ hjF hKahj( ubjR )}(h<``enum drm_sched_priority priority`` priority of the entity h](jX )}(h$``enum drm_sched_priority priority``h]j^ )}(hjj h]h enum drm_sched_priority priority}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjh ubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKbhjd ubjt )}(hhh]h)}(hpriority of the entityh]hpriority of the entity}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKbhj ubah}(h]h ]h"]h$]h&]uh1js hjd ubeh}(h]h ]h"]h$]h&]uh1jQ hj hKbhj( ubjR )}(hq``struct drm_gpu_scheduler **sched_list`` the list of drm scheds on which jobs from this entity can be submitted h](jX )}(h)``struct drm_gpu_scheduler **sched_list``h]j^ )}(hj h]h%struct drm_gpu_scheduler **sched_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKdhj ubjt )}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKchj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hKdhj( ubjR )}(hB``unsigned int num_sched_list`` number of drm sched in sched_list h](jX )}(h``unsigned int num_sched_list``h]j^ )}(hj h]hunsigned int num_sched_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj ubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKehj ubjt )}(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 hKehj ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj hKehj( ubjR )}(hh``atomic_t *guilty`` atomic_t set to 1 when a job on this queue is found to be guilty causing a timeout h](jX )}(h``atomic_t *guilty``h]j^ )}(hjh]hatomic_t *guilty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKghjubjt )}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chKfhj,ubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hj+hKghj( ubeh}(h]h ]h"]h$]h&]uh1jL hj ubh)}(h**Description**h]j7 )}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjPubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKihj ubh)}(hYNote that the :c:type:`sched_list` must have at least one element to schedule the entity.h](hNote that the }(hjhhhhNhNubh)}(h:c:type:`sched_list`h]j^ )}(hjrh]h sched_list}(hjthhhNhNubah}(h]h ](j j! c-typeeh"]h$]h&]uh1j] hjpubah}(h]h ]h"]h$]h&]refdocj refdomainj! reftypetype refexplicitrefwarnjj j sched_listuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhhjhubh7 must have at least one element to schedule the entity.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhhj 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 }(hjhhhNhNubj7 )}(h **priority**h]hpriority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh] later on at runtime see drm_sched_entity_set_priority(). For changing the set of schedulers }(hjhhhNhNubj7 )}(h**sched_list**h]h sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh0 at runtime see drm_sched_entity_modify_sched().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKjhj 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:599: ./drivers/gpu/drm/scheduler/sched_entity.chKnhj ubh)}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKqhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_sched_entity_modify_sched (C function)c.drm_sched_entity_modify_schedhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_sched_entity_modify_schedh]j)}(hdrm_sched_entity_modify_schedh]hdrm_sched_entity_modify_sched}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj>)}(he(struct drm_sched_entity *entity, struct drm_gpu_scheduler **sched_list, unsigned int num_sched_list)h](jD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjhmodnameN classnameNjj)}j]j)}j}j.sbc.drm_sched_entity_modify_schedasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj@ubjD)}(h%struct drm_gpu_scheduler **sched_listh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_gpu_schedulerh]hdrm_gpu_scheduler}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_sched_entity_modify_schedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h sched_listh]h sched_list}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj@ubjD)}(hunsigned int num_sched_listh](j)}(hunsignedh]hunsigned}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hnum_sched_listh]hnum_sched_list}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj@ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubjM )}(hhh](jR )}(h=``struct drm_sched_entity *entity`` scheduler entity to init h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hjh]hstruct drm_sched_entity *entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubjt )}(hhh]h)}(hscheduler entity to inith]hscheduler entity to init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubjR )}(ht``struct drm_gpu_scheduler **sched_list`` the list of new drm scheds which will replace existing entity->sched_list h](jX )}(h)``struct drm_gpu_scheduler **sched_list``h]j^ )}(hjh]h%struct drm_gpu_scheduler **sched_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhj ubjt )}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhj)ubah}(h]h ]h"]h$]h&]uh1js hj ubeh}(h]h ]h"]h$]h&]uh1jQ hj(hKhjubjR )}(hB``unsigned int num_sched_list`` number of drm sched in sched_list h](jX )}(h``unsigned int num_sched_list``h]j^ )}(hjMh]hunsigned int num_sched_list}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjKubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjGubjt )}(hhh]h)}(h!number of drm sched in sched_listh]h!number of drm sched in sched_list}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjcubah}(h]h ]h"]h$]h&]uh1js hjGubeh}(h]h ]h"]h$]h&]uh1jQ hjbhKhjubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubh)}(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 }(hjhhhNhNubj7 )}(h **entity**h]hentity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh 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 }(hjhhhNhNubj7 )}(h **entity**h]hentity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_sched_entity_error (C function)c.drm_sched_entity_errorhNtauh1jhjhhhNhNubj)}(hhh](j)}(h)}(h!(struct drm_sched_entity *entity)h]jD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjNmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_entity_errorasbuh1hhj*ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj&ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubjM )}(hhh]jR )}(h>``struct drm_sched_entity *entity`` scheduler entity to check h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hjh]hstruct drm_sched_entity *entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubjt )}(hhh]h)}(hscheduler entity to checkh]hscheduler entity to check}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhKhjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj+ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_sched_entity_kill (C function)c.drm_sched_entity_killhNtauh1jhjhhhNhNubj)}(hhh](j)}(h)}(h!(struct drm_sched_entity *entity)h]jD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_entity_killasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjnhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjhMubah}(h]jeah ](jjeh"]h$]h&]j j )j huh1jhjhMhjghhubj )}(hhh]h)}(h+kill an entity's pending jobs and remove ith]h-kill an entity’s pending jobs and remove it}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhj/hhubah}(h]h ]h"]h$]h&]uh1j hjghhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jJj( jJj) j* j+ uh1jhhhjhNhNubj- )}(hX,**Parameters** ``struct drm_sched_entity *entity`` the entity to remove **Description** Removes the entity from the scheduler's run queue and kills all pending jobs. This function should be used over drm_sched_entity_flush() if it is not desired to actually wait for all pending jobs to finish.h](h)}(h**Parameters**h]j7 )}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjNubjM )}(hhh]jR )}(h9``struct drm_sched_entity *entity`` the entity to remove h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hjsh]hstruct drm_sched_entity *entity}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjqubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjmubjt )}(hhh]h)}(hthe entity to removeh]hthe entity to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjmubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjjubah}(h]h ]h"]h$]h&]uh1jL hjNubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjNubh)}(hMRemoves the entity from the scheduler's run queue and kills all pending jobs.h]hORemoves the entity from the scheduler’s run queue and kills all pending jobs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjNubh)}(hThis function should be used over drm_sched_entity_flush() if it is not desired to actually wait for all pending jobs to finish.h]hThis function should be used over drm_sched_entity_flush() if it is not desired to actually wait for all pending jobs to finish.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_sched_entity_flush (C function)c.drm_sched_entity_flushhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chM?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM?ubj)}(hdrm_sched_entity_flushh]j)}(hdrm_sched_entity_flushh]hdrm_sched_entity_flush}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM?ubj>)}(h/(struct drm_sched_entity *entity, long timeout)h](jD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj_modnameN classnameNjj)}j]j)}j}j%sbc.drm_sched_entity_flushasbuh1hhj;ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj7ubjD)}(h long timeouth](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj7ubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhM?ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM?ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM?hjhhubj )}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chM?hjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhM?ubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMChjubjM )}(hhh](jR )}(h5``struct drm_sched_entity *entity`` scheduler entity h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hj8h]hstruct drm_sched_entity *entity}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj6ubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMAhj2ubjt )}(hhh]h)}(hscheduler entityh]hscheduler entity}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMAhjNubah}(h]h ]h"]h$]h&]uh1js hj2ubeh}(h]h ]h"]h$]h&]uh1jQ hjMhMAhj/ubjR )}(hC``long timeout`` time to wait in for Q to become empty in jiffies. h](jX )}(h``long timeout``h]j^ )}(hjqh]h long timeout}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjoubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMBhjkubjt )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1js hjkubeh}(h]h ]h"]h$]h&]uh1jQ hjhMBhj/ubeh}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMDhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMChjubh)}(hAReturns the remaining time in jiffies left from the input timeouth]hAReturns the remaining time in jiffies left from the input timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_sched_entity_fini (C function)c.drm_sched_entity_finihNtauh1jhjhhhNhNubj)}(hhh](j)}(h)}(h!(struct drm_sched_entity *entity)h]jD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetj]modnameN classnameNjj)}j]j)}j}j#sbc.drm_sched_entity_finiasbuh1hhj9ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChj5ubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMnubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMnhjhhubj )}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chMnhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMnubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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**9oh]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMrhjubjM )}(hhh]jR )}(h5``struct drm_sched_entity *entity`` scheduler entity h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hjh]hstruct drm_sched_entity *entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMphjubjt )}(hhh]h)}(hscheduler entityh]hscheduler entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMphjubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Description**h]j7 )}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj:ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMrhjubh)}(hMCleanups up **entity** which has been initialized by drm_sched_entity_init().h](h Cleanups up }(hjRhhhNhNubj7 )}(h **entity**h]hentity}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjRubh7 which has been initialized by drm_sched_entity_init().}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMqhjubh)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMshjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_sched_entity_destroy (C function)c.drm_sched_entity_destroyhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_sched_entity_destroyh]j)}(hdrm_sched_entity_destroyh]hdrm_sched_entity_destroy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj>)}(h!(struct drm_sched_entity *entity)h]jD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jsbc.drm_sched_entity_destroyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hentityh]hentity}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjubah}(h]h ]h"]h$]h&]jjuh1j=hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h)}(hDestroy a context entityh]hDestroy a context entity}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhj_hhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jzj( jzj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhj~ubjM )}(hhh]jR )}(h5``struct drm_sched_entity *entity`` scheduler entity h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hjh]hstruct drm_sched_entity *entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubjt )}(hhh]h)}(hscheduler entityh]hscheduler entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhjubah}(h]h ]h"]h$]h&]uh1jL hj~ubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhj~ubh)}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_sched_entity_set_priority (C function)c.drm_sched_entity_set_priorityhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj1hMubj)}(hdrm_sched_entity_set_priorityh]j)}(hdrm_sched_entity_set_priorityh]hdrm_sched_entity_set_priority}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj1hMubj>)}(hC(struct drm_sched_entity *entity, enum drm_sched_priority priority)h](jD)}(hstruct drm_sched_entity *entityh](j)}(hj? h]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]j)}(hdrm_sched_entityh]hdrm_sched_entity}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jFsbc.drm_sched_entity_set_priorityasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hentityh]hentity}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjXubjD)}(h enum drm_sched_priority priorityh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_sched_priorityh]hdrm_sched_priority}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]jc.drm_sched_entity_set_priorityasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpriorityh]hpriority}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjXubeh}(h]h ]h"]h$]h&]jjuh1j=hjhhhj1hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj1hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj1hMhjhhubj )}(hhh]h)}(hSets priority of the entityh]hSets priority of the entity}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjChhubah}(h]h ]h"]h$]h&]uh1j hjhhhj1hMubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' j^j( j^j) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjfubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjbubjM )}(hhh](jR )}(h5``struct drm_sched_entity *entity`` scheduler entity h](jX )}(h#``struct drm_sched_entity *entity``h]j^ )}(hjh]hstruct drm_sched_entity *entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubjt )}(hhh]h)}(hscheduler entityh]hscheduler entity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj~ubjR )}(h8``enum drm_sched_priority priority`` scheduler priority h](jX )}(h$``enum drm_sched_priority priority``h]j^ )}(hjh]h enum drm_sched_priority priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j] hjubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjubjt )}(hhh]h)}(hscheduler priorityh]hscheduler priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1js hjubeh}(h]h ]h"]h$]h&]uh1jQ hjhMhj~ubeh}(h]h ]h"]h$]h&]uh1jL hjbubh)}(h**Description**h]j7 )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjbubh)}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chMhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_sched_entity_push_job (C function)c.drm_sched_entity_push_jobhNtauh1jhjhhhNhNubj)}(hhh](j)}(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](j)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMXubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjNhMXubj)}(hdrm_sched_entity_push_jobh]j)}(hdrm_sched_entity_push_jobh]hdrm_sched_entity_push_job}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<hhhjNhMXubj>)}(h!(struct drm_sched_job *sched_job)h]jD)}(hstruct drm_sched_job *sched_jobh](j)}(hj? h]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]j)}(h drm_sched_jobh]h drm_sched_job}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj! reftypej} reftargetjmodnameN classnameNjj)}j]j)}j}jcsbc.drm_sched_entity_push_jobasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h sched_jobh]h sched_job}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jChjuubah}(h]h ]h"]h$]h&]jjuh1j=hj<hhhjNhMXubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhjNhMXubah}(h]j3ah ](jjeh"]h$]h&]j j )j huh1jhjNhMXhj5hhubj )}(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:599: ./drivers/gpu/drm/scheduler/sched_entity.chMXhjhhubah}(h]h ]h"]h$]h&]uh1j hj5hhhjNhMXubeh}(h]h ](j! functioneh"]h$]h&]j& j! j' jj( jj) j* j+ uh1jhhhjhNhNubj- )}(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]j7 )}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hj ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chM\hjubjM )}(hhh]jR )}(h2``struct drm_sched_job *sched_job`` job to submit h](jX )}(h#``struct drm_sched_job *sched_job``h]j^ )}(hjAh]hstruct drm_sched_job *sched_job}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j] hj?ubah}(h]h ]h"]h$]h&]uh1jW hd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chMYhj;ubjt )}(hhh]h)}(h job to submith]h job to submit}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMYhjWubah}(h]h ]h"]h$]h&]uh1js hj;ubeh}(h]h ]h"]h$]h&]uh1jQ hjVhMYhj8ubah}(h]h ]h"]h$]h&]uh1jL hjubh)}(h**Note**h]j7 )}(hj|h]hNote}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjzubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chM[hjubh)}(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 }(hjhhhNhNubj7 )}(h **sched_job**h]h sched_job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j6 hjubh in drm_sched_job_init().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-mm:599: ./drivers/gpu/drm/scheduler/sched_entity.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j, hjhhhNhNubeh}(h]jah ]h"]scheduler function referencesah$]h&]uh1hhjIhhhhhMOubeh}(h]jah ]h"] gpu schedulerah$]h&]uh1hhhhhhhhM@ubeh}(h]j*ah ]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_sourceȟ _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]jβaj]j7ajTD]jJDaj]jqmaunameids}(jj*jJjFjށjIjgjhjjjNjj-rjjׁjj҈jjj=jj_j^jjʄjjDjjjjjj jkj+jjMjMjoj8zjjˈjjܲjjjjjjԴj"jʹjAj4jojԵjj-jjjj7j overviewNjOjMj7jojqIjjpIjmIjYDjj GjTDj GjjHj"jhIjDj ejrj=`jjejjmjjjjjjrj"jsjDjStjfjFjjjjjjju nametypes}(jjJjށjgjjNj-rjׁj҈jjj^jʄjDjjjjkjjMj8zjˈjܲjjjԴjʹj4jԵj-jj7j:jOj7jqIjpIjYDj Gj GjHjhIj ej=`jejmjjjrjsjStjFjjjuh}(j*hjFhjIjMjjjhj j0 j5 j j jjjjjjjjjjTjYjjjjjwj|jjjjjjj!j!j"j"j%j%je'jj'j(j(j**j/*j,j,j0j 0j1j1j_3jd3j4j4ji6jn6j7j7j-9j29jW;j\;j<j=j?j?jBjBjDjDj4Fj9Fj(Hj-HjLjLjjNjNjNjRjRjTjTjUjUjJWjOWjXjXjZjZj^j^j`j `j bj%bjcjcjefjjfjhjhjjjjjQkjVkj(nj-njpjpjj0rjMrjRrj:tj?tjujujxjxj{j{j4~j9~jjjjj=jj_jjjjjajj̈́jjGj jmj+jjjjIjNj jjjjjj_jdjjÙjǛj̛jZj_jjjmjrjj j/j4j<jAjĨjɨjGjLjjjjjj#j2j7jjjjjj#jsjxj6j;j;j@j&j+jjj2j7j+j0jjjNjSjjjPjUj1j6jjj\jajjjkjpjjj9j>jcjhjjjMjnjjjjj|jjjjjjjjojtjsjxjjjjj5j:jjj)j.jFjKjr jw jjjwj|jZj_jjjj jUjZjojj[jaj #j#j$j$j'j'jk)jp)j+j+j-j-j/j/j[0j`0j-3j23j5j5j7j7j8j8j;:j@:j;j;j>j>j9Aj>Aj DjDjEjFjGjGjEKjJKjjMjOjOjQjRjSjSjUjUjsVjxVjdWjiWjoYjtYjr[jw[j^j^j`j `jajaj#dj(djMfjRfjjjjjEnjJnjpjpjsjsjktjptjwjwjj;zjgzjlzj}j}jjjjjjjjՈj=jBjFjKj jjjjj"jjjjjjjjjjjKjPj۟jj,j1jEjJjojtjjjjjCjHjj߲jj߲j"jjAjsjoj״jj=jj׵jj7jTjZjjjjjQjVjjjBjGj jjjjj#jjjjjKjPjjjj jdjijjjajfjjjjjjj;j@jjjjj jj+jjMjjojRjojtjjjjjjjjjjjjjSjXj7j<jj jLjQjjj j j j jPjUjQjVjjjj#jjj&j+j#j#jx%j}%j*j*j+-j0-j/j/j1j1j04j54j5j5jj7jmIj7jj7jj>jTDj\Djj\Dj"jGjDjHj%Hj*HjIjIjOjOjQjQjSjSjEUjJUj\j\j^j^j`j`jbjbj\djadjOfjTfjrijwijljlj(pj-pjrjrjPtjUtjexjjxjSzjXzj}j}jjjjjjjMjRjijnjjj jjjÓjjj@jEjjjjjϝjԝjojtjjj jjjjj jjjjjөjةjܪjjjj[j`j(j-jںjߺj>jCjjjjjdjijjjfjkjjj5j:jjj=jBjyj~jjjjj%j*j4j9jjjOjTjjj[j`jjjjj/j4jjjN jS j j jpjujjjjjcjhjEjJjN!jS!j#j#j'j'j+j+j0j0j3j3j7j7j;j;j?j?jCjCjFjFjrjvIjjIjIjIjNLjSLjMjMjOjOjQjQjaTjfTjWjWj\j\j^j^jj@`j]`jb`j cjcjjej+ej0ejRgjWgjhjhjjjjjjmjjmj"jpjDjrjfjsjbtjgtjnwjswjyjyj\zjazj|j|j~j~jjjAjFjj!jjjdjij=jBjHjMjjj3j8jjjjj-j2jpjujjjjjjj&j+jjjsjxjjjtjyjŨjʨjjjʭjϭjjIjjZjjjjjòjȲjrjwj!j&j<jAjMjRjjjjjjjoj jjjjjjjjDjIjjjXj]jj jjjjjj jjjjjjj\jajjjjjjjjjjj&j+jkjpjdjijjjejjjjjvj{jjj j jjjjjejjjjjjjjjjj3j8hjjCj:jbjYjj{jjjjjjjjj7j.jYjPj{jrjjjjjjjjj%jjGj>jij`jjjjjjjjjjj;j2jij`jjjjjjjjj%jjGj>jij`jjjjjjjjjjj>j5jljcjjjjjjjjjjj>j5j`jWjjjjjjjjjj u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jK8sRparse_messages](hsystem_message)}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&]jalevelKtypeINFOsourceȟlineMuh1jYhj7hhhhhMubjZ)}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]jalevelKtypejtsourceȟlineMCuh1jYhjZhhhhhMCubetransform_messages](jZ)}(hhh]h)}(hhh]h:Hyperlink target "prime-buffer-sharing" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejtsourceȟlineMuh1jYubjZ)}(hhh]h)}(hhh]h/Hyperlink target "drm-gpuvm" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejtsourceȟlineMuh1jYubjZ)}(hhh]h)}(hhh]h7Hyperlink target "drm-gpuvm-locking" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejtsourceȟlineMuh1jYubjZ)}(hhh]h)}(hhh]h6Hyperlink target "drm-sync-objects" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejtsourceȟlineM%uh1jYube transformerN include_log] decorationNhhub.