book3s_64_mmu_radix.c 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243
  1. /*
  2. * This program is free software; you can redistribute it and/or modify
  3. * it under the terms of the GNU General Public License, version 2, as
  4. * published by the Free Software Foundation.
  5. *
  6. * Copyright 2016 Paul Mackerras, IBM Corp. <paulus@au1.ibm.com>
  7. */
  8. #include <linux/types.h>
  9. #include <linux/string.h>
  10. #include <linux/kvm.h>
  11. #include <linux/kvm_host.h>
  12. #include <linux/anon_inodes.h>
  13. #include <linux/file.h>
  14. #include <linux/debugfs.h>
  15. #include <asm/kvm_ppc.h>
  16. #include <asm/kvm_book3s.h>
  17. #include <asm/page.h>
  18. #include <asm/mmu.h>
  19. #include <asm/pgtable.h>
  20. #include <asm/pgalloc.h>
  21. #include <asm/pte-walk.h>
  22. /*
  23. * Supported radix tree geometry.
  24. * Like p9, we support either 5 or 9 bits at the first (lowest) level,
  25. * for a page size of 64k or 4k.
  26. */
  27. static int p9_supported_radix_bits[4] = { 5, 9, 9, 13 };
  28. int kvmppc_mmu_walk_radix_tree(struct kvm_vcpu *vcpu, gva_t eaddr,
  29. struct kvmppc_pte *gpte, u64 root,
  30. u64 *pte_ret_p)
  31. {
  32. struct kvm *kvm = vcpu->kvm;
  33. int ret, level, ps;
  34. unsigned long rts, bits, offset, index;
  35. u64 pte, base, gpa;
  36. __be64 rpte;
  37. rts = ((root & RTS1_MASK) >> (RTS1_SHIFT - 3)) |
  38. ((root & RTS2_MASK) >> RTS2_SHIFT);
  39. bits = root & RPDS_MASK;
  40. base = root & RPDB_MASK;
  41. offset = rts + 31;
  42. /* Current implementations only support 52-bit space */
  43. if (offset != 52)
  44. return -EINVAL;
  45. /* Walk each level of the radix tree */
  46. for (level = 3; level >= 0; --level) {
  47. u64 addr;
  48. /* Check a valid size */
  49. if (level && bits != p9_supported_radix_bits[level])
  50. return -EINVAL;
  51. if (level == 0 && !(bits == 5 || bits == 9))
  52. return -EINVAL;
  53. offset -= bits;
  54. index = (eaddr >> offset) & ((1UL << bits) - 1);
  55. /* Check that low bits of page table base are zero */
  56. if (base & ((1UL << (bits + 3)) - 1))
  57. return -EINVAL;
  58. /* Read the entry from guest memory */
  59. addr = base + (index * sizeof(rpte));
  60. ret = kvm_read_guest(kvm, addr, &rpte, sizeof(rpte));
  61. if (ret) {
  62. if (pte_ret_p)
  63. *pte_ret_p = addr;
  64. return ret;
  65. }
  66. pte = __be64_to_cpu(rpte);
  67. if (!(pte & _PAGE_PRESENT))
  68. return -ENOENT;
  69. /* Check if a leaf entry */
  70. if (pte & _PAGE_PTE)
  71. break;
  72. /* Get ready to walk the next level */
  73. base = pte & RPDB_MASK;
  74. bits = pte & RPDS_MASK;
  75. }
  76. /* Need a leaf at lowest level; 512GB pages not supported */
  77. if (level < 0 || level == 3)
  78. return -EINVAL;
  79. /* We found a valid leaf PTE */
  80. /* Offset is now log base 2 of the page size */
  81. gpa = pte & 0x01fffffffffff000ul;
  82. if (gpa & ((1ul << offset) - 1))
  83. return -EINVAL;
  84. gpa |= eaddr & ((1ul << offset) - 1);
  85. for (ps = MMU_PAGE_4K; ps < MMU_PAGE_COUNT; ++ps)
  86. if (offset == mmu_psize_defs[ps].shift)
  87. break;
  88. gpte->page_size = ps;
  89. gpte->page_shift = offset;
  90. gpte->eaddr = eaddr;
  91. gpte->raddr = gpa;
  92. /* Work out permissions */
  93. gpte->may_read = !!(pte & _PAGE_READ);
  94. gpte->may_write = !!(pte & _PAGE_WRITE);
  95. gpte->may_execute = !!(pte & _PAGE_EXEC);
  96. gpte->rc = pte & (_PAGE_ACCESSED | _PAGE_DIRTY);
  97. if (pte_ret_p)
  98. *pte_ret_p = pte;
  99. return 0;
  100. }
  101. /*
  102. * Used to walk a partition or process table radix tree in guest memory
  103. * Note: We exploit the fact that a partition table and a process
  104. * table have the same layout, a partition-scoped page table and a
  105. * process-scoped page table have the same layout, and the 2nd
  106. * doubleword of a partition table entry has the same layout as
  107. * the PTCR register.
  108. */
  109. int kvmppc_mmu_radix_translate_table(struct kvm_vcpu *vcpu, gva_t eaddr,
  110. struct kvmppc_pte *gpte, u64 table,
  111. int table_index, u64 *pte_ret_p)
  112. {
  113. struct kvm *kvm = vcpu->kvm;
  114. int ret;
  115. unsigned long size, ptbl, root;
  116. struct prtb_entry entry;
  117. if ((table & PRTS_MASK) > 24)
  118. return -EINVAL;
  119. size = 1ul << ((table & PRTS_MASK) + 12);
  120. /* Is the table big enough to contain this entry? */
  121. if ((table_index * sizeof(entry)) >= size)
  122. return -EINVAL;
  123. /* Read the table to find the root of the radix tree */
  124. ptbl = (table & PRTB_MASK) + (table_index * sizeof(entry));
  125. ret = kvm_read_guest(kvm, ptbl, &entry, sizeof(entry));
  126. if (ret)
  127. return ret;
  128. /* Root is stored in the first double word */
  129. root = be64_to_cpu(entry.prtb0);
  130. return kvmppc_mmu_walk_radix_tree(vcpu, eaddr, gpte, root, pte_ret_p);
  131. }
  132. int kvmppc_mmu_radix_xlate(struct kvm_vcpu *vcpu, gva_t eaddr,
  133. struct kvmppc_pte *gpte, bool data, bool iswrite)
  134. {
  135. u32 pid;
  136. u64 pte;
  137. int ret;
  138. /* Work out effective PID */
  139. switch (eaddr >> 62) {
  140. case 0:
  141. pid = vcpu->arch.pid;
  142. break;
  143. case 3:
  144. pid = 0;
  145. break;
  146. default:
  147. return -EINVAL;
  148. }
  149. ret = kvmppc_mmu_radix_translate_table(vcpu, eaddr, gpte,
  150. vcpu->kvm->arch.process_table, pid, &pte);
  151. if (ret)
  152. return ret;
  153. /* Check privilege (applies only to process scoped translations) */
  154. if (kvmppc_get_msr(vcpu) & MSR_PR) {
  155. if (pte & _PAGE_PRIVILEGED) {
  156. gpte->may_read = 0;
  157. gpte->may_write = 0;
  158. gpte->may_execute = 0;
  159. }
  160. } else {
  161. if (!(pte & _PAGE_PRIVILEGED)) {
  162. /* Check AMR/IAMR to see if strict mode is in force */
  163. if (vcpu->arch.amr & (1ul << 62))
  164. gpte->may_read = 0;
  165. if (vcpu->arch.amr & (1ul << 63))
  166. gpte->may_write = 0;
  167. if (vcpu->arch.iamr & (1ul << 62))
  168. gpte->may_execute = 0;
  169. }
  170. }
  171. return 0;
  172. }
  173. static void kvmppc_radix_tlbie_page(struct kvm *kvm, unsigned long addr,
  174. unsigned int pshift, unsigned int lpid)
  175. {
  176. unsigned long psize = PAGE_SIZE;
  177. int psi;
  178. long rc;
  179. unsigned long rb;
  180. if (pshift)
  181. psize = 1UL << pshift;
  182. else
  183. pshift = PAGE_SHIFT;
  184. addr &= ~(psize - 1);
  185. if (!kvmhv_on_pseries()) {
  186. radix__flush_tlb_lpid_page(lpid, addr, psize);
  187. return;
  188. }
  189. psi = shift_to_mmu_psize(pshift);
  190. rb = addr | (mmu_get_ap(psi) << PPC_BITLSHIFT(58));
  191. rc = plpar_hcall_norets(H_TLB_INVALIDATE, H_TLBIE_P1_ENC(0, 0, 1),
  192. lpid, rb);
  193. if (rc)
  194. pr_err("KVM: TLB page invalidation hcall failed, rc=%ld\n", rc);
  195. }
  196. static void kvmppc_radix_flush_pwc(struct kvm *kvm, unsigned int lpid)
  197. {
  198. long rc;
  199. if (!kvmhv_on_pseries()) {
  200. radix__flush_pwc_lpid(lpid);
  201. return;
  202. }
  203. rc = plpar_hcall_norets(H_TLB_INVALIDATE, H_TLBIE_P1_ENC(1, 0, 1),
  204. lpid, TLBIEL_INVAL_SET_LPID);
  205. if (rc)
  206. pr_err("KVM: TLB PWC invalidation hcall failed, rc=%ld\n", rc);
  207. }
  208. static unsigned long kvmppc_radix_update_pte(struct kvm *kvm, pte_t *ptep,
  209. unsigned long clr, unsigned long set,
  210. unsigned long addr, unsigned int shift)
  211. {
  212. return __radix_pte_update(ptep, clr, set);
  213. }
  214. void kvmppc_radix_set_pte_at(struct kvm *kvm, unsigned long addr,
  215. pte_t *ptep, pte_t pte)
  216. {
  217. radix__set_pte_at(kvm->mm, addr, ptep, pte, 0);
  218. }
  219. static struct kmem_cache *kvm_pte_cache;
  220. static struct kmem_cache *kvm_pmd_cache;
  221. static pte_t *kvmppc_pte_alloc(void)
  222. {
  223. return kmem_cache_alloc(kvm_pte_cache, GFP_KERNEL);
  224. }
  225. static void kvmppc_pte_free(pte_t *ptep)
  226. {
  227. kmem_cache_free(kvm_pte_cache, ptep);
  228. }
  229. /* Like pmd_huge() and pmd_large(), but works regardless of config options */
  230. static inline int pmd_is_leaf(pmd_t pmd)
  231. {
  232. return !!(pmd_val(pmd) & _PAGE_PTE);
  233. }
  234. static pmd_t *kvmppc_pmd_alloc(void)
  235. {
  236. return kmem_cache_alloc(kvm_pmd_cache, GFP_KERNEL);
  237. }
  238. static void kvmppc_pmd_free(pmd_t *pmdp)
  239. {
  240. kmem_cache_free(kvm_pmd_cache, pmdp);
  241. }
  242. /* Called with kvm->mmu_lock held */
  243. void kvmppc_unmap_pte(struct kvm *kvm, pte_t *pte, unsigned long gpa,
  244. unsigned int shift, struct kvm_memory_slot *memslot,
  245. unsigned int lpid)
  246. {
  247. unsigned long old;
  248. unsigned long gfn = gpa >> PAGE_SHIFT;
  249. unsigned long page_size = PAGE_SIZE;
  250. unsigned long hpa;
  251. old = kvmppc_radix_update_pte(kvm, pte, ~0UL, 0, gpa, shift);
  252. kvmppc_radix_tlbie_page(kvm, gpa, shift, lpid);
  253. /* The following only applies to L1 entries */
  254. if (lpid != kvm->arch.lpid)
  255. return;
  256. if (!memslot) {
  257. memslot = gfn_to_memslot(kvm, gfn);
  258. if (!memslot)
  259. return;
  260. }
  261. if (shift)
  262. page_size = 1ul << shift;
  263. gpa &= ~(page_size - 1);
  264. hpa = old & PTE_RPN_MASK;
  265. kvmhv_remove_nest_rmap_range(kvm, memslot, gpa, hpa, page_size);
  266. if ((old & _PAGE_DIRTY) && memslot->dirty_bitmap)
  267. kvmppc_update_dirty_map(memslot, gfn, page_size);
  268. }
  269. /*
  270. * kvmppc_free_p?d are used to free existing page tables, and recursively
  271. * descend and clear and free children.
  272. * Callers are responsible for flushing the PWC.
  273. *
  274. * When page tables are being unmapped/freed as part of page fault path
  275. * (full == false), ptes are not expected. There is code to unmap them
  276. * and emit a warning if encountered, but there may already be data
  277. * corruption due to the unexpected mappings.
  278. */
  279. static void kvmppc_unmap_free_pte(struct kvm *kvm, pte_t *pte, bool full,
  280. unsigned int lpid)
  281. {
  282. if (full) {
  283. memset(pte, 0, sizeof(long) << PTE_INDEX_SIZE);
  284. } else {
  285. pte_t *p = pte;
  286. unsigned long it;
  287. for (it = 0; it < PTRS_PER_PTE; ++it, ++p) {
  288. if (pte_val(*p) == 0)
  289. continue;
  290. WARN_ON_ONCE(1);
  291. kvmppc_unmap_pte(kvm, p,
  292. pte_pfn(*p) << PAGE_SHIFT,
  293. PAGE_SHIFT, NULL, lpid);
  294. }
  295. }
  296. kvmppc_pte_free(pte);
  297. }
  298. static void kvmppc_unmap_free_pmd(struct kvm *kvm, pmd_t *pmd, bool full,
  299. unsigned int lpid)
  300. {
  301. unsigned long im;
  302. pmd_t *p = pmd;
  303. for (im = 0; im < PTRS_PER_PMD; ++im, ++p) {
  304. if (!pmd_present(*p))
  305. continue;
  306. if (pmd_is_leaf(*p)) {
  307. if (full) {
  308. pmd_clear(p);
  309. } else {
  310. WARN_ON_ONCE(1);
  311. kvmppc_unmap_pte(kvm, (pte_t *)p,
  312. pte_pfn(*(pte_t *)p) << PAGE_SHIFT,
  313. PMD_SHIFT, NULL, lpid);
  314. }
  315. } else {
  316. pte_t *pte;
  317. pte = pte_offset_map(p, 0);
  318. kvmppc_unmap_free_pte(kvm, pte, full, lpid);
  319. pmd_clear(p);
  320. }
  321. }
  322. kvmppc_pmd_free(pmd);
  323. }
  324. static void kvmppc_unmap_free_pud(struct kvm *kvm, pud_t *pud,
  325. unsigned int lpid)
  326. {
  327. unsigned long iu;
  328. pud_t *p = pud;
  329. for (iu = 0; iu < PTRS_PER_PUD; ++iu, ++p) {
  330. if (!pud_present(*p))
  331. continue;
  332. if (pud_huge(*p)) {
  333. pud_clear(p);
  334. } else {
  335. pmd_t *pmd;
  336. pmd = pmd_offset(p, 0);
  337. kvmppc_unmap_free_pmd(kvm, pmd, true, lpid);
  338. pud_clear(p);
  339. }
  340. }
  341. pud_free(kvm->mm, pud);
  342. }
  343. void kvmppc_free_pgtable_radix(struct kvm *kvm, pgd_t *pgd, unsigned int lpid)
  344. {
  345. unsigned long ig;
  346. for (ig = 0; ig < PTRS_PER_PGD; ++ig, ++pgd) {
  347. pud_t *pud;
  348. if (!pgd_present(*pgd))
  349. continue;
  350. pud = pud_offset(pgd, 0);
  351. kvmppc_unmap_free_pud(kvm, pud, lpid);
  352. pgd_clear(pgd);
  353. }
  354. }
  355. void kvmppc_free_radix(struct kvm *kvm)
  356. {
  357. if (kvm->arch.pgtable) {
  358. kvmppc_free_pgtable_radix(kvm, kvm->arch.pgtable,
  359. kvm->arch.lpid);
  360. pgd_free(kvm->mm, kvm->arch.pgtable);
  361. kvm->arch.pgtable = NULL;
  362. }
  363. }
  364. static void kvmppc_unmap_free_pmd_entry_table(struct kvm *kvm, pmd_t *pmd,
  365. unsigned long gpa, unsigned int lpid)
  366. {
  367. pte_t *pte = pte_offset_kernel(pmd, 0);
  368. /*
  369. * Clearing the pmd entry then flushing the PWC ensures that the pte
  370. * page no longer be cached by the MMU, so can be freed without
  371. * flushing the PWC again.
  372. */
  373. pmd_clear(pmd);
  374. kvmppc_radix_flush_pwc(kvm, lpid);
  375. kvmppc_unmap_free_pte(kvm, pte, false, lpid);
  376. }
  377. static void kvmppc_unmap_free_pud_entry_table(struct kvm *kvm, pud_t *pud,
  378. unsigned long gpa, unsigned int lpid)
  379. {
  380. pmd_t *pmd = pmd_offset(pud, 0);
  381. /*
  382. * Clearing the pud entry then flushing the PWC ensures that the pmd
  383. * page and any children pte pages will no longer be cached by the MMU,
  384. * so can be freed without flushing the PWC again.
  385. */
  386. pud_clear(pud);
  387. kvmppc_radix_flush_pwc(kvm, lpid);
  388. kvmppc_unmap_free_pmd(kvm, pmd, false, lpid);
  389. }
  390. /*
  391. * There are a number of bits which may differ between different faults to
  392. * the same partition scope entry. RC bits, in the course of cleaning and
  393. * aging. And the write bit can change, either the access could have been
  394. * upgraded, or a read fault could happen concurrently with a write fault
  395. * that sets those bits first.
  396. */
  397. #define PTE_BITS_MUST_MATCH (~(_PAGE_WRITE | _PAGE_DIRTY | _PAGE_ACCESSED))
  398. int kvmppc_create_pte(struct kvm *kvm, pgd_t *pgtable, pte_t pte,
  399. unsigned long gpa, unsigned int level,
  400. unsigned long mmu_seq, unsigned int lpid,
  401. unsigned long *rmapp, struct rmap_nested **n_rmap)
  402. {
  403. pgd_t *pgd;
  404. pud_t *pud, *new_pud = NULL;
  405. pmd_t *pmd, *new_pmd = NULL;
  406. pte_t *ptep, *new_ptep = NULL;
  407. int ret;
  408. /* Traverse the guest's 2nd-level tree, allocate new levels needed */
  409. pgd = pgtable + pgd_index(gpa);
  410. pud = NULL;
  411. if (pgd_present(*pgd))
  412. pud = pud_offset(pgd, gpa);
  413. else
  414. new_pud = pud_alloc_one(kvm->mm, gpa);
  415. pmd = NULL;
  416. if (pud && pud_present(*pud) && !pud_huge(*pud))
  417. pmd = pmd_offset(pud, gpa);
  418. else if (level <= 1)
  419. new_pmd = kvmppc_pmd_alloc();
  420. if (level == 0 && !(pmd && pmd_present(*pmd) && !pmd_is_leaf(*pmd)))
  421. new_ptep = kvmppc_pte_alloc();
  422. /* Check if we might have been invalidated; let the guest retry if so */
  423. spin_lock(&kvm->mmu_lock);
  424. ret = -EAGAIN;
  425. if (mmu_notifier_retry(kvm, mmu_seq))
  426. goto out_unlock;
  427. /* Now traverse again under the lock and change the tree */
  428. ret = -ENOMEM;
  429. if (pgd_none(*pgd)) {
  430. if (!new_pud)
  431. goto out_unlock;
  432. pgd_populate(kvm->mm, pgd, new_pud);
  433. new_pud = NULL;
  434. }
  435. pud = pud_offset(pgd, gpa);
  436. if (pud_huge(*pud)) {
  437. unsigned long hgpa = gpa & PUD_MASK;
  438. /* Check if we raced and someone else has set the same thing */
  439. if (level == 2) {
  440. if (pud_raw(*pud) == pte_raw(pte)) {
  441. ret = 0;
  442. goto out_unlock;
  443. }
  444. /* Valid 1GB page here already, add our extra bits */
  445. WARN_ON_ONCE((pud_val(*pud) ^ pte_val(pte)) &
  446. PTE_BITS_MUST_MATCH);
  447. kvmppc_radix_update_pte(kvm, (pte_t *)pud,
  448. 0, pte_val(pte), hgpa, PUD_SHIFT);
  449. ret = 0;
  450. goto out_unlock;
  451. }
  452. /*
  453. * If we raced with another CPU which has just put
  454. * a 1GB pte in after we saw a pmd page, try again.
  455. */
  456. if (!new_pmd) {
  457. ret = -EAGAIN;
  458. goto out_unlock;
  459. }
  460. /* Valid 1GB page here already, remove it */
  461. kvmppc_unmap_pte(kvm, (pte_t *)pud, hgpa, PUD_SHIFT, NULL,
  462. lpid);
  463. }
  464. if (level == 2) {
  465. if (!pud_none(*pud)) {
  466. /*
  467. * There's a page table page here, but we wanted to
  468. * install a large page, so remove and free the page
  469. * table page.
  470. */
  471. kvmppc_unmap_free_pud_entry_table(kvm, pud, gpa, lpid);
  472. }
  473. kvmppc_radix_set_pte_at(kvm, gpa, (pte_t *)pud, pte);
  474. if (rmapp && n_rmap)
  475. kvmhv_insert_nest_rmap(kvm, rmapp, n_rmap);
  476. ret = 0;
  477. goto out_unlock;
  478. }
  479. if (pud_none(*pud)) {
  480. if (!new_pmd)
  481. goto out_unlock;
  482. pud_populate(kvm->mm, pud, new_pmd);
  483. new_pmd = NULL;
  484. }
  485. pmd = pmd_offset(pud, gpa);
  486. if (pmd_is_leaf(*pmd)) {
  487. unsigned long lgpa = gpa & PMD_MASK;
  488. /* Check if we raced and someone else has set the same thing */
  489. if (level == 1) {
  490. if (pmd_raw(*pmd) == pte_raw(pte)) {
  491. ret = 0;
  492. goto out_unlock;
  493. }
  494. /* Valid 2MB page here already, add our extra bits */
  495. WARN_ON_ONCE((pmd_val(*pmd) ^ pte_val(pte)) &
  496. PTE_BITS_MUST_MATCH);
  497. kvmppc_radix_update_pte(kvm, pmdp_ptep(pmd),
  498. 0, pte_val(pte), lgpa, PMD_SHIFT);
  499. ret = 0;
  500. goto out_unlock;
  501. }
  502. /*
  503. * If we raced with another CPU which has just put
  504. * a 2MB pte in after we saw a pte page, try again.
  505. */
  506. if (!new_ptep) {
  507. ret = -EAGAIN;
  508. goto out_unlock;
  509. }
  510. /* Valid 2MB page here already, remove it */
  511. kvmppc_unmap_pte(kvm, pmdp_ptep(pmd), lgpa, PMD_SHIFT, NULL,
  512. lpid);
  513. }
  514. if (level == 1) {
  515. if (!pmd_none(*pmd)) {
  516. /*
  517. * There's a page table page here, but we wanted to
  518. * install a large page, so remove and free the page
  519. * table page.
  520. */
  521. kvmppc_unmap_free_pmd_entry_table(kvm, pmd, gpa, lpid);
  522. }
  523. kvmppc_radix_set_pte_at(kvm, gpa, pmdp_ptep(pmd), pte);
  524. if (rmapp && n_rmap)
  525. kvmhv_insert_nest_rmap(kvm, rmapp, n_rmap);
  526. ret = 0;
  527. goto out_unlock;
  528. }
  529. if (pmd_none(*pmd)) {
  530. if (!new_ptep)
  531. goto out_unlock;
  532. pmd_populate(kvm->mm, pmd, new_ptep);
  533. new_ptep = NULL;
  534. }
  535. ptep = pte_offset_kernel(pmd, gpa);
  536. if (pte_present(*ptep)) {
  537. /* Check if someone else set the same thing */
  538. if (pte_raw(*ptep) == pte_raw(pte)) {
  539. ret = 0;
  540. goto out_unlock;
  541. }
  542. /* Valid page here already, add our extra bits */
  543. WARN_ON_ONCE((pte_val(*ptep) ^ pte_val(pte)) &
  544. PTE_BITS_MUST_MATCH);
  545. kvmppc_radix_update_pte(kvm, ptep, 0, pte_val(pte), gpa, 0);
  546. ret = 0;
  547. goto out_unlock;
  548. }
  549. kvmppc_radix_set_pte_at(kvm, gpa, ptep, pte);
  550. if (rmapp && n_rmap)
  551. kvmhv_insert_nest_rmap(kvm, rmapp, n_rmap);
  552. ret = 0;
  553. out_unlock:
  554. spin_unlock(&kvm->mmu_lock);
  555. if (new_pud)
  556. pud_free(kvm->mm, new_pud);
  557. if (new_pmd)
  558. kvmppc_pmd_free(new_pmd);
  559. if (new_ptep)
  560. kvmppc_pte_free(new_ptep);
  561. return ret;
  562. }
  563. bool kvmppc_hv_handle_set_rc(struct kvm *kvm, pgd_t *pgtable, bool writing,
  564. unsigned long gpa, unsigned int lpid)
  565. {
  566. unsigned long pgflags;
  567. unsigned int shift;
  568. pte_t *ptep;
  569. /*
  570. * Need to set an R or C bit in the 2nd-level tables;
  571. * since we are just helping out the hardware here,
  572. * it is sufficient to do what the hardware does.
  573. */
  574. pgflags = _PAGE_ACCESSED;
  575. if (writing)
  576. pgflags |= _PAGE_DIRTY;
  577. /*
  578. * We are walking the secondary (partition-scoped) page table here.
  579. * We can do this without disabling irq because the Linux MM
  580. * subsystem doesn't do THP splits and collapses on this tree.
  581. */
  582. ptep = __find_linux_pte(pgtable, gpa, NULL, &shift);
  583. if (ptep && pte_present(*ptep) && (!writing || pte_write(*ptep))) {
  584. kvmppc_radix_update_pte(kvm, ptep, 0, pgflags, gpa, shift);
  585. return true;
  586. }
  587. return false;
  588. }
  589. int kvmppc_book3s_instantiate_page(struct kvm_vcpu *vcpu,
  590. unsigned long gpa,
  591. struct kvm_memory_slot *memslot,
  592. bool writing, bool kvm_ro,
  593. pte_t *inserted_pte, unsigned int *levelp)
  594. {
  595. struct kvm *kvm = vcpu->kvm;
  596. struct page *page = NULL;
  597. unsigned long mmu_seq;
  598. unsigned long hva, gfn = gpa >> PAGE_SHIFT;
  599. bool upgrade_write = false;
  600. bool *upgrade_p = &upgrade_write;
  601. pte_t pte, *ptep;
  602. unsigned int shift, level;
  603. int ret;
  604. /* used to check for invalidations in progress */
  605. mmu_seq = kvm->mmu_notifier_seq;
  606. smp_rmb();
  607. /*
  608. * Do a fast check first, since __gfn_to_pfn_memslot doesn't
  609. * do it with !atomic && !async, which is how we call it.
  610. * We always ask for write permission since the common case
  611. * is that the page is writable.
  612. */
  613. hva = gfn_to_hva_memslot(memslot, gfn);
  614. if (!kvm_ro && __get_user_pages_fast(hva, 1, 1, &page) == 1) {
  615. upgrade_write = true;
  616. } else {
  617. unsigned long pfn;
  618. /* Call KVM generic code to do the slow-path check */
  619. pfn = __gfn_to_pfn_memslot(memslot, gfn, false, NULL,
  620. writing, upgrade_p);
  621. if (is_error_noslot_pfn(pfn))
  622. return -EFAULT;
  623. page = NULL;
  624. if (pfn_valid(pfn)) {
  625. page = pfn_to_page(pfn);
  626. if (PageReserved(page))
  627. page = NULL;
  628. }
  629. }
  630. /*
  631. * Read the PTE from the process' radix tree and use that
  632. * so we get the shift and attribute bits.
  633. */
  634. local_irq_disable();
  635. ptep = __find_linux_pte(vcpu->arch.pgdir, hva, NULL, &shift);
  636. /*
  637. * If the PTE disappeared temporarily due to a THP
  638. * collapse, just return and let the guest try again.
  639. */
  640. if (!ptep) {
  641. local_irq_enable();
  642. if (page)
  643. put_page(page);
  644. return RESUME_GUEST;
  645. }
  646. pte = *ptep;
  647. local_irq_enable();
  648. /* Get pte level from shift/size */
  649. if (shift == PUD_SHIFT &&
  650. (gpa & (PUD_SIZE - PAGE_SIZE)) ==
  651. (hva & (PUD_SIZE - PAGE_SIZE))) {
  652. level = 2;
  653. } else if (shift == PMD_SHIFT &&
  654. (gpa & (PMD_SIZE - PAGE_SIZE)) ==
  655. (hva & (PMD_SIZE - PAGE_SIZE))) {
  656. level = 1;
  657. } else {
  658. level = 0;
  659. if (shift > PAGE_SHIFT) {
  660. /*
  661. * If the pte maps more than one page, bring over
  662. * bits from the virtual address to get the real
  663. * address of the specific single page we want.
  664. */
  665. unsigned long rpnmask = (1ul << shift) - PAGE_SIZE;
  666. pte = __pte(pte_val(pte) | (hva & rpnmask));
  667. }
  668. }
  669. pte = __pte(pte_val(pte) | _PAGE_EXEC | _PAGE_ACCESSED);
  670. if (writing || upgrade_write) {
  671. if (pte_val(pte) & _PAGE_WRITE)
  672. pte = __pte(pte_val(pte) | _PAGE_DIRTY);
  673. } else {
  674. pte = __pte(pte_val(pte) & ~(_PAGE_WRITE | _PAGE_DIRTY));
  675. }
  676. /* Allocate space in the tree and write the PTE */
  677. ret = kvmppc_create_pte(kvm, kvm->arch.pgtable, pte, gpa, level,
  678. mmu_seq, kvm->arch.lpid, NULL, NULL);
  679. if (inserted_pte)
  680. *inserted_pte = pte;
  681. if (levelp)
  682. *levelp = level;
  683. if (page) {
  684. if (!ret && (pte_val(pte) & _PAGE_WRITE))
  685. set_page_dirty_lock(page);
  686. put_page(page);
  687. }
  688. return ret;
  689. }
  690. int kvmppc_book3s_radix_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu,
  691. unsigned long ea, unsigned long dsisr)
  692. {
  693. struct kvm *kvm = vcpu->kvm;
  694. unsigned long gpa, gfn;
  695. struct kvm_memory_slot *memslot;
  696. long ret;
  697. bool writing = !!(dsisr & DSISR_ISSTORE);
  698. bool kvm_ro = false;
  699. /* Check for unusual errors */
  700. if (dsisr & DSISR_UNSUPP_MMU) {
  701. pr_err("KVM: Got unsupported MMU fault\n");
  702. return -EFAULT;
  703. }
  704. if (dsisr & DSISR_BADACCESS) {
  705. /* Reflect to the guest as DSI */
  706. pr_err("KVM: Got radix HV page fault with DSISR=%lx\n", dsisr);
  707. kvmppc_core_queue_data_storage(vcpu, ea, dsisr);
  708. return RESUME_GUEST;
  709. }
  710. /* Translate the logical address */
  711. gpa = vcpu->arch.fault_gpa & ~0xfffUL;
  712. gpa &= ~0xF000000000000000ul;
  713. gfn = gpa >> PAGE_SHIFT;
  714. if (!(dsisr & DSISR_PRTABLE_FAULT))
  715. gpa |= ea & 0xfff;
  716. /* Get the corresponding memslot */
  717. memslot = gfn_to_memslot(kvm, gfn);
  718. /* No memslot means it's an emulated MMIO region */
  719. if (!memslot || (memslot->flags & KVM_MEMSLOT_INVALID)) {
  720. if (dsisr & (DSISR_PRTABLE_FAULT | DSISR_BADACCESS |
  721. DSISR_SET_RC)) {
  722. /*
  723. * Bad address in guest page table tree, or other
  724. * unusual error - reflect it to the guest as DSI.
  725. */
  726. kvmppc_core_queue_data_storage(vcpu, ea, dsisr);
  727. return RESUME_GUEST;
  728. }
  729. return kvmppc_hv_emulate_mmio(run, vcpu, gpa, ea, writing);
  730. }
  731. if (memslot->flags & KVM_MEM_READONLY) {
  732. if (writing) {
  733. /* give the guest a DSI */
  734. kvmppc_core_queue_data_storage(vcpu, ea, DSISR_ISSTORE |
  735. DSISR_PROTFAULT);
  736. return RESUME_GUEST;
  737. }
  738. kvm_ro = true;
  739. }
  740. /* Failed to set the reference/change bits */
  741. if (dsisr & DSISR_SET_RC) {
  742. spin_lock(&kvm->mmu_lock);
  743. if (kvmppc_hv_handle_set_rc(kvm, kvm->arch.pgtable,
  744. writing, gpa, kvm->arch.lpid))
  745. dsisr &= ~DSISR_SET_RC;
  746. spin_unlock(&kvm->mmu_lock);
  747. if (!(dsisr & (DSISR_BAD_FAULT_64S | DSISR_NOHPTE |
  748. DSISR_PROTFAULT | DSISR_SET_RC)))
  749. return RESUME_GUEST;
  750. }
  751. /* Try to insert a pte */
  752. ret = kvmppc_book3s_instantiate_page(vcpu, gpa, memslot, writing,
  753. kvm_ro, NULL, NULL);
  754. if (ret == 0 || ret == -EAGAIN)
  755. ret = RESUME_GUEST;
  756. return ret;
  757. }
  758. /* Called with kvm->lock held */
  759. int kvm_unmap_radix(struct kvm *kvm, struct kvm_memory_slot *memslot,
  760. unsigned long gfn)
  761. {
  762. pte_t *ptep;
  763. unsigned long gpa = gfn << PAGE_SHIFT;
  764. unsigned int shift;
  765. ptep = __find_linux_pte(kvm->arch.pgtable, gpa, NULL, &shift);
  766. if (ptep && pte_present(*ptep))
  767. kvmppc_unmap_pte(kvm, ptep, gpa, shift, memslot,
  768. kvm->arch.lpid);
  769. return 0;
  770. }
  771. /* Called with kvm->lock held */
  772. int kvm_age_radix(struct kvm *kvm, struct kvm_memory_slot *memslot,
  773. unsigned long gfn)
  774. {
  775. pte_t *ptep;
  776. unsigned long gpa = gfn << PAGE_SHIFT;
  777. unsigned int shift;
  778. int ref = 0;
  779. ptep = __find_linux_pte(kvm->arch.pgtable, gpa, NULL, &shift);
  780. if (ptep && pte_present(*ptep) && pte_young(*ptep)) {
  781. kvmppc_radix_update_pte(kvm, ptep, _PAGE_ACCESSED, 0,
  782. gpa, shift);
  783. /* XXX need to flush tlb here? */
  784. ref = 1;
  785. }
  786. return ref;
  787. }
  788. /* Called with kvm->lock held */
  789. int kvm_test_age_radix(struct kvm *kvm, struct kvm_memory_slot *memslot,
  790. unsigned long gfn)
  791. {
  792. pte_t *ptep;
  793. unsigned long gpa = gfn << PAGE_SHIFT;
  794. unsigned int shift;
  795. int ref = 0;
  796. ptep = __find_linux_pte(kvm->arch.pgtable, gpa, NULL, &shift);
  797. if (ptep && pte_present(*ptep) && pte_young(*ptep))
  798. ref = 1;
  799. return ref;
  800. }
  801. /* Returns the number of PAGE_SIZE pages that are dirty */
  802. static int kvm_radix_test_clear_dirty(struct kvm *kvm,
  803. struct kvm_memory_slot *memslot, int pagenum)
  804. {
  805. unsigned long gfn = memslot->base_gfn + pagenum;
  806. unsigned long gpa = gfn << PAGE_SHIFT;
  807. pte_t *ptep;
  808. unsigned int shift;
  809. int ret = 0;
  810. ptep = __find_linux_pte(kvm->arch.pgtable, gpa, NULL, &shift);
  811. if (ptep && pte_present(*ptep) && pte_dirty(*ptep)) {
  812. ret = 1;
  813. if (shift)
  814. ret = 1 << (shift - PAGE_SHIFT);
  815. kvmppc_radix_update_pte(kvm, ptep, _PAGE_DIRTY, 0,
  816. gpa, shift);
  817. kvmppc_radix_tlbie_page(kvm, gpa, shift, kvm->arch.lpid);
  818. }
  819. return ret;
  820. }
  821. long kvmppc_hv_get_dirty_log_radix(struct kvm *kvm,
  822. struct kvm_memory_slot *memslot, unsigned long *map)
  823. {
  824. unsigned long i, j;
  825. int npages;
  826. for (i = 0; i < memslot->npages; i = j) {
  827. npages = kvm_radix_test_clear_dirty(kvm, memslot, i);
  828. /*
  829. * Note that if npages > 0 then i must be a multiple of npages,
  830. * since huge pages are only used to back the guest at guest
  831. * real addresses that are a multiple of their size.
  832. * Since we have at most one PTE covering any given guest
  833. * real address, if npages > 1 we can skip to i + npages.
  834. */
  835. j = i + 1;
  836. if (npages) {
  837. set_dirty_bits(map, i, npages);
  838. j = i + npages;
  839. }
  840. }
  841. return 0;
  842. }
  843. static void add_rmmu_ap_encoding(struct kvm_ppc_rmmu_info *info,
  844. int psize, int *indexp)
  845. {
  846. if (!mmu_psize_defs[psize].shift)
  847. return;
  848. info->ap_encodings[*indexp] = mmu_psize_defs[psize].shift |
  849. (mmu_psize_defs[psize].ap << 29);
  850. ++(*indexp);
  851. }
  852. int kvmhv_get_rmmu_info(struct kvm *kvm, struct kvm_ppc_rmmu_info *info)
  853. {
  854. int i;
  855. if (!radix_enabled())
  856. return -EINVAL;
  857. memset(info, 0, sizeof(*info));
  858. /* 4k page size */
  859. info->geometries[0].page_shift = 12;
  860. info->geometries[0].level_bits[0] = 9;
  861. for (i = 1; i < 4; ++i)
  862. info->geometries[0].level_bits[i] = p9_supported_radix_bits[i];
  863. /* 64k page size */
  864. info->geometries[1].page_shift = 16;
  865. for (i = 0; i < 4; ++i)
  866. info->geometries[1].level_bits[i] = p9_supported_radix_bits[i];
  867. i = 0;
  868. add_rmmu_ap_encoding(info, MMU_PAGE_4K, &i);
  869. add_rmmu_ap_encoding(info, MMU_PAGE_64K, &i);
  870. add_rmmu_ap_encoding(info, MMU_PAGE_2M, &i);
  871. add_rmmu_ap_encoding(info, MMU_PAGE_1G, &i);
  872. return 0;
  873. }
  874. int kvmppc_init_vm_radix(struct kvm *kvm)
  875. {
  876. kvm->arch.pgtable = pgd_alloc(kvm->mm);
  877. if (!kvm->arch.pgtable)
  878. return -ENOMEM;
  879. return 0;
  880. }
  881. static void pte_ctor(void *addr)
  882. {
  883. memset(addr, 0, RADIX_PTE_TABLE_SIZE);
  884. }
  885. static void pmd_ctor(void *addr)
  886. {
  887. memset(addr, 0, RADIX_PMD_TABLE_SIZE);
  888. }
  889. struct debugfs_radix_state {
  890. struct kvm *kvm;
  891. struct mutex mutex;
  892. unsigned long gpa;
  893. int lpid;
  894. int chars_left;
  895. int buf_index;
  896. char buf[128];
  897. u8 hdr;
  898. };
  899. static int debugfs_radix_open(struct inode *inode, struct file *file)
  900. {
  901. struct kvm *kvm = inode->i_private;
  902. struct debugfs_radix_state *p;
  903. p = kzalloc(sizeof(*p), GFP_KERNEL);
  904. if (!p)
  905. return -ENOMEM;
  906. kvm_get_kvm(kvm);
  907. p->kvm = kvm;
  908. mutex_init(&p->mutex);
  909. file->private_data = p;
  910. return nonseekable_open(inode, file);
  911. }
  912. static int debugfs_radix_release(struct inode *inode, struct file *file)
  913. {
  914. struct debugfs_radix_state *p = file->private_data;
  915. kvm_put_kvm(p->kvm);
  916. kfree(p);
  917. return 0;
  918. }
  919. static ssize_t debugfs_radix_read(struct file *file, char __user *buf,
  920. size_t len, loff_t *ppos)
  921. {
  922. struct debugfs_radix_state *p = file->private_data;
  923. ssize_t ret, r;
  924. unsigned long n;
  925. struct kvm *kvm;
  926. unsigned long gpa;
  927. pgd_t *pgt;
  928. struct kvm_nested_guest *nested;
  929. pgd_t pgd, *pgdp;
  930. pud_t pud, *pudp;
  931. pmd_t pmd, *pmdp;
  932. pte_t *ptep;
  933. int shift;
  934. unsigned long pte;
  935. kvm = p->kvm;
  936. if (!kvm_is_radix(kvm))
  937. return 0;
  938. ret = mutex_lock_interruptible(&p->mutex);
  939. if (ret)
  940. return ret;
  941. if (p->chars_left) {
  942. n = p->chars_left;
  943. if (n > len)
  944. n = len;
  945. r = copy_to_user(buf, p->buf + p->buf_index, n);
  946. n -= r;
  947. p->chars_left -= n;
  948. p->buf_index += n;
  949. buf += n;
  950. len -= n;
  951. ret = n;
  952. if (r) {
  953. if (!n)
  954. ret = -EFAULT;
  955. goto out;
  956. }
  957. }
  958. gpa = p->gpa;
  959. nested = NULL;
  960. pgt = NULL;
  961. while (len != 0 && p->lpid >= 0) {
  962. if (gpa >= RADIX_PGTABLE_RANGE) {
  963. gpa = 0;
  964. pgt = NULL;
  965. if (nested) {
  966. kvmhv_put_nested(nested);
  967. nested = NULL;
  968. }
  969. p->lpid = kvmhv_nested_next_lpid(kvm, p->lpid);
  970. p->hdr = 0;
  971. if (p->lpid < 0)
  972. break;
  973. }
  974. if (!pgt) {
  975. if (p->lpid == 0) {
  976. pgt = kvm->arch.pgtable;
  977. } else {
  978. nested = kvmhv_get_nested(kvm, p->lpid, false);
  979. if (!nested) {
  980. gpa = RADIX_PGTABLE_RANGE;
  981. continue;
  982. }
  983. pgt = nested->shadow_pgtable;
  984. }
  985. }
  986. n = 0;
  987. if (!p->hdr) {
  988. if (p->lpid > 0)
  989. n = scnprintf(p->buf, sizeof(p->buf),
  990. "\nNested LPID %d: ", p->lpid);
  991. n += scnprintf(p->buf + n, sizeof(p->buf) - n,
  992. "pgdir: %lx\n", (unsigned long)pgt);
  993. p->hdr = 1;
  994. goto copy;
  995. }
  996. pgdp = pgt + pgd_index(gpa);
  997. pgd = READ_ONCE(*pgdp);
  998. if (!(pgd_val(pgd) & _PAGE_PRESENT)) {
  999. gpa = (gpa & PGDIR_MASK) + PGDIR_SIZE;
  1000. continue;
  1001. }
  1002. pudp = pud_offset(&pgd, gpa);
  1003. pud = READ_ONCE(*pudp);
  1004. if (!(pud_val(pud) & _PAGE_PRESENT)) {
  1005. gpa = (gpa & PUD_MASK) + PUD_SIZE;
  1006. continue;
  1007. }
  1008. if (pud_val(pud) & _PAGE_PTE) {
  1009. pte = pud_val(pud);
  1010. shift = PUD_SHIFT;
  1011. goto leaf;
  1012. }
  1013. pmdp = pmd_offset(&pud, gpa);
  1014. pmd = READ_ONCE(*pmdp);
  1015. if (!(pmd_val(pmd) & _PAGE_PRESENT)) {
  1016. gpa = (gpa & PMD_MASK) + PMD_SIZE;
  1017. continue;
  1018. }
  1019. if (pmd_val(pmd) & _PAGE_PTE) {
  1020. pte = pmd_val(pmd);
  1021. shift = PMD_SHIFT;
  1022. goto leaf;
  1023. }
  1024. ptep = pte_offset_kernel(&pmd, gpa);
  1025. pte = pte_val(READ_ONCE(*ptep));
  1026. if (!(pte & _PAGE_PRESENT)) {
  1027. gpa += PAGE_SIZE;
  1028. continue;
  1029. }
  1030. shift = PAGE_SHIFT;
  1031. leaf:
  1032. n = scnprintf(p->buf, sizeof(p->buf),
  1033. " %lx: %lx %d\n", gpa, pte, shift);
  1034. gpa += 1ul << shift;
  1035. copy:
  1036. p->chars_left = n;
  1037. if (n > len)
  1038. n = len;
  1039. r = copy_to_user(buf, p->buf, n);
  1040. n -= r;
  1041. p->chars_left -= n;
  1042. p->buf_index = n;
  1043. buf += n;
  1044. len -= n;
  1045. ret += n;
  1046. if (r) {
  1047. if (!ret)
  1048. ret = -EFAULT;
  1049. break;
  1050. }
  1051. }
  1052. p->gpa = gpa;
  1053. if (nested)
  1054. kvmhv_put_nested(nested);
  1055. out:
  1056. mutex_unlock(&p->mutex);
  1057. return ret;
  1058. }
  1059. static ssize_t debugfs_radix_write(struct file *file, const char __user *buf,
  1060. size_t len, loff_t *ppos)
  1061. {
  1062. return -EACCES;
  1063. }
  1064. static const struct file_operations debugfs_radix_fops = {
  1065. .owner = THIS_MODULE,
  1066. .open = debugfs_radix_open,
  1067. .release = debugfs_radix_release,
  1068. .read = debugfs_radix_read,
  1069. .write = debugfs_radix_write,
  1070. .llseek = generic_file_llseek,
  1071. };
  1072. void kvmhv_radix_debugfs_init(struct kvm *kvm)
  1073. {
  1074. kvm->arch.radix_dentry = debugfs_create_file("radix", 0400,
  1075. kvm->arch.debugfs_dir, kvm,
  1076. &debugfs_radix_fops);
  1077. }
  1078. int kvmppc_radix_init(void)
  1079. {
  1080. unsigned long size = sizeof(void *) << RADIX_PTE_INDEX_SIZE;
  1081. kvm_pte_cache = kmem_cache_create("kvm-pte", size, size, 0, pte_ctor);
  1082. if (!kvm_pte_cache)
  1083. return -ENOMEM;
  1084. size = sizeof(void *) << RADIX_PMD_INDEX_SIZE;
  1085. kvm_pmd_cache = kmem_cache_create("kvm-pmd", size, size, 0, pmd_ctor);
  1086. if (!kvm_pmd_cache) {
  1087. kmem_cache_destroy(kvm_pte_cache);
  1088. return -ENOMEM;
  1089. }
  1090. return 0;
  1091. }
  1092. void kvmppc_radix_exit(void)
  1093. {
  1094. kmem_cache_destroy(kvm_pte_cache);
  1095. kmem_cache_destroy(kvm_pmd_cache);
  1096. }