€•QŒ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”Œ1/translations/zh_CN/virt/kvm/loongarch/hypercalls”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/zh_TW/virt/kvm/loongarch/hypercalls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/it_IT/virt/kvm/loongarch/hypercalls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ja_JP/virt/kvm/loongarch/hypercalls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ko_KR/virt/kvm/loongarch/hypercalls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/pt_BR/virt/kvm/loongarch/hypercalls”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/sp_SP/virt/kvm/loongarch/hypercalls”Œ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³ŒK/var/lib/git/docbuild/linux/Documentation/virt/kvm/loongarch/hypercalls.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ#The LoongArch paravirtual interface”h]”hŒ#The LoongArch paravirtual interface”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒÊKVM hypercalls use the HVCL instruction with code 0x100 and the hypercall number is put in a0. Up to five arguments may be placed in registers a1 - a5. The return value is placed in v0 (an alias of a0).”h]”hŒÊKVM hypercalls use the HVCL instruction with code 0x100 and the hypercall number is put in a0. Up to five arguments may be placed in registers a1 - a5. The return value is placed in v0 (an alias of a0).”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒCSource code for this interface can be found in arch/loongarch/kvm*.”h]”hŒCSource code for this interface can be found in arch/loongarch/kvm*.”…”�”}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒQuerying for existence”h]”hŒQuerying for existence”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhûh²hh³hÇh´KubhÞ)�”}”(hŒwTo determine if the host is running on KVM, we can utilize the cpucfg() function at index CPUCFG_KVM_BASE (0x40000000).”h]”hŒwTo determine if the host is running on KVM, we can utilize the cpucfg() function at index CPUCFG_KVM_BASE (0x40000000).”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhûh²hubhÞ)�”}”(hŒõThe CPUCFG_KVM_BASE range, spanning from 0x40000000 to 0x400000FF, The CPUCFG_KVM_BASE range between 0x40000000 - 0x400000FF is marked as reserved. Consequently, all current and future processors will not implement any feature within this range.”h]”hŒõThe CPUCFG_KVM_BASE range, spanning from 0x40000000 to 0x400000FF, The CPUCFG_KVM_BASE range between 0x40000000 - 0x400000FF is marked as reserved. Consequently, all current and future processors will not implement any feature within this range.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhûh²hubhÞ)�”}”(hŒ‡On a KVM-virtualized Linux system, a read operation on cpucfg() at index CPUCFG_KVM_BASE (0x40000000) returns the magic string 'KVM\0'.”h]”hŒ‹On a KVM-virtualized Linux system, a read operation on cpucfg() at index CPUCFG_KVM_BASE (0x40000000) returns the magic string ‘KVM0’.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhûh²hubhÞ)�”}”(hŒ‡Once you have determined that your host is running on a paravirtualization- capable KVM, you may now use hypercalls as described below.”h]”hŒ‡Once you have determined that your host is running on a paravirtualization- capable KVM, you may now use hypercalls as described below.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhûh²hubeh}”(h]”Œquerying-for-existence”ah ]”h"]”Œquerying for existence”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒKVM hypercall ABI”h]”hŒKVM hypercall ABI”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjLh²hh³hÇh´KubhÞ)�”}”(hX The KVM hypercall ABI is simple, with one scratch register a0 (v0) and at most five generic registers (a1 - a5) used as input parameters. The FP (Floating- point) and vector registers are not utilized as input registers and must remain unmodified during a hypercall.”h]”hX The KVM hypercall ABI is simple, with one scratch register a0 (v0) and at most five generic registers (a1 - a5) used as input parameters. The FP (Floating- point) and vector registers are not utilized as input registers and must remain unmodified during a hypercall.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hjLh²hubhÞ)�”}”(hŒHHypercall functions can be inlined as it only uses one scratch register.”h]”hŒHHypercall functions can be inlined as it only uses one scratch register.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K&hjLh²hubhÞ)�”}”(hŒThe parameters are as follows:”h]”hŒThe parameters are as follows:”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hjLh²hubhŒ block_quote”“”)�”}”(hXÞ======== ================= ================ Register IN OUT ======== ================= ================ a0 function number Return code a1 1st parameter - a2 2nd parameter - a3 3rd parameter - a4 4th parameter - a5 5th parameter - ======== ================= ================ ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j—hj”ubj˜)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j—hj”ubj˜)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j—hj”ubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÞ)�”}”(hŒRegister”h]”hŒRegister”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhj¾ubjÂ)�”}”(hhh]”hÞ)�”}”(hŒIN”h]”hŒIN”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhj¾ubjÂ)�”}”(hhh]”hÞ)�”}”(hŒOUT”h]”hŒOUT”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj”ubhŒtbody”“”)�”}”(hhh]”(j½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒa0”h]”hŒa0”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjubjÂ)�”}”(hhh]”hÞ)�”}”(hŒfunction number”h]”hŒfunction number”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjubjÂ)�”}”(hhh]”hÞ)�”}”(hŒ Return code”h]”hŒ Return code”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjubj½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒa1”h]”hŒa1”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K.hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjgubjÂ)�”}”(hhh]”hÞ)�”}”(hŒ1st parameter”h]”hŒ1st parameter”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K.hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjgubjÂ)�”}”(hhh]”hŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j›h³hÇh´K.hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjubj½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒa2”h]”hŒa2”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhj¿ubjÂ)�”}”(hhh]”hÞ)�”}”(hŒ2nd parameter”h]”hŒ2nd parameter”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhj¿ubjÂ)�”}”(hhh]”jœ)�”}”(hhh]”j¡)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j hjóubah}”(h]”h ]”h"]”h$]”h&]”j±j²uh1j›h³hÇh´K/hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjubj½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒa3”h]”hŒa3”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K0hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjubjÂ)�”}”(hhh]”hÞ)�”}”(hŒ3rd parameter”h]”hŒ3rd parameter”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K0hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjubjÂ)�”}”(hhh]”jœ)�”}”(hhh]”j¡)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j hjEubah}”(h]”h ]”h"]”h$]”h&]”j±j²uh1j›h³hÇh´K0hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjubj½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒa4”h]”hŒa4”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjcubjÂ)�”}”(hhh]”hÞ)�”}”(hŒ4th parameter”h]”hŒ4th parameter”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjcubjÂ)�”}”(hhh]”jœ)�”}”(hhh]”j¡)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j hj—ubah}”(h]”h ]”h"]”h$]”h&]”j±j²uh1j›h³hÇh´K1hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjubj½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒa5”h]”hŒa5”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K2hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjµubjÂ)�”}”(hhh]”hÞ)�”}”(hŒ5th parameter”h]”hŒ5th parameter”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K2hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjµubjÂ)�”}”(hhh]”jœ)�”}”(hhh]”j¡)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j hjéubah}”(h]”h ]”h"]”h$]”h&]”j±j²uh1j›h³hÇh´K2hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj”ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j’hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡h³hÇh´K*hjLh²hubhÞ)�”}”(hŒ-The return codes may be one of the following:”h]”hŒ-The return codes may be one of the following:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K5hjLh²hubjˆ)�”}”(hX==== ========================= Code Meaning ==== ========================= 0 Success -1 Hypercall not implemented -2 Bad Hypercall parameter ==== ========================= ”h]”jŽ)�”}”(hhh]”j“)�”}”(hhh]”(j˜)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j—hj5ubj˜)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j—hj5ubj¸)�”}”(hhh]”j½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒCode”h]”hŒCode”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K8hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjOubjÂ)�”}”(hhh]”hÞ)�”}”(hŒMeaning”h]”hŒMeaning”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K8hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j·hj5ubj)�”}”(hhh]”(j½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒ0”h]”hŒ0”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K:hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhj�ubjÂ)�”}”(hhh]”hÞ)�”}”(hŒSuccess”h]”hŒSuccess”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K:hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjŒubj½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒ-1”h]”hŒ-1”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjÆubjÂ)�”}”(hhh]”hÞ)�”}”(hŒHypercall not implemented”h]”hŒHypercall not implemented”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÁhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¼hjŒubj½)�”}”(hhh]”(jÂ)�”}”(hhh]”hÞ)�”}”(hŒ-2”h]”hŒ-2”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K