1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2019 Western Digital Corporation or its affiliates. 4 * 5 * Authors: 6 * Anup Patel <anup.patel@wdc.com> 7 */ 8 9 #include <linux/errno.h> 10 #include <linux/hugetlb.h> 11 #include <linux/module.h> 12 #include <linux/uaccess.h> 13 #include <linux/vmalloc.h> 14 #include <linux/kvm_host.h> 15 #include <linux/sched/signal.h> 16 #include <asm/kvm_mmu.h> 17 #include <asm/kvm_nacl.h> 18 19 static bool __read_mostly eager_page_split = true; 20 module_param(eager_page_split, bool, 0644); 21 22 static void mmu_wp_memory_region(struct kvm *kvm, int slot) 23 { 24 struct kvm_memslots *slots = kvm_memslots(kvm); 25 struct kvm_memory_slot *memslot = id_to_memslot(slots, slot); 26 phys_addr_t start = memslot->base_gfn << PAGE_SHIFT; 27 phys_addr_t end = (memslot->base_gfn + memslot->npages) << PAGE_SHIFT; 28 struct kvm_gstage gstage; 29 bool flush; 30 31 kvm_riscv_gstage_init(&gstage, kvm); 32 33 write_lock(&kvm->mmu_lock); 34 flush = kvm_riscv_gstage_wp_range(&gstage, start, end); 35 write_unlock(&kvm->mmu_lock); 36 if (flush) 37 kvm_flush_remote_tlbs_memslot(kvm, memslot); 38 } 39 40 int kvm_riscv_mmu_ioremap(struct kvm *kvm, gpa_t gpa, phys_addr_t hpa, 41 unsigned long size, bool writable, bool in_atomic) 42 { 43 int ret = 0; 44 pgprot_t prot; 45 unsigned long pfn; 46 phys_addr_t addr, end; 47 unsigned long pgd_levels = kvm->arch.pgd_levels; 48 struct kvm_mmu_memory_cache pcache = { 49 .gfp_custom = (in_atomic) ? GFP_ATOMIC | __GFP_ACCOUNT : 0, 50 .gfp_zero = __GFP_ZERO, 51 }; 52 struct kvm_gstage_mapping map; 53 struct kvm_gstage gstage; 54 55 kvm_riscv_gstage_init(&gstage, kvm); 56 57 end = (gpa + size + PAGE_SIZE - 1) & PAGE_MASK; 58 pfn = __phys_to_pfn(hpa); 59 prot = pgprot_noncached(PAGE_WRITE); 60 61 for (addr = gpa; addr < end; addr += PAGE_SIZE) { 62 map.addr = addr; 63 map.pte = pfn_pte(pfn, prot); 64 map.pte = pte_mkdirty(map.pte); 65 map.level = 0; 66 67 if (!writable) 68 map.pte = pte_wrprotect(map.pte); 69 70 ret = __kvm_mmu_topup_memory_cache(&pcache, pgd_levels, pgd_levels); 71 if (ret) 72 goto out; 73 74 write_lock(&kvm->mmu_lock); 75 ret = kvm_riscv_gstage_set_pte(&gstage, &pcache, &map); 76 write_unlock(&kvm->mmu_lock); 77 if (ret) 78 goto out; 79 80 pfn++; 81 } 82 83 out: 84 kvm_mmu_free_memory_cache(&pcache); 85 return ret; 86 } 87 88 void kvm_riscv_mmu_iounmap(struct kvm *kvm, gpa_t gpa, unsigned long size) 89 { 90 struct kvm_gstage gstage; 91 bool flush; 92 93 kvm_riscv_gstage_init(&gstage, kvm); 94 95 write_lock(&kvm->mmu_lock); 96 flush = kvm_riscv_gstage_unmap_range(&gstage, gpa, size, false); 97 write_unlock(&kvm->mmu_lock); 98 99 if (flush) 100 kvm_flush_remote_tlbs_range(kvm, gpa >> PAGE_SHIFT, 101 size >> PAGE_SHIFT); 102 } 103 104 static bool need_topup_split_caches_or_resched(struct kvm *kvm, int count) 105 { 106 struct kvm_mmu_memory_cache *cache; 107 108 if (need_resched() || rwlock_needbreak(&kvm->mmu_lock)) 109 return true; 110 111 cache = &kvm->arch.pgd_split_page_cache; 112 return kvm_mmu_memory_cache_nr_free_objects(cache) < count; 113 } 114 115 static bool mmu_split_huge_pages(struct kvm_gstage *gstage, 116 phys_addr_t start, phys_addr_t end) 117 { 118 struct kvm *kvm = gstage->kvm; 119 struct kvm_mmu_memory_cache *pcache = &kvm->arch.pgd_split_page_cache; 120 phys_addr_t addr = ALIGN_DOWN(start, PMD_SIZE); 121 phys_addr_t last_flush_gfn = addr >> PAGE_SHIFT; 122 int count = gstage->pgd_levels; 123 bool flush = false; 124 int ret; 125 126 lockdep_assert_held_write(&kvm->mmu_lock); 127 128 while (addr < end) { 129 if (need_topup_split_caches_or_resched(kvm, count)) { 130 if (flush) { 131 kvm_flush_remote_tlbs_range(kvm, last_flush_gfn, 132 (addr >> PAGE_SHIFT) - last_flush_gfn); 133 last_flush_gfn = addr >> PAGE_SHIFT; 134 flush = false; 135 } 136 137 write_unlock(&kvm->mmu_lock); 138 cond_resched(); 139 140 ret = kvm_mmu_topup_memory_cache(pcache, count); 141 if (ret) { 142 kvm_err("Failed to toup split page cache\n"); 143 write_lock(&kvm->mmu_lock); 144 return flush; 145 } 146 write_lock(&kvm->mmu_lock); 147 } 148 149 if (!kvm->arch.pgd) 150 return flush; 151 152 flush |= kvm_riscv_gstage_split_huge(gstage, pcache, addr, 0, false); 153 154 addr += PMD_SIZE; 155 } 156 157 return flush; 158 } 159 160 void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm, 161 struct kvm_memory_slot *slot, 162 gfn_t gfn_offset, 163 unsigned long mask) 164 { 165 phys_addr_t base_gfn = slot->base_gfn + gfn_offset; 166 phys_addr_t start = (base_gfn + __ffs(mask)) << PAGE_SHIFT; 167 phys_addr_t end = (base_gfn + __fls(mask) + 1) << PAGE_SHIFT; 168 struct kvm_gstage gstage; 169 170 kvm_riscv_gstage_init(&gstage, kvm); 171 172 kvm_riscv_gstage_wp_pt_masked(&gstage, base_gfn, mask); 173 174 if (kvm_dirty_log_manual_protect_and_init_set(kvm)) { 175 if (READ_ONCE(eager_page_split)) 176 mmu_split_huge_pages(&gstage, start, end); 177 } 178 179 /* 180 * Remote TLB flush is not needed here since callers of 181 * kvm_arch_mmu_enable_log_dirty_pt_masked() already do it. 182 */ 183 } 184 185 void kvm_arch_sync_dirty_log(struct kvm *kvm, struct kvm_memory_slot *memslot) 186 { 187 } 188 189 void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free) 190 { 191 } 192 193 void kvm_arch_memslots_updated(struct kvm *kvm, u64 gen) 194 { 195 } 196 197 void kvm_arch_flush_shadow_all(struct kvm *kvm) 198 { 199 kvm_riscv_mmu_free_pgd(kvm); 200 } 201 202 void kvm_arch_flush_shadow_memslot(struct kvm *kvm, 203 struct kvm_memory_slot *slot) 204 { 205 gpa_t gpa = slot->base_gfn << PAGE_SHIFT; 206 phys_addr_t size = slot->npages << PAGE_SHIFT; 207 struct kvm_gstage gstage; 208 bool flush; 209 210 kvm_riscv_gstage_init(&gstage, kvm); 211 212 write_lock(&kvm->mmu_lock); 213 flush = kvm_riscv_gstage_unmap_range(&gstage, gpa, size, false); 214 write_unlock(&kvm->mmu_lock); 215 if (flush) 216 kvm_flush_remote_tlbs_range(kvm, gpa >> PAGE_SHIFT, 217 size >> PAGE_SHIFT); 218 } 219 220 static void mmu_split_memory_region(struct kvm *kvm, int slot) 221 { 222 struct kvm_memslots *slots = kvm_memslots(kvm); 223 struct kvm_memory_slot *memslot = id_to_memslot(slots, slot); 224 phys_addr_t start = memslot->base_gfn << PAGE_SHIFT; 225 phys_addr_t end = (memslot->base_gfn + memslot->npages) << PAGE_SHIFT; 226 struct kvm_gstage gstage; 227 bool flush; 228 229 kvm_riscv_gstage_init(&gstage, kvm); 230 231 write_lock(&kvm->mmu_lock); 232 flush = mmu_split_huge_pages(&gstage, start, end); 233 write_unlock(&kvm->mmu_lock); 234 235 if (flush) 236 kvm_flush_remote_tlbs_memslot(kvm, memslot); 237 } 238 239 void kvm_arch_commit_memory_region(struct kvm *kvm, 240 struct kvm_memory_slot *old, 241 const struct kvm_memory_slot *new, 242 enum kvm_mr_change change) 243 { 244 /* 245 * At this point memslot has been committed and dirty pages will be 246 * tracked while the memory slot is write protected. 247 */ 248 if (change != KVM_MR_DELETE && new->flags & KVM_MEM_LOG_DIRTY_PAGES) { 249 if (kvm_dirty_log_manual_protect_and_init_set(kvm)) 250 return; 251 mmu_wp_memory_region(kvm, new->id); 252 253 if (READ_ONCE(eager_page_split)) 254 mmu_split_memory_region(kvm, new->id); 255 } 256 } 257 258 int kvm_arch_prepare_memory_region(struct kvm *kvm, 259 const struct kvm_memory_slot *old, 260 struct kvm_memory_slot *new, 261 enum kvm_mr_change change) 262 { 263 hva_t hva, reg_end, size; 264 bool writable; 265 int ret = 0; 266 267 if (change != KVM_MR_CREATE && change != KVM_MR_MOVE && 268 change != KVM_MR_FLAGS_ONLY) 269 return 0; 270 271 /* 272 * Prevent userspace from creating a memory region outside of the GPA 273 * space addressable by the KVM guest GPA space. 274 */ 275 if ((new->base_gfn + new->npages) > 276 kvm_riscv_gstage_gpa_size(kvm->arch.pgd_levels) >> PAGE_SHIFT) 277 return -EFAULT; 278 279 hva = new->userspace_addr; 280 size = new->npages << PAGE_SHIFT; 281 reg_end = hva + size; 282 writable = !(new->flags & KVM_MEM_READONLY); 283 284 mmap_read_lock(current->mm); 285 286 /* 287 * A memory region could potentially cover multiple VMAs, and 288 * any holes between them, so iterate over all of them. 289 * 290 * +--------------------------------------------+ 291 * +---------------+----------------+ +----------------+ 292 * | : VMA 1 | VMA 2 | | VMA 3 : | 293 * +---------------+----------------+ +----------------+ 294 * | memory region | 295 * +--------------------------------------------+ 296 */ 297 do { 298 struct vm_area_struct *vma; 299 hva_t vm_end; 300 301 vma = find_vma_intersection(current->mm, hva, reg_end); 302 if (!vma) 303 break; 304 305 /* 306 * Mapping a read-only VMA is only allowed if the 307 * memory region is configured as read-only. 308 */ 309 if (writable && !(vma->vm_flags & VM_WRITE)) { 310 ret = -EPERM; 311 break; 312 } 313 314 /* Take the intersection of this VMA with the memory region */ 315 vm_end = min(reg_end, vma->vm_end); 316 317 if (vma->vm_flags & VM_PFNMAP) { 318 /* IO region dirty page logging not allowed */ 319 if (new->flags & KVM_MEM_LOG_DIRTY_PAGES) { 320 ret = -EINVAL; 321 goto out; 322 } 323 } 324 hva = vm_end; 325 } while (hva < reg_end); 326 327 out: 328 mmap_read_unlock(current->mm); 329 return ret; 330 } 331 332 bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range) 333 { 334 struct kvm_gstage gstage; 335 bool flush; 336 337 if (!kvm->arch.pgd) 338 return false; 339 340 lockdep_assert_held_write(&kvm->mmu_lock); 341 342 kvm_riscv_gstage_init(&gstage, kvm); 343 flush = kvm_riscv_gstage_unmap_range(&gstage, range->start << PAGE_SHIFT, 344 (range->end - range->start) << PAGE_SHIFT, 345 range->may_block); 346 if (flush) 347 kvm_flush_remote_tlbs_range(kvm, range->start, 348 range->end - range->start); 349 return false; 350 } 351 352 bool kvm_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) 353 { 354 pte_t *ptep; 355 u32 ptep_level = 0; 356 u64 size = (range->end - range->start) << PAGE_SHIFT; 357 struct kvm_gstage gstage; 358 359 if (!kvm->arch.pgd) 360 return false; 361 362 WARN_ON(size != PAGE_SIZE && size != PMD_SIZE && size != PUD_SIZE); 363 364 kvm_riscv_gstage_init(&gstage, kvm); 365 if (!kvm_riscv_gstage_get_leaf(&gstage, range->start << PAGE_SHIFT, 366 &ptep, &ptep_level)) 367 return false; 368 369 return ptep_test_and_clear_young(NULL, 0, ptep); 370 } 371 372 bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) 373 { 374 pte_t *ptep; 375 u32 ptep_level = 0; 376 u64 size = (range->end - range->start) << PAGE_SHIFT; 377 struct kvm_gstage gstage; 378 379 if (!kvm->arch.pgd) 380 return false; 381 382 WARN_ON(size != PAGE_SIZE && size != PMD_SIZE && size != PUD_SIZE); 383 384 kvm_riscv_gstage_init(&gstage, kvm); 385 if (!kvm_riscv_gstage_get_leaf(&gstage, range->start << PAGE_SHIFT, 386 &ptep, &ptep_level)) 387 return false; 388 389 return pte_young(ptep_get(ptep)); 390 } 391 392 static bool fault_supports_gstage_huge_mapping(struct kvm_memory_slot *memslot, 393 unsigned long hva, 394 unsigned long map_size) 395 { 396 hva_t uaddr_start, uaddr_end; 397 gpa_t gpa_start; 398 size_t size; 399 400 size = memslot->npages * PAGE_SIZE; 401 uaddr_start = memslot->userspace_addr; 402 uaddr_end = uaddr_start + size; 403 404 gpa_start = memslot->base_gfn << PAGE_SHIFT; 405 406 /* 407 * Pages belonging to memslots that don't have the same alignment 408 * within a huge page for userspace and GPA cannot be mapped with 409 * g-stage block entries, because we'll end up mapping the wrong pages. 410 * 411 * Consider a layout like the following: 412 * 413 * memslot->userspace_addr: 414 * +-----+--------------------+--------------------+---+ 415 * |abcde|fgh vs-stage block | vs-stage block tv|xyz| 416 * +-----+--------------------+--------------------+---+ 417 * 418 * memslot->base_gfn << PAGE_SHIFT: 419 * +---+--------------------+--------------------+-----+ 420 * |abc|def g-stage block | g-stage block |tvxyz| 421 * +---+--------------------+--------------------+-----+ 422 * 423 * If we create those g-stage blocks, we'll end up with this incorrect 424 * mapping: 425 * d -> f 426 * e -> g 427 * f -> h 428 */ 429 if ((gpa_start & (map_size - 1)) != (uaddr_start & (map_size - 1))) 430 return false; 431 432 /* 433 * Next, let's make sure we're not trying to map anything not covered 434 * by the memslot. This means we have to prohibit block size mappings 435 * for the beginning and end of a non-block aligned and non-block sized 436 * memory slot (illustrated by the head and tail parts of the 437 * userspace view above containing pages 'abcde' and 'xyz', 438 * respectively). 439 * 440 * Note that it doesn't matter if we do the check using the 441 * userspace_addr or the base_gfn, as both are equally aligned (per 442 * the check above) and equally sized. 443 */ 444 return (hva >= ALIGN(uaddr_start, map_size)) && 445 (hva < ALIGN_DOWN(uaddr_end, map_size)); 446 } 447 448 static int get_hva_mapping_size(struct kvm *kvm, 449 unsigned long hva) 450 { 451 int size = PAGE_SIZE; 452 unsigned long flags; 453 pgd_t pgd; 454 p4d_t p4d; 455 pud_t pud; 456 pmd_t pmd; 457 458 /* 459 * Disable IRQs to prevent concurrent tear down of host page tables, 460 * e.g. if the primary MMU promotes a P*D to a huge page and then frees 461 * the original page table. 462 */ 463 local_irq_save(flags); 464 465 /* 466 * Read each entry once. As above, a non-leaf entry can be promoted to 467 * a huge page _during_ this walk. Re-reading the entry could send the 468 * walk into the weeks, e.g. p*d_leaf() returns false (sees the old 469 * value) and then p*d_offset() walks into the target huge page instead 470 * of the old page table (sees the new value). 471 */ 472 pgd = pgdp_get(pgd_offset(kvm->mm, hva)); 473 if (pgd_none(pgd)) 474 goto out; 475 476 p4d = p4dp_get(p4d_offset(&pgd, hva)); 477 if (p4d_none(p4d) || !p4d_present(p4d)) 478 goto out; 479 480 pud = pudp_get(pud_offset(&p4d, hva)); 481 if (pud_none(pud) || !pud_present(pud)) 482 goto out; 483 484 if (pud_leaf(pud)) { 485 size = PUD_SIZE; 486 goto out; 487 } 488 489 pmd = pmdp_get(pmd_offset(&pud, hva)); 490 if (pmd_none(pmd) || !pmd_present(pmd)) 491 goto out; 492 493 if (pmd_leaf(pmd)) 494 size = PMD_SIZE; 495 496 out: 497 local_irq_restore(flags); 498 return size; 499 } 500 501 static unsigned long transparent_hugepage_adjust(struct kvm *kvm, 502 struct kvm_memory_slot *memslot, 503 unsigned long hva, 504 kvm_pfn_t *hfnp, gpa_t *gpa) 505 { 506 kvm_pfn_t hfn = *hfnp; 507 508 /* 509 * Make sure the adjustment is done only for THP pages. Also make 510 * sure that the HVA and GPA are sufficiently aligned and that the 511 * block map is contained within the memslot. 512 */ 513 if (fault_supports_gstage_huge_mapping(memslot, hva, PMD_SIZE)) { 514 int sz; 515 516 sz = get_hva_mapping_size(kvm, hva); 517 if (sz < PMD_SIZE) 518 return sz; 519 520 *gpa &= PMD_MASK; 521 hfn &= ~(PTRS_PER_PMD - 1); 522 *hfnp = hfn; 523 524 return PMD_SIZE; 525 } 526 527 return PAGE_SIZE; 528 } 529 530 static unsigned long hugetlb_mapping_size(struct kvm_memory_slot *memslot, 531 unsigned long hva, 532 unsigned long map_size) 533 { 534 switch (map_size) { 535 #ifndef CONFIG_32BIT 536 case PUD_SIZE: 537 if (fault_supports_gstage_huge_mapping(memslot, hva, PUD_SIZE)) 538 return PUD_SIZE; 539 fallthrough; 540 #endif 541 case PMD_SIZE: 542 if (fault_supports_gstage_huge_mapping(memslot, hva, PMD_SIZE)) 543 return PMD_SIZE; 544 fallthrough; 545 case PAGE_SIZE: 546 return PAGE_SIZE; 547 default: 548 return map_size; 549 } 550 } 551 552 static bool kvm_riscv_mmu_dirty_log_write_fault_fast(struct kvm *kvm, 553 struct kvm_memory_slot *memslot, 554 gpa_t gpa, 555 struct kvm_gstage_mapping *out_map) 556 { 557 struct kvm_gstage gstage; 558 unsigned long mmu_seq; 559 pte_t old_pte, new_pte; 560 pte_t *ptep; 561 gfn_t gfn = gpa >> PAGE_SHIFT; 562 u32 ptep_level; 563 bool dirty_marked = false; 564 bool ret; 565 566 kvm_riscv_gstage_init(&gstage, kvm); 567 mmu_seq = kvm->mmu_invalidate_seq; 568 569 read_lock(&kvm->mmu_lock); 570 571 if (mmu_invalidate_retry_gfn(kvm, mmu_seq, gfn)) { 572 ret = false; 573 goto out_unlock; 574 } 575 576 if (!kvm_riscv_gstage_get_leaf(&gstage, gpa, &ptep, &ptep_level) || 577 ptep_level) { 578 ret = false; 579 goto out_unlock; 580 } 581 582 for (;;) { 583 old_pte = ptep_get(ptep); 584 if (!(pte_val(old_pte) & _PAGE_LEAF)) { 585 ret = false; 586 break; 587 } 588 589 if (!dirty_marked) { 590 mark_page_dirty_in_slot(kvm, memslot, gfn); 591 dirty_marked = true; 592 } 593 594 if ((pte_val(old_pte) & (_PAGE_WRITE | _PAGE_DIRTY)) == 595 (_PAGE_WRITE | _PAGE_DIRTY)) { 596 new_pte = old_pte; 597 ret = true; 598 break; 599 } 600 601 new_pte = pte_mkdirty(pte_mkwrite_novma(old_pte)); 602 603 if (kvm_riscv_gstage_try_update_pte(&gstage, ptep_level, gpa, 604 ptep, old_pte, new_pte)) { 605 ret = true; 606 break; 607 } 608 cpu_relax(); 609 } 610 611 out_unlock: 612 read_unlock(&kvm->mmu_lock); 613 614 if (ret) { 615 out_map->addr = gpa & PAGE_MASK; 616 out_map->level = 0; 617 out_map->pte = new_pte; 618 } 619 620 return ret; 621 } 622 623 int kvm_riscv_mmu_map(struct kvm_vcpu *vcpu, struct kvm_memory_slot *memslot, 624 gpa_t gpa, unsigned long hva, bool is_write, 625 struct kvm_gstage_mapping *out_map) 626 { 627 int ret; 628 kvm_pfn_t hfn; 629 bool is_hugetlb; 630 bool writable; 631 unsigned int vma_pageshift; 632 gfn_t gfn = gpa >> PAGE_SHIFT; 633 struct vm_area_struct *vma; 634 struct kvm *kvm = vcpu->kvm; 635 struct kvm_mmu_memory_cache *pcache = &vcpu->arch.mmu_page_cache; 636 bool logging = kvm_slot_dirty_track_enabled(memslot) && 637 !(memslot->flags & KVM_MEM_READONLY); 638 unsigned long vma_pagesize, mmu_seq; 639 struct kvm_gstage gstage; 640 struct page *page; 641 642 kvm_riscv_gstage_init(&gstage, kvm); 643 644 /* Setup initial state of output mapping */ 645 memset(out_map, 0, sizeof(*out_map)); 646 647 if (is_write && logging && 648 kvm_riscv_mmu_dirty_log_write_fault_fast(kvm, memslot, gpa, out_map)) 649 return 0; 650 651 /* We need minimum second+third level pages */ 652 ret = kvm_mmu_topup_memory_cache(pcache, kvm->arch.pgd_levels); 653 if (ret) { 654 kvm_err("Failed to topup G-stage cache\n"); 655 return ret; 656 } 657 658 mmap_read_lock(current->mm); 659 660 vma = vma_lookup(current->mm, hva); 661 if (unlikely(!vma)) { 662 kvm_err("Failed to find VMA for hva 0x%lx\n", hva); 663 mmap_read_unlock(current->mm); 664 return -EFAULT; 665 } 666 667 is_hugetlb = is_vm_hugetlb_page(vma); 668 if (is_hugetlb) 669 vma_pageshift = huge_page_shift(hstate_vma(vma)); 670 else 671 vma_pageshift = PAGE_SHIFT; 672 vma_pagesize = 1ULL << vma_pageshift; 673 if (logging || (vma->vm_flags & VM_PFNMAP)) 674 vma_pagesize = PAGE_SIZE; 675 else if (is_hugetlb) 676 vma_pagesize = hugetlb_mapping_size(memslot, hva, vma_pagesize); 677 678 /* 679 * For hugetlb mappings, vma_pagesize might have been reduced from the 680 * VMA size to a smaller safe mapping size. 681 */ 682 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE) 683 gfn = ALIGN_DOWN(gpa, vma_pagesize) >> PAGE_SHIFT; 684 685 /* 686 * Read mmu_invalidate_seq so that KVM can detect if the results of 687 * vma_lookup() or __kvm_faultin_pfn() become stale prior to acquiring 688 * kvm->mmu_lock. 689 * 690 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs 691 * with the smp_wmb() in kvm_mmu_invalidate_end(). 692 */ 693 mmu_seq = kvm->mmu_invalidate_seq; 694 mmap_read_unlock(current->mm); 695 696 if (vma_pagesize != PUD_SIZE && 697 vma_pagesize != PMD_SIZE && 698 vma_pagesize != PAGE_SIZE) { 699 kvm_err("Invalid VMA page size 0x%lx\n", vma_pagesize); 700 return -EFAULT; 701 } 702 703 hfn = __kvm_faultin_pfn(memslot, gfn, is_write ? FOLL_WRITE : 0, 704 &writable, &page); 705 if (hfn == KVM_PFN_ERR_HWPOISON) { 706 send_sig_mceerr(BUS_MCEERR_AR, (void __user *)hva, 707 vma_pageshift, current); 708 return 0; 709 } 710 if (is_error_noslot_pfn(hfn)) 711 return -EFAULT; 712 713 /* 714 * If logging is active then we allow writable pages only 715 * for write faults. 716 */ 717 if (logging && !is_write) 718 writable = false; 719 720 write_lock(&kvm->mmu_lock); 721 722 if (mmu_invalidate_retry(kvm, mmu_seq)) 723 goto out_unlock; 724 725 /* 726 * Check if we are backed by a THP and thus use block mapping if 727 * possible. Hugetlb mappings already selected their target size above, 728 * so do not promote them through the THP helper. 729 */ 730 if (!logging && !is_hugetlb && vma_pagesize == PAGE_SIZE) 731 vma_pagesize = transparent_hugepage_adjust(kvm, memslot, hva, &hfn, &gpa); 732 733 if (writable) { 734 mark_page_dirty_in_slot(kvm, memslot, gfn); 735 ret = kvm_riscv_gstage_map_page(&gstage, pcache, gpa, hfn << PAGE_SHIFT, 736 vma_pagesize, false, true, out_map); 737 } else { 738 ret = kvm_riscv_gstage_map_page(&gstage, pcache, gpa, hfn << PAGE_SHIFT, 739 vma_pagesize, true, true, out_map); 740 } 741 742 if (ret) 743 kvm_err("Failed to map in G-stage\n"); 744 745 out_unlock: 746 kvm_release_faultin_page(kvm, page, ret && ret != -EEXIST, writable); 747 write_unlock(&kvm->mmu_lock); 748 return ret; 749 } 750 751 int kvm_riscv_mmu_alloc_pgd(struct kvm *kvm) 752 { 753 struct page *pgd_page; 754 755 if (kvm->arch.pgd != NULL) { 756 kvm_err("kvm_arch already initialized?\n"); 757 return -EINVAL; 758 } 759 760 pgd_page = alloc_pages(GFP_KERNEL_ACCOUNT | __GFP_ZERO, 761 get_order(kvm_riscv_gstage_pgd_size)); 762 if (!pgd_page) 763 return -ENOMEM; 764 kvm->arch.pgd = page_to_virt(pgd_page); 765 kvm->arch.pgd_phys = page_to_phys(pgd_page); 766 kvm->arch.pgd_levels = kvm_riscv_gstage_max_pgd_levels; 767 kvm->arch.pgd_split_page_cache.gfp_zero = __GFP_ZERO; 768 769 return 0; 770 } 771 772 void kvm_riscv_mmu_free_pgd(struct kvm *kvm) 773 { 774 struct kvm_gstage gstage; 775 void *pgd = NULL; 776 bool flush = false; 777 778 write_lock(&kvm->mmu_lock); 779 if (kvm->arch.pgd) { 780 kvm_riscv_gstage_init(&gstage, kvm); 781 flush = kvm_riscv_gstage_unmap_range(&gstage, 0UL, 782 kvm_riscv_gstage_gpa_size(kvm->arch.pgd_levels), false); 783 pgd = READ_ONCE(kvm->arch.pgd); 784 kvm->arch.pgd = NULL; 785 kvm->arch.pgd_phys = 0; 786 kvm->arch.pgd_levels = 0; 787 } 788 write_unlock(&kvm->mmu_lock); 789 790 if (flush) 791 kvm_flush_remote_tlbs(kvm); 792 793 if (pgd) 794 free_pages((unsigned long)pgd, get_order(kvm_riscv_gstage_pgd_size)); 795 796 kvm_mmu_free_memory_cache(&kvm->arch.pgd_split_page_cache); 797 } 798 799 void kvm_riscv_mmu_update_hgatp(struct kvm_vcpu *vcpu) 800 { 801 struct kvm_arch *ka = &vcpu->kvm->arch; 802 unsigned long hgatp = kvm_riscv_gstage_mode(ka->pgd_levels) 803 << HGATP_MODE_SHIFT; 804 805 hgatp |= (READ_ONCE(ka->vmid.vmid) << HGATP_VMID_SHIFT) & HGATP_VMID; 806 hgatp |= (ka->pgd_phys >> PAGE_SHIFT) & HGATP_PPN; 807 808 ncsr_write(CSR_HGATP, hgatp); 809 810 if (!kvm_riscv_gstage_vmid_bits()) 811 kvm_riscv_local_hfence_gvma_all(); 812 } 813