CC: kbuild-...@lists.01.org BCC: l...@intel.com CC: linux-ker...@vger.kernel.org TO: Xie Yongji <xieyon...@bytedance.com> CC: "Michael S. Tsirkin" <m...@redhat.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 330f4c53d3c2d8b11d86ec03a964b86dc81452f5 commit: 22af48cf91aae5f2fd32fe811d9be1c52d7a801b vdpa: factor out vhost_vdpa_pa_map() and vhost_vdpa_pa_unmap() date: 6 months ago :::::: branch date: 26 hours ago :::::: commit date: 6 months ago config: microblaze-randconfig-m031-20220308 (https://download.01.org/0day-ci/archive/20220310/202203100646.dnfw7xeq-...@intel.com/config) compiler: microblaze-linux-gcc (GCC) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> Reported-by: Dan Carpenter <dan.carpen...@oracle.com> New smatch warnings: drivers/vhost/vdpa.c:677 vhost_vdpa_pa_map() warn: should '(last_pfn - map_pfn + 1) << 12' be a 64 bit type? drivers/vhost/vdpa.c:679 vhost_vdpa_pa_map() warn: should 'map_pfn << 12' be a 64 bit type? Old smatch warnings: arch/microblaze/include/asm/thread_info.h:91 current_thread_info() error: uninitialized symbol 'sp'. drivers/vhost/vdpa.c:708 vhost_vdpa_pa_map() warn: should '(last_pfn - map_pfn + 1) << 12' be a 64 bit type? drivers/vhost/vdpa.c:709 vhost_vdpa_pa_map() warn: should 'map_pfn << 12' be a 64 bit type? vim +677 drivers/vhost/vdpa.c 4c8cf31885f69e8 Tiwei Bie 2020-03-26 613 22af48cf91aae5f Xie Yongji 2021-08-31 614 static int vhost_vdpa_pa_map(struct vhost_vdpa *v, 22af48cf91aae5f Xie Yongji 2021-08-31 615 u64 iova, u64 size, u64 uaddr, u32 perm) 4c8cf31885f69e8 Tiwei Bie 2020-03-26 616 { 4c8cf31885f69e8 Tiwei Bie 2020-03-26 617 struct vhost_dev *dev = &v->vdev; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 618 struct page **page_list; 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 619 unsigned long list_size = PAGE_SIZE / sizeof(struct page *); 4c8cf31885f69e8 Tiwei Bie 2020-03-26 620 unsigned int gup_flags = FOLL_LONGTERM; 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 621 unsigned long npages, cur_base, map_pfn, last_pfn = 0; ad89653f79f1882 Si-Wei Liu 2020-11-05 622 unsigned long lock_limit, sz2pin, nchunks, i; 22af48cf91aae5f Xie Yongji 2021-08-31 623 u64 start = iova; ad89653f79f1882 Si-Wei Liu 2020-11-05 624 long pinned; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 625 int ret = 0; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 626 ad89653f79f1882 Si-Wei Liu 2020-11-05 627 /* Limit the use of memory for bookkeeping */ 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 628 page_list = (struct page **) __get_free_page(GFP_KERNEL); 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 629 if (!page_list) 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 630 return -ENOMEM; 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 631 22af48cf91aae5f Xie Yongji 2021-08-31 632 if (perm & VHOST_ACCESS_WO) 4c8cf31885f69e8 Tiwei Bie 2020-03-26 633 gup_flags |= FOLL_WRITE; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 634 22af48cf91aae5f Xie Yongji 2021-08-31 635 npages = PFN_UP(size + (iova & ~PAGE_MASK)); ad89653f79f1882 Si-Wei Liu 2020-11-05 636 if (!npages) { ad89653f79f1882 Si-Wei Liu 2020-11-05 637 ret = -EINVAL; ad89653f79f1882 Si-Wei Liu 2020-11-05 638 goto free; ad89653f79f1882 Si-Wei Liu 2020-11-05 639 } 4c8cf31885f69e8 Tiwei Bie 2020-03-26 640 d8ed45c5dcd455f Michel Lespinasse 2020-06-08 641 mmap_read_lock(dev->mm); 4c8cf31885f69e8 Tiwei Bie 2020-03-26 642 729ce5a5bd6fda5 Cai Huoqing 2021-08-02 643 lock_limit = PFN_DOWN(rlimit(RLIMIT_MEMLOCK)); ad89653f79f1882 Si-Wei Liu 2020-11-05 644 if (npages + atomic64_read(&dev->mm->pinned_vm) > lock_limit) { 4c8cf31885f69e8 Tiwei Bie 2020-03-26 645 ret = -ENOMEM; ad89653f79f1882 Si-Wei Liu 2020-11-05 646 goto unlock; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 647 } 4c8cf31885f69e8 Tiwei Bie 2020-03-26 648 22af48cf91aae5f Xie Yongji 2021-08-31 649 cur_base = uaddr & PAGE_MASK; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 650 iova &= PAGE_MASK; ad89653f79f1882 Si-Wei Liu 2020-11-05 651 nchunks = 0; 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 652 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 653 while (npages) { ad89653f79f1882 Si-Wei Liu 2020-11-05 654 sz2pin = min_t(unsigned long, npages, list_size); ad89653f79f1882 Si-Wei Liu 2020-11-05 655 pinned = pin_user_pages(cur_base, sz2pin, 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 656 gup_flags, page_list, NULL); ad89653f79f1882 Si-Wei Liu 2020-11-05 657 if (sz2pin != pinned) { ad89653f79f1882 Si-Wei Liu 2020-11-05 658 if (pinned < 0) { ad89653f79f1882 Si-Wei Liu 2020-11-05 659 ret = pinned; ad89653f79f1882 Si-Wei Liu 2020-11-05 660 } else { ad89653f79f1882 Si-Wei Liu 2020-11-05 661 unpin_user_pages(page_list, pinned); ad89653f79f1882 Si-Wei Liu 2020-11-05 662 ret = -ENOMEM; ad89653f79f1882 Si-Wei Liu 2020-11-05 663 } 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 664 goto out; ad89653f79f1882 Si-Wei Liu 2020-11-05 665 } ad89653f79f1882 Si-Wei Liu 2020-11-05 666 nchunks++; 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 667 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 668 if (!last_pfn) 4c8cf31885f69e8 Tiwei Bie 2020-03-26 669 map_pfn = page_to_pfn(page_list[0]); 4c8cf31885f69e8 Tiwei Bie 2020-03-26 670 ad89653f79f1882 Si-Wei Liu 2020-11-05 671 for (i = 0; i < pinned; i++) { 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 672 unsigned long this_pfn = page_to_pfn(page_list[i]); 4c8cf31885f69e8 Tiwei Bie 2020-03-26 673 u64 csize; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 674 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 675 if (last_pfn && (this_pfn != last_pfn + 1)) { 4c8cf31885f69e8 Tiwei Bie 2020-03-26 676 /* Pin a contiguous chunk of memory */ 729ce5a5bd6fda5 Cai Huoqing 2021-08-02 @677 csize = PFN_PHYS(last_pfn - map_pfn + 1); ad89653f79f1882 Si-Wei Liu 2020-11-05 678 ret = vhost_vdpa_map(v, iova, csize, 729ce5a5bd6fda5 Cai Huoqing 2021-08-02 @679 PFN_PHYS(map_pfn), 22af48cf91aae5f Xie Yongji 2021-08-31 680 perm); ad89653f79f1882 Si-Wei Liu 2020-11-05 681 if (ret) { ad89653f79f1882 Si-Wei Liu 2020-11-05 682 /* ad89653f79f1882 Si-Wei Liu 2020-11-05 683 * Unpin the pages that are left unmapped ad89653f79f1882 Si-Wei Liu 2020-11-05 684 * from this point on in the current ad89653f79f1882 Si-Wei Liu 2020-11-05 685 * page_list. The remaining outstanding ad89653f79f1882 Si-Wei Liu 2020-11-05 686 * ones which may stride across several ad89653f79f1882 Si-Wei Liu 2020-11-05 687 * chunks will be covered in the common ad89653f79f1882 Si-Wei Liu 2020-11-05 688 * error path subsequently. ad89653f79f1882 Si-Wei Liu 2020-11-05 689 */ ad89653f79f1882 Si-Wei Liu 2020-11-05 690 unpin_user_pages(&page_list[i], ad89653f79f1882 Si-Wei Liu 2020-11-05 691 pinned - i); 4c8cf31885f69e8 Tiwei Bie 2020-03-26 692 goto out; ad89653f79f1882 Si-Wei Liu 2020-11-05 693 } ad89653f79f1882 Si-Wei Liu 2020-11-05 694 4c8cf31885f69e8 Tiwei Bie 2020-03-26 695 map_pfn = this_pfn; 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 696 iova += csize; ad89653f79f1882 Si-Wei Liu 2020-11-05 697 nchunks = 0; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 698 } 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 699 4c8cf31885f69e8 Tiwei Bie 2020-03-26 700 last_pfn = this_pfn; 4c8cf31885f69e8 Tiwei Bie 2020-03-26 701 } 4c8cf31885f69e8 Tiwei Bie 2020-03-26 702 729ce5a5bd6fda5 Cai Huoqing 2021-08-02 703 cur_base += PFN_PHYS(pinned); ad89653f79f1882 Si-Wei Liu 2020-11-05 704 npages -= pinned; 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 705 } 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 706 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 707 /* Pin the rest chunk */ 729ce5a5bd6fda5 Cai Huoqing 2021-08-02 708 ret = vhost_vdpa_map(v, iova, PFN_PHYS(last_pfn - map_pfn + 1), 22af48cf91aae5f Xie Yongji 2021-08-31 709 PFN_PHYS(map_pfn), perm); 4c8cf31885f69e8 Tiwei Bie 2020-03-26 710 out: 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 711 if (ret) { ad89653f79f1882 Si-Wei Liu 2020-11-05 712 if (nchunks) { ad89653f79f1882 Si-Wei Liu 2020-11-05 713 unsigned long pfn; ad89653f79f1882 Si-Wei Liu 2020-11-05 714 ad89653f79f1882 Si-Wei Liu 2020-11-05 715 /* ad89653f79f1882 Si-Wei Liu 2020-11-05 716 * Unpin the outstanding pages which are yet to be ad89653f79f1882 Si-Wei Liu 2020-11-05 717 * mapped but haven't due to vdpa_map() or ad89653f79f1882 Si-Wei Liu 2020-11-05 718 * pin_user_pages() failure. ad89653f79f1882 Si-Wei Liu 2020-11-05 719 * ad89653f79f1882 Si-Wei Liu 2020-11-05 720 * Mapped pages are accounted in vdpa_map(), hence ad89653f79f1882 Si-Wei Liu 2020-11-05 721 * the corresponding unpinning will be handled by ad89653f79f1882 Si-Wei Liu 2020-11-05 722 * vdpa_unmap(). ad89653f79f1882 Si-Wei Liu 2020-11-05 723 */ ad89653f79f1882 Si-Wei Liu 2020-11-05 724 WARN_ON(!last_pfn); ad89653f79f1882 Si-Wei Liu 2020-11-05 725 for (pfn = map_pfn; pfn <= last_pfn; pfn++) ad89653f79f1882 Si-Wei Liu 2020-11-05 726 unpin_user_page(pfn_to_page(pfn)); ad89653f79f1882 Si-Wei Liu 2020-11-05 727 } 22af48cf91aae5f Xie Yongji 2021-08-31 728 vhost_vdpa_unmap(v, start, size); 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 729 } ad89653f79f1882 Si-Wei Liu 2020-11-05 730 unlock: d8ed45c5dcd455f Michel Lespinasse 2020-06-08 731 mmap_read_unlock(dev->mm); ad89653f79f1882 Si-Wei Liu 2020-11-05 732 free: 5e1a3149eec8675 Michael S. Tsirkin 2020-10-29 733 free_page((unsigned long)page_list); 4c8cf31885f69e8 Tiwei Bie 2020-03-26 734 return ret; 22af48cf91aae5f Xie Yongji 2021-08-31 735 :::::: The code at line 677 was first introduced by commit :::::: 729ce5a5bd6fda5eb2322a39db2287f1f26f92f3 vdpa: Make use of PFN_PHYS/PFN_UP/PFN_DOWN helper macro :::::: TO: Cai Huoqing <caihuoq...@baidu.com> :::::: CC: Michael S. Tsirkin <m...@redhat.com> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org