arm.c 69 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2012 - Virtual Open Systems and Columbia University
  4. * Author: Christoffer Dall <c.dall@virtualopensystems.com>
  5. */
  6. #include <linux/bug.h>
  7. #include <linux/cpu_pm.h>
  8. #include <linux/entry-kvm.h>
  9. #include <linux/errno.h>
  10. #include <linux/err.h>
  11. #include <linux/kvm_host.h>
  12. #include <linux/list.h>
  13. #include <linux/module.h>
  14. #include <linux/vmalloc.h>
  15. #include <linux/fs.h>
  16. #include <linux/mman.h>
  17. #include <linux/sched.h>
  18. #include <linux/kvm.h>
  19. #include <linux/kvm_irqfd.h>
  20. #include <linux/irqbypass.h>
  21. #include <linux/sched/stat.h>
  22. #include <linux/psci.h>
  23. #include <trace/events/kvm.h>
  24. #define CREATE_TRACE_POINTS
  25. #include "trace_arm.h"
  26. #include <linux/uaccess.h>
  27. #include <asm/ptrace.h>
  28. #include <asm/mman.h>
  29. #include <asm/tlbflush.h>
  30. #include <asm/cacheflush.h>
  31. #include <asm/cpufeature.h>
  32. #include <asm/virt.h>
  33. #include <asm/kvm_arm.h>
  34. #include <asm/kvm_asm.h>
  35. #include <asm/kvm_emulate.h>
  36. #include <asm/kvm_mmu.h>
  37. #include <asm/kvm_nested.h>
  38. #include <asm/kvm_pkvm.h>
  39. #include <asm/kvm_ptrauth.h>
  40. #include <asm/sections.h>
  41. #include <kvm/arm_hypercalls.h>
  42. #include <kvm/arm_pmu.h>
  43. #include <kvm/arm_psci.h>
  44. #include "sys_regs.h"
  45. static enum kvm_mode kvm_mode = KVM_MODE_DEFAULT;
  46. enum kvm_wfx_trap_policy {
  47. KVM_WFX_NOTRAP_SINGLE_TASK, /* Default option */
  48. KVM_WFX_NOTRAP,
  49. KVM_WFX_TRAP,
  50. };
  51. static enum kvm_wfx_trap_policy kvm_wfi_trap_policy __read_mostly = KVM_WFX_NOTRAP_SINGLE_TASK;
  52. static enum kvm_wfx_trap_policy kvm_wfe_trap_policy __read_mostly = KVM_WFX_NOTRAP_SINGLE_TASK;
  53. DECLARE_KVM_HYP_PER_CPU(unsigned long, kvm_hyp_vector);
  54. DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page);
  55. DECLARE_KVM_NVHE_PER_CPU(struct kvm_nvhe_init_params, kvm_init_params);
  56. DECLARE_KVM_NVHE_PER_CPU(struct kvm_cpu_context, kvm_hyp_ctxt);
  57. static bool vgic_present, kvm_arm_initialised;
  58. static DEFINE_PER_CPU(unsigned char, kvm_hyp_initialized);
  59. bool is_kvm_arm_initialised(void)
  60. {
  61. return kvm_arm_initialised;
  62. }
  63. int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
  64. {
  65. return kvm_vcpu_exiting_guest_mode(vcpu) == IN_GUEST_MODE;
  66. }
  67. /*
  68. * This functions as an allow-list of protected VM capabilities.
  69. * Features not explicitly allowed by this function are denied.
  70. */
  71. static bool pkvm_ext_allowed(struct kvm *kvm, long ext)
  72. {
  73. switch (ext) {
  74. case KVM_CAP_IRQCHIP:
  75. case KVM_CAP_ARM_PSCI:
  76. case KVM_CAP_ARM_PSCI_0_2:
  77. case KVM_CAP_NR_VCPUS:
  78. case KVM_CAP_MAX_VCPUS:
  79. case KVM_CAP_MAX_VCPU_ID:
  80. case KVM_CAP_MSI_DEVID:
  81. case KVM_CAP_ARM_VM_IPA_SIZE:
  82. case KVM_CAP_ARM_PMU_V3:
  83. case KVM_CAP_ARM_SVE:
  84. case KVM_CAP_ARM_PTRAUTH_ADDRESS:
  85. case KVM_CAP_ARM_PTRAUTH_GENERIC:
  86. return true;
  87. default:
  88. return false;
  89. }
  90. }
  91. int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
  92. struct kvm_enable_cap *cap)
  93. {
  94. int r = -EINVAL;
  95. if (cap->flags)
  96. return -EINVAL;
  97. if (kvm_vm_is_protected(kvm) && !pkvm_ext_allowed(kvm, cap->cap))
  98. return -EINVAL;
  99. switch (cap->cap) {
  100. case KVM_CAP_ARM_NISV_TO_USER:
  101. r = 0;
  102. set_bit(KVM_ARCH_FLAG_RETURN_NISV_IO_ABORT_TO_USER,
  103. &kvm->arch.flags);
  104. break;
  105. case KVM_CAP_ARM_MTE:
  106. mutex_lock(&kvm->lock);
  107. if (system_supports_mte() && !kvm->created_vcpus) {
  108. r = 0;
  109. set_bit(KVM_ARCH_FLAG_MTE_ENABLED, &kvm->arch.flags);
  110. }
  111. mutex_unlock(&kvm->lock);
  112. break;
  113. case KVM_CAP_ARM_SYSTEM_SUSPEND:
  114. r = 0;
  115. set_bit(KVM_ARCH_FLAG_SYSTEM_SUSPEND_ENABLED, &kvm->arch.flags);
  116. break;
  117. case KVM_CAP_ARM_EAGER_SPLIT_CHUNK_SIZE:
  118. mutex_lock(&kvm->slots_lock);
  119. /*
  120. * To keep things simple, allow changing the chunk
  121. * size only when no memory slots have been created.
  122. */
  123. if (kvm_are_all_memslots_empty(kvm)) {
  124. u64 new_cap = cap->args[0];
  125. if (!new_cap || kvm_is_block_size_supported(new_cap)) {
  126. r = 0;
  127. kvm->arch.mmu.split_page_chunk_size = new_cap;
  128. }
  129. }
  130. mutex_unlock(&kvm->slots_lock);
  131. break;
  132. default:
  133. break;
  134. }
  135. return r;
  136. }
  137. static int kvm_arm_default_max_vcpus(void)
  138. {
  139. return vgic_present ? kvm_vgic_get_max_vcpus() : KVM_MAX_VCPUS;
  140. }
  141. /**
  142. * kvm_arch_init_vm - initializes a VM data structure
  143. * @kvm: pointer to the KVM struct
  144. * @type: kvm device type
  145. */
  146. int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
  147. {
  148. int ret;
  149. mutex_init(&kvm->arch.config_lock);
  150. #ifdef CONFIG_LOCKDEP
  151. /* Clue in lockdep that the config_lock must be taken inside kvm->lock */
  152. mutex_lock(&kvm->lock);
  153. mutex_lock(&kvm->arch.config_lock);
  154. mutex_unlock(&kvm->arch.config_lock);
  155. mutex_unlock(&kvm->lock);
  156. #endif
  157. kvm_init_nested(kvm);
  158. ret = kvm_share_hyp(kvm, kvm + 1);
  159. if (ret)
  160. return ret;
  161. ret = pkvm_init_host_vm(kvm);
  162. if (ret)
  163. goto err_unshare_kvm;
  164. if (!zalloc_cpumask_var(&kvm->arch.supported_cpus, GFP_KERNEL_ACCOUNT)) {
  165. ret = -ENOMEM;
  166. goto err_unshare_kvm;
  167. }
  168. cpumask_copy(kvm->arch.supported_cpus, cpu_possible_mask);
  169. ret = kvm_init_stage2_mmu(kvm, &kvm->arch.mmu, type);
  170. if (ret)
  171. goto err_free_cpumask;
  172. kvm_vgic_early_init(kvm);
  173. kvm_timer_init_vm(kvm);
  174. /* The maximum number of VCPUs is limited by the host's GIC model */
  175. kvm->max_vcpus = kvm_arm_default_max_vcpus();
  176. kvm_arm_init_hypercalls(kvm);
  177. bitmap_zero(kvm->arch.vcpu_features, KVM_VCPU_MAX_FEATURES);
  178. return 0;
  179. err_free_cpumask:
  180. free_cpumask_var(kvm->arch.supported_cpus);
  181. err_unshare_kvm:
  182. kvm_unshare_hyp(kvm, kvm + 1);
  183. return ret;
  184. }
  185. vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
  186. {
  187. return VM_FAULT_SIGBUS;
  188. }
  189. void kvm_arch_create_vm_debugfs(struct kvm *kvm)
  190. {
  191. kvm_sys_regs_create_debugfs(kvm);
  192. kvm_s2_ptdump_create_debugfs(kvm);
  193. }
  194. static void kvm_destroy_mpidr_data(struct kvm *kvm)
  195. {
  196. struct kvm_mpidr_data *data;
  197. mutex_lock(&kvm->arch.config_lock);
  198. data = rcu_dereference_protected(kvm->arch.mpidr_data,
  199. lockdep_is_held(&kvm->arch.config_lock));
  200. if (data) {
  201. rcu_assign_pointer(kvm->arch.mpidr_data, NULL);
  202. synchronize_rcu();
  203. kfree(data);
  204. }
  205. mutex_unlock(&kvm->arch.config_lock);
  206. }
  207. /**
  208. * kvm_arch_destroy_vm - destroy the VM data structure
  209. * @kvm: pointer to the KVM struct
  210. */
  211. void kvm_arch_destroy_vm(struct kvm *kvm)
  212. {
  213. bitmap_free(kvm->arch.pmu_filter);
  214. free_cpumask_var(kvm->arch.supported_cpus);
  215. kvm_vgic_destroy(kvm);
  216. if (is_protected_kvm_enabled())
  217. pkvm_destroy_hyp_vm(kvm);
  218. kvm_destroy_mpidr_data(kvm);
  219. kfree(kvm->arch.sysreg_masks);
  220. kvm_destroy_vcpus(kvm);
  221. kvm_unshare_hyp(kvm, kvm + 1);
  222. kvm_arm_teardown_hypercalls(kvm);
  223. }
  224. static bool kvm_has_full_ptr_auth(void)
  225. {
  226. bool apa, gpa, api, gpi, apa3, gpa3;
  227. u64 isar1, isar2, val;
  228. /*
  229. * Check that:
  230. *
  231. * - both Address and Generic auth are implemented for a given
  232. * algorithm (Q5, IMPDEF or Q3)
  233. * - only a single algorithm is implemented.
  234. */
  235. if (!system_has_full_ptr_auth())
  236. return false;
  237. isar1 = read_sanitised_ftr_reg(SYS_ID_AA64ISAR1_EL1);
  238. isar2 = read_sanitised_ftr_reg(SYS_ID_AA64ISAR2_EL1);
  239. apa = !!FIELD_GET(ID_AA64ISAR1_EL1_APA_MASK, isar1);
  240. val = FIELD_GET(ID_AA64ISAR1_EL1_GPA_MASK, isar1);
  241. gpa = (val == ID_AA64ISAR1_EL1_GPA_IMP);
  242. api = !!FIELD_GET(ID_AA64ISAR1_EL1_API_MASK, isar1);
  243. val = FIELD_GET(ID_AA64ISAR1_EL1_GPI_MASK, isar1);
  244. gpi = (val == ID_AA64ISAR1_EL1_GPI_IMP);
  245. apa3 = !!FIELD_GET(ID_AA64ISAR2_EL1_APA3_MASK, isar2);
  246. val = FIELD_GET(ID_AA64ISAR2_EL1_GPA3_MASK, isar2);
  247. gpa3 = (val == ID_AA64ISAR2_EL1_GPA3_IMP);
  248. return (apa == gpa && api == gpi && apa3 == gpa3 &&
  249. (apa + api + apa3) == 1);
  250. }
  251. int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
  252. {
  253. int r;
  254. if (kvm && kvm_vm_is_protected(kvm) && !pkvm_ext_allowed(kvm, ext))
  255. return 0;
  256. switch (ext) {
  257. case KVM_CAP_IRQCHIP:
  258. r = vgic_present;
  259. break;
  260. case KVM_CAP_IOEVENTFD:
  261. case KVM_CAP_USER_MEMORY:
  262. case KVM_CAP_SYNC_MMU:
  263. case KVM_CAP_DESTROY_MEMORY_REGION_WORKS:
  264. case KVM_CAP_ONE_REG:
  265. case KVM_CAP_ARM_PSCI:
  266. case KVM_CAP_ARM_PSCI_0_2:
  267. case KVM_CAP_READONLY_MEM:
  268. case KVM_CAP_MP_STATE:
  269. case KVM_CAP_IMMEDIATE_EXIT:
  270. case KVM_CAP_VCPU_EVENTS:
  271. case KVM_CAP_ARM_IRQ_LINE_LAYOUT_2:
  272. case KVM_CAP_ARM_NISV_TO_USER:
  273. case KVM_CAP_ARM_INJECT_EXT_DABT:
  274. case KVM_CAP_SET_GUEST_DEBUG:
  275. case KVM_CAP_VCPU_ATTRIBUTES:
  276. case KVM_CAP_PTP_KVM:
  277. case KVM_CAP_ARM_SYSTEM_SUSPEND:
  278. case KVM_CAP_IRQFD_RESAMPLE:
  279. case KVM_CAP_COUNTER_OFFSET:
  280. r = 1;
  281. break;
  282. case KVM_CAP_SET_GUEST_DEBUG2:
  283. return KVM_GUESTDBG_VALID_MASK;
  284. case KVM_CAP_ARM_SET_DEVICE_ADDR:
  285. r = 1;
  286. break;
  287. case KVM_CAP_NR_VCPUS:
  288. /*
  289. * ARM64 treats KVM_CAP_NR_CPUS differently from all other
  290. * architectures, as it does not always bound it to
  291. * KVM_CAP_MAX_VCPUS. It should not matter much because
  292. * this is just an advisory value.
  293. */
  294. r = min_t(unsigned int, num_online_cpus(),
  295. kvm_arm_default_max_vcpus());
  296. break;
  297. case KVM_CAP_MAX_VCPUS:
  298. case KVM_CAP_MAX_VCPU_ID:
  299. if (kvm)
  300. r = kvm->max_vcpus;
  301. else
  302. r = kvm_arm_default_max_vcpus();
  303. break;
  304. case KVM_CAP_MSI_DEVID:
  305. if (!kvm)
  306. r = -EINVAL;
  307. else
  308. r = kvm->arch.vgic.msis_require_devid;
  309. break;
  310. case KVM_CAP_ARM_USER_IRQ:
  311. /*
  312. * 1: EL1_VTIMER, EL1_PTIMER, and PMU.
  313. * (bump this number if adding more devices)
  314. */
  315. r = 1;
  316. break;
  317. case KVM_CAP_ARM_MTE:
  318. r = system_supports_mte();
  319. break;
  320. case KVM_CAP_STEAL_TIME:
  321. r = kvm_arm_pvtime_supported();
  322. break;
  323. case KVM_CAP_ARM_EL1_32BIT:
  324. r = cpus_have_final_cap(ARM64_HAS_32BIT_EL1);
  325. break;
  326. case KVM_CAP_GUEST_DEBUG_HW_BPS:
  327. r = get_num_brps();
  328. break;
  329. case KVM_CAP_GUEST_DEBUG_HW_WPS:
  330. r = get_num_wrps();
  331. break;
  332. case KVM_CAP_ARM_PMU_V3:
  333. r = kvm_arm_support_pmu_v3();
  334. break;
  335. case KVM_CAP_ARM_INJECT_SERROR_ESR:
  336. r = cpus_have_final_cap(ARM64_HAS_RAS_EXTN);
  337. break;
  338. case KVM_CAP_ARM_VM_IPA_SIZE:
  339. r = get_kvm_ipa_limit();
  340. break;
  341. case KVM_CAP_ARM_SVE:
  342. r = system_supports_sve();
  343. break;
  344. case KVM_CAP_ARM_PTRAUTH_ADDRESS:
  345. case KVM_CAP_ARM_PTRAUTH_GENERIC:
  346. r = kvm_has_full_ptr_auth();
  347. break;
  348. case KVM_CAP_ARM_EAGER_SPLIT_CHUNK_SIZE:
  349. if (kvm)
  350. r = kvm->arch.mmu.split_page_chunk_size;
  351. else
  352. r = KVM_ARM_EAGER_SPLIT_CHUNK_SIZE_DEFAULT;
  353. break;
  354. case KVM_CAP_ARM_SUPPORTED_BLOCK_SIZES:
  355. r = kvm_supported_block_sizes();
  356. break;
  357. case KVM_CAP_ARM_SUPPORTED_REG_MASK_RANGES:
  358. r = BIT(0);
  359. break;
  360. default:
  361. r = 0;
  362. }
  363. return r;
  364. }
  365. long kvm_arch_dev_ioctl(struct file *filp,
  366. unsigned int ioctl, unsigned long arg)
  367. {
  368. return -EINVAL;
  369. }
  370. struct kvm *kvm_arch_alloc_vm(void)
  371. {
  372. size_t sz = sizeof(struct kvm);
  373. if (!has_vhe())
  374. return kzalloc(sz, GFP_KERNEL_ACCOUNT);
  375. return __vmalloc(sz, GFP_KERNEL_ACCOUNT | __GFP_HIGHMEM | __GFP_ZERO);
  376. }
  377. int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id)
  378. {
  379. if (irqchip_in_kernel(kvm) && vgic_initialized(kvm))
  380. return -EBUSY;
  381. if (id >= kvm->max_vcpus)
  382. return -EINVAL;
  383. return 0;
  384. }
  385. int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
  386. {
  387. int err;
  388. spin_lock_init(&vcpu->arch.mp_state_lock);
  389. #ifdef CONFIG_LOCKDEP
  390. /* Inform lockdep that the config_lock is acquired after vcpu->mutex */
  391. mutex_lock(&vcpu->mutex);
  392. mutex_lock(&vcpu->kvm->arch.config_lock);
  393. mutex_unlock(&vcpu->kvm->arch.config_lock);
  394. mutex_unlock(&vcpu->mutex);
  395. #endif
  396. /* Force users to call KVM_ARM_VCPU_INIT */
  397. vcpu_clear_flag(vcpu, VCPU_INITIALIZED);
  398. vcpu->arch.mmu_page_cache.gfp_zero = __GFP_ZERO;
  399. /* Set up the timer */
  400. kvm_timer_vcpu_init(vcpu);
  401. kvm_pmu_vcpu_init(vcpu);
  402. kvm_arm_reset_debug_ptr(vcpu);
  403. kvm_arm_pvtime_vcpu_init(&vcpu->arch);
  404. vcpu->arch.hw_mmu = &vcpu->kvm->arch.mmu;
  405. /*
  406. * This vCPU may have been created after mpidr_data was initialized.
  407. * Throw out the pre-computed mappings if that is the case which forces
  408. * KVM to fall back to iteratively searching the vCPUs.
  409. */
  410. kvm_destroy_mpidr_data(vcpu->kvm);
  411. err = kvm_vgic_vcpu_init(vcpu);
  412. if (err)
  413. return err;
  414. err = kvm_share_hyp(vcpu, vcpu + 1);
  415. if (err)
  416. kvm_vgic_vcpu_destroy(vcpu);
  417. return err;
  418. }
  419. void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
  420. {
  421. }
  422. void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
  423. {
  424. kvm_mmu_free_memory_cache(&vcpu->arch.mmu_page_cache);
  425. kvm_timer_vcpu_terminate(vcpu);
  426. kvm_pmu_vcpu_destroy(vcpu);
  427. kvm_vgic_vcpu_destroy(vcpu);
  428. kvm_arm_vcpu_destroy(vcpu);
  429. }
  430. void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu)
  431. {
  432. }
  433. void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu)
  434. {
  435. }
  436. static void vcpu_set_pauth_traps(struct kvm_vcpu *vcpu)
  437. {
  438. if (vcpu_has_ptrauth(vcpu) && !is_protected_kvm_enabled()) {
  439. /*
  440. * Either we're running an L2 guest, and the API/APK bits come
  441. * from L1's HCR_EL2, or API/APK are both set.
  442. */
  443. if (unlikely(vcpu_has_nv(vcpu) && !is_hyp_ctxt(vcpu))) {
  444. u64 val;
  445. val = __vcpu_sys_reg(vcpu, HCR_EL2);
  446. val &= (HCR_API | HCR_APK);
  447. vcpu->arch.hcr_el2 &= ~(HCR_API | HCR_APK);
  448. vcpu->arch.hcr_el2 |= val;
  449. } else {
  450. vcpu->arch.hcr_el2 |= (HCR_API | HCR_APK);
  451. }
  452. /*
  453. * Save the host keys if there is any chance for the guest
  454. * to use pauth, as the entry code will reload the guest
  455. * keys in that case.
  456. */
  457. if (vcpu->arch.hcr_el2 & (HCR_API | HCR_APK)) {
  458. struct kvm_cpu_context *ctxt;
  459. ctxt = this_cpu_ptr_hyp_sym(kvm_hyp_ctxt);
  460. ptrauth_save_keys(ctxt);
  461. }
  462. }
  463. }
  464. static bool kvm_vcpu_should_clear_twi(struct kvm_vcpu *vcpu)
  465. {
  466. if (unlikely(kvm_wfi_trap_policy != KVM_WFX_NOTRAP_SINGLE_TASK))
  467. return kvm_wfi_trap_policy == KVM_WFX_NOTRAP;
  468. return single_task_running() &&
  469. (atomic_read(&vcpu->arch.vgic_cpu.vgic_v3.its_vpe.vlpi_count) ||
  470. vcpu->kvm->arch.vgic.nassgireq);
  471. }
  472. static bool kvm_vcpu_should_clear_twe(struct kvm_vcpu *vcpu)
  473. {
  474. if (unlikely(kvm_wfe_trap_policy != KVM_WFX_NOTRAP_SINGLE_TASK))
  475. return kvm_wfe_trap_policy == KVM_WFX_NOTRAP;
  476. return single_task_running();
  477. }
  478. void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
  479. {
  480. struct kvm_s2_mmu *mmu;
  481. int *last_ran;
  482. if (vcpu_has_nv(vcpu))
  483. kvm_vcpu_load_hw_mmu(vcpu);
  484. mmu = vcpu->arch.hw_mmu;
  485. last_ran = this_cpu_ptr(mmu->last_vcpu_ran);
  486. /*
  487. * Ensure a VMID is allocated for the MMU before programming VTTBR_EL2,
  488. * which happens eagerly in VHE.
  489. *
  490. * Also, the VMID allocator only preserves VMIDs that are active at the
  491. * time of rollover, so KVM might need to grab a new VMID for the MMU if
  492. * this is called from kvm_sched_in().
  493. */
  494. kvm_arm_vmid_update(&mmu->vmid);
  495. /*
  496. * We guarantee that both TLBs and I-cache are private to each
  497. * vcpu. If detecting that a vcpu from the same VM has
  498. * previously run on the same physical CPU, call into the
  499. * hypervisor code to nuke the relevant contexts.
  500. *
  501. * We might get preempted before the vCPU actually runs, but
  502. * over-invalidation doesn't affect correctness.
  503. */
  504. if (*last_ran != vcpu->vcpu_idx) {
  505. kvm_call_hyp(__kvm_flush_cpu_context, mmu);
  506. *last_ran = vcpu->vcpu_idx;
  507. }
  508. vcpu->cpu = cpu;
  509. kvm_vgic_load(vcpu);
  510. kvm_timer_vcpu_load(vcpu);
  511. if (has_vhe())
  512. kvm_vcpu_load_vhe(vcpu);
  513. kvm_arch_vcpu_load_fp(vcpu);
  514. kvm_vcpu_pmu_restore_guest(vcpu);
  515. if (kvm_arm_is_pvtime_enabled(&vcpu->arch))
  516. kvm_make_request(KVM_REQ_RECORD_STEAL, vcpu);
  517. if (kvm_vcpu_should_clear_twe(vcpu))
  518. vcpu->arch.hcr_el2 &= ~HCR_TWE;
  519. else
  520. vcpu->arch.hcr_el2 |= HCR_TWE;
  521. if (kvm_vcpu_should_clear_twi(vcpu))
  522. vcpu->arch.hcr_el2 &= ~HCR_TWI;
  523. else
  524. vcpu->arch.hcr_el2 |= HCR_TWI;
  525. vcpu_set_pauth_traps(vcpu);
  526. kvm_arch_vcpu_load_debug_state_flags(vcpu);
  527. if (!cpumask_test_cpu(cpu, vcpu->kvm->arch.supported_cpus))
  528. vcpu_set_on_unsupported_cpu(vcpu);
  529. }
  530. void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
  531. {
  532. kvm_arch_vcpu_put_debug_state_flags(vcpu);
  533. kvm_arch_vcpu_put_fp(vcpu);
  534. if (has_vhe())
  535. kvm_vcpu_put_vhe(vcpu);
  536. kvm_timer_vcpu_put(vcpu);
  537. kvm_vgic_put(vcpu);
  538. kvm_vcpu_pmu_restore_host(vcpu);
  539. if (vcpu_has_nv(vcpu))
  540. kvm_vcpu_put_hw_mmu(vcpu);
  541. kvm_arm_vmid_clear_active();
  542. vcpu_clear_on_unsupported_cpu(vcpu);
  543. vcpu->cpu = -1;
  544. }
  545. static void __kvm_arm_vcpu_power_off(struct kvm_vcpu *vcpu)
  546. {
  547. WRITE_ONCE(vcpu->arch.mp_state.mp_state, KVM_MP_STATE_STOPPED);
  548. kvm_make_request(KVM_REQ_SLEEP, vcpu);
  549. kvm_vcpu_kick(vcpu);
  550. }
  551. void kvm_arm_vcpu_power_off(struct kvm_vcpu *vcpu)
  552. {
  553. spin_lock(&vcpu->arch.mp_state_lock);
  554. __kvm_arm_vcpu_power_off(vcpu);
  555. spin_unlock(&vcpu->arch.mp_state_lock);
  556. }
  557. bool kvm_arm_vcpu_stopped(struct kvm_vcpu *vcpu)
  558. {
  559. return READ_ONCE(vcpu->arch.mp_state.mp_state) == KVM_MP_STATE_STOPPED;
  560. }
  561. static void kvm_arm_vcpu_suspend(struct kvm_vcpu *vcpu)
  562. {
  563. WRITE_ONCE(vcpu->arch.mp_state.mp_state, KVM_MP_STATE_SUSPENDED);
  564. kvm_make_request(KVM_REQ_SUSPEND, vcpu);
  565. kvm_vcpu_kick(vcpu);
  566. }
  567. static bool kvm_arm_vcpu_suspended(struct kvm_vcpu *vcpu)
  568. {
  569. return READ_ONCE(vcpu->arch.mp_state.mp_state) == KVM_MP_STATE_SUSPENDED;
  570. }
  571. int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
  572. struct kvm_mp_state *mp_state)
  573. {
  574. *mp_state = READ_ONCE(vcpu->arch.mp_state);
  575. return 0;
  576. }
  577. int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
  578. struct kvm_mp_state *mp_state)
  579. {
  580. int ret = 0;
  581. spin_lock(&vcpu->arch.mp_state_lock);
  582. switch (mp_state->mp_state) {
  583. case KVM_MP_STATE_RUNNABLE:
  584. WRITE_ONCE(vcpu->arch.mp_state, *mp_state);
  585. break;
  586. case KVM_MP_STATE_STOPPED:
  587. __kvm_arm_vcpu_power_off(vcpu);
  588. break;
  589. case KVM_MP_STATE_SUSPENDED:
  590. kvm_arm_vcpu_suspend(vcpu);
  591. break;
  592. default:
  593. ret = -EINVAL;
  594. }
  595. spin_unlock(&vcpu->arch.mp_state_lock);
  596. return ret;
  597. }
  598. /**
  599. * kvm_arch_vcpu_runnable - determine if the vcpu can be scheduled
  600. * @v: The VCPU pointer
  601. *
  602. * If the guest CPU is not waiting for interrupts or an interrupt line is
  603. * asserted, the CPU is by definition runnable.
  604. */
  605. int kvm_arch_vcpu_runnable(struct kvm_vcpu *v)
  606. {
  607. bool irq_lines = *vcpu_hcr(v) & (HCR_VI | HCR_VF);
  608. return ((irq_lines || kvm_vgic_vcpu_pending_irq(v))
  609. && !kvm_arm_vcpu_stopped(v) && !v->arch.pause);
  610. }
  611. bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu)
  612. {
  613. return vcpu_mode_priv(vcpu);
  614. }
  615. #ifdef CONFIG_GUEST_PERF_EVENTS
  616. unsigned long kvm_arch_vcpu_get_ip(struct kvm_vcpu *vcpu)
  617. {
  618. return *vcpu_pc(vcpu);
  619. }
  620. #endif
  621. static void kvm_init_mpidr_data(struct kvm *kvm)
  622. {
  623. struct kvm_mpidr_data *data = NULL;
  624. unsigned long c, mask, nr_entries;
  625. u64 aff_set = 0, aff_clr = ~0UL;
  626. struct kvm_vcpu *vcpu;
  627. mutex_lock(&kvm->arch.config_lock);
  628. if (rcu_access_pointer(kvm->arch.mpidr_data) ||
  629. atomic_read(&kvm->online_vcpus) == 1)
  630. goto out;
  631. kvm_for_each_vcpu(c, vcpu, kvm) {
  632. u64 aff = kvm_vcpu_get_mpidr_aff(vcpu);
  633. aff_set |= aff;
  634. aff_clr &= aff;
  635. }
  636. /*
  637. * A significant bit can be either 0 or 1, and will only appear in
  638. * aff_set. Use aff_clr to weed out the useless stuff.
  639. */
  640. mask = aff_set ^ aff_clr;
  641. nr_entries = BIT_ULL(hweight_long(mask));
  642. /*
  643. * Don't let userspace fool us. If we need more than a single page
  644. * to describe the compressed MPIDR array, just fall back to the
  645. * iterative method. Single vcpu VMs do not need this either.
  646. */
  647. if (struct_size(data, cmpidr_to_idx, nr_entries) <= PAGE_SIZE)
  648. data = kzalloc(struct_size(data, cmpidr_to_idx, nr_entries),
  649. GFP_KERNEL_ACCOUNT);
  650. if (!data)
  651. goto out;
  652. data->mpidr_mask = mask;
  653. kvm_for_each_vcpu(c, vcpu, kvm) {
  654. u64 aff = kvm_vcpu_get_mpidr_aff(vcpu);
  655. u16 index = kvm_mpidr_index(data, aff);
  656. data->cmpidr_to_idx[index] = c;
  657. }
  658. rcu_assign_pointer(kvm->arch.mpidr_data, data);
  659. out:
  660. mutex_unlock(&kvm->arch.config_lock);
  661. }
  662. /*
  663. * Handle both the initialisation that is being done when the vcpu is
  664. * run for the first time, as well as the updates that must be
  665. * performed each time we get a new thread dealing with this vcpu.
  666. */
  667. int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu)
  668. {
  669. struct kvm *kvm = vcpu->kvm;
  670. int ret;
  671. if (!kvm_vcpu_initialized(vcpu))
  672. return -ENOEXEC;
  673. if (!kvm_arm_vcpu_is_finalized(vcpu))
  674. return -EPERM;
  675. ret = kvm_arch_vcpu_run_map_fp(vcpu);
  676. if (ret)
  677. return ret;
  678. if (likely(vcpu_has_run_once(vcpu)))
  679. return 0;
  680. kvm_init_mpidr_data(kvm);
  681. kvm_arm_vcpu_init_debug(vcpu);
  682. if (likely(irqchip_in_kernel(kvm))) {
  683. /*
  684. * Map the VGIC hardware resources before running a vcpu the
  685. * first time on this VM.
  686. */
  687. ret = kvm_vgic_map_resources(kvm);
  688. if (ret)
  689. return ret;
  690. }
  691. ret = kvm_finalize_sys_regs(vcpu);
  692. if (ret)
  693. return ret;
  694. /*
  695. * This needs to happen after any restriction has been applied
  696. * to the feature set.
  697. */
  698. kvm_calculate_traps(vcpu);
  699. ret = kvm_timer_enable(vcpu);
  700. if (ret)
  701. return ret;
  702. ret = kvm_arm_pmu_v3_enable(vcpu);
  703. if (ret)
  704. return ret;
  705. if (is_protected_kvm_enabled()) {
  706. ret = pkvm_create_hyp_vm(kvm);
  707. if (ret)
  708. return ret;
  709. }
  710. /*
  711. * Initialize traps for protected VMs.
  712. * NOTE: Move to run in EL2 directly, rather than via a hypercall, once
  713. * the code is in place for first run initialization at EL2.
  714. */
  715. if (kvm_vm_is_protected(kvm))
  716. kvm_call_hyp_nvhe(__pkvm_vcpu_init_traps, vcpu);
  717. mutex_lock(&kvm->arch.config_lock);
  718. set_bit(KVM_ARCH_FLAG_HAS_RAN_ONCE, &kvm->arch.flags);
  719. mutex_unlock(&kvm->arch.config_lock);
  720. return ret;
  721. }
  722. bool kvm_arch_intc_initialized(struct kvm *kvm)
  723. {
  724. return vgic_initialized(kvm);
  725. }
  726. void kvm_arm_halt_guest(struct kvm *kvm)
  727. {
  728. unsigned long i;
  729. struct kvm_vcpu *vcpu;
  730. kvm_for_each_vcpu(i, vcpu, kvm)
  731. vcpu->arch.pause = true;
  732. kvm_make_all_cpus_request(kvm, KVM_REQ_SLEEP);
  733. }
  734. void kvm_arm_resume_guest(struct kvm *kvm)
  735. {
  736. unsigned long i;
  737. struct kvm_vcpu *vcpu;
  738. kvm_for_each_vcpu(i, vcpu, kvm) {
  739. vcpu->arch.pause = false;
  740. __kvm_vcpu_wake_up(vcpu);
  741. }
  742. }
  743. static void kvm_vcpu_sleep(struct kvm_vcpu *vcpu)
  744. {
  745. struct rcuwait *wait = kvm_arch_vcpu_get_wait(vcpu);
  746. rcuwait_wait_event(wait,
  747. (!kvm_arm_vcpu_stopped(vcpu)) && (!vcpu->arch.pause),
  748. TASK_INTERRUPTIBLE);
  749. if (kvm_arm_vcpu_stopped(vcpu) || vcpu->arch.pause) {
  750. /* Awaken to handle a signal, request we sleep again later. */
  751. kvm_make_request(KVM_REQ_SLEEP, vcpu);
  752. }
  753. /*
  754. * Make sure we will observe a potential reset request if we've
  755. * observed a change to the power state. Pairs with the smp_wmb() in
  756. * kvm_psci_vcpu_on().
  757. */
  758. smp_rmb();
  759. }
  760. /**
  761. * kvm_vcpu_wfi - emulate Wait-For-Interrupt behavior
  762. * @vcpu: The VCPU pointer
  763. *
  764. * Suspend execution of a vCPU until a valid wake event is detected, i.e. until
  765. * the vCPU is runnable. The vCPU may or may not be scheduled out, depending
  766. * on when a wake event arrives, e.g. there may already be a pending wake event.
  767. */
  768. void kvm_vcpu_wfi(struct kvm_vcpu *vcpu)
  769. {
  770. /*
  771. * Sync back the state of the GIC CPU interface so that we have
  772. * the latest PMR and group enables. This ensures that
  773. * kvm_arch_vcpu_runnable has up-to-date data to decide whether
  774. * we have pending interrupts, e.g. when determining if the
  775. * vCPU should block.
  776. *
  777. * For the same reason, we want to tell GICv4 that we need
  778. * doorbells to be signalled, should an interrupt become pending.
  779. */
  780. preempt_disable();
  781. vcpu_set_flag(vcpu, IN_WFI);
  782. kvm_vgic_put(vcpu);
  783. preempt_enable();
  784. kvm_vcpu_halt(vcpu);
  785. vcpu_clear_flag(vcpu, IN_WFIT);
  786. preempt_disable();
  787. vcpu_clear_flag(vcpu, IN_WFI);
  788. kvm_vgic_load(vcpu);
  789. preempt_enable();
  790. }
  791. static int kvm_vcpu_suspend(struct kvm_vcpu *vcpu)
  792. {
  793. if (!kvm_arm_vcpu_suspended(vcpu))
  794. return 1;
  795. kvm_vcpu_wfi(vcpu);
  796. /*
  797. * The suspend state is sticky; we do not leave it until userspace
  798. * explicitly marks the vCPU as runnable. Request that we suspend again
  799. * later.
  800. */
  801. kvm_make_request(KVM_REQ_SUSPEND, vcpu);
  802. /*
  803. * Check to make sure the vCPU is actually runnable. If so, exit to
  804. * userspace informing it of the wakeup condition.
  805. */
  806. if (kvm_arch_vcpu_runnable(vcpu)) {
  807. memset(&vcpu->run->system_event, 0, sizeof(vcpu->run->system_event));
  808. vcpu->run->system_event.type = KVM_SYSTEM_EVENT_WAKEUP;
  809. vcpu->run->exit_reason = KVM_EXIT_SYSTEM_EVENT;
  810. return 0;
  811. }
  812. /*
  813. * Otherwise, we were unblocked to process a different event, such as a
  814. * pending signal. Return 1 and allow kvm_arch_vcpu_ioctl_run() to
  815. * process the event.
  816. */
  817. return 1;
  818. }
  819. /**
  820. * check_vcpu_requests - check and handle pending vCPU requests
  821. * @vcpu: the VCPU pointer
  822. *
  823. * Return: 1 if we should enter the guest
  824. * 0 if we should exit to userspace
  825. * < 0 if we should exit to userspace, where the return value indicates
  826. * an error
  827. */
  828. static int check_vcpu_requests(struct kvm_vcpu *vcpu)
  829. {
  830. if (kvm_request_pending(vcpu)) {
  831. if (kvm_check_request(KVM_REQ_VM_DEAD, vcpu))
  832. return -EIO;
  833. if (kvm_check_request(KVM_REQ_SLEEP, vcpu))
  834. kvm_vcpu_sleep(vcpu);
  835. if (kvm_check_request(KVM_REQ_VCPU_RESET, vcpu))
  836. kvm_reset_vcpu(vcpu);
  837. /*
  838. * Clear IRQ_PENDING requests that were made to guarantee
  839. * that a VCPU sees new virtual interrupts.
  840. */
  841. kvm_check_request(KVM_REQ_IRQ_PENDING, vcpu);
  842. if (kvm_check_request(KVM_REQ_RECORD_STEAL, vcpu))
  843. kvm_update_stolen_time(vcpu);
  844. if (kvm_check_request(KVM_REQ_RELOAD_GICv4, vcpu)) {
  845. /* The distributor enable bits were changed */
  846. preempt_disable();
  847. vgic_v4_put(vcpu);
  848. vgic_v4_load(vcpu);
  849. preempt_enable();
  850. }
  851. if (kvm_check_request(KVM_REQ_RELOAD_PMU, vcpu))
  852. kvm_vcpu_reload_pmu(vcpu);
  853. if (kvm_check_request(KVM_REQ_RESYNC_PMU_EL0, vcpu))
  854. kvm_vcpu_pmu_restore_guest(vcpu);
  855. if (kvm_check_request(KVM_REQ_SUSPEND, vcpu))
  856. return kvm_vcpu_suspend(vcpu);
  857. if (kvm_dirty_ring_check_request(vcpu))
  858. return 0;
  859. check_nested_vcpu_requests(vcpu);
  860. }
  861. return 1;
  862. }
  863. static bool vcpu_mode_is_bad_32bit(struct kvm_vcpu *vcpu)
  864. {
  865. if (likely(!vcpu_mode_is_32bit(vcpu)))
  866. return false;
  867. if (vcpu_has_nv(vcpu))
  868. return true;
  869. return !kvm_supports_32bit_el0();
  870. }
  871. /**
  872. * kvm_vcpu_exit_request - returns true if the VCPU should *not* enter the guest
  873. * @vcpu: The VCPU pointer
  874. * @ret: Pointer to write optional return code
  875. *
  876. * Returns: true if the VCPU needs to return to a preemptible + interruptible
  877. * and skip guest entry.
  878. *
  879. * This function disambiguates between two different types of exits: exits to a
  880. * preemptible + interruptible kernel context and exits to userspace. For an
  881. * exit to userspace, this function will write the return code to ret and return
  882. * true. For an exit to preemptible + interruptible kernel context (i.e. check
  883. * for pending work and re-enter), return true without writing to ret.
  884. */
  885. static bool kvm_vcpu_exit_request(struct kvm_vcpu *vcpu, int *ret)
  886. {
  887. struct kvm_run *run = vcpu->run;
  888. /*
  889. * If we're using a userspace irqchip, then check if we need
  890. * to tell a userspace irqchip about timer or PMU level
  891. * changes and if so, exit to userspace (the actual level
  892. * state gets updated in kvm_timer_update_run and
  893. * kvm_pmu_update_run below).
  894. */
  895. if (unlikely(!irqchip_in_kernel(vcpu->kvm))) {
  896. if (kvm_timer_should_notify_user(vcpu) ||
  897. kvm_pmu_should_notify_user(vcpu)) {
  898. *ret = -EINTR;
  899. run->exit_reason = KVM_EXIT_INTR;
  900. return true;
  901. }
  902. }
  903. if (unlikely(vcpu_on_unsupported_cpu(vcpu))) {
  904. run->exit_reason = KVM_EXIT_FAIL_ENTRY;
  905. run->fail_entry.hardware_entry_failure_reason = KVM_EXIT_FAIL_ENTRY_CPU_UNSUPPORTED;
  906. run->fail_entry.cpu = smp_processor_id();
  907. *ret = 0;
  908. return true;
  909. }
  910. return kvm_request_pending(vcpu) ||
  911. xfer_to_guest_mode_work_pending();
  912. }
  913. /*
  914. * Actually run the vCPU, entering an RCU extended quiescent state (EQS) while
  915. * the vCPU is running.
  916. *
  917. * This must be noinstr as instrumentation may make use of RCU, and this is not
  918. * safe during the EQS.
  919. */
  920. static int noinstr kvm_arm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
  921. {
  922. int ret;
  923. guest_state_enter_irqoff();
  924. ret = kvm_call_hyp_ret(__kvm_vcpu_run, vcpu);
  925. guest_state_exit_irqoff();
  926. return ret;
  927. }
  928. /**
  929. * kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code
  930. * @vcpu: The VCPU pointer
  931. *
  932. * This function is called through the VCPU_RUN ioctl called from user space. It
  933. * will execute VM code in a loop until the time slice for the process is used
  934. * or some emulation is needed from user space in which case the function will
  935. * return with return value 0 and with the kvm_run structure filled in with the
  936. * required data for the requested emulation.
  937. */
  938. int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
  939. {
  940. struct kvm_run *run = vcpu->run;
  941. int ret;
  942. if (run->exit_reason == KVM_EXIT_MMIO) {
  943. ret = kvm_handle_mmio_return(vcpu);
  944. if (ret <= 0)
  945. return ret;
  946. }
  947. vcpu_load(vcpu);
  948. if (!vcpu->wants_to_run) {
  949. ret = -EINTR;
  950. goto out;
  951. }
  952. kvm_sigset_activate(vcpu);
  953. ret = 1;
  954. run->exit_reason = KVM_EXIT_UNKNOWN;
  955. run->flags = 0;
  956. while (ret > 0) {
  957. /*
  958. * Check conditions before entering the guest
  959. */
  960. ret = xfer_to_guest_mode_handle_work(vcpu);
  961. if (!ret)
  962. ret = 1;
  963. if (ret > 0)
  964. ret = check_vcpu_requests(vcpu);
  965. /*
  966. * Preparing the interrupts to be injected also
  967. * involves poking the GIC, which must be done in a
  968. * non-preemptible context.
  969. */
  970. preempt_disable();
  971. kvm_pmu_flush_hwstate(vcpu);
  972. local_irq_disable();
  973. kvm_vgic_flush_hwstate(vcpu);
  974. kvm_pmu_update_vcpu_events(vcpu);
  975. /*
  976. * Ensure we set mode to IN_GUEST_MODE after we disable
  977. * interrupts and before the final VCPU requests check.
  978. * See the comment in kvm_vcpu_exiting_guest_mode() and
  979. * Documentation/virt/kvm/vcpu-requests.rst
  980. */
  981. smp_store_mb(vcpu->mode, IN_GUEST_MODE);
  982. if (ret <= 0 || kvm_vcpu_exit_request(vcpu, &ret)) {
  983. vcpu->mode = OUTSIDE_GUEST_MODE;
  984. isb(); /* Ensure work in x_flush_hwstate is committed */
  985. kvm_pmu_sync_hwstate(vcpu);
  986. if (unlikely(!irqchip_in_kernel(vcpu->kvm)))
  987. kvm_timer_sync_user(vcpu);
  988. kvm_vgic_sync_hwstate(vcpu);
  989. local_irq_enable();
  990. preempt_enable();
  991. continue;
  992. }
  993. kvm_arm_setup_debug(vcpu);
  994. kvm_arch_vcpu_ctxflush_fp(vcpu);
  995. /**************************************************************
  996. * Enter the guest
  997. */
  998. trace_kvm_entry(*vcpu_pc(vcpu));
  999. guest_timing_enter_irqoff();
  1000. ret = kvm_arm_vcpu_enter_exit(vcpu);
  1001. vcpu->mode = OUTSIDE_GUEST_MODE;
  1002. vcpu->stat.exits++;
  1003. /*
  1004. * Back from guest
  1005. *************************************************************/
  1006. kvm_arm_clear_debug(vcpu);
  1007. /*
  1008. * We must sync the PMU state before the vgic state so
  1009. * that the vgic can properly sample the updated state of the
  1010. * interrupt line.
  1011. */
  1012. kvm_pmu_sync_hwstate(vcpu);
  1013. /*
  1014. * Sync the vgic state before syncing the timer state because
  1015. * the timer code needs to know if the virtual timer
  1016. * interrupts are active.
  1017. */
  1018. kvm_vgic_sync_hwstate(vcpu);
  1019. /*
  1020. * Sync the timer hardware state before enabling interrupts as
  1021. * we don't want vtimer interrupts to race with syncing the
  1022. * timer virtual interrupt state.
  1023. */
  1024. if (unlikely(!irqchip_in_kernel(vcpu->kvm)))
  1025. kvm_timer_sync_user(vcpu);
  1026. kvm_arch_vcpu_ctxsync_fp(vcpu);
  1027. /*
  1028. * We must ensure that any pending interrupts are taken before
  1029. * we exit guest timing so that timer ticks are accounted as
  1030. * guest time. Transiently unmask interrupts so that any
  1031. * pending interrupts are taken.
  1032. *
  1033. * Per ARM DDI 0487G.b section D1.13.4, an ISB (or other
  1034. * context synchronization event) is necessary to ensure that
  1035. * pending interrupts are taken.
  1036. */
  1037. if (ARM_EXCEPTION_CODE(ret) == ARM_EXCEPTION_IRQ) {
  1038. local_irq_enable();
  1039. isb();
  1040. local_irq_disable();
  1041. }
  1042. guest_timing_exit_irqoff();
  1043. local_irq_enable();
  1044. trace_kvm_exit(ret, kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu));
  1045. /* Exit types that need handling before we can be preempted */
  1046. handle_exit_early(vcpu, ret);
  1047. preempt_enable();
  1048. /*
  1049. * The ARMv8 architecture doesn't give the hypervisor
  1050. * a mechanism to prevent a guest from dropping to AArch32 EL0
  1051. * if implemented by the CPU. If we spot the guest in such
  1052. * state and that we decided it wasn't supposed to do so (like
  1053. * with the asymmetric AArch32 case), return to userspace with
  1054. * a fatal error.
  1055. */
  1056. if (vcpu_mode_is_bad_32bit(vcpu)) {
  1057. /*
  1058. * As we have caught the guest red-handed, decide that
  1059. * it isn't fit for purpose anymore by making the vcpu
  1060. * invalid. The VMM can try and fix it by issuing a
  1061. * KVM_ARM_VCPU_INIT if it really wants to.
  1062. */
  1063. vcpu_clear_flag(vcpu, VCPU_INITIALIZED);
  1064. ret = ARM_EXCEPTION_IL;
  1065. }
  1066. ret = handle_exit(vcpu, ret);
  1067. }
  1068. /* Tell userspace about in-kernel device output levels */
  1069. if (unlikely(!irqchip_in_kernel(vcpu->kvm))) {
  1070. kvm_timer_update_run(vcpu);
  1071. kvm_pmu_update_run(vcpu);
  1072. }
  1073. kvm_sigset_deactivate(vcpu);
  1074. out:
  1075. /*
  1076. * In the unlikely event that we are returning to userspace
  1077. * with pending exceptions or PC adjustment, commit these
  1078. * adjustments in order to give userspace a consistent view of
  1079. * the vcpu state. Note that this relies on __kvm_adjust_pc()
  1080. * being preempt-safe on VHE.
  1081. */
  1082. if (unlikely(vcpu_get_flag(vcpu, PENDING_EXCEPTION) ||
  1083. vcpu_get_flag(vcpu, INCREMENT_PC)))
  1084. kvm_call_hyp(__kvm_adjust_pc, vcpu);
  1085. vcpu_put(vcpu);
  1086. return ret;
  1087. }
  1088. static int vcpu_interrupt_line(struct kvm_vcpu *vcpu, int number, bool level)
  1089. {
  1090. int bit_index;
  1091. bool set;
  1092. unsigned long *hcr;
  1093. if (number == KVM_ARM_IRQ_CPU_IRQ)
  1094. bit_index = __ffs(HCR_VI);
  1095. else /* KVM_ARM_IRQ_CPU_FIQ */
  1096. bit_index = __ffs(HCR_VF);
  1097. hcr = vcpu_hcr(vcpu);
  1098. if (level)
  1099. set = test_and_set_bit(bit_index, hcr);
  1100. else
  1101. set = test_and_clear_bit(bit_index, hcr);
  1102. /*
  1103. * If we didn't change anything, no need to wake up or kick other CPUs
  1104. */
  1105. if (set == level)
  1106. return 0;
  1107. /*
  1108. * The vcpu irq_lines field was updated, wake up sleeping VCPUs and
  1109. * trigger a world-switch round on the running physical CPU to set the
  1110. * virtual IRQ/FIQ fields in the HCR appropriately.
  1111. */
  1112. kvm_make_request(KVM_REQ_IRQ_PENDING, vcpu);
  1113. kvm_vcpu_kick(vcpu);
  1114. return 0;
  1115. }
  1116. int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level,
  1117. bool line_status)
  1118. {
  1119. u32 irq = irq_level->irq;
  1120. unsigned int irq_type, vcpu_id, irq_num;
  1121. struct kvm_vcpu *vcpu = NULL;
  1122. bool level = irq_level->level;
  1123. irq_type = (irq >> KVM_ARM_IRQ_TYPE_SHIFT) & KVM_ARM_IRQ_TYPE_MASK;
  1124. vcpu_id = (irq >> KVM_ARM_IRQ_VCPU_SHIFT) & KVM_ARM_IRQ_VCPU_MASK;
  1125. vcpu_id += ((irq >> KVM_ARM_IRQ_VCPU2_SHIFT) & KVM_ARM_IRQ_VCPU2_MASK) * (KVM_ARM_IRQ_VCPU_MASK + 1);
  1126. irq_num = (irq >> KVM_ARM_IRQ_NUM_SHIFT) & KVM_ARM_IRQ_NUM_MASK;
  1127. trace_kvm_irq_line(irq_type, vcpu_id, irq_num, irq_level->level);
  1128. switch (irq_type) {
  1129. case KVM_ARM_IRQ_TYPE_CPU:
  1130. if (irqchip_in_kernel(kvm))
  1131. return -ENXIO;
  1132. vcpu = kvm_get_vcpu_by_id(kvm, vcpu_id);
  1133. if (!vcpu)
  1134. return -EINVAL;
  1135. if (irq_num > KVM_ARM_IRQ_CPU_FIQ)
  1136. return -EINVAL;
  1137. return vcpu_interrupt_line(vcpu, irq_num, level);
  1138. case KVM_ARM_IRQ_TYPE_PPI:
  1139. if (!irqchip_in_kernel(kvm))
  1140. return -ENXIO;
  1141. vcpu = kvm_get_vcpu_by_id(kvm, vcpu_id);
  1142. if (!vcpu)
  1143. return -EINVAL;
  1144. if (irq_num < VGIC_NR_SGIS || irq_num >= VGIC_NR_PRIVATE_IRQS)
  1145. return -EINVAL;
  1146. return kvm_vgic_inject_irq(kvm, vcpu, irq_num, level, NULL);
  1147. case KVM_ARM_IRQ_TYPE_SPI:
  1148. if (!irqchip_in_kernel(kvm))
  1149. return -ENXIO;
  1150. if (irq_num < VGIC_NR_PRIVATE_IRQS)
  1151. return -EINVAL;
  1152. return kvm_vgic_inject_irq(kvm, NULL, irq_num, level, NULL);
  1153. }
  1154. return -EINVAL;
  1155. }
  1156. static unsigned long system_supported_vcpu_features(void)
  1157. {
  1158. unsigned long features = KVM_VCPU_VALID_FEATURES;
  1159. if (!cpus_have_final_cap(ARM64_HAS_32BIT_EL1))
  1160. clear_bit(KVM_ARM_VCPU_EL1_32BIT, &features);
  1161. if (!kvm_arm_support_pmu_v3())
  1162. clear_bit(KVM_ARM_VCPU_PMU_V3, &features);
  1163. if (!system_supports_sve())
  1164. clear_bit(KVM_ARM_VCPU_SVE, &features);
  1165. if (!kvm_has_full_ptr_auth()) {
  1166. clear_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, &features);
  1167. clear_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, &features);
  1168. }
  1169. if (!cpus_have_final_cap(ARM64_HAS_NESTED_VIRT))
  1170. clear_bit(KVM_ARM_VCPU_HAS_EL2, &features);
  1171. return features;
  1172. }
  1173. static int kvm_vcpu_init_check_features(struct kvm_vcpu *vcpu,
  1174. const struct kvm_vcpu_init *init)
  1175. {
  1176. unsigned long features = init->features[0];
  1177. int i;
  1178. if (features & ~KVM_VCPU_VALID_FEATURES)
  1179. return -ENOENT;
  1180. for (i = 1; i < ARRAY_SIZE(init->features); i++) {
  1181. if (init->features[i])
  1182. return -ENOENT;
  1183. }
  1184. if (features & ~system_supported_vcpu_features())
  1185. return -EINVAL;
  1186. /*
  1187. * For now make sure that both address/generic pointer authentication
  1188. * features are requested by the userspace together.
  1189. */
  1190. if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, &features) !=
  1191. test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, &features))
  1192. return -EINVAL;
  1193. if (!test_bit(KVM_ARM_VCPU_EL1_32BIT, &features))
  1194. return 0;
  1195. /* MTE is incompatible with AArch32 */
  1196. if (kvm_has_mte(vcpu->kvm))
  1197. return -EINVAL;
  1198. /* NV is incompatible with AArch32 */
  1199. if (test_bit(KVM_ARM_VCPU_HAS_EL2, &features))
  1200. return -EINVAL;
  1201. return 0;
  1202. }
  1203. static bool kvm_vcpu_init_changed(struct kvm_vcpu *vcpu,
  1204. const struct kvm_vcpu_init *init)
  1205. {
  1206. unsigned long features = init->features[0];
  1207. return !bitmap_equal(vcpu->kvm->arch.vcpu_features, &features,
  1208. KVM_VCPU_MAX_FEATURES);
  1209. }
  1210. static int kvm_setup_vcpu(struct kvm_vcpu *vcpu)
  1211. {
  1212. struct kvm *kvm = vcpu->kvm;
  1213. int ret = 0;
  1214. /*
  1215. * When the vCPU has a PMU, but no PMU is set for the guest
  1216. * yet, set the default one.
  1217. */
  1218. if (kvm_vcpu_has_pmu(vcpu) && !kvm->arch.arm_pmu)
  1219. ret = kvm_arm_set_default_pmu(kvm);
  1220. /* Prepare for nested if required */
  1221. if (!ret && vcpu_has_nv(vcpu))
  1222. ret = kvm_vcpu_init_nested(vcpu);
  1223. return ret;
  1224. }
  1225. static int __kvm_vcpu_set_target(struct kvm_vcpu *vcpu,
  1226. const struct kvm_vcpu_init *init)
  1227. {
  1228. unsigned long features = init->features[0];
  1229. struct kvm *kvm = vcpu->kvm;
  1230. int ret = -EINVAL;
  1231. mutex_lock(&kvm->arch.config_lock);
  1232. if (test_bit(KVM_ARCH_FLAG_VCPU_FEATURES_CONFIGURED, &kvm->arch.flags) &&
  1233. kvm_vcpu_init_changed(vcpu, init))
  1234. goto out_unlock;
  1235. bitmap_copy(kvm->arch.vcpu_features, &features, KVM_VCPU_MAX_FEATURES);
  1236. ret = kvm_setup_vcpu(vcpu);
  1237. if (ret)
  1238. goto out_unlock;
  1239. /* Now we know what it is, we can reset it. */
  1240. kvm_reset_vcpu(vcpu);
  1241. set_bit(KVM_ARCH_FLAG_VCPU_FEATURES_CONFIGURED, &kvm->arch.flags);
  1242. vcpu_set_flag(vcpu, VCPU_INITIALIZED);
  1243. ret = 0;
  1244. out_unlock:
  1245. mutex_unlock(&kvm->arch.config_lock);
  1246. return ret;
  1247. }
  1248. static int kvm_vcpu_set_target(struct kvm_vcpu *vcpu,
  1249. const struct kvm_vcpu_init *init)
  1250. {
  1251. int ret;
  1252. if (init->target != KVM_ARM_TARGET_GENERIC_V8 &&
  1253. init->target != kvm_target_cpu())
  1254. return -EINVAL;
  1255. ret = kvm_vcpu_init_check_features(vcpu, init);
  1256. if (ret)
  1257. return ret;
  1258. if (!kvm_vcpu_initialized(vcpu))
  1259. return __kvm_vcpu_set_target(vcpu, init);
  1260. if (kvm_vcpu_init_changed(vcpu, init))
  1261. return -EINVAL;
  1262. kvm_reset_vcpu(vcpu);
  1263. return 0;
  1264. }
  1265. static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_vcpu *vcpu,
  1266. struct kvm_vcpu_init *init)
  1267. {
  1268. bool power_off = false;
  1269. int ret;
  1270. /*
  1271. * Treat the power-off vCPU feature as ephemeral. Clear the bit to avoid
  1272. * reflecting it in the finalized feature set, thus limiting its scope
  1273. * to a single KVM_ARM_VCPU_INIT call.
  1274. */
  1275. if (init->features[0] & BIT(KVM_ARM_VCPU_POWER_OFF)) {
  1276. init->features[0] &= ~BIT(KVM_ARM_VCPU_POWER_OFF);
  1277. power_off = true;
  1278. }
  1279. ret = kvm_vcpu_set_target(vcpu, init);
  1280. if (ret)
  1281. return ret;
  1282. /*
  1283. * Ensure a rebooted VM will fault in RAM pages and detect if the
  1284. * guest MMU is turned off and flush the caches as needed.
  1285. *
  1286. * S2FWB enforces all memory accesses to RAM being cacheable,
  1287. * ensuring that the data side is always coherent. We still
  1288. * need to invalidate the I-cache though, as FWB does *not*
  1289. * imply CTR_EL0.DIC.
  1290. */
  1291. if (vcpu_has_run_once(vcpu)) {
  1292. if (!cpus_have_final_cap(ARM64_HAS_STAGE2_FWB))
  1293. stage2_unmap_vm(vcpu->kvm);
  1294. else
  1295. icache_inval_all_pou();
  1296. }
  1297. vcpu_reset_hcr(vcpu);
  1298. /*
  1299. * Handle the "start in power-off" case.
  1300. */
  1301. spin_lock(&vcpu->arch.mp_state_lock);
  1302. if (power_off)
  1303. __kvm_arm_vcpu_power_off(vcpu);
  1304. else
  1305. WRITE_ONCE(vcpu->arch.mp_state.mp_state, KVM_MP_STATE_RUNNABLE);
  1306. spin_unlock(&vcpu->arch.mp_state_lock);
  1307. return 0;
  1308. }
  1309. static int kvm_arm_vcpu_set_attr(struct kvm_vcpu *vcpu,
  1310. struct kvm_device_attr *attr)
  1311. {
  1312. int ret = -ENXIO;
  1313. switch (attr->group) {
  1314. default:
  1315. ret = kvm_arm_vcpu_arch_set_attr(vcpu, attr);
  1316. break;
  1317. }
  1318. return ret;
  1319. }
  1320. static int kvm_arm_vcpu_get_attr(struct kvm_vcpu *vcpu,
  1321. struct kvm_device_attr *attr)
  1322. {
  1323. int ret = -ENXIO;
  1324. switch (attr->group) {
  1325. default:
  1326. ret = kvm_arm_vcpu_arch_get_attr(vcpu, attr);
  1327. break;
  1328. }
  1329. return ret;
  1330. }
  1331. static int kvm_arm_vcpu_has_attr(struct kvm_vcpu *vcpu,
  1332. struct kvm_device_attr *attr)
  1333. {
  1334. int ret = -ENXIO;
  1335. switch (attr->group) {
  1336. default:
  1337. ret = kvm_arm_vcpu_arch_has_attr(vcpu, attr);
  1338. break;
  1339. }
  1340. return ret;
  1341. }
  1342. static int kvm_arm_vcpu_get_events(struct kvm_vcpu *vcpu,
  1343. struct kvm_vcpu_events *events)
  1344. {
  1345. memset(events, 0, sizeof(*events));
  1346. return __kvm_arm_vcpu_get_events(vcpu, events);
  1347. }
  1348. static int kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu,
  1349. struct kvm_vcpu_events *events)
  1350. {
  1351. int i;
  1352. /* check whether the reserved field is zero */
  1353. for (i = 0; i < ARRAY_SIZE(events->reserved); i++)
  1354. if (events->reserved[i])
  1355. return -EINVAL;
  1356. /* check whether the pad field is zero */
  1357. for (i = 0; i < ARRAY_SIZE(events->exception.pad); i++)
  1358. if (events->exception.pad[i])
  1359. return -EINVAL;
  1360. return __kvm_arm_vcpu_set_events(vcpu, events);
  1361. }
  1362. long kvm_arch_vcpu_ioctl(struct file *filp,
  1363. unsigned int ioctl, unsigned long arg)
  1364. {
  1365. struct kvm_vcpu *vcpu = filp->private_data;
  1366. void __user *argp = (void __user *)arg;
  1367. struct kvm_device_attr attr;
  1368. long r;
  1369. switch (ioctl) {
  1370. case KVM_ARM_VCPU_INIT: {
  1371. struct kvm_vcpu_init init;
  1372. r = -EFAULT;
  1373. if (copy_from_user(&init, argp, sizeof(init)))
  1374. break;
  1375. r = kvm_arch_vcpu_ioctl_vcpu_init(vcpu, &init);
  1376. break;
  1377. }
  1378. case KVM_SET_ONE_REG:
  1379. case KVM_GET_ONE_REG: {
  1380. struct kvm_one_reg reg;
  1381. r = -ENOEXEC;
  1382. if (unlikely(!kvm_vcpu_initialized(vcpu)))
  1383. break;
  1384. r = -EFAULT;
  1385. if (copy_from_user(&reg, argp, sizeof(reg)))
  1386. break;
  1387. /*
  1388. * We could owe a reset due to PSCI. Handle the pending reset
  1389. * here to ensure userspace register accesses are ordered after
  1390. * the reset.
  1391. */
  1392. if (kvm_check_request(KVM_REQ_VCPU_RESET, vcpu))
  1393. kvm_reset_vcpu(vcpu);
  1394. if (ioctl == KVM_SET_ONE_REG)
  1395. r = kvm_arm_set_reg(vcpu, &reg);
  1396. else
  1397. r = kvm_arm_get_reg(vcpu, &reg);
  1398. break;
  1399. }
  1400. case KVM_GET_REG_LIST: {
  1401. struct kvm_reg_list __user *user_list = argp;
  1402. struct kvm_reg_list reg_list;
  1403. unsigned n;
  1404. r = -ENOEXEC;
  1405. if (unlikely(!kvm_vcpu_initialized(vcpu)))
  1406. break;
  1407. r = -EPERM;
  1408. if (!kvm_arm_vcpu_is_finalized(vcpu))
  1409. break;
  1410. r = -EFAULT;
  1411. if (copy_from_user(&reg_list, user_list, sizeof(reg_list)))
  1412. break;
  1413. n = reg_list.n;
  1414. reg_list.n = kvm_arm_num_regs(vcpu);
  1415. if (copy_to_user(user_list, &reg_list, sizeof(reg_list)))
  1416. break;
  1417. r = -E2BIG;
  1418. if (n < reg_list.n)
  1419. break;
  1420. r = kvm_arm_copy_reg_indices(vcpu, user_list->reg);
  1421. break;
  1422. }
  1423. case KVM_SET_DEVICE_ATTR: {
  1424. r = -EFAULT;
  1425. if (copy_from_user(&attr, argp, sizeof(attr)))
  1426. break;
  1427. r = kvm_arm_vcpu_set_attr(vcpu, &attr);
  1428. break;
  1429. }
  1430. case KVM_GET_DEVICE_ATTR: {
  1431. r = -EFAULT;
  1432. if (copy_from_user(&attr, argp, sizeof(attr)))
  1433. break;
  1434. r = kvm_arm_vcpu_get_attr(vcpu, &attr);
  1435. break;
  1436. }
  1437. case KVM_HAS_DEVICE_ATTR: {
  1438. r = -EFAULT;
  1439. if (copy_from_user(&attr, argp, sizeof(attr)))
  1440. break;
  1441. r = kvm_arm_vcpu_has_attr(vcpu, &attr);
  1442. break;
  1443. }
  1444. case KVM_GET_VCPU_EVENTS: {
  1445. struct kvm_vcpu_events events;
  1446. if (kvm_arm_vcpu_get_events(vcpu, &events))
  1447. return -EINVAL;
  1448. if (copy_to_user(argp, &events, sizeof(events)))
  1449. return -EFAULT;
  1450. return 0;
  1451. }
  1452. case KVM_SET_VCPU_EVENTS: {
  1453. struct kvm_vcpu_events events;
  1454. if (copy_from_user(&events, argp, sizeof(events)))
  1455. return -EFAULT;
  1456. return kvm_arm_vcpu_set_events(vcpu, &events);
  1457. }
  1458. case KVM_ARM_VCPU_FINALIZE: {
  1459. int what;
  1460. if (!kvm_vcpu_initialized(vcpu))
  1461. return -ENOEXEC;
  1462. if (get_user(what, (const int __user *)argp))
  1463. return -EFAULT;
  1464. return kvm_arm_vcpu_finalize(vcpu, what);
  1465. }
  1466. default:
  1467. r = -EINVAL;
  1468. }
  1469. return r;
  1470. }
  1471. void kvm_arch_sync_dirty_log(struct kvm *kvm, struct kvm_memory_slot *memslot)
  1472. {
  1473. }
  1474. static int kvm_vm_ioctl_set_device_addr(struct kvm *kvm,
  1475. struct kvm_arm_device_addr *dev_addr)
  1476. {
  1477. switch (FIELD_GET(KVM_ARM_DEVICE_ID_MASK, dev_addr->id)) {
  1478. case KVM_ARM_DEVICE_VGIC_V2:
  1479. if (!vgic_present)
  1480. return -ENXIO;
  1481. return kvm_set_legacy_vgic_v2_addr(kvm, dev_addr);
  1482. default:
  1483. return -ENODEV;
  1484. }
  1485. }
  1486. static int kvm_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
  1487. {
  1488. switch (attr->group) {
  1489. case KVM_ARM_VM_SMCCC_CTRL:
  1490. return kvm_vm_smccc_has_attr(kvm, attr);
  1491. default:
  1492. return -ENXIO;
  1493. }
  1494. }
  1495. static int kvm_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
  1496. {
  1497. switch (attr->group) {
  1498. case KVM_ARM_VM_SMCCC_CTRL:
  1499. return kvm_vm_smccc_set_attr(kvm, attr);
  1500. default:
  1501. return -ENXIO;
  1502. }
  1503. }
  1504. int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
  1505. {
  1506. struct kvm *kvm = filp->private_data;
  1507. void __user *argp = (void __user *)arg;
  1508. struct kvm_device_attr attr;
  1509. switch (ioctl) {
  1510. case KVM_CREATE_IRQCHIP: {
  1511. int ret;
  1512. if (!vgic_present)
  1513. return -ENXIO;
  1514. mutex_lock(&kvm->lock);
  1515. ret = kvm_vgic_create(kvm, KVM_DEV_TYPE_ARM_VGIC_V2);
  1516. mutex_unlock(&kvm->lock);
  1517. return ret;
  1518. }
  1519. case KVM_ARM_SET_DEVICE_ADDR: {
  1520. struct kvm_arm_device_addr dev_addr;
  1521. if (copy_from_user(&dev_addr, argp, sizeof(dev_addr)))
  1522. return -EFAULT;
  1523. return kvm_vm_ioctl_set_device_addr(kvm, &dev_addr);
  1524. }
  1525. case KVM_ARM_PREFERRED_TARGET: {
  1526. struct kvm_vcpu_init init = {
  1527. .target = KVM_ARM_TARGET_GENERIC_V8,
  1528. };
  1529. if (copy_to_user(argp, &init, sizeof(init)))
  1530. return -EFAULT;
  1531. return 0;
  1532. }
  1533. case KVM_ARM_MTE_COPY_TAGS: {
  1534. struct kvm_arm_copy_mte_tags copy_tags;
  1535. if (copy_from_user(&copy_tags, argp, sizeof(copy_tags)))
  1536. return -EFAULT;
  1537. return kvm_vm_ioctl_mte_copy_tags(kvm, &copy_tags);
  1538. }
  1539. case KVM_ARM_SET_COUNTER_OFFSET: {
  1540. struct kvm_arm_counter_offset offset;
  1541. if (copy_from_user(&offset, argp, sizeof(offset)))
  1542. return -EFAULT;
  1543. return kvm_vm_ioctl_set_counter_offset(kvm, &offset);
  1544. }
  1545. case KVM_HAS_DEVICE_ATTR: {
  1546. if (copy_from_user(&attr, argp, sizeof(attr)))
  1547. return -EFAULT;
  1548. return kvm_vm_has_attr(kvm, &attr);
  1549. }
  1550. case KVM_SET_DEVICE_ATTR: {
  1551. if (copy_from_user(&attr, argp, sizeof(attr)))
  1552. return -EFAULT;
  1553. return kvm_vm_set_attr(kvm, &attr);
  1554. }
  1555. case KVM_ARM_GET_REG_WRITABLE_MASKS: {
  1556. struct reg_mask_range range;
  1557. if (copy_from_user(&range, argp, sizeof(range)))
  1558. return -EFAULT;
  1559. return kvm_vm_ioctl_get_reg_writable_masks(kvm, &range);
  1560. }
  1561. default:
  1562. return -EINVAL;
  1563. }
  1564. }
  1565. /* unlocks vcpus from @vcpu_lock_idx and smaller */
  1566. static void unlock_vcpus(struct kvm *kvm, int vcpu_lock_idx)
  1567. {
  1568. struct kvm_vcpu *tmp_vcpu;
  1569. for (; vcpu_lock_idx >= 0; vcpu_lock_idx--) {
  1570. tmp_vcpu = kvm_get_vcpu(kvm, vcpu_lock_idx);
  1571. mutex_unlock(&tmp_vcpu->mutex);
  1572. }
  1573. }
  1574. void unlock_all_vcpus(struct kvm *kvm)
  1575. {
  1576. lockdep_assert_held(&kvm->lock);
  1577. unlock_vcpus(kvm, atomic_read(&kvm->online_vcpus) - 1);
  1578. }
  1579. /* Returns true if all vcpus were locked, false otherwise */
  1580. bool lock_all_vcpus(struct kvm *kvm)
  1581. {
  1582. struct kvm_vcpu *tmp_vcpu;
  1583. unsigned long c;
  1584. lockdep_assert_held(&kvm->lock);
  1585. /*
  1586. * Any time a vcpu is in an ioctl (including running), the
  1587. * core KVM code tries to grab the vcpu->mutex.
  1588. *
  1589. * By grabbing the vcpu->mutex of all VCPUs we ensure that no
  1590. * other VCPUs can fiddle with the state while we access it.
  1591. */
  1592. kvm_for_each_vcpu(c, tmp_vcpu, kvm) {
  1593. if (!mutex_trylock(&tmp_vcpu->mutex)) {
  1594. unlock_vcpus(kvm, c - 1);
  1595. return false;
  1596. }
  1597. }
  1598. return true;
  1599. }
  1600. static unsigned long nvhe_percpu_size(void)
  1601. {
  1602. return (unsigned long)CHOOSE_NVHE_SYM(__per_cpu_end) -
  1603. (unsigned long)CHOOSE_NVHE_SYM(__per_cpu_start);
  1604. }
  1605. static unsigned long nvhe_percpu_order(void)
  1606. {
  1607. unsigned long size = nvhe_percpu_size();
  1608. return size ? get_order(size) : 0;
  1609. }
  1610. static size_t pkvm_host_sve_state_order(void)
  1611. {
  1612. return get_order(pkvm_host_sve_state_size());
  1613. }
  1614. /* A lookup table holding the hypervisor VA for each vector slot */
  1615. static void *hyp_spectre_vector_selector[BP_HARDEN_EL2_SLOTS];
  1616. static void kvm_init_vector_slot(void *base, enum arm64_hyp_spectre_vector slot)
  1617. {
  1618. hyp_spectre_vector_selector[slot] = __kvm_vector_slot2addr(base, slot);
  1619. }
  1620. static int kvm_init_vector_slots(void)
  1621. {
  1622. int err;
  1623. void *base;
  1624. base = kern_hyp_va(kvm_ksym_ref(__kvm_hyp_vector));
  1625. kvm_init_vector_slot(base, HYP_VECTOR_DIRECT);
  1626. base = kern_hyp_va(kvm_ksym_ref(__bp_harden_hyp_vecs));
  1627. kvm_init_vector_slot(base, HYP_VECTOR_SPECTRE_DIRECT);
  1628. if (kvm_system_needs_idmapped_vectors() &&
  1629. !is_protected_kvm_enabled()) {
  1630. err = create_hyp_exec_mappings(__pa_symbol(__bp_harden_hyp_vecs),
  1631. __BP_HARDEN_HYP_VECS_SZ, &base);
  1632. if (err)
  1633. return err;
  1634. }
  1635. kvm_init_vector_slot(base, HYP_VECTOR_INDIRECT);
  1636. kvm_init_vector_slot(base, HYP_VECTOR_SPECTRE_INDIRECT);
  1637. return 0;
  1638. }
  1639. static void __init cpu_prepare_hyp_mode(int cpu, u32 hyp_va_bits)
  1640. {
  1641. struct kvm_nvhe_init_params *params = per_cpu_ptr_nvhe_sym(kvm_init_params, cpu);
  1642. unsigned long tcr, ips;
  1643. /*
  1644. * Calculate the raw per-cpu offset without a translation from the
  1645. * kernel's mapping to the linear mapping, and store it in tpidr_el2
  1646. * so that we can use adr_l to access per-cpu variables in EL2.
  1647. * Also drop the KASAN tag which gets in the way...
  1648. */
  1649. params->tpidr_el2 = (unsigned long)kasan_reset_tag(per_cpu_ptr_nvhe_sym(__per_cpu_start, cpu)) -
  1650. (unsigned long)kvm_ksym_ref(CHOOSE_NVHE_SYM(__per_cpu_start));
  1651. params->mair_el2 = read_sysreg(mair_el1);
  1652. tcr = read_sysreg(tcr_el1);
  1653. ips = FIELD_GET(TCR_IPS_MASK, tcr);
  1654. if (cpus_have_final_cap(ARM64_KVM_HVHE)) {
  1655. tcr |= TCR_EPD1_MASK;
  1656. } else {
  1657. tcr &= TCR_EL2_MASK;
  1658. tcr |= TCR_EL2_RES1;
  1659. }
  1660. tcr &= ~TCR_T0SZ_MASK;
  1661. tcr |= TCR_T0SZ(hyp_va_bits);
  1662. tcr &= ~TCR_EL2_PS_MASK;
  1663. tcr |= FIELD_PREP(TCR_EL2_PS_MASK, ips);
  1664. if (lpa2_is_enabled())
  1665. tcr |= TCR_EL2_DS;
  1666. params->tcr_el2 = tcr;
  1667. params->pgd_pa = kvm_mmu_get_httbr();
  1668. if (is_protected_kvm_enabled())
  1669. params->hcr_el2 = HCR_HOST_NVHE_PROTECTED_FLAGS;
  1670. else
  1671. params->hcr_el2 = HCR_HOST_NVHE_FLAGS;
  1672. if (cpus_have_final_cap(ARM64_KVM_HVHE))
  1673. params->hcr_el2 |= HCR_E2H;
  1674. params->vttbr = params->vtcr = 0;
  1675. /*
  1676. * Flush the init params from the data cache because the struct will
  1677. * be read while the MMU is off.
  1678. */
  1679. kvm_flush_dcache_to_poc(params, sizeof(*params));
  1680. }
  1681. static void hyp_install_host_vector(void)
  1682. {
  1683. struct kvm_nvhe_init_params *params;
  1684. struct arm_smccc_res res;
  1685. /* Switch from the HYP stub to our own HYP init vector */
  1686. __hyp_set_vectors(kvm_get_idmap_vector());
  1687. /*
  1688. * Call initialization code, and switch to the full blown HYP code.
  1689. * If the cpucaps haven't been finalized yet, something has gone very
  1690. * wrong, and hyp will crash and burn when it uses any
  1691. * cpus_have_*_cap() wrapper.
  1692. */
  1693. BUG_ON(!system_capabilities_finalized());
  1694. params = this_cpu_ptr_nvhe_sym(kvm_init_params);
  1695. arm_smccc_1_1_hvc(KVM_HOST_SMCCC_FUNC(__kvm_hyp_init), virt_to_phys(params), &res);
  1696. WARN_ON(res.a0 != SMCCC_RET_SUCCESS);
  1697. }
  1698. static void cpu_init_hyp_mode(void)
  1699. {
  1700. hyp_install_host_vector();
  1701. /*
  1702. * Disabling SSBD on a non-VHE system requires us to enable SSBS
  1703. * at EL2.
  1704. */
  1705. if (this_cpu_has_cap(ARM64_SSBS) &&
  1706. arm64_get_spectre_v4_state() == SPECTRE_VULNERABLE) {
  1707. kvm_call_hyp_nvhe(__kvm_enable_ssbs);
  1708. }
  1709. }
  1710. static void cpu_hyp_reset(void)
  1711. {
  1712. if (!is_kernel_in_hyp_mode())
  1713. __hyp_reset_vectors();
  1714. }
  1715. /*
  1716. * EL2 vectors can be mapped and rerouted in a number of ways,
  1717. * depending on the kernel configuration and CPU present:
  1718. *
  1719. * - If the CPU is affected by Spectre-v2, the hardening sequence is
  1720. * placed in one of the vector slots, which is executed before jumping
  1721. * to the real vectors.
  1722. *
  1723. * - If the CPU also has the ARM64_SPECTRE_V3A cap, the slot
  1724. * containing the hardening sequence is mapped next to the idmap page,
  1725. * and executed before jumping to the real vectors.
  1726. *
  1727. * - If the CPU only has the ARM64_SPECTRE_V3A cap, then an
  1728. * empty slot is selected, mapped next to the idmap page, and
  1729. * executed before jumping to the real vectors.
  1730. *
  1731. * Note that ARM64_SPECTRE_V3A is somewhat incompatible with
  1732. * VHE, as we don't have hypervisor-specific mappings. If the system
  1733. * is VHE and yet selects this capability, it will be ignored.
  1734. */
  1735. static void cpu_set_hyp_vector(void)
  1736. {
  1737. struct bp_hardening_data *data = this_cpu_ptr(&bp_hardening_data);
  1738. void *vector = hyp_spectre_vector_selector[data->slot];
  1739. if (!is_protected_kvm_enabled())
  1740. *this_cpu_ptr_hyp_sym(kvm_hyp_vector) = (unsigned long)vector;
  1741. else
  1742. kvm_call_hyp_nvhe(__pkvm_cpu_set_vector, data->slot);
  1743. }
  1744. static void cpu_hyp_init_context(void)
  1745. {
  1746. kvm_init_host_cpu_context(host_data_ptr(host_ctxt));
  1747. if (!is_kernel_in_hyp_mode())
  1748. cpu_init_hyp_mode();
  1749. }
  1750. static void cpu_hyp_init_features(void)
  1751. {
  1752. cpu_set_hyp_vector();
  1753. kvm_arm_init_debug();
  1754. if (is_kernel_in_hyp_mode())
  1755. kvm_timer_init_vhe();
  1756. if (vgic_present)
  1757. kvm_vgic_init_cpu_hardware();
  1758. }
  1759. static void cpu_hyp_reinit(void)
  1760. {
  1761. cpu_hyp_reset();
  1762. cpu_hyp_init_context();
  1763. cpu_hyp_init_features();
  1764. }
  1765. static void cpu_hyp_init(void *discard)
  1766. {
  1767. if (!__this_cpu_read(kvm_hyp_initialized)) {
  1768. cpu_hyp_reinit();
  1769. __this_cpu_write(kvm_hyp_initialized, 1);
  1770. }
  1771. }
  1772. static void cpu_hyp_uninit(void *discard)
  1773. {
  1774. if (__this_cpu_read(kvm_hyp_initialized)) {
  1775. cpu_hyp_reset();
  1776. __this_cpu_write(kvm_hyp_initialized, 0);
  1777. }
  1778. }
  1779. int kvm_arch_enable_virtualization_cpu(void)
  1780. {
  1781. /*
  1782. * Most calls to this function are made with migration
  1783. * disabled, but not with preemption disabled. The former is
  1784. * enough to ensure correctness, but most of the helpers
  1785. * expect the later and will throw a tantrum otherwise.
  1786. */
  1787. preempt_disable();
  1788. cpu_hyp_init(NULL);
  1789. kvm_vgic_cpu_up();
  1790. kvm_timer_cpu_up();
  1791. preempt_enable();
  1792. return 0;
  1793. }
  1794. void kvm_arch_disable_virtualization_cpu(void)
  1795. {
  1796. kvm_timer_cpu_down();
  1797. kvm_vgic_cpu_down();
  1798. if (!is_protected_kvm_enabled())
  1799. cpu_hyp_uninit(NULL);
  1800. }
  1801. #ifdef CONFIG_CPU_PM
  1802. static int hyp_init_cpu_pm_notifier(struct notifier_block *self,
  1803. unsigned long cmd,
  1804. void *v)
  1805. {
  1806. /*
  1807. * kvm_hyp_initialized is left with its old value over
  1808. * PM_ENTER->PM_EXIT. It is used to indicate PM_EXIT should
  1809. * re-enable hyp.
  1810. */
  1811. switch (cmd) {
  1812. case CPU_PM_ENTER:
  1813. if (__this_cpu_read(kvm_hyp_initialized))
  1814. /*
  1815. * don't update kvm_hyp_initialized here
  1816. * so that the hyp will be re-enabled
  1817. * when we resume. See below.
  1818. */
  1819. cpu_hyp_reset();
  1820. return NOTIFY_OK;
  1821. case CPU_PM_ENTER_FAILED:
  1822. case CPU_PM_EXIT:
  1823. if (__this_cpu_read(kvm_hyp_initialized))
  1824. /* The hyp was enabled before suspend. */
  1825. cpu_hyp_reinit();
  1826. return NOTIFY_OK;
  1827. default:
  1828. return NOTIFY_DONE;
  1829. }
  1830. }
  1831. static struct notifier_block hyp_init_cpu_pm_nb = {
  1832. .notifier_call = hyp_init_cpu_pm_notifier,
  1833. };
  1834. static void __init hyp_cpu_pm_init(void)
  1835. {
  1836. if (!is_protected_kvm_enabled())
  1837. cpu_pm_register_notifier(&hyp_init_cpu_pm_nb);
  1838. }
  1839. static void __init hyp_cpu_pm_exit(void)
  1840. {
  1841. if (!is_protected_kvm_enabled())
  1842. cpu_pm_unregister_notifier(&hyp_init_cpu_pm_nb);
  1843. }
  1844. #else
  1845. static inline void __init hyp_cpu_pm_init(void)
  1846. {
  1847. }
  1848. static inline void __init hyp_cpu_pm_exit(void)
  1849. {
  1850. }
  1851. #endif
  1852. static void __init init_cpu_logical_map(void)
  1853. {
  1854. unsigned int cpu;
  1855. /*
  1856. * Copy the MPIDR <-> logical CPU ID mapping to hyp.
  1857. * Only copy the set of online CPUs whose features have been checked
  1858. * against the finalized system capabilities. The hypervisor will not
  1859. * allow any other CPUs from the `possible` set to boot.
  1860. */
  1861. for_each_online_cpu(cpu)
  1862. hyp_cpu_logical_map[cpu] = cpu_logical_map(cpu);
  1863. }
  1864. #define init_psci_0_1_impl_state(config, what) \
  1865. config.psci_0_1_ ## what ## _implemented = psci_ops.what
  1866. static bool __init init_psci_relay(void)
  1867. {
  1868. /*
  1869. * If PSCI has not been initialized, protected KVM cannot install
  1870. * itself on newly booted CPUs.
  1871. */
  1872. if (!psci_ops.get_version) {
  1873. kvm_err("Cannot initialize protected mode without PSCI\n");
  1874. return false;
  1875. }
  1876. kvm_host_psci_config.version = psci_ops.get_version();
  1877. kvm_host_psci_config.smccc_version = arm_smccc_get_version();
  1878. if (kvm_host_psci_config.version == PSCI_VERSION(0, 1)) {
  1879. kvm_host_psci_config.function_ids_0_1 = get_psci_0_1_function_ids();
  1880. init_psci_0_1_impl_state(kvm_host_psci_config, cpu_suspend);
  1881. init_psci_0_1_impl_state(kvm_host_psci_config, cpu_on);
  1882. init_psci_0_1_impl_state(kvm_host_psci_config, cpu_off);
  1883. init_psci_0_1_impl_state(kvm_host_psci_config, migrate);
  1884. }
  1885. return true;
  1886. }
  1887. static int __init init_subsystems(void)
  1888. {
  1889. int err = 0;
  1890. /*
  1891. * Enable hardware so that subsystem initialisation can access EL2.
  1892. */
  1893. on_each_cpu(cpu_hyp_init, NULL, 1);
  1894. /*
  1895. * Register CPU lower-power notifier
  1896. */
  1897. hyp_cpu_pm_init();
  1898. /*
  1899. * Init HYP view of VGIC
  1900. */
  1901. err = kvm_vgic_hyp_init();
  1902. switch (err) {
  1903. case 0:
  1904. vgic_present = true;
  1905. break;
  1906. case -ENODEV:
  1907. case -ENXIO:
  1908. vgic_present = false;
  1909. err = 0;
  1910. break;
  1911. default:
  1912. goto out;
  1913. }
  1914. /*
  1915. * Init HYP architected timer support
  1916. */
  1917. err = kvm_timer_hyp_init(vgic_present);
  1918. if (err)
  1919. goto out;
  1920. kvm_register_perf_callbacks(NULL);
  1921. out:
  1922. if (err)
  1923. hyp_cpu_pm_exit();
  1924. if (err || !is_protected_kvm_enabled())
  1925. on_each_cpu(cpu_hyp_uninit, NULL, 1);
  1926. return err;
  1927. }
  1928. static void __init teardown_subsystems(void)
  1929. {
  1930. kvm_unregister_perf_callbacks();
  1931. hyp_cpu_pm_exit();
  1932. }
  1933. static void __init teardown_hyp_mode(void)
  1934. {
  1935. bool free_sve = system_supports_sve() && is_protected_kvm_enabled();
  1936. int cpu;
  1937. free_hyp_pgds();
  1938. for_each_possible_cpu(cpu) {
  1939. free_page(per_cpu(kvm_arm_hyp_stack_page, cpu));
  1940. free_pages(kvm_nvhe_sym(kvm_arm_hyp_percpu_base)[cpu], nvhe_percpu_order());
  1941. if (free_sve) {
  1942. struct cpu_sve_state *sve_state;
  1943. sve_state = per_cpu_ptr_nvhe_sym(kvm_host_data, cpu)->sve_state;
  1944. free_pages((unsigned long) sve_state, pkvm_host_sve_state_order());
  1945. }
  1946. }
  1947. }
  1948. static int __init do_pkvm_init(u32 hyp_va_bits)
  1949. {
  1950. void *per_cpu_base = kvm_ksym_ref(kvm_nvhe_sym(kvm_arm_hyp_percpu_base));
  1951. int ret;
  1952. preempt_disable();
  1953. cpu_hyp_init_context();
  1954. ret = kvm_call_hyp_nvhe(__pkvm_init, hyp_mem_base, hyp_mem_size,
  1955. num_possible_cpus(), kern_hyp_va(per_cpu_base),
  1956. hyp_va_bits);
  1957. cpu_hyp_init_features();
  1958. /*
  1959. * The stub hypercalls are now disabled, so set our local flag to
  1960. * prevent a later re-init attempt in kvm_arch_enable_virtualization_cpu().
  1961. */
  1962. __this_cpu_write(kvm_hyp_initialized, 1);
  1963. preempt_enable();
  1964. return ret;
  1965. }
  1966. static u64 get_hyp_id_aa64pfr0_el1(void)
  1967. {
  1968. /*
  1969. * Track whether the system isn't affected by spectre/meltdown in the
  1970. * hypervisor's view of id_aa64pfr0_el1, used for protected VMs.
  1971. * Although this is per-CPU, we make it global for simplicity, e.g., not
  1972. * to have to worry about vcpu migration.
  1973. *
  1974. * Unlike for non-protected VMs, userspace cannot override this for
  1975. * protected VMs.
  1976. */
  1977. u64 val = read_sanitised_ftr_reg(SYS_ID_AA64PFR0_EL1);
  1978. val &= ~(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV2) |
  1979. ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV3));
  1980. val |= FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV2),
  1981. arm64_get_spectre_v2_state() == SPECTRE_UNAFFECTED);
  1982. val |= FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV3),
  1983. arm64_get_meltdown_state() == SPECTRE_UNAFFECTED);
  1984. return val;
  1985. }
  1986. static void kvm_hyp_init_symbols(void)
  1987. {
  1988. kvm_nvhe_sym(id_aa64pfr0_el1_sys_val) = get_hyp_id_aa64pfr0_el1();
  1989. kvm_nvhe_sym(id_aa64pfr1_el1_sys_val) = read_sanitised_ftr_reg(SYS_ID_AA64PFR1_EL1);
  1990. kvm_nvhe_sym(id_aa64isar0_el1_sys_val) = read_sanitised_ftr_reg(SYS_ID_AA64ISAR0_EL1);
  1991. kvm_nvhe_sym(id_aa64isar1_el1_sys_val) = read_sanitised_ftr_reg(SYS_ID_AA64ISAR1_EL1);
  1992. kvm_nvhe_sym(id_aa64isar2_el1_sys_val) = read_sanitised_ftr_reg(SYS_ID_AA64ISAR2_EL1);
  1993. kvm_nvhe_sym(id_aa64mmfr0_el1_sys_val) = read_sanitised_ftr_reg(SYS_ID_AA64MMFR0_EL1);
  1994. kvm_nvhe_sym(id_aa64mmfr1_el1_sys_val) = read_sanitised_ftr_reg(SYS_ID_AA64MMFR1_EL1);
  1995. kvm_nvhe_sym(id_aa64mmfr2_el1_sys_val) = read_sanitised_ftr_reg(SYS_ID_AA64MMFR2_EL1);
  1996. kvm_nvhe_sym(id_aa64smfr0_el1_sys_val) = read_sanitised_ftr_reg(SYS_ID_AA64SMFR0_EL1);
  1997. kvm_nvhe_sym(__icache_flags) = __icache_flags;
  1998. kvm_nvhe_sym(kvm_arm_vmid_bits) = kvm_arm_vmid_bits;
  1999. }
  2000. static int __init kvm_hyp_init_protection(u32 hyp_va_bits)
  2001. {
  2002. void *addr = phys_to_virt(hyp_mem_base);
  2003. int ret;
  2004. ret = create_hyp_mappings(addr, addr + hyp_mem_size, PAGE_HYP);
  2005. if (ret)
  2006. return ret;
  2007. ret = do_pkvm_init(hyp_va_bits);
  2008. if (ret)
  2009. return ret;
  2010. free_hyp_pgds();
  2011. return 0;
  2012. }
  2013. static int init_pkvm_host_sve_state(void)
  2014. {
  2015. int cpu;
  2016. if (!system_supports_sve())
  2017. return 0;
  2018. /* Allocate pages for host sve state in protected mode. */
  2019. for_each_possible_cpu(cpu) {
  2020. struct page *page = alloc_pages(GFP_KERNEL, pkvm_host_sve_state_order());
  2021. if (!page)
  2022. return -ENOMEM;
  2023. per_cpu_ptr_nvhe_sym(kvm_host_data, cpu)->sve_state = page_address(page);
  2024. }
  2025. /*
  2026. * Don't map the pages in hyp since these are only used in protected
  2027. * mode, which will (re)create its own mapping when initialized.
  2028. */
  2029. return 0;
  2030. }
  2031. /*
  2032. * Finalizes the initialization of hyp mode, once everything else is initialized
  2033. * and the initialziation process cannot fail.
  2034. */
  2035. static void finalize_init_hyp_mode(void)
  2036. {
  2037. int cpu;
  2038. if (system_supports_sve() && is_protected_kvm_enabled()) {
  2039. for_each_possible_cpu(cpu) {
  2040. struct cpu_sve_state *sve_state;
  2041. sve_state = per_cpu_ptr_nvhe_sym(kvm_host_data, cpu)->sve_state;
  2042. per_cpu_ptr_nvhe_sym(kvm_host_data, cpu)->sve_state =
  2043. kern_hyp_va(sve_state);
  2044. }
  2045. }
  2046. }
  2047. static void pkvm_hyp_init_ptrauth(void)
  2048. {
  2049. struct kvm_cpu_context *hyp_ctxt;
  2050. int cpu;
  2051. for_each_possible_cpu(cpu) {
  2052. hyp_ctxt = per_cpu_ptr_nvhe_sym(kvm_hyp_ctxt, cpu);
  2053. hyp_ctxt->sys_regs[APIAKEYLO_EL1] = get_random_long();
  2054. hyp_ctxt->sys_regs[APIAKEYHI_EL1] = get_random_long();
  2055. hyp_ctxt->sys_regs[APIBKEYLO_EL1] = get_random_long();
  2056. hyp_ctxt->sys_regs[APIBKEYHI_EL1] = get_random_long();
  2057. hyp_ctxt->sys_regs[APDAKEYLO_EL1] = get_random_long();
  2058. hyp_ctxt->sys_regs[APDAKEYHI_EL1] = get_random_long();
  2059. hyp_ctxt->sys_regs[APDBKEYLO_EL1] = get_random_long();
  2060. hyp_ctxt->sys_regs[APDBKEYHI_EL1] = get_random_long();
  2061. hyp_ctxt->sys_regs[APGAKEYLO_EL1] = get_random_long();
  2062. hyp_ctxt->sys_regs[APGAKEYHI_EL1] = get_random_long();
  2063. }
  2064. }
  2065. /* Inits Hyp-mode on all online CPUs */
  2066. static int __init init_hyp_mode(void)
  2067. {
  2068. u32 hyp_va_bits;
  2069. int cpu;
  2070. int err = -ENOMEM;
  2071. /*
  2072. * The protected Hyp-mode cannot be initialized if the memory pool
  2073. * allocation has failed.
  2074. */
  2075. if (is_protected_kvm_enabled() && !hyp_mem_base)
  2076. goto out_err;
  2077. /*
  2078. * Allocate Hyp PGD and setup Hyp identity mapping
  2079. */
  2080. err = kvm_mmu_init(&hyp_va_bits);
  2081. if (err)
  2082. goto out_err;
  2083. /*
  2084. * Allocate stack pages for Hypervisor-mode
  2085. */
  2086. for_each_possible_cpu(cpu) {
  2087. unsigned long stack_page;
  2088. stack_page = __get_free_page(GFP_KERNEL);
  2089. if (!stack_page) {
  2090. err = -ENOMEM;
  2091. goto out_err;
  2092. }
  2093. per_cpu(kvm_arm_hyp_stack_page, cpu) = stack_page;
  2094. }
  2095. /*
  2096. * Allocate and initialize pages for Hypervisor-mode percpu regions.
  2097. */
  2098. for_each_possible_cpu(cpu) {
  2099. struct page *page;
  2100. void *page_addr;
  2101. page = alloc_pages(GFP_KERNEL, nvhe_percpu_order());
  2102. if (!page) {
  2103. err = -ENOMEM;
  2104. goto out_err;
  2105. }
  2106. page_addr = page_address(page);
  2107. memcpy(page_addr, CHOOSE_NVHE_SYM(__per_cpu_start), nvhe_percpu_size());
  2108. kvm_nvhe_sym(kvm_arm_hyp_percpu_base)[cpu] = (unsigned long)page_addr;
  2109. }
  2110. /*
  2111. * Map the Hyp-code called directly from the host
  2112. */
  2113. err = create_hyp_mappings(kvm_ksym_ref(__hyp_text_start),
  2114. kvm_ksym_ref(__hyp_text_end), PAGE_HYP_EXEC);
  2115. if (err) {
  2116. kvm_err("Cannot map world-switch code\n");
  2117. goto out_err;
  2118. }
  2119. err = create_hyp_mappings(kvm_ksym_ref(__hyp_rodata_start),
  2120. kvm_ksym_ref(__hyp_rodata_end), PAGE_HYP_RO);
  2121. if (err) {
  2122. kvm_err("Cannot map .hyp.rodata section\n");
  2123. goto out_err;
  2124. }
  2125. err = create_hyp_mappings(kvm_ksym_ref(__start_rodata),
  2126. kvm_ksym_ref(__end_rodata), PAGE_HYP_RO);
  2127. if (err) {
  2128. kvm_err("Cannot map rodata section\n");
  2129. goto out_err;
  2130. }
  2131. /*
  2132. * .hyp.bss is guaranteed to be placed at the beginning of the .bss
  2133. * section thanks to an assertion in the linker script. Map it RW and
  2134. * the rest of .bss RO.
  2135. */
  2136. err = create_hyp_mappings(kvm_ksym_ref(__hyp_bss_start),
  2137. kvm_ksym_ref(__hyp_bss_end), PAGE_HYP);
  2138. if (err) {
  2139. kvm_err("Cannot map hyp bss section: %d\n", err);
  2140. goto out_err;
  2141. }
  2142. err = create_hyp_mappings(kvm_ksym_ref(__hyp_bss_end),
  2143. kvm_ksym_ref(__bss_stop), PAGE_HYP_RO);
  2144. if (err) {
  2145. kvm_err("Cannot map bss section\n");
  2146. goto out_err;
  2147. }
  2148. /*
  2149. * Map the Hyp stack pages
  2150. */
  2151. for_each_possible_cpu(cpu) {
  2152. struct kvm_nvhe_init_params *params = per_cpu_ptr_nvhe_sym(kvm_init_params, cpu);
  2153. char *stack_page = (char *)per_cpu(kvm_arm_hyp_stack_page, cpu);
  2154. err = create_hyp_stack(__pa(stack_page), &params->stack_hyp_va);
  2155. if (err) {
  2156. kvm_err("Cannot map hyp stack\n");
  2157. goto out_err;
  2158. }
  2159. /*
  2160. * Save the stack PA in nvhe_init_params. This will be needed
  2161. * to recreate the stack mapping in protected nVHE mode.
  2162. * __hyp_pa() won't do the right thing there, since the stack
  2163. * has been mapped in the flexible private VA space.
  2164. */
  2165. params->stack_pa = __pa(stack_page);
  2166. }
  2167. for_each_possible_cpu(cpu) {
  2168. char *percpu_begin = (char *)kvm_nvhe_sym(kvm_arm_hyp_percpu_base)[cpu];
  2169. char *percpu_end = percpu_begin + nvhe_percpu_size();
  2170. /* Map Hyp percpu pages */
  2171. err = create_hyp_mappings(percpu_begin, percpu_end, PAGE_HYP);
  2172. if (err) {
  2173. kvm_err("Cannot map hyp percpu region\n");
  2174. goto out_err;
  2175. }
  2176. /* Prepare the CPU initialization parameters */
  2177. cpu_prepare_hyp_mode(cpu, hyp_va_bits);
  2178. }
  2179. kvm_hyp_init_symbols();
  2180. if (is_protected_kvm_enabled()) {
  2181. if (IS_ENABLED(CONFIG_ARM64_PTR_AUTH_KERNEL) &&
  2182. cpus_have_final_cap(ARM64_HAS_ADDRESS_AUTH))
  2183. pkvm_hyp_init_ptrauth();
  2184. init_cpu_logical_map();
  2185. if (!init_psci_relay()) {
  2186. err = -ENODEV;
  2187. goto out_err;
  2188. }
  2189. err = init_pkvm_host_sve_state();
  2190. if (err)
  2191. goto out_err;
  2192. err = kvm_hyp_init_protection(hyp_va_bits);
  2193. if (err) {
  2194. kvm_err("Failed to init hyp memory protection\n");
  2195. goto out_err;
  2196. }
  2197. }
  2198. return 0;
  2199. out_err:
  2200. teardown_hyp_mode();
  2201. kvm_err("error initializing Hyp mode: %d\n", err);
  2202. return err;
  2203. }
  2204. struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr)
  2205. {
  2206. struct kvm_vcpu *vcpu = NULL;
  2207. struct kvm_mpidr_data *data;
  2208. unsigned long i;
  2209. mpidr &= MPIDR_HWID_BITMASK;
  2210. rcu_read_lock();
  2211. data = rcu_dereference(kvm->arch.mpidr_data);
  2212. if (data) {
  2213. u16 idx = kvm_mpidr_index(data, mpidr);
  2214. vcpu = kvm_get_vcpu(kvm, data->cmpidr_to_idx[idx]);
  2215. if (mpidr != kvm_vcpu_get_mpidr_aff(vcpu))
  2216. vcpu = NULL;
  2217. }
  2218. rcu_read_unlock();
  2219. if (vcpu)
  2220. return vcpu;
  2221. kvm_for_each_vcpu(i, vcpu, kvm) {
  2222. if (mpidr == kvm_vcpu_get_mpidr_aff(vcpu))
  2223. return vcpu;
  2224. }
  2225. return NULL;
  2226. }
  2227. bool kvm_arch_irqchip_in_kernel(struct kvm *kvm)
  2228. {
  2229. return irqchip_in_kernel(kvm);
  2230. }
  2231. bool kvm_arch_has_irq_bypass(void)
  2232. {
  2233. return true;
  2234. }
  2235. int kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *cons,
  2236. struct irq_bypass_producer *prod)
  2237. {
  2238. struct kvm_kernel_irqfd *irqfd =
  2239. container_of(cons, struct kvm_kernel_irqfd, consumer);
  2240. return kvm_vgic_v4_set_forwarding(irqfd->kvm, prod->irq,
  2241. &irqfd->irq_entry);
  2242. }
  2243. void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *cons,
  2244. struct irq_bypass_producer *prod)
  2245. {
  2246. struct kvm_kernel_irqfd *irqfd =
  2247. container_of(cons, struct kvm_kernel_irqfd, consumer);
  2248. kvm_vgic_v4_unset_forwarding(irqfd->kvm, prod->irq,
  2249. &irqfd->irq_entry);
  2250. }
  2251. void kvm_arch_irq_bypass_stop(struct irq_bypass_consumer *cons)
  2252. {
  2253. struct kvm_kernel_irqfd *irqfd =
  2254. container_of(cons, struct kvm_kernel_irqfd, consumer);
  2255. kvm_arm_halt_guest(irqfd->kvm);
  2256. }
  2257. void kvm_arch_irq_bypass_start(struct irq_bypass_consumer *cons)
  2258. {
  2259. struct kvm_kernel_irqfd *irqfd =
  2260. container_of(cons, struct kvm_kernel_irqfd, consumer);
  2261. kvm_arm_resume_guest(irqfd->kvm);
  2262. }
  2263. /* Initialize Hyp-mode and memory mappings on all CPUs */
  2264. static __init int kvm_arm_init(void)
  2265. {
  2266. int err;
  2267. bool in_hyp_mode;
  2268. if (!is_hyp_mode_available()) {
  2269. kvm_info("HYP mode not available\n");
  2270. return -ENODEV;
  2271. }
  2272. if (kvm_get_mode() == KVM_MODE_NONE) {
  2273. kvm_info("KVM disabled from command line\n");
  2274. return -ENODEV;
  2275. }
  2276. err = kvm_sys_reg_table_init();
  2277. if (err) {
  2278. kvm_info("Error initializing system register tables");
  2279. return err;
  2280. }
  2281. in_hyp_mode = is_kernel_in_hyp_mode();
  2282. if (cpus_have_final_cap(ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE) ||
  2283. cpus_have_final_cap(ARM64_WORKAROUND_1508412))
  2284. kvm_info("Guests without required CPU erratum workarounds can deadlock system!\n" \
  2285. "Only trusted guests should be used on this system.\n");
  2286. err = kvm_set_ipa_limit();
  2287. if (err)
  2288. return err;
  2289. err = kvm_arm_init_sve();
  2290. if (err)
  2291. return err;
  2292. err = kvm_arm_vmid_alloc_init();
  2293. if (err) {
  2294. kvm_err("Failed to initialize VMID allocator.\n");
  2295. return err;
  2296. }
  2297. if (!in_hyp_mode) {
  2298. err = init_hyp_mode();
  2299. if (err)
  2300. goto out_err;
  2301. }
  2302. err = kvm_init_vector_slots();
  2303. if (err) {
  2304. kvm_err("Cannot initialise vector slots\n");
  2305. goto out_hyp;
  2306. }
  2307. err = init_subsystems();
  2308. if (err)
  2309. goto out_hyp;
  2310. kvm_info("%s%sVHE mode initialized successfully\n",
  2311. in_hyp_mode ? "" : (is_protected_kvm_enabled() ?
  2312. "Protected " : "Hyp "),
  2313. in_hyp_mode ? "" : (cpus_have_final_cap(ARM64_KVM_HVHE) ?
  2314. "h" : "n"));
  2315. /*
  2316. * FIXME: Do something reasonable if kvm_init() fails after pKVM
  2317. * hypervisor protection is finalized.
  2318. */
  2319. err = kvm_init(sizeof(struct kvm_vcpu), 0, THIS_MODULE);
  2320. if (err)
  2321. goto out_subs;
  2322. /*
  2323. * This should be called after initialization is done and failure isn't
  2324. * possible anymore.
  2325. */
  2326. if (!in_hyp_mode)
  2327. finalize_init_hyp_mode();
  2328. kvm_arm_initialised = true;
  2329. return 0;
  2330. out_subs:
  2331. teardown_subsystems();
  2332. out_hyp:
  2333. if (!in_hyp_mode)
  2334. teardown_hyp_mode();
  2335. out_err:
  2336. kvm_arm_vmid_alloc_free();
  2337. return err;
  2338. }
  2339. static int __init early_kvm_mode_cfg(char *arg)
  2340. {
  2341. if (!arg)
  2342. return -EINVAL;
  2343. if (strcmp(arg, "none") == 0) {
  2344. kvm_mode = KVM_MODE_NONE;
  2345. return 0;
  2346. }
  2347. if (!is_hyp_mode_available()) {
  2348. pr_warn_once("KVM is not available. Ignoring kvm-arm.mode\n");
  2349. return 0;
  2350. }
  2351. if (strcmp(arg, "protected") == 0) {
  2352. if (!is_kernel_in_hyp_mode())
  2353. kvm_mode = KVM_MODE_PROTECTED;
  2354. else
  2355. pr_warn_once("Protected KVM not available with VHE\n");
  2356. return 0;
  2357. }
  2358. if (strcmp(arg, "nvhe") == 0 && !WARN_ON(is_kernel_in_hyp_mode())) {
  2359. kvm_mode = KVM_MODE_DEFAULT;
  2360. return 0;
  2361. }
  2362. if (strcmp(arg, "nested") == 0 && !WARN_ON(!is_kernel_in_hyp_mode())) {
  2363. kvm_mode = KVM_MODE_NV;
  2364. return 0;
  2365. }
  2366. return -EINVAL;
  2367. }
  2368. early_param("kvm-arm.mode", early_kvm_mode_cfg);
  2369. static int __init early_kvm_wfx_trap_policy_cfg(char *arg, enum kvm_wfx_trap_policy *p)
  2370. {
  2371. if (!arg)
  2372. return -EINVAL;
  2373. if (strcmp(arg, "trap") == 0) {
  2374. *p = KVM_WFX_TRAP;
  2375. return 0;
  2376. }
  2377. if (strcmp(arg, "notrap") == 0) {
  2378. *p = KVM_WFX_NOTRAP;
  2379. return 0;
  2380. }
  2381. return -EINVAL;
  2382. }
  2383. static int __init early_kvm_wfi_trap_policy_cfg(char *arg)
  2384. {
  2385. return early_kvm_wfx_trap_policy_cfg(arg, &kvm_wfi_trap_policy);
  2386. }
  2387. early_param("kvm-arm.wfi_trap_policy", early_kvm_wfi_trap_policy_cfg);
  2388. static int __init early_kvm_wfe_trap_policy_cfg(char *arg)
  2389. {
  2390. return early_kvm_wfx_trap_policy_cfg(arg, &kvm_wfe_trap_policy);
  2391. }
  2392. early_param("kvm-arm.wfe_trap_policy", early_kvm_wfe_trap_policy_cfg);
  2393. enum kvm_mode kvm_get_mode(void)
  2394. {
  2395. return kvm_mode;
  2396. }
  2397. module_init(kvm_arm_init);