tree: https://github.com/jgunthorpe/linux for-yishai head: fbe06ba07d5a363aa078ac4d0274fa8ca7151c90 commit: 6422fcb801b64b3c2854096ffc6440f158ed9c04 [29/35] RDMA/mlx5: Use ib_umem_find_best_pgsz() for devx config: x86_64-randconfig-r033-20200826 (attached as .config) compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 7cfcecece0e0430937cf529ce74d3a071a4dedc6) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu git checkout 6422fcb801b64b3c2854096ffc6440f158ed9c04 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>): In file included from drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c:56: In file included from drivers/infiniband/hw/vmw_pvrdma/pvrdma.h:56: include/rdma/ib_umem.h:86:29: error: conflicting types for 'ib_umem_find_best_pgsz' static inline unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem, ^ include/rdma/ib_umem.h:80:29: note: previous definition is here static inline unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem, ^ >> drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c:842:29: warning: shift count >= width of type [-Wshift-count-overflow] if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) { ^~~~~~~~~~~~~~~~ include/linux/dma-mapping.h:139:54: note: expanded from macro 'DMA_BIT_MASK' #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) ^ ~~~ drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c:843:43: warning: shift count >= width of type [-Wshift-count-overflow] ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); ^~~~~~~~~~~~~~~~ include/linux/dma-mapping.h:139:54: note: expanded from macro 'DMA_BIT_MASK' #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) ^ ~~~ 2 warnings and 1 error generated. # https://github.com/jgunthorpe/linux/commit/6422fcb801b64b3c2854096ffc6440f158ed9c04 git remote add jgunthorpe https://github.com/jgunthorpe/linux git fetch --no-tags jgunthorpe for-yishai git checkout 6422fcb801b64b3c2854096ffc6440f158ed9c04 vim +842 drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c 29c8d9eba550c6d Adit Ranadive 2016-10-02 778 29c8d9eba550c6d Adit Ranadive 2016-10-02 779 static int pvrdma_pci_probe(struct pci_dev *pdev, 29c8d9eba550c6d Adit Ranadive 2016-10-02 780 const struct pci_device_id *id) 29c8d9eba550c6d Adit Ranadive 2016-10-02 781 { 29c8d9eba550c6d Adit Ranadive 2016-10-02 782 struct pci_dev *pdev_net; 29c8d9eba550c6d Adit Ranadive 2016-10-02 783 struct pvrdma_dev *dev; 29c8d9eba550c6d Adit Ranadive 2016-10-02 784 int ret; 29c8d9eba550c6d Adit Ranadive 2016-10-02 785 unsigned long start; 29c8d9eba550c6d Adit Ranadive 2016-10-02 786 unsigned long len; 29c8d9eba550c6d Adit Ranadive 2016-10-02 787 dma_addr_t slot_dma = 0; 29c8d9eba550c6d Adit Ranadive 2016-10-02 788 29c8d9eba550c6d Adit Ranadive 2016-10-02 789 dev_dbg(&pdev->dev, "initializing driver %s\n", pci_name(pdev)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 790 29c8d9eba550c6d Adit Ranadive 2016-10-02 791 /* Allocate zero-out device */ 459cc69fa4c17ca Leon Romanovsky 2019-01-30 792 dev = ib_alloc_device(pvrdma_dev, ib_dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 793 if (!dev) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 794 dev_err(&pdev->dev, "failed to allocate IB device\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 795 return -ENOMEM; 29c8d9eba550c6d Adit Ranadive 2016-10-02 796 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 797 29c8d9eba550c6d Adit Ranadive 2016-10-02 798 mutex_lock(&pvrdma_device_list_lock); 29c8d9eba550c6d Adit Ranadive 2016-10-02 799 list_add(&dev->device_link, &pvrdma_device_list); 29c8d9eba550c6d Adit Ranadive 2016-10-02 800 mutex_unlock(&pvrdma_device_list_lock); 29c8d9eba550c6d Adit Ranadive 2016-10-02 801 29c8d9eba550c6d Adit Ranadive 2016-10-02 802 ret = pvrdma_init_device(dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 803 if (ret) 29c8d9eba550c6d Adit Ranadive 2016-10-02 804 goto err_free_device; 29c8d9eba550c6d Adit Ranadive 2016-10-02 805 29c8d9eba550c6d Adit Ranadive 2016-10-02 806 dev->pdev = pdev; 29c8d9eba550c6d Adit Ranadive 2016-10-02 807 pci_set_drvdata(pdev, dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 808 29c8d9eba550c6d Adit Ranadive 2016-10-02 809 ret = pci_enable_device(pdev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 810 if (ret) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 811 dev_err(&pdev->dev, "cannot enable PCI device\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 812 goto err_free_device; 29c8d9eba550c6d Adit Ranadive 2016-10-02 813 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 814 29c8d9eba550c6d Adit Ranadive 2016-10-02 815 dev_dbg(&pdev->dev, "PCI resource flags BAR0 %#lx\n", 29c8d9eba550c6d Adit Ranadive 2016-10-02 816 pci_resource_flags(pdev, 0)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 817 dev_dbg(&pdev->dev, "PCI resource len %#llx\n", 29c8d9eba550c6d Adit Ranadive 2016-10-02 818 (unsigned long long)pci_resource_len(pdev, 0)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 819 dev_dbg(&pdev->dev, "PCI resource start %#llx\n", 29c8d9eba550c6d Adit Ranadive 2016-10-02 820 (unsigned long long)pci_resource_start(pdev, 0)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 821 dev_dbg(&pdev->dev, "PCI resource flags BAR1 %#lx\n", 29c8d9eba550c6d Adit Ranadive 2016-10-02 822 pci_resource_flags(pdev, 1)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 823 dev_dbg(&pdev->dev, "PCI resource len %#llx\n", 29c8d9eba550c6d Adit Ranadive 2016-10-02 824 (unsigned long long)pci_resource_len(pdev, 1)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 825 dev_dbg(&pdev->dev, "PCI resource start %#llx\n", 29c8d9eba550c6d Adit Ranadive 2016-10-02 826 (unsigned long long)pci_resource_start(pdev, 1)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 827 29c8d9eba550c6d Adit Ranadive 2016-10-02 828 if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM) || 29c8d9eba550c6d Adit Ranadive 2016-10-02 829 !(pci_resource_flags(pdev, 1) & IORESOURCE_MEM)) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 830 dev_err(&pdev->dev, "PCI BAR region not MMIO\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 831 ret = -ENOMEM; db857e6ae548f0f Qiushi Wu 2020-05-22 832 goto err_disable_pdev; 29c8d9eba550c6d Adit Ranadive 2016-10-02 833 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 834 29c8d9eba550c6d Adit Ranadive 2016-10-02 835 ret = pci_request_regions(pdev, DRV_NAME); 29c8d9eba550c6d Adit Ranadive 2016-10-02 836 if (ret) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 837 dev_err(&pdev->dev, "cannot request PCI resources\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 838 goto err_disable_pdev; 29c8d9eba550c6d Adit Ranadive 2016-10-02 839 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 840 29c8d9eba550c6d Adit Ranadive 2016-10-02 841 /* Enable 64-Bit DMA */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 @842 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 843 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 844 if (ret != 0) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 845 dev_err(&pdev->dev, 29c8d9eba550c6d Adit Ranadive 2016-10-02 846 "pci_set_consistent_dma_mask failed\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 847 goto err_free_resource; 29c8d9eba550c6d Adit Ranadive 2016-10-02 848 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 849 } else { 29c8d9eba550c6d Adit Ranadive 2016-10-02 850 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 851 if (ret != 0) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 852 dev_err(&pdev->dev, 29c8d9eba550c6d Adit Ranadive 2016-10-02 853 "pci_set_dma_mask failed\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 854 goto err_free_resource; 29c8d9eba550c6d Adit Ranadive 2016-10-02 855 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 856 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 857 29c8d9eba550c6d Adit Ranadive 2016-10-02 858 pci_set_master(pdev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 859 29c8d9eba550c6d Adit Ranadive 2016-10-02 860 /* Map register space */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 861 start = pci_resource_start(dev->pdev, PVRDMA_PCI_RESOURCE_REG); 29c8d9eba550c6d Adit Ranadive 2016-10-02 862 len = pci_resource_len(dev->pdev, PVRDMA_PCI_RESOURCE_REG); 29c8d9eba550c6d Adit Ranadive 2016-10-02 863 dev->regs = ioremap(start, len); 29c8d9eba550c6d Adit Ranadive 2016-10-02 864 if (!dev->regs) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 865 dev_err(&pdev->dev, "register mapping failed\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 866 ret = -ENOMEM; 29c8d9eba550c6d Adit Ranadive 2016-10-02 867 goto err_free_resource; 29c8d9eba550c6d Adit Ranadive 2016-10-02 868 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 869 29c8d9eba550c6d Adit Ranadive 2016-10-02 870 /* Setup per-device UAR. */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 871 dev->driver_uar.index = 0; 29c8d9eba550c6d Adit Ranadive 2016-10-02 872 dev->driver_uar.pfn = 29c8d9eba550c6d Adit Ranadive 2016-10-02 873 pci_resource_start(dev->pdev, PVRDMA_PCI_RESOURCE_UAR) >> 29c8d9eba550c6d Adit Ranadive 2016-10-02 874 PAGE_SHIFT; 29c8d9eba550c6d Adit Ranadive 2016-10-02 875 dev->driver_uar.map = 29c8d9eba550c6d Adit Ranadive 2016-10-02 876 ioremap(dev->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE); 29c8d9eba550c6d Adit Ranadive 2016-10-02 877 if (!dev->driver_uar.map) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 878 dev_err(&pdev->dev, "failed to remap UAR pages\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 879 ret = -ENOMEM; 29c8d9eba550c6d Adit Ranadive 2016-10-02 880 goto err_unmap_regs; 29c8d9eba550c6d Adit Ranadive 2016-10-02 881 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 882 05297b66ad874f6 Bryan Tan 2017-08-22 883 dev->dsr_version = pvrdma_read_reg(dev, PVRDMA_REG_VERSION); 29c8d9eba550c6d Adit Ranadive 2016-10-02 884 dev_info(&pdev->dev, "device version %d, driver version %d\n", 05297b66ad874f6 Bryan Tan 2017-08-22 885 dev->dsr_version, PVRDMA_VERSION); 29c8d9eba550c6d Adit Ranadive 2016-10-02 886 750afb08ca71310 Luis Chamberlain 2019-01-04 887 dev->dsr = dma_alloc_coherent(&pdev->dev, sizeof(*dev->dsr), 29c8d9eba550c6d Adit Ranadive 2016-10-02 888 &dev->dsrbase, GFP_KERNEL); 29c8d9eba550c6d Adit Ranadive 2016-10-02 889 if (!dev->dsr) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 890 dev_err(&pdev->dev, "failed to allocate shared region\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 891 ret = -ENOMEM; 29c8d9eba550c6d Adit Ranadive 2016-10-02 892 goto err_uar_unmap; 29c8d9eba550c6d Adit Ranadive 2016-10-02 893 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 894 29c8d9eba550c6d Adit Ranadive 2016-10-02 895 /* Setup the shared region */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 896 dev->dsr->driver_version = PVRDMA_VERSION; 29c8d9eba550c6d Adit Ranadive 2016-10-02 897 dev->dsr->gos_info.gos_bits = sizeof(void *) == 4 ? 29c8d9eba550c6d Adit Ranadive 2016-10-02 898 PVRDMA_GOS_BITS_32 : 29c8d9eba550c6d Adit Ranadive 2016-10-02 899 PVRDMA_GOS_BITS_64; 29c8d9eba550c6d Adit Ranadive 2016-10-02 900 dev->dsr->gos_info.gos_type = PVRDMA_GOS_TYPE_LINUX; 29c8d9eba550c6d Adit Ranadive 2016-10-02 901 dev->dsr->gos_info.gos_ver = 1; 8aa04ad3b39396e Adit Ranadive 2019-01-26 902 8aa04ad3b39396e Adit Ranadive 2019-01-26 903 if (dev->dsr_version < PVRDMA_PPN64_VERSION) 29c8d9eba550c6d Adit Ranadive 2016-10-02 904 dev->dsr->uar_pfn = dev->driver_uar.pfn; 8aa04ad3b39396e Adit Ranadive 2019-01-26 905 else 8aa04ad3b39396e Adit Ranadive 2019-01-26 906 dev->dsr->uar_pfn64 = dev->driver_uar.pfn; 29c8d9eba550c6d Adit Ranadive 2016-10-02 907 29c8d9eba550c6d Adit Ranadive 2016-10-02 908 /* Command slot. */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 909 dev->cmd_slot = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, 29c8d9eba550c6d Adit Ranadive 2016-10-02 910 &slot_dma, GFP_KERNEL); 29c8d9eba550c6d Adit Ranadive 2016-10-02 911 if (!dev->cmd_slot) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 912 ret = -ENOMEM; 29c8d9eba550c6d Adit Ranadive 2016-10-02 913 goto err_free_dsr; 29c8d9eba550c6d Adit Ranadive 2016-10-02 914 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 915 29c8d9eba550c6d Adit Ranadive 2016-10-02 916 dev->dsr->cmd_slot_dma = (u64)slot_dma; 29c8d9eba550c6d Adit Ranadive 2016-10-02 917 29c8d9eba550c6d Adit Ranadive 2016-10-02 918 /* Response slot. */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 919 dev->resp_slot = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, 29c8d9eba550c6d Adit Ranadive 2016-10-02 920 &slot_dma, GFP_KERNEL); 29c8d9eba550c6d Adit Ranadive 2016-10-02 921 if (!dev->resp_slot) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 922 ret = -ENOMEM; 29c8d9eba550c6d Adit Ranadive 2016-10-02 923 goto err_free_slots; 29c8d9eba550c6d Adit Ranadive 2016-10-02 924 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 925 29c8d9eba550c6d Adit Ranadive 2016-10-02 926 dev->dsr->resp_slot_dma = (u64)slot_dma; 29c8d9eba550c6d Adit Ranadive 2016-10-02 927 29c8d9eba550c6d Adit Ranadive 2016-10-02 928 /* Async event ring */ 6332dee83d8eab8 Adit Ranadive 2017-02-22 929 dev->dsr->async_ring_pages.num_pages = PVRDMA_NUM_RING_PAGES; 29c8d9eba550c6d Adit Ranadive 2016-10-02 930 ret = pvrdma_page_dir_init(dev, &dev->async_pdir, 29c8d9eba550c6d Adit Ranadive 2016-10-02 931 dev->dsr->async_ring_pages.num_pages, true); 29c8d9eba550c6d Adit Ranadive 2016-10-02 932 if (ret) 29c8d9eba550c6d Adit Ranadive 2016-10-02 933 goto err_free_slots; 29c8d9eba550c6d Adit Ranadive 2016-10-02 934 dev->async_ring_state = dev->async_pdir.pages[0]; 29c8d9eba550c6d Adit Ranadive 2016-10-02 935 dev->dsr->async_ring_pages.pdir_dma = dev->async_pdir.dir_dma; 29c8d9eba550c6d Adit Ranadive 2016-10-02 936 29c8d9eba550c6d Adit Ranadive 2016-10-02 937 /* CQ notification ring */ 6332dee83d8eab8 Adit Ranadive 2017-02-22 938 dev->dsr->cq_ring_pages.num_pages = PVRDMA_NUM_RING_PAGES; 29c8d9eba550c6d Adit Ranadive 2016-10-02 939 ret = pvrdma_page_dir_init(dev, &dev->cq_pdir, 29c8d9eba550c6d Adit Ranadive 2016-10-02 940 dev->dsr->cq_ring_pages.num_pages, true); 29c8d9eba550c6d Adit Ranadive 2016-10-02 941 if (ret) 29c8d9eba550c6d Adit Ranadive 2016-10-02 942 goto err_free_async_ring; 29c8d9eba550c6d Adit Ranadive 2016-10-02 943 dev->cq_ring_state = dev->cq_pdir.pages[0]; 29c8d9eba550c6d Adit Ranadive 2016-10-02 944 dev->dsr->cq_ring_pages.pdir_dma = dev->cq_pdir.dir_dma; 29c8d9eba550c6d Adit Ranadive 2016-10-02 945 29c8d9eba550c6d Adit Ranadive 2016-10-02 946 /* 29c8d9eba550c6d Adit Ranadive 2016-10-02 947 * Write the PA of the shared region to the device. The writes must be 29c8d9eba550c6d Adit Ranadive 2016-10-02 948 * ordered such that the high bits are written last. When the writes 29c8d9eba550c6d Adit Ranadive 2016-10-02 949 * complete, the device will have filled out the capabilities. 29c8d9eba550c6d Adit Ranadive 2016-10-02 950 */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 951 29c8d9eba550c6d Adit Ranadive 2016-10-02 952 pvrdma_write_reg(dev, PVRDMA_REG_DSRLOW, (u32)dev->dsrbase); 29c8d9eba550c6d Adit Ranadive 2016-10-02 953 pvrdma_write_reg(dev, PVRDMA_REG_DSRHIGH, 29c8d9eba550c6d Adit Ranadive 2016-10-02 954 (u32)((u64)(dev->dsrbase) >> 32)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 955 29c8d9eba550c6d Adit Ranadive 2016-10-02 956 /* Make sure the write is complete before reading status. */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 957 mb(); 29c8d9eba550c6d Adit Ranadive 2016-10-02 958 05297b66ad874f6 Bryan Tan 2017-08-22 959 /* The driver supports RoCE V1 and V2. */ 05297b66ad874f6 Bryan Tan 2017-08-22 960 if (!PVRDMA_SUPPORTED(dev)) { 05297b66ad874f6 Bryan Tan 2017-08-22 961 dev_err(&pdev->dev, "driver needs RoCE v1 or v2 support\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 962 ret = -EFAULT; 29c8d9eba550c6d Adit Ranadive 2016-10-02 963 goto err_free_cq_ring; 29c8d9eba550c6d Adit Ranadive 2016-10-02 964 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 965 29c8d9eba550c6d Adit Ranadive 2016-10-02 966 /* Paired vmxnet3 will have same bus, slot. But func will be 0 */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 967 pdev_net = pci_get_slot(pdev->bus, PCI_DEVFN(PCI_SLOT(pdev->devfn), 0)); 29c8d9eba550c6d Adit Ranadive 2016-10-02 968 if (!pdev_net) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 969 dev_err(&pdev->dev, "failed to find paired net device\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 970 ret = -ENODEV; 29c8d9eba550c6d Adit Ranadive 2016-10-02 971 goto err_free_cq_ring; 29c8d9eba550c6d Adit Ranadive 2016-10-02 972 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 973 29c8d9eba550c6d Adit Ranadive 2016-10-02 974 if (pdev_net->vendor != PCI_VENDOR_ID_VMWARE || 29c8d9eba550c6d Adit Ranadive 2016-10-02 975 pdev_net->device != PCI_DEVICE_ID_VMWARE_VMXNET3) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 976 dev_err(&pdev->dev, "failed to find paired vmxnet3 device\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 977 pci_dev_put(pdev_net); 29c8d9eba550c6d Adit Ranadive 2016-10-02 978 ret = -ENODEV; 29c8d9eba550c6d Adit Ranadive 2016-10-02 979 goto err_free_cq_ring; 29c8d9eba550c6d Adit Ranadive 2016-10-02 980 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 981 29c8d9eba550c6d Adit Ranadive 2016-10-02 982 dev->netdev = pci_get_drvdata(pdev_net); 29c8d9eba550c6d Adit Ranadive 2016-10-02 983 pci_dev_put(pdev_net); 29c8d9eba550c6d Adit Ranadive 2016-10-02 984 if (!dev->netdev) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 985 dev_err(&pdev->dev, "failed to get vmxnet3 device\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 986 ret = -ENODEV; 29c8d9eba550c6d Adit Ranadive 2016-10-02 987 goto err_free_cq_ring; 29c8d9eba550c6d Adit Ranadive 2016-10-02 988 } 11e40f5c577624d Neil Horman 2018-06-29 989 dev_hold(dev->netdev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 990 29c8d9eba550c6d Adit Ranadive 2016-10-02 991 dev_info(&pdev->dev, "paired device to %s\n", dev->netdev->name); 29c8d9eba550c6d Adit Ranadive 2016-10-02 992 29c8d9eba550c6d Adit Ranadive 2016-10-02 993 /* Interrupt setup */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 994 ret = pvrdma_alloc_intrs(dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 995 if (ret) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 996 dev_err(&pdev->dev, "failed to allocate interrupts\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 997 ret = -ENOMEM; ff89b070b7c98eb Adit Ranadive 2017-01-19 998 goto err_free_cq_ring; 29c8d9eba550c6d Adit Ranadive 2016-10-02 999 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 1000 29c8d9eba550c6d Adit Ranadive 2016-10-02 1001 /* Allocate UAR table. */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 1002 ret = pvrdma_uar_table_init(dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1003 if (ret) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 1004 dev_err(&pdev->dev, "failed to allocate UAR table\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1005 ret = -ENOMEM; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1006 goto err_free_intrs; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1007 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 1008 29c8d9eba550c6d Adit Ranadive 2016-10-02 1009 /* Allocate GID table */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 1010 dev->sgid_tbl = kcalloc(dev->dsr->caps.gid_tbl_len, 29c8d9eba550c6d Adit Ranadive 2016-10-02 1011 sizeof(union ib_gid), GFP_KERNEL); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1012 if (!dev->sgid_tbl) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 1013 ret = -ENOMEM; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1014 goto err_free_uar_table; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1015 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 1016 dev_dbg(&pdev->dev, "gid table len %d\n", dev->dsr->caps.gid_tbl_len); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1017 29c8d9eba550c6d Adit Ranadive 2016-10-02 1018 pvrdma_enable_intrs(dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1019 29c8d9eba550c6d Adit Ranadive 2016-10-02 1020 /* Activate pvrdma device */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 1021 pvrdma_write_reg(dev, PVRDMA_REG_CTL, PVRDMA_DEVICE_CTL_ACTIVATE); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1022 29c8d9eba550c6d Adit Ranadive 2016-10-02 1023 /* Make sure the write is complete before reading status. */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 1024 mb(); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1025 29c8d9eba550c6d Adit Ranadive 2016-10-02 1026 /* Check if device was successfully activated */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 1027 ret = pvrdma_read_reg(dev, PVRDMA_REG_ERR); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1028 if (ret != 0) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 1029 dev_err(&pdev->dev, "failed to activate device\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1030 ret = -EFAULT; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1031 goto err_disable_intr; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1032 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 1033 29c8d9eba550c6d Adit Ranadive 2016-10-02 1034 /* Register IB device */ 29c8d9eba550c6d Adit Ranadive 2016-10-02 1035 ret = pvrdma_register_device(dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1036 if (ret) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 1037 dev_err(&pdev->dev, "failed to register IB device\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1038 goto err_disable_intr; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1039 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 1040 29c8d9eba550c6d Adit Ranadive 2016-10-02 1041 dev->nb_netdev.notifier_call = pvrdma_netdevice_event; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1042 ret = register_netdevice_notifier(&dev->nb_netdev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1043 if (ret) { 29c8d9eba550c6d Adit Ranadive 2016-10-02 1044 dev_err(&pdev->dev, "failed to register netdevice events\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1045 goto err_unreg_ibdev; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1046 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 1047 29c8d9eba550c6d Adit Ranadive 2016-10-02 1048 dev_info(&pdev->dev, "attached to device\n"); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1049 return 0; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1050 29c8d9eba550c6d Adit Ranadive 2016-10-02 1051 err_unreg_ibdev: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1052 ib_unregister_device(&dev->ib_dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1053 err_disable_intr: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1054 pvrdma_disable_intrs(dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1055 kfree(dev->sgid_tbl); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1056 err_free_uar_table: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1057 pvrdma_uar_table_cleanup(dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1058 err_free_intrs: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1059 pvrdma_free_irq(dev); 7bf3976d6cfd77c Christoph Hellwig 2017-02-15 1060 pci_free_irq_vectors(pdev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1061 err_free_cq_ring: 11e40f5c577624d Neil Horman 2018-06-29 1062 if (dev->netdev) { 11e40f5c577624d Neil Horman 2018-06-29 1063 dev_put(dev->netdev); 11e40f5c577624d Neil Horman 2018-06-29 1064 dev->netdev = NULL; 11e40f5c577624d Neil Horman 2018-06-29 1065 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 1066 pvrdma_page_dir_cleanup(dev, &dev->cq_pdir); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1067 err_free_async_ring: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1068 pvrdma_page_dir_cleanup(dev, &dev->async_pdir); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1069 err_free_slots: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1070 pvrdma_free_slots(dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1071 err_free_dsr: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1072 dma_free_coherent(&pdev->dev, sizeof(*dev->dsr), dev->dsr, 29c8d9eba550c6d Adit Ranadive 2016-10-02 1073 dev->dsrbase); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1074 err_uar_unmap: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1075 iounmap(dev->driver_uar.map); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1076 err_unmap_regs: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1077 iounmap(dev->regs); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1078 err_free_resource: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1079 pci_release_regions(pdev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1080 err_disable_pdev: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1081 pci_disable_device(pdev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1082 pci_set_drvdata(pdev, NULL); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1083 err_free_device: 29c8d9eba550c6d Adit Ranadive 2016-10-02 1084 mutex_lock(&pvrdma_device_list_lock); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1085 list_del(&dev->device_link); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1086 mutex_unlock(&pvrdma_device_list_lock); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1087 ib_dealloc_device(&dev->ib_dev); 29c8d9eba550c6d Adit Ranadive 2016-10-02 1088 return ret; 29c8d9eba550c6d Adit Ranadive 2016-10-02 1089 } 29c8d9eba550c6d Adit Ranadive 2016-10-02 1090 :::::: The code at line 842 was first introduced by commit :::::: 29c8d9eba550c6d73d17cc1618a9f5f2a7345aa1 IB: Add vmw_pvrdma driver :::::: TO: Adit Ranadive :::::: CC: Doug Ledford --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org