nested.c 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2017 - Columbia University and Linaro Ltd.
  4. * Author: Jintack Lim <jintack.lim@linaro.org>
  5. */
  6. #include <linux/bitfield.h>
  7. #include <linux/kvm.h>
  8. #include <linux/kvm_host.h>
  9. #include <asm/kvm_arm.h>
  10. #include <asm/kvm_emulate.h>
  11. #include <asm/kvm_mmu.h>
  12. #include <asm/kvm_nested.h>
  13. #include <asm/sysreg.h>
  14. #include "sys_regs.h"
  15. /* Protection against the sysreg repainting madness... */
  16. #define NV_FTR(r, f) ID_AA64##r##_EL1_##f
  17. /*
  18. * Ratio of live shadow S2 MMU per vcpu. This is a trade-off between
  19. * memory usage and potential number of different sets of S2 PTs in
  20. * the guests. Running out of S2 MMUs only affects performance (we
  21. * will invalidate them more often).
  22. */
  23. #define S2_MMU_PER_VCPU 2
  24. void kvm_init_nested(struct kvm *kvm)
  25. {
  26. kvm->arch.nested_mmus = NULL;
  27. kvm->arch.nested_mmus_size = 0;
  28. }
  29. static int init_nested_s2_mmu(struct kvm *kvm, struct kvm_s2_mmu *mmu)
  30. {
  31. /*
  32. * We only initialise the IPA range on the canonical MMU, which
  33. * defines the contract between KVM and userspace on where the
  34. * "hardware" is in the IPA space. This affects the validity of MMIO
  35. * exits forwarded to userspace, for example.
  36. *
  37. * For nested S2s, we use the PARange as exposed to the guest, as it
  38. * is allowed to use it at will to expose whatever memory map it
  39. * wants to its own guests as it would be on real HW.
  40. */
  41. return kvm_init_stage2_mmu(kvm, mmu, kvm_get_pa_bits(kvm));
  42. }
  43. int kvm_vcpu_init_nested(struct kvm_vcpu *vcpu)
  44. {
  45. struct kvm *kvm = vcpu->kvm;
  46. struct kvm_s2_mmu *tmp;
  47. int num_mmus, ret = 0;
  48. /*
  49. * Let's treat memory allocation failures as benign: If we fail to
  50. * allocate anything, return an error and keep the allocated array
  51. * alive. Userspace may try to recover by intializing the vcpu
  52. * again, and there is no reason to affect the whole VM for this.
  53. */
  54. num_mmus = atomic_read(&kvm->online_vcpus) * S2_MMU_PER_VCPU;
  55. tmp = kvrealloc(kvm->arch.nested_mmus,
  56. size_mul(sizeof(*kvm->arch.nested_mmus), num_mmus),
  57. GFP_KERNEL_ACCOUNT | __GFP_ZERO);
  58. if (!tmp)
  59. return -ENOMEM;
  60. /*
  61. * If we went through a realocation, adjust the MMU back-pointers in
  62. * the previously initialised kvm_pgtable structures.
  63. */
  64. if (kvm->arch.nested_mmus != tmp)
  65. for (int i = 0; i < kvm->arch.nested_mmus_size; i++)
  66. tmp[i].pgt->mmu = &tmp[i];
  67. for (int i = kvm->arch.nested_mmus_size; !ret && i < num_mmus; i++)
  68. ret = init_nested_s2_mmu(kvm, &tmp[i]);
  69. if (ret) {
  70. for (int i = kvm->arch.nested_mmus_size; i < num_mmus; i++)
  71. kvm_free_stage2_pgd(&tmp[i]);
  72. return ret;
  73. }
  74. kvm->arch.nested_mmus_size = num_mmus;
  75. kvm->arch.nested_mmus = tmp;
  76. return 0;
  77. }
  78. struct s2_walk_info {
  79. int (*read_desc)(phys_addr_t pa, u64 *desc, void *data);
  80. void *data;
  81. u64 baddr;
  82. unsigned int max_oa_bits;
  83. unsigned int pgshift;
  84. unsigned int sl;
  85. unsigned int t0sz;
  86. bool be;
  87. };
  88. static u32 compute_fsc(int level, u32 fsc)
  89. {
  90. return fsc | (level & 0x3);
  91. }
  92. static int esr_s2_fault(struct kvm_vcpu *vcpu, int level, u32 fsc)
  93. {
  94. u32 esr;
  95. esr = kvm_vcpu_get_esr(vcpu) & ~ESR_ELx_FSC;
  96. esr |= compute_fsc(level, fsc);
  97. return esr;
  98. }
  99. static int get_ia_size(struct s2_walk_info *wi)
  100. {
  101. return 64 - wi->t0sz;
  102. }
  103. static int check_base_s2_limits(struct s2_walk_info *wi,
  104. int level, int input_size, int stride)
  105. {
  106. int start_size, ia_size;
  107. ia_size = get_ia_size(wi);
  108. /* Check translation limits */
  109. switch (BIT(wi->pgshift)) {
  110. case SZ_64K:
  111. if (level == 0 || (level == 1 && ia_size <= 42))
  112. return -EFAULT;
  113. break;
  114. case SZ_16K:
  115. if (level == 0 || (level == 1 && ia_size <= 40))
  116. return -EFAULT;
  117. break;
  118. case SZ_4K:
  119. if (level < 0 || (level == 0 && ia_size <= 42))
  120. return -EFAULT;
  121. break;
  122. }
  123. /* Check input size limits */
  124. if (input_size > ia_size)
  125. return -EFAULT;
  126. /* Check number of entries in starting level table */
  127. start_size = input_size - ((3 - level) * stride + wi->pgshift);
  128. if (start_size < 1 || start_size > stride + 4)
  129. return -EFAULT;
  130. return 0;
  131. }
  132. /* Check if output is within boundaries */
  133. static int check_output_size(struct s2_walk_info *wi, phys_addr_t output)
  134. {
  135. unsigned int output_size = wi->max_oa_bits;
  136. if (output_size != 48 && (output & GENMASK_ULL(47, output_size)))
  137. return -1;
  138. return 0;
  139. }
  140. /*
  141. * This is essentially a C-version of the pseudo code from the ARM ARM
  142. * AArch64.TranslationTableWalk function. I strongly recommend looking at
  143. * that pseudocode in trying to understand this.
  144. *
  145. * Must be called with the kvm->srcu read lock held
  146. */
  147. static int walk_nested_s2_pgd(phys_addr_t ipa,
  148. struct s2_walk_info *wi, struct kvm_s2_trans *out)
  149. {
  150. int first_block_level, level, stride, input_size, base_lower_bound;
  151. phys_addr_t base_addr;
  152. unsigned int addr_top, addr_bottom;
  153. u64 desc; /* page table entry */
  154. int ret;
  155. phys_addr_t paddr;
  156. switch (BIT(wi->pgshift)) {
  157. default:
  158. case SZ_64K:
  159. case SZ_16K:
  160. level = 3 - wi->sl;
  161. first_block_level = 2;
  162. break;
  163. case SZ_4K:
  164. level = 2 - wi->sl;
  165. first_block_level = 1;
  166. break;
  167. }
  168. stride = wi->pgshift - 3;
  169. input_size = get_ia_size(wi);
  170. if (input_size > 48 || input_size < 25)
  171. return -EFAULT;
  172. ret = check_base_s2_limits(wi, level, input_size, stride);
  173. if (WARN_ON(ret))
  174. return ret;
  175. base_lower_bound = 3 + input_size - ((3 - level) * stride +
  176. wi->pgshift);
  177. base_addr = wi->baddr & GENMASK_ULL(47, base_lower_bound);
  178. if (check_output_size(wi, base_addr)) {
  179. out->esr = compute_fsc(level, ESR_ELx_FSC_ADDRSZ);
  180. return 1;
  181. }
  182. addr_top = input_size - 1;
  183. while (1) {
  184. phys_addr_t index;
  185. addr_bottom = (3 - level) * stride + wi->pgshift;
  186. index = (ipa & GENMASK_ULL(addr_top, addr_bottom))
  187. >> (addr_bottom - 3);
  188. paddr = base_addr | index;
  189. ret = wi->read_desc(paddr, &desc, wi->data);
  190. if (ret < 0)
  191. return ret;
  192. /*
  193. * Handle reversedescriptors if endianness differs between the
  194. * host and the guest hypervisor.
  195. */
  196. if (wi->be)
  197. desc = be64_to_cpu((__force __be64)desc);
  198. else
  199. desc = le64_to_cpu((__force __le64)desc);
  200. /* Check for valid descriptor at this point */
  201. if (!(desc & 1) || ((desc & 3) == 1 && level == 3)) {
  202. out->esr = compute_fsc(level, ESR_ELx_FSC_FAULT);
  203. out->desc = desc;
  204. return 1;
  205. }
  206. /* We're at the final level or block translation level */
  207. if ((desc & 3) == 1 || level == 3)
  208. break;
  209. if (check_output_size(wi, desc)) {
  210. out->esr = compute_fsc(level, ESR_ELx_FSC_ADDRSZ);
  211. out->desc = desc;
  212. return 1;
  213. }
  214. base_addr = desc & GENMASK_ULL(47, wi->pgshift);
  215. level += 1;
  216. addr_top = addr_bottom - 1;
  217. }
  218. if (level < first_block_level) {
  219. out->esr = compute_fsc(level, ESR_ELx_FSC_FAULT);
  220. out->desc = desc;
  221. return 1;
  222. }
  223. if (check_output_size(wi, desc)) {
  224. out->esr = compute_fsc(level, ESR_ELx_FSC_ADDRSZ);
  225. out->desc = desc;
  226. return 1;
  227. }
  228. if (!(desc & BIT(10))) {
  229. out->esr = compute_fsc(level, ESR_ELx_FSC_ACCESS);
  230. out->desc = desc;
  231. return 1;
  232. }
  233. addr_bottom += contiguous_bit_shift(desc, wi, level);
  234. /* Calculate and return the result */
  235. paddr = (desc & GENMASK_ULL(47, addr_bottom)) |
  236. (ipa & GENMASK_ULL(addr_bottom - 1, 0));
  237. out->output = paddr;
  238. out->block_size = 1UL << ((3 - level) * stride + wi->pgshift);
  239. out->readable = desc & (0b01 << 6);
  240. out->writable = desc & (0b10 << 6);
  241. out->level = level;
  242. out->desc = desc;
  243. return 0;
  244. }
  245. static int read_guest_s2_desc(phys_addr_t pa, u64 *desc, void *data)
  246. {
  247. struct kvm_vcpu *vcpu = data;
  248. return kvm_read_guest(vcpu->kvm, pa, desc, sizeof(*desc));
  249. }
  250. static void vtcr_to_walk_info(u64 vtcr, struct s2_walk_info *wi)
  251. {
  252. wi->t0sz = vtcr & TCR_EL2_T0SZ_MASK;
  253. switch (vtcr & VTCR_EL2_TG0_MASK) {
  254. case VTCR_EL2_TG0_4K:
  255. wi->pgshift = 12; break;
  256. case VTCR_EL2_TG0_16K:
  257. wi->pgshift = 14; break;
  258. case VTCR_EL2_TG0_64K:
  259. default: /* IMPDEF: treat any other value as 64k */
  260. wi->pgshift = 16; break;
  261. }
  262. wi->sl = FIELD_GET(VTCR_EL2_SL0_MASK, vtcr);
  263. /* Global limit for now, should eventually be per-VM */
  264. wi->max_oa_bits = min(get_kvm_ipa_limit(),
  265. ps_to_output_size(FIELD_GET(VTCR_EL2_PS_MASK, vtcr)));
  266. }
  267. int kvm_walk_nested_s2(struct kvm_vcpu *vcpu, phys_addr_t gipa,
  268. struct kvm_s2_trans *result)
  269. {
  270. u64 vtcr = vcpu_read_sys_reg(vcpu, VTCR_EL2);
  271. struct s2_walk_info wi;
  272. int ret;
  273. result->esr = 0;
  274. if (!vcpu_has_nv(vcpu))
  275. return 0;
  276. wi.read_desc = read_guest_s2_desc;
  277. wi.data = vcpu;
  278. wi.baddr = vcpu_read_sys_reg(vcpu, VTTBR_EL2);
  279. vtcr_to_walk_info(vtcr, &wi);
  280. wi.be = vcpu_read_sys_reg(vcpu, SCTLR_EL2) & SCTLR_ELx_EE;
  281. ret = walk_nested_s2_pgd(gipa, &wi, result);
  282. if (ret)
  283. result->esr |= (kvm_vcpu_get_esr(vcpu) & ~ESR_ELx_FSC);
  284. return ret;
  285. }
  286. static unsigned int ttl_to_size(u8 ttl)
  287. {
  288. int level = ttl & 3;
  289. int gran = (ttl >> 2) & 3;
  290. unsigned int max_size = 0;
  291. switch (gran) {
  292. case TLBI_TTL_TG_4K:
  293. switch (level) {
  294. case 0:
  295. break;
  296. case 1:
  297. max_size = SZ_1G;
  298. break;
  299. case 2:
  300. max_size = SZ_2M;
  301. break;
  302. case 3:
  303. max_size = SZ_4K;
  304. break;
  305. }
  306. break;
  307. case TLBI_TTL_TG_16K:
  308. switch (level) {
  309. case 0:
  310. case 1:
  311. break;
  312. case 2:
  313. max_size = SZ_32M;
  314. break;
  315. case 3:
  316. max_size = SZ_16K;
  317. break;
  318. }
  319. break;
  320. case TLBI_TTL_TG_64K:
  321. switch (level) {
  322. case 0:
  323. case 1:
  324. /* No 52bit IPA support */
  325. break;
  326. case 2:
  327. max_size = SZ_512M;
  328. break;
  329. case 3:
  330. max_size = SZ_64K;
  331. break;
  332. }
  333. break;
  334. default: /* No size information */
  335. break;
  336. }
  337. return max_size;
  338. }
  339. /*
  340. * Compute the equivalent of the TTL field by parsing the shadow PT. The
  341. * granule size is extracted from the cached VTCR_EL2.TG0 while the level is
  342. * retrieved from first entry carrying the level as a tag.
  343. */
  344. static u8 get_guest_mapping_ttl(struct kvm_s2_mmu *mmu, u64 addr)
  345. {
  346. u64 tmp, sz = 0, vtcr = mmu->tlb_vtcr;
  347. kvm_pte_t pte;
  348. u8 ttl, level;
  349. lockdep_assert_held_write(&kvm_s2_mmu_to_kvm(mmu)->mmu_lock);
  350. switch (vtcr & VTCR_EL2_TG0_MASK) {
  351. case VTCR_EL2_TG0_4K:
  352. ttl = (TLBI_TTL_TG_4K << 2);
  353. break;
  354. case VTCR_EL2_TG0_16K:
  355. ttl = (TLBI_TTL_TG_16K << 2);
  356. break;
  357. case VTCR_EL2_TG0_64K:
  358. default: /* IMPDEF: treat any other value as 64k */
  359. ttl = (TLBI_TTL_TG_64K << 2);
  360. break;
  361. }
  362. tmp = addr;
  363. again:
  364. /* Iteratively compute the block sizes for a particular granule size */
  365. switch (vtcr & VTCR_EL2_TG0_MASK) {
  366. case VTCR_EL2_TG0_4K:
  367. if (sz < SZ_4K) sz = SZ_4K;
  368. else if (sz < SZ_2M) sz = SZ_2M;
  369. else if (sz < SZ_1G) sz = SZ_1G;
  370. else sz = 0;
  371. break;
  372. case VTCR_EL2_TG0_16K:
  373. if (sz < SZ_16K) sz = SZ_16K;
  374. else if (sz < SZ_32M) sz = SZ_32M;
  375. else sz = 0;
  376. break;
  377. case VTCR_EL2_TG0_64K:
  378. default: /* IMPDEF: treat any other value as 64k */
  379. if (sz < SZ_64K) sz = SZ_64K;
  380. else if (sz < SZ_512M) sz = SZ_512M;
  381. else sz = 0;
  382. break;
  383. }
  384. if (sz == 0)
  385. return 0;
  386. tmp &= ~(sz - 1);
  387. if (kvm_pgtable_get_leaf(mmu->pgt, tmp, &pte, NULL))
  388. goto again;
  389. if (!(pte & PTE_VALID))
  390. goto again;
  391. level = FIELD_GET(KVM_NV_GUEST_MAP_SZ, pte);
  392. if (!level)
  393. goto again;
  394. ttl |= level;
  395. /*
  396. * We now have found some level information in the shadow S2. Check
  397. * that the resulting range is actually including the original IPA.
  398. */
  399. sz = ttl_to_size(ttl);
  400. if (addr < (tmp + sz))
  401. return ttl;
  402. return 0;
  403. }
  404. unsigned long compute_tlb_inval_range(struct kvm_s2_mmu *mmu, u64 val)
  405. {
  406. struct kvm *kvm = kvm_s2_mmu_to_kvm(mmu);
  407. unsigned long max_size;
  408. u8 ttl;
  409. ttl = FIELD_GET(TLBI_TTL_MASK, val);
  410. if (!ttl || !kvm_has_feat(kvm, ID_AA64MMFR2_EL1, TTL, IMP)) {
  411. /* No TTL, check the shadow S2 for a hint */
  412. u64 addr = (val & GENMASK_ULL(35, 0)) << 12;
  413. ttl = get_guest_mapping_ttl(mmu, addr);
  414. }
  415. max_size = ttl_to_size(ttl);
  416. if (!max_size) {
  417. /* Compute the maximum extent of the invalidation */
  418. switch (mmu->tlb_vtcr & VTCR_EL2_TG0_MASK) {
  419. case VTCR_EL2_TG0_4K:
  420. max_size = SZ_1G;
  421. break;
  422. case VTCR_EL2_TG0_16K:
  423. max_size = SZ_32M;
  424. break;
  425. case VTCR_EL2_TG0_64K:
  426. default: /* IMPDEF: treat any other value as 64k */
  427. /*
  428. * No, we do not support 52bit IPA in nested yet. Once
  429. * we do, this should be 4TB.
  430. */
  431. max_size = SZ_512M;
  432. break;
  433. }
  434. }
  435. WARN_ON(!max_size);
  436. return max_size;
  437. }
  438. /*
  439. * We can have multiple *different* MMU contexts with the same VMID:
  440. *
  441. * - S2 being enabled or not, hence differing by the HCR_EL2.VM bit
  442. *
  443. * - Multiple vcpus using private S2s (huh huh...), hence differing by the
  444. * VBBTR_EL2.BADDR address
  445. *
  446. * - A combination of the above...
  447. *
  448. * We can always identify which MMU context to pick at run-time. However,
  449. * TLB invalidation involving a VMID must take action on all the TLBs using
  450. * this particular VMID. This translates into applying the same invalidation
  451. * operation to all the contexts that are using this VMID. Moar phun!
  452. */
  453. void kvm_s2_mmu_iterate_by_vmid(struct kvm *kvm, u16 vmid,
  454. const union tlbi_info *info,
  455. void (*tlbi_callback)(struct kvm_s2_mmu *,
  456. const union tlbi_info *))
  457. {
  458. write_lock(&kvm->mmu_lock);
  459. for (int i = 0; i < kvm->arch.nested_mmus_size; i++) {
  460. struct kvm_s2_mmu *mmu = &kvm->arch.nested_mmus[i];
  461. if (!kvm_s2_mmu_valid(mmu))
  462. continue;
  463. if (vmid == get_vmid(mmu->tlb_vttbr))
  464. tlbi_callback(mmu, info);
  465. }
  466. write_unlock(&kvm->mmu_lock);
  467. }
  468. struct kvm_s2_mmu *lookup_s2_mmu(struct kvm_vcpu *vcpu)
  469. {
  470. struct kvm *kvm = vcpu->kvm;
  471. bool nested_stage2_enabled;
  472. u64 vttbr, vtcr, hcr;
  473. lockdep_assert_held_write(&kvm->mmu_lock);
  474. vttbr = vcpu_read_sys_reg(vcpu, VTTBR_EL2);
  475. vtcr = vcpu_read_sys_reg(vcpu, VTCR_EL2);
  476. hcr = vcpu_read_sys_reg(vcpu, HCR_EL2);
  477. nested_stage2_enabled = hcr & HCR_VM;
  478. /* Don't consider the CnP bit for the vttbr match */
  479. vttbr &= ~VTTBR_CNP_BIT;
  480. /*
  481. * Two possibilities when looking up a S2 MMU context:
  482. *
  483. * - either S2 is enabled in the guest, and we need a context that is
  484. * S2-enabled and matches the full VTTBR (VMID+BADDR) and VTCR,
  485. * which makes it safe from a TLB conflict perspective (a broken
  486. * guest won't be able to generate them),
  487. *
  488. * - or S2 is disabled, and we need a context that is S2-disabled
  489. * and matches the VMID only, as all TLBs are tagged by VMID even
  490. * if S2 translation is disabled.
  491. */
  492. for (int i = 0; i < kvm->arch.nested_mmus_size; i++) {
  493. struct kvm_s2_mmu *mmu = &kvm->arch.nested_mmus[i];
  494. if (!kvm_s2_mmu_valid(mmu))
  495. continue;
  496. if (nested_stage2_enabled &&
  497. mmu->nested_stage2_enabled &&
  498. vttbr == mmu->tlb_vttbr &&
  499. vtcr == mmu->tlb_vtcr)
  500. return mmu;
  501. if (!nested_stage2_enabled &&
  502. !mmu->nested_stage2_enabled &&
  503. get_vmid(vttbr) == get_vmid(mmu->tlb_vttbr))
  504. return mmu;
  505. }
  506. return NULL;
  507. }
  508. static struct kvm_s2_mmu *get_s2_mmu_nested(struct kvm_vcpu *vcpu)
  509. {
  510. struct kvm *kvm = vcpu->kvm;
  511. struct kvm_s2_mmu *s2_mmu;
  512. int i;
  513. lockdep_assert_held_write(&vcpu->kvm->mmu_lock);
  514. s2_mmu = lookup_s2_mmu(vcpu);
  515. if (s2_mmu)
  516. goto out;
  517. /*
  518. * Make sure we don't always search from the same point, or we
  519. * will always reuse a potentially active context, leaving
  520. * free contexts unused.
  521. */
  522. for (i = kvm->arch.nested_mmus_next;
  523. i < (kvm->arch.nested_mmus_size + kvm->arch.nested_mmus_next);
  524. i++) {
  525. s2_mmu = &kvm->arch.nested_mmus[i % kvm->arch.nested_mmus_size];
  526. if (atomic_read(&s2_mmu->refcnt) == 0)
  527. break;
  528. }
  529. BUG_ON(atomic_read(&s2_mmu->refcnt)); /* We have struct MMUs to spare */
  530. /* Set the scene for the next search */
  531. kvm->arch.nested_mmus_next = (i + 1) % kvm->arch.nested_mmus_size;
  532. /* Make sure we don't forget to do the laundry */
  533. if (kvm_s2_mmu_valid(s2_mmu))
  534. s2_mmu->pending_unmap = true;
  535. /*
  536. * The virtual VMID (modulo CnP) will be used as a key when matching
  537. * an existing kvm_s2_mmu.
  538. *
  539. * We cache VTCR at allocation time, once and for all. It'd be great
  540. * if the guest didn't screw that one up, as this is not very
  541. * forgiving...
  542. */
  543. s2_mmu->tlb_vttbr = vcpu_read_sys_reg(vcpu, VTTBR_EL2) & ~VTTBR_CNP_BIT;
  544. s2_mmu->tlb_vtcr = vcpu_read_sys_reg(vcpu, VTCR_EL2);
  545. s2_mmu->nested_stage2_enabled = vcpu_read_sys_reg(vcpu, HCR_EL2) & HCR_VM;
  546. out:
  547. atomic_inc(&s2_mmu->refcnt);
  548. /*
  549. * Set the vCPU request to perform an unmap, even if the pending unmap
  550. * originates from another vCPU. This guarantees that the MMU has been
  551. * completely unmapped before any vCPU actually uses it, and allows
  552. * multiple vCPUs to lend a hand with completing the unmap.
  553. */
  554. if (s2_mmu->pending_unmap)
  555. kvm_make_request(KVM_REQ_NESTED_S2_UNMAP, vcpu);
  556. return s2_mmu;
  557. }
  558. void kvm_init_nested_s2_mmu(struct kvm_s2_mmu *mmu)
  559. {
  560. /* CnP being set denotes an invalid entry */
  561. mmu->tlb_vttbr = VTTBR_CNP_BIT;
  562. mmu->nested_stage2_enabled = false;
  563. atomic_set(&mmu->refcnt, 0);
  564. }
  565. void kvm_vcpu_load_hw_mmu(struct kvm_vcpu *vcpu)
  566. {
  567. /*
  568. * The vCPU kept its reference on the MMU after the last put, keep
  569. * rolling with it.
  570. */
  571. if (vcpu->arch.hw_mmu)
  572. return;
  573. if (is_hyp_ctxt(vcpu)) {
  574. vcpu->arch.hw_mmu = &vcpu->kvm->arch.mmu;
  575. } else {
  576. write_lock(&vcpu->kvm->mmu_lock);
  577. vcpu->arch.hw_mmu = get_s2_mmu_nested(vcpu);
  578. write_unlock(&vcpu->kvm->mmu_lock);
  579. }
  580. }
  581. void kvm_vcpu_put_hw_mmu(struct kvm_vcpu *vcpu)
  582. {
  583. /*
  584. * Keep a reference on the associated stage-2 MMU if the vCPU is
  585. * scheduling out and not in WFI emulation, suggesting it is likely to
  586. * reuse the MMU sometime soon.
  587. */
  588. if (vcpu->scheduled_out && !vcpu_get_flag(vcpu, IN_WFI))
  589. return;
  590. if (kvm_is_nested_s2_mmu(vcpu->kvm, vcpu->arch.hw_mmu))
  591. atomic_dec(&vcpu->arch.hw_mmu->refcnt);
  592. vcpu->arch.hw_mmu = NULL;
  593. }
  594. /*
  595. * Returns non-zero if permission fault is handled by injecting it to the next
  596. * level hypervisor.
  597. */
  598. int kvm_s2_handle_perm_fault(struct kvm_vcpu *vcpu, struct kvm_s2_trans *trans)
  599. {
  600. bool forward_fault = false;
  601. trans->esr = 0;
  602. if (!kvm_vcpu_trap_is_permission_fault(vcpu))
  603. return 0;
  604. if (kvm_vcpu_trap_is_iabt(vcpu)) {
  605. forward_fault = !kvm_s2_trans_executable(trans);
  606. } else {
  607. bool write_fault = kvm_is_write_fault(vcpu);
  608. forward_fault = ((write_fault && !trans->writable) ||
  609. (!write_fault && !trans->readable));
  610. }
  611. if (forward_fault)
  612. trans->esr = esr_s2_fault(vcpu, trans->level, ESR_ELx_FSC_PERM);
  613. return forward_fault;
  614. }
  615. int kvm_inject_s2_fault(struct kvm_vcpu *vcpu, u64 esr_el2)
  616. {
  617. vcpu_write_sys_reg(vcpu, vcpu->arch.fault.far_el2, FAR_EL2);
  618. vcpu_write_sys_reg(vcpu, vcpu->arch.fault.hpfar_el2, HPFAR_EL2);
  619. return kvm_inject_nested_sync(vcpu, esr_el2);
  620. }
  621. void kvm_nested_s2_wp(struct kvm *kvm)
  622. {
  623. int i;
  624. lockdep_assert_held_write(&kvm->mmu_lock);
  625. for (i = 0; i < kvm->arch.nested_mmus_size; i++) {
  626. struct kvm_s2_mmu *mmu = &kvm->arch.nested_mmus[i];
  627. if (kvm_s2_mmu_valid(mmu))
  628. kvm_stage2_wp_range(mmu, 0, kvm_phys_size(mmu));
  629. }
  630. }
  631. void kvm_nested_s2_unmap(struct kvm *kvm, bool may_block)
  632. {
  633. int i;
  634. lockdep_assert_held_write(&kvm->mmu_lock);
  635. for (i = 0; i < kvm->arch.nested_mmus_size; i++) {
  636. struct kvm_s2_mmu *mmu = &kvm->arch.nested_mmus[i];
  637. if (kvm_s2_mmu_valid(mmu))
  638. kvm_stage2_unmap_range(mmu, 0, kvm_phys_size(mmu), may_block);
  639. }
  640. }
  641. void kvm_nested_s2_flush(struct kvm *kvm)
  642. {
  643. int i;
  644. lockdep_assert_held_write(&kvm->mmu_lock);
  645. for (i = 0; i < kvm->arch.nested_mmus_size; i++) {
  646. struct kvm_s2_mmu *mmu = &kvm->arch.nested_mmus[i];
  647. if (kvm_s2_mmu_valid(mmu))
  648. kvm_stage2_flush_range(mmu, 0, kvm_phys_size(mmu));
  649. }
  650. }
  651. void kvm_arch_flush_shadow_all(struct kvm *kvm)
  652. {
  653. int i;
  654. for (i = 0; i < kvm->arch.nested_mmus_size; i++) {
  655. struct kvm_s2_mmu *mmu = &kvm->arch.nested_mmus[i];
  656. if (!WARN_ON(atomic_read(&mmu->refcnt)))
  657. kvm_free_stage2_pgd(mmu);
  658. }
  659. kvfree(kvm->arch.nested_mmus);
  660. kvm->arch.nested_mmus = NULL;
  661. kvm->arch.nested_mmus_size = 0;
  662. kvm_uninit_stage2_mmu(kvm);
  663. }
  664. /*
  665. * Our emulated CPU doesn't support all the possible features. For the
  666. * sake of simplicity (and probably mental sanity), wipe out a number
  667. * of feature bits we don't intend to support for the time being.
  668. * This list should get updated as new features get added to the NV
  669. * support, and new extension to the architecture.
  670. */
  671. static void limit_nv_id_regs(struct kvm *kvm)
  672. {
  673. u64 val, tmp;
  674. /* Support everything but TME */
  675. val = kvm_read_vm_id_reg(kvm, SYS_ID_AA64ISAR0_EL1);
  676. val &= ~NV_FTR(ISAR0, TME);
  677. kvm_set_vm_id_reg(kvm, SYS_ID_AA64ISAR0_EL1, val);
  678. /* Support everything but Spec Invalidation and LS64 */
  679. val = kvm_read_vm_id_reg(kvm, SYS_ID_AA64ISAR1_EL1);
  680. val &= ~(NV_FTR(ISAR1, LS64) |
  681. NV_FTR(ISAR1, SPECRES));
  682. kvm_set_vm_id_reg(kvm, SYS_ID_AA64ISAR1_EL1, val);
  683. /* No AMU, MPAM, S-EL2, or RAS */
  684. val = kvm_read_vm_id_reg(kvm, SYS_ID_AA64PFR0_EL1);
  685. val &= ~(GENMASK_ULL(55, 52) |
  686. NV_FTR(PFR0, AMU) |
  687. NV_FTR(PFR0, MPAM) |
  688. NV_FTR(PFR0, SEL2) |
  689. NV_FTR(PFR0, RAS) |
  690. NV_FTR(PFR0, EL3) |
  691. NV_FTR(PFR0, EL2) |
  692. NV_FTR(PFR0, EL1));
  693. /* 64bit EL1/EL2/EL3 only */
  694. val |= FIELD_PREP(NV_FTR(PFR0, EL1), 0b0001);
  695. val |= FIELD_PREP(NV_FTR(PFR0, EL2), 0b0001);
  696. val |= FIELD_PREP(NV_FTR(PFR0, EL3), 0b0001);
  697. kvm_set_vm_id_reg(kvm, SYS_ID_AA64PFR0_EL1, val);
  698. /* Only support BTI, SSBS, CSV2_frac */
  699. val = kvm_read_vm_id_reg(kvm, SYS_ID_AA64PFR1_EL1);
  700. val &= (NV_FTR(PFR1, BT) |
  701. NV_FTR(PFR1, SSBS) |
  702. NV_FTR(PFR1, CSV2_frac));
  703. kvm_set_vm_id_reg(kvm, SYS_ID_AA64PFR1_EL1, val);
  704. /* Hide ECV, ExS, Secure Memory */
  705. val = kvm_read_vm_id_reg(kvm, SYS_ID_AA64MMFR0_EL1);
  706. val &= ~(NV_FTR(MMFR0, ECV) |
  707. NV_FTR(MMFR0, EXS) |
  708. NV_FTR(MMFR0, TGRAN4_2) |
  709. NV_FTR(MMFR0, TGRAN16_2) |
  710. NV_FTR(MMFR0, TGRAN64_2) |
  711. NV_FTR(MMFR0, SNSMEM));
  712. /* Disallow unsupported S2 page sizes */
  713. switch (PAGE_SIZE) {
  714. case SZ_64K:
  715. val |= FIELD_PREP(NV_FTR(MMFR0, TGRAN16_2), 0b0001);
  716. fallthrough;
  717. case SZ_16K:
  718. val |= FIELD_PREP(NV_FTR(MMFR0, TGRAN4_2), 0b0001);
  719. fallthrough;
  720. case SZ_4K:
  721. /* Support everything */
  722. break;
  723. }
  724. /*
  725. * Since we can't support a guest S2 page size smaller than
  726. * the host's own page size (due to KVM only populating its
  727. * own S2 using the kernel's page size), advertise the
  728. * limitation using FEAT_GTG.
  729. */
  730. switch (PAGE_SIZE) {
  731. case SZ_4K:
  732. val |= FIELD_PREP(NV_FTR(MMFR0, TGRAN4_2), 0b0010);
  733. fallthrough;
  734. case SZ_16K:
  735. val |= FIELD_PREP(NV_FTR(MMFR0, TGRAN16_2), 0b0010);
  736. fallthrough;
  737. case SZ_64K:
  738. val |= FIELD_PREP(NV_FTR(MMFR0, TGRAN64_2), 0b0010);
  739. break;
  740. }
  741. /* Cap PARange to 48bits */
  742. tmp = FIELD_GET(NV_FTR(MMFR0, PARANGE), val);
  743. if (tmp > 0b0101) {
  744. val &= ~NV_FTR(MMFR0, PARANGE);
  745. val |= FIELD_PREP(NV_FTR(MMFR0, PARANGE), 0b0101);
  746. }
  747. kvm_set_vm_id_reg(kvm, SYS_ID_AA64MMFR0_EL1, val);
  748. val = kvm_read_vm_id_reg(kvm, SYS_ID_AA64MMFR1_EL1);
  749. val &= (NV_FTR(MMFR1, HCX) |
  750. NV_FTR(MMFR1, PAN) |
  751. NV_FTR(MMFR1, LO) |
  752. NV_FTR(MMFR1, HPDS) |
  753. NV_FTR(MMFR1, VH) |
  754. NV_FTR(MMFR1, VMIDBits));
  755. kvm_set_vm_id_reg(kvm, SYS_ID_AA64MMFR1_EL1, val);
  756. val = kvm_read_vm_id_reg(kvm, SYS_ID_AA64MMFR2_EL1);
  757. val &= ~(NV_FTR(MMFR2, BBM) |
  758. NV_FTR(MMFR2, TTL) |
  759. GENMASK_ULL(47, 44) |
  760. NV_FTR(MMFR2, ST) |
  761. NV_FTR(MMFR2, CCIDX) |
  762. NV_FTR(MMFR2, VARange));
  763. /* Force TTL support */
  764. val |= FIELD_PREP(NV_FTR(MMFR2, TTL), 0b0001);
  765. kvm_set_vm_id_reg(kvm, SYS_ID_AA64MMFR2_EL1, val);
  766. val = 0;
  767. if (!cpus_have_final_cap(ARM64_HAS_HCR_NV1))
  768. val |= FIELD_PREP(NV_FTR(MMFR4, E2H0),
  769. ID_AA64MMFR4_EL1_E2H0_NI_NV1);
  770. kvm_set_vm_id_reg(kvm, SYS_ID_AA64MMFR4_EL1, val);
  771. /* Only limited support for PMU, Debug, BPs and WPs */
  772. val = kvm_read_vm_id_reg(kvm, SYS_ID_AA64DFR0_EL1);
  773. val &= (NV_FTR(DFR0, PMUVer) |
  774. NV_FTR(DFR0, WRPs) |
  775. NV_FTR(DFR0, BRPs) |
  776. NV_FTR(DFR0, DebugVer));
  777. /* Cap Debug to ARMv8.1 */
  778. tmp = FIELD_GET(NV_FTR(DFR0, DebugVer), val);
  779. if (tmp > 0b0111) {
  780. val &= ~NV_FTR(DFR0, DebugVer);
  781. val |= FIELD_PREP(NV_FTR(DFR0, DebugVer), 0b0111);
  782. }
  783. kvm_set_vm_id_reg(kvm, SYS_ID_AA64DFR0_EL1, val);
  784. }
  785. u64 kvm_vcpu_sanitise_vncr_reg(const struct kvm_vcpu *vcpu, enum vcpu_sysreg sr)
  786. {
  787. u64 v = ctxt_sys_reg(&vcpu->arch.ctxt, sr);
  788. struct kvm_sysreg_masks *masks;
  789. masks = vcpu->kvm->arch.sysreg_masks;
  790. if (masks) {
  791. sr -= __VNCR_START__;
  792. v &= ~masks->mask[sr].res0;
  793. v |= masks->mask[sr].res1;
  794. }
  795. return v;
  796. }
  797. static void set_sysreg_masks(struct kvm *kvm, int sr, u64 res0, u64 res1)
  798. {
  799. int i = sr - __VNCR_START__;
  800. kvm->arch.sysreg_masks->mask[i].res0 = res0;
  801. kvm->arch.sysreg_masks->mask[i].res1 = res1;
  802. }
  803. int kvm_init_nv_sysregs(struct kvm *kvm)
  804. {
  805. u64 res0, res1;
  806. lockdep_assert_held(&kvm->arch.config_lock);
  807. if (kvm->arch.sysreg_masks)
  808. return 0;
  809. kvm->arch.sysreg_masks = kzalloc(sizeof(*(kvm->arch.sysreg_masks)),
  810. GFP_KERNEL_ACCOUNT);
  811. if (!kvm->arch.sysreg_masks)
  812. return -ENOMEM;
  813. limit_nv_id_regs(kvm);
  814. /* VTTBR_EL2 */
  815. res0 = res1 = 0;
  816. if (!kvm_has_feat_enum(kvm, ID_AA64MMFR1_EL1, VMIDBits, 16))
  817. res0 |= GENMASK(63, 56);
  818. if (!kvm_has_feat(kvm, ID_AA64MMFR2_EL1, CnP, IMP))
  819. res0 |= VTTBR_CNP_BIT;
  820. set_sysreg_masks(kvm, VTTBR_EL2, res0, res1);
  821. /* VTCR_EL2 */
  822. res0 = GENMASK(63, 32) | GENMASK(30, 20);
  823. res1 = BIT(31);
  824. set_sysreg_masks(kvm, VTCR_EL2, res0, res1);
  825. /* VMPIDR_EL2 */
  826. res0 = GENMASK(63, 40) | GENMASK(30, 24);
  827. res1 = BIT(31);
  828. set_sysreg_masks(kvm, VMPIDR_EL2, res0, res1);
  829. /* HCR_EL2 */
  830. res0 = BIT(48);
  831. res1 = HCR_RW;
  832. if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, TWED, IMP))
  833. res0 |= GENMASK(63, 59);
  834. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, MTE, MTE2))
  835. res0 |= (HCR_TID5 | HCR_DCT | HCR_ATA);
  836. if (!kvm_has_feat(kvm, ID_AA64MMFR2_EL1, EVT, TTLBxS))
  837. res0 |= (HCR_TTLBIS | HCR_TTLBOS);
  838. if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, CSV2, CSV2_2) &&
  839. !kvm_has_feat(kvm, ID_AA64PFR1_EL1, CSV2_frac, CSV2_1p2))
  840. res0 |= HCR_ENSCXT;
  841. if (!kvm_has_feat(kvm, ID_AA64MMFR2_EL1, EVT, IMP))
  842. res0 |= (HCR_TOCU | HCR_TICAB | HCR_TID4);
  843. if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, AMU, V1P1))
  844. res0 |= HCR_AMVOFFEN;
  845. if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, V1P1))
  846. res0 |= HCR_FIEN;
  847. if (!kvm_has_feat(kvm, ID_AA64MMFR2_EL1, FWB, IMP))
  848. res0 |= HCR_FWB;
  849. if (!kvm_has_feat(kvm, ID_AA64MMFR2_EL1, NV, NV2))
  850. res0 |= HCR_NV2;
  851. if (!kvm_has_feat(kvm, ID_AA64MMFR2_EL1, NV, IMP))
  852. res0 |= (HCR_AT | HCR_NV1 | HCR_NV);
  853. if (!(__vcpu_has_feature(&kvm->arch, KVM_ARM_VCPU_PTRAUTH_ADDRESS) &&
  854. __vcpu_has_feature(&kvm->arch, KVM_ARM_VCPU_PTRAUTH_GENERIC)))
  855. res0 |= (HCR_API | HCR_APK);
  856. if (!kvm_has_feat(kvm, ID_AA64ISAR0_EL1, TME, IMP))
  857. res0 |= BIT(39);
  858. if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, IMP))
  859. res0 |= (HCR_TEA | HCR_TERR);
  860. if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, LO, IMP))
  861. res0 |= HCR_TLOR;
  862. if (!kvm_has_feat(kvm, ID_AA64MMFR4_EL1, E2H0, IMP))
  863. res1 |= HCR_E2H;
  864. set_sysreg_masks(kvm, HCR_EL2, res0, res1);
  865. /* HCRX_EL2 */
  866. res0 = HCRX_EL2_RES0;
  867. res1 = HCRX_EL2_RES1;
  868. if (!kvm_has_feat(kvm, ID_AA64ISAR3_EL1, PACM, TRIVIAL_IMP))
  869. res0 |= HCRX_EL2_PACMEn;
  870. if (!kvm_has_feat(kvm, ID_AA64PFR2_EL1, FPMR, IMP))
  871. res0 |= HCRX_EL2_EnFPM;
  872. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, GCS, IMP))
  873. res0 |= HCRX_EL2_GCSEn;
  874. if (!kvm_has_feat(kvm, ID_AA64ISAR2_EL1, SYSREG_128, IMP))
  875. res0 |= HCRX_EL2_EnIDCP128;
  876. if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, ADERR, DEV_ASYNC))
  877. res0 |= (HCRX_EL2_EnSDERR | HCRX_EL2_EnSNERR);
  878. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, DF2, IMP))
  879. res0 |= HCRX_EL2_TMEA;
  880. if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, D128, IMP))
  881. res0 |= HCRX_EL2_D128En;
  882. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, THE, IMP))
  883. res0 |= HCRX_EL2_PTTWI;
  884. if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, SCTLRX, IMP))
  885. res0 |= HCRX_EL2_SCTLR2En;
  886. if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, TCRX, IMP))
  887. res0 |= HCRX_EL2_TCR2En;
  888. if (!kvm_has_feat(kvm, ID_AA64ISAR2_EL1, MOPS, IMP))
  889. res0 |= (HCRX_EL2_MSCEn | HCRX_EL2_MCE2);
  890. if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, CMOW, IMP))
  891. res0 |= HCRX_EL2_CMOW;
  892. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, NMI, IMP))
  893. res0 |= (HCRX_EL2_VFNMI | HCRX_EL2_VINMI | HCRX_EL2_TALLINT);
  894. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, SME, IMP) ||
  895. !(read_sysreg_s(SYS_SMIDR_EL1) & SMIDR_EL1_SMPS))
  896. res0 |= HCRX_EL2_SMPME;
  897. if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, XS, IMP))
  898. res0 |= (HCRX_EL2_FGTnXS | HCRX_EL2_FnXS);
  899. if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, LS64, LS64_V))
  900. res0 |= HCRX_EL2_EnASR;
  901. if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, LS64, LS64))
  902. res0 |= HCRX_EL2_EnALS;
  903. if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, LS64, LS64_ACCDATA))
  904. res0 |= HCRX_EL2_EnAS0;
  905. set_sysreg_masks(kvm, HCRX_EL2, res0, res1);
  906. /* HFG[RW]TR_EL2 */
  907. res0 = res1 = 0;
  908. if (!(__vcpu_has_feature(&kvm->arch, KVM_ARM_VCPU_PTRAUTH_ADDRESS) &&
  909. __vcpu_has_feature(&kvm->arch, KVM_ARM_VCPU_PTRAUTH_GENERIC)))
  910. res0 |= (HFGxTR_EL2_APDAKey | HFGxTR_EL2_APDBKey |
  911. HFGxTR_EL2_APGAKey | HFGxTR_EL2_APIAKey |
  912. HFGxTR_EL2_APIBKey);
  913. if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, LO, IMP))
  914. res0 |= (HFGxTR_EL2_LORC_EL1 | HFGxTR_EL2_LOREA_EL1 |
  915. HFGxTR_EL2_LORID_EL1 | HFGxTR_EL2_LORN_EL1 |
  916. HFGxTR_EL2_LORSA_EL1);
  917. if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, CSV2, CSV2_2) &&
  918. !kvm_has_feat(kvm, ID_AA64PFR1_EL1, CSV2_frac, CSV2_1p2))
  919. res0 |= (HFGxTR_EL2_SCXTNUM_EL1 | HFGxTR_EL2_SCXTNUM_EL0);
  920. if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, GIC, IMP))
  921. res0 |= HFGxTR_EL2_ICC_IGRPENn_EL1;
  922. if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, IMP))
  923. res0 |= (HFGxTR_EL2_ERRIDR_EL1 | HFGxTR_EL2_ERRSELR_EL1 |
  924. HFGxTR_EL2_ERXFR_EL1 | HFGxTR_EL2_ERXCTLR_EL1 |
  925. HFGxTR_EL2_ERXSTATUS_EL1 | HFGxTR_EL2_ERXMISCn_EL1 |
  926. HFGxTR_EL2_ERXPFGF_EL1 | HFGxTR_EL2_ERXPFGCTL_EL1 |
  927. HFGxTR_EL2_ERXPFGCDN_EL1 | HFGxTR_EL2_ERXADDR_EL1);
  928. if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, LS64, LS64_ACCDATA))
  929. res0 |= HFGxTR_EL2_nACCDATA_EL1;
  930. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, GCS, IMP))
  931. res0 |= (HFGxTR_EL2_nGCS_EL0 | HFGxTR_EL2_nGCS_EL1);
  932. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, SME, IMP))
  933. res0 |= (HFGxTR_EL2_nSMPRI_EL1 | HFGxTR_EL2_nTPIDR2_EL0);
  934. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, THE, IMP))
  935. res0 |= HFGxTR_EL2_nRCWMASK_EL1;
  936. if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, S1PIE, IMP))
  937. res0 |= (HFGxTR_EL2_nPIRE0_EL1 | HFGxTR_EL2_nPIR_EL1);
  938. if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, S1POE, IMP))
  939. res0 |= (HFGxTR_EL2_nPOR_EL0 | HFGxTR_EL2_nPOR_EL1);
  940. if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, S2POE, IMP))
  941. res0 |= HFGxTR_EL2_nS2POR_EL1;
  942. if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, AIE, IMP))
  943. res0 |= (HFGxTR_EL2_nMAIR2_EL1 | HFGxTR_EL2_nAMAIR2_EL1);
  944. set_sysreg_masks(kvm, HFGRTR_EL2, res0 | __HFGRTR_EL2_RES0, res1);
  945. set_sysreg_masks(kvm, HFGWTR_EL2, res0 | __HFGWTR_EL2_RES0, res1);
  946. /* HDFG[RW]TR_EL2 */
  947. res0 = res1 = 0;
  948. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, DoubleLock, IMP))
  949. res0 |= HDFGRTR_EL2_OSDLR_EL1;
  950. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, PMUVer, IMP))
  951. res0 |= (HDFGRTR_EL2_PMEVCNTRn_EL0 | HDFGRTR_EL2_PMEVTYPERn_EL0 |
  952. HDFGRTR_EL2_PMCCFILTR_EL0 | HDFGRTR_EL2_PMCCNTR_EL0 |
  953. HDFGRTR_EL2_PMCNTEN | HDFGRTR_EL2_PMINTEN |
  954. HDFGRTR_EL2_PMOVS | HDFGRTR_EL2_PMSELR_EL0 |
  955. HDFGRTR_EL2_PMMIR_EL1 | HDFGRTR_EL2_PMUSERENR_EL0 |
  956. HDFGRTR_EL2_PMCEIDn_EL0);
  957. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, PMSVer, IMP))
  958. res0 |= (HDFGRTR_EL2_PMBLIMITR_EL1 | HDFGRTR_EL2_PMBPTR_EL1 |
  959. HDFGRTR_EL2_PMBSR_EL1 | HDFGRTR_EL2_PMSCR_EL1 |
  960. HDFGRTR_EL2_PMSEVFR_EL1 | HDFGRTR_EL2_PMSFCR_EL1 |
  961. HDFGRTR_EL2_PMSICR_EL1 | HDFGRTR_EL2_PMSIDR_EL1 |
  962. HDFGRTR_EL2_PMSIRR_EL1 | HDFGRTR_EL2_PMSLATFR_EL1 |
  963. HDFGRTR_EL2_PMBIDR_EL1);
  964. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, TraceVer, IMP))
  965. res0 |= (HDFGRTR_EL2_TRC | HDFGRTR_EL2_TRCAUTHSTATUS |
  966. HDFGRTR_EL2_TRCAUXCTLR | HDFGRTR_EL2_TRCCLAIM |
  967. HDFGRTR_EL2_TRCCNTVRn | HDFGRTR_EL2_TRCID |
  968. HDFGRTR_EL2_TRCIMSPECn | HDFGRTR_EL2_TRCOSLSR |
  969. HDFGRTR_EL2_TRCPRGCTLR | HDFGRTR_EL2_TRCSEQSTR |
  970. HDFGRTR_EL2_TRCSSCSRn | HDFGRTR_EL2_TRCSTATR |
  971. HDFGRTR_EL2_TRCVICTLR);
  972. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, TraceBuffer, IMP))
  973. res0 |= (HDFGRTR_EL2_TRBBASER_EL1 | HDFGRTR_EL2_TRBIDR_EL1 |
  974. HDFGRTR_EL2_TRBLIMITR_EL1 | HDFGRTR_EL2_TRBMAR_EL1 |
  975. HDFGRTR_EL2_TRBPTR_EL1 | HDFGRTR_EL2_TRBSR_EL1 |
  976. HDFGRTR_EL2_TRBTRG_EL1);
  977. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, BRBE, IMP))
  978. res0 |= (HDFGRTR_EL2_nBRBIDR | HDFGRTR_EL2_nBRBCTL |
  979. HDFGRTR_EL2_nBRBDATA);
  980. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, PMSVer, V1P2))
  981. res0 |= HDFGRTR_EL2_nPMSNEVFR_EL1;
  982. set_sysreg_masks(kvm, HDFGRTR_EL2, res0 | HDFGRTR_EL2_RES0, res1);
  983. /* Reuse the bits from the read-side and add the write-specific stuff */
  984. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, PMUVer, IMP))
  985. res0 |= (HDFGWTR_EL2_PMCR_EL0 | HDFGWTR_EL2_PMSWINC_EL0);
  986. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, TraceVer, IMP))
  987. res0 |= HDFGWTR_EL2_TRCOSLAR;
  988. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, TraceFilt, IMP))
  989. res0 |= HDFGWTR_EL2_TRFCR_EL1;
  990. set_sysreg_masks(kvm, HFGWTR_EL2, res0 | HDFGWTR_EL2_RES0, res1);
  991. /* HFGITR_EL2 */
  992. res0 = HFGITR_EL2_RES0;
  993. res1 = HFGITR_EL2_RES1;
  994. if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, DPB, DPB2))
  995. res0 |= HFGITR_EL2_DCCVADP;
  996. if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, PAN, PAN2))
  997. res0 |= (HFGITR_EL2_ATS1E1RP | HFGITR_EL2_ATS1E1WP);
  998. if (!kvm_has_feat(kvm, ID_AA64ISAR0_EL1, TLB, OS))
  999. res0 |= (HFGITR_EL2_TLBIRVAALE1OS | HFGITR_EL2_TLBIRVALE1OS |
  1000. HFGITR_EL2_TLBIRVAAE1OS | HFGITR_EL2_TLBIRVAE1OS |
  1001. HFGITR_EL2_TLBIVAALE1OS | HFGITR_EL2_TLBIVALE1OS |
  1002. HFGITR_EL2_TLBIVAAE1OS | HFGITR_EL2_TLBIASIDE1OS |
  1003. HFGITR_EL2_TLBIVAE1OS | HFGITR_EL2_TLBIVMALLE1OS);
  1004. if (!kvm_has_feat(kvm, ID_AA64ISAR0_EL1, TLB, RANGE))
  1005. res0 |= (HFGITR_EL2_TLBIRVAALE1 | HFGITR_EL2_TLBIRVALE1 |
  1006. HFGITR_EL2_TLBIRVAAE1 | HFGITR_EL2_TLBIRVAE1 |
  1007. HFGITR_EL2_TLBIRVAALE1IS | HFGITR_EL2_TLBIRVALE1IS |
  1008. HFGITR_EL2_TLBIRVAAE1IS | HFGITR_EL2_TLBIRVAE1IS |
  1009. HFGITR_EL2_TLBIRVAALE1OS | HFGITR_EL2_TLBIRVALE1OS |
  1010. HFGITR_EL2_TLBIRVAAE1OS | HFGITR_EL2_TLBIRVAE1OS);
  1011. if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, SPECRES, IMP))
  1012. res0 |= (HFGITR_EL2_CFPRCTX | HFGITR_EL2_DVPRCTX |
  1013. HFGITR_EL2_CPPRCTX);
  1014. if (!kvm_has_feat(kvm, ID_AA64DFR0_EL1, BRBE, IMP))
  1015. res0 |= (HFGITR_EL2_nBRBINJ | HFGITR_EL2_nBRBIALL);
  1016. if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, GCS, IMP))
  1017. res0 |= (HFGITR_EL2_nGCSPUSHM_EL1 | HFGITR_EL2_nGCSSTR_EL1 |
  1018. HFGITR_EL2_nGCSEPP);
  1019. if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, SPECRES, COSP_RCTX))
  1020. res0 |= HFGITR_EL2_COSPRCTX;
  1021. if (!kvm_has_feat(kvm, ID_AA64ISAR2_EL1, ATS1A, IMP))
  1022. res0 |= HFGITR_EL2_ATS1E1A;
  1023. set_sysreg_masks(kvm, HFGITR_EL2, res0, res1);
  1024. /* HAFGRTR_EL2 - not a lot to see here */
  1025. res0 = HAFGRTR_EL2_RES0;
  1026. res1 = HAFGRTR_EL2_RES1;
  1027. if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, AMU, V1P1))
  1028. res0 |= ~(res0 | res1);
  1029. set_sysreg_masks(kvm, HAFGRTR_EL2, res0, res1);
  1030. /* SCTLR_EL1 */
  1031. res0 = SCTLR_EL1_RES0;
  1032. res1 = SCTLR_EL1_RES1;
  1033. if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, PAN, PAN3))
  1034. res0 |= SCTLR_EL1_EPAN;
  1035. set_sysreg_masks(kvm, SCTLR_EL1, res0, res1);
  1036. return 0;
  1037. }
  1038. void check_nested_vcpu_requests(struct kvm_vcpu *vcpu)
  1039. {
  1040. if (kvm_check_request(KVM_REQ_NESTED_S2_UNMAP, vcpu)) {
  1041. struct kvm_s2_mmu *mmu = vcpu->arch.hw_mmu;
  1042. write_lock(&vcpu->kvm->mmu_lock);
  1043. if (mmu->pending_unmap) {
  1044. kvm_stage2_unmap_range(mmu, 0, kvm_phys_size(mmu), true);
  1045. mmu->pending_unmap = false;
  1046. }
  1047. write_unlock(&vcpu->kvm->mmu_lock);
  1048. }
  1049. }