€•Œ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/mm/zsmalloc”Œ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/mm/zsmalloc”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/mm/zsmalloc”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/mm/zsmalloc”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/mm/zsmalloc”Œ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/mm/zsmalloc”Œ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/mm/zsmalloc”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒzsmalloc”h]”hŒzsmalloc”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ9/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc.rst”h´KubhŒ paragraph”“”)�”}”(hXÛThis allocator is designed for use with zram. Thus, the allocator is supposed to work well under low memory conditions. In particular, it never attempts higher order page allocation which is very likely to fail under memory pressure. On the other hand, if we just use single (0-order) pages, it would suffer from very high fragmentation -- any object of size PAGE_SIZE/2 or larger would occupy an entire page. This was one of the major issues with its predecessor (xvmalloc).”h]”hXÛThis allocator is designed for use with zram. Thus, the allocator is supposed to work well under low memory conditions. In particular, it never attempts higher order page allocation which is very likely to fail under memory pressure. On the other hand, if we just use single (0-order) pages, it would suffer from very high fragmentation -- any object of size PAGE_SIZE/2 or larger would occupy an entire page. This was one of the major issues with its predecessor (xvmalloc).”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hX/To overcome these issues, zsmalloc allocates a bunch of 0-order pages and links them together using various 'struct page' fields. These linked pages act as a single higher-order page i.e. an object can span 0-order page boundaries. The code refers to these linked pages as a single entity called zspage.”h]”hX3To overcome these issues, zsmalloc allocates a bunch of 0-order pages and links them together using various ‘struct page’ fields. These linked pages act as a single higher-order page i.e. an object can span 0-order page boundaries. The code refers to these linked pages as a single entity called zspage.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hX?For simplicity, zsmalloc can only allocate objects of size up to PAGE_SIZE since this satisfies the requirements of all its current users (in the worst case, page is incompressible and is thus stored "as-is" i.e. in uncompressed form). For allocation requests larger than this size, failure is returned (see zs_malloc).”h]”hXCFor simplicity, zsmalloc can only allocate objects of size up to PAGE_SIZE since this satisfies the requirements of all its current users (in the worst case, page is incompressible and is thus stored “as-isâ€� i.e. in uncompressed form). For allocation requests larger than this size, failure is returned (see zs_malloc).”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hXËAdditionally, zs_malloc() does not return a dereferenceable pointer. Instead, it returns an opaque handle (unsigned long) which encodes actual location of the allocated object. The reason for this indirection is that zsmalloc does not keep zspages permanently mapped since that would cause issues on 32-bit systems where the VA region for kernel space mappings is very small. So, using the allocated memory should be done through the proper handle-based APIs.”h]”hXËAdditionally, zs_malloc() does not return a dereferenceable pointer. Instead, it returns an opaque handle (unsigned long) which encodes actual location of the allocated object. The reason for this indirection is that zsmalloc does not keep zspages permanently mapped since that would cause issues on 32-bit systems where the VA region for kernel space mappings is very small. So, using the allocated memory should be done through the proper handle-based APIs.”…”�”}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒstat”h]”hŒstat”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K"ubhÌ)�”}”(hŒ—With CONFIG_ZSMALLOC_STAT, we could see zsmalloc internal information via ``/sys/kernel/debug/zsmalloc/``. Here is a sample of stat output::”h]”(hŒJWith CONFIG_ZSMALLOC_STAT, we could see zsmalloc internal information via ”…”�”}”(hjh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ*``/sys/kernel/debug/zsmalloc/``”h]”hŒ&/sys/kernel/debug/zsmalloc/”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ". Here is a sample of stat output:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K$hjh²hubhŒ literal_block”“”)�”}”(hX+# cat /sys/kernel/debug/zsmalloc/zram0/classes class size 10% 20% 30% 40% 50% 60% 70% 80% 90% 99% 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... ... 30 512 0 12 4 1 0 1 0 0 1 0 414 3464 3346 433 1 14 31 528 2 7 2 2 1 0 1 0 0 2 117 4154 3793 536 4 44 32 544 6 3 4 1 2 1 0 0 0 1 260 4170 3965 556 2 26 ... ...”h]”hX+# cat /sys/kernel/debug/zsmalloc/zram0/classes class size 10% 20% 30% 40% 50% 60% 70% 80% 90% 99% 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... ... 30 512 0 12 4 1 0 1 0 0 1 0 414 3464 3346 433 1 14 31 528 2 7 2 2 1 0 1 0 0 2 117 4154 3793 536 4 44 32 544 6 3 4 1 2 1 0 0 0 1 260 4170 3965 556 2 26 ... ...”…”�”}”hj:sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j8h³hÊh´K'hjh²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ class index”h]”(hŒterm”“”)�”}”(hŒclass”h]”hŒclass”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´K3hjQubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´K3hjLubjP)�”}”(hŒsize object size zspage stores”h]”(jV)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´K5hj„ubjf)�”}”(hhh]”hÌ)�”}”(hŒobject size zspage stores”h]”hŒobject size zspage stores”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´K5hjLh²hubjP)�”}”(hŒD10% the number of zspages with usage ratio less than 10% (see below)”h]”(jV)�”}”(hŒ10%”h]”hŒ10%”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´K7hj³ubjf)�”}”(hhh]”hÌ)�”}”(hŒ@the number of zspages with usage ratio less than 10% (see below)”h]”hŒ@the number of zspages with usage ratio less than 10% (see below)”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´K7hjLh²hubjP)�”}”(hŒ>20% the number of zspages with usage ratio between 10% and 20%”h]”(jV)�”}”(hŒ20%”h]”hŒ20%”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´K9hjâubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 10% and 20%”h]”hŒ:the number of zspages with usage ratio between 10% and 20%”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K:hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´K9hjLh²hubjP)�”}”(hŒ>30% the number of zspages with usage ratio between 20% and 30%”h]”(jV)�”}”(hŒ30%”h]”hŒ30%”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´K;hjubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 20% and 30%”h]”hŒ:the number of zspages with usage ratio between 20% and 30%”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K40% the number of zspages with usage ratio between 30% and 40%”h]”(jV)�”}”(hŒ40%”h]”hŒ40%”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´K=hj@ubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 30% and 40%”h]”hŒ:the number of zspages with usage ratio between 30% and 40%”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K>hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´K=hjLh²hubjP)�”}”(hŒ>50% the number of zspages with usage ratio between 40% and 50%”h]”(jV)�”}”(hŒ50%”h]”hŒ50%”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´K?hjoubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 40% and 50%”h]”hŒ:the number of zspages with usage ratio between 40% and 50%”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K@hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´K?hjLh²hubjP)�”}”(hŒ>60% the number of zspages with usage ratio between 50% and 60%”h]”(jV)�”}”(hŒ60%”h]”hŒ60%”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KAhjžubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 50% and 60%”h]”hŒ:the number of zspages with usage ratio between 50% and 60%”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KBhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KAhjLh²hubjP)�”}”(hŒ>70% the number of zspages with usage ratio between 60% and 70%”h]”(jV)�”}”(hŒ70%”h]”hŒ70%”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KChjÍubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 60% and 70%”h]”hŒ:the number of zspages with usage ratio between 60% and 70%”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KDhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KChjLh²hubjP)�”}”(hŒ>80% the number of zspages with usage ratio between 70% and 80%”h]”(jV)�”}”(hŒ80%”h]”hŒ80%”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KEhjüubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 70% and 80%”h]”hŒ:the number of zspages with usage ratio between 70% and 80%”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KFhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KEhjLh²hubjP)�”}”(hŒ>90% the number of zspages with usage ratio between 80% and 90%”h]”(jV)�”}”(hŒ90%”h]”hŒ90%”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KGhj+ubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 80% and 90%”h]”hŒ:the number of zspages with usage ratio between 80% and 90%”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KHhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KGhjLh²hubjP)�”}”(hŒ>99% the number of zspages with usage ratio between 90% and 99%”h]”(jV)�”}”(hŒ99%”h]”hŒ99%”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KIhjZubjf)�”}”(hhh]”hÌ)�”}”(hŒ:the number of zspages with usage ratio between 90% and 99%”h]”hŒ:the number of zspages with usage ratio between 90% and 99%”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KJhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KIhjLh²hubjP)�”}”(hŒ0100% the number of zspages with usage ratio 100%”h]”(jV)�”}”(hŒ100%”h]”hŒ100%”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KKhj‰ubjf)�”}”(hhh]”hÌ)�”}”(hŒ+the number of zspages with usage ratio 100%”h]”hŒ+the number of zspages with usage ratio 100%”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KLhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KKhjLh²hubjP)�”}”(hŒ-obj_allocated the number of objects allocated”h]”(jV)�”}”(hŒ obj_allocated”h]”hŒ obj_allocated”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KMhj¸ubjf)�”}”(hhh]”hÌ)�”}”(hŒthe number of objects allocated”h]”hŒthe number of objects allocated”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KNhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KMhjLh²hubjP)�”}”(hŒ4obj_used the number of objects allocated to the user”h]”(jV)�”}”(hŒobj_used”h]”hŒobj_used”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KOhjçubjf)�”}”(hhh]”hÌ)�”}”(hŒ+the number of objects allocated to the user”h]”hŒ+the number of objects allocated to the user”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KPhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KOhjLh²hubjP)�”}”(hŒ6pages_used the number of pages allocated for the class”h]”(jV)�”}”(hŒ pages_used”h]”hŒ pages_used”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KQhjubjf)�”}”(hhh]”hÌ)�”}”(hŒ+the number of pages allocated for the class”h]”hŒ+the number of pages allocated for the class”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KRhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KQhjLh²hubjP)�”}”(hŒ=pages_per_zspage the number of 0-order pages to make a zspage”h]”(jV)�”}”(hŒpages_per_zspage”h]”hŒpages_per_zspage”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KShjEubjf)�”}”(hhh]”hÌ)�”}”(hŒ,the number of 0-order pages to make a zspage”h]”hŒ,the number of 0-order pages to make a zspage”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KThjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KShjLh²hubjP)�”}”(hŒCfreeable the approximate number of pages class compaction can free ”h]”(jV)�”}”(hŒfreeable”h]”hŒfreeable”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³hÊh´KVhjtubjf)�”}”(hhh]”hÌ)�”}”(hŒ9the approximate number of pages class compaction can free”h]”hŒ9the approximate number of pages class compaction can free”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KVhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³hÊh´KVhjLh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhjh²hh³hÊh´NubhÌ)�”}”(hX^Each zspage maintains inuse counter which keeps track of the number of objects stored in the zspage. The inuse counter determines the zspage's "fullness group" which is calculated as the ratio of the "inuse" objects to the total number of objects the zspage can hold (objs_per_zspage). The closer the inuse counter is to objs_per_zspage, the better.”h]”hXhEach zspage maintains inuse counter which keeps track of the number of objects stored in the zspage. The inuse counter determines the zspage’s “fullness groupâ€� which is calculated as the ratio of the “inuseâ€� objects to the total number of objects the zspage can hold (objs_per_zspage). The closer the inuse counter is to objs_per_zspage, the better.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KXhjh²hubeh}”(h]”Œstat”ah ]”h"]”Œstat”ah$]”h&]”uh1hµhh·h²hh³hÊh´K"ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Internals”h]”hŒ Internals”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¿h²hh³hÊh´K_ubhÌ)�”}”(hX$zsmalloc has 255 size classes, each of which can hold a number of zspages. Each zspage can contain up to ZSMALLOC_CHAIN_SIZE physical (0-order) pages. The optimal zspage chain size for each size class is calculated during the creation of the zsmalloc pool (see calculate_zspage_chain_size()).”h]”hX$zsmalloc has 255 size classes, each of which can hold a number of zspages. Each zspage can contain up to ZSMALLOC_CHAIN_SIZE physical (0-order) pages. The optimal zspage chain size for each size class is calculated during the creation of the zsmalloc pool (see calculate_zspage_chain_size()).”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kahj¿h²hubhÌ)�”}”(hŒ³As an optimization, zsmalloc merges size classes that have similar characteristics in terms of the number of pages per zspage and the number of objects that each zspage can store.”h]”hŒ³As an optimization, zsmalloc merges size classes that have similar characteristics in terms of the number of pages per zspage and the number of objects that each zspage can store.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kfhj¿h²hubhÌ)�”}”(hŒ4For instance, consider the following size classes:::”h]”hŒ3For instance, consider the following size classes::”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kjhj¿h²hubj9)�”}”(hX0class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... 94 1536 0 .... 0 0 0 0 3 0 100 1632 0 .... 0 0 0 0 2 0 ...”h]”hX0class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... 94 1536 0 .... 0 0 0 0 3 0 100 1632 0 .... 0 0 0 0 2 0 ...”…”�”}”hjúsbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´Klhj¿h²hubhÌ)�”}”(hX/Size classes #95-99 are merged with size class #100. This means that when we need to store an object of size, say, 1568 bytes, we end up using size class #100 instead of size class #96. Size class #100 is meant for objects of size 1632 bytes, so each object of size 1568 bytes wastes 1632-1568=64 bytes.”h]”hX/Size classes #95-99 are merged with size class #100. This means that when we need to store an object of size, say, 1568 bytes, we end up using size class #100 instead of size class #96. Size class #100 is meant for objects of size 1632 bytes, so each object of size 1568 bytes wastes 1632-1568=64 bytes.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kshj¿h²hubhÌ)�”}”(hŒÊSize class #100 consists of zspages with 2 physical pages each, which can hold a total of 5 objects. If we need to store 13 objects of size 1568, we end up allocating three zspages, or 6 physical pages.”h]”hŒÊSize class #100 consists of zspages with 2 physical pages each, which can hold a total of 5 objects. If we need to store 13 objects of size 1568, we end up allocating three zspages, or 6 physical pages.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kxhj¿h²hubhÌ)�”}”(hŒòHowever, if we take a closer look at size class #96 (which is meant for objects of size 1568 bytes) and trace `calculate_zspage_chain_size()`, we find that the most optimal zspage configuration for this class is a chain of 5 physical pages:::”h]”(hŒnHowever, if we take a closer look at size class #96 (which is meant for objects of size 1568 bytes) and trace ”…”�”}”(hj$h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`calculate_zspage_chain_size()`”h]”hŒcalculate_zspage_chain_size()”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hj$ubhŒd, we find that the most optimal zspage configuration for this class is a chain of 5 physical pages::”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hj¿h²hubj9)�”}”(hXpages per zspage wasted bytes used% 1 960 76 2 352 95 3 1312 89 4 704 95 5 96 99”h]”hXpages per zspage wasted bytes used% 1 960 76 2 352 95 3 1312 89 4 704 95 5 96 99”…”�”}”hjFsbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´K�hj¿h²hubhÌ)�”}”(hXThis means that a class #96 configuration with 5 physical pages can store 13 objects of size 1568 in a single zspage, using a total of 5 physical pages. This is more efficient than the class #100 configuration, which would use 6 physical pages to store the same number of objects.”h]”hXThis means that a class #96 configuration with 5 physical pages can store 13 objects of size 1568 in a single zspage, using a total of 5 physical pages. This is more efficient than the class #100 configuration, which would use 6 physical pages to store the same number of objects.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kˆhj¿h²hubhÌ)�”}”(hŒøAs the zspage chain size for class #96 increases, its key characteristics such as pages per-zspage and objects per-zspage also change. This leads to dewer class mergers, resulting in a more compact grouping of classes, which reduces memory wastage.”h]”hŒøAs the zspage chain size for class #96 increases, its key characteristics such as pages per-zspage and objects per-zspage also change. This leads to dewer class mergers, resulting in a more compact grouping of classes, which reduces memory wastage.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hj¿h²hubhÌ)�”}”(hŒWLet's take a closer look at the bottom of `/sys/kernel/debug/zsmalloc/zramX/classes`:::”h]”(hŒ,Let’s take a closer look at the bottom of ”…”�”}”(hjph²hh³Nh´Nubj-)�”}”(hŒ*`/sys/kernel/debug/zsmalloc/zramX/classes`”h]”hŒ(/sys/kernel/debug/zsmalloc/zramX/classes”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjpubhŒ::”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K’hj¿h²hubj9)�”}”(hX1class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... 202 3264 0 .. 0 0 0 0 4 0 254 4096 0 .. 0 0 0 0 1 0 ...”h]”hX1class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... 202 3264 0 .. 0 0 0 0 4 0 254 4096 0 .. 0 0 0 0 1 0 ...”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´K”hj¿h²hubhÌ)�”}”(hXSize class #202 stores objects of size 3264 bytes and has a maximum of 4 pages per zspage. Any object larger than 3264 bytes is considered huge and belongs to size class #254, which stores each object in its own physical page (objects in huge classes do not share pages).”h]”hXSize class #202 stores objects of size 3264 bytes and has a maximum of 4 pages per zspage. Any object larger than 3264 bytes is considered huge and belongs to size class #254, which stores each object in its own physical page (objects in huge classes do not share pages).”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K›hj¿h²hubhÌ)�”}”(hŒ¿Increasing the size of the chain of zspages also results in a higher watermark for the huge size class and fewer huge classes overall. This allows for more efficient storage of large objects.”h]”hŒ¿Increasing the size of the chain of zspages also results in a higher watermark for the huge size class and fewer huge classes overall. This allows for more efficient storage of large objects.”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hj¿h²hubhÌ)�”}”(hŒFFor zspage chain size of 8, huge class watermark becomes 3632 bytes:::”h]”hŒEFor zspage chain size of 8, huge class watermark becomes 3632 bytes::”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¤hj¿h²hubj9)�”}”(hX½class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... 202 3264 0 .. 0 0 0 0 4 0 211 3408 0 .. 0 0 0 0 5 0 217 3504 0 .. 0 0 0 0 6 0 222 3584 0 .. 0 0 0 0 7 0 225 3632 0 .. 0 0 0 0 8 0 254 4096 0 .. 0 0 0 0 1 0 ...”h]”hX½class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... 202 3264 0 .. 0 0 0 0 4 0 211 3408 0 .. 0 0 0 0 5 0 217 3504 0 .. 0 0 0 0 6 0 222 3584 0 .. 0 0 0 0 7 0 225 3632 0 .. 0 0 0 0 8 0 254 4096 0 .. 0 0 0 0 1 0 ...”…”�”}”hjÈsbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´K¦hj¿h²hubhÌ)�”}”(hŒGFor zspage chain size of 16, huge class watermark becomes 3840 bytes:::”h]”hŒFFor zspage chain size of 16, huge class watermark becomes 3840 bytes::”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K±hj¿h²hubj9)�”}”(hX'class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... 202 3264 0 .. 0 0 0 0 4 0 206 3328 0 .. 0 0 0 0 13 0 207 3344 0 .. 0 0 0 0 9 0 208 3360 0 .. 0 0 0 0 14 0 211 3408 0 .. 0 0 0 0 5 0 212 3424 0 .. 0 0 0 0 16 0 214 3456 0 .. 0 0 0 0 11 0 217 3504 0 .. 0 0 0 0 6 0 219 3536 0 .. 0 0 0 0 13 0 222 3584 0 .. 0 0 0 0 7 0 223 3600 0 .. 0 0 0 0 15 0 225 3632 0 .. 0 0 0 0 8 0 228 3680 0 .. 0 0 0 0 9 0 230 3712 0 .. 0 0 0 0 10 0 232 3744 0 .. 0 0 0 0 11 0 234 3776 0 .. 0 0 0 0 12 0 235 3792 0 .. 0 0 0 0 13 0 236 3808 0 .. 0 0 0 0 14 0 238 3840 0 .. 0 0 0 0 15 0 254 4096 0 .. 0 0 0 0 1 0 ...”h]”hX'class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... 202 3264 0 .. 0 0 0 0 4 0 206 3328 0 .. 0 0 0 0 13 0 207 3344 0 .. 0 0 0 0 9 0 208 3360 0 .. 0 0 0 0 14 0 211 3408 0 .. 0 0 0 0 5 0 212 3424 0 .. 0 0 0 0 16 0 214 3456 0 .. 0 0 0 0 11 0 217 3504 0 .. 0 0 0 0 6 0 219 3536 0 .. 0 0 0 0 13 0 222 3584 0 .. 0 0 0 0 7 0 223 3600 0 .. 0 0 0 0 15 0 225 3632 0 .. 0 0 0 0 8 0 228 3680 0 .. 0 0 0 0 9 0 230 3712 0 .. 0 0 0 0 10 0 232 3744 0 .. 0 0 0 0 11 0 234 3776 0 .. 0 0 0 0 12 0 235 3792 0 .. 0 0 0 0 13 0 236 3808 0 .. 0 0 0 0 14 0 238 3840 0 .. 0 0 0 0 15 0 254 4096 0 .. 0 0 0 0 1 0 ...”…”�”}”hjäsbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´K³hj¿h²hubhÌ)�”}”(hŒOOverall the combined zspage chain size effect on zsmalloc pool configuration:::”h]”hŒNOverall the combined zspage chain size effect on zsmalloc pool configuration::”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÌhj¿h²hubj9)�”}”(hXÞpages per zspage number of size classes (clusters) huge size class watermark 4 69 3264 5 86 3408 6 93 3504 7 112 3584 8 123 3632 9 140 3680 10 143 3712 11 159 3744 12 164 3776 13 180 3792 14 183 3808 15 188 3840 16 191 3840”h]”hXÞpages per zspage number of size classes (clusters) huge size class watermark 4 69 3264 5 86 3408 6 93 3504 7 112 3584 8 123 3632 9 140 3680 10 143 3712 11 159 3744 12 164 3776 13 180 3792 14 183 3808 15 188 3840 16 191 3840”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´KÎhj¿h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒA synthetic test”h]”hŒA synthetic test”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KßubhÌ)�”}”(hŒ=zram as a build artifacts storage (Linux kernel compilation).”h]”hŒ=zram as a build artifacts storage (Linux kernel compilation).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Káhjh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hXv`CONFIG_ZSMALLOC_CHAIN_SIZE=4` zsmalloc classes stats::: class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... Total 13 .. 51 413836 412973 159955 3 zram mm_stat::: 1691783168 628083717 655175680 0 655175680 60 0 34048 34049 ”h]”(hÌ)�”}”(hŒ`CONFIG_ZSMALLOC_CHAIN_SIZE=4`”h]”j-)�”}”(hj:h]”hŒCONFIG_ZSMALLOC_CHAIN_SIZE=4”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kãhj4ubhÌ)�”}”(hŒzsmalloc classes stats:::”h]”hŒzsmalloc classes stats::”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kåhj4ubj9)�”}”(hŒÊclass size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... Total 13 .. 51 413836 412973 159955 3”h]”hŒÊclass size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... Total 13 .. 51 413836 412973 159955 3”…”�”}”hj]sbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´Kçhj4ubhÌ)�”}”(hŒzram mm_stat:::”h]”hŒzram mm_stat::”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kìhj4ubj9)�”}”(hŒU1691783168 628083717 655175680 0 655175680 60 0 34048 34049”h]”hŒU1691783168 628083717 655175680 0 655175680 60 0 34048 34049”…”�”}”hjysbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´Kîhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j2hj/h²hh³hÊh´Nubj3)�”}”(hXv`CONFIG_ZSMALLOC_CHAIN_SIZE=8` zsmalloc classes stats::: class size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... Total 18 .. 87 414852 412978 156666 0 zram mm_stat::: 1691803648 627793930 641703936 0 641703936 60 0 33591 33591 ”h]”(hÌ)�”}”(hŒ`CONFIG_ZSMALLOC_CHAIN_SIZE=8`”h]”j-)�”}”(hj“h]”hŒCONFIG_ZSMALLOC_CHAIN_SIZE=8”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kñhj�ubhÌ)�”}”(hŒzsmalloc classes stats:::”h]”hŒzsmalloc classes stats::”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kóhj�ubj9)�”}”(hŒÊclass size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... Total 18 .. 87 414852 412978 156666 0”h]”hŒÊclass size 10% .... 100% obj_allocated obj_used pages_used pages_per_zspage freeable ... Total 18 .. 87 414852 412978 156666 0”…”�”}”hj¶sbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´Kõhj�ubhÌ)�”}”(hŒzram mm_stat:::”h]”hŒzram mm_stat::”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kúhj�ubj9)�”}”(hŒU1691803648 627793930 641703936 0 641703936 60 0 33591 33591”h]”hŒU1691803648 627793930 641703936 0 641703936 60 0 33591 33591”…”�”}”hjÒsbah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j8h³hÊh´Kühj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j2hj/h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1j-h³hÊh´Kãhjh²hubhÌ)�”}”(hXUsing larger zspage chains may result in using fewer physical pages, as seen in the example where the number of physical pages used decreased from 159955 to 156666, at the same time maximum zsmalloc pool memory usage went down from 655175680 to 641703936 bytes.”h]”hXUsing larger zspage chains may result in using fewer physical pages, as seen in the example where the number of physical pages used decreased from 159955 to 156666, at the same time maximum zsmalloc pool memory usage went down from 655175680 to 641703936 bytes.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kþhjh²hubhÌ)�”}”(hX•However, this advantage may be offset by the potential for increased system memory pressure (as some zspages have larger chain sizes) in cases where there is heavy internal fragmentation and zspool compaction is unable to relocate objects and release zspages. In these cases, it is recommended to decrease the limit on the size of the zspage chains (as specified by the CONFIG_ZSMALLOC_CHAIN_SIZE option).”h]”hX•However, this advantage may be offset by the potential for increased system memory pressure (as some zspages have larger chain sizes) in cases where there is heavy internal fragmentation and zspool compaction is unable to relocate objects and release zspages. In these cases, it is recommended to decrease the limit on the size of the zspage chains (as specified by the CONFIG_ZSMALLOC_CHAIN_SIZE option).”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjh²hubeh}”(h]”Œa-synthetic-test”ah ]”h"]”Œa synthetic test”ah$]”h&]”uh1hµhj¿h²hh³hÊh´Kßubeh}”(h]”Œ internals”ah ]”h"]”Œ internals”ah$]”h&]”uh1hµhh·h²hh³hÊh´K_ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Functions”h]”hŒ Functions”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œobj_to_location (C function)”Œc.obj_to_location”hNt”auh1j+hjh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒWvoid obj_to_location (unsigned long obj, struct zpdesc **zpdesc, unsigned int *obj_idx)”h]”hŒdesc_signature_line”“”)�”}”(hŒVvoid obj_to_location(unsigned long obj, struct zpdesc **zpdesc, unsigned int *obj_idx)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jMhjIh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´MubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j_hjIh²hh³j^h´MubhŒ desc_name”“”)�”}”(hŒobj_to_location”h]”hŒ desc_sig_name”“”)�”}”(hŒobj_to_location”h]”hŒobj_to_location”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jvhjrubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”jHjIuh1jphjIh²hh³j^h´MubhŒdesc_parameterlist”“”)�”}”(hŒB(unsigned long obj, struct zpdesc **zpdesc, unsigned int *obj_idx)”h]”(hŒdesc_parameter”“”)�”}”(hŒunsigned long obj”h]”(jN)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj—ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj—ubjN)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj—ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj—ubjw)�”}”(hŒobj”h]”hŒobj”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj‘ubj–)�”}”(hŒstruct zpdesc **zpdesc”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jìhjèubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjèubh)�”}”(hhh]”jw)�”}”(hŒzpdesc”h]”hŒzpdesc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j*Œ ASTIdentifier”“”)�”}”j%jzsbŒc.obj_to_location”†”asbuh1hhjèubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjèubhŒdesc_sig_punctuation”“”)�”}”(hjíh]”hŒ*”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jEhjèubjF)�”}”(hjíh]”hŒ*”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jEhjèubjw)�”}”(hŒzpdesc”h]”hŒzpdesc”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjèubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj‘ubj–)�”}”(hŒunsigned int *obj_idx”h]”(jN)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjwubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjwubjN)�”}”(hŒint”h]”hŒint”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjwubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjwubjF)�”}”(hjíh]”hŒ*”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jEhjwubjw)�”}”(hŒobj_idx”h]”hŒobj_idx”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j�hjIh²hh³j^h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jHjIŒ add_permalink”ˆuh1jGŒsphinx_line_type”Œ declarator”hjCh²hh³j^h´Mubah}”(h]”j:ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jAh³j^h´Mhj>h²hubhŒ desc_content”“”)�”}”(hhh]”hÌ)�”}”(hŒ3get (, ) from encoded object value”h]”hŒ3get (, ) from encoded object value”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mhjñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj>h²hh³j^h´Mubeh}”(h]”h ]”(j#Œfunction”eh"]”h$]”h&]”Œdomain”j#Œobjtype”j Œdesctype”j Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j<h²hhjh³Nh´NubhŒ container”“”)�”}”(hŒ¨**Parameters** ``unsigned long obj`` the encoded object value ``struct zpdesc **zpdesc`` zpdesc object resides in zspage ``unsigned int *obj_idx`` object index”h]”(hÌ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hj h]”hŒ Parameters”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mhj ubjK)�”}”(hhh]”(jP)�”}”(hŒ/``unsigned long obj`` the encoded object value ”h]”(jV)�”}”(hŒ``unsigned long obj``”h]”j)�”}”(hj? h]”hŒunsigned long obj”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mhj9 ubjf)�”}”(hhh]”hÌ)�”}”(hŒthe encoded object value”h]”hŒthe encoded object value”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jT h´MhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj9 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³jT h´Mhj6 ubjP)�”}”(hŒ;``struct zpdesc **zpdesc`` zpdesc object resides in zspage ”h]”(jV)�”}”(hŒ``struct zpdesc **zpdesc``”h]”j)�”}”(hjx h]”hŒstruct zpdesc **zpdesc”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mhjr ubjf)�”}”(hhh]”hÌ)�”}”(hŒzpdesc object resides in zspage”h]”hŒzpdesc object resides in zspage”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j� h´MhjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³j� h´Mhj6 ubjP)�”}”(hŒ&``unsigned int *obj_idx`` object index”h]”(jV)�”}”(hŒ``unsigned int *obj_idx``”h]”j)�”}”(hj± h]”hŒunsigned int *obj_idx”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mhj« ubjf)�”}”(hhh]”hÌ)�”}”(hŒ object index”h]”hŒ object index”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´MhjÇ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj« ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³jÆ h´Mhj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjh²hh³Nh´Nubj,)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j8Œlocation_to_obj (C function)”Œc.location_to_obj”hNt”auh1j+hjh²hh³Nh´Nubj=)�”}”(hhh]”(jB)�”}”(hŒcunsigned long location_to_obj (struct zpdesc *zpdesc, unsigned int obj_idx, unsigned int class_idx)”h]”jH)�”}”(hŒbunsigned long location_to_obj(struct zpdesc *zpdesc, unsigned int obj_idx, unsigned int class_idx)”h]”(jN)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M,ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj h²hh³j h´M,ubjN)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj h²hh³j h´M,ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj h²hh³j h´M,ubjq)�”}”(hŒlocation_to_obj”h]”jw)�”}”(hŒlocation_to_obj”h]”hŒlocation_to_obj”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjD ubah}”(h]”h ]”(jŠj‹eh"]”h$]”h&]”jHjIuh1jphj h²hh³j h´M,ubj�)�”}”(hŒE(struct zpdesc *zpdesc, unsigned int obj_idx, unsigned int class_idx)”h]”(j–)�”}”(hŒstruct zpdesc *zpdesc”h]”(jí)�”}”(hjðh]”hŒstruct”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj` ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj` ubh)�”}”(hhh]”jw)�”}”(hŒzpdesc”h]”hŒzpdesc”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j#Œreftype”j%Œ reftarget”j„ Œmodname”NŒ classname”Nj)j,)�”}”j/]”j2)�”}”j%jJ sbŒc.location_to_obj”†”asbuh1hhj` ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj` ubjF)�”}”(hjíh]”hŒ*”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jEhj` ubjw)�”}”(hŒzpdesc”h]”hŒzpdesc”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj` ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj\ ubj–)�”}”(hŒunsigned int obj_idx”h]”(jN)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÒ ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjÒ ubjN)�”}”(hŒint”h]”hŒint”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjÒ ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjÒ ubjw)�”}”(hŒobj_idx”h]”hŒobj_idx”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjÒ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj\ ubj–)�”}”(hŒunsigned int class_idx”h]”(jN)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj# ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj# ubjN)�”}”(hŒint”h]”hŒint”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj# ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj# ubjw)�”}”(hŒ class_idx”h]”hŒ class_idx”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj# ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj\ ubeh}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j�hj h²hh³j h´M,ubeh}”(h]”h ]”h"]”h$]”h&]”jHjIjáˆuh1jGjâjãhj h²hh³j h´M,ubah}”(h]”jþ ah ]”(jçjèeh"]”h$]”h&]”jìˆjí)jîhuh1jAh³j h´M,hj h²hubjð)�”}”(hhh]”hÌ)�”}”(hŒ8encode (, , ) into obj value”h]”hŒ8encode (, , ) into obj value”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M,hj† h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj h²hh³j h´M,ubeh}”(h]”h ]”(j#Œfunction”eh"]”h$]”h&]”j j#j j¡ j j¡ j ‰j ‰j ‰uh1j<h²hhjh³Nh´Nubj )�”}”(hŒÈ**Parameters** ``struct zpdesc *zpdesc`` zpdesc object resides in zspage ``unsigned int obj_idx`` object index ``unsigned int class_idx`` size class index; ignored when ZS_OBJ_CLASS_BITS == 0”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j! )�”}”(hj« h]”hŒ Parameters”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj© ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M0hj¥ ubjK)�”}”(hhh]”(jP)�”}”(hŒ:``struct zpdesc *zpdesc`` zpdesc object resides in zspage ”h]”(jV)�”}”(hŒ``struct zpdesc *zpdesc``”h]”j)�”}”(hjÊ h]”hŒstruct zpdesc *zpdesc”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M-hjÄ ubjf)�”}”(hhh]”hÌ)�”}”(hŒzpdesc object resides in zspage”h]”hŒzpdesc object resides in zspage”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jß h´M-hjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÄ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³jß h´M-hjÁ ubjP)�”}”(hŒ&``unsigned int obj_idx`` object index ”h]”(jV)�”}”(hŒ``unsigned int obj_idx``”h]”j)�”}”(hj h]”hŒunsigned int obj_idx”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M.hjý ubjf)�”}”(hhh]”hÌ)�”}”(hŒ object index”h]”hŒ object index”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´M.hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjý ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³j h´M.hjÁ ubjP)�”}”(hŒP``unsigned int class_idx`` size class index; ignored when ZS_OBJ_CLASS_BITS == 0”h]”(jV)�”}”(hŒ``unsigned int class_idx``”h]”j)�”}”(hj< h]”hŒunsigned int class_idx”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj: ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M0hj6 ubjf)�”}”(hhh]”hÌ)�”}”(hŒ5size class index; ignored when ZS_OBJ_CLASS_BITS == 0”h]”hŒ5size class index; ignored when ZS_OBJ_CLASS_BITS == 0”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M/hjR ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³jQ h´M0hjÁ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhj¥ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjh²hh³Nh´Nubj,)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j8Œ"zs_lookup_class_index (C function)”Œc.zs_lookup_class_index”hNt”auh1j+hjh²hh³Nh´Nubj=)�”}”(hhh]”(jB)�”}”(hŒLunsigned int zs_lookup_class_index (struct zs_pool *pool, unsigned int size)”h]”jH)�”}”(hŒKunsigned int zs_lookup_class_index(struct zs_pool *pool, unsigned int size)”h]”(jN)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj’ h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´MWubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj’ h²hh³j¤ h´MWubjN)�”}”(hŒint”h]”hŒint”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj’ h²hh³j¤ h´MWubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj’ h²hh³j¤ h´MWubjq)�”}”(hŒzs_lookup_class_index”h]”jw)�”}”(hŒzs_lookup_class_index”h]”hŒzs_lookup_class_index”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjÏ ubah}”(h]”h ]”(jŠj‹eh"]”h$]”h&]”jHjIuh1jphj’ h²hh³j¤ h´MWubj�)�”}”(hŒ)(struct zs_pool *pool, unsigned int size)”h]”(j–)�”}”(hŒstruct zs_pool *pool”h]”(jí)�”}”(hjðh]”hŒstruct”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjë ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjë ubh)�”}”(hhh]”jw)�”}”(hŒzs_pool”h]”hŒzs_pool”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j#Œreftype”j%Œ reftarget”j Œmodname”NŒ classname”Nj)j,)�”}”j/]”j2)�”}”j%jÕ sbŒc.zs_lookup_class_index”†”asbuh1hhjë ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjë ubjF)�”}”(hjíh]”hŒ*”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jEhjë ubjw)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjë ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hjç ubj–)�”}”(hŒunsigned int size”h]”(jN)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj] ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj] ubjN)�”}”(hŒint”h]”hŒint”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj] ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj] ubjw)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj] ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hjç ubeh}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j�hj’ h²hh³j¤ h´MWubeh}”(h]”h ]”h"]”h$]”h&]”jHjIjáˆuh1jGjâjãhjŽ h²hh³j¤ h´MWubah}”(h]”j‰ ah ]”(jçjèeh"]”h$]”h&]”jìˆjí)jîhuh1jAh³j¤ h´MWhj‹ h²hubjð)�”}”(hhh]”hÌ)�”}”(hŒZReturns index of the zsmalloc :c:type:`size_class` that hold objects of the provided size.”h]”(hŒReturns index of the zsmalloc ”…”�”}”(hjà h²hh³Nh´Nubh)�”}”(hŒ:c:type:`size_class`”h]”j)�”}”(hjÍ h]”hŒ size_class”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”(Œxref”j#Œc-type”eh"]”h$]”h&]”uh1jhjË ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ mm/zsmalloc”Œ refdomain”j#Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j)j,)�”}”j/]”j) Œc.zs_lookup_class_index”†”asbŒ reftarget”Œ size_class”uh1hh³j^h´Mhjà ubhŒ( that hold objects of the provided size.”…”�”}”(hjà h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´MWhjÀ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj‹ h²hh³j¤ h´MWubeh}”(h]”h ]”(j#Œfunction”eh"]”h$]”h&]”j j#j jj jj ‰j ‰j ‰uh1j<h²hhjh³Nh´Nubj )�”}”(hŒã**Parameters** ``struct zs_pool *pool`` zsmalloc pool to use ``unsigned int size`` object size **Context** Any context. **Return** the index of the zsmalloc :c:type:`size_class` that hold objects of the provided size.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j! )�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M[hj ubjK)�”}”(hhh]”(jP)�”}”(hŒ.``struct zs_pool *pool`` zsmalloc pool to use ”h]”(jV)�”}”(hŒ``struct zs_pool *pool``”h]”j)�”}”(hj/h]”hŒstruct zs_pool *pool”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´MYhj)ubjf)�”}”(hhh]”hÌ)�”}”(hŒzsmalloc pool to use”h]”hŒzsmalloc pool to use”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jDh´MYhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³jDh´MYhj&ubjP)�”}”(hŒ"``unsigned int size`` object size ”h]”(jV)�”}”(hŒ``unsigned int size``”h]”j)�”}”(hjhh]”hŒunsigned int size”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´MZhjbubjf)�”}”(hhh]”hÌ)�”}”(hŒ object size”h]”hŒ object size”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j}h´MZhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³j}h´MZhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhj ubhÌ)�”}”(hŒ **Context**”h]”j! )�”}”(hj£h]”hŒContext”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M\hj ubhÌ)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M\hj ubhÌ)�”}”(hŒ **Return**”h]”j! )�”}”(hjÊh]”hŒReturn”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M^hj ubhÌ)�”}”(hŒVthe index of the zsmalloc :c:type:`size_class` that hold objects of the provided size.”h]”(hŒthe index of the zsmalloc ”…”�”}”(hjàh²hh³Nh´Nubh)�”}”(hŒ:c:type:`size_class`”h]”j)�”}”(hjêh]”hŒ size_class”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”(jÙ j#Œc-type”eh"]”h$]”h&]”uh1jhjèubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jå Œ refdomain”j#Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j)j,)�”}”j/]”sbjð Œ size_class”uh1hh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M^hjàubhŒ( that hold objects of the provided size.”…”�”}”(hjàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´M^hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjh²hh³Nh´Nubj,)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j8Œzs_huge_class_size (C function)”Œc.zs_huge_class_size”hNt”auh1j+hjh²hh³Nh´Nubj=)�”}”(hhh]”(jB)�”}”(hŒ0size_t zs_huge_class_size (struct zs_pool *pool)”h]”jH)�”}”(hŒ/size_t zs_huge_class_size(struct zs_pool *pool)”h]”(h)�”}”(hhh]”jw)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j#Œreftype”j%Œ reftarget”j:Œmodname”NŒ classname”Nj)j,)�”}”j/]”j2)�”}”j%Œzs_huge_class_size”sbŒc.zs_huge_class_size”†”asbuh1hhj1h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M.ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj1h²hh³jYh´M.ubjq)�”}”(hŒzs_huge_class_size”h]”jw)�”}”(hjVh]”hŒzs_huge_class_size”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjhubah}”(h]”h ]”(jŠj‹eh"]”h$]”h&]”jHjIuh1jphj1h²hh³jYh´M.ubj�)�”}”(hŒ(struct zs_pool *pool)”h]”j–)�”}”(hŒstruct zs_pool *pool”h]”(jí)�”}”(hjðh]”hŒstruct”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjƒubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjƒubh)�”}”(hhh]”jw)�”}”(hŒzs_pool”h]”hŒzs_pool”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j#Œreftype”j%Œ reftarget”j§Œmodname”NŒ classname”Nj)j,)�”}”j/]”jTŒc.zs_huge_class_size”†”asbuh1hhjƒubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjƒubjF)�”}”(hjíh]”hŒ*”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jEhjƒubjw)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hjubah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j�hj1h²hh³jYh´M.ubeh}”(h]”h ]”h"]”h$]”h&]”jHjIjáˆuh1jGjâjãhj-h²hh³jYh´M.ubah}”(h]”j(ah ]”(jçjèeh"]”h$]”h&]”jìˆjí)jîhuh1jAh³jYh´M.hj*h²hubjð)�”}”(hhh]”hÌ)�”}”(hŒLReturns the size (in bytes) of the first huge zsmalloc :c:type:`size_class`.”h]”(hŒ7Returns the size (in bytes) of the first huge zsmalloc ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`size_class`”h]”j)�”}”(hjh]”hŒ size_class”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jÙ j#Œc-type”eh"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jå Œ refdomain”j#Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j)j,)�”}”j/]”jTŒc.zs_huge_class_size”†”asbjð Œ size_class”uh1hh³j^h´MhjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M.hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj*h²hh³jYh´M.ubeh}”(h]”h ]”(j#Œfunction”eh"]”h$]”h&]”j j#j jHj jHj ‰j ‰j ‰uh1j<h²hhjh³Nh´Nubj )�”}”(hXX**Parameters** ``struct zs_pool *pool`` zsmalloc pool to use **Description** The function returns the size of the first huge class - any object of equal or bigger size will be stored in zspage consisting of a single physical page. **Context** Any context. **Return** the size (in bytes) of the first huge zsmalloc :c:type:`size_class`.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j! )�”}”(hjRh]”hŒ Parameters”…”�”•šJ}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M2hjLubjK)�”}”(hhh]”jP)�”}”(hŒ.``struct zs_pool *pool`` zsmalloc pool to use ”h]”(jV)�”}”(hŒ``struct zs_pool *pool``”h]”j)�”}”(hjqh]”hŒstruct zs_pool *pool”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M0hjkubjf)�”}”(hhh]”hÌ)�”}”(hŒzsmalloc pool to use”h]”hŒzsmalloc pool to use”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j†h´M0hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³j†h´M0hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhjLubhÌ)�”}”(hŒ**Description**”h]”j! )�”}”(hj¬h]”hŒ Description”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M2hjLubhÌ)�”}”(hŒ™The function returns the size of the first huge class - any object of equal or bigger size will be stored in zspage consisting of a single physical page.”h]”hŒ™The function returns the size of the first huge class - any object of equal or bigger size will be stored in zspage consisting of a single physical page.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M1hjLubhÌ)�”}”(hŒ **Context**”h]”j! )�”}”(hjÓh]”hŒContext”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M5hjLubhÌ)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M6hjLubhÌ)�”}”(hŒ **Return**”h]”j! )�”}”(hjúh]”hŒReturn”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M8hjLubhÌ)�”}”(hŒDthe size (in bytes) of the first huge zsmalloc :c:type:`size_class`.”h]”(hŒ/the size (in bytes) of the first huge zsmalloc ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`size_class`”h]”j)�”}”(hjh]”hŒ size_class”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jÙ j#Œc-type”eh"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jå Œ refdomain”j#Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j)jjð Œ size_class”uh1hh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M8hjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j7h´M8hjLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjh²hh³Nh´Nubj,)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j8Œzs_malloc (C function)”Œ c.zs_malloc”hNt”auh1j+hjh²hh³Nh´Nubj=)�”}”(hhh]”(jB)�”}”(hŒUunsigned long zs_malloc (struct zs_pool *pool, size_t size, gfp_t gfp, const int nid)”h]”jH)�”}”(hŒTunsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t gfp, const int nid)”h]”(jN)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj^h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mkubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj^h²hh³jph´MkubjN)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj^h²hh³jph´Mkubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj^h²hh³jph´Mkubjq)�”}”(hŒ zs_malloc”h]”jw)�”}”(hŒ zs_malloc”h]”hŒ zs_malloc”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj›ubah}”(h]”h ]”(jŠj‹eh"]”h$]”h&]”jHjIuh1jphj^h²hh³jph´Mkubj�)�”}”(hŒ=(struct zs_pool *pool, size_t size, gfp_t gfp, const int nid)”h]”(j–)�”}”(hŒstruct zs_pool *pool”h]”(jí)�”}”(hjðh]”hŒstruct”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj·ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj·ubh)�”}”(hhh]”jw)�”}”(hŒzs_pool”h]”hŒzs_pool”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j#Œreftype”j%Œ reftarget”jÛŒmodname”NŒ classname”Nj)j,)�”}”j/]”j2)�”}”j%j¡sbŒ c.zs_malloc”†”asbuh1hhj·ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj·ubjF)�”}”(hjíh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jEhj·ubjw)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj³ubj–)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jw)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j#Œreftype”j%Œ reftarget”j2Œmodname”NŒ classname”Nj)j,)�”}”j/]”jõŒ c.zs_malloc”†”asbuh1hhj)ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj)ubjw)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj³ubj–)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”jw)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j#Œreftype”j%Œ reftarget”jzŒmodname”NŒ classname”Nj)j,)�”}”j/]”jõŒ c.zs_malloc”†”asbuh1hhjqubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjqubjw)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj³ubj–)�”}”(hŒ const int nid”h]”(jí)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj¹ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj¹ubjN)�”}”(hŒint”h]”hŒint”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhj¹ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj¹ubjw)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hj³ubeh}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j�hj^h²hh³jph´Mkubeh}”(h]”h ]”h"]”h$]”h&]”jHjIjáˆuh1jGjâjãhjZh²hh³jph´Mkubah}”(h]”jUah ]”(jçjèeh"]”h$]”h&]”jìˆjí)jîhuh1jAh³jph´MkhjWh²hubjð)�”}”(hhh]”hÌ)�”}”(hŒ'Allocate block of given size from pool.”h]”hŒ'Allocate block of given size from pool.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mkhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjWh²hh³jph´Mkubeh}”(h]”h ]”(j#Œfunction”eh"]”h$]”h&]”j j#j j7j j7j ‰j ‰j ‰uh1j<h²hhjh³Nh´Nubj )�”}”(hXŒ**Parameters** ``struct zs_pool *pool`` pool to allocate from ``size_t size`` size of block to allocate ``gfp_t gfp`` gfp flags when allocating object ``const int nid`` The preferred node id to allocate new zspage (if needed) **Description** On success, handle to the allocated object is returned, otherwise an ERR_PTR(). Allocation requests with size > ZS_MAX_ALLOC_SIZE will fail.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j! )�”}”(hjAh]”hŒ Parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mohj;ubjK)�”}”(hhh]”(jP)�”}”(hŒ/``struct zs_pool *pool`` pool to allocate from ”h]”(jV)�”}”(hŒ``struct zs_pool *pool``”h]”j)�”}”(hj`h]”hŒstruct zs_pool *pool”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´MlhjZubjf)�”}”(hhh]”hÌ)�”}”(hŒpool to allocate from”h]”hŒpool to allocate from”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³juh´Mlhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³juh´MlhjWubjP)�”}”(hŒ*``size_t size`` size of block to allocate ”h]”(jV)�”}”(hŒ``size_t size``”h]”j)�”}”(hj™h]”hŒ size_t size”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mmhj“ubjf)�”}”(hhh]”hÌ)�”}”(hŒsize of block to allocate”h]”hŒsize of block to allocate”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j®h´Mmhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³j®h´MmhjWubjP)�”}”(hŒ/``gfp_t gfp`` gfp flags when allocating object ”h]”(jV)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hjÒh]”hŒ gfp_t gfp”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´MnhjÌubjf)�”}”(hhh]”hÌ)�”}”(hŒ gfp flags when allocating object”h]”hŒ gfp flags when allocating object”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jçh´Mnhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³jçh´MnhjWubjP)�”}”(hŒK``const int nid`` The preferred node id to allocate new zspage (if needed) ”h]”(jV)�”}”(hŒ``const int nid``”h]”j)�”}”(hj h]”hŒ const int nid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mohjubjf)�”}”(hhh]”hÌ)�”}”(hŒ8The preferred node id to allocate new zspage (if needed)”h]”hŒ8The preferred node id to allocate new zspage (if needed)”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´Mohj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³j h´MohjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhj;ubhÌ)�”}”(hŒ**Description**”h]”j! )�”}”(hjFh]”hŒ Description”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mqhj;ubhÌ)�”}”(hŒŒOn success, handle to the allocated object is returned, otherwise an ERR_PTR(). Allocation requests with size > ZS_MAX_ALLOC_SIZE will fail.”h]”hŒŒOn success, handle to the allocated object is returned, otherwise an ERR_PTR(). Allocation requests with size > ZS_MAX_ALLOC_SIZE will fail.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´Mphj;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjh²hh³Nh´Nubj,)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j8Œzs_create_pool (C function)”Œc.zs_create_pool”hNt”auh1j+hjh²hh³Nh´Nubj=)�”}”(hhh]”(jB)�”}”(hŒ2struct zs_pool * zs_create_pool (const char *name)”h]”jH)�”}”(hŒ0struct zs_pool *zs_create_pool(const char *name)”h]”(jí)�”}”(hjðh]”hŒstruct”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‡h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M¬ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj‡h²hh³j˜h´M¬ubh)�”}”(hhh]”jw)�”}”(hŒzs_pool”h]”hŒzs_pool”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhj§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j#Œreftype”j%Œ reftarget”j¬Œmodname”NŒ classname”Nj)j,)�”}”j/]”j2)�”}”j%Œzs_create_pool”sbŒc.zs_create_pool”†”asbuh1hhj‡h²hh³j˜h´M¬ubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hj‡h²hh³j˜h´M¬ubjF)�”}”(hjíh]”hŒ*”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jEhj‡h²hh³j˜h´M¬ubjq)�”}”(hŒzs_create_pool”h]”jw)�”}”(hjÈh]”hŒzs_create_pool”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjæubah}”(h]”h ]”(jŠj‹eh"]”h$]”h&]”jHjIuh1jphj‡h²hh³j˜h´M¬ubj�)�”}”(hŒ(const char *name)”h]”j–)�”}”(hŒconst char *name”h]”(jí)�”}”(hj¿h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjubjN)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jZah"]”h$]”h&]”uh1jMhjubj`)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jlah"]”h$]”h&]”uh1j_hjubjF)�”}”(hjíh]”hŒ*”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jEhjubjw)�”}”(hŒname”h]”hŒname”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jƒah"]”h$]”h&]”uh1jvhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjHjIuh1j•hjýubah}”(h]”h ]”h"]”h$]”h&]”jHjIuh1j�hj‡h²hh³j˜h´M¬ubeh}”(h]”h ]”h"]”h$]”h&]”jHjIjáˆuh1jGjâjãhjƒh²hh³j˜h´M¬ubah}”(h]”j~ah ]”(jçjèeh"]”h$]”h&]”jìˆjí)jîhuh1jAh³j˜h´M¬hj€h²hubjð)�”}”(hhh]”hÌ)�”}”(hŒ(Creates an allocation pool to work from.”h]”hŒ(Creates an allocation pool to work from.”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M¬hjph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj€h²hh³j˜h´M¬ubeh}”(h]”h ]”(j#Œfunction”eh"]”h$]”h&]”j j#j j‹j j‹j ‰j ‰j ‰uh1j<h²hhjh³Nh´Nubj )�”}”(hŒî**Parameters** ``const char *name`` pool name to be created **Description** This function must be called before anything when using the zsmalloc allocator. On success, a pointer to the newly created pool is returned, otherwise NULL.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j! )�”}”(hj•h]”hŒ Parameters”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M°hj�ubjK)�”}”(hhh]”jP)�”}”(hŒ-``const char *name`` pool name to be created ”h]”(jV)�”}”(hŒ``const char *name``”h]”j)�”}”(hj´h]”hŒconst char *name”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jUh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M­hj®ubjf)�”}”(hhh]”hÌ)�”}”(hŒpool name to be created”h]”hŒpool name to be created”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÉh´M­hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOh³jÉh´M­hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhj�ubhÌ)�”}”(hŒ**Description**”h]”j! )�”}”(hjïh]”hŒ Description”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M¯hj�ubhÌ)�”}”(hŒOThis function must be called before anything when using the zsmalloc allocator.”h]”hŒOThis function must be called before anything when using the zsmalloc allocator.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M®hj�ubhÌ)�”}”(hŒLOn success, a pointer to the newly created pool is returned, otherwise NULL.”h]”hŒLOn success, a pointer to the newly created pool is returned, otherwise NULL.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒJ/var/lib/git/docbuild/linux/Documentation/mm/zsmalloc:269: ./mm/zsmalloc.c”h´M±hj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j hjh²hh³Nh´Nubeh}”(h]”Œ functions”ah ]”h"]”Œ functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´M ubeh}”(h]”Œzsmalloc”ah ]”h"]”Œzsmalloc”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j]Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j7j4j¼j¹jjjj j/j,uŒ nametypes”}”(j7‰j¼‰j‰j‰j/‰uh}”(j4h·j¹jjj¿j jj,jj:jCjþ j j‰ jŽ j(j-jUjZj~jƒuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.