* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-10-17 4:22 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-10-17 4:22 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: c964ced7726294d40913f2127c3f185a92cb4a41
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 11 months ago
:::::: branch date: 8 hours ago
:::::: commit date: 11 months ago
config: arm64-randconfig-r071-20241015 (https://download.01.org/0day-ci/archive/20241017/202410171233.IsDsnjf9-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.1.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202410171233.IsDsnjf9-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd5 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a586096 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e56 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8 arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5 arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e2259 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512 arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf4 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b2 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77 arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb30869 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960 arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850b arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefd arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-12-16 4:46 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-12-16 4:46 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 78d4f34e2115b517bcbfe7ec0d018bbbb6f9b0b8
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 1 year, 1 month ago
:::::: branch date: 5 hours ago
:::::: commit date: 1 year, 1 month ago
config: arm64-randconfig-r073-20241207 (https://download.01.org/0day-ci/archive/20241216/202412161219.yvUleUYu-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202412161219.yvUleUYu-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd57 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a5860968 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e562 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed0 virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8c arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb1 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5b arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23c virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23c virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e22592 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f774 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512a arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f774 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f103 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f103 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf47 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed0 virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b23 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc2 arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3f virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3f virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4f arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77f arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a58 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a58 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb308690 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f6 arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960a arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850bb arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1f virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefdf arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4f arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-12-14 7:15 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-12-14 7:15 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: a446e965a188ee8f745859e63ce046fe98577d45
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 1 year ago
:::::: branch date: 6 hours ago
:::::: commit date: 1 year ago
config: arm64-randconfig-r073-20241207 (https://download.01.org/0day-ci/archive/20241214/202412141529.P024Z9Gw-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202412141529.P024Z9Gw-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd57 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a5860968 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e562 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed0 virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8c arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb1 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5b arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23c virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23c virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e22592 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f774 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512a arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f774 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f103 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f103 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf47 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed0 virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b23 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc2 arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3f virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3f virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4f arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77f arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a58 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a58 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb308690 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f6 arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960a arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850bb arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1f virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefdf arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4f arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-12-11 16:56 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-12-11 16:56 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: f92f4749861b06fed908d336b4dee1326003291b
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 1 year ago
:::::: branch date: 15 hours ago
:::::: commit date: 1 year ago
config: arm64-randconfig-r073-20241207 (https://download.01.org/0day-ci/archive/20241212/202412120021.Qkspr1Kf-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202412120021.Qkspr1Kf-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd57 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a5860968 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e562 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed0 virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8c arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb1 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5b arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23c virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23c virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e22592 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f774 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512a arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f774 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f103 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f103 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf47 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed0 virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b23 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc2 arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3f virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3f virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4f arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77f arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a58 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a58 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb308690 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f6 arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960a arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850bb arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1f virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefdf arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4f arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-12-09 4:47 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-12-09 4:47 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 7503345ac5f5e82fd9a36d6e6b447c016376403a
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 1 year ago
:::::: branch date: 16 hours ago
:::::: commit date: 1 year ago
config: arm64-randconfig-r073-20241207 (https://download.01.org/0day-ci/archive/20241208/202412081742.hKhGHRT8-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202412081742.hKhGHRT8-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd57 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a5860968 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e562 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed0 virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8c arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb1 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5b arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23c virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23c virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e22592 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f774 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512a arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f774 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f65 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f103 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f103 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3e arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f39855484 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620c arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702a arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf47 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed0 virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e72 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b23 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee6603 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc2 arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3f virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3f virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4f arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77f arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc36209 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a58 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a58 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b48 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a7 arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb308690 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be68 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f6 arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b92 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc78 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588a virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960a arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56ef virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850bb arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1f virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a305568 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d4 arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefdf arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf291 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc1 arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31d arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d297292 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4f arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae8287 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915d arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-10-18 22:52 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-10-18 22:52 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: b04ae0f45168973edb658ac2385045ac13c5aca7
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 11 months ago
:::::: branch date: 4 hours ago
:::::: commit date: 11 months ago
config: arm64-randconfig-r071-20241015 (https://download.01.org/0day-ci/archive/20241019/202410190636.tP4RGFhE-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.1.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202410190636.tP4RGFhE-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd5 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a586096 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e56 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8 arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5 arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e2259 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512 arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf4 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b2 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77 arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb30869 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960 arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850b arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefd arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-10-18 0:18 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-10-18 0:18 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 6efbea77b390604a7be7364583e19cd2d6a1291b
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 11 months ago
:::::: branch date: 7 hours ago
:::::: commit date: 11 months ago
config: arm64-randconfig-r071-20241015 (https://download.01.org/0day-ci/archive/20241018/202410180813.ACTn44ih-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.1.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202410180813.ACTn44ih-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd5 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a586096 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e56 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8 arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5 arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e2259 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512 arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf4 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b2 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77 arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb30869 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960 arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850b arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefd arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-10-16 0:55 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-10-16 0:55 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 2f87d0916ce0d2925cedbc9e8f5d6291ba2ac7b2
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 11 months ago
:::::: branch date: 7 hours ago
:::::: commit date: 11 months ago
config: arm64-randconfig-r071-20241015 (https://download.01.org/0day-ci/archive/20241016/202410160848.LYovAPcr-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.1.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202410160848.LYovAPcr-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd5 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a586096 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e56 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8 arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5 arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e2259 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512 arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf4 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b2 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77 arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb30869 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960 arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850b arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefd arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread* arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
@ 2024-10-15 4:23 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-10-15 4:23 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ard Biesheuvel <ardb@kernel.org>
CC: Marc Zyngier <maz@kernel.org>
Hi Ard,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: eca631b8fe808748d7585059c4307005ca5c5820
commit: 11e5ea5242e38d44fcede879473566bb6d68f954 KVM: arm64: Use helpers to classify exception types reported via ESR
date: 11 months ago
:::::: branch date: 10 hours ago
:::::: commit date: 11 months ago
config: arm64-randconfig-r071-20241015 (https://download.01.org/0day-ci/archive/20241015/202410151236.QrT5L6N0-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.1.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202410151236.QrT5L6N0-lkp@intel.com/
smatch warnings:
arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule'.
vim +/fault_granule +1570 arch/arm64/kvm/mmu.c
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1376
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1377 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
98047888bb9fd5 arch/arm/kvm/mmu.c Christoffer Dall 2014-08-19 1378 struct kvm_memory_slot *memslot, unsigned long hva,
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1379 bool fault_is_perm)
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1380 {
ffd1b63a586096 arch/arm64/kvm/mmu.c Will Deacon 2020-09-30 1381 int ret = 0;
6396b852e46e56 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1382 bool write_fault, writable, force_pte = false;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1383 bool exec_fault, mte_allowed;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1384 bool device = false;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1385 unsigned long mmu_seq;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1386 struct kvm *kvm = vcpu->kvm;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1387 struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1388 struct vm_area_struct *vma;
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1389 short vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1390 gfn_t gfn;
ba049e93aef7e8 arch/arm/kvm/mmu.c Dan Williams 2016-01-15 1391 kvm_pfn_t pfn;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1392 bool logging_active = memslot_is_logging(memslot);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1393 long vma_pagesize, fault_granule;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1394 enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1395 struct kvm_pgtable *pgt;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1396
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1397 if (fault_is_perm)
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1398 fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
a7d079cea2dffb arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-09 1399 write_fault = kvm_is_write_fault(vcpu);
c4ad98e4b72cb5 arch/arm64/kvm/mmu.c Marc Zyngier 2020-09-15 1400 exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1401 VM_BUG_ON(write_fault && exec_fault);
d0e22b4ac3ba23 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1402
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1403 if (fault_is_perm && !write_fault && !exec_fault) {
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1404 kvm_err("Unexpected L2 read permission error\n");
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1405 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1406 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1407
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1408 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1409 * Permission faults just need to update the existing leaf entry,
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1410 * and so normally don't require allocations from the memcache. The
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1411 * only exception to this is when dirty logging is enabled at runtime
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1412 * and a write fault needs to collapse a block entry into a table.
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1413 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1414 if (!fault_is_perm || (logging_active && write_fault)) {
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1415 ret = kvm_mmu_topup_memory_cache(memcache,
fe49fd940e2259 arch/arm64/kvm/mmu.c Marc Zyngier 2023-10-12 1416 kvm_mmu_cache_min_pages(vcpu->arch.hw_mmu));
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1417 if (ret)
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1418 return ret;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1419 }
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1420
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1421 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1422 * Let's check if we will get back a huge page backed by hugetlbfs, or
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1423 * get block mapping for device MMIO region.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1424 */
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1425 mmap_read_lock(current->mm);
09eef83a801512 arch/arm64/kvm/mmu.c Liam Howlett 2021-06-28 1426 vma = vma_lookup(current->mm, hva);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1427 if (unlikely(!vma)) {
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1428 kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
89154dd5313f77 arch/arm64/kvm/mmu.c Michel Lespinasse 2020-06-08 1429 mmap_read_unlock(current->mm);
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1430 return -EFAULT;
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1431 }
37b544087ef3f6 arch/arm/kvm/mmu.c Ard Biesheuvel 2014-09-17 1432
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1433 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1434 * logging_active is guaranteed to never be true for VM_PFNMAP
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1435 * memslots.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1436 */
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1437 if (logging_active) {
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1438 force_pte = true;
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1439 vma_shift = PAGE_SHIFT;
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1440 } else {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1441 vma_shift = get_vma_page_shift(vma, hva);
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1442 }
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1443
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1444 switch (vma_shift) {
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1445 #ifndef __PAGETABLE_PMD_FOLDED
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1446 case PUD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1447 if (fault_supports_stage2_huge_mapping(memslot, hva, PUD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1448 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1449 fallthrough;
faf000397e7f10 arch/arm64/kvm/mmu.c Gavin Shan 2020-11-03 1450 #endif
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1451 case CONT_PMD_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1452 vma_shift = PMD_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1453 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1454 case PMD_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1455 if (fault_supports_stage2_huge_mapping(memslot, hva, PMD_SIZE))
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1456 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1457 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1458 case CONT_PTE_SHIFT:
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1459 vma_shift = PAGE_SHIFT;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1460 force_pte = true;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1461 fallthrough;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1462 case PAGE_SHIFT:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1463 break;
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1464 default:
2f40c46021bbb3 arch/arm64/kvm/mmu.c Gavin Shan 2020-10-26 1465 WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1466 }
a80868f3985548 virt/kvm/arm/mmu.c Suzuki K Poulose 2019-03-12 1467
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1468 vma_pagesize = 1UL << vma_shift;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1469 if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
523b3999e5f620 arch/arm64/kvm/mmu.c Alexandru Elisei 2020-09-10 1470 fault_ipa &= ~(vma_pagesize - 1);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1471
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1472 gfn = fault_ipa >> PAGE_SHIFT;
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1473 mte_allowed = kvm_vma_mte_allowed(vma);
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1474
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1475 /* Don't use the VMA after the unlock -- it may have vanished */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1476 vma = NULL;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1477
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1478 /*
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1479 * Read mmu_invalidate_seq so that KVM can detect if the results of
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1480 * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1481 * acquiring kvm->mmu_lock.
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1482 *
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1483 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1484 * with the smp_wmb() in kvm_mmu_invalidate_end().
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1485 */
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1486 mmu_seq = vcpu->kvm->mmu_invalidate_seq;
13ec9308a85702 arch/arm64/kvm/mmu.c David Matlack 2023-03-13 1487 mmap_read_unlock(current->mm);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1488
c8b88b332bedf4 arch/arm64/kvm/mmu.c Peter Xu 2022-10-11 1489 pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1490 write_fault, &writable, NULL);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1491 if (pfn == KVM_PFN_ERR_HWPOISON) {
1559b7583ff6ed virt/kvm/arm/mmu.c James Morse 2019-12-17 1492 kvm_send_hwpoison_signal(hva, vma_shift);
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1493 return 0;
196f878a7ac2e7 virt/kvm/arm/mmu.c James Morse 2017-06-20 1494 }
9ac715954682b2 arch/arm/kvm/mmu.c Christoffer Dall 2016-08-17 1495 if (is_error_noslot_pfn(pfn))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1496 return -EFAULT;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1497
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1498 if (kvm_is_device_pfn(pfn)) {
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1499 /*
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1500 * If the page was identified as device early by looking at
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1501 * the VMA flags, vma_pagesize is already representing the
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1502 * largest quantity we can map. If instead it was mapped
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1503 * via gfn_to_pfn_prot(), vma_pagesize is set to PAGE_SIZE
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1504 * and must not be upgraded.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1505 *
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1506 * In both cases, we don't let transparent_hugepage_adjust()
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1507 * change things at the last minute.
2aa53d68cee660 arch/arm64/kvm/mmu.c Keqian Zhu 2021-05-07 1508 */
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1509 device = true;
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1510 } else if (logging_active && !write_fault) {
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1511 /*
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1512 * Only actually map the page as writable if this was a write
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1513 * fault.
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1514 */
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1515 writable = false;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1516 }
b88657674d39fc arch/arm/kvm/mmu.c Kim Phillips 2014-06-26 1517
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1518 if (exec_fault && device)
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1519 return -ENOEXEC;
6d674e28f642e3 virt/kvm/arm/mmu.c Marc Zyngier 2019-12-11 1520
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1521 read_lock(&kvm->mmu_lock);
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1522 pgt = vcpu->arch.hw_mmu->pgt;
20ec3ebd707c77 arch/arm64/kvm/mmu.c Chao Peng 2022-08-16 1523 if (mmu_invalidate_retry(kvm, mmu_seq))
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1524 goto out_unlock;
15a49a44fc3620 arch/arm/kvm/mmu.c Mario Smarduch 2015-01-15 1525
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1526 /*
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1527 * If we are not forced to use page mapping, check if we are
0529c9021252a5 arch/arm64/kvm/mmu.c Suzuki K Poulose 2020-05-07 1528 * backed by a THP and thus use block mapping if possible.
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1529 */
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1530 if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1531 if (fault_is_perm && fault_granule > PAGE_SIZE)
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1532 vma_pagesize = fault_granule;
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1533 else
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1534 vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1535 hva, &pfn,
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1536 &fault_ipa);
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1537
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1538 if (vma_pagesize < 0) {
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1539 ret = vma_pagesize;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1540 goto out_unlock;
e86fc1a3a3e9b4 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1541 }
f2cc327303b13a arch/arm64/kvm/mmu.c Marc Zyngier 2021-07-26 1542 }
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1543
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 1544 if (!fault_is_perm && !device && kvm_has_mte(kvm)) {
d89585fbb30869 arch/arm64/kvm/mmu.c Peter Collingbourne 2022-11-03 1545 /* Check the VMM hasn't introduced a new disallowed VMA */
8c2e8ac8ad4be6 arch/arm64/kvm/mmu.c Marc Zyngier 2023-03-16 1546 if (mte_allowed) {
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1547 sanitise_mte_tags(kvm, pfn, vma_pagesize);
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1548 } else {
9f03db6673598f arch/arm64/kvm/mmu.c Marc Zyngier 2021-06-22 1549 ret = -EFAULT;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1550 goto out_unlock;
ea7fc1bb1cd1b9 arch/arm64/kvm/mmu.c Steven Price 2021-06-21 1551 }
2dbf12ae132cc7 arch/arm64/kvm/mmu.c Catalin Marinas 2022-11-03 1552 }
3f58bf63455588 virt/kvm/arm/mmu.c Punit Agrawal 2018-12-11 1553
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1554 if (writable)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1555 prot |= KVM_PGTABLE_PROT_W;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1556
25aa28691bb960 arch/arm64/kvm/mmu.c Yanan Wang 2021-06-17 1557 if (exec_fault)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1558 prot |= KVM_PGTABLE_PROT_X;
a9c0e12ebee56e virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1559
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1560 if (device)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1561 prot |= KVM_PGTABLE_PROT_DEVICE;
d8569fba13850b arch/arm64/kvm/mmu.c Mark Rutland 2023-10-16 1562 else if (cpus_have_final_cap(ARM64_HAS_CACHE_DIC))
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1563 prot |= KVM_PGTABLE_PROT_X;
a15f693935a9f1 virt/kvm/arm/mmu.c Marc Zyngier 2017-10-23 1564
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1565 /*
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1566 * Under the premise of getting a FSC_PERM fault, we just need to relax
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1567 * permissions only if vma_pagesize equals fault_granule. Otherwise,
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1568 * kvm_pgtable_stage2_map() should be called to change block size.
7d894834a30556 arch/arm64/kvm/mmu.c Yanan Wang 2020-12-02 1569 */
11e5ea5242e38d arch/arm64/kvm/mmu.c Ard Biesheuvel 2023-11-28 @1570 if (fault_is_perm && vma_pagesize == fault_granule)
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1571 ret = kvm_pgtable_stage2_relax_perms(pgt, fault_ipa, prot);
1577cb5823cefd arch/arm64/kvm/mmu.c Oliver Upton 2022-11-07 1572 else
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1573 ret = kvm_pgtable_stage2_map(pgt, fault_ipa, vma_pagesize,
6f745f1bb5bf29 arch/arm64/kvm/mmu.c Will Deacon 2020-09-11 1574 __pfn_to_phys(pfn), prot,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1575 memcache,
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1576 KVM_PGTABLE_WALK_HANDLE_FAULT |
ddcadb297ce5cc arch/arm64/kvm/mmu.c Oliver Upton 2022-12-02 1577 KVM_PGTABLE_WALK_SHARED);
ad361f093c1e31 arch/arm/kvm/mmu.c Christoffer Dall 2012-11-01 1578
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1579 /* Mark the page dirty only if the fault is handled successfully */
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1580 if (writable && !ret) {
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1581 kvm_set_pfn_dirty(pfn);
10ba2d17d29729 arch/arm64/kvm/mmu.c Gavin Shan 2021-03-16 1582 mark_page_dirty_in_slot(kvm, memslot, gfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1583 }
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1584
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1585 out_unlock:
f783ef1c0e82e4 arch/arm64/kvm/mmu.c Jing Zhang 2022-01-18 1586 read_unlock(&kvm->mmu_lock);
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1587 kvm_release_pfn_clean(pfn);
509552e65ae828 arch/arm64/kvm/mmu.c Yanan Wang 2021-01-14 1588 return ret != -EAGAIN ? ret : 0;
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1589 }
94f8e6418d3915 arch/arm/kvm/mmu.c Christoffer Dall 2013-01-20 1590
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-12-16 4:47 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-17 4:22 arch/arm64/kvm/mmu.c:1570 user_mem_abort() error: uninitialized symbol 'fault_granule' kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2024-12-16 4:46 kernel test robot
2024-12-14 7:15 kernel test robot
2024-12-11 16:56 kernel test robot
2024-12-09 4:47 kernel test robot
2024-10-18 22:52 kernel test robot
2024-10-18 0:18 kernel test robot
2024-10-16 0:55 kernel test robot
2024-10-15 4:23 kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.