Re: [PATCH 04/10] KVM: Introduce a new guest mapping API

Raslan, KarimAllah
2018-02-23T23:48:52Z

On Fri, 2018-02-23 at 09:37 +0800, kbuild test robot wrote:
> Hi KarimAllah,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on tip/auto-latest]
> [also build test ERROR on v4.16-rc2 next-20180222]
> [cannot apply to kvm/linux-next]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url: https://github.com/0day-ci/linux/commits/KarimAllah-Ahmed/KVM-X86-Handle-guest-memory-that-does-not-have-a-struct-page/20180223-064826
> config: mips-malta_kvm_defconfig (attached as .config)
> compiler: mipsel-linux-gnu-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
> # save the attached .config to linux build tree
> make.cross ARCH=mips
>
> All error/warnings (new ones prefixed by >>):
>
> In file included from include/linux/linkage.h:7:0,
> from include/linux/preempt.h:10,
> from include/linux/hardirq.h:5,
> from include/linux/kvm_host.h:10,
> from arch/mips/kvm/../../../virt/kvm/kvm_main.c:21:
> >
> > >
> > > arch/mips/kvm/../../../virt/kvm/kvm_main.c:1669:19: error: 'kvm_vcpu_gfn_to_kaddr' undeclared here (not in a function); did you mean 'kvm_vcpu_gfn_to_page'?
> EXPORT_SYMBOL_GPL(kvm_vcpu_gfn_to_kaddr);
> ^
> include/linux/export.h:65:16: note: in definition of macro '___EXPORT_SYMBOL'
> extern typeof(sym) sym; \
> ^~~
> >
> > >
> > > arch/mips/kvm/../../../virt/kvm/kvm_main.c:1669:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
> EXPORT_SYMBOL_GPL(kvm_vcpu_gfn_to_kaddr);
> ^~~~~~~~~~~~~~~~~

Ooops! I will make sure I build KVM as a module as well before posting
v2.

I will also drop "kvm_vcpu_map_valid" since it is no longer used.

>
> vim +1669 arch/mips/kvm/../../../virt/kvm/kvm_main.c
>
> 1634
> 1635 bool kvm_vcpu_map(struct kvm_vcpu *vcpu, gfn_t gfn, struct kvm_host_map *map)
> 1636 {
> 1637 kvm_pfn_t pfn;
> 1638 void *kaddr = NULL;
> 1639 struct page *page = NULL;
> 1640
> 1641 if (map->kaddr && map->gfn == gfn)
> 1642 /* If the mapping is valid and guest memory is already mapped */
> 1643 return true;
> 1644 else if (map->kaddr)
> 1645 /* If the mapping is valid but trying to map a different guest pfn */
> 1646 kvm_vcpu_unmap(map);
> 1647
> 1648 pfn = kvm_vcpu_gfn_to_pfn(vcpu, gfn);
> 1649 if (is_error_pfn(pfn))
> 1650 return false;
> 1651
> 1652 if (pfn_valid(pfn)) {
> 1653 page = pfn_to_page(pfn);
> 1654 kaddr = vmap(&page, 1, VM_MAP, PAGE_KERNEL);
> 1655 } else {
> 1656 kaddr = memremap(pfn_to_hpa(pfn), PAGE_SIZE, MEMREMAP_WB);
> 1657 }
> 1658
> 1659 if (!kaddr)
> 1660 return false;
> 1661
> 1662 map->page = page;
> 1663 map->kaddr = kaddr;
> 1664 map->pfn = pfn;
> 1665 map->gfn = gfn;
> 1666
> 1667 return true;
> 1668 }
> >
> > 1669 EXPORT_SYMBOL_GPL(kvm_vcpu_gfn_to_kaddr);
> 1670
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation
Amazon Development Center Germany GmbH
Berlin - Dresden - Aachen
main office: Krausenstr. 38, 10117 Berlin
Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
Ust-ID: DE289237879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B