[kvmarm:queue 26/31] arch/arm/kvm/../../../virt/kvm/arm/mmu.c:1636:20: error: 'S2_PMD_MASK' undeclared; did you mean 'PMD_MASK'?
From: kbuild test robot <hidden>
Date: 2018-12-19 04:51:30
Also in:
kvmarm
tree: https://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git queue head: 0c4011a2150b6d177cdd06c887615594a4693179 commit: 3c780d1840b62d9b5f2abffad6cc1373033ed6ea [26/31] KVM: arm/arm64: Fix unintended stage 2 PMD mappings config: arm-axm55xx_defconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout 3c780d1840b62d9b5f2abffad6cc1373033ed6ea # save the attached .config to linux build tree GCC_VERSION=7.2.0 make.cross ARCH=arm All error/warnings (new ones prefixed by >>): arch/arm/kvm/../../../virt/kvm/arm/mmu.c: In function 'fault_supports_stage2_pmd_mappings':
quoted
arch/arm/kvm/../../../virt/kvm/arm/mmu.c:1636:20: error: 'S2_PMD_MASK' undeclared (first use in this function); did you mean 'PMD_MASK'?
if ((gpa_start & ~S2_PMD_MASK) != (uaddr_start & ~S2_PMD_MASK))
^~~~~~~~~~~
PMD_MASK
arch/arm/kvm/../../../virt/kvm/arm/mmu.c:1636:20: note: each undeclared identifier is reported only once for each function it appears inquoted
arch/arm/kvm/../../../virt/kvm/arm/mmu.c:1652:31: error: 'S2_PMD_SIZE' undeclared (first use in this function); did you mean 'PMD_SIZE'?
(hva & S2_PMD_MASK) + S2_PMD_SIZE <= uaddr_end;
^~~~~~~~~~~
PMD_SIZEquoted
arch/arm/kvm/../../../virt/kvm/arm/mmu.c:1653:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
vim +1636 arch/arm/kvm/../../../virt/kvm/arm/mmu.c
1597
1598 static bool fault_supports_stage2_pmd_mappings(struct kvm_memory_slot *memslot,
1599 unsigned long hva)
1600 {
1601 gpa_t gpa_start, gpa_end;
1602 hva_t uaddr_start, uaddr_end;
1603 size_t size;
1604
1605 size = memslot->npages * PAGE_SIZE;
1606
1607 gpa_start = memslot->base_gfn << PAGE_SHIFT;
1608 gpa_end = gpa_start + size;
1609
1610 uaddr_start = memslot->userspace_addr;
1611 uaddr_end = uaddr_start + size;
1612
1613 /*
1614 * Pages belonging to memslots that don't have the same alignment
1615 * within a PMD for userspace and IPA cannot be mapped with stage-2
1616 * PMD entries, because we'll end up mapping the wrong pages.
1617 *
1618 * Consider a layout like the following:
1619 *
1620 * memslot->userspace_addr:
1621 * +-----+--------------------+--------------------+---+
1622 * |abcde|fgh Stage-1 PMD | Stage-1 PMD tv|xyz|
1623 * +-----+--------------------+--------------------+---+
1624 *
1625 * memslot->base_gfn << PAGE_SIZE:
1626 * +---+--------------------+--------------------+-----+
1627 * |abc|def Stage-2 PMD | Stage-2 PMD |tvxyz|
1628 * +---+--------------------+--------------------+-----+
1629 *
1630 * If we create those stage-2 PMDs, we'll end up with this incorrect
1631 * mapping:
1632 * d -> f
1633 * e -> g
1634 * f -> h
1635 */1636 if ((gpa_start & ~S2_PMD_MASK) != (uaddr_start & ~S2_PMD_MASK))
1637 return false; 1638 1639 /* 1640 * Next, let's make sure we're not trying to map anything not covered 1641 * by the memslot. This means we have to prohibit PMD size mappings 1642 * for the beginning and end of a non-PMD aligned and non-PMD sized 1643 * memory slot (illustrated by the head and tail parts of the 1644 * userspace view above containing pages 'abcde' and 'xyz', 1645 * respectively). 1646 * 1647 * Note that it doesn't matter if we do the check using the 1648 * userspace_addr or the base_gfn, as both are equally aligned (per 1649 * the check above) and equally sized. 1650 */ 1651 return (hva & S2_PMD_MASK) >= uaddr_start &&
1652 (hva & S2_PMD_MASK) + S2_PMD_SIZE <= uaddr_end; 1653 }
1654 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachments
- .config.gz [application/gzip] 20326 bytes
- (unnamed) [text/plain] 176 bytes · preview