€•[Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ*/translations/zh_CN/gpu/amdgpu/ring-buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/zh_TW/gpu/amdgpu/ring-buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/it_IT/gpu/amdgpu/ring-buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ja_JP/gpu/amdgpu/ring-buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ko_KR/gpu/amdgpu/ring-buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/pt_BR/gpu/amdgpu/ring-buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/sp_SP/gpu/amdgpu/ring-buffer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ Ring Buffer”h]”hŒ Ring Buffer”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒD/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer.rst”h´KubhŒ paragraph”“”)�”}”(hŒæTo handle communication between user space and kernel space, AMD GPUs use a ring buffer design to feed the engines (GFX, Compute, SDMA, UVD, VCE, VCN, VPE, etc.). See the figure below that illustrates how this communication works:”h]”hŒæTo handle communication between user space and kernel space, AMD GPUs use a ring buffer design to feed the engines (GFX, Compute, SDMA, UVD, VCE, VCN, VPE, etc.). See the figure below that illustrates how this communication works:”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubŒkfigure”Œ kernel_figure”“”)�”}”(hhh]”hŒfigure”“”)�”}”(hhh]”hŒimage”“”)�”}”(hŒ$.. kernel-figure:: ring_buffers.svg ”h]”h}”(h]”h ]”h"]”h$]”h&]”Œuri”Œgpu/amdgpu/ring_buffers.svg”Œ candidates”}”Œ*”hósuh1hæhhãh³hÊh´Kubah}”(h]”h ]”h"]”h$]”h&]”uh1háhhÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜhh·h²hh³hÊh´K ubhÌ)�”}”(hXERing buffers in the amdgpu work as a producer-consumer model, where userspace acts as the producer, constantly filling the ring buffer with GPU commands to be executed. Meanwhile, the GPU retrieves the information from the ring, parses it, and distributes the specific set of instructions between the different amdgpu blocks.”h]”hXERing buffers in the amdgpu work as a producer-consumer model, where userspace acts as the producer, constantly filling the ring buffer with GPU commands to be executed. Meanwhile, the GPU retrieves the information from the ring, parses it, and distributes the specific set of instructions between the different amdgpu blocks.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hXNotice from the diagram that the ring has a Read Pointer (rptr), which indicates where the engine is currently reading packets from the ring, and a Write Pointer (wptr), which indicates how many packets software has added to the ring. When the rptr and wptr are equal, the ring is idle. When software adds packets to the ring, it updates the wptr, this causes the engine to start fetching and processing packets. As the engine processes packets, the rptr gets updates until the rptr catches up to the wptr and they are equal again.”h]”hXNotice from the diagram that the ring has a Read Pointer (rptr), which indicates where the engine is currently reading packets from the ring, and a Write Pointer (wptr), which indicates how many packets software has added to the ring. When the rptr and wptr are equal, the ring is idle. When software adds packets to the ring, it updates the wptr, this causes the engine to start fetching and processing packets. As the engine processes packets, the rptr gets updates until the rptr catches up to the wptr and they are equal again.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hXÄUsually, ring buffers in the driver have a limited size (search for occurrences of `amdgpu_ring_init()`). One of the reasons for the small ring buffer size is that CP (Command Processor) is capable of following addresses inserted into the ring; this is illustrated in the image by the reference to the IB (Indirect Buffer). The IB gives userspace the possibility to have an area in memory that CP can read and feed the hardware with extra instructions.”h]”(hŒSUsually, ring buffers in the driver have a limited size (search for occurrences of ”…”�”}”(hjh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`amdgpu_ring_init()`”h]”hŒamdgpu_ring_init()”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubhX]). One of the reasons for the small ring buffer size is that CP (Command Processor) is capable of following addresses inserted into the ring; this is illustrated in the image by the reference to the IB (Indirect Buffer). The IB gives userspace the possibility to have an area in memory that CP can read and feed the hardware with extra instructions.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hXAll ASICs pre-GFX11 use what is called a kernel queue, which means the ring is allocated in kernel space and has some restrictions, such as not being able to be :ref:`preempted directly by the scheduler`. GFX11 and newer support kernel queues, but also provide a new mechanism named :ref:`user queues`, where the queue is moved to the user space and can be mapped and unmapped via the scheduler. In practice, both queues insert user-space-generated GPU commands from different jobs into the requested component ring.”h]”(hŒ¡All ASICs pre-GFX11 use what is called a kernel queue, which means the ring is allocated in kernel space and has some restrictions, such as not being able to be ”…”�”}”(hjAh²hh³Nh´Nubh)�”}”(hŒ6:ref:`preempted directly by the scheduler`”h]”hŒinline”“”)�”}”(hjKh]”hŒ#preempted directly by the scheduler”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jMhjIubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œgpu/amdgpu/ring-buffer”Œ refdomain”jZŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ amdgpu-mes”uh1hh³hÊh´K hjAubhŒP. GFX11 and newer support kernel queues, but also provide a new mechanism named ”…”�”}”(hjAh²hh³Nh´Nubh)�”}”(hŒ :ref:`user queues`”h]”jN)�”}”(hjth]”hŒ user queues”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”(jYŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jMhjrubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jfŒ refdomain”j€Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjlŒ amdgpu-userq”uh1hh³hÊh´K hjAubhŒ×, where the queue is moved to the user space and can be mapped and unmapped via the scheduler. In practice, both queues insert user-space-generated GPU commands from different jobs into the requested component ring.”…”�”}”(hjAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒEnforce Isolation”h]”hŒEnforce Isolation”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjœh²hh³hÊh´K*ubhŒnote”“”)�”}”(hŒ�After reading this section, you might want to check the :ref:`Process Isolation` page for more details.”h]”hÌ)�”}”(hŒ�After reading this section, you might want to check the :ref:`Process Isolation` page for more details.”h]”(hŒ8After reading this section, you might want to check the ”…”�”}”(hj³h²hh³Nh´Nubh)�”}”(hŒ2:ref:`Process Isolation`”h]”jN)�”}”(hj½h]”hŒProcess Isolation”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”(jYŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jMhj»ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jfŒ refdomain”jÉŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjlŒamdgpu-process-isolation”uh1hh³hÊh´K,hj³ubhŒ page for more details.”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjœh²hh³hÊh´NubhÌ)�”}”(hXBefore examining the Enforce Isolation mechanism in the ring buffer context, it is helpful to briefly discuss how instructions from the ring buffer are processed in the graphics pipeline. Let’s expand on this topic by checking the diagram below that illustrates the graphics pipeline:”h]”hXBefore examining the Enforce Isolation mechanism in the ring buffer context, it is helpful to briefly discuss how instructions from the ring buffer are processed in the graphics pipeline. Let’s expand on this topic by checking the diagram below that illustrates the graphics pipeline:”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K/hjœh²hubhÝ)�”}”(hhh]”hâ)�”}”(hhh]”hç)�”}”(hŒ(.. kernel-figure:: gfx_pipeline_seq.svg ”h]”h}”(h]”h ]”h"]”h$]”h&]”Œuri”Œgpu/amdgpu/gfx_pipeline_seq.svg”hô}”höj suh1hæhjüh³hÊh´Kubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜhjœh²hh³hÊh´K5ubhÌ)�”}”(hXÅIn terms of executing instructions, the GFX pipeline follows the sequence: Shader Export (SX), Geometry Engine (GE), Shader Process or Input (SPI), Scan Converter (SC), Primitive Assembler (PA), and cache manipulation (which may vary across ASICs). Another common way to describe the pipeline is to use Pixel Shader (PS), raster, and Vertex Shader (VS) to symbolize the two shader stages. Now, with this pipeline in mind, let's assume that Job B causes a hang issue, but Job C's instruction might already be executing, leading developers to incorrectly identify Job C as the problematic one. This problem can be mitigated on multiple levels; the diagram below illustrates how to minimize part of this problem:”h]”hXÉIn terms of executing instructions, the GFX pipeline follows the sequence: Shader Export (SX), Geometry Engine (GE), Shader Process or Input (SPI), Scan Converter (SC), Primitive Assembler (PA), and cache manipulation (which may vary across ASICs). Another common way to describe the pipeline is to use Pixel Shader (PS), raster, and Vertex Shader (VS) to symbolize the two shader stages. Now, with this pipeline in mind, let’s assume that Job B causes a hang issue, but Job C’s instruction might already be executing, leading developers to incorrectly identify Job C as the problematic one. This problem can be mitigated on multiple levels; the diagram below illustrates how to minimize part of this problem:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hjœh²hubhÝ)�”}”(hhh]”hâ)�”}”(hhh]”hç)�”}”(hŒ,.. kernel-figure:: no_enforce_isolation.svg ”h]”h}”(h]”h ]”h"]”h$]”h&]”Œuri”Œ#gpu/amdgpu/no_enforce_isolation.svg”hô}”höj7suh1hæhj)h³hÊh´Kubah}”(h]”h ]”h"]”h$]”h&]”uh1háhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜhjœh²hh³hÊh´KBubhÌ)�”}”(hXNote from the diagram that there is no guarantee of order or a clear separation between instructions, which is not a problem most of the time, and is also good for performance. Furthermore, notice some circles between jobs in the diagram that represent a **fence wait** used to avoid overlapping work in the ring. At the end of the fence, a cache flush occurs, ensuring that when the next job starts, it begins in a clean state and, if issues arise, the developer can pinpoint the problematic process more precisely.”h]”(hŒÿNote from the diagram that there is no guarantee of order or a clear separation between instructions, which is not a problem most of the time, and is also good for performance. Furthermore, notice some circles between jobs in the diagram that represent a ”…”�”}”(hjEh²hh³Nh´NubhŒstrong”“”)�”}”(hŒ**fence wait**”h]”hŒ fence wait”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒ÷ used to avoid overlapping work in the ring. At the end of the fence, a cache flush occurs, ensuring that when the next job starts, it begins in a clean state and, if issues arise, the developer can pinpoint the problematic process more precisely.”…”�”}”(hjEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KChjœh²hubhÌ)�”}”(hŒxTo increase the level of isolation between jobs, there is the "Enforce Isolation" method described in the picture below:”h]”hŒ|To increase the level of isolation between jobs, there is the “Enforce Isolationâ€� method described in the picture below:”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KKhjœh²hubhÝ)�”}”(hhh]”hâ)�”}”(hhh]”hç)�”}”(hŒ).. kernel-figure:: enforce_isolation.svg ”h]”h}”(h]”h ]”h"]”h$]”h&]”Œuri”Œ gpu/amdgpu/enforce_isolation.svg”hô}”höj†suh1hæhjxh³hÊh´Kubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜhjœh²hh³hÊh´KOubhÌ)�”}”(hX§As shown in the diagram, enforcing isolation introduces ordering between submissions, since the access to GFX/Compute is serialized, think about it as single process at a time mode for gfx/compute. Notice that this approach has a significant performance impact, as it allows only one job to submit commands at a time. However, this option can help pinpoint the job that caused the problem. Although enforcing isolation improves the situation, it does not fully resolve the issue of precisely pinpointing bad jobs, since isolation might mask the problem. In summary, identifying which job caused the issue may not be precise, but enforcing isolation might help with the debugging.”h]”hX§As shown in the diagram, enforcing isolation introduces ordering between submissions, since the access to GFX/Compute is serialized, think about it as single process at a time mode for gfx/compute. Notice that this approach has a significant performance impact, as it allows only one job to submit commands at a time. However, this option can help pinpoint the job that caused the problem. Although enforcing isolation improves the situation, it does not fully resolve the issue of precisely pinpointing bad jobs, since isolation might mask the problem. In summary, identifying which job caused the issue may not be precise, but enforcing isolation might help with the debugging.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KPhjœh²hubeh}”(h]”Œenforce-isolation”ah ]”h"]”Œenforce isolation”ah$]”h&]”uh1hµhh·h²hh³hÊh´K*ubh¶)�”}”(hhh]”(h»)�”}”(hŒRing Operations”h]”hŒRing Operations”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjªh²hh³hÊh´K[ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ amdgpu_ring_max_ibs (C function)”Œc.amdgpu_ring_max_ibs”hNt”auh1j»hjªh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ=unsigned int amdgpu_ring_max_ibs (enum amdgpu_ring_type type)”h]”hŒdesc_signature_line”“”)�”}”(hŒ)�”}”(hŒ,(struct amdgpu_ring *ring, unsigned int ndw)”h]”(jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj¼ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj¼ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jáŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚j¦sbŒc.amdgpu_ring_alloc”†”asbuh1hhj¼ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj¼ubhŒdesc_sig_punctuation”“”)�”}”(hhöh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j hj¼ubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj¸ubjD)�”}”(hŒunsigned int ndw”h]”(jÞ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj2ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj2ubjÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj2ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj2ubj#)�”}”(hŒndw”h]”hŒndw”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj¸ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjh²hh³j‘h´KJubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhj{h²hh³j‘h´KJubah}”(h]”jvah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³j‘h´KJhjxh²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒ!allocate space on the ring buffer”h]”hŒ!allocate space on the ring buffer”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KJhj•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjxh²hh³j‘h´KJubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jój°jôj°jõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hX¬**Parameters** ``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ``unsigned int ndw`` number of dwords to allocate in the ring buffer **Description** Allocate **ndw** dwords in the ring buffer. The number of dwords should be the sum of all commands written to the ring. **Return** 0 on success, otherwise -ENOMEM if it tries to allocate more than the maximum dword allowed for one submission.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjºh]”hŒ Parameters”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KNhj´ubj)�”}”(hhh]”(j)�”}”(hŒL``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hjÙh]”hŒstruct amdgpu_ring *ring”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KLhjÓubj>)�”}”(hhh]”hÌ)�”}”(hŒ.amdgpu_ring structure holding ring information”h]”hŒ.amdgpu_ring structure holding ring information”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jîh´KLhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîh´KLhjÐubj)�”}”(hŒE``unsigned int ndw`` number of dwords to allocate in the ring buffer ”h]”(j")�”}”(hŒ``unsigned int ndw``”h]”j()�”}”(hjh]”hŒunsigned int ndw”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KMhj ubj>)�”}”(hhh]”hÌ)�”}”(hŒ/number of dwords to allocate in the ring buffer”h]”hŒ/number of dwords to allocate in the ring buffer”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j'h´KMhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'h´KMhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hjMh]”hŒ Description”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KOhj´ubhÌ)�”}”(hŒwAllocate **ndw** dwords in the ring buffer. The number of dwords should be the sum of all commands written to the ring.”h]”(hŒ Allocate ”…”�”}”(hjch²hh³Nh´NubjN)�”}”(hŒ**ndw**”h]”hŒndw”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjcubhŒg dwords in the ring buffer. The number of dwords should be the sum of all commands written to the ring.”…”�”}”(hjch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KNhj´ubhÌ)�”}”(hŒ **Return**”h]”jN)�”}”(hj†h]”hŒReturn”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KQhj´ubhÌ)�”}”(hŒo0 on success, otherwise -ENOMEM if it tries to allocate more than the maximum dword allowed for one submission.”h]”hŒo0 on success, otherwise -ENOMEM if it tries to allocate more than the maximum dword allowed for one submission.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KRhj´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒ#amdgpu_ring_insert_nop (C function)”Œc.amdgpu_ring_insert_nop”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒFvoid amdgpu_ring_insert_nop (struct amdgpu_ring *ring, uint32_t count)”h]”jØ)�”}”(hŒEvoid amdgpu_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)”h]”(jÞ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjÇh²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Koubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjÇh²hh³jÙh´Koubj)�”}”(hŒamdgpu_ring_insert_nop”h]”j#)�”}”(hŒamdgpu_ring_insert_nop”h]”hŒamdgpu_ring_insert_nop”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjèubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhjÇh²hh³jÙh´Koubj>)�”}”(hŒ*(struct amdgpu_ring *ring, uint32_t count)”h]”(jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j(Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚jîsbŒc.amdgpu_ring_insert_nop”†”asbuh1hhjubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjubj)�”}”(hhöh]”hŒ*”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjubjD)�”}”(hŒuint32_t count”h]”(h)�”}”(hhh]”j#)�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjzubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jBŒc.amdgpu_ring_insert_nop”†”asbuh1hhjvubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjvubj#)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjÇh²hh³jÙh´Koubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjÃh²hh³jÙh´Koubah}”(h]”j¾ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³jÙh´KohjÀh²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒinsert NOP packets”h]”hŒinsert NOP packets”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KohjÐh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÀh²hh³jÙh´Koubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jójëjôjëjõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hŒç**Parameters** ``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ``uint32_t count`` the number of NOP packets to insert **Description** This is the generic insert_nop function for rings except SDMA”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjõh]”hŒ Parameters”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Kshjïubj)�”}”(hhh]”(j)�”}”(hŒL``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hjh]”hŒstruct amdgpu_ring *ring”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Kqhjubj>)�”}”(hhh]”hÌ)�”}”(hŒ.amdgpu_ring structure holding ring information”h]”hŒ.amdgpu_ring structure holding ring information”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j)h´Kqhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)h´Kqhj ubj)�”}”(hŒ7``uint32_t count`` the number of NOP packets to insert ”h]”(j")�”}”(hŒ``uint32_t count``”h]”j()�”}”(hjMh]”hŒuint32_t count”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KrhjGubj>)�”}”(hhh]”hÌ)�”}”(hŒ#the number of NOP packets to insert”h]”hŒ#the number of NOP packets to insert”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jbh´Krhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbh´Krhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjïubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hjˆh]”hŒ Description”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KthjïubhÌ)�”}”(hŒ=This is the generic insert_nop function for rings except SDMA”h]”hŒ=This is the generic insert_nop function for rings except SDMA”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Kshjïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒ'amdgpu_ring_generic_pad_ib (C function)”Œc.amdgpu_ring_generic_pad_ib”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒPvoid amdgpu_ring_generic_pad_ib (struct amdgpu_ring *ring, struct amdgpu_ib *ib)”h]”jØ)�”}”(hŒOvoid amdgpu_ring_generic_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib)”h]”(jÞ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjÉh²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K‹ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjÉh²hh³jÛh´K‹ubj)�”}”(hŒamdgpu_ring_generic_pad_ib”h]”j#)�”}”(hŒamdgpu_ring_generic_pad_ib”h]”hŒamdgpu_ring_generic_pad_ib”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjêubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhjÉh²hh³jÛh´K‹ubj>)�”}”(hŒ0(struct amdgpu_ring *ring, struct amdgpu_ib *ib)”h]”(jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj% ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j* Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚jðsbŒc.amdgpu_ring_generic_pad_ib”†”asbuh1hhj ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj ubj)�”}”(hhöh]”hŒ*”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj ubjD)�”}”(hŒstruct amdgpu_ib *ib”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjx ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjx ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ib”h]”hŒ amdgpu_ib”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj— ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jœ Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jD Œc.amdgpu_ring_generic_pad_ib”†”asbuh1hhjx ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjx ubj)�”}”(hhöh]”hŒ*”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjx ubj#)�”}”(hŒib”h]”hŒib”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjx ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjÉh²hh³jÛh´K‹ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjÅh²hh³jÛh´K‹ubah}”(h]”jÀah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³jÛh´K‹hjÂh²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒpad IB with NOP packets”h]”hŒpad IB with NOP packets”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K‹hjú h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÂh²hh³jÛh´K‹ubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jój jôj jõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hŒÞ**Parameters** ``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ``struct amdgpu_ib *ib`` IB to add NOP packets to **Description** This is the generic pad_ib function for rings except SDMA”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hj h]”hŒ Parameters”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K�hj ubj)�”}”(hhh]”(j)�”}”(hŒL``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hj> h]”hŒstruct amdgpu_ring *ring”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K�hj8 ubj>)�”}”(hhh]”hÌ)�”}”(hŒ.amdgpu_ring structure holding ring information”h]”hŒ.amdgpu_ring structure holding ring information”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jS h´K�hjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jS h´K�hj5 ubj)�”}”(hŒ2``struct amdgpu_ib *ib`` IB to add NOP packets to ”h]”(j")�”}”(hŒ``struct amdgpu_ib *ib``”h]”j()�”}”(hjw h]”hŒstruct amdgpu_ib *ib”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hju ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KŽhjq ubj>)�”}”(hhh]”hÌ)�”}”(hŒIB to add NOP packets to”h]”hŒIB to add NOP packets to”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŒ h´KŽhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjq ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒ h´KŽhj5 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj² h]”hŒ Description”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K�hj ubhÌ)�”}”(hŒ9This is the generic pad_ib function for rings except SDMA”h]”hŒ9This is the generic pad_ib function for rings except SDMA”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K�hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒamdgpu_ring_commit (C function)”Œc.amdgpu_ring_commit”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ2void amdgpu_ring_commit (struct amdgpu_ring *ring)”h]”jØ)�”}”(hŒ1void amdgpu_ring_commit(struct amdgpu_ring *ring)”h]”(jÞ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjó h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K¡ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjó h²hh³j h´K¡ubj)�”}”(hŒamdgpu_ring_commit”h]”j#)�”}”(hŒamdgpu_ring_commit”h]”hŒamdgpu_ring_commit”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj ubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhjó h²hh³j h´K¡ubj>)�”}”(hŒ(struct amdgpu_ring *ring)”h]”jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj0 ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj0 ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjO ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jT Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚j sbŒc.amdgpu_ring_commit”†”asbuh1hhj0 ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj0 ubj)�”}”(hhöh]”hŒ*”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj0 ubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj0 ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj, ubah}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjó h²hh³j h´K¡ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjï h²hh³j h´K¡ubah}”(h]”jê ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³j h´K¡hjì h²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒ;tell the GPU to execute the new commands on the ring buffer”h]”hŒ;tell the GPU to execute the new commands on the ring buffer”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K¡hj´ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjì h²hh³j h´K¡ubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jójÏ jôjÏ jõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hŒ×**Parameters** ``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information **Description** Update the wptr (write pointer) to tell the GPU to execute new commands on the ring buffer (all asics).”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjÙ h]”hŒ Parameters”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj× ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K¥hjÓ ubj)�”}”(hhh]”j)�”}”(hŒL``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hjø h]”hŒstruct amdgpu_ring *ring”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K¤hjò ubj>)�”}”(hhh]”hÌ)�”}”(hŒ.amdgpu_ring structure holding ring information”h]”hŒ.amdgpu_ring structure holding ring information”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´K¤hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjò ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´K¤hjï ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓ ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj3 h]”hŒ Description”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K¦hjÓ ubhÌ)�”}”(hŒgUpdate the wptr (write pointer) to tell the GPU to execute new commands on the ring buffer (all asics).”h]”hŒgUpdate the wptr (write pointer) to tell the GPU to execute new commands on the ring buffer (all asics).”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K¥hjÓ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒamdgpu_ring_undo (C function)”Œc.amdgpu_ring_undo”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ0void amdgpu_ring_undo (struct amdgpu_ring *ring)”h]”jØ)�”}”(hŒ/void amdgpu_ring_undo(struct amdgpu_ring *ring)”h]”(jÞ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjt h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÀubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjt h²hh³j† h´KÀubj)�”}”(hŒamdgpu_ring_undo”h]”j#)�”}”(hŒamdgpu_ring_undo”h]”hŒamdgpu_ring_undo”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj• ubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhjt h²hh³j† h´KÀubj>)�”}”(hŒ(struct amdgpu_ring *ring)”h]”jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj± ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj± ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjÐ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jÕ Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚j› sbŒc.amdgpu_ring_undo”†”asbuh1hhj± ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj± ubj)�”}”(hhöh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj± ubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj± ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj­ ubah}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjt h²hh³j† h´KÀubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjp h²hh³j† h´KÀubah}”(h]”jk ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³j† h´KÀhjm h²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒreset the wptr”h]”hŒreset the wptr”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÀhj5 h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjm h²hh³j† h´KÀubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jójP jôjP jõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hŒ **Parameters** ``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information **Description** Reset the driver's copy of the wptr (all asics).”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjZ h]”hŒ Parameters”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjX ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÄhjT ubj)�”}”(hhh]”j)�”}”(hŒL``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hjy h]”hŒstruct amdgpu_ring *ring”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÂhjs ubj>)�”}”(hhh]”hÌ)�”}”(hŒ.amdgpu_ring structure holding ring information”h]”hŒ.amdgpu_ring structure holding ring information”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŽ h´KÂhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjs ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽ h´KÂhjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj´ h]”hŒ Description”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÄhjT ubhÌ)�”}”(hŒ0Reset the driver's copy of the wptr (all asics).”h]”hŒ2Reset the driver’s copy of the wptr (all asics).”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÃhjT ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒamdgpu_ring_init (C function)”Œc.amdgpu_ring_init”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒÄint amdgpu_ring_init (struct amdgpu_device *adev, struct amdgpu_ring *ring, unsigned int max_dw, struct amdgpu_irq_src *irq_src, unsigned int irq_type, unsigned int hw_prio, atomic_t *sched_score)”h]”jØ)�”}”(hŒÃint amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, unsigned int max_dw, struct amdgpu_irq_src *irq_src, unsigned int irq_type, unsigned int hw_prio, atomic_t *sched_score)”h]”(jÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjõ h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÕubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjõ h²hh³jh´KÕubj)�”}”(hŒamdgpu_ring_init”h]”j#)�”}”(hŒamdgpu_ring_init”h]”hŒamdgpu_ring_init”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhjõ h²hh³jh´KÕubj>)�”}”(hŒ¯(struct amdgpu_device *adev, struct amdgpu_ring *ring, unsigned int max_dw, struct amdgpu_irq_src *irq_src, unsigned int irq_type, unsigned int hw_prio, atomic_t *sched_score)”h]”(jD)�”}”(hŒstruct amdgpu_device *adev”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj2ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj2ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_device”h]”hŒ amdgpu_device”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jVŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚jsbŒc.amdgpu_ring_init”†”asbuh1hhj2ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj2ubj)�”}”(hhöh]”hŒ*”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj2ubj#)�”}”(hŒadev”h]”hŒadev”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj.ubjD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj¤ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj¤ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjÃubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jÈŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jpŒc.amdgpu_ring_init”†”asbuh1hhj¤ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj¤ubj)�”}”(hhöh]”hŒ*”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¤ubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj.ubjD)�”}”(hŒunsigned int max_dw”h]”(jÞ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjubjÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjubj#)�”}”(hŒmax_dw”h]”hŒmax_dw”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj.ubjD)�”}”(hŒstruct amdgpu_irq_src *irq_src”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjeubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjeubh)�”}”(hhh]”j#)�”}”(hŒamdgpu_irq_src”h]”hŒamdgpu_irq_src”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j‰Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jpŒc.amdgpu_ring_init”†”asbuh1hhjeubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjeubj)�”}”(hhöh]”hŒ*”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjeubj#)�”}”(hŒirq_src”h]”hŒirq_src”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj.ubjD)�”}”(hŒunsigned int irq_type”h]”(jÞ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjÕubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjÕubjÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjÕubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjÕubj#)�”}”(hŒirq_type”h]”hŒirq_type”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj.ubjD)�”}”(hŒunsigned int hw_prio”h]”(jÞ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj&ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj&ubjÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj&ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj&ubj#)�”}”(hŒhw_prio”h]”hŒhw_prio”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj.ubjD)�”}”(hŒatomic_t *sched_score”h]”(h)�”}”(hhh]”j#)�”}”(hŒatomic_t”h]”hŒatomic_t”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j€Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jpŒc.amdgpu_ring_init”†”asbuh1hhjwubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjwubj)�”}”(hhöh]”hŒ*”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjwubj#)�”}”(hŒ sched_score”h]”hŒ sched_score”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj.ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjõ h²hh³jh´KÕubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjñ h²hh³jh´KÕubah}”(h]”jì ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³jh´KÕhjî h²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒinit driver ring struct.”h]”hŒinit driver ring struct.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÕhjÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjî h²hh³jh´KÕubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jójùjôjùjõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hXh**Parameters** ``struct amdgpu_device *adev`` amdgpu_device pointer ``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ``unsigned int max_dw`` maximum number of dw for ring alloc ``struct amdgpu_irq_src *irq_src`` interrupt source to use for this ring ``unsigned int irq_type`` interrupt type to use for this ring ``unsigned int hw_prio`` ring priority (NORMAL/HIGH) ``atomic_t *sched_score`` optional score atomic shared with other schedulers **Description** Initialize the driver information for the selected ring (all asics). Returns 0 on success, error on failure.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÙhjýubj)�”}”(hhh]”(j)�”}”(hŒ5``struct amdgpu_device *adev`` amdgpu_device pointer ”h]”(j")�”}”(hŒ``struct amdgpu_device *adev``”h]”j()�”}”(hj"h]”hŒstruct amdgpu_device *adev”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´K×hjubj>)�”}”(hhh]”hÌ)�”}”(hŒamdgpu_device pointer”h]”hŒamdgpu_device pointer”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j7h´K×hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7h´K×hjubj)�”}”(hŒL``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hj[h]”hŒstruct amdgpu_ring *ring”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KØhjUubj>)�”}”(hhh]”hÌ)�”}”(hŒ.amdgpu_ring structure holding ring information”h]”hŒ.amdgpu_ring structure holding ring information”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jph´KØhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jph´KØhjubj)�”}”(hŒ<``unsigned int max_dw`` maximum number of dw for ring alloc ”h]”(j")�”}”(hŒ``unsigned int max_dw``”h]”j()�”}”(hj”h]”hŒunsigned int max_dw”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÙhjŽubj>)�”}”(hhh]”hÌ)�”}”(hŒ#maximum number of dw for ring alloc”h]”hŒ#maximum number of dw for ring alloc”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j©h´KÙhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©h´KÙhjubj)�”}”(hŒI``struct amdgpu_irq_src *irq_src`` interrupt source to use for this ring ”h]”(j")�”}”(hŒ"``struct amdgpu_irq_src *irq_src``”h]”j()�”}”(hjÍh]”hŒstruct amdgpu_irq_src *irq_src”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÚhjÇubj>)�”}”(hhh]”hÌ)�”}”(hŒ%interrupt source to use for this ring”h]”hŒ%interrupt source to use for this ring”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jâh´KÚhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâh´KÚhjubj)�”}”(hŒ>``unsigned int irq_type`` interrupt type to use for this ring ”h]”(j")�”}”(hŒ``unsigned int irq_type``”h]”j()�”}”(hjh]”hŒunsigned int irq_type”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÛhjubj>)�”}”(hhh]”hÌ)�”}”(hŒ#interrupt type to use for this ring”h]”hŒ#interrupt type to use for this ring”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´KÛhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´KÛhjubj)�”}”(hŒ5``unsigned int hw_prio`` ring priority (NORMAL/HIGH) ”h]”(j")�”}”(hŒ``unsigned int hw_prio``”h]”j()�”}”(hj?h]”hŒunsigned int hw_prio”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÜhj9ubj>)�”}”(hhh]”hÌ)�”}”(hŒring priority (NORMAL/HIGH)”h]”hŒring priority (NORMAL/HIGH)”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jTh´KÜhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jTh´KÜhjubj)�”}”(hŒM``atomic_t *sched_score`` optional score atomic shared with other schedulers ”h]”(j")�”}”(hŒ``atomic_t *sched_score``”h]”j()�”}”(hjxh]”hŒatomic_t *sched_score”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÝhjrubj>)�”}”(hhh]”hÌ)�”}”(hŒ2optional score atomic shared with other schedulers”h]”hŒ2optional score atomic shared with other schedulers”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�h´KÝhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´KÝhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj³h]”hŒ Description”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KßhjýubhÌ)�”}”(hŒlInitialize the driver information for the selected ring (all asics). Returns 0 on success, error on failure.”h]”hŒlInitialize the driver information for the selected ring (all asics). Returns 0 on success, error on failure.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´KÞhjýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒamdgpu_ring_fini (C function)”Œc.amdgpu_ring_fini”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ0void amdgpu_ring_fini (struct amdgpu_ring *ring)”h]”jØ)�”}”(hŒ/void amdgpu_ring_fini(struct amdgpu_ring *ring)”h]”(jÞ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjôh²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M…ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjôh²hh³jh´M…ubj)�”}”(hŒamdgpu_ring_fini”h]”j#)�”}”(hŒamdgpu_ring_fini”h]”hŒamdgpu_ring_fini”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhjôh²hh³jh´M…ubj>)�”}”(hŒ(struct amdgpu_ring *ring)”h]”jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj1ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj1ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jUŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚jsbŒc.amdgpu_ring_fini”†”asbuh1hhj1ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj1ubj)�”}”(hhöh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj1ubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj-ubah}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjôh²hh³jh´M…ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjðh²hh³jh´M…ubah}”(h]”jëah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³jh´M…hjíh²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒ!tear down the driver ring struct.”h]”hŒ!tear down the driver ring struct.”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”• µh´M…hjµh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjíh²hh³jh´M…ubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jójÐjôjÐjõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hŒ³**Parameters** ``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information **Description** Tear down the driver information for the selected ring (all asics).”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjÚh]”hŒ Parameters”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M‰hjÔubj)�”}”(hhh]”j)�”}”(hŒL``struct amdgpu_ring *ring`` amdgpu_ring structure holding ring information ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hjùh]”hŒstruct amdgpu_ring *ring”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M‡hjóubj>)�”}”(hhh]”hÌ)�”}”(hŒ.amdgpu_ring structure holding ring information”h]”hŒ.amdgpu_ring structure holding ring information”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´M‡hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M‡hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj4h]”hŒ Description”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M‰hjÔubhÌ)�”}”(hŒCTear down the driver information for the selected ring (all asics).”h]”hŒCTear down the driver information for the selected ring (all asics).”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´MˆhjÔubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒ7amdgpu_ring_emit_reg_write_reg_wait_helper (C function)”Œ,c.amdgpu_ring_emit_reg_write_reg_wait_helper”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ…void amdgpu_ring_emit_reg_write_reg_wait_helper (struct amdgpu_ring *ring, uint32_t reg0, uint32_t reg1, uint32_t ref, uint32_t mask)”h]”jØ)�”}”(hŒ„void amdgpu_ring_emit_reg_write_reg_wait_helper(struct amdgpu_ring *ring, uint32_t reg0, uint32_t reg1, uint32_t ref, uint32_t mask)”h]”(jÞ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjuh²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¦ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjuh²hh³j‡h´M¦ubj)�”}”(hŒ*amdgpu_ring_emit_reg_write_reg_wait_helper”h]”j#)�”}”(hŒ*amdgpu_ring_emit_reg_write_reg_wait_helper”h]”hŒ*amdgpu_ring_emit_reg_write_reg_wait_helper”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj–ubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhjuh²hh³j‡h´M¦ubj>)�”}”(hŒU(struct amdgpu_ring *ring, uint32_t reg0, uint32_t reg1, uint32_t ref, uint32_t mask)”h]”(jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj²ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj²ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjÑubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jÖŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚jœsbŒ,c.amdgpu_ring_emit_reg_write_reg_wait_helper”†”asbuh1hhj²ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj²ubj)�”}”(hhöh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj²ubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj®ubjD)�”}”(hŒ uint32_t reg0”h]”(h)�”}”(hhh]”j#)�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j-Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jðŒ,c.amdgpu_ring_emit_reg_write_reg_wait_helper”†”asbuh1hhj$ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj$ubj#)�”}”(hŒreg0”h]”hŒreg0”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj®ubjD)�”}”(hŒ uint32_t reg1”h]”(h)�”}”(hhh]”j#)�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”juŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jðŒ,c.amdgpu_ring_emit_reg_write_reg_wait_helper”†”asbuh1hhjlubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjlubj#)�”}”(hŒreg1”h]”hŒreg1”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj®ubjD)�”}”(hŒ uint32_t ref”h]”(h)�”}”(hhh]”j#)�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j½Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jðŒ,c.amdgpu_ring_emit_reg_write_reg_wait_helper”†”asbuh1hhj´ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj´ubj#)�”}”(hŒref”h]”hŒref”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj®ubjD)�”}”(hŒ uint32_t mask”h]”(h)�”}”(hhh]”j#)�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jðŒ,c.amdgpu_ring_emit_reg_write_reg_wait_helper”†”asbuh1hhjüubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjüubj#)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj®ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjuh²hh³j‡h´M¦ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjqh²hh³j‡h´M¦ubah}”(h]”jlah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³j‡h´M¦hjnh²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒ ring helper”h]”hŒ ring helper”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¦hjVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjnh²hh³j‡h´M¦ubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jójqjôjqjõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hXJ**Parameters** ``struct amdgpu_ring *ring`` ring to write to ``uint32_t reg0`` register to write ``uint32_t reg1`` register to wait on ``uint32_t ref`` reference value to write/wait on ``uint32_t mask`` mask to wait on **Description** Helper for rings that don't support write and wait in a single oneshot packet.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hj{h]”hŒ Parameters”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mªhjuubj)�”}”(hhh]”(j)�”}”(hŒ.``struct amdgpu_ring *ring`` ring to write to ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hjšh]”hŒstruct amdgpu_ring *ring”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¨hj”ubj>)�”}”(hhh]”hÌ)�”}”(hŒring to write to”h]”hŒring to write to”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¯h´M¨hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯h´M¨hj‘ubj)�”}”(hŒ$``uint32_t reg0`` register to write ”h]”(j")�”}”(hŒ``uint32_t reg0``”h]”j()�”}”(hjÓh]”hŒ uint32_t reg0”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M©hjÍubj>)�”}”(hhh]”hÌ)�”}”(hŒregister to write”h]”hŒregister to write”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jèh´M©hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèh´M©hj‘ubj)�”}”(hŒ&``uint32_t reg1`` register to wait on ”h]”(j")�”}”(hŒ``uint32_t reg1``”h]”j()�”}”(hj h]”hŒ uint32_t reg1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mªhjubj>)�”}”(hhh]”hÌ)�”}”(hŒregister to wait on”h]”hŒregister to wait on”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j!h´Mªhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!h´Mªhj‘ubj)�”}”(hŒ2``uint32_t ref`` reference value to write/wait on ”h]”(j")�”}”(hŒ``uint32_t ref``”h]”j()�”}”(hjEh]”hŒ uint32_t ref”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M«hj?ubj>)�”}”(hhh]”hÌ)�”}”(hŒ reference value to write/wait on”h]”hŒ reference value to write/wait on”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jZh´M«hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZh´M«hj‘ubj)�”}”(hŒ"``uint32_t mask`` mask to wait on ”h]”(j")�”}”(hŒ``uint32_t mask``”h]”j()�”}”(hj~h]”hŒ uint32_t mask”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¬hjxubj>)�”}”(hhh]”hÌ)�”}”(hŒmask to wait on”h]”hŒmask to wait on”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j“h´M¬hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j“h´M¬hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj¹h]”hŒ Description”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M®hjuubhÌ)�”}”(hŒNHelper for rings that don't support write and wait in a single oneshot packet.”h]”hŒPHelper for rings that don’t support write and wait in a single oneshot packet.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M­hjuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒ&amdgpu_ring_soft_recovery (C function)”Œc.amdgpu_ring_soft_recovery”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒebool amdgpu_ring_soft_recovery (struct amdgpu_ring *ring, unsigned int vmid, struct dma_fence *fence)”h]”jØ)�”}”(hŒdbool amdgpu_ring_soft_recovery(struct amdgpu_ring *ring, unsigned int vmid, struct dma_fence *fence)”h]”(jÞ)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjúh²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mºubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjúh²hh³j h´Mºubj)�”}”(hŒamdgpu_ring_soft_recovery”h]”j#)�”}”(hŒamdgpu_ring_soft_recovery”h]”hŒamdgpu_ring_soft_recovery”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhjúh²hh³j h´Mºubj>)�”}”(hŒF(struct amdgpu_ring *ring, unsigned int vmid, struct dma_fence *fence)”h]”(jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj7ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj7ubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j[Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚j!sbŒc.amdgpu_ring_soft_recovery”†”asbuh1hhj7ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj7ubj)�”}”(hhöh]”hŒ*”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj7ubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj3ubjD)�”}”(hŒunsigned int vmid”h]”(jÞ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj©ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj©ubjÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj©ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj©ubj#)�”}”(hŒvmid”h]”hŒvmid”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj3ubjD)�”}”(hŒstruct dma_fence *fence”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjúubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjúubh)�”}”(hhh]”j#)�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”juŒc.amdgpu_ring_soft_recovery”†”asbuh1hhjúubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjúubj)�”}”(hhöh]”hŒ*”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjúubj#)�”}”(hŒfence”h]”hŒfence”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjúubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChj3ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hjúh²hh³j h´Mºubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjöh²hh³j h´Mºubah}”(h]”jñah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³j h´Mºhjóh²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒ!try to soft recover a ring lockup”h]”hŒ!try to soft recover a ring lockup”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mºhj|h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjóh²hh³j h´Mºubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jój—jôj—jõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hŒù**Parameters** ``struct amdgpu_ring *ring`` ring to try the recovery on ``unsigned int vmid`` VMID we try to get going again ``struct dma_fence *fence`` timedout fence **Description** Tries to get a ring proceeding again when it is stuck.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hj¡h]”hŒ Parameters”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¾hj›ubj)�”}”(hhh]”(j)�”}”(hŒ9``struct amdgpu_ring *ring`` ring to try the recovery on ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hjÀh]”hŒstruct amdgpu_ring *ring”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¼hjºubj>)�”}”(hhh]”hÌ)�”}”(hŒring to try the recovery on”h]”hŒring to try the recovery on”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÕh´M¼hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕh´M¼hj·ubj)�”}”(hŒ5``unsigned int vmid`` VMID we try to get going again ”h]”(j")�”}”(hŒ``unsigned int vmid``”h]”j()�”}”(hjùh]”hŒunsigned int vmid”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M½hjóubj>)�”}”(hhh]”hÌ)�”}”(hŒVMID we try to get going again”h]”hŒVMID we try to get going again”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´M½hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M½hj·ubj)�”}”(hŒ+``struct dma_fence *fence`` timedout fence ”h]”(j")�”}”(hŒ``struct dma_fence *fence``”h]”j()�”}”(hj2h]”hŒstruct dma_fence *fence”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¾hj,ubj>)�”}”(hhh]”hÌ)�”}”(hŒtimedout fence”h]”hŒtimedout fence”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jGh´M¾hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jGh´M¾hj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj›ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hjmh]”hŒ Description”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´MÀhj›ubhÌ)�”}”(hŒ6Tries to get a ring proceeding again when it is stuck.”h]”hŒ6Tries to get a ring proceeding again when it is stuck.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¿hj›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒ$amdgpu_ring_test_helper (C function)”Œc.amdgpu_ring_test_helper”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ6int amdgpu_ring_test_helper (struct amdgpu_ring *ring)”h]”jØ)�”}”(hŒ5int amdgpu_ring_test_helper(struct amdgpu_ring *ring)”h]”(jÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj®h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj®h²hh³jÀh´Mubj)�”}”(hŒamdgpu_ring_test_helper”h]”j#)�”}”(hŒamdgpu_ring_test_helper”h]”hŒamdgpu_ring_test_helper”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjÏubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhj®h²hh³jÀh´Mubj>)�”}”(hŒ(struct amdgpu_ring *ring)”h]”jD)�”}”(hŒstruct amdgpu_ring *ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjëubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjëubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚jÕsbŒc.amdgpu_ring_test_helper”†”asbuh1hhjëubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjëubj)�”}”(hhöh]”hŒ*”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjëubj#)�”}”(hŒring”h]”hŒring”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjçubah}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hj®h²hh³jÀh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhjªh²hh³jÀh´Mubah}”(h]”j¥ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³jÀh´Mhj§h²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒ)tests ring and set sched readiness status”h]”hŒ)tests ring and set sched readiness status”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mhjoh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj§h²hh³jÀh´Mubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jójŠjôjŠjõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hŒ¯**Parameters** ``struct amdgpu_ring *ring`` ring to try the recovery on **Description** Tests ring and set sched readiness status Returns 0 on success, error on failure.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hj”h]”hŒ Parameters”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M!hjŽubj)�”}”(hhh]”j)�”}”(hŒ9``struct amdgpu_ring *ring`` ring to try the recovery on ”h]”(j")�”}”(hŒ``struct amdgpu_ring *ring``”h]”j()�”}”(hj³h]”hŒstruct amdgpu_ring *ring”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mhj­ubj>)�”}”(hhh]”hÌ)�”}”(hŒring to try the recovery on”h]”hŒring to try the recovery on”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÈh´MhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈh´Mhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hjîh]”hŒ Description”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M!hjŽubhÌ)�”}”(hŒ)Tests ring and set sched readiness status”h]”hŒ)Tests ring and set sched readiness status”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M hjŽubhÌ)�”}”(hŒ'Returns 0 on success, error on failure.”h]”hŒ'Returns 0 on success, error on failure.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M"hjŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒ1amdgpu_multi_ring_reset_helper_begin (C function)”Œ&c.amdgpu_multi_ring_reset_helper_begin”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒˆvoid amdgpu_multi_ring_reset_helper_begin (const u32 ring_type_mask, struct amdgpu_ring *guilty_ring, struct amdgpu_fence *guilty_fence)”h]”jØ)�”}”(hŒ‡void amdgpu_multi_ring_reset_helper_begin(const u32 ring_type_mask, struct amdgpu_ring *guilty_ring, struct amdgpu_fence *guilty_fence)”h]”(jÞ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj>h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M«ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj>h²hh³jPh´M«ubj)�”}”(hŒ$amdgpu_multi_ring_reset_helper_begin”h]”j#)�”}”(hŒ$amdgpu_multi_ring_reset_helper_begin”h]”hŒ$amdgpu_multi_ring_reset_helper_begin”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj_ubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhj>h²hh³jPh´M«ubj>)�”}”(hŒ^(const u32 ring_type_mask, struct amdgpu_ring *guilty_ring, struct amdgpu_fence *guilty_fence)”h]”(jD)�”}”(hŒconst u32 ring_type_mask”h]”(jJ)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhj{ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj{ubh)�”}”(hhh]”j#)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚jesbŒ&c.amdgpu_multi_ring_reset_helper_begin”†”asbuh1hhj{ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj{ubj#)�”}”(hŒring_type_mask”h]”hŒring_type_mask”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hj{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjwubjD)�”}”(hŒstruct amdgpu_ring *guilty_ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjáubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjáubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jºŒ&c.amdgpu_multi_ring_reset_helper_begin”†”asbuh1hhjáubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjáubj)�”}”(hhöh]”hŒ*”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjáubj#)�”}”(hŒ guilty_ring”h]”hŒ guilty_ring”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjwubjD)�”}”(hŒ!struct amdgpu_fence *guilty_fence”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjQubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjQubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_fence”h]”hŒ amdgpu_fence”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”juŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”jºŒ&c.amdgpu_multi_ring_reset_helper_begin”†”asbuh1hhjQubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjQubj)�”}”(hhöh]”hŒ*”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjQubj#)�”}”(hŒ guilty_fence”h]”hŒ guilty_fence”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjQubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjwubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hj>h²hh³jPh´M«ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhj:h²hh³jPh´M«ubah}”(h]”j5ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³jPh´M«hj7h²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒ#Prepare multiple rings for a reset.”h]”hŒ#Prepare multiple rings for a reset.”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M«hjÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj7h²hh³jPh´M«ubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jójîjôjîjõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hXB**Parameters** ``const u32 ring_type_mask`` Bitmask of affected ring types ``struct amdgpu_ring *guilty_ring`` The ring which is guilty of causing a reset. ``struct amdgpu_fence *guilty_fence`` The fence which didn't signal on the guilty ring. **Description** Useful when performing a GPU reset method that affects multiple rings at the same time, such as an IP block soft reset. For example, a GFX IP block soft reset will affect every graphics and compute queue. This function should be called before such a reset. Prepare the affected rings before the reset, make sure to minimize collateral damage, and backup the contents of the rings. Then the caller can call the actual HW specific reset function. After the reset is complete, the caller should then call amdgpu_multi_ring_reset_helper_end() to restore the rings.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjøh]”hŒ Parameters”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¯hjòubj)�”}”(hhh]”(j)�”}”(hŒ<``const u32 ring_type_mask`` Bitmask of affected ring types ”h]”(j")�”}”(hŒ``const u32 ring_type_mask``”h]”j()�”}”(hjh]”hŒconst u32 ring_type_mask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M­hjubj>)�”}”(hhh]”hÌ)�”}”(hŒBitmask of affected ring types”h]”hŒBitmask of affected ring types”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j,h´M­hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,h´M­hjubj)�”}”(hŒQ``struct amdgpu_ring *guilty_ring`` The ring which is guilty of causing a reset. ”h]”(j")�”}”(hŒ#``struct amdgpu_ring *guilty_ring``”h]”j()�”}”(hjPh]”hŒstruct amdgpu_ring *guilty_ring”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M®hjJubj>)�”}”(hhh]”hÌ)�”}”(hŒ,The ring which is guilty of causing a reset.”h]”hŒ,The ring which is guilty of causing a reset.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jeh´M®hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeh´M®hjubj)�”}”(hŒX``struct amdgpu_fence *guilty_fence`` The fence which didn't signal on the guilty ring. ”h]”(j")�”}”(hŒ%``struct amdgpu_fence *guilty_fence``”h]”j()�”}”(hj‰h]”hŒ!struct amdgpu_fence *guilty_fence”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¯hjƒubj>)�”}”(hhh]”hÌ)�”}”(hŒ1The fence which didn't signal on the guilty ring.”h]”hŒ3The fence which didn’t signal on the guilty ring.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jžh´M¯hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jžh´M¯hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjòubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hjÄh]”hŒ Description”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M±hjòubhÌ)�”}”(hŒÌUseful when performing a GPU reset method that affects multiple rings at the same time, such as an IP block soft reset. For example, a GFX IP block soft reset will affect every graphics and compute queue.”h]”hŒÌUseful when performing a GPU reset method that affects multiple rings at the same time, such as an IP block soft reset. For example, a GFX IP block soft reset will affect every graphics and compute queue.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M°hjòubhÌ)�”}”(hŒ3This function should be called before such a reset.”h]”hŒ3This function should be called before such a reset.”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´MµhjòubhÌ)�”}”(hŒ»Prepare the affected rings before the reset, make sure to minimize collateral damage, and backup the contents of the rings. Then the caller can call the actual HW specific reset function.”h]”hŒ»Prepare the affected rings before the reset, make sure to minimize collateral damage, and backup the contents of the rings. Then the caller can call the actual HW specific reset function.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M·hjòubhÌ)�”}”(hŒsAfter the reset is complete, the caller should then call amdgpu_multi_ring_reset_helper_end() to restore the rings.”h]”hŒsAfter the reset is complete, the caller should then call amdgpu_multi_ring_reset_helper_end() to restore the rings.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M¼hjòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubj¼)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÈŒ/amdgpu_multi_ring_reset_helper_end (C function)”Œ$c.amdgpu_multi_ring_reset_helper_end”hNt”auh1j»hjªh²hh³Nh´NubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒkint amdgpu_multi_ring_reset_helper_end (const u32 ring_type_mask, struct amdgpu_ring *guilty_ring, int ret)”h]”jØ)�”}”(hŒjint amdgpu_multi_ring_reset_helper_end(const u32 ring_type_mask, struct amdgpu_ring *guilty_ring, int ret)”h]”(jÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhj2h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhj2h²hh³jDh´Mubj)�”}”(hŒ"amdgpu_multi_ring_reset_helper_end”h]”j#)�”}”(hŒ"amdgpu_multi_ring_reset_helper_end”h]”hŒ"amdgpu_multi_ring_reset_helper_end”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjSubah}”(h]”h ]”(j6j7eh"]”h$]”h&]”j;j<uh1jhj2h²hh³jDh´Mubj>)�”}”(hŒD(const u32 ring_type_mask, struct amdgpu_ring *guilty_ring, int ret)”h]”(jD)�”}”(hŒconst u32 ring_type_mask”h]”(jJ)�”}”(hj�h]”hŒconst”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjoubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjoubh)�”}”(hhh]”j#)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”j“Œmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j�)�”}”j‚jYsbŒ$c.amdgpu_multi_ring_reset_helper_end”†”asbuh1hhjoubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjoubj#)�”}”(hŒring_type_mask”h]”hŒring_type_mask”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjkubjD)�”}”(hŒstruct amdgpu_ring *guilty_ring”h]”(jJ)�”}”(hjÂh]”hŒstruct”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jVah"]”h$]”h&]”uh1jIhjÔubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjÔubh)�”}”(hhh]”j#)�”}”(hŒ amdgpu_ring”h]”hŒ amdgpu_ring”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j€Œreftype”j‚Œ reftarget”jøŒmodname”NŒ classname”Nj†j‰)�”}”jŒ]”j­Œ$c.amdgpu_multi_ring_reset_helper_end”†”asbuh1hhjÔubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjÔubj)�”}”(hhöh]”hŒ*”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÔubj#)�”}”(hŒ guilty_ring”h]”hŒ guilty_ring”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjkubjD)�”}”(hŒint ret”h]”(jÞ)�”}”(hŒint”h]”hŒint”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”jêah"]”h$]”h&]”uh1jÝhjD ubjð)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”jüah"]”h$]”h&]”uh1jïhjD ubj#)�”}”(hŒret”h]”hŒret”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”j/ah"]”h$]”h&]”uh1j"hjD ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj;j<uh1jChjkubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j=hj2h²hh³jDh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j;j<jÈuh1j×jÄjÅhj.h²hh³jDh´Mubah}”(h]”j)ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÑh³jDh´Mhj+h²hubjÒ)�”}”(hhh]”hÌ)�”}”(hŒ#Prepare multiple rings for a reset.”h]”hŒ#Prepare multiple rings for a reset.”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´Mhj‹ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj+h²hh³jDh´Mubeh}”(h]”h ]”(j€Œfunction”eh"]”h$]”h&]”jòj€jój¦ jôj¦ jõ‰jö‰j÷‰uh1jÌh²hhjªh³Nh´Nubjù)�”}”(hX **Parameters** ``const u32 ring_type_mask`` Bitmask of affected ring types ``struct amdgpu_ring *guilty_ring`` The ring which is guilty of causing a reset. ``int ret`` Return code from the reset function. **Description** After calling amdgpu_multi_ring_reset_helper_begin() and executing the actual reset method, call this function to restore normal operation. In case the reset failed, this function should still be called to restore preemption state, but it won't attempt to fully restore the ring contents.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hj° h]”hŒ Parameters”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M"hjª ubj)�”}”(hhh]”(j)�”}”(hŒ<``const u32 ring_type_mask`` Bitmask of affected ring types ”h]”(j")�”}”(hŒ``const u32 ring_type_mask``”h]”j()�”}”(hjÏ h]”hŒconst u32 ring_type_mask”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjÍ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M hjÉ ubj>)�”}”(hhh]”hÌ)�”}”(hŒBitmask of affected ring types”h]”hŒBitmask of affected ring types”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jä h´M hjå ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjÉ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jä h´M hjÆ ubj)�”}”(hŒQ``struct amdgpu_ring *guilty_ring`` The ring which is guilty of causing a reset. ”h]”(j")�”}”(hŒ#``struct amdgpu_ring *guilty_ring``”h]”j()�”}”(hj!h]”hŒstruct amdgpu_ring *guilty_ring”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M!hj!ubj>)�”}”(hhh]”hÌ)�”}”(hŒ,The ring which is guilty of causing a reset.”h]”hŒ,The ring which is guilty of causing a reset.”…”�”}”(hj!!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j!h´M!hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!h´M!hjÆ ubj)�”}”(hŒ1``int ret`` Return code from the reset function. ”h]”(j")�”}”(hŒ ``int ret``”h]”j()�”}”(hjA!h]”hŒint ret”…”�”}”(hjC!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj?!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!h³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M"hj;!ubj>)�”}”(hhh]”hÌ)�”}”(hŒ$Return code from the reset function.”h]”hŒ$Return code from the reset function.”…”�”}”(hjZ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jV!h´M"hjW!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj;!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jV!h´M"hjÆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjª ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj|!h]”hŒ Description”…”�”}”(hj~!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjz!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M$hjª ubhÌ)�”}”(hŒ‹After calling amdgpu_multi_ring_reset_helper_begin() and executing the actual reset method, call this function to restore normal operation.”h]”hŒ‹After calling amdgpu_multi_ring_reset_helper_begin() and executing the actual reset method, call this function to restore normal operation.”…”�”}”(hj’!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M#hjª ubhÌ)�”}”(hŒ”In case the reset failed, this function should still be called to restore preemption state, but it won't attempt to fully restore the ring contents.”h]”hŒ–In case the reset failed, this function should still be called to restore preemption state, but it won’t attempt to fully restore the ring contents.”…”�”}”(hj¡!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/ring-buffer:93: ./drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c”h´M'hjª ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjªh²hh³Nh´Nubeh}”(h]”Œring-operations”ah ]”h"]”Œring operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´K[ubeh}”(h]”Œ ring-buffer”ah ]”h"]”Œ ring buffer”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jê!Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÄ!jÁ!j§j¤j¼!j¹!uŒ nametypes”}”(jÄ!‰j§‰j¼!‰uh}”(jÁ!h·j¤jœj¹!jªjÊjÓjvj{j¾jÃjÀjÅjê jï jk jp jì jñ jëjðjljqjñjöj¥jªj5j:j)j.uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.