From: Peter Xu <peterx@redhat.com> To: kbuild test robot <lkp@intel.com> Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Yan Zhao <yan.y.zhao@intel.com>, Jason Wang <jasowang@redhat.com>, Alex Williamson <alex.williamson@redhat.com>, Vitaly Kuznetsov <vkuznets@redhat.com>, "Dr . David Alan Gilbert" <dgilbert@redhat.com>, Christophe de Dinechin <dinechin@redhat.com>, "Michael S . Tsirkin" <mst@redhat.com>, Kevin Tian <kevin.tian@intel.com>, Paolo Bonzini <pbonzini@redhat.com>, Sean Christopherson <sean.j.christopherson@intel.com> Subject: Re: [PATCH v6 03/14] KVM: X86: Don't track dirty for KVM_SET_[TSS_ADDR|IDENTITY_MAP_ADDR] Date: Wed, 11 Mar 2020 12:39:06 -0400 [thread overview] Message-ID: <20200311163906.GG479302@xz-x1> (raw) In-Reply-To: <202003110908.UE6SBwLU%lkp@intel.com> On Wed, Mar 11, 2020 at 09:10:04AM +0800, kbuild test robot wrote: > Hi Peter, > > Thank you for the patch! Perhaps something to improve: > > [auto build test WARNING on tip/auto-latest] > [also build test WARNING on vhost/linux-next linus/master v5.6-rc5 next-20200310] > [cannot apply to kvm/linux-next linux/master] > [if your patch is applied to the wrong git tree, please drop us a note to help > improve the system. BTW, we also suggest to use '--base' option to specify the > base tree in git format-patch, please see https://stackoverflow.com/a/37406982] > > url: https://github.com/0day-ci/linux/commits/Peter-Xu/KVM-Dirty-ring-interface/20200310-070637 > base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 12481c76713078054f2d043b3ce946e4814ac29f > reproduce: > # apt-get install sparse > # sparse version: v0.6.1-174-g094d5a94-dirty > make ARCH=x86_64 allmodconfig > make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' > > If you fix the issue, kindly add following tag > Reported-by: kbuild test robot <lkp@intel.com> > > > sparse warnings: (new ones prefixed by >>) > > arch/x86/kvm/x86.c:2599:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] <asn:1> * @@ got const [noderef] <asn:1> * @@ > arch/x86/kvm/x86.c:2599:38: sparse: expected void const [noderef] <asn:1> * > arch/x86/kvm/x86.c:2599:38: sparse: got unsigned char [usertype] * > arch/x86/kvm/x86.c:7501:15: sparse: sparse: incompatible types in comparison expression (different address spaces): > arch/x86/kvm/x86.c:7501:15: sparse: struct kvm_apic_map [noderef] <asn:4> * > arch/x86/kvm/x86.c:7501:15: sparse: struct kvm_apic_map * > >> arch/x86/kvm/x86.c:9794:31: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got n:1> * @@ I'm not sure on how I can reproduce this locally, and also I'm not very sure I understand this warning. I'd be glad to know if anyone knows... If without further hints, I'll try to remove the __user for __x86_set_memory_region() and use a cast on the callers next. Thanks, > arch/x86/kvm/x86.c:9794:31: sparse: expected void [noderef] <asn:1> * > arch/x86/kvm/x86.c:9794:31: sparse: got void * > arch/x86/kvm/x86.c:9799:39: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got n:1> * @@ > arch/x86/kvm/x86.c:9799:39: sparse: expected void [noderef] <asn:1> * > arch/x86/kvm/x86.c:9799:39: sparse: got void * > arch/x86/kvm/x86.c:9811:39: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got n:1> * @@ > arch/x86/kvm/x86.c:9811:39: sparse: expected void [noderef] <asn:1> * > arch/x86/kvm/x86.c:9811:39: sparse: got void * > arch/x86/kvm/x86.c:9827:39: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got n:1> * @@ > arch/x86/kvm/x86.c:9827:39: sparse: expected void [noderef] <asn:1> * > arch/x86/kvm/x86.c:9827:39: sparse: got void * > arch/x86/kvm/x86.c:9863:16: sparse: sparse: incompatible types in comparison expression (different address spaces): > arch/x86/kvm/x86.c:9863:16: sparse: struct kvm_apic_map [noderef] <asn:4> * > arch/x86/kvm/x86.c:9863:16: sparse: struct kvm_apic_map * > arch/x86/kvm/x86.c:9864:15: sparse: sparse: incompatible types in comparison expression (different address spaces): > arch/x86/kvm/x86.c:9864:15: sparse: struct kvm_pmu_event_filter [noderef] <asn:4> * > arch/x86/kvm/x86.c:9864:15: sparse: struct kvm_pmu_event_filter * > include/linux/srcu.h:179:9: sparse: sparse: context imbalance in 'vcpu_enter_guest' - unexpected unlock > > vim +9794 arch/x86/kvm/x86.c > > 9758 > 9759 /** > 9760 * __x86_set_memory_region: Setup KVM internal memory slot > 9761 * > 9762 * @kvm: the kvm pointer to the VM. > 9763 * @id: the slot ID to setup. > 9764 * @gpa: the GPA to install the slot (unused when @size == 0). > 9765 * @size: the size of the slot. Set to zero to uninstall a slot. > 9766 * > 9767 * This function helps to setup a KVM internal memory slot. Specify > 9768 * @size > 0 to install a new slot, while @size == 0 to uninstall a > 9769 * slot. The return code can be one of the following: > 9770 * > 9771 * - An error number if error happened, or, > 9772 * - For installation: the HVA of the newly mapped memory slot, or, > 9773 * - For uninstallation: zero if we successfully uninstall a slot. > 9774 * > 9775 * The caller should always use IS_ERR() to check the return value > 9776 * before use. NOTE: KVM internal memory slots are guaranteed and > 9777 * won't change until the VM is destroyed. This is also true to the > 9778 * returned HVA when installing a new memory slot. The HVA can be > 9779 * invalidated by either an errornous userspace program or a VM under > 9780 * destruction, however as long as we use __copy_{to|from}_user() > 9781 * properly upon the HVAs and handle the failure paths always then > 9782 * we're safe. > 9783 */ > 9784 void __user * __x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa, > 9785 u32 size) > 9786 { > 9787 int i, r; > 9788 unsigned long hva; > 9789 struct kvm_memslots *slots = kvm_memslots(kvm); > 9790 struct kvm_memory_slot *slot, old; > 9791 > 9792 /* Called with kvm->slots_lock held. */ > 9793 if (WARN_ON(id >= KVM_MEM_SLOTS_NUM)) > > 9794 return ERR_PTR(-EINVAL); > 9795 > 9796 slot = id_to_memslot(slots, id); > 9797 if (size) { > 9798 if (slot->npages) > 9799 return ERR_PTR(-EEXIST); > 9800 > 9801 /* > 9802 * MAP_SHARED to prevent internal slot pages from being moved > 9803 * by fork()/COW. > 9804 */ > 9805 hva = vm_mmap(NULL, 0, size, PROT_READ | PROT_WRITE, > 9806 MAP_SHARED | MAP_ANONYMOUS, 0); > 9807 if (IS_ERR((void *)hva)) > 9808 return (void __user *)hva; > 9809 } else { > 9810 if (!slot->npages) > 9811 return ERR_PTR(0); > 9812 > 9813 hva = 0; > 9814 } > 9815 > 9816 old = *slot; > 9817 for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++) { > 9818 struct kvm_userspace_memory_region m; > 9819 > 9820 m.slot = id | (i << 16); > 9821 m.flags = 0; > 9822 m.guest_phys_addr = gpa; > 9823 m.userspace_addr = hva; > 9824 m.memory_size = size; > 9825 r = __kvm_set_memory_region(kvm, &m); > 9826 if (r < 0) > 9827 return ERR_PTR(r); > 9828 } > 9829 > 9830 if (!size) > 9831 vm_munmap(old.userspace_addr, old.npages * PAGE_SIZE); > 9832 > 9833 return (void __user *)hva; > 9834 } > 9835 EXPORT_SYMBOL_GPL(__x86_set_memory_region); > 9836 > > --- > 0-DAY CI Kernel Test Service, Intel Corporation > https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org > -- Peter Xu
WARNING: multiple messages have this Message-ID (diff)
From: Peter Xu <peterx@redhat.com> To: kbuild-all@lists.01.org Subject: Re: [PATCH v6 03/14] KVM: X86: Don't track dirty for KVM_SET_[TSS_ADDR|IDENTITY_MAP_ADDR] Date: Wed, 11 Mar 2020 12:39:06 -0400 [thread overview] Message-ID: <20200311163906.GG479302@xz-x1> (raw) In-Reply-To: <202003110908.UE6SBwLU%lkp@intel.com> [-- Attachment #1: Type: text/plain, Size: 7285 bytes --] On Wed, Mar 11, 2020 at 09:10:04AM +0800, kbuild test robot wrote: > Hi Peter, > > Thank you for the patch! Perhaps something to improve: > > [auto build test WARNING on tip/auto-latest] > [also build test WARNING on vhost/linux-next linus/master v5.6-rc5 next-20200310] > [cannot apply to kvm/linux-next linux/master] > [if your patch is applied to the wrong git tree, please drop us a note to help > improve the system. BTW, we also suggest to use '--base' option to specify the > base tree in git format-patch, please see https://stackoverflow.com/a/37406982] > > url: https://github.com/0day-ci/linux/commits/Peter-Xu/KVM-Dirty-ring-interface/20200310-070637 > base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 12481c76713078054f2d043b3ce946e4814ac29f > reproduce: > # apt-get install sparse > # sparse version: v0.6.1-174-g094d5a94-dirty > make ARCH=x86_64 allmodconfig > make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' > > If you fix the issue, kindly add following tag > Reported-by: kbuild test robot <lkp@intel.com> > > > sparse warnings: (new ones prefixed by >>) > > arch/x86/kvm/x86.c:2599:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] <asn:1> * @@ got const [noderef] <asn:1> * @@ > arch/x86/kvm/x86.c:2599:38: sparse: expected void const [noderef] <asn:1> * > arch/x86/kvm/x86.c:2599:38: sparse: got unsigned char [usertype] * > arch/x86/kvm/x86.c:7501:15: sparse: sparse: incompatible types in comparison expression (different address spaces): > arch/x86/kvm/x86.c:7501:15: sparse: struct kvm_apic_map [noderef] <asn:4> * > arch/x86/kvm/x86.c:7501:15: sparse: struct kvm_apic_map * > >> arch/x86/kvm/x86.c:9794:31: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got n:1> * @@ I'm not sure on how I can reproduce this locally, and also I'm not very sure I understand this warning. I'd be glad to know if anyone knows... If without further hints, I'll try to remove the __user for __x86_set_memory_region() and use a cast on the callers next. Thanks, > arch/x86/kvm/x86.c:9794:31: sparse: expected void [noderef] <asn:1> * > arch/x86/kvm/x86.c:9794:31: sparse: got void * > arch/x86/kvm/x86.c:9799:39: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got n:1> * @@ > arch/x86/kvm/x86.c:9799:39: sparse: expected void [noderef] <asn:1> * > arch/x86/kvm/x86.c:9799:39: sparse: got void * > arch/x86/kvm/x86.c:9811:39: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got n:1> * @@ > arch/x86/kvm/x86.c:9811:39: sparse: expected void [noderef] <asn:1> * > arch/x86/kvm/x86.c:9811:39: sparse: got void * > arch/x86/kvm/x86.c:9827:39: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] <asn:1> * @@ got n:1> * @@ > arch/x86/kvm/x86.c:9827:39: sparse: expected void [noderef] <asn:1> * > arch/x86/kvm/x86.c:9827:39: sparse: got void * > arch/x86/kvm/x86.c:9863:16: sparse: sparse: incompatible types in comparison expression (different address spaces): > arch/x86/kvm/x86.c:9863:16: sparse: struct kvm_apic_map [noderef] <asn:4> * > arch/x86/kvm/x86.c:9863:16: sparse: struct kvm_apic_map * > arch/x86/kvm/x86.c:9864:15: sparse: sparse: incompatible types in comparison expression (different address spaces): > arch/x86/kvm/x86.c:9864:15: sparse: struct kvm_pmu_event_filter [noderef] <asn:4> * > arch/x86/kvm/x86.c:9864:15: sparse: struct kvm_pmu_event_filter * > include/linux/srcu.h:179:9: sparse: sparse: context imbalance in 'vcpu_enter_guest' - unexpected unlock > > vim +9794 arch/x86/kvm/x86.c > > 9758 > 9759 /** > 9760 * __x86_set_memory_region: Setup KVM internal memory slot > 9761 * > 9762 * @kvm: the kvm pointer to the VM. > 9763 * @id: the slot ID to setup. > 9764 * @gpa: the GPA to install the slot (unused when @size == 0). > 9765 * @size: the size of the slot. Set to zero to uninstall a slot. > 9766 * > 9767 * This function helps to setup a KVM internal memory slot. Specify > 9768 * @size > 0 to install a new slot, while @size == 0 to uninstall a > 9769 * slot. The return code can be one of the following: > 9770 * > 9771 * - An error number if error happened, or, > 9772 * - For installation: the HVA of the newly mapped memory slot, or, > 9773 * - For uninstallation: zero if we successfully uninstall a slot. > 9774 * > 9775 * The caller should always use IS_ERR() to check the return value > 9776 * before use. NOTE: KVM internal memory slots are guaranteed and > 9777 * won't change until the VM is destroyed. This is also true to the > 9778 * returned HVA when installing a new memory slot. The HVA can be > 9779 * invalidated by either an errornous userspace program or a VM under > 9780 * destruction, however as long as we use __copy_{to|from}_user() > 9781 * properly upon the HVAs and handle the failure paths always then > 9782 * we're safe. > 9783 */ > 9784 void __user * __x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa, > 9785 u32 size) > 9786 { > 9787 int i, r; > 9788 unsigned long hva; > 9789 struct kvm_memslots *slots = kvm_memslots(kvm); > 9790 struct kvm_memory_slot *slot, old; > 9791 > 9792 /* Called with kvm->slots_lock held. */ > 9793 if (WARN_ON(id >= KVM_MEM_SLOTS_NUM)) > > 9794 return ERR_PTR(-EINVAL); > 9795 > 9796 slot = id_to_memslot(slots, id); > 9797 if (size) { > 9798 if (slot->npages) > 9799 return ERR_PTR(-EEXIST); > 9800 > 9801 /* > 9802 * MAP_SHARED to prevent internal slot pages from being moved > 9803 * by fork()/COW. > 9804 */ > 9805 hva = vm_mmap(NULL, 0, size, PROT_READ | PROT_WRITE, > 9806 MAP_SHARED | MAP_ANONYMOUS, 0); > 9807 if (IS_ERR((void *)hva)) > 9808 return (void __user *)hva; > 9809 } else { > 9810 if (!slot->npages) > 9811 return ERR_PTR(0); > 9812 > 9813 hva = 0; > 9814 } > 9815 > 9816 old = *slot; > 9817 for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++) { > 9818 struct kvm_userspace_memory_region m; > 9819 > 9820 m.slot = id | (i << 16); > 9821 m.flags = 0; > 9822 m.guest_phys_addr = gpa; > 9823 m.userspace_addr = hva; > 9824 m.memory_size = size; > 9825 r = __kvm_set_memory_region(kvm, &m); > 9826 if (r < 0) > 9827 return ERR_PTR(r); > 9828 } > 9829 > 9830 if (!size) > 9831 vm_munmap(old.userspace_addr, old.npages * PAGE_SIZE); > 9832 > 9833 return (void __user *)hva; > 9834 } > 9835 EXPORT_SYMBOL_GPL(__x86_set_memory_region); > 9836 > > --- > 0-DAY CI Kernel Test Service, Intel Corporation > https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org > -- Peter Xu
next prev parent reply other threads:[~2020-03-11 16:39 UTC|newest] Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-09 21:44 [PATCH v6 00/14] KVM: Dirty ring interface Peter Xu 2020-03-09 21:44 ` [PATCH v6 01/14] KVM: X86: Change parameter for fast_page_fault tracepoint Peter Xu 2020-03-09 21:44 ` [PATCH v6 02/14] KVM: Cache as_id in kvm_memory_slot Peter Xu 2020-03-10 14:48 ` Sean Christopherson 2020-03-11 15:48 ` Peter Xu 2020-03-09 21:44 ` [PATCH v6 03/14] KVM: X86: Don't track dirty for KVM_SET_[TSS_ADDR|IDENTITY_MAP_ADDR] Peter Xu 2020-03-10 15:06 ` Sean Christopherson 2020-03-11 16:01 ` Peter Xu 2020-03-11 16:11 ` Sean Christopherson 2020-03-11 1:10 ` kbuild test robot 2020-03-11 1:10 ` kbuild test robot 2020-03-11 16:39 ` Peter Xu [this message] 2020-03-11 16:39 ` Peter Xu 2020-03-11 17:09 ` Sean Christopherson 2020-03-11 17:09 ` Sean Christopherson 2020-03-18 20:04 ` Peter Xu 2020-03-18 20:04 ` Peter Xu 2020-03-09 21:44 ` [PATCH v6 04/14] KVM: Pass in kvm pointer into mark_page_dirty_in_slot() Peter Xu 2020-03-09 21:44 ` [PATCH v6 05/14] KVM: X86: Implement ring-based dirty memory tracking Peter Xu 2020-03-09 22:24 ` [PATCH v6 06/14] KVM: Make dirty ring exclusive to dirty bitmap log Peter Xu 2020-03-09 22:25 ` [PATCH v6 07/14] KVM: Don't allocate dirty bitmap if dirty ring is enabled Peter Xu 2020-03-09 22:25 ` [PATCH v6 08/14] KVM: selftests: Always clear dirty bitmap after iteration Peter Xu 2020-03-09 22:25 ` [PATCH v6 09/14] KVM: selftests: Sync uapi/linux/kvm.h to tools/ Peter Xu 2020-03-09 22:25 ` [PATCH v6 10/14] KVM: selftests: Use a single binary for dirty/clear log test Peter Xu 2020-03-10 8:10 ` Andrew Jones 2020-03-11 17:43 ` Peter Xu 2020-03-11 18:47 ` Andrew Jones 2020-03-09 22:25 ` [PATCH v6 11/14] KVM: selftests: Introduce after_vcpu_run hook for dirty " Peter Xu 2020-03-09 22:25 ` [PATCH v6 12/14] KVM: selftests: Add dirty ring buffer test Peter Xu 2020-03-10 8:18 ` Andrew Jones 2020-03-11 17:44 ` Peter Xu 2020-03-09 22:25 ` [PATCH v6 13/14] KVM: selftests: Let dirty_log_test async for dirty ring test Peter Xu 2020-03-10 8:27 ` Andrew Jones 2020-03-11 17:45 ` Peter Xu 2020-03-09 22:25 ` [PATCH v6 14/14] KVM: selftests: Add "-c" parameter to dirty log test Peter Xu
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200311163906.GG479302@xz-x1 \ --to=peterx@redhat.com \ --cc=alex.williamson@redhat.com \ --cc=dgilbert@redhat.com \ --cc=dinechin@redhat.com \ --cc=jasowang@redhat.com \ --cc=kbuild-all@lists.01.org \ --cc=kevin.tian@intel.com \ --cc=kvm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=lkp@intel.com \ --cc=mst@redhat.com \ --cc=pbonzini@redhat.com \ --cc=sean.j.christopherson@intel.com \ --cc=vkuznets@redhat.com \ --cc=yan.y.zhao@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.