€•Œ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/locking/seqlock”Œ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/locking/seqlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/it_IT/locking/seqlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ja_JP/locking/seqlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ko_KR/locking/seqlock”Œ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/locking/seqlock”Œ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/locking/seqlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ=/var/lib/git/docbuild/linux/Documentation/locking/seqlock.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ&Sequence counters and sequential locks”h]”hŒ&Sequence counters and sequential locks”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hX4Sequence counters are a reader-writer consistency mechanism with lockless readers (read-only retry loops), and no writer starvation. They are used for data that's rarely written to (e.g. system time), where the reader wants a consistent set of information and is willing to retry if that information changes.”h]”hX6Sequence counters are a reader-writer consistency mechanism with lockless readers (read-only retry loops), and no writer starvation. They are used for data that’s rarely written to (e.g. system time), where the reader wants a consistent set of information and is willing to retry if that information changes.”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhï)�”}”(hX}A data set is consistent when the sequence count at the beginning of the read side critical section is even and the same sequence count value is read again at the end of the critical section. The data in the set must be copied out inside the read side critical section. If the sequence count has changed between the start and the end of the critical section, the reader must retry.”h]”hX}A data set is consistent when the sequence count at the beginning of the read side critical section is even and the same sequence count value is read again at the end of the critical section. The data in the set must be copied out inside the read side critical section. If the sequence count has changed between the start and the end of the critical section, the reader must retry.”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)�”}”(hXHWriters increment the sequence count at the start and the end of their critical section. After starting the critical section the sequence count is odd and indicates to the readers that an update is in progress. At the end of the write side critical section the sequence count becomes even again which lets readers make progress.”h]”hXHWriters increment the sequence count at the start and the end of their critical section. After starting the critical section the sequence count is odd and indicates to the readers that an update is in progress. At the end of the write side critical section the sequence count becomes even again which lets readers make progress.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)�”}”(hXSA sequence counter write side critical section must never be preempted or interrupted by read side sections. Otherwise the reader will spin for the entire scheduler tick due to the odd sequence count value and the interrupted writer. If that reader belongs to a real-time scheduling class, it can spin forever and the kernel will livelock.”h]”hXSA sequence counter write side critical section must never be preempted or interrupted by read side sections. Otherwise the reader will spin for the entire scheduler tick due to the odd sequence count value and the interrupted writer. If that reader belongs to a real-time scheduling class, it can spin forever and the kernel will livelock.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)�”}”(hŒ‹This mechanism cannot be used if the protected data contains pointers, as the writer can invalidate a pointer that the reader is following.”h]”hŒ‹This mechanism cannot be used if the protected data contains pointers, as the writer can invalidate a pointer that the reader is following.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K#hhÝh²hubhŒtarget”“”)�”}”(hŒ.. _seqcount_t:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ seqcount-t”uh1j6h´K'hhÝh²hh³hÇubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ"Sequence counters (``seqcount_t``)”h]”(hŒSequence counters (”…”�”}”(hjOh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``seqcount_t``”h]”hŒ seqcount_t”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjOubhŒ)”…”�”}”(hjOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjLh²hh³hÇh´K*ubhï)�”}”(hŒŸThis is the raw counting mechanism, which does not protect against multiple writers. Write side critical sections must thus be serialized by an external lock.”h]”hŒŸThis is the raw counting mechanism, which does not protect against multiple writers. Write side critical sections must thus be serialized by an external lock.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K,hjLh²hubhï)�”}”(hXBIf the write serialization primitive is not implicitly disabling preemption, preemption must be explicitly disabled before entering the write side section. If the read section can be invoked from hardirq or softirq contexts, interrupts or bottom halves must also be respectively disabled before entering the write section.”h]”hXBIf the write serialization primitive is not implicitly disabling preemption, preemption must be explicitly disabled before entering the write side section. If the read section can be invoked from hardirq or softirq contexts, interrupts or bottom halves must also be respectively disabled before entering the write section.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K0hjLh²hubhï)�”}”(hŒ—If it's desired to automatically handle the sequence counter requirements of writer serialization and non-preemptibility, use :ref:`seqlock_t` instead.”h]”(hŒ€If it’s desired to automatically handle the sequence counter requirements of writer serialization and non-preemptibility, use ”…”�”}”(hj�h²hh³Nh´Nubh)�”}”(hŒ:ref:`seqlock_t`”h]”hŒinline”“”)�”}”(hj—h]”hŒ seqlock_t”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1j™hj•ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œlocking/seqlock”Œ refdomain”j¦Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆŒ reftarget”Œ seqlock_t”uh1hh³hÇh´K6hj�ubhŒ instead.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K6hjLh²hubhï)�”}”(hŒInitialization::”h]”hŒInitialization:”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K:hjLh²hubhŒ literal_block”“”)�”}”(hŒÜ/* dynamic */ seqcount_t foo_seqcount; seqcount_init(&foo_seqcount); /* static */ static seqcount_t foo_seqcount = SEQCNT_ZERO(foo_seqcount); /* C99 struct init */ struct { .seq = SEQCNT_ZERO(foo.seq), } foo;”h]”hŒÜ/* dynamic */ seqcount_t foo_seqcount; seqcount_init(&foo_seqcount); /* static */ static seqcount_t foo_seqcount = SEQCNT_ZERO(foo_seqcount); /* C99 struct init */ struct { .seq = SEQCNT_ZERO(foo.seq), } foo;”…”�”}”hjÔsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÒh³hÇh´KhjpubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ(``s`` Pointer to the seqcount_t instance”h]”(hŒterm”“”)�”}”(hŒ``s``”h]”jX)�”}”(hj�h]”hŒs”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´K@hj•ubhŒ definition”“”)�”}”(hhh]”hï)�”}”(hŒ"Pointer to the seqcount_t instance”h]”hŒ"Pointer to the seqcount_t instance”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´K;hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j²h´K@hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjpubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒSEQCNT_ZERO (C macro)”Œ c.SEQCNT_ZERO”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ SEQCNT_ZERO”h]”jì)�”}”(hŒ SEQCNT_ZERO”h]”jò)�”}”(hŒ SEQCNT_ZERO”h]”jø)�”}”(hjóh]”hŒ SEQCNT_ZERO”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjùubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjõh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´KUubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjñh²hh³jh´KUubah}”(h]”jìah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jh´KUhjîh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjîh²hh³jh´KUubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j)j9j)j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``SEQCNT_ZERO (name)``”h]”jX)�”}”(hj/h]”hŒSEQCNT_ZERO (name)”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´KWhj¾h²hubj¥)�”}”(hŒ"static initializer for seqcount_t ”h]”hï)�”}”(hŒ!static initializer for seqcount_t”h]”hŒ!static initializer for seqcount_t”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´KUhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jWh´KUhj¾h²hubjo)�”}”(hŒ:**Parameters** ``name`` Name of the seqcount_t instance”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjdh]”hŒ Parameters”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´KYhj^ubj�)�”}”(hhh]”j”)�”}”(hŒ(``name`` Name of the seqcount_t instance”h]”(jš)�”}”(hŒ``name``”h]”jX)�”}”(hjƒh]”hŒname”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´K[hj}ubj´)�”}”(hhh]”hï)�”}”(hŒName of the seqcount_t instance”h]”hŒName of the seqcount_t instance”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´KVhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j˜h´K[hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ__read_seqcount_begin (C macro)”Œc.__read_seqcount_begin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ__read_seqcount_begin”h]”jì)�”}”(hŒ__read_seqcount_begin”h]”jò)�”}”(hŒ__read_seqcount_begin”h]”jø)�”}”(hj×h]”hŒ__read_seqcount_begin”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÝubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjÙh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjÕh²hh³jôh´M ubah}”(h]”jÐah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jôh´M hjÒh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÒh²hh³jôh´M ubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j j9j j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``__read_seqcount_begin (s)``”h]”jX)�”}”(hjh]”hŒ__read_seqcount_begin (s)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M hj¾h²hubj¥)�”}”(hŒ begin a seqcount_t read section ”h]”hï)�”}”(hŒbegin a seqcount_t read section”h]”hŒbegin a seqcount_t read section”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j;h´M hj¾h²hubjo)�”}”(hŒ‘**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Return** count to be passed to read_seqcount_retry()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjHh]”hŒ Parameters”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjBubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjgh]”hŒs”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M hjaubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j|h´M hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j|h´M hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjBubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hj¢h]”hŒReturn”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjBubhï)�”}”(hŒ+count to be passed to read_seqcount_retry()”h]”hŒ+count to be passed to read_seqcount_retry()”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ!raw_read_seqcount_begin (C macro)”Œc.raw_read_seqcount_begin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒraw_read_seqcount_begin”h]”jì)�”}”(hŒraw_read_seqcount_begin”h]”jò)�”}”(hŒraw_read_seqcount_begin”h]”jø)�”}”(hjáh]”hŒraw_read_seqcount_begin”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjçubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjãh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjßh²hh³jþh´Mubah}”(h]”jÚah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jþh´MhjÜh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÜh²hh³jþh´Mubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j j9j j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``raw_read_seqcount_begin (s)``”h]”jX)�”}”(hj h]”hŒraw_read_seqcount_begin (s)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj¾h²hubj¥)�”}”(hŒ,begin a seqcount_t read section w/o lockdep ”h]”hï)�”}”(hŒ+begin a seqcount_t read section w/o lockdep”h]”hŒ+begin a seqcount_t read section w/o lockdep”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jE h´Mhj¾h²hubjo)�”}”(hŒ‘**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Return** count to be passed to read_seqcount_retry()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjR h]”hŒ Parameters”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M hjL ubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjq h]”hŒs”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjo ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhjk ubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j† h´Mhj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjk ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j† h´Mhjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjL ubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hj¬ h]”hŒReturn”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjL ubhï)�”}”(hŒ+count to be passed to read_seqcount_retry()”h]”hŒ+count to be passed to read_seqcount_retry()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjL ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒread_seqcount_begin (C macro)”Œc.read_seqcount_begin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒread_seqcount_begin”h]”jì)�”}”(hŒread_seqcount_begin”h]”jò)�”}”(hŒread_seqcount_begin”h]”jø)�”}”(hjë h]”hŒread_seqcount_begin”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjñ ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjí h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M$ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjé h²hh³j h´M$ubah}”(h]”jä ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j h´M$hjæ h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjæ h²hh³j h´M$ubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j! j9j! j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``read_seqcount_begin (s)``”h]”jX)�”}”(hj' h]”hŒread_seqcount_begin (s)”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj% ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M&hj¾h²hubj¥)�”}”(hŒ)begin a seqcount_t read critical section ”h]”hï)�”}”(hŒ(begin a seqcount_t read critical section”h]”hŒ(begin a seqcount_t read critical section”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M$hj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jO h´M$hj¾h²hubjo)�”}”(hŒ‘**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Return** count to be passed to read_seqcount_retry()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj\ h]”hŒ Parameters”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M(hjV ubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hj{ h]”hŒs”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M%hju ubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j� h´M%hj‘ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hju ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j� h´M%hjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjV ubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hj¶ h]”hŒReturn”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj´ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M'hjV ubhï)�”}”(hŒ+count to be passed to read_seqcount_retry()”h]”hŒ+count to be passed to read_seqcount_retry()”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M'hjV ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒraw_read_seqcount (C macro)”Œc.raw_read_seqcount”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒraw_read_seqcount”h]”jì)�”}”(hŒraw_read_seqcount”h]”jò)�”}”(hŒraw_read_seqcount”h]”jø)�”}”(hjõ h]”hŒraw_read_seqcount”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjû ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj÷ h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M0ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjó h²hh³j h´M0ubah}”(h]”jî ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j h´M0hjð h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjð h²hh³j h´M0ubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j+ j9j+ j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``raw_read_seqcount (s)``”h]”jX)�”}”(hj1 h]”hŒraw_read_seqcount (s)”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj/ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M2hj¾h²hubj¥)�”}”(hŒ&read the raw seqcount_t counter value ”h]”hï)�”}”(hŒ%read the raw seqcount_t counter value”h]”hŒ%read the raw seqcount_t counter value”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M0hjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jY h´M0hj¾h²hubjo)�”}”(hXs**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Description** raw_read_seqcount opens a read critical section of the given seqcount_t, without any lockdep checking, and without checking or masking the sequence counter LSB. Calling code is responsible for handling that. **Return** count to be passed to read_seqcount_retry()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjf h]”hŒ Parameters”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjd ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M4hj` ubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hj… h]”hŒs”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjƒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M1hj ubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jš h´M1hj› ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jš h´M1hj| ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj` ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjÀ h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj¾ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M3hj` ubhï)�”}”(hŒÏraw_read_seqcount opens a read critical section of the given seqcount_t, without any lockdep checking, and without checking or masking the sequence counter LSB. Calling code is responsible for handling that.”h]”hŒÏraw_read_seqcount opens a read critical section of the given seqcount_t, without any lockdep checking, and without checking or masking the sequence counter LSB. Calling code is responsible for handling that.”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M2hj` ubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hjç h]”hŒReturn”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjå ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M7hj` ubhï)�”}”(hŒ+count to be passed to read_seqcount_retry()”h]”hŒ+count to be passed to read_seqcount_retry()”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M8hj` ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ raw_seqcount_try_begin (C macro)”Œc.raw_seqcount_try_begin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒraw_seqcount_try_begin”h]”jì)�”}”(hŒraw_seqcount_try_begin”h]”jò)�”}”(hŒraw_seqcount_try_begin”h]”jø)�”}”(hj& h]”hŒraw_seqcount_try_begin”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj, ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj( h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MCubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj$ h²hh³jC h´MCubah}”(h]”j ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jC h´MChj! h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hj! h²hh³jC h´MCubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j\ j9j\ j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ%``raw_seqcount_try_begin (s, start)``”h]”jX)�”}”(hjb h]”hŒ!raw_seqcount_try_begin (s, start)”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj` ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MEhj¾h²hubj¥)�”}”(hŒSbegin a seqcount_t read critical section w/o lockdep and w/o counter stabilization ”h]”hï)�”}”(hŒRbegin a seqcount_t read critical section w/o lockdep and w/o counter stabilization”h]”hŒRbegin a seqcount_t read critical section w/o lockdep and w/o counter stabilization”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MChjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jŠ h´MChj¾h²hubjo)�”}”(hX.**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ``start`` count to be passed to read_seqcount_retry() **Description** Similar to raw_seqcount_begin(), except it enables eliding the critical section entirely if odd, instead of doing the speculation knowing it will fail. Useful when counter stabilization is more or less equivalent to taking the lock and there is a slowpath that does that. If true, start will be set to the (even) sequence count read. **Return** true when a read critical section is started.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj— h]”hŒ Parameters”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MGhj‘ ubj�)�”}”(hhh]”(j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hj¶ h]”hŒs”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj´ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MEhj° ubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jË h´MEhjÌ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj° ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jË h´MEhj­ ubj”)�”}”(hŒ6``start`` count to be passed to read_seqcount_retry() ”h]”(jš)�”}”(hŒ ``start``”h]”jX)�”}”(hjï h]”hŒstart”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjí ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MFhjé ubj´)�”}”(hhh]”hï)�”}”(hŒ+count to be passed to read_seqcount_retry()”h]”hŒ+count to be passed to read_seqcount_retry()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j h´MFhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjé ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j h´MFhj­ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj‘ ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj* h]”hŒ Description”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MHhj‘ ubhï)�”}”(hŒ—Similar to raw_seqcount_begin(), except it enables eliding the critical section entirely if odd, instead of doing the speculation knowing it will fail.”h]”hŒ—Similar to raw_seqcount_begin(), except it enables eliding the critical section entirely if odd, instead of doing the speculation knowing it will fail.”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MGhj‘ ubhï)�”}”(hŒwUseful when counter stabilization is more or less equivalent to taking the lock and there is a slowpath that does that.”h]”hŒwUseful when counter stabilization is more or less equivalent to taking the lock and there is a slowpath that does that.”…”�”}”(hjO h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MKhj‘ ubhï)�”}”(hŒ=If true, start will be set to the (even) sequence count read.”h]”hŒ=If true, start will be set to the (even) sequence count read.”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MNhj‘ ubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hjo h]”hŒReturn”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjm ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MPhj‘ ubhï)�”}”(hŒ-true when a read critical section is started.”h]”hŒ-true when a read critical section is started.”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MQhj‘ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒraw_seqcount_begin (C macro)”Œc.raw_seqcount_begin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒraw_seqcount_begin”h]”jì)�”}”(hŒraw_seqcount_begin”h]”jò)�”}”(hŒraw_seqcount_begin”h]”jø)�”}”(hj® h]”hŒraw_seqcount_begin”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj´ ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj° h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MZubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj¬ h²hh³jË h´MZubah}”(h]”j§ ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jË h´MZhj© h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hj© h²hh³jË h´MZubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jä j9jä j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``raw_seqcount_begin (s)``”h]”jX)�”}”(hjê h]”hŒraw_seqcount_begin (s)”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M\hj¾h²hubj¥)�”}”(hŒSbegin a seqcount_t read critical section w/o lockdep and w/o counter stabilization ”h]”hï)�”}”(hŒRbegin a seqcount_t read critical section w/o lockdep and w/o counter stabilization”h]”hŒRbegin a seqcount_t read critical section w/o lockdep and w/o counter stabilization”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MZhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jh´MZhj¾h²hubjo)�”}”(hX£**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Description** raw_seqcount_begin opens a read critical section of the given seqcount_t. Unlike read_seqcount_begin(), this function will not wait for the count to stabilize. If a writer is active when it begins, it will fail the read_seqcount_retry() at the end of the read critical section instead of stabilizing at the beginning of it. Use this only in special kernel hot paths where the read section is small and has a high probability of success through other external means. It will save a single branching instruction. **Return** count to be passed to read_seqcount_retry()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjh]”hŒ Parameters”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M^hjubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hj>h]”hŒs”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M\hj8ubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jSh´M\hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jSh´M\hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjyh]”hŒ Description”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M^hjubhï)�”}”(hXCraw_seqcount_begin opens a read critical section of the given seqcount_t. Unlike read_seqcount_begin(), this function will not wait for the count to stabilize. If a writer is active when it begins, it will fail the read_seqcount_retry() at the end of the read critical section instead of stabilizing at the beginning of it.”h]”hXCraw_seqcount_begin opens a read critical section of the given seqcount_t. Unlike read_seqcount_begin(), this function will not wait for the count to stabilize. If a writer is active when it begins, it will fail the read_seqcount_retry() at the end of the read critical section instead of stabilizing at the beginning of it.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M]hjubhï)�”}”(hŒºUse this only in special kernel hot paths where the read section is small and has a high probability of success through other external means. It will save a single branching instruction.”h]”hŒºUse this only in special kernel hot paths where the read section is small and has a high probability of success through other external means. It will save a single branching instruction.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mchjubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hj¯h]”hŒReturn”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mghjubhï)�”}”(hŒ+count to be passed to read_seqcount_retry()”h]”hŒ+count to be passed to read_seqcount_retry()”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ__read_seqcount_retry (C macro)”Œc.__read_seqcount_retry”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ__read_seqcount_retry”h]”jì)�”}”(hŒ__read_seqcount_retry”h]”jò)�”}”(hŒ__read_seqcount_retry”h]”jø)�”}”(hjîh]”hŒ__read_seqcount_retry”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjôubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjðh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mtubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjìh²hh³j h´Mtubah}”(h]”jçah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j h´Mthjéh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjéh²hh³j h´Mtubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j$j9j$j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ$``__read_seqcount_retry (s, start)``”h]”jX)�”}”(hj*h]”hŒ __read_seqcount_retry (s, start)”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mvhj¾h²hubj¥)�”}”(hŒ*end a seqcount_t read section w/o barrier ”h]”hï)�”}”(hŒ)end a seqcount_t read section w/o barrier”h]”hŒ)end a seqcount_t read section w/o barrier”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mthj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jRh´Mthj¾h²hubjo)�”}”(hX$**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ``start`` count, from read_seqcount_begin() **Description** __read_seqcount_retry is like read_seqcount_retry, but has no smp_rmb() barrier. Callers should ensure that smp_rmb() or equivalent ordering is provided before actually loading any of the variables that are to be protected in this critical section. Use carefully, only in critical code, and comment how the barrier is provided. **Return** true if a read section retry is required, else false”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj_h]”hŒ Parameters”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MxhjYubj�)�”}”(hhh]”(j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hj~h]”hŒs”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Muhjxubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j“h´Muhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j“h´Muhjuubj”)�”}”(hŒ,``start`` count, from read_seqcount_begin() ”h]”(jš)�”}”(hŒ ``start``”h]”jX)�”}”(hj·h]”hŒstart”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mvhj±ubj´)�”}”(hhh]”hï)�”}”(hŒ!count, from read_seqcount_begin()”h]”hŒ!count, from read_seqcount_begin()”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jÌh´MvhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jÌh´Mvhjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjYubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjòh]”hŒ Description”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MxhjYubhï)�”}”(hŒø__read_seqcount_retry is like read_seqcount_retry, but has no smp_rmb() barrier. Callers should ensure that smp_rmb() or equivalent ordering is provided before actually loading any of the variables that are to be protected in this critical section.”h]”hŒø__read_seqcount_retry is like read_seqcount_retry, but has no smp_rmb() barrier. Callers should ensure that smp_rmb() or equivalent ordering is provided before actually loading any of the variables that are to be protected in this critical section.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”u• h1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MwhjYubhï)�”}”(hŒNUse carefully, only in critical code, and comment how the barrier is provided.”h]”hŒNUse carefully, only in critical code, and comment how the barrier is provided.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M|hjYubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hj(h]”hŒReturn”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjYubhï)�”}”(hŒ4true if a read section retry is required, else false”h]”hŒ4true if a read section retry is required, else false”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M€hjYubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒread_seqcount_retry (C macro)”Œc.read_seqcount_retry”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒread_seqcount_retry”h]”jì)�”}”(hŒread_seqcount_retry”h]”jò)�”}”(hŒread_seqcount_retry”h]”jø)�”}”(hjgh]”hŒread_seqcount_retry”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjmubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjih²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MŒubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjeh²hh³j„h´MŒubah}”(h]”j`ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j„h´MŒhjbh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjbh²hh³j„h´MŒubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j�j9j�j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ"``read_seqcount_retry (s, start)``”h]”jX)�”}”(hj£h]”hŒread_seqcount_retry (s, start)”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MŽhj¾h²hubj¥)�”}”(hŒ'end a seqcount_t read critical section ”h]”hï)�”}”(hŒ&end a seqcount_t read critical section”h]”hŒ&end a seqcount_t read critical section”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MŒhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jËh´MŒhj¾h²hubjo)�”}”(hXw**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ``start`` count, from read_seqcount_begin() **Description** read_seqcount_retry closes the read critical section of given seqcount_t. If the critical section was invalid, it must be ignored (and typically retried). **Return** true if a read section retry is required, else false”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjØh]”hŒ Parameters”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M�hjÒubj�)�”}”(hhh]”(j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hj÷h]”hŒs”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M�hjñubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hjh²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&]”uh1j“h³j h´M�hjîubj”)�”}”(hŒ,``start`` count, from read_seqcount_begin() ”h]”(jš)�”}”(hŒ ``start``”h]”jX)�”}”(hj0h]”hŒstart”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MŽhj*ubj´)�”}”(hhh]”hï)�”}”(hŒ!count, from read_seqcount_begin()”h]”hŒ!count, from read_seqcount_begin()”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jEh´MŽhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jEh´MŽhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjÒubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjkh]”hŒ Description”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M�hjÒubhï)�”}”(hŒ›read_seqcount_retry closes the read critical section of given seqcount_t. If the critical section was invalid, it must be ignored (and typically retried).”h]”hŒ›read_seqcount_retry closes the read critical section of given seqcount_t. If the critical section was invalid, it must be ignored (and typically retried).”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M�hjÒubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hj’h]”hŒReturn”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M“hjÒubhï)�”}”(hŒ4true if a read section retry is required, else false”h]”hŒ4true if a read section retry is required, else false”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M”hjÒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ"raw_write_seqcount_begin (C macro)”Œc.raw_write_seqcount_begin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒraw_write_seqcount_begin”h]”jì)�”}”(hŒraw_write_seqcount_begin”h]”jò)�”}”(hŒraw_write_seqcount_begin”h]”jø)�”}”(hjÑh]”hŒraw_write_seqcount_begin”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj×ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjÓh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjÏh²hh³jîh´M ubah}”(h]”jÊah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jîh´M hjÌh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÌh²hh³jîh´M ubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jj9jj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ ``raw_write_seqcount_begin (s)``”h]”jX)�”}”(hj h]”hŒraw_write_seqcount_begin (s)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¢hj¾h²hubj¥)�”}”(hŒ-start a seqcount_t write section w/o lockdep ”h]”hï)�”}”(hŒ,start a seqcount_t write section w/o lockdep”h]”hŒ,start a seqcount_t write section w/o lockdep”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j5h´M hj¾h²hubjo)�”}”(hŒƒ**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Context** check write_seqcount_begin()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjBh]”hŒ Parameters”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¤hj<ubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjah]”hŒs”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¡hj[ubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jvh´M¡hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jvh´M¡hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj<ubhï)�”}”(hŒ **Context**”h]”jy)�”}”(hjœh]”hŒContext”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M£hj<ubhï)�”}”(hŒcheck write_seqcount_begin()”h]”hŒcheck write_seqcount_begin()”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M£hj<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ raw_write_seqcount_end (C macro)”Œc.raw_write_seqcount_end”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒraw_write_seqcount_end”h]”jì)�”}”(hŒraw_write_seqcount_end”h]”jò)�”}”(hŒraw_write_seqcount_end”h]”jø)�”}”(hjÛh]”hŒraw_write_seqcount_end”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjáubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjÝh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mµubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjÙh²hh³jøh´Mµubah}”(h]”jÔah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jøh´MµhjÖh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÖh²hh³jøh´Mµubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jj9jj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``raw_write_seqcount_end (s)``”h]”jX)�”}”(hjh]”hŒraw_write_seqcount_end (s)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M·hj¾h²hubj¥)�”}”(hŒ+end a seqcount_t write section w/o lockdep ”h]”hï)�”}”(hŒ*end a seqcount_t write section w/o lockdep”h]”hŒ*end a seqcount_t write section w/o lockdep”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mµhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j?h´Mµhj¾h²hubjo)�”}”(hŒ�**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Context** check write_seqcount_end()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjLh]”hŒ Parameters”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¹hjFubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjkh]”hŒs”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¶hjeubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j€h´M¶hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j€h´M¶hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjFubhï)�”}”(hŒ **Context**”h]”jy)�”}”(hj¦h]”hŒContext”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¸hjFubhï)�”}”(hŒcheck write_seqcount_end()”h]”hŒcheck write_seqcount_end()”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¸hjFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ%write_seqcount_begin_nested (C macro)”Œc.write_seqcount_begin_nested”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒwrite_seqcount_begin_nested”h]”jì)�”}”(hŒwrite_seqcount_begin_nested”h]”jò)�”}”(hŒwrite_seqcount_begin_nested”h]”jø)�”}”(hjåh]”hŒwrite_seqcount_begin_nested”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjëubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjçh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÊubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjãh²hh³jh´MÊubah}”(h]”jÞah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jh´MÊhjàh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjàh²hh³jh´MÊubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jj9jj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ-``write_seqcount_begin_nested (s, subclass)``”h]”jX)�”}”(hj!h]”hŒ)write_seqcount_begin_nested (s, subclass)”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÌhj¾h²hubj¥)�”}”(hŒCstart a seqcount_t write section with custom lockdep nesting level ”h]”hï)�”}”(hŒBstart a seqcount_t write section with custom lockdep nesting level”h]”hŒBstart a seqcount_t write section with custom lockdep nesting level”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÊhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jIh´MÊhj¾h²hubjo)�”}”(hŒè**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ``subclass`` lockdep nesting level **Description** See Documentation/locking/lockdep-design.rst **Context** check write_seqcount_begin()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjVh]”hŒ Parameters”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÎhjPubj�)�”}”(hhh]”(j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjuh]”hŒs”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÌhjoubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jŠh´MÌhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jŠh´MÌhjlubj”)�”}”(hŒ#``subclass`` lockdep nesting level ”h]”(jš)�”}”(hŒ ``subclass``”h]”jX)�”}”(hj®h]”hŒsubclass”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÍhj¨ubj´)�”}”(hhh]”hï)�”}”(hŒlockdep nesting level”h]”hŒlockdep nesting level”…”�”}”(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&]”uh1j“h³jÃh´MÍhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjPubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjéh]”hŒ Description”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÏhjPubhï)�”}”(hŒ,See Documentation/locking/lockdep-design.rst”h]”hŒ,See Documentation/locking/lockdep-design.rst”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÎhjPubhï)�”}”(hŒ **Context**”h]”jy)�”}”(hjh]”hŒContext”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÐhjPubhï)�”}”(hŒcheck write_seqcount_begin()”h]”hŒcheck write_seqcount_begin()”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÐhjPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒwrite_seqcount_begin (C macro)”Œc.write_seqcount_begin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒwrite_seqcount_begin”h]”jì)�”}”(hŒwrite_seqcount_begin”h]”jò)�”}”(hŒwrite_seqcount_begin”h]”jø)�”}”(hjOh]”hŒwrite_seqcount_begin”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjUubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjQh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mãubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjMh²hh³jlh´Mãubah}”(h]”jHah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jlh´MãhjJh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjJh²hh³jlh´Mãubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j…j9j…j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``write_seqcount_begin (s)``”h]”jX)�”}”(hj‹h]”hŒwrite_seqcount_begin (s)”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Måhj¾h²hubj¥)�”}”(hŒ/start a seqcount_t write side critical section ”h]”hï)�”}”(hŒ.start a seqcount_t write side critical section”h]”hŒ.start a seqcount_t write side critical section”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mãhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j³h´Mãhj¾h²hubjo)�”}”(hX©**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Context** sequence counter write side sections must be serialized and non-preemptible. Preemption will be automatically disabled if and only if the seqcount write serialization lock is associated, and preemptible. If readers can be invoked from hardirq or softirq context, interrupts or bottom halves must be respectively disabled.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjÀh]”hŒ Parameters”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mçhjºubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjßh]”hŒs”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MähjÙubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(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&]”uh1j“h³jôh´MähjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjºubhï)�”}”(hŒ **Context**”h]”jy)�”}”(hjh]”hŒContext”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mæhjºubhï)�”}”(hXBsequence counter write side sections must be serialized and non-preemptible. Preemption will be automatically disabled if and only if the seqcount write serialization lock is associated, and preemptible. If readers can be invoked from hardirq or softirq context, interrupts or bottom halves must be respectively disabled.”h]”hXBsequence counter write side sections must be serialized and non-preemptible. Preemption will be automatically disabled if and only if the seqcount write serialization lock is associated, and preemptible. If readers can be invoked from hardirq or softirq context, interrupts or bottom halves must be respectively disabled.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mæhjºubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒwrite_seqcount_end (C macro)”Œc.write_seqcount_end”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒwrite_seqcount_end”h]”jì)�”}”(hŒwrite_seqcount_end”h]”jò)�”}”(hŒwrite_seqcount_end”h]”jø)�”}”(hjYh]”hŒwrite_seqcount_end”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj_ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj[h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Müubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjWh²hh³jvh´Müubah}”(h]”jRah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jvh´MühjTh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjTh²hh³jvh´Müubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j�j9j�j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``write_seqcount_end (s)``”h]”jX)�”}”(hj•h]”hŒwrite_seqcount_end (s)”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mþhj¾h²hubj¥)�”}”(hŒ-end a seqcount_t write side critical section ”h]”hï)�”}”(hŒ,end a seqcount_t write side critical section”h]”hŒ,end a seqcount_t write side critical section”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mühj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j½h´Mühj¾h²hubjo)�”}”(hŒç**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Context** Preemption will be automatically re-enabled if and only if the seqcount write serialization lock is associated, and preemptible.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjÊh]”hŒ Parameters”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjÄubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjéh]”hŒs”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mýhjãubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hjh²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&]”uh1j“h³jþh´Mýhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjÄubhï)�”}”(hŒ **Context**”h]”jy)�”}”(hj$h]”hŒContext”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÿhjÄubhï)�”}”(hŒ€Preemption will be automatically re-enabled if and only if the seqcount write serialization lock is associated, and preemptible.”h]”hŒ€Preemption will be automatically re-enabled if and only if the seqcount write serialization lock is associated, and preemptible.”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÿhjÄubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ$raw_write_seqcount_barrier (C macro)”Œc.raw_write_seqcount_barrier”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒraw_write_seqcount_barrier”h]”jì)�”}”(hŒraw_write_seqcount_barrier”h]”jò)�”}”(hŒraw_write_seqcount_barrier”h]”jø)�”}”(hjch]”hŒraw_write_seqcount_barrier”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjiubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjeh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjah²hh³j€h´Mubah}”(h]”j\ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j€h´Mhj^h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hj^h²hh³j€h´Mubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j™j9j™j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ"``raw_write_seqcount_barrier (s)``”h]”jX)�”}”(hjŸh]”hŒraw_write_seqcount_barrier (s)”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj¾h²hubj¥)�”}”(hŒdo a seqcount_t write barrier ”h]”hï)�”}”(hŒdo a seqcount_t write barrier”h]”hŒdo a seqcount_t write barrier”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jÇh´Mhj¾h²hubjo)�”}”(hX£**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Description** This can be used to provide an ordering guarantee instead of the usual consistency guarantee. It is one wmb cheaper, because it can collapse the two back-to-back wmb()s. Note that writes surrounding the barrier should be declared atomic (e.g. via WRITE_ONCE): a) to ensure the writes become visible to other threads atomically, avoiding compiler optimizations; b) to document which writes are meant to propagate to the reader critical section. This is necessary because neither writes before nor after the barrier are enclosed in a seq-writer critical section that would ensure readers are aware of ongoing writes:: seqcount_t seq; bool X = true, Y = false; void read(void) { bool x, y; do { int s = read_seqcount_begin(&seq); x = X; y = Y; } while (read_seqcount_retry(&seq, s)); BUG_ON(!x && !y); } void write(void) { WRITE_ONCE(Y, true); raw_write_seqcount_barrier(seq); WRITE_ONCE(X, false); }”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjÔh]”hŒ Parameters”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjÎubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjóh]”hŒs”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhjíubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jh´Mhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjÎubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj.h]”hŒ Description”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjÎubhï)�”}”(hŒ©This can be used to provide an ordering guarantee instead of the usual consistency guarantee. It is one wmb cheaper, because it can collapse the two back-to-back wmb()s.”h]”hŒ©This can be used to provide an ordering guarantee instead of the usual consistency guarantee. It is one wmb cheaper, because it can collapse the two back-to-back wmb()s.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjÎubhï)�”}”(hX½Note that writes surrounding the barrier should be declared atomic (e.g. via WRITE_ONCE): a) to ensure the writes become visible to other threads atomically, avoiding compiler optimizations; b) to document which writes are meant to propagate to the reader critical section. This is necessary because neither writes before nor after the barrier are enclosed in a seq-writer critical section that would ensure readers are aware of ongoing writes::”h]”hX¼Note that writes surrounding the barrier should be declared atomic (e.g. via WRITE_ONCE): a) to ensure the writes become visible to other threads atomically, avoiding compiler optimizations; b) to document which writes are meant to propagate to the reader critical section. This is necessary because neither writes before nor after the barrier are enclosed in a seq-writer critical section that would ensure readers are aware of ongoing writes:”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjÎubjÓ)�”}”(hXyseqcount_t seq; bool X = true, Y = false; void read(void) { bool x, y; do { int s = read_seqcount_begin(&seq); x = X; y = Y; } while (read_seqcount_retry(&seq, s)); BUG_ON(!x && !y); } void write(void) { WRITE_ONCE(Y, true); raw_write_seqcount_barrier(seq); WRITE_ONCE(X, false); }”h]”hXyseqcount_t seq; bool X = true, Y = false; void read(void) { bool x, y; do { int s = read_seqcount_begin(&seq); x = X; y = Y; } while (read_seqcount_retry(&seq, s)); BUG_ON(!x && !y); } void write(void) { WRITE_ONCE(Y, true); raw_write_seqcount_barrier(seq); WRITE_ONCE(X, false); }”…”�”}”hjbsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÒh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ#write_seqcount_invalidate (C macro)”Œc.write_seqcount_invalidate”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒwrite_seqcount_invalidate”h]”jì)�”}”(hŒwrite_seqcount_invalidate”h]”jò)�”}”(hŒwrite_seqcount_invalidate”h]”jø)�”}”(hj‹h]”hŒwrite_seqcount_invalidate”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj‘ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj�h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MFubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj‰h²hh³j¨h´MFubah}”(h]”j„ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j¨h´MFhj†h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hj†h²hh³j¨h´MFubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jÁj9jÁj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ!``write_seqcount_invalidate (s)``”h]”jX)�”}”(hjÇh]”hŒwrite_seqcount_invalidate (s)”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MHhj¾h²hubj¥)�”}”(hŒ7invalidate in-progress seqcount_t read side operations ”h]”hï)�”}”(hŒ6invalidate in-progress seqcount_t read side operations”h]”hŒ6invalidate in-progress seqcount_t read side operations”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MFhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jïh´MFhj¾h²hubjo)�”}”(hŒç**Parameters** ``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants **Description** After write_seqcount_invalidate, no seqcount_t read side operations will complete successfully and see data older than this.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjüh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MJhjöubj�)�”}”(hhh]”j”)�”}”(hŒG``s`` Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants ”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hjh]”hŒs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MHhjubj´)�”}”(hhh]”hï)�”}”(hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”h]”hŒ@Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j0h´MHhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j0h´MHhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjöubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjVh]”hŒ Description”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MJhjöubhï)�”}”(hŒ|After write_seqcount_invalidate, no seqcount_t read side operations will complete successfully and see data older than this.”h]”hŒ|After write_seqcount_invalidate, no seqcount_t read side operations will complete successfully and see data older than this.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MIhjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒSEQCNT_LATCH_ZERO (C macro)”Œc.SEQCNT_LATCH_ZERO”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒSEQCNT_LATCH_ZERO”h]”jì)�”}”(hŒSEQCNT_LATCH_ZERO”h]”jò)�”}”(hŒSEQCNT_LATCH_ZERO”h]”jø)�”}”(hj•h]”hŒSEQCNT_LATCH_ZERO”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj›ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj—h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mgubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj“h²hh³j²h´Mgubah}”(h]”jŽah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j²h´Mghj�h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hj�h²hh³j²h´Mgubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jËj9jËj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ ``SEQCNT_LATCH_ZERO (seq_name)``”h]”jX)�”}”(hjÑh]”hŒSEQCNT_LATCH_ZERO (seq_name)”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mihj¾h²hubj¥)�”}”(hŒ(static initializer for seqcount_latch_t ”h]”hï)�”}”(hŒ'static initializer for seqcount_latch_t”h]”hŒ'static initializer for seqcount_latch_t”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mghjçubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jùh´Mghj¾h²hubjo)�”}”(hŒD**Parameters** ``seq_name`` Name of the seqcount_latch_t instance”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mkhjubj�)�”}”(hhh]”j”)�”}”(hŒ2``seq_name`` Name of the seqcount_latch_t instance”h]”(jš)�”}”(hŒ ``seq_name``”h]”jX)�”}”(hj%h]”hŒseq_name”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mmhjubj´)�”}”(hhh]”hï)�”}”(hŒ%Name of the seqcount_latch_t instance”h]”hŒ%Name of the seqcount_latch_t instance”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j:h´Mmhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒseqcount_latch_init (C macro)”Œc.seqcount_latch_init”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒseqcount_latch_init”h]”jì)�”}”(hŒseqcount_latch_init”h]”jò)�”}”(hŒseqcount_latch_init”h]”jø)�”}”(hjyh]”hŒseqcount_latch_init”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj{h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Moubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjwh²hh³j–h´Moubah}”(h]”jrah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j–h´Mohjth²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjth²hh³j–h´Moubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j¯j9j¯j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``seqcount_latch_init (s)``”h]”jX)�”}”(hjµh]”hŒseqcount_latch_init (s)”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mqhj¾h²hubj¥)�”}”(hŒ)runtime initializer for seqcount_latch_t ”h]”hï)�”}”(hŒ(runtime initializer for seqcount_latch_t”h]”hŒ(runtime initializer for seqcount_latch_t”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MohjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jÝh´Mohj¾h²hubjo)�”}”(hŒ@**Parameters** ``s`` Pointer to the seqcount_latch_t instance”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjêh]”hŒ Parameters”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mshjäubj�)�”}”(hhh]”j”)�”}”(hŒ.``s`` Pointer to the seqcount_latch_t instance”h]”(jš)�”}”(hŒ``s``”h]”jX)�”}”(hj h]”hŒs”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Muhjubj´)�”}”(hhh]”hï)�”}”(hŒ(Pointer to the seqcount_latch_t instance”h]”hŒ(Pointer to the seqcount_latch_t instance”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mphjubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jh´Muhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjäubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ$raw_read_seqcount_latch (C function)”Œc.raw_read_seqcount_latch”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ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&]”uh1j“h³j:h´MŠhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj`h]”hŒ Description”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MŒhjubhï)�”}”(hŒNSee write_seqcount_latch() for details and a full reader/writer usage example.”h]”hŒNSee write_seqcount_latch() for details and a full reader/writer usage example.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M‹hjubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hj‡h]”hŒReturn”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MŽhjubhï)�”}”(hŒ§sequence counter raw value. Use the lowest bit as an index for picking which data copy to read. The full counter must then be checked with read_seqcount_latch_retry().”h]”hŒ§sequence counter raw value. Use the lowest bit as an index for picking which data copy to read. The full counter must then be checked with read_seqcount_latch_retry().”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M�hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ*raw_read_seqcount_latch_retry (C function)”Œc.raw_read_seqcount_latch_retry”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒMint raw_read_seqcount_latch_retry (const seqcount_latch_t *s, unsigned start)”h]”jì)�”}”(hŒLint raw_read_seqcount_latch_retry(const seqcount_latch_t *s, unsigned start)”h]”(jd)�”}”(hŒint”h]”hŒint”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÈh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mšubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjÈh²hh³jÚh´Mšubjò)�”}”(hŒraw_read_seqcount_latch_retry”h]”jø)�”}”(hŒraw_read_seqcount_latch_retry”h]”hŒraw_read_seqcount_latch_retry”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjéubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjÈh²hh³jÚh´MšubjŸ)�”}”(hŒ+(const seqcount_latch_t *s, unsigned start)”h]”(j¥)�”}”(hŒconst seqcount_latch_t *s”h]”(j«)�”}”(hj®h]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j·ah"]”h$]”h&]”uh1jªhjubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjubh)�”}”(hhh]”jø)�”}”(hŒseqcount_latch_t”h]”hŒseqcount_latch_t”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j)Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjïsbŒc.raw_read_seqcount_latch_retry”†”asbuh1hhjubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjubj)�”}”(hjh]”hŒ*”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubjø)�”}”(hjh]”hŒs”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjubj¥)�”}”(hŒunsigned start”h]”(jd)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjvubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjvubjø)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjÈh²hh³jÚh´Mšubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjÄh²hh³jÚh´Mšubah}”(h]”j¿ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jÚh´MšhjÁh²hubj%)�”}”(hhh]”hï)�”}”(hŒ#end a seqcount_latch_t read section”h]”hŒ#end a seqcount_latch_t read section”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mšhj½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÁh²hh³jÚh´Mšubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jØj9jØj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒÉ**Parameters** ``const seqcount_latch_t *s`` Pointer to seqcount_latch_t ``unsigned start`` count, from raw_read_seqcount_latch() **Return** true if a read section retry is required, else false”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjâh]”hŒ Parameters”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MžhjÜubj�)�”}”(hhh]”(j”)�”}”(hŒ:``const seqcount_latch_t *s`` Pointer to seqcount_latch_t ”h]”(jš)�”}”(hŒ``const seqcount_latch_t *s``”h]”jX)�”}”(hj h]”hŒconst seqcount_latch_t *s”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M›hjûubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqcount_latch_t”h]”hŒPointer to seqcount_latch_t”…”�”}”(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&]”uh1j“h³j h´M›hjøubj”)�”}”(hŒ9``unsigned start`` count, from raw_read_seqcount_latch() ”h]”(jš)�”}”(hŒ``unsigned start``”h]”jX)�”}”(hj: h]”hŒunsigned start”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mœhj4 ubj´)�”}”(hhh]”hï)�”}”(hŒ%count, from raw_read_seqcount_latch()”h]”hŒ%count, from raw_read_seqcount_latch()”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jO h´MœhjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj4 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jO h´Mœhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjÜubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hju h]”hŒReturn”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MžhjÜubhï)�”}”(hŒ4true if a read section retry is required, else false”h]”hŒ4true if a read section retry is required, else false”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MžhjÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ&read_seqcount_latch_retry (C function)”Œc.read_seqcount_latch_retry”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒIint read_seqcount_latch_retry (const seqcount_latch_t *s, unsigned start)”h]”jì)�”}”(hŒHint read_seqcount_latch_retry(const seqcount_latch_t *s, unsigned start)”h]”(jd)�”}”(hŒint”h]”hŒint”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¶ h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¨ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj¶ h²hh³jÈ h´M¨ubjò)�”}”(hŒread_seqcount_latch_retry”h]”jø)�”}”(hŒread_seqcount_latch_retry”h]”hŒread_seqcount_latch_retry”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj× ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj¶ h²hh³jÈ h´M¨ubjŸ)�”}”(hŒ+(const seqcount_latch_t *s, unsigned start)”h]”(j¥)�”}”(hŒconst seqcount_latch_t *s”h]”(j«)�”}”(hj®h]”hŒconst”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”j·ah"]”h$]”h&]”uh1jªhjó ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjó ubh)�”}”(hhh]”jø)�”}”(hŒseqcount_latch_t”h]”hŒseqcount_latch_t”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j!Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjÝ sbŒc.read_seqcount_latch_retry”†”asbuh1hhjó ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5!h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjó ubj)�”}”(hjh]”hŒ*”…”�”}”(hjC!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjó ubjø)�”}”(hjh]”hŒs”…”�”}”(hjP!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjó ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjï ubj¥)�”}”(hŒunsigned start”h]”(jd)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh!h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjd!ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv!h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjd!ubjø)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj„!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjd!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjï ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj¶ h²hh³jÈ h´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj² h²hh³jÈ h´M¨ubah}”(h]”j­ ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jÈ h´M¨hj¯ h²hubj%)�”}”(hhh]”hï)�”}”(hŒ#end a seqcount_latch_t read section”h]”hŒ#end a seqcount_latch_t read section”…”�”}”(hj®!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¨hj«!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj¯ h²hh³jÈ h´M¨ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jÆ!j9jÆ!j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒÅ**Parameters** ``const seqcount_latch_t *s`` Pointer to seqcount_latch_t ``unsigned start`` count, from read_seqcount_latch() **Return** true if a read section retry is required, else false”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjÐ!h]”hŒ Parameters”…”�”}”(hjÒ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÎ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¬hjÊ!ubj�)�”}”(hhh]”(j”)�”}”(hŒ:``const seqcount_latch_t *s`` Pointer to seqcount_latch_t ”h]”(jš)�”}”(hŒ``const seqcount_latch_t *s``”h]”jX)�”}”(hjï!h]”hŒconst seqcount_latch_t *s”…”�”}”(hjñ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjí!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M©hjé!ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqcount_latch_t”h]”hŒPointer to seqcount_latch_t”…”�”}”(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&]”uh1j“h³j"h´M©hjæ!ubj”)�”}”(hŒ5``unsigned start`` count, from read_seqcount_latch() ”h]”(jš)�”}”(hŒ``unsigned start``”h]”jX)�”}”(hj("h]”hŒunsigned start”…”�”}”(hj*"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj&"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mªhj""ubj´)�”}”(hhh]”hï)�”}”(hŒ!count, from read_seqcount_latch()”h]”hŒ!count, from read_seqcount_latch()”…”�”}”(hjA"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&]”uh1j“h³j="h´Mªhjæ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjÊ!ubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hjc"h]”hŒReturn”…”�”}”(hje"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhja"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¬hjÊ!ubhï)�”}”(hŒ4true if a read section retry is required, else false”h]”hŒ4true if a read section retry is required, else false”…”�”}”(hjy"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¬hjÊ!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ%raw_write_seqcount_latch (C function)”Œc.raw_write_seqcount_latch”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ3void raw_write_seqcount_latch (seqcount_latch_t *s)”h]”jì)�”}”(hŒ2void raw_write_seqcount_latch(seqcount_latch_t *s)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¨"h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¤"h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¶ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·"h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj¤"h²hh³j¶"h´M¶ubjò)�”}”(hŒraw_write_seqcount_latch”h]”jø)�”}”(hŒraw_write_seqcount_latch”h]”hŒraw_write_seqcount_latch”…”�”}”(hjÉ"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÅ"ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj¤"h²hh³j¶"h´M¶ubjŸ)�”}”(hŒ(seqcount_latch_t *s)”h]”j¥)�”}”(hŒseqcount_latch_t *s”h]”(h)�”}”(hhh]”jø)�”}”(hŒseqcount_latch_t”•1h]”hŒseqcount_latch_t”…”�”}”(hjè"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjå"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”jê"Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjË"sbŒc.raw_write_seqcount_latch”†”asbuh1hhjá"ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjá"ubj)�”}”(hjh]”hŒ*”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjá"ubjø)�”}”(hjh]”hŒs”…”�”}”(hj##h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjá"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjÝ"ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj¤"h²hh³j¶"h´M¶ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj "h²hh³j¶"h´M¶ubah}”(h]”j›"ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j¶"h´M¶hj�"h²hubj%)�”}”(hhh]”hï)�”}”(hŒ'redirect latch readers to even/odd copy”h]”hŒ'redirect latch readers to even/odd copy”…”�”}”(hjL#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¶hjI#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj�"h²hh³j¶"h´M¶ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jd#j9jd#j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒE**Parameters** ``seqcount_latch_t *s`` Pointer to seqcount_latch_t”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjn#h]”hŒ Parameters”…”�”}”(hjp#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjl#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mºhjh#ubj�)�”}”(hhh]”j”)�”}”(hŒ3``seqcount_latch_t *s`` Pointer to seqcount_latch_t”h]”(jš)�”}”(hŒ``seqcount_latch_t *s``”h]”jX)�”}”(hj�#h]”hŒseqcount_latch_t *s”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj‹#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¼hj‡#ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqcount_latch_t”h]”hŒPointer to seqcount_latch_t”…”�”}”(hj¦#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M·hj£#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj‡#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j¢#h´M¼hj„#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjh#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ'write_seqcount_latch_begin (C function)”Œc.write_seqcount_latch_begin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ5void write_seqcount_latch_begin (seqcount_latch_t *s)”h]”jì)�”}”(hŒ4void write_seqcount_latch_begin(seqcount_latch_t *s)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjç#h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjã#h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÁubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö#h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjã#h²hh³jõ#h´MÁubjò)�”}”(hŒwrite_seqcount_latch_begin”h]”jø)�”}”(hŒwrite_seqcount_latch_begin”h]”hŒwrite_seqcount_latch_begin”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj$ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjã#h²hh³jõ#h´MÁubjŸ)�”}”(hŒ(seqcount_latch_t *s)”h]”j¥)�”}”(hŒseqcount_latch_t *s”h]”(h)�”}”(hhh]”jø)�”}”(hŒseqcount_latch_t”h]”hŒseqcount_latch_t”…”�”}”(hj'$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj$$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j)$Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj $sbŒc.write_seqcount_latch_begin”†”asbuh1hhj $ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG$h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj $ubj)�”}”(hjh]”hŒ*”…”�”}”(hjU$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj $ubjø)�”}”(hjh]”hŒs”…”�”}”(hjb$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj $ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj$ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjã#h²hh³jõ#h´MÁubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjß#h²hh³jõ#h´MÁubah}”(h]”jÚ#ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jõ#h´MÁhjÜ#h²hubj%)�”}”(hhh]”hï)�”}”(hŒ"redirect latch readers to odd copy”h]”hŒ"redirect latch readers to odd copy”…”�”}”(hj‹$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÁhjˆ$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÜ#h²hh³jõ#h´MÁubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j£$j9j£$j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hXè **Parameters** ``seqcount_latch_t *s`` Pointer to seqcount_latch_t **Description** The latch technique is a multiversion concurrency control method that allows queries during non-atomic modifications. If you can guarantee queries never interrupt the modification -- e.g. the concurrency is strictly between CPUs -- you most likely do not need this. Where the traditional RCU/lockless data structures rely on atomic modifications to ensure queries observe either the old or the new state the latch allows the same for non-atomic updates. The trade-off is doubling the cost of storage; we have to maintain two copies of the entire data structure. Very simply put: we first modify one copy and then the other. This ensures there is always one copy in a stable state, ready to give us an answer. The basic form is a data structure like:: struct latch_struct { seqcount_latch_t seq; struct data_struct data[2]; }; Where a modification, which is assumed to be externally serialized, does the following:: void latch_modify(struct latch_struct *latch, ...) { write_seqcount_latch_begin(&latch->seq); modify(latch->data[0], ...); write_seqcount_latch(&latch->seq); modify(latch->data[1], ...); write_seqcount_latch_end(&latch->seq); } The query will have a form like:: struct entry *latch_query(struct latch_struct *latch, ...) { struct entry *entry; unsigned seq, idx; do { seq = read_seqcount_latch(&latch->seq); idx = seq & 0x01; entry = data_query(latch->data[idx], ...); // This includes needed smp_rmb() } while (read_seqcount_latch_retry(&latch->seq, seq)); return entry; } So during the modification, queries are first redirected to data[1]. Then we modify data[0]. When that is complete, we redirect queries back to data[0] and we can modify data[1]. **NOTE** The non-requirement for atomic modifications does _NOT_ include the publishing of new entries in the case where data is a dynamic data structure. An iteration might start in data[0] and get suspended long enough to miss an entire modification sequence, once it resumes it might observe the new entry. NOTE2: When data is a dynamic data structure; one should use regular RCU patterns to manage the lifetimes of the objects within.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj­$h]”hŒ Parameters”…”�”}”(hj¯$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj«$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÅhj§$ubj�)�”}”(hhh]”j”)�”}”(hŒ4``seqcount_latch_t *s`` Pointer to seqcount_latch_t ”h]”(jš)�”}”(hŒ``seqcount_latch_t *s``”h]”jX)�”}”(hjÌ$h]”hŒseqcount_latch_t *s”…”�”}”(hjÎ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÊ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÂhjÆ$ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqcount_latch_t”h]”hŒPointer to seqcount_latch_t”…”�”}”(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&]”uh1j“h³já$h´MÂhjÃ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj§$ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj%h]”hŒ Description”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÄhj§$ubhï)�”}”(hX The latch technique is a multiversion concurrency control method that allows queries during non-atomic modifications. If you can guarantee queries never interrupt the modification -- e.g. the concurrency is strictly between CPUs -- you most likely do not need this.”h]”hX The latch technique is a multiversion concurrency control method that allows queries during non-atomic modifications. If you can guarantee queries never interrupt the modification -- e.g. the concurrency is strictly between CPUs -- you most likely do not need this.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÃhj§$ubhï)�”}”(hX'Where the traditional RCU/lockless data structures rely on atomic modifications to ensure queries observe either the old or the new state the latch allows the same for non-atomic updates. The trade-off is doubling the cost of storage; we have to maintain two copies of the entire data structure.”h]”hX'Where the traditional RCU/lockless data structures rely on atomic modifications to ensure queries observe either the old or the new state the latch allows the same for non-atomic updates. The trade-off is doubling the cost of storage; we have to maintain two copies of the entire data structure.”…”�”}”(hj,%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÈhj§$ubhï)�”}”(hŒ’Very simply put: we first modify one copy and then the other. This ensures there is always one copy in a stable state, ready to give us an answer.”h]”hŒ’Very simply put: we first modify one copy and then the other. This ensures there is always one copy in a stable state, ready to give us an answer.”…”�”}”(hj;%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÎhj§$ubhï)�”}”(hŒ)The basic form is a data structure like::”h]”hŒ(The basic form is a data structure like:”…”�”}”(hjJ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÑhj§$ubjÓ)�”}”(hŒfstruct latch_struct { seqcount_latch_t seq; struct data_struct data[2]; };”h]”hŒfstruct latch_struct { seqcount_latch_t seq; struct data_struct data[2]; };”…”�”}”hjY%sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÒh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÓhj§$ubhï)�”}”(hŒXWhere a modification, which is assumed to be externally serialized, does the following::”h]”hŒWWhere a modification, which is assumed to be externally serialized, does the following:”…”�”}”(hjh%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MØhj§$ubjÓ)�”}”(hX void latch_modify(struct latch_struct *latch, ...) { write_seqcount_latch_begin(&latch->seq); modify(latch->data[0], ...); write_seqcount_latch(&latch->seq); modify(latch->data[1], ...); write_seqcount_latch_end(&latch->seq); }”h]”hX void latch_modify(struct latch_struct *latch, ...) { write_seqcount_latch_begin(&latch->seq); modify(latch->data[0], ...); write_seqcount_latch(&latch->seq); modify(latch->data[1], ...); write_seqcount_latch_end(&latch->seq); }”…”�”}”hjw%sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÒh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÛhj§$ubhï)�”}”(hŒ!The query will have a form like::”h]”hŒ The query will have a form like:”…”�”}”(hj†%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mähj§$ubjÓ)�”}”(hX›struct entry *latch_query(struct latch_struct *latch, ...) { struct entry *entry; unsigned seq, idx; do { seq = read_seqcount_latch(&latch->seq); idx = seq & 0x01; entry = data_query(latch->data[idx], ...); // This includes needed smp_rmb() } while (read_seqcount_latch_retry(&latch->seq, seq)); return entry; }”h]”hX›struct entry *latch_query(struct latch_struct *latch, ...) { struct entry *entry; unsigned seq, idx; do { seq = read_seqcount_latch(&latch->seq); idx = seq & 0x01; entry = data_query(latch->data[idx], ...); // This includes needed smp_rmb() } while (read_seqcount_latch_retry(&latch->seq, seq)); return entry; }”…”�”}”hj•%sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÒh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mæhj§$ubhï)�”}”(hŒ²So during the modification, queries are first redirected to data[1]. Then we modify data[0]. When that is complete, we redirect queries back to data[0] and we can modify data[1].”h]”hŒ²So during the modification, queries are first redirected to data[1]. Then we modify data[0]. When that is complete, we redirect queries back to data[0] and we can modify data[1].”…”�”}”(hj¤%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M÷hj§$ubhï)�”}”(hŒ**NOTE**”h]”jy)�”}”(hjµ%h]”hŒNOTE”…”�”}”(hj·%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj³%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mûhj§$ubj¥)�”}”(hX.The non-requirement for atomic modifications does _NOT_ include the publishing of new entries in the case where data is a dynamic data structure. An iteration might start in data[0] and get suspended long enough to miss an entire modification sequence, once it resumes it might observe the new entry. ”h]”(hï)�”}”(hŒ‘The non-requirement for atomic modifications does _NOT_ include the publishing of new entries in the case where data is a dynamic data structure.”h]”hŒ‘The non-requirement for atomic modifications does _NOT_ include the publishing of new entries in the case where data is a dynamic data structure.”…”�”}”(hjÏ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MühjË%ubhï)�”}”(hŒšAn iteration might start in data[0] and get suspended long enough to miss an entire modification sequence, once it resumes it might observe the new entry.”h]”hŒšAn iteration might start in data[0] and get suspended long enough to miss an entire modification sequence, once it resumes it might observe the new entry.”…”�”}”(hjÞ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjË%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jÝ%h´Mühj§$ubhï)�”}”(hŒNOTE2:”h]”hŒNOTE2:”…”�”}”(hjó%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj§$ubj¥)�”}”(hŒyWhen data is a dynamic data structure; one should use regular RCU patterns to manage the lifetimes of the objects within.”h]”hï)�”}”(hŒyWhen data is a dynamic data structure; one should use regular RCU patterns to manage the lifetimes of the objects within.”h]”hŒyWhen data is a dynamic data structure; one should use regular RCU patterns to manage the lifetimes of the objects within.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j&h´Mhj§$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ!write_seqcount_latch (C function)”Œc.write_seqcount_latch”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ/void write_seqcount_latch (seqcount_latch_t *s)”h]”jì)�”}”(hŒ.void write_seqcount_latch(seqcount_latch_t *s)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj;&h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj7&h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ&h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj7&h²hh³jI&h´Mubjò)�”}”(hŒwrite_seqcount_latch”h]”jø)�”}”(hŒwrite_seqcount_latch”h]”hŒwrite_seqcount_latch”…”�”}”(hj\&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjX&ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj7&h²hh³jI&h´MubjŸ)�”}”(hŒ(seqcount_latch_t *s)”h]”j¥)�”}”(hŒseqcount_latch_t *s”h]”(h)�”}”(hhh]”jø)�”}”(hŒseqcount_latch_t”h]”hŒseqcount_latch_t”…”�”}”(hj{&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjx&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j}&Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj^&sbŒc.write_seqcount_latch”†”asbuh1hhjt&ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›&h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjt&ubj)�”}”(hjh]”hŒ*”…”�”}”(hj©&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjt&ubjø)�”}”(hjh]”hŒs”…”�”}”(hj¶&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjt&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjp&ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj7&h²hh³jI&h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj3&h²hh³jI&h´Mubah}”(h]”j.&ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jI&h´Mhj0&h²hubj%)�”}”(hhh]”hï)�”}”(hŒ#redirect latch readers to even copy”h]”hŒ#redirect latch readers to even copy”…”�”}”(hjß&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjÜ&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj0&h²hh³jI&h´Mubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j÷&j9j÷&j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒE**Parameters** ``seqcount_latch_t *s`` Pointer to seqcount_latch_t”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj'h]”hŒ Parameters”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÿ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhjû&ubj�)�”}”(hhh]”j”)�”}”(hŒ3``seqcount_latch_t *s`` Pointer to seqcount_latch_t”h]”(jš)�”}”(hŒ``seqcount_latch_t *s``”h]”jX)�”}”(hj 'h]”hŒseqcount_latch_t *s”…”�”}”(hj"'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj'ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqcount_latch_t”h]”hŒPointer to seqcount_latch_t”…”�”}”(hj9'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj6'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j5'h´Mhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjû&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ%write_seqcount_latch_end (C function)”Œc.write_seqcount_latch_end”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ3void write_seqcount_latch_end (seqcount_latch_t *s)”h]”jì)�”}”(hŒ2void write_seqcount_latch_end(seqcount_latch_t *s)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjz'h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjv'h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰'h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjv'h²hh³jˆ'h´Mubjò)�”}”(hŒwrite_seqcount_latch_end”h]”jø)�”}”(hŒwrite_seqcount_latch_end”h]”hŒwrite_seqcount_latch_end”…”�”}”(hj›'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj—'ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjv'h²hh³jˆ'h´MubjŸ)�”}”(hŒ(seqcount_latch_t *s)”h]”j¥)�”}”(hŒseqcount_latch_t *s”h]”(h)�”}”(hhh]”jø)�”}”(hŒseqcount_latch_t”h]”hŒseqcount_latch_t”…”�”}”(hjº'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj·'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j¼'Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj�'sbŒc.write_seqcount_latch_end”†”asbuh1hhj³'ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ'h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj³'ubj)�”}”(hjh]”hŒ*”…”�”}”(hjè'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³'ubjø)�”}”(hjh]”hŒs”…”�”}”(hjõ'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj³'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj¯'ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjv'h²hh³jˆ'h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjr'h²hh³jˆ'h´Mubah}”(h]”jm'ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jˆ'h´Mhjo'h²hubj%)�”}”(hhh]”hï)�”}”(hŒ$end a seqcount_latch_t write section”h]”hŒ$end a seqcount_latch_t write section”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjo'h²hh³jˆ'h´Mubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j6(j9j6(j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒË**Parameters** ``seqcount_latch_t *s`` Pointer to seqcount_latch_t **Description** Marks the end of a seqcount_latch_t writer section, after all copies of the latch-protected data have been updated.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj@(h]”hŒ Parameters”…”�”}”(hjB(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj>(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj:(ubj�)�”}”(hhh]”j”)�”}”(hŒ4``seqcount_latch_t *s`` Pointer to seqcount_latch_t ”h]”(jš)�”}”(hŒ``seqcount_latch_t *s``”h]”jX)�”}”(hj_(h]”hŒseqcount_latch_t *s”…”�”}”(hja(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj](ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjY(ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqcount_latch_t”h]”hŒPointer to seqcount_latch_t”…”�”}”(hjx(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jt(h´Mhju(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjY(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jt(h´MhjV(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj:(ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjš(h]”hŒ Description”…”�”}”(hjœ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj˜(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj:(ubhï)�”}”(hŒsMarks the end of a seqcount_latch_t writer section, after all copies of the latch-protected data have been updated.”h]”hŒsMarks the end of a seqcount_latch_t writer section, after all copies of the latch-protected data have been updated.”…”�”}”(hj°(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj:(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒseqlock_init (C macro)”Œc.seqlock_init”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ seqlock_init”h]”jì)�”}”(hŒ seqlock_init”h]”jò)�”}”(hŒ seqlock_init”h]”jø)�”}”(hjÙ(h]”hŒ seqlock_init”…”�”}”(hjã(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjß(ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjÛ(h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M-ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj×(h²hh³jö(h´M-ubah}”(h]”jÒ(ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jö(h´M-hjÔ(h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÔ(h²hh³jö(h´M-ubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j)j9j)j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``seqlock_init (sl)``”h]”jX)�”}”(hj)h]”hŒseqlock_init (sl)”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M/hj¾h²hubj¥)�”}”(hŒ"dynamic initializer for seqlock_t ”h]”hï)�”}”(hŒ!dynamic initializer for seqlock_t”h]”hŒ!dynamic initializer for seqlock_t”…”�”}”(hj/)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M-hj+)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j=)h´M-hj¾h²hubjo)�”}”(hŒ:**Parameters** ``sl`` Pointer to the seqlock_t instance”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjJ)h]”hŒ Parameters”…”�”}”(hjL)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjH)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M1hjD)ubj�)�”}”(hhh]”j”)�”}”(hŒ(``sl`` Pointer to the seqlock_t instance”h]”(jš)�”}”(hŒ``sl``”h]”jX)�”}”(hji)h]”hŒsl”…”�”}”(hjk)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjg)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M3hjc)ubj´)�”}”(hhh]”hï)�”}”(hŒ!Pointer to the seqlock_t instance”h]”hŒ!Pointer to the seqlock_t instance”…”�”}”(hj‚)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M.hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjc)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j~)h´M3hj`)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjD)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒDEFINE_SEQLOCK (C macro)”Œc.DEFINE_SEQLOCK”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒDEFINE_SEQLOCK”h]”jì)�”}”(hŒDEFINE_SEQLOCK”h]”jò)�”}”(hŒDEFINE_SEQLOCK”h]”jø)�”}”(hj½)h]”hŒDEFINE_SEQLOCK”…”�”}”(hjÇ)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÃ)ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj¿)h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M7ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj»)h²hh³jÚ)h´M7ubah}”(h]”j¶)ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jÚ)h´M7hj¸)h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hj¸)h²hh³jÚ)h´M7ubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jó)j9jó)j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ``DEFINE_SEQLOCK (sl)``”h]”jX)�”}”(hjù)h]”hŒDEFINE_SEQLOCK (sl)”…”�”}”(hjû)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj÷)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M9hj¾h²hubj¥)�”}”(hŒ(Define a statically allocated seqlock_t ”h]”hï)�”}”(hŒ'Define a statically allocated seqlock_t”h]”hŒ'Define a statically allocated seqlock_t”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M7hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j!*h´M7hj¾h²hubjo)�”}”(hŒ7**Parameters** ``sl`` Name of the seqlock_t instance”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj.*h]”hŒ Parameters”…”�”}”(hj0*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj,*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M;hj(*ubj�)�”}”(hhh]”j”)�”}”(hŒ%``sl`` Name of the seqlock_t instance”h]”(jš)�”}”(hŒ``sl``”h]”jX)�”}”(hjM*h]”hŒsl”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjK*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M=hjG*ubj´)�”}”(hhh]”hï)�”}”(hŒName of the seqlock_t instance”h]”hŒName of the seqlock_t instance”…”�”}”(hjf*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M8hjc*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjG*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jb*h´M=hjD*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj(*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒread_seqbegin (C function)”Œc.read_seqbegin”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ,unsigned read_seqbegin (const seqlock_t *sl)”h]”jì)�”}”(hŒ+unsigned read_seqbegin(const seqlock_t *sl)”h]”(jd)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj§*h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj£*h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M>ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶*h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj£*h²hh³jµ*h´M>ubjò)�”}”(hŒ read_seqbegin”h]”jø)�”}”(hŒ read_seqbegin”h]”hŒ read_seqbegin”…”�”}”(hjÈ*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÄ*ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj£*h²hh³jµ*h´M>ubjŸ)�”}”(hŒ(const seqlock_t *sl)”h]”j¥)�”}”(hŒconst seqlock_t *sl”h]”(j«)�”}”(hj®h]”hŒconst”…”�”}”(hjä*h²hh³Nh´Nubah}”(h]”h ]”j·ah"]”h$]”h&]”uh1jªhjà*ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ*h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjà*ubh)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÿ*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j+Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjÊ*sbŒc.read_seqbegin”†”asbuh1hhjà*ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"+h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjà*ubj)�”}”(hjh]”hŒ*”…”�”}”(hj0+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjà*ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hj=+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjà*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjÜ*ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj£*h²hh³jµ*h´M>ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjŸ*h²hh³jµ*h´M>ubah}”(h]”jš*ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jµ*h´M>hjœ*h²hubj%)�”}”(hhh]”hï)�”}”(hŒ,start a seqlock_t read side critical section”h]”hŒ,start a seqlock_t read side critical section”…”�”}”(hjg+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M>hjd+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjœ*h²hh³jµ*h´M>ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j+j9j+j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒr**Parameters** ``const seqlock_t *sl`` Pointer to seqlock_t **Return** count, to be passed to read_seqretry()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj‰+h]”hŒ Parameters”…”�”}”(hj‹+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj‡+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MBhjƒ+ubj�)�”}”(hhh]”j”)�”}”(hŒ-``const seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``const seqlock_t *sl``”h]”jX)�”}”(hj¨+h]”hŒconst seqlock_t *sl”…”�”}”(hjª+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¦+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M?hj¢+ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(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&]”uh1j“h³j½+h´M?hjŸ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjƒ+ubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hjã+h]”hŒReturn”…”�”}”(hjå+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjá+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MAhjƒ+ubhï)�”}”(hŒ&count, to be passed to read_seqretry()”h]”hŒ&count, to be passed to read_seqretry()”…”�”}”(hjù+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MAhjƒ+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒread_seqretry (C function)”Œc.read_seqretry”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ.h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj:.h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Maubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM.h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj:.h²hh³jL.h´Maubjò)�”}”(hŒ write_seqlock”h]”jø)�”}”(hŒ write_seqlock”h]”hŒ write_seqlock”…”�”}”(hj_.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj[.ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj:.h²hh³jL.h´MaubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj~.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj{.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j€.Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâja.sbŒc.write_seqlock”†”asbuh1hhjw.ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž.h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjw.ubj)�”}”(hjh]”hŒ*”…”�”}”(hj¬.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjw.ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hj¹.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjw.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjs.ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj:.h²hh³jL.h´Maubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj6.h²hh³jL.h´Maubah}”(h]”j1.ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jL.h´Mahj3.h²hubj%)�”}”(hhh]”hï)�”}”(hŒ-start a seqlock_t write side critical section”h]”hŒ-start a seqlock_t write side critical section”…”�”}”(hjã.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mahjà.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj3.h²hh³jL.h´Maubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jû.j9jû.j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hX**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t **Description** write_seqlock opens a write side critical section for the given seqlock_t. It also implicitly acquires the spinlock_t embedded inside that sequential lock. All seqlock_t write side sections are thus automatically serialized and non-preemptible. **Context** if the seqlock_t read section, or other write side critical sections, can be invoked from hardirq or softirq contexts, use the _irqsave or _bh variants of this function instead.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj/h]”hŒ Parameters”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mehjÿ.ubj�)�”}”(hhh]”j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hj$/h]”hŒ seqlock_t *sl”…”�”}”(hj&/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj"/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mbhj/ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj=/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j9/h´Mbhj:/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j9/h´Mbhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjÿ.ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj_/h]”hŒ Description”…”�”}”(hja/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj]/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mdhjÿ.ubhï)�”}”(hŒõwrite_seqlock opens a write side critical section for the given seqlock_t. It also implicitly acquires the spinlock_t embedded inside that sequential lock. All seqlock_t write side sections are thus automatically serialized and non-preemptible.”h]”hŒõwrite_seqlock opens a write side critical section for the given seqlock_t. It also implicitly acquires the spinlock_t embedded inside that sequential lock. All seqlock_t write side sections are thus automatically serialized and non-preemptible.”…”�”}”(hju/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mchjÿ.ubhï)�”}”(hŒ **Context**”h]”jy)�”}”(hj†/h]”hŒContext”…”�”}”(hjˆ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj„/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhhjÿ.ubhï)�”}”(hŒ±if the seqlock_t read section, or other write side critical sections, can be invoked from hardirq or softirq contexts, use the _irqsave or _bh variants of this function instead.”h]”hŒ±if the seqlock_t read section, or other write side critical sections, can be invoked from hardirq or softirq contexts, use the _irqsave or _bh variants of this function instead.”…”�”}”(hjœ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mihjÿ.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒwrite_sequnlock (C function)”Œc.write_sequnlock”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ$void write_sequnlock (seqlock_t *sl)”h]”jì)�”}”(hŒ#void write_sequnlock(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjË/h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÇ/h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Muubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ/h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjÇ/h²hh³jÙ/h´Muubjò)�”}”(hŒwrite_sequnlock”h]”jø)�”}”(hŒwrite_sequnlock”h]”hŒwrite_sequnlock”…”�”}”(hjì/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjè/ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjÇ/h²hh³jÙ/h´MuubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j 0Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjî/sbŒc.write_sequnlock”†”asbuh1hhj0ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+0h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj0ubj)�”}”(hjh]”hŒ*”…”�”}”(hj90h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hjF0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj0ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjÇ/h²hh³jÙ/h´Muubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjÃ/h²hh³jÙ/h´Muubah}”(h]”j¾/ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jÙ/h´MuhjÀ/h²hubj%)�”}”(hhh]”hï)�”}”(hŒ+end a seqlock_t write side critical section”h]”hŒ+end a seqlock_t write side critical section”…”�”}”(hjp0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Muhjm0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÀ/h²hh³jÙ/h´Muubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jˆ0j9jˆ0j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒ¶**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t **Description** write_sequnlock closes the (serialized and non-preemptible) write side critical section of given seqlock_t.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj’0h]”hŒ Parameters”…”�”}”(hj”0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj�0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MyhjŒ0ubj�)�”}”(hhh]”j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hj±0h]”hŒ seqlock_t *sl”…”�”}”(hj³0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¯0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mvhj«0ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hjÊ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jÆ0h´MvhjÇ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj«0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jÆ0h´Mvhj¨0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjŒ0ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjì0h]”hŒ Description”…”�”}”(hjî0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjê0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MxhjŒ0ubhï)�”}”(hŒkwrite_sequnlock closes the (serialized and non-preemptible) write side critical section of given seqlock_t.”h]”hŒkwrite_sequnlock closes the (serialized and non-preemptible) write side critical section of given seqlock_t.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MwhjŒ0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒwrite_seqlock_bh (C function)”Œc.write_seqlock_bh”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ%void write_seqlock_bh (seqlock_t *sl)”h]”jì)�”}”(hŒ$void write_seqlock_bh(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj11h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj-1h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mƒubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@1h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj-1h²hh³j?1h´Mƒubjò)�”}”(hŒwrite_seqlock_bh”h]”jø)�”}”(hŒwrite_seqlock_bh”h]”hŒwrite_seqlock_bh”…”�”}”(hjR1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjN1ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj-1h²hh³j?1h´MƒubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hjq1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjn1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”js1Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjT1sbŒc.write_seqlock_bh”†”asbuh1hhjj1ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘1h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjj1ubj)�”}”(hjh]”hŒ*”…”�”}”(hjŸ1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj1ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hj¬1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjf1ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj-1h²hh³j?1h´Mƒubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj)1h²hh³j?1h´Mƒubah}”(h]”j$1ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j?1h´Mƒhj&1h²hubj%)�”}”(hhh]”hï)�”}”(hŒ1start a softirqs-disabled seqlock_t write section”h]”hŒ1start a softirqs-disabled seqlock_t write section”…”�”}”(hjÖ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MƒhjÓ1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj&1h²hh³j?1h´Mƒubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jî1j9jî1j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒÑ**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t **Description** _bh variant of write_seqlock(). Use only if the read side section, or other write side sections, can be invoked from softirq contexts.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjø1h]”hŒ Parameters”…”�”}”(hjú1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjö1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M‡hjò1ubj�)�”}”(hhh]”j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hj2h]”hŒ seqlock_t *sl”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M„hj2ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj02h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j,2h´M„hj-2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j,2h´M„hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjò1ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjR2h]”hŒ Description”…”�”}”(hjT2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjP2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M†hjò1ubhï)�”}”(hŒ†_bh variant of write_seqlock(). Use only if the read side section, or other write side sections, can be invoked from softirq contexts.”h]”hŒ†_bh variant of write_seqlock(). Use only if the read side section, or other write side sections, can be invoked from softirq contexts.”…”�”}”(hjh2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M…hjò1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒwrite_sequnlock_bh (C function)”Œc.write_sequnlock_bh”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ'void write_sequnlock_bh (seqlock_t *sl)”h]”jì)�”}”(hŒ&void write_sequnlock_bh(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj—2h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj“2h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M‘ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦2h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj“2h²hh³j¥2h´M‘ubjò)�”}”(hŒwrite_sequnlock_bh”h]”jø)�”}”(hŒwrite_sequnlock_bh”h]”hŒwrite_sequnlock_bh”…”�”}”(hj¸2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj´2ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj“2h²hh³j¥2h´M‘ubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj×2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÔ2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”jÙ2Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjº2sbŒc.write_sequnlock_bh”†”asbuh1hhjÐ2ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷2h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjÐ2ubj)�”}”(hjh]”hŒ*”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐ2ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÐ2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjÌ2ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj“2h²hh³j¥2h´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj�2h²hh³j¥2h´M‘ubah}”(h]”jŠ2ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j¥2h´M‘hjŒ2h²hubj%)�”}”(hhh]”hï)�”}”(hŒ/end a softirqs-disabled seqlock_t write section”h]”hŒ/end a softirqs-disabled seqlock_t write section”…”�”}”(hj<3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M‘hj93h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjŒ2h²hh³j¥2h´M‘ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jT3j9jT3j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒâ**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t **Description** write_sequnlock_bh closes the serialized, non-preemptible, and softirqs-disabled, seqlock_t write side critical section opened with write_seqlock_bh().”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj^3h]”hŒ Parameters”…”�”}”(hj`3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj\3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M•hjX3ubj�)�”}”(hhh]”j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hj}3h]”hŒ seqlock_t *sl”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj{3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M’hjw3ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj–3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j’3h´M’hj“3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjw3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j’3h´M’hjt3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjX3ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj¸3h]”hŒ Description”…”�”}”(hjº3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj¶3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M”hjX3ubhï)�”}”(hŒ—write_sequnlock_bh closes the serialized, non-preemptible, and softirqs-disabled, seqlock_t write side critical section opened with write_seqlock_bh().”h]”hŒ—write_sequnlock_bh closes the serialized, non-preemptible, and softirqs-disabled, seqlock_t write side critical section opened with write_seqlock_bh().”…”�”}”(hjÎ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M“hjX3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒwrite_seqlock_irq (C function)”Œc.write_seqlock_irq”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ&void write_seqlock_irq (seqlock_t *sl)”h]”jì)�”}”(hŒ%void write_seqlock_irq(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjý3h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjù3h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjù3h²hh³j 4h´M ubjò)�”}”(hŒwrite_seqlock_irq”h]”jø)�”}”(hŒwrite_seqlock_irq”h]”hŒwrite_seqlock_irq”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj4ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjù3h²hh³j 4h´M ubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj=4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj:4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j?4Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj 4sbŒc.write_seqlock_irq”†”asbuh1hhj64ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]4h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj64ubj)�”}”(hjh]”hŒ*”…”�”}”(hjk4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj64ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hjx4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj64ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj24ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjù3h²hh³j 4h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjõ3h²hh³j 4h´M ubah}”(h]”jð3ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j 4h´M hjò3h²hubj%)�”}”(hhh]”hï)�”}”(hŒ1start a non-interruptible seqlock_t write section”h]”hŒ1start a non-interruptible seqlock_t write section”…”�”}”(hj¢4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M hjŸ4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjò3h²hh³j 4h´M ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jº4j9jº4j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒÍ**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t **Description** _irq variant of write_seqlock(). Use only if the read side section, or other write sections, can be invoked from hardirq contexts.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjÄ4h]”hŒ Parameters”…”�”}”(hjÆ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÂ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¤hj¾4ubj�)�”}”(hhh]”j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hjã4h]”hŒ seqlock_t *sl”…”�”}”(hjå4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjá4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¡hjÝ4ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hjü4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jø4h´M¡hjù4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjÝ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jø4h´M¡hjÚ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj¾4ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj5h]”hŒ Description”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M£hj¾4ubhï)�”}”(hŒ‚_irq variant of write_seqlock(). Use only if the read side section, or other write sections, can be invoked from hardirq contexts.”h]”hŒ‚_irq variant of write_seqlock(). Use only if the read side section, or other write sections, can be invoked from hardirq contexts.”…”�”}”(hj45h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¢hj¾4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ write_sequnlock_irq (C function)”Œc.write_sequnlock_irq”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ(void write_sequnlock_irq (seqlock_t *sl)”h]”jì)�”}”(hŒ'void write_sequnlock_irq(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjc5h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj_5h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M®ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr5h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj_5h²hh³jq5h´M®ubjò)�”}”(hŒwrite_sequnlock_irq”h]”jø)�”}”(hŒwrite_sequnlock_irq”h]”hŒwrite_sequnlock_irq”…”�”}”(hj„5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj€5ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj_5h²hh³jq5h´M®ubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj£5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj 5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j¥5Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj†5sbŒc.write_sequnlock_irq”†”asbuh1hhjœ5ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ5h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjœ5ubj)�”}”(hjh]”hŒ*”…”�”}”(hjÑ5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœ5ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hjÞ5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjœ5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj˜5ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj_5h²hh³jq5h´M®ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj[5h²hh³jq5h´M®ubah}”(h]”jV5ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jq5h´M®hjX5h²hubj%)�”}”(hhh]”hï)�”}”(hŒ/end a non-interruptible seqlock_t write section”•Qh]”hŒ/end a non-interruptible seqlock_t write section”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M®hj6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjX5h²hh³jq5h´M®ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j 6j9j 6j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒÈ**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t **Description** write_sequnlock_irq closes the serialized and non-interruptible seqlock_t write side section opened with write_seqlock_irq().”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj*6h]”hŒ Parameters”…”�”}”(hj,6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj(6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M²hj$6ubj�)�”}”(hhh]”j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hjI6h]”hŒ seqlock_t *sl”…”�”}”(hjK6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjG6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¯hjC6ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hjb6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j^6h´M¯hj_6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjC6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j^6h´M¯hj@6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj$6ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj„6h]”hŒ Description”…”�”}”(hj†6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj‚6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M±hj$6ubhï)�”}”(hŒ}write_sequnlock_irq closes the serialized and non-interruptible seqlock_t write side section opened with write_seqlock_irq().”h]”hŒ}write_sequnlock_irq closes the serialized and non-interruptible seqlock_t write side section opened with write_seqlock_irq().”…”�”}”(hjš6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M°hj$6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒwrite_seqlock_irqsave (C macro)”Œc.write_seqlock_irqsave”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒwrite_seqlock_irqsave”h]”jì)�”}”(hŒwrite_seqlock_irqsave”h]”jò)�”}”(hŒwrite_seqlock_irqsave”h]”jø)�”}”(hjÃ6h]”hŒwrite_seqlock_irqsave”…”�”}”(hjÍ6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÉ6ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjÅ6h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÆubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjÁ6h²hh³jà6h´MÆubah}”(h]”j¼6ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jà6h´MÆhj¾6h²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hj¾6h²hh³jà6h´MÆubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jù6j9jù6j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ'``write_seqlock_irqsave (lock, flags)``”h]”jX)�”}”(hjÿ6h]”hŒ#write_seqlock_irqsave (lock, flags)”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjý6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÈhj¾h²hubj¥)�”}”(hŒ2start a non-interruptible seqlock_t write section ”h]”hï)�”}”(hŒ1start a non-interruptible seqlock_t write section”h]”hŒ1start a non-interruptible seqlock_t write section”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÆhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j'7h´MÆhj¾h²hubjo)�”}”(hXJ**Parameters** ``lock`` Pointer to seqlock_t ``flags`` Stack-allocated storage for saving caller's local interrupt state, to be passed to write_sequnlock_irqrestore(). **Description** _irqsave variant of write_seqlock(). Use it only if the read side section, or other write sections, can be invoked from hardirq context.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj47h]”hŒ Parameters”…”�”}”(hj67h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj27ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÊhj.7ubj�)�”}”(hhh]”(j”)�”}”(hŒ``lock`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``lock``”h]”jX)�”}”(hjS7h]”hŒlock”…”�”}”(hjU7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjQ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÈhjM7ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hjl7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jh7h´MÈhji7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjM7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jh7h´MÈhjJ7ubj”)�”}”(hŒ{``flags`` Stack-allocated storage for saving caller's local interrupt state, to be passed to write_sequnlock_irqrestore(). ”h]”(jš)�”}”(hŒ ``flags``”h]”jX)�”}”(hjŒ7h]”hŒflags”…”�”}”(hjŽ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjŠ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÊhj†7ubj´)�”}”(hhh]”hï)�”}”(hŒpStack-allocated storage for saving caller's local interrupt state, to be passed to write_sequnlock_irqrestore().”h]”hŒrStack-allocated storage for saving caller’s local interrupt state, to be passed to write_sequnlock_irqrestore().”…”�”}”(hj¥7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÉhj¢7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj†7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j¡7h´MÊhjJ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj.7ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjÈ7h]”hŒ Description”…”�”}”(hjÊ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÆ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÌhj.7ubhï)�”}”(hŒˆ_irqsave variant of write_seqlock(). Use it only if the read side section, or other write sections, can be invoked from hardirq context.”h]”hŒˆ_irqsave variant of write_seqlock(). Use it only if the read side section, or other write sections, can be invoked from hardirq context.”…”�”}”(hjÞ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MËhj.7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ'write_sequnlock_irqrestore (C function)”Œc.write_sequnlock_irqrestore”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒDvoid write_sequnlock_irqrestore (seqlock_t *sl, unsigned long flags)”h]”jì)�”}”(hŒCvoid write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj 8h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj 8h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÓubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj 8h²hh³j8h´MÓubjò)�”}”(hŒwrite_sequnlock_irqrestore”h]”jø)�”}”(hŒwrite_sequnlock_irqrestore”h]”hŒwrite_sequnlock_irqrestore”…”�”}”(hj.8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj*8ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj 8h²hh³j8h´MÓubjŸ)�”}”(hŒ$(seqlock_t *sl, unsigned long flags)”h]”(j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hjM8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjJ8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”jO8Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj08sbŒc.write_sequnlock_irqrestore”†”asbuh1hhjF8ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm8h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjF8ubj)�”}”(hjh]”hŒ*”…”�”}”(hj{8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF8ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hjˆ8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjF8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjB8ubj¥)�”}”(hŒunsigned long flags”h]”(jd)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¡8h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj�8ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯8h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj�8ubjd)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj½8h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj�8ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË8h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj�8ubjø)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÙ8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj�8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjB8ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj 8h²hh³j8h´MÓubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj8h²hh³j8h´MÓubah}”(h]”j8ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j8h´MÓhj8h²hubj%)�”}”(hhh]”hï)�”}”(hŒ-end non-interruptible seqlock_t write section”h]”hŒ-end non-interruptible seqlock_t write section”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÓhj9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj8h²hh³j8h´MÓubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j9j9j9j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hX1**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t ``unsigned long flags`` Caller's saved interrupt state, from write_seqlock_irqsave() **Description** write_sequnlock_irqrestore closes the serialized and non-interruptible seqlock_t write section previously opened with write_seqlock_irqsave().”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj%9h]”hŒ Parameters”…”�”}”(hj'9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj#9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M×hj9ubj�)�”}”(hhh]”(j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hjD9h]”hŒ seqlock_t *sl”…”�”}”(hjF9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjB9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÕhj>9ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj]9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jY9h´MÕhjZ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj>9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jY9h´MÕhj;9ubj”)�”}”(hŒU``unsigned long flags`` Caller's saved interrupt state, from write_seqlock_irqsave() ”h]”(jš)�”}”(hŒ``unsigned long flags``”h]”jX)�”}”(hj}9h]”hŒunsigned long flags”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj{9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÖhjw9ubj´)�”}”(hhh]”hï)�”}”(hŒCaller’s saved interrupt state, from write_seqlock_irqsave()”…”�”}”(hj–9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j’9h´MÖhj“9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjw9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j’9h´MÖhj;9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj9ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj¸9h]”hŒ Description”…”�”}”(hjº9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj¶9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MØhj9ubhï)�”}”(hŒŽwrite_sequnlock_irqrestore closes the serialized and non-interruptible seqlock_t write section previously opened with write_seqlock_irqsave().”h]”hŒŽwrite_sequnlock_irqrestore closes the serialized and non-interruptible seqlock_t write section previously opened with write_seqlock_irqsave().”…”�”}”(hjÎ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M×hj9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒread_seqlock_excl (C function)”Œc.read_seqlock_excl”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ&void read_seqlock_excl (seqlock_t *sl)”h]”jì)�”}”(hŒ%void read_seqlock_excl(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjý9h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjù9h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mäubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjù9h²hh³j :h´Mäubjò)�”}”(hŒread_seqlock_excl”h]”jø)�”}”(hŒread_seqlock_excl”h]”hŒread_seqlock_excl”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj:ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjù9h²hh³j :h´MäubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj=:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj::ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j?:Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj :sbŒc.read_seqlock_excl”†”asbuh1hhj6:ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]:h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj6:ubj)�”}”(hjh]”hŒ*”…”�”}”(hjk:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6:ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hjx:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj6:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj2:ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjù9h²hh³j :h´Mäubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjõ9h²hh³j :h´Mäubah}”(h]”jð9ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j :h´Mähjò9h²hubj%)�”}”(hhh]”hï)�”}”(hŒ(begin a seqlock_t locking reader section”h]”hŒ(begin a seqlock_t locking reader section”…”�”}”(hj¢:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MähjŸ:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjò9h²hh³j :h´Mäubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jº:j9jº:j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hXT**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t **Description** read_seqlock_excl opens a seqlock_t locking reader critical section. A locking reader exclusively locks out *both* other writers *and* other locking readers, but it does not update the embedded sequence number. Locking readers act like a normal spin_lock()/spin_unlock(). The opened read section must be closed with read_sequnlock_excl(). **Context** if the seqlock_t write section, *or other read sections*, can be invoked from hardirq or softirq contexts, use the _irqsave or _bh variant of this function instead.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjÄ:h]”hŒ Parameters”…”�”}”(hjÆ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÂ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mèhj¾:ubj�)�”}”(hhh]”j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hjã:h]”hŒ seqlock_t *sl”…”�”}”(hjå:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjá:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MåhjÝ:ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(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&]”uh1j“h³jø:h´MåhjÚ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj¾:ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj;h]”hŒ Description”…”�”}”(hj ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mçhj¾:ubhï)�”}”(hŒÓread_seqlock_excl opens a seqlock_t locking reader critical section. A locking reader exclusively locks out *both* other writers *and* other locking readers, but it does not update the embedded sequence number.”h]”(hŒmread_seqlock_excl opens a seqlock_t locking reader critical section. A locking reader exclusively locks out ”…”�”}”(hj4;h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*both*”h]”hŒboth”…”�”}”(hj>;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hj4;ubhŒ other writers ”…”�”}”(hj4;h²hh³Nh´Nubj=;)�”}”(hŒ*and*”h]”hŒand”…”�”}”(hjP;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hj4;ubhŒL other locking readers, but it does not update the embedded sequence number.”…”�”}”(hj4;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mæhj¾:ubhï)�”}”(hŒh]”hŒ seqlock_t *sl”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj>ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(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&]”uh1j“h³j>h´Mhjý=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjá=ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjA>h]”hŒ Description”…”�”}”(hjC>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj?>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhjá=ubhï)�”}”(hŒž_bh variant of read_seqlock_excl(). Use this variant only if the seqlock_t write side section, *or other read sections*, can be invoked from softirq contexts.”h]”(hŒ__bh variant of read_seqlock_excl(). Use this variant only if the seqlock_t write side section, ”…”�”}”(hjW>h²hh³Nh´Nubj=;)�”}”(hŒ*or other read sections*”h]”hŒor other read sections”…”�”}”(hj_>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hjW>ubhŒ', can be invoked from softirq contexts.”…”�”}”(hjW>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhjá=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ#read_sequnlock_excl_bh (C function)”Œc.read_sequnlock_excl_bh”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ+void read_sequnlock_excl_bh (seqlock_t *sl)”h]”jì)�”}”(hŒ*void read_sequnlock_excl_bh(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj˜>h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj”>h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§>h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj”>h²hh³j¦>h´Mubjò)�”}”(hŒread_sequnlock_excl_bh”h]”jø)�”}”(hŒread_sequnlock_excl_bh”h]”hŒread_sequnlock_excl_bh”…”�”}”(hj¹>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjµ>ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj”>h²hh³j¦>h´MubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hjØ>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÕ>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”jÚ>Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj»>sbŒc.read_sequnlock_excl_bh”†”asbuh1hhjÑ>ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø>h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjÑ>ubj)�”}”(hjh]”hŒ*”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑ>ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÑ>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjÍ>ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj”>h²hh³j¦>h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj�>h²hh³j¦>h´Mubah}”(h]”j‹>ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j¦>h´Mhj�>h²hubj%)�”}”(hhh]”hï)�”}”(hŒ8stop a seqlock_t softirq-disabled locking reader section”h]”hŒ8stop a seqlock_t softirq-disabled locking reader section”…”�”}”(hj=?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj:?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj�>h²hh³j¦>h´Mubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jU?j9jU?j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒ8**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj_?h]”hŒ Parameters”…”�”}”(hja?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj]?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MhjY?ubj�)�”}”(hhh]”j”)�”}”(hŒ&``seqlock_t *sl`` Pointer to seqlock_t”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hj~?h]”hŒ seqlock_t *sl”…”�”}”(hj€?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj|?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhjx?ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj—?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhj”?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjx?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j“?h´Mhju?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjY?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ"read_seqlock_excl_irq (C function)”Œc.read_seqlock_excl_irq”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ*void read_seqlock_excl_irq (seqlock_t *sl)”h]”jì)�”}”(hŒ)void read_seqlock_excl_irq(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØ?h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÔ?h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç?h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjÔ?h²hh³jæ?h´Mubjò)�”}”(hŒread_seqlock_excl_irq”h]”jø)�”}”(hŒread_seqlock_excl_irq”h]”hŒread_seqlock_excl_irq”…”�”}”(hjù?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjõ?ubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjÔ?h²hh³jæ?h´MubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j@Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjû?sbŒc.read_seqlock_excl_irq”†”asbuh1hhj@ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8@h²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj@ubj)�”}”(hjh]”hŒ*”…”�”}”(hjF@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@ubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hjS@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj @ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjÔ?h²hh³jæ?h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjÐ?h²hh³jæ?h´Mubah}”(h]”jË?ah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jæ?h´MhjÍ?h²hubj%)�”}”(hhh]”hï)�”}”(hŒ:start a non-interruptible seqlock_t locking reader section”h]”hŒ:start a non-interruptible seqlock_t locking reader section”…”�”}”(hj}@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mhjz@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÍ?h²hh³jæ?h´Mubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j•@j9j•@j:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒã**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t **Description** _irq variant of read_seqlock_excl(). Use this only if the seqlock_t write side section, *or other read sections*, can be invoked from a hardirq context.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjŸ@h]”hŒ Parameters”…”�”}”(hj¡@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj�@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M"hj™@ubj�)�”}”(hhh]”j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hj¾@h]”hŒ seqlock_t *sl”…”�”}”(hjÀ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¼@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M hj¸@ubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(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&]”uh1j“h³jÓ@h´M hjµ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj™@ubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjù@h]”hŒ Description”…”�”}”(hjû@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj÷@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M"hj™@ubhï)�”}”(hŒ˜_irq variant of read_seqlock_excl(). Use this only if the seqlock_t write side section, *or other read sections*, can be invoked from a hardirq context.”h]”(hŒX_irq variant of read_seqlock_excl(). Use this only if the seqlock_t write side section, ”…”�”}”(hjAh²hh³Nh´Nubj=;)�”}”(hŒ*or other read sections*”h]”hŒor other read sections”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hjAubhŒ(, can be invoked from a hardirq context.”…”�”}”(hjAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M!hj™@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ$read_sequnlock_excl_irq (C function)”Œc.read_sequnlock_excl_irq”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ,void read_sequnlock_excl_irq (seqlock_t *sl)”h]”jì)�”}”(hŒ+void read_sequnlock_excl_irq(seqlock_t *sl)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjPAh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjLAh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M-ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Ah²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjLAh²hh³j^Ah´M-ubjò)�”}”(hŒread_sequnlock_excl_irq”h]”jø)�”}”(hŒread_sequnlock_excl_irq”h]”hŒread_sequnlock_excl_irq”…”�”}”(hjqAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjmAubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjLAh²hh³j^Ah´M-ubjŸ)�”}”(hŒ(seqlock_t *sl)”h]”j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj�Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj�Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j’AŒmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjsAsbŒc.read_sequnlock_excl_irq”†”asbuh1hhj‰Aubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Ah²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj‰Aubj)�”}”(hjh]”hŒ*”…”�”}”(hj¾Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰Aubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hjËAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj‰Aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj…Aubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjLAh²hh³j^Ah´M-ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjHAh²hh³j^Ah´M-ubah}”(h]”jCAah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j^Ah´M-hjEAh²hubj%)�”}”(hhh]”hï)�”}”(hŒ;end an interrupts-disabled seqlock_t locking reader section”h]”hŒ;end an interrupts-disabled seqlock_t locking reader section”…”�”}”(hjõAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M-hjòAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjEAh²hh³j^Ah´M-ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j Bj9j Bj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒ8**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjBh]”hŒ Parameters”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M1hjBubj�)�”}”(hhh]”j”)�”}”(hŒ&``seqlock_t *sl`` Pointer to seqlock_t”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hj6Bh]”hŒ seqlock_t *sl”…”�”}”(hj8Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj4Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M3hj0Bubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hjOBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M/hjLBubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj0Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jKBh´M3hj-Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ#read_seqlock_excl_irqsave (C macro)”Œc.read_seqlock_excl_irqsave”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒread_seqlock_excl_irqsave”h]”jì)�”}”(hŒread_seqlock_excl_irqsave”h]”jò)�”}”(hŒread_seqlock_excl_irqsave”h]”jø)�”}”(hjŠBh]”hŒread_seqlock_excl_irqsave”…”�”}”(hj”Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj�Bubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjŒBh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MAubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjˆBh²hh³j§Bh´MAubah}”(h]”jƒBah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j§Bh´MAhj…Bh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hj…Bh²hh³j§Bh´MAubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8jÀBj9jÀBj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ+``read_seqlock_excl_irqsave (lock, flags)``”h]”jX)�”}”(hjÆBh]”hŒ'read_seqlock_excl_irqsave (lock, flags)”…”�”}”(hjÈBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÄBubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MChj¾h²hubj¥)�”}”(hŒ;start a non-interruptible seqlock_t locking reader section ”h]”hï)�”}”(hŒ:start a non-interruptible seqlock_t locking reader section”h]”hŒ:start a non-interruptible seqlock_t locking reader section”…”�”}”(hjàBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MAhjÜBubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jîBh´MAhj¾h²hubjo)�”}”(hXb**Parameters** ``lock`` Pointer to seqlock_t ``flags`` Stack-allocated storage for saving caller's local interrupt state, to be passed to read_sequnlock_excl_irqrestore(). **Description** _irqsave variant of read_seqlock_excl(). Use this only if the seqlock_t write side section, *or other read sections*, can be invoked from a hardirq context.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjûBh]”hŒ Parameters”…”�”}”(hjýBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjùBubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MEhjõBubj�)�”}”(hhh]”(j”)�”}”(hŒ``lock`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``lock``”h]”jX)�”}”(hjCh]”hŒlock”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MChjCubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj3Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j/Ch´MChj0Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j/Ch´MChjCubj”)�”}”(hŒ``flags`` Stack-allocated storage for saving caller's local interrupt state, to be passed to read_sequnlock_excl_irqrestore(). ”h]”(jš)�”}”(hŒ ``flags``”h]”jX)�”}”(hjSCh]”hŒflags”…”�”}”(hjUCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjQCubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MEhjMCubj´)�”}”(hhh]”hï)�”}”(hŒtStack-allocated storage for saving caller's local interrupt state, to be passed to read_sequnlock_excl_irqrestore().”h]”hŒvStack-allocated storage for saving caller’s local interrupt state, to be passed to read_sequnlock_excl_irqrestore().”…”�”}”(hjlCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MDhjiCubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjMCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jhCh´MEhjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjõBubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj�Ch]”hŒ Description”…”�”}”(hj‘Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj�Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MGhjõBubhï)�”}”(hŒœ_irqsave variant of read_seqlock_excl(). Use this only if the seqlock_t write side section, *or other read sections*, can be invoked from a hardirq context.”h]”(hŒ\_irqsave variant of read_seqlock_excl(). Use this only if the seqlock_t write side section, ”…”�”}”(hj¥Ch²hh³Nh´Nubj=;)�”}”(hŒ*or other read sections*”h]”hŒor other read sections”…”�”}”(hj­Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hj¥CubhŒ(, can be invoked from a hardirq context.”…”�”}”(hj¥Ch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MFhjõBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ+read_sequnlock_excl_irqrestore (C function)”Œ c.read_sequnlock_excl_irqrestore”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒHvoid read_sequnlock_excl_irqrestore (seqlock_t *sl, unsigned long flags)”h]”jì)�”}”(hŒGvoid read_sequnlock_excl_irqrestore(seqlock_t *sl, unsigned long flags)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjæCh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjâCh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MOubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõCh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjâCh²hh³jôCh´MOubjò)�”}”(hŒread_sequnlock_excl_irqrestore”h]”jø)�”}”(hŒread_sequnlock_excl_irqrestore”h]”hŒread_sequnlock_excl_irqrestore”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjDubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjâCh²hh³jôCh´MOubjŸ)�”}”(hŒ$(seqlock_t *sl, unsigned long flags)”h]”(j¥)�”}”(hŒ seqlock_t *sl”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj&Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj#Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j(DŒmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj DsbŒ c.read_sequnlock_excl_irqrestore”†”asbuh1hhjDubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFDh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjDubj)�”}”(hjh]”hŒ*”…”�”}”(hjTDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDubjø)�”}”(hŒsl”h]”hŒsl”…”�”}”(hjaDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjDubj¥)�”}”(hŒunsigned long flags”h]”(jd)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjzDh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjvDubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆDh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjvDubjd)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj–Dh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjvDubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤Dh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjvDubjø)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj²Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjvDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjDubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjâCh²hh³jôCh´MOubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjÞCh²hh³jôCh´MOubah}”(h]”jÙCah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jôCh´MOhjÛCh²hubj%)�”}”(hhh]”hï)�”}”(hŒ6end non-interruptible seqlock_t locking reader section”h]”hŒ6end non-interruptible seqlock_t locking reader section”…”�”}”(hjÜDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MOhjÙDh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjÛCh²hh³jôCh´MOubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jôDj9jôDj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒ’**Parameters** ``seqlock_t *sl`` Pointer to seqlock_t ``unsigned long flags`` Caller saved interrupt state, from read_seqlock_excl_irqsave()”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjþDh]”hŒ Parameters”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjüDubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MShjøDubj�)�”}”(hhh]”(j”)�”}”(hŒ'``seqlock_t *sl`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *sl``”h]”jX)�”}”(hjEh]”hŒ seqlock_t *sl”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MQhjEubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj6Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j2Eh´MQhj3Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j2Eh´MQhjEubj”)�”}”(hŒV``unsigned long flags`` Caller saved interrupt state, from read_seqlock_excl_irqsave()”h]”(jš)�”}”(hŒ``unsigned long flags``”h]”jX)�”}”(hjVEh]”hŒunsigned long flags”…”�”}”(hjXEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjTEubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MShjPEubj´)�”}”(hhh]”hï)�”}”(hŒ>Caller saved interrupt state, from read_seqlock_excl_irqsave()”h]”hŒ>Caller saved interrupt state, from read_seqlock_excl_irqsave()”…”�”}”(hjoEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MRhjlEubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjPEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jkEh´MShjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjøDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ"read_seqbegin_or_lock (C function)”Œc.read_seqbegin_or_lock”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ6void read_seqbegin_or_lock (seqlock_t *lock, int *seq)”h]”jì)�”}”(hŒ5void read_seqbegin_or_lock(seqlock_t *lock, int *seq)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj°Eh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¬Eh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M\ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿Eh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj¬Eh²hh³j¾Eh´M\ubjò)�”}”(hŒread_seqbegin_or_lock”h]”jø)�”}”(hŒread_seqbegin_or_lock”h]”hŒread_seqbegin_or_lock”…”�”}”(hjÑEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÍEubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj¬Eh²hh³j¾Eh´M\ubjŸ)�”}”(hŒ(seqlock_t *lock, int *seq)”h]”(j¥)�”}”(hŒseqlock_t *lock”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hjðEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjíEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”jòEŒmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjÓEsbŒc.read_seqbegin_or_lock”†”asbuh1hhjéEubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjéEubj)�”}”(hjh]”hŒ*”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéEubjø)�”}”(hŒlock”h]”hŒlock”…”�”}”(hj+Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjéEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjåEubj¥)�”}”(hŒint *seq”h]”(jd)�”}”(hŒint”h]”hŒint”…”�”}”(hjDFh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj@Fubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRFh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj@Fubj)�”}”(hjh]”hŒ*”…”�”}”(hj`Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@Fubjø)�”}”(hŒseq”h]”hŒseq”…”�”}”(hjmFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj@Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjåEubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj¬Eh²hh³j¾Eh´M\ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj¨Eh²hh³j¾Eh´M\ubah}”(h]”j£Eah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j¾Eh´M\hj¥Eh²hubj%)�”}”(hhh]”hï)�”}”(hŒ,begin a seqlock_t lockless or locking reader”h]”hŒ,begin a seqlock_t lockless or locking reader”…”�”}”(hj—Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M\hj”Fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj¥Eh²hh³j¾Eh´M\ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j¯Fj9j¯Fj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hXÏ**Parameters** ``seqlock_t *lock`` Pointer to seqlock_t ``int *seq`` Marker and return parameter. If the passed value is even, the reader will become a *lockless* seqlock_t reader as in read_seqbegin(). If the passed value is odd, the reader will become a *locking* reader as in read_seqlock_excl(). In the first call to this function, the caller *must* initialize and pass an even value to **seq**; this way, a lockless read can be optimistically tried first. **Description** read_seqbegin_or_lock is an API designed to optimistically try a normal lockless seqlock_t read section first. If an odd counter is found, the lockless read trial has failed, and the next read iteration transforms itself into a full seqlock_t locking reader. This is typically used to avoid seqlock_t lockless readers starvation (too much retry loops) in the case of a sharp spike in write side activity. Check Documentation/locking/seqlock.rst for template example code. **Context** if the seqlock_t write section, *or other read sections*, can be invoked from hardirq or softirq contexts, use the _irqsave or _bh variant of this function instead. **Return** the encountered sequence counter value, through the **seq** parameter, which is overloaded as a return parameter. This returned value must be checked with need_seqretry(). If the read section need to be retried, this returned value must also be passed as the **seq** parameter of the next read_seqbegin_or_lock() iteration.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj¹Fh]”hŒ Parameters”…”�”}”(hj»Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj·Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M`hj³Fubj�)�”}”(hhh]”(j”)�”}”(hŒ)``seqlock_t *lock`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *lock``”h]”jX)�”}”(hjØFh]”hŒseqlock_t *lock”…”�”}”(hjÚFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÖFubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M]hjÒFubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hjñFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jíFh´M]hjîFubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjÒFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jíFh´M]hjÏFubj”)�”}”(hX–``int *seq`` Marker and return parameter. If the passed value is even, the reader will become a *lockless* seqlock_t reader as in read_seqbegin(). If the passed value is odd, the reader will become a *locking* reader as in read_seqlock_excl(). In the first call to this function, the caller *must* initialize and pass an even value to **seq**; this way, a lockless read can be optimistically tried first. ”h]”(jš)�”}”(hŒ ``int *seq``”h]”jX)�”}”(hjGh]”hŒint *seq”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mchj Gubj´)�”}”(hhh]”hï)�”}”(hXˆMarker and return parameter. If the passed value is even, the reader will become a *lockless* seqlock_t reader as in read_seqbegin(). If the passed value is odd, the reader will become a *locking* reader as in read_seqlock_excl(). In the first call to this function, the caller *must* initialize and pass an even value to **seq**; this way, a lockless read can be optimistically tried first.”h]”(hŒSMarker and return parameter. If the passed value is even, the reader will become a ”…”�”}”(hj*Gh²hh³Nh´Nubj=;)�”}”(hŒ *lockless*”h]”hŒlockless”…”�”}”(hj2Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hj*GubhŒ^ seqlock_t reader as in read_seqbegin(). If the passed value is odd, the reader will become a ”…”�”}”(hj*Gh²hh³Nh´Nubj=;)�”}”(hŒ *locking*”h]”hŒlocking”…”�”}”(hjDGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hj*GubhŒS reader as in read_seqlock_excl(). In the first call to this function, the caller ”…”�”}”(hj*Gh²hh³Nh´Nubj=;)�”}”(hŒ*must*”h]”hŒmust”…”�”}”(hjVGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hj*GubhŒ& initialize and pass an even value to ”…”�”}”(hj*Gh²hh³Nh´Nubjy)�”}”(hŒ**seq**”h]”hŒseq”…”�”}”(hjhGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj*GubhŒ>; this way, a lockless read can be optimistically tried first.”…”�”}”(hj*Gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M^hj'Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j&Gh´MchjÏFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhj³Fubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hj•Gh]”hŒ Description”…”�”}”(hj—Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj“Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mehj³Fubhï)�”}”(hXread_seqbegin_or_lock is an API designed to optimistically try a normal lockless seqlock_t read section first. If an odd counter is found, the lockless read trial has failed, and the next read iteration transforms itself into a full seqlock_t locking reader.”h]”hXread_seqbegin_or_lock is an API designed to optimistically try a normal lockless seqlock_t read section first. If an odd counter is found, the lockless read trial has failed, and the next read iteration transforms itself into a full seqlock_t locking reader.”…”�”}”(hj«Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mdhj³Fubhï)�”}”(hŒ‘This is typically used to avoid seqlock_t lockless readers starvation (too much retry loops) in the case of a sharp spike in write side activity.”h]”hŒ‘This is typically used to avoid seqlock_t lockless readers starvation (too much retry loops) in the case of a sharp spike in write side activity.”…”�”}”(hjºGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mihj³Fubhï)�”}”(hŒBCheck Documentation/locking/seqlock.rst for template example code.”h]”hŒBCheck Documentation/locking/seqlock.rst for template example code.”…”�”}”(hjÉGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mnhj³Fubhï)�”}”(hŒ **Context**”h]”jy)�”}”(hjÚGh]”hŒContext”…”�”}”(hjÜGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjØGubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mphj³Fubhï)�”}”(hŒ¤if the seqlock_t write section, *or other read sections*, can be invoked from hardirq or softirq contexts, use the _irqsave or _bh variant of this function instead.”h]”(hŒ if the seqlock_t write section, ”…”�”}”(hjðGh²hh³Nh´Nubj=;)�”}”(hŒ*or other read sections*”h]”hŒor other read sections”…”�”}”(hjøGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hjðGubhŒl, can be invoked from hardirq or softirq contexts, use the _irqsave or _bh variant of this function instead.”…”�”}”(hjðGh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mnhj³Fubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hjHh]”hŒReturn”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mrhj³Fubhï)�”}”(hXCthe encountered sequence counter value, through the **seq** parameter, which is overloaded as a return parameter. This returned value must be checked with need_seqretry(). If the read section need to be retried, this returned value must also be passed as the **seq** parameter of the next read_seqbegin_or_lock() iteration.”h]”(hŒ4the encountered sequence counter value, through the ”…”�”}”(hj)Hh²hh³Nh´Nubjy)�”}”(hŒ**seq**”h]”hŒseq”…”�”}”(hj1Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj)HubhŒÈ parameter, which is overloaded as a return parameter. This returned value must be checked with need_seqretry(). If the read section need to be retried, this returned value must also be passed as the ”…”�”}”(hj)Hh²hh³Nh´Nubjy)�”}”(hŒ**seq**”h]”hŒseq”…”�”}”(hjCHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj)HubhŒ9 parameter of the next read_seqbegin_or_lock() iteration.”…”�”}”(hj)Hh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´Mthj³Fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒneed_seqretry (C function)”Œc.need_seqretry”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ,int need_seqretry (seqlock_t *lock, int seq)”h]”jì)�”}”(hŒ+int need_seqretry(seqlock_t *lock, int seq)”h]”(jd)�”}”(hŒint”h]”hŒint”…”�”}”(hj|Hh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjxHh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M„ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹Hh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjxHh²hh³jŠHh´M„ubjò)�”}”(hŒ need_seqretry”h]”jø)�”}”(hŒ need_seqretry”h]”hŒ need_seqretry”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj™Hubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjxHh²hh³jŠHh´M„ubjŸ)�”}”(hŒ(seqlock_t *lock, int seq)”h]”(j¥)�”}”(hŒseqlock_t *lock”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj¼Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj¹Hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j¾HŒmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjŸHsbŒc.need_seqretry”†”asbuh1hhjµHubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜHh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjµHubj)�”}”(hjh]”hŒ*”…”�”}”(hjêHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµHubjø)�”}”(hŒlock”h]”hŒlock”…”�”}”(hj÷Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjµHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj±Hubj¥)�”}”(hŒint seq”h]”(jd)�”}”(hŒint”h]”hŒint”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj Iubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj Iubjø)�”}”(hŒseq”h]”hŒseq”…”�”}”(hj,Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj±Hubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjxHh²hh³jŠHh´M„ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjtHh²hh³jŠHh´M„ubah}”(h]”joHah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³jŠHh´M„hjqHh²hubj%)�”}”(hhh]”hï)�”}”(hŒ5validate seqlock_t "locking or lockless" read section”h]”hŒ9validate seqlock_t “locking or locklessâ€� read section”…”�”}”(hjVIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M„hjSIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjqHh²hh³jŠHh´M„ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jnIj9jnIj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hŒ½**Parameters** ``seqlock_t *lock`` Pointer to seqlock_t ``int seq`` sequence count, from read_seqbegin_or_lock() **Return** true if a read section retry is required, false otherwise”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjxIh]”hŒ Parameters”…”�”}”(hjzIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjvIubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MˆhjrIubj�)�”}”(hhh]”(j”)�”}”(hŒ)``seqlock_t *lock`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *lock``”h]”jX)�”}”(hj—Ih]”hŒseqlock_t *lock”…”�”}”(hj™Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj•Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M…hj‘Iubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj°Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j¬Ih´M…hj­Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj‘Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j¬Ih´M…hjŽIubj”)�”}”(hŒ9``int seq`` sequence count, from read_seqbegin_or_lock() ”h]”(jš)�”}”(hŒ ``int seq``”h]”jX)�”}”(hjÐIh]”hŒint seq”…”�”}”(hjÒIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÎIubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”•~h´M†hjÊIubj´)�”}”(hhh]”hï)�”}”(hŒ,sequence count, from read_seqbegin_or_lock()”h]”hŒ,sequence count, from read_seqbegin_or_lock()”…”�”}”(hjéIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jåIh´M†hjæIubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjÊIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jåIh´M†hjŽIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjrIubhï)�”}”(hŒ **Return**”h]”jy)�”}”(hj Jh]”hŒReturn”…”�”}”(hj Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MˆhjrIubhï)�”}”(hŒ9true if a read section retry is required, false otherwise”h]”hŒ9true if a read section retry is required, false otherwise”…”�”}”(hj!Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MˆhjrIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒdone_seqretry (C function)”Œc.done_seqretry”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒ-void done_seqretry (seqlock_t *lock, int seq)”h]”jì)�”}”(hŒ,void done_seqretry(seqlock_t *lock, int seq)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjPJh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjLJh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M‘ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Jh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjLJh²hh³j^Jh´M‘ubjò)�”}”(hŒ done_seqretry”h]”jø)�”}”(hŒ done_seqretry”h]”hŒ done_seqretry”…”�”}”(hjqJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjmJubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhjLJh²hh³j^Jh´M‘ubjŸ)�”}”(hŒ(seqlock_t *lock, int seq)”h]”(j¥)�”}”(hŒseqlock_t *lock”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj�Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj�Jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j’JŒmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjsJsbŒc.done_seqretry”†”asbuh1hhj‰Jubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Jh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj‰Jubj)�”}”(hjh]”hŒ*”…”�”}”(hj¾Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰Jubjø)�”}”(hŒlock”h]”hŒlock”…”�”}”(hjËJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj‰Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj…Jubj¥)�”}”(hŒint seq”h]”(jd)�”}”(hŒint”h]”hŒint”…”�”}”(hjäJh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjàJubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòJh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjàJubjø)�”}”(hŒseq”h]”hŒseq”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjàJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hj…Jubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhjLJh²hh³j^Jh´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjHJh²hh³j^Jh´M‘ubah}”(h]”jCJah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j^Jh´M‘hjEJh²hubj%)�”}”(hhh]”hï)�”}”(hŒ2end seqlock_t "locking or lockless" reader section”h]”hŒ6end seqlock_t “locking or locklessâ€� reader section”…”�”}”(hj*Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M‘hj'Kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjEJh²hh³j^Jh´M‘ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jBKj9jBKj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hX**Parameters** ``seqlock_t *lock`` Pointer to seqlock_t ``int seq`` count, from read_seqbegin_or_lock() **Description** done_seqretry finishes the seqlock_t read side critical section started with read_seqbegin_or_lock() and validated by need_seqretry().”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjLKh]”hŒ Parameters”…”�”}”(hjNKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjJKubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M•hjFKubj�)�”}”(hhh]”(j”)�”}”(hŒ)``seqlock_t *lock`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *lock``”h]”jX)�”}”(hjkKh]”hŒseqlock_t *lock”…”�”}”(hjmKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjiKubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M’hjeKubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj„Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j€Kh´M’hj�Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjeKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j€Kh´M’hjbKubj”)�”}”(hŒ0``int seq`` count, from read_seqbegin_or_lock() ”h]”(jš)�”}”(hŒ ``int seq``”h]”jX)�”}”(hj¤Kh]”hŒint seq”…”�”}”(hj¦Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¢Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M“hjžKubj´)�”}”(hhh]”hï)�”}”(hŒ#count, from read_seqbegin_or_lock()”h]”hŒ#count, from read_seqbegin_or_lock()”…”�”}”(hj½Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j¹Kh´M“hjºKubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjžKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j¹Kh´M“hjbKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjFKubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjßKh]”hŒ Description”…”�”}”(hjáKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÝKubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M•hjFKubhï)�”}”(hŒ†done_seqretry finishes the seqlock_t read side critical section started with read_seqbegin_or_lock() and validated by need_seqretry().”h]”hŒ†done_seqretry finishes the seqlock_t read side critical section started with read_seqbegin_or_lock() and validated by need_seqretry().”…”�”}”(hjõKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M”hjFKubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ*read_seqbegin_or_lock_irqsave (C function)”Œc.read_seqbegin_or_lock_irqsave”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒGunsigned long read_seqbegin_or_lock_irqsave (seqlock_t *lock, int *seq)”h]”jì)�”}”(hŒFunsigned long read_seqbegin_or_lock_irqsave(seqlock_t *lock, int *seq)”h]”(jd)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj$Lh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj Lh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Lh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj Lh²hh³j2Lh´M ubjd)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjALh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj Lh²hh³j2Lh´M ubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOLh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj Lh²hh³j2Lh´M ubjò)�”}”(hŒread_seqbegin_or_lock_irqsave”h]”jø)�”}”(hŒread_seqbegin_or_lock_irqsave”h]”hŒread_seqbegin_or_lock_irqsave”…”�”}”(hjaLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj]Lubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj Lh²hh³j2Lh´M ubjŸ)�”}”(hŒ(seqlock_t *lock, int *seq)”h]”(j¥)�”}”(hŒseqlock_t *lock”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hj€Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hj}Lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”j‚LŒmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjcLsbŒc.read_seqbegin_or_lock_irqsave”†”asbuh1hhjyLubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjyLubj)�”}”(hjh]”hŒ*”…”�”}”(hj®Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyLubjø)�”}”(hŒlock”h]”hŒlock”…”�”}”(hj»Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjyLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjuLubj¥)�”}”(hŒint *seq”h]”(jd)�”}”(hŒint”h]”hŒint”…”�”}”(hjÔLh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÐLubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâLh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjÐLubj)�”}”(hjh]”hŒ*”…”�”}”(hjðLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐLubjø)�”}”(hŒseq”h]”hŒseq”…”�”}”(hjýLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÐLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjuLubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj Lh²hh³j2Lh´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjLh²hh³j2Lh´M ubah}”(h]”jLah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j2Lh´M hjLh²hubj%)�”}”(hhh]”hï)�”}”(hŒHbegin a seqlock_t lockless reader, or a non-interruptible locking reader”h]”hŒHbegin a seqlock_t lockless reader, or a non-interruptible locking reader”…”�”}”(hj'Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M hj$Mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjLh²hh³j2Lh´M ubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8j?Mj9j?Mj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hX†**Parameters** ``seqlock_t *lock`` Pointer to seqlock_t ``int *seq`` Marker and return parameter. Check read_seqbegin_or_lock(). **Description** This is the _irqsave variant of read_seqbegin_or_lock(). Use it only if the seqlock_t write section, *or other read sections*, can be invoked from hardirq context. 1. The saved local interrupts state in case of a locking reader, to be passed to done_seqretry_irqrestore(). 2. The encountered sequence counter value, returned through **seq** overloaded as a return parameter. Check read_seqbegin_or_lock(). **Note** Interrupts will be disabled only for "locking reader" mode.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjIMh]”hŒ Parameters”…”�”}”(hjKMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjGMubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¤hjCMubj�)�”}”(hhh]”(j”)�”}”(hŒ)``seqlock_t *lock`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *lock``”h]”jX)�”}”(hjhMh]”hŒseqlock_t *lock”…”�”}”(hjjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjfMubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¢hjbMubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj�Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j}Mh´M¢hj~Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjbMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j}Mh´M¢hj_Mubj”)�”}”(hŒI``int *seq`` Marker and return parameter. Check read_seqbegin_or_lock(). ”h]”(jš)�”}”(hŒ ``int *seq``”h]”jX)�”}”(hj¡Mh]”hŒint *seq”…”�”}”(hj£Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjŸMubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M£hj›Mubj´)�”}”(hhh]”hï)�”}”(hŒ;Marker and return parameter. Check read_seqbegin_or_lock().”h]”hŒ;Marker and return parameter. Check read_seqbegin_or_lock().”…”�”}”(hjºMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j¶Mh´M£hj·Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj›Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j¶Mh´M£hj_Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjCMubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjÜMh]”hŒ Description”…”�”}”(hjÞMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÚMubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¥hjCMubhï)�”}”(hŒ£This is the _irqsave variant of read_seqbegin_or_lock(). Use it only if the seqlock_t write section, *or other read sections*, can be invoked from hardirq context.”h]”(hŒeThis is the _irqsave variant of read_seqbegin_or_lock(). Use it only if the seqlock_t write section, ”…”�”}”(hjòMh²hh³Nh´Nubj=;)�”}”(hŒ*or other read sections*”h]”hŒor other read sections”…”�”}”(hjúMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<;hjòMubhŒ&, can be invoked from hardirq context.”…”�”}”(hjòMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¤hjCMubj¥)�”}”(hŒù1. The saved local interrupts state in case of a locking reader, to be passed to done_seqretry_irqrestore(). 2. The encountered sequence counter value, returned through **seq** overloaded as a return parameter. Check read_seqbegin_or_lock(). ”h]”j2)�”}”(hhh]”(j°)�”}”(hŒjThe saved local interrupts state in case of a locking reader, to be passed to done_seqretry_irqrestore(). ”h]”hï)�”}”(hŒiThe saved local interrupts state in case of a locking reader, to be passed to done_seqretry_irqrestore().”h]”hŒiThe saved local interrupts state in case of a locking reader, to be passed to done_seqretry_irqrestore().”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M©hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjNubj°)�”}”(hŒ‚The encountered sequence counter value, returned through **seq** overloaded as a return parameter. Check read_seqbegin_or_lock(). ”h]”hï)�”}”(hŒ�The encountered sequence counter value, returned through **seq** overloaded as a return parameter. Check read_seqbegin_or_lock().”h]”(hŒ9The encountered sequence counter value, returned through ”…”�”}”(hj7Nh²hh³Nh´Nubjy)�”}”(hŒ**seq**”h]”hŒseq”…”�”}”(hj?Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj7NubhŒA overloaded as a return parameter. Check read_seqbegin_or_lock().”…”�”}”(hj7Nh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¬hj3Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjNubeh}”(h]”h ]”h"]”h$]”h&]”j®j¯j°hj±j²uh1j1hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³j,Nh´M©hjCMubhï)�”}”(hŒ**Note**”h]”jy)�”}”(hjlNh]”hŒNote”…”�”}”(hjnNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjjNubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M¯hjCMubhï)�”}”(hŒ;Interrupts will be disabled only for "locking reader" mode.”h]”hŒ?Interrupts will be disabled only for “locking readerâ€� mode.”…”�”}”(hj‚Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M©hjCMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒ%done_seqretry_irqrestore (C function)”Œc.done_seqretry_irqrestore”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒMvoid done_seqretry_irqrestore (seqlock_t *lock, int seq, unsigned long flags)”h]”jì)�”}”(hŒLvoid done_seqretry_irqrestore(seqlock_t *lock, int seq, unsigned long flags)”h]”(jd)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±Nh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj­Nh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÂubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀNh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhj­Nh²hh³j¿Nh´MÂubjò)�”}”(hŒdone_seqretry_irqrestore”h]”jø)�”}”(hŒdone_seqretry_irqrestore”h]”hŒdone_seqretry_irqrestore”…”�”}”(hjÒNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjÎNubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj­Nh²hh³j¿Nh´MÂubjŸ)�”}”(hŒ/(seqlock_t *lock, int seq, unsigned long flags)”h]”(j¥)�”}”(hŒseqlock_t *lock”h]”(h)�”}”(hhh]”jø)�”}”(hŒ seqlock_t”h]”hŒ seqlock_t”…”�”}”(hjñNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjîNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j2Œreftype”j⌠reftarget”jóNŒmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjÔNsbŒc.done_seqretry_irqrestore”†”asbuh1hhjêNubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjêNubj)�”}”(hjh]”hŒ*”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêNubjø)�”}”(hŒlock”h]”hŒlock”…”�”}”(hj,Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjêNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjæNubj¥)�”}”(hŒint seq”h]”(jd)�”}”(hŒint”h]”hŒint”…”�”}”(hjEOh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjAOubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSOh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjAOubjø)�”}”(hŒseq”h]”hŒseq”…”�”}”(hjaOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjAOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjæNubj¥)�”}”(hŒunsigned long flags”h]”(jd)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjzOh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjvOubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆOh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjvOubjd)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj–Oh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjvOubjv)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤Oh²hh³Nh´Nubah}”(h]”h ]”j‚ah"]”h$]”h&]”uh1juhjvOubjø)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj²Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjvOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¤hjæNubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jžhj­Nh²hh³j¿Nh´MÂubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhj©Nh²hh³j¿Nh´MÂubah}”(h]”j¤Nah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j¿Nh´MÂhj¦Nh²hubj%)�”}”(hhh]”hï)�”}”(hŒNend a seqlock_t lockless reader, or a non-interruptible locking reader section”h]”hŒNend a seqlock_t lockless reader, or a non-interruptible locking reader section”…”�”}”(hjÜOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÂhjÙOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj¦Nh²hh³j¿Nh´MÂubeh}”(h]”h ]”(j2Œfunction”eh"]”h$]”h&]”j7j2j8jôOj9jôOj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubjo)�”}”(hX±**Parameters** ``seqlock_t *lock`` Pointer to seqlock_t ``int seq`` Count, from read_seqbegin_or_lock_irqsave() ``unsigned long flags`` Caller's saved local interrupt state in case of a locking reader, also from read_seqbegin_or_lock_irqsave() **Description** This is the _irqrestore variant of done_seqretry(). The read section must've been opened with read_seqbegin_or_lock_irqsave(), and validated by need_seqretry().”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hjþOh]”hŒ Parameters”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjüOubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÆhjøOubj�)�”}”(hhh]”(j”)�”}”(hŒ)``seqlock_t *lock`` Pointer to seqlock_t ”h]”(jš)�”}”(hŒ``seqlock_t *lock``”h]”jX)�”}”(hjPh]”hŒseqlock_t *lock”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÄhjPubj´)�”}”(hhh]”hï)�”}”(hŒPointer to seqlock_t”h]”hŒPointer to seqlock_t”…”�”}”(hj6Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j2Ph´MÄhj3Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j2Ph´MÄhjPubj”)�”}”(hŒ8``int seq`` Count, from read_seqbegin_or_lock_irqsave() ”h]”(jš)�”}”(hŒ ``int seq``”h]”jX)�”}”(hjVPh]”hŒint seq”…”�”}”(hjXPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjTPubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÅhjPPubj´)�”}”(hhh]”hï)�”}”(hŒ+Count, from read_seqbegin_or_lock_irqsave()”h]”hŒ+Count, from read_seqbegin_or_lock_irqsave()”…”�”}”(hjoPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³jkPh´MÅhjlPubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjPPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jkPh´MÅhjPubj”)�”}”(hŒ„``unsigned long flags`` Caller's saved local interrupt state in case of a locking reader, also from read_seqbegin_or_lock_irqsave() ”h]”(jš)�”}”(hŒ``unsigned long flags``”h]”jX)�”}”(hj�Ph]”hŒunsigned long flags”…”�”}”(hj‘Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj�Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÇhj‰Pubj´)�”}”(hhh]”hï)�”}”(hŒkCaller's saved local interrupt state in case of a locking reader, also from read_seqbegin_or_lock_irqsave()”h]”hŒmCaller’s saved local interrupt state in case of a locking reader, also from read_seqbegin_or_lock_irqsave()”…”�”}”(hj¨Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÆhj¥Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj‰Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j¤Ph´MÇhjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjøOubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjËPh]”hŒ Description”…”�”}”(hjÍPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÉPubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÉhjøOubhï)�”}”(hŒ This is the _irqrestore variant of done_seqretry(). The read section must've been opened with read_seqbegin_or_lock_irqsave(), and validated by need_seqretry().”h]”hŒ¢This is the _irqrestore variant of done_seqretry(). The read section must’ve been opened with read_seqbegin_or_lock_irqsave(), and validated by need_seqretry().”…”�”}”(hjáPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MÈhjøOubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´NubjÐ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÜŒscoped_seqlock_read (C macro)”Œc.scoped_seqlock_read”hNt”auh1jÏhj¾h²hh³Nh´Nubjá)�”}”(hhh]”(jæ)�”}”(hŒscoped_seqlock_read”h]”jì)�”}”(hŒscoped_seqlock_read”h]”jò)�”}”(hŒscoped_seqlock_read”h]”jø)�”}”(hj Qh]”hŒscoped_seqlock_read”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j÷hjQubah}”(h]”h ]”(j j eh"]”h$]”h&]”hÅhÆuh1jñhj Qh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M?ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1jëjjhjQh²hh³j'Qh´M?ubah}”(h]”jQah ]”(jjeh"]”h$]”h&]”j!ˆj")j#huh1jåh³j'Qh´M?hjQh²hubj%)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j$hjQh²hh³j'Qh´M?ubeh}”(h]”h ]”(j2Œmacro”eh"]”h$]”h&]”j7j2j8j@Qj9j@Qj:‰j;‰j<‰uh1jàh²hhj¾h³Nh´Nubhï)�”}”(hŒ+``scoped_seqlock_read (_seqlock, _target)``”h]”jX)�”}”(hjFQh]”hŒ'scoped_seqlock_read (_seqlock, _target)”…”�”}”(hjHQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjDQubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MAhj¾h²hubj¥)�”}”(hŒjexecute the read-side critical section without manual sequence counter handling or calls to other helpers ”h]”hï)�”}”(hŒiexecute the read-side critical section without manual sequence counter handling or calls to other helpers”h]”hŒiexecute the read-side critical section without manual sequence counter handling or calls to other helpers”…”�”}”(hj`Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´M?hj\Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤h³jnQh´M?hj¾h²hubjo)�”}”(hXœ**Parameters** ``_seqlock`` pointer to seqlock_t protecting the data ``_target`` an enum ss_state: one of {ss_lock, ss_lock_irqsave, ss_lockless} indicating the type of critical read section **Description** Example:: scoped_seqlock_read (&lock, ss_lock) { // read-side critical section } Starts with a lockess pass first. If it fails, restarts the critical section with the lock held.”h]”(hï)�”}”(hŒ**Parameters**”h]”jy)�”}”(hj{Qh]”hŒ Parameters”…”�”}”(hj}Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjyQubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MChjuQubj�)�”}”(hhh]”(j”)�”}”(hŒ6``_seqlock`` pointer to seqlock_t protecting the data ”h]”(jš)�”}”(hŒ ``_seqlock``”h]”jX)�”}”(hjšQh]”hŒ_seqlock”…”�”}”(hjœQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj˜Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MBhj”Qubj´)�”}”(hhh]”hï)�”}”(hŒ(pointer to seqlock_t protecting the data”h]”hŒ(pointer to seqlock_t protecting the data”…”�”}”(hj³Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³j¯Qh´MBhj°Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj”Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³j¯Qh´MBhj‘Qubj”)�”}”(hŒz``_target`` an enum ss_state: one of {ss_lock, ss_lock_irqsave, ss_lockless} indicating the type of critical read section ”h]”(jš)�”}”(hŒ ``_target``”h]”jX)�”}”(hjÓQh]”hŒ_target”…”�”}”(hjÕQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÑQubah}”(h]”h ]”h"]”h$]”h&]”uh1j™h³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MDhjÍQubj´)�”}”(hhh]”hï)�”}”(hŒman enum ss_state: one of {ss_lock, ss_lock_irqsave, ss_lockless} indicating the type of critical read section”h]”hŒman enum ss_state: one of {ss_lock, ss_lock_irqsave, ss_lockless} indicating the type of critical read section”…”�”}”(hjìQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MChjéQubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjÍQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j“h³jèQh´MDhj‘Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŽhjuQubhï)�”}”(hŒ**Description**”h]”jy)�”}”(hjRh]”hŒ Description”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj Rubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MFhjuQubhï)�”}”(hŒ Example::”h]”hŒExample:”…”�”}”(hj%Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MEhjuQubjÓ)�”}”(hŒJscoped_seqlock_read (&lock, ss_lock) { // read-side critical section }”h]”hŒJscoped_seqlock_read (&lock, ss_lock) { // read-side critical section }”…”�”}”hj4Rsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÒh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MGhjuQubhï)�”}”(hŒ`Starts with a lockess pass first. If it fails, restarts the critical section with the lock held.”h]”hŒ`Starts with a lockess pass first. If it fails, restarts the critical section with the lock held.”…”�”}”(hjCRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³ŒX/var/lib/git/docbuild/linux/Documentation/locking/seqlock:242: ./include/linux/seqlock.h”h´MKhjuQubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj¾h²hh³Nh´Nubeh}”(h]”Œapi-documentation”ah ]”h"]”Œapi documentation”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kðubeh}”(h]”Œ&sequence-counters-and-sequential-locks”ah ]”h"]”Œ&sequence counters and sequential locks”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ŒRŒ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”}”(jC]”j8aj$]”jajø]”jîajq]”jgauŒnameids”}”(jfRjcRjIjFjƒjCj‚jjÿj$jþjûjxjøjwjtj¹jqj¸jµj^Rj[RuŒ nametypes”}”(jfR‰jI‰jƒˆj‚‰jÿˆjþ‰jxˆjw‰j¹ˆj¸‰j^R‰uh}”(jcRhÊjFhÝjCjLjjLj$j%jûj%jøjjtjjqjˆjµjˆj[Rj¾jÞjçjìjñjÐjÕjÚjßjä jé jî jó j j$ j§ j¬ jçjìj`jejÊjÏjÔjÙjÞjãjHjMjRjWj\jaj„j‰jŽj“jrjwjVj[jjj¿jÄj­ j² j›"j "jÚ#jß#j.&j3&jm'jr'jÒ(j×(j¶)j»)jš*jŸ*j,j ,j1.j6.j¾/jÃ/j$1j)1jŠ2j�2jð3jõ3jV5j[5j¼6jÁ6j8j8jð9jõ9jÓ;jØ;j=j=j‹>j�>jË?jÐ?jCAjHAjƒBjˆBjÙCjÞCj£Ej¨EjoHjtHjCJjHJjLjLj¤Nj©NjQjQuŒ 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”]”(hŒsystem_message”“”)�”}”(hhh]”hï)�”}”(hhh]”hŒ0Hyperlink target "seqcount-t" is not referenced.”…”�”}”hjùRsbah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjöRubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”K'uh1jôRubjõR)�”}”(hhh]”hï)�”}”(hhh]”hŒ9Hyperlink target "seqcount-locktype-t" is not referenced.”…”�”}”hjSsbah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjSubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jSŒsource”hÇŒline”K\uh1jôRubjõR)�”}”(hhh]”hï)�”}”(hhh]”hŒ6Hyperlink target "seqcount-latch-t" is not referenced.”…”�”}”hj.Ssbah}”(h]”h ]”h"]”h$]”h&]”uh1hîhj+Subah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jSŒsource”hÇŒline”K�uh1jôRubjõR)�”}”(hhh]”hï)�”}”(hhh]”hŒ/Hyperlink target "seqlock-t" is not referenced.”…”�”}”hjHSsbah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjESubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jSŒsource”hÇŒline”K¡uh1jôRubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.